Skip to content

Commit

Permalink
Merge pull request #177 from gisce/test_validate_in_invoice_negative_…
Browse files Browse the repository at this point in the history
…ra_positive

Test para validar que una factura tipo RA cuando el origen es negativo
  • Loading branch information
guilleJB authored Oct 11, 2024
2 parents 4007f64 + 2a49a11 commit dcc227a
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 0 deletions.
84 changes: 84 additions & 0 deletions spec/serialization_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -1213,6 +1213,90 @@ def group_by_tax_rate(iva_values, in_invoice):
cuota_presentada
))

with description('en los datos de una factura recibida rectificativa '
'sin anuladora RA sobre una factura original negativa'):
with before.all:
self.in_invoice_RA = self.data_gen.get_in_invoice_RA_N_negative()
self.in_invoice_RA.rectifying_id.sii_registered = True
self.in_invoice_RA_obj = SII(self.in_invoice_RA).generate_object()
factura_rectificada = self.in_invoice_RA.rectifying_id
self.in_invoice_origin_obj = SII(factura_rectificada).generate_object()
self.fact_RA_recibida = (
self.in_invoice_RA_obj['SuministroLRFacturasRecibidas']
['RegistroLRFacturasRecibidas']
)
self.fact_origin = (
self.in_invoice_origin_obj['SuministroLRFacturasRecibidas']
['RegistroLRFacturasRecibidas']
)

with context('en los datos de rectificación'):
with it('el TipoRectificativa debe ser por sustitución (S)'):
expect(
self.fact_RA_recibida['FacturaRecibida']['TipoRectificativa']
).to(equal('S'))
with it('la FechaOperacion NO debe existir'):
expect(
self.fact_RA_recibida['FacturaRecibida'].get('FechaOperacion', False)
).to(equal(False))
with it('debe contener las FacturasRectificadas'):
expect(
self.fact_RA_recibida['FacturaRecibida']
['FacturasRectificadas']['IDFacturaRectificada'][0]
['NumSerieFacturaEmisor']
).to(equal(
self.in_invoice_RA.rectifying_id.origin
))

fecha_expedicion = (
self.fact_RA_recibida['FacturaRecibida']
['FacturasRectificadas']['IDFacturaRectificada'][0]
['FechaExpedicionFacturaEmisor']
)
expect(
datetime.strptime(
fecha_expedicion, '%d-%m-%Y'
).strftime('%Y-%m-%d')
).to(equal(
self.in_invoice_RA.rectifying_id.origin_date_invoice
))

with it('debe contener el ImporteRectificacion'):
expect(
self.fact_RA_recibida['FacturaRecibida']
['ImporteRectificacion']['BaseRectificada']
).to(equal(
-5.13
))

expect(
self.fact_RA_recibida['FacturaRecibida']
['ImporteRectificacion']['CuotaRectificada']
).to(equal(
-1.08
))
with it('los Importes de rectificacion debe ser igual que los datos de la factura original'):
base_presentada = sum(x['BaseImponible'] for x in
self.fact_origin['FacturaRecibida']['DesgloseFactura'][
'DesgloseIVA']['DetalleIVA'])
cuota_presentada = sum(
x.get('CuotaSoportada', 0.0) for x in
self.fact_origin['FacturaRecibida'][
'DesgloseFactura']['DesgloseIVA']['DetalleIVA'])
expect(
self.fact_RA_recibida['FacturaRecibida']
['ImporteRectificacion']['BaseRectificada']
).to(equal(
base_presentada
))

expect(
self.fact_RA_recibida['FacturaRecibida']
['ImporteRectificacion']['CuotaRectificada']
).to(equal(
cuota_presentada
))

with description('El XML Generado en una baja de una factura emitida'):
with before.all:
self.data_gen = DataGenerator()
Expand Down
74 changes: 74 additions & 0 deletions spec/testing_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -658,6 +658,80 @@ def get_in_invoice_RA(self):
)
return invoice

def get_in_invoice_RA_N_negative(self):
journal = Journal(
name=u'Factura de Energía Rectificativa Recibida',
article=self.article
)
tax_iva_21 = Tax(name='21% IVA Soportado', amount=0.21, type='percent')
amount_total_n = -6.21
amount_tax_n = -1.08
base_amount_n = -5.13
tax_line_n = [
InvoiceTax(
name='21% IVA Soportado', base=-5.13,
tax_amount=-1.08, tax_id=tax_iva_21
)
]
amount_total_ra = 14.65
amount_tax_ra = 2.54
base_amount_ra = 12.11
tax_line_ra = [
InvoiceTax(
name='21% IVA Soportado', base=-5.13,
tax_amount=-1.08, tax_id=tax_iva_21
)
]

rect_invoice = Invoice(
invoice_type='in_invoice',
journal_id=journal,
rectificative_type='N',
rectifying_id=False,
number='FRecibRectificada{}'.format(self.invoice_number),
origin='FRectRecibRectificadaOrigen{}'.format(self.invoice_number),
partner_id=self.partner_invoice,
address_contact_id=self.address_contact_id,
company_id=self.company,
amount_total=amount_total_n,
amount_untaxed=base_amount_n,
amount_tax=amount_tax_n,
period_id=self.period,
origin_date_invoice=self.origin_date_invoice,
date_invoice=self.date_invoice,
tax_line=tax_line_n,
invoice_line=self.invoice_line,
sii_registered=self.sii_registered,
fiscal_position=self.fiscal_position,
sii_description=self.sii_description,
sii_in_clave_regimen_especial=self.sii_in_clave_regimen_especial,
)

invoice = Invoice(
invoice_type='in_invoice',
journal_id=journal,
rectificative_type='RA',
rectifying_id=rect_invoice,
number='FRectRecib{}'.format(self.invoice_number),
origin='FRectRecibOrigen{}'.format(self.invoice_number),
partner_id=self.partner_invoice,
address_contact_id=self.address_contact_id,
company_id=self.company,
amount_total=amount_total_ra,
amount_untaxed=base_amount_ra,
amount_tax=amount_tax_ra,
period_id=self.period,
origin_date_invoice=self.origin_date_invoice,
date_invoice=self.date_invoice,
tax_line=tax_line_ra,
invoice_line=self.invoice_line,
sii_registered=self.sii_registered,
fiscal_position=self.fiscal_position,
sii_description=self.sii_description,
sii_in_clave_regimen_especial=self.sii_in_clave_regimen_especial,
)
return invoice

def get_out_invoice_rescision(self):
journal = Journal(
name=u'Factura de Energía Rectificativa Rescision Emitida',
Expand Down

0 comments on commit dcc227a

Please sign in to comment.