Skip to content

Commit dcc227a

Browse files
authored
Merge pull request #177 from gisce/test_validate_in_invoice_negative_ra_positive
Test para validar que una factura tipo RA cuando el origen es negativo
2 parents 4007f64 + 2a49a11 commit dcc227a

File tree

2 files changed

+158
-0
lines changed

2 files changed

+158
-0
lines changed

spec/serialization_spec.py

+84
Original file line numberDiff line numberDiff line change
@@ -1213,6 +1213,90 @@ def group_by_tax_rate(iva_values, in_invoice):
12131213
cuota_presentada
12141214
))
12151215

1216+
with description('en los datos de una factura recibida rectificativa '
1217+
'sin anuladora RA sobre una factura original negativa'):
1218+
with before.all:
1219+
self.in_invoice_RA = self.data_gen.get_in_invoice_RA_N_negative()
1220+
self.in_invoice_RA.rectifying_id.sii_registered = True
1221+
self.in_invoice_RA_obj = SII(self.in_invoice_RA).generate_object()
1222+
factura_rectificada = self.in_invoice_RA.rectifying_id
1223+
self.in_invoice_origin_obj = SII(factura_rectificada).generate_object()
1224+
self.fact_RA_recibida = (
1225+
self.in_invoice_RA_obj['SuministroLRFacturasRecibidas']
1226+
['RegistroLRFacturasRecibidas']
1227+
)
1228+
self.fact_origin = (
1229+
self.in_invoice_origin_obj['SuministroLRFacturasRecibidas']
1230+
['RegistroLRFacturasRecibidas']
1231+
)
1232+
1233+
with context('en los datos de rectificación'):
1234+
with it('el TipoRectificativa debe ser por sustitución (S)'):
1235+
expect(
1236+
self.fact_RA_recibida['FacturaRecibida']['TipoRectificativa']
1237+
).to(equal('S'))
1238+
with it('la FechaOperacion NO debe existir'):
1239+
expect(
1240+
self.fact_RA_recibida['FacturaRecibida'].get('FechaOperacion', False)
1241+
).to(equal(False))
1242+
with it('debe contener las FacturasRectificadas'):
1243+
expect(
1244+
self.fact_RA_recibida['FacturaRecibida']
1245+
['FacturasRectificadas']['IDFacturaRectificada'][0]
1246+
['NumSerieFacturaEmisor']
1247+
).to(equal(
1248+
self.in_invoice_RA.rectifying_id.origin
1249+
))
1250+
1251+
fecha_expedicion = (
1252+
self.fact_RA_recibida['FacturaRecibida']
1253+
['FacturasRectificadas']['IDFacturaRectificada'][0]
1254+
['FechaExpedicionFacturaEmisor']
1255+
)
1256+
expect(
1257+
datetime.strptime(
1258+
fecha_expedicion, '%d-%m-%Y'
1259+
).strftime('%Y-%m-%d')
1260+
).to(equal(
1261+
self.in_invoice_RA.rectifying_id.origin_date_invoice
1262+
))
1263+
1264+
with it('debe contener el ImporteRectificacion'):
1265+
expect(
1266+
self.fact_RA_recibida['FacturaRecibida']
1267+
['ImporteRectificacion']['BaseRectificada']
1268+
).to(equal(
1269+
-5.13
1270+
))
1271+
1272+
expect(
1273+
self.fact_RA_recibida['FacturaRecibida']
1274+
['ImporteRectificacion']['CuotaRectificada']
1275+
).to(equal(
1276+
-1.08
1277+
))
1278+
with it('los Importes de rectificacion debe ser igual que los datos de la factura original'):
1279+
base_presentada = sum(x['BaseImponible'] for x in
1280+
self.fact_origin['FacturaRecibida']['DesgloseFactura'][
1281+
'DesgloseIVA']['DetalleIVA'])
1282+
cuota_presentada = sum(
1283+
x.get('CuotaSoportada', 0.0) for x in
1284+
self.fact_origin['FacturaRecibida'][
1285+
'DesgloseFactura']['DesgloseIVA']['DetalleIVA'])
1286+
expect(
1287+
self.fact_RA_recibida['FacturaRecibida']
1288+
['ImporteRectificacion']['BaseRectificada']
1289+
).to(equal(
1290+
base_presentada
1291+
))
1292+
1293+
expect(
1294+
self.fact_RA_recibida['FacturaRecibida']
1295+
['ImporteRectificacion']['CuotaRectificada']
1296+
).to(equal(
1297+
cuota_presentada
1298+
))
1299+
12161300
with description('El XML Generado en una baja de una factura emitida'):
12171301
with before.all:
12181302
self.data_gen = DataGenerator()

spec/testing_data.py

+74
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,80 @@ def get_in_invoice_RA(self):
658658
)
659659
return invoice
660660

661+
def get_in_invoice_RA_N_negative(self):
662+
journal = Journal(
663+
name=u'Factura de Energía Rectificativa Recibida',
664+
article=self.article
665+
)
666+
tax_iva_21 = Tax(name='21% IVA Soportado', amount=0.21, type='percent')
667+
amount_total_n = -6.21
668+
amount_tax_n = -1.08
669+
base_amount_n = -5.13
670+
tax_line_n = [
671+
InvoiceTax(
672+
name='21% IVA Soportado', base=-5.13,
673+
tax_amount=-1.08, tax_id=tax_iva_21
674+
)
675+
]
676+
amount_total_ra = 14.65
677+
amount_tax_ra = 2.54
678+
base_amount_ra = 12.11
679+
tax_line_ra = [
680+
InvoiceTax(
681+
name='21% IVA Soportado', base=-5.13,
682+
tax_amount=-1.08, tax_id=tax_iva_21
683+
)
684+
]
685+
686+
rect_invoice = Invoice(
687+
invoice_type='in_invoice',
688+
journal_id=journal,
689+
rectificative_type='N',
690+
rectifying_id=False,
691+
number='FRecibRectificada{}'.format(self.invoice_number),
692+
origin='FRectRecibRectificadaOrigen{}'.format(self.invoice_number),
693+
partner_id=self.partner_invoice,
694+
address_contact_id=self.address_contact_id,
695+
company_id=self.company,
696+
amount_total=amount_total_n,
697+
amount_untaxed=base_amount_n,
698+
amount_tax=amount_tax_n,
699+
period_id=self.period,
700+
origin_date_invoice=self.origin_date_invoice,
701+
date_invoice=self.date_invoice,
702+
tax_line=tax_line_n,
703+
invoice_line=self.invoice_line,
704+
sii_registered=self.sii_registered,
705+
fiscal_position=self.fiscal_position,
706+
sii_description=self.sii_description,
707+
sii_in_clave_regimen_especial=self.sii_in_clave_regimen_especial,
708+
)
709+
710+
invoice = Invoice(
711+
invoice_type='in_invoice',
712+
journal_id=journal,
713+
rectificative_type='RA',
714+
rectifying_id=rect_invoice,
715+
number='FRectRecib{}'.format(self.invoice_number),
716+
origin='FRectRecibOrigen{}'.format(self.invoice_number),
717+
partner_id=self.partner_invoice,
718+
address_contact_id=self.address_contact_id,
719+
company_id=self.company,
720+
amount_total=amount_total_ra,
721+
amount_untaxed=base_amount_ra,
722+
amount_tax=amount_tax_ra,
723+
period_id=self.period,
724+
origin_date_invoice=self.origin_date_invoice,
725+
date_invoice=self.date_invoice,
726+
tax_line=tax_line_ra,
727+
invoice_line=self.invoice_line,
728+
sii_registered=self.sii_registered,
729+
fiscal_position=self.fiscal_position,
730+
sii_description=self.sii_description,
731+
sii_in_clave_regimen_especial=self.sii_in_clave_regimen_especial,
732+
)
733+
return invoice
734+
661735
def get_out_invoice_rescision(self):
662736
journal = Journal(
663737
name=u'Factura de Energía Rectificativa Rescision Emitida',

0 commit comments

Comments
 (0)