Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FIX] l10n_it_fatturapa_in - Gruppi IVA #3810

Open
wants to merge 5 commits into
base: 16.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

108 changes: 108 additions & 0 deletions l10n_it_fatturapa_in/tests/data/IT03309970733_VATG1.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>05979361218</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>VATG1</ProgressivoInvio>
<FormatoTrasmissione>FPA12</FormatoTrasmissione>
<CodiceDestinatario>UFPQ1O</CodiceDestinatario>
</DatiTrasmissione>
<CedentePrestatore>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>MRORSS90E25B111T</CodiceFiscale>
<Anagrafica>
<Denominazione>SOCIETA' ALPHA BETA SRL</Denominazione>
</Anagrafica>
<RegimeFiscale>RF02</RegimeFiscale>
</DatiAnagrafici>
<Sede>
<Indirizzo>VIALE ROMA 543B</Indirizzo>
<CAP>07100</CAP>
<Comune>SASSARI</Comune>
<Provincia>SS</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CedentePrestatore>
<CessionarioCommittente>
<DatiAnagrafici>
<CodiceFiscale>80213330584</CodiceFiscale>
<Anagrafica>
<Denominazione>AMMINISTRAZIONE BETA</Denominazione>
</Anagrafica>
</DatiAnagrafici>
<Sede>
<Indirizzo>VIA TORINO 38-B</Indirizzo>
<CAP>00145</CAP>
<Comune>ROMA</Comune>
<Provincia>RM</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CessionarioCommittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
<DatiGeneraliDocumento>
<TipoDocumento>TD01</TipoDocumento>
<Divisa>EUR</Divisa>
<Data>2015-02-16</Data>
<Numero>FT/2015/0009</Numero>
<Causale>Rif ordine MAPA: --- Nr. Identificativo Ordine 1234567</Causale>
</DatiGeneraliDocumento>
</DatiGenerali>
<DatiBeniServizi>
<DettaglioLinee>
<NumeroLinea>1</NumeroLinea>
<CodiceArticolo>
<CodiceTipo>SA</CodiceTipo>
<CodiceValore>123456-01</CodiceValore>
</CodiceArticolo>
<Descrizione>USB</Descrizione>
<Quantita>4.00</Quantita>
<UnitaMisura>PZ</UnitaMisura>
<PrezzoUnitario>177.00</PrezzoUnitario>
<ScontoMaggiorazione>
<Tipo>SC</Tipo>
<Percentuale>10.00</Percentuale>
</ScontoMaggiorazione>
<PrezzoTotale>637.20</PrezzoTotale>
<AliquotaIVA>22.00</AliquotaIVA>
<RiferimentoAmministrazione>D122353</RiferimentoAmministrazione>
</DettaglioLinee>
<DettaglioLinee>
<NumeroLinea>2</NumeroLinea>
<CodiceArticolo>
<CodiceTipo>SA</CodiceTipo>
<CodiceValore>123456-04</CodiceValore>
</CodiceArticolo>
<Descrizione>USB</Descrizione>
<Quantita>1.00</Quantita>
<UnitaMisura>PZ</UnitaMisura>
<PrezzoUnitario>596.00</PrezzoUnitario>
<ScontoMaggiorazione>
<Tipo>SC</Tipo>
<Percentuale>10.00</Percentuale>
</ScontoMaggiorazione>
<PrezzoTotale>536.40</PrezzoTotale>
<AliquotaIVA>22.00</AliquotaIVA>
<RiferimentoAmministrazione>D122354</RiferimentoAmministrazione>
</DettaglioLinee>
<DatiRiepilogo>
<AliquotaIVA>22.00</AliquotaIVA>
<ImponibileImporto>1173.60</ImponibileImporto>
<Imposta>258.19</Imposta>
<EsigibilitaIVA>S</EsigibilitaIVA>
<RiferimentoNormativo>SCISSIONE PAGAMENTI Split Payment art.17-ter del DPR 633/1972</RiferimentoNormativo>
</DatiRiepilogo>
</DatiBeniServizi>
</FatturaElettronicaBody>
</p:FatturaElettronica>
141 changes: 141 additions & 0 deletions l10n_it_fatturapa_in/tests/data/IT03309970733_VATG2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>05979361218</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>VATG2</ProgressivoInvio>
<FormatoTrasmissione>FPA12</FormatoTrasmissione>
<CodiceDestinatario>UFPQ1O</CodiceDestinatario>
</DatiTrasmissione>
<CedentePrestatore>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>03533590174</CodiceFiscale>
<Anagrafica>
<Denominazione>SOCIETA' ALPHA BETA SRL</Denominazione>
</Anagrafica>
<RegimeFiscale>RF02</RegimeFiscale>
</DatiAnagrafici>
<Sede>
<Indirizzo>VIALE ROMA 543B</Indirizzo>
<CAP>07100</CAP>
<Comune>SASSARI</Comune>
<Provincia>SS</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CedentePrestatore>
<RappresentanteFiscale>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Rappresentante fiscale</Denominazione>
</Anagrafica>
</DatiAnagrafici>
</RappresentanteFiscale>
<CessionarioCommittente>
<DatiAnagrafici>
<CodiceFiscale>80213330584</CodiceFiscale>
<Anagrafica>
<Denominazione>AMMINISTRAZIONE BETA</Denominazione>
</Anagrafica>
</DatiAnagrafici>
<Sede>
<Indirizzo>VIA TORINO 38-B</Indirizzo>
<CAP>00145</CAP>
<Comune>ROMA</Comune>
<Provincia>RM</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CessionarioCommittente>
<TerzoIntermediarioOSoggettoEmittente>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Terzo Intermediario</Denominazione>
</Anagrafica>
</DatiAnagrafici>
</TerzoIntermediarioOSoggettoEmittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
<DatiGeneraliDocumento>
<TipoDocumento>TD01</TipoDocumento>
<Divisa>EUR</Divisa>
<Data>2015-02-16</Data>
<Numero>FT/2015/0009</Numero>
<Causale>Rif ordine MAPA: --- Nr. Identificativo Ordine 1234567</Causale>
</DatiGeneraliDocumento>
<DatiTrasporto>
<DatiAnagraficiVettore>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>03309970733</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Trasporto spa</Denominazione>
</Anagrafica>
</DatiAnagraficiVettore>
</DatiTrasporto>
</DatiGenerali>
<DatiBeniServizi>
<DettaglioLinee>
<NumeroLinea>1</NumeroLinea>
<CodiceArticolo>
<CodiceTipo>SA</CodiceTipo>
<CodiceValore>123456-01</CodiceValore>
</CodiceArticolo>
<Descrizione>USB</Descrizione>
<Quantita>4.00</Quantita>
<UnitaMisura>PZ</UnitaMisura>
<PrezzoUnitario>177.00</PrezzoUnitario>
<ScontoMaggiorazione>
<Tipo>SC</Tipo>
<Percentuale>10.00</Percentuale>
</ScontoMaggiorazione>
<PrezzoTotale>637.20</PrezzoTotale>
<AliquotaIVA>22.00</AliquotaIVA>
<RiferimentoAmministrazione>D122353</RiferimentoAmministrazione>
</DettaglioLinee>
<DettaglioLinee>
<NumeroLinea>2</NumeroLinea>
<CodiceArticolo>
<CodiceTipo>SA</CodiceTipo>
<CodiceValore>123456-04</CodiceValore>
</CodiceArticolo>
<Descrizione>USB</Descrizione>
<Quantita>1.00</Quantita>
<UnitaMisura>PZ</UnitaMisura>
<PrezzoUnitario>596.00</PrezzoUnitario>
<ScontoMaggiorazione>
<Tipo>SC</Tipo>
<Percentuale>10.00</Percentuale>
</ScontoMaggiorazione>
<PrezzoTotale>536.40</PrezzoTotale>
<AliquotaIVA>22.00</AliquotaIVA>
<RiferimentoAmministrazione>D122354</RiferimentoAmministrazione>
</DettaglioLinee>
<DatiRiepilogo>
<AliquotaIVA>22.00</AliquotaIVA>
<ImponibileImporto>1173.60</ImponibileImporto>
<Imposta>258.19</Imposta>
<EsigibilitaIVA>S</EsigibilitaIVA>
<RiferimentoNormativo>SCISSIONE PAGAMENTI Split Payment art.17-ter del DPR 633/1972</RiferimentoNormativo>
</DatiRiepilogo>
</DatiBeniServizi>
</FatturaElettronicaBody>
</p:FatturaElettronica>
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>02780790107</IdCodice>
<IdCodice>39768960237</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>SOCIETA' ALPHA SRL</Denominazione>
Expand Down
113 changes: 108 additions & 5 deletions l10n_it_fatturapa_in/tests/test_import_fatturapa_xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,103 @@ def test_54_xml_import(self):
self.assertEqual(invoice.invoice_line_ids[0].price_subtotal, 1.5)
self.assertEqual(invoice.move_type, "in_refund")

def test_55_duplicated_partner(self):
"""If there are multiple partners with the same VAT
and we try to import an Electronic Invoice for that VAT,
an inconsistency is logged."""
# Arrange: There are two partners with the same VAT
common_vat = "IT03309970733"
partners = self.env["res.partner"].create(
[
{
"name": "Test partner1",
"vat": common_vat,
},
{
"name": "Test partner2",
"vat": common_vat,
},
]
)

# Update any conflicting partner from other tests
existing_partners = self.env["res.partner"].search(
[
("vat", "=", common_vat),
("id", "not in", partners.ids),
],
)
existing_partners.update(
{
"vat": "IT12345670017",
}
)

# Assert: The import wizard can't choose between the two created partners
res = self.run_wizard("VATG1", "IT03309970733_VATG1.xml")
invoice = self.invoice_model.search(res.get("domain"))
inconsistencies = invoice.inconsistencies
self.assertIn("Two distinct partners", inconsistencies)
self.assertIn("VAT number", inconsistencies)
for partner in partners:
self.assertIn(partner.name, inconsistencies)

def test_56_xml_import_vat_group(self):
"""Importing bills from VAT groups creates different suppliers."""
# Arrange: The involved XMLs contain suppliers from a VAT group:
# the suppliers have the same VAT `common_vat`,
# but each supplier has a different fiscal code
common_vat = "IT03309970733"
vat_group_1_fiscalcode = "MRORSS90E25B111T"
vat_group_2_fiscalcode = "03533590174"

# Update any conflicting partner from other tests
existing_partners = self.env["res.partner"].search(
[
"|",
("vat", "=", common_vat),
(
"fiscalcode",
"in",
(
vat_group_1_fiscalcode,
vat_group_2_fiscalcode,
),
),
],
)
existing_partners.update(
{
"vat": "IT12345670017",
"is_company": True,
"fiscalcode": "1234567890123456",
}
)

# Act: Import the XMLs,
# checking that the suppliers match the data in the XML
res = self.run_wizard("VATG1_group", "IT03309970733_VATG1.xml")
invoice_model = res.get("res_model")
invoice_domain = res.get("domain")
invoice_vat_group_1 = self.env[invoice_model].search(invoice_domain)
vat_group_1_partner = invoice_vat_group_1.partner_id
self.assertEqual(vat_group_1_partner.vat, common_vat)
self.assertEqual(vat_group_1_partner.fiscalcode, vat_group_1_fiscalcode)

res = self.run_wizard("VATG2", "IT03309970733_VATG2.xml")
invoice_model = res.get("res_model")
invoice_domain = res.get("domain")
invoice_vat_group_2 = self.env[invoice_model].search(invoice_domain)
vat_group_2_partner = invoice_vat_group_2.partner_id
self.assertEqual(vat_group_2_partner.vat, common_vat)
self.assertEqual(vat_group_2_partner.fiscalcode, vat_group_2_fiscalcode)

# Assert: Two different partners have been created
self.assertNotEqual(
vat_group_1_partner,
vat_group_2_partner,
)

def test_01_xml_link(self):
"""
E-invoice lines are created.
Expand Down Expand Up @@ -1060,13 +1157,18 @@ def test_01_xml_zero_quantity_line(self):

def test_xml_import_summary_tax_rate(self):
# Invoice with positive total. Detail Level: '1' -- Tax Rate
# Note: this test depends on test_14_xml_import for supplier creation
supplier = self.env["res.partner"].search([("vat", "=", "IT02780790107")])[0]
# in order to make the system create the invoice lines
supplier.e_invoice_detail_level = "1"
supplier = self.env["res.partner"].create(
{
"name": "SOCIETA' ALPHA SRL",
"vat": "IT39768960237",
# in order to make the system create the invoice lines
"e_invoice_detail_level": "1",
}
)
res = self.run_wizard("test_summary_tax_rate", "IT05979361218_ripilogoiva.xml")
invoice_id = res.get("domain")[0][2][0]
invoice = self.invoice_model.browse(invoice_id)
self.assertEqual(invoice.partner_id, supplier)
self.assertEqual(invoice.amount_total, 204.16)
self.assertEqual(len(invoice.invoice_line_ids), 2)

Expand Down Expand Up @@ -1127,7 +1229,8 @@ def test_access_other_user_e_invoice_attachments(self):
self.assertFalse(user.has_group(access_right_group_xmlid))
self.assertNotEqual(user, other_user)
import_action = self.run_wizard(
"access_other_user_e_invoice_attachments", "IT02780790107_11004.xml"
"access_other_user_e_invoice_attachments",
"IT02780790107_11004_other_user_attachment.xml",
)
# Assert
with self.with_user(other_user.login):
Expand Down
Loading
Loading