[FIX] l10n_it_edi_withholding: Fix Natura field on Pension Fund

Reproduce:

    Install l10n_it_edi_withholding
    Have an invoice with lines with two taxes:
    . 4% INPS
    . 0% with exoneration and exoneration kind
    Post
    Send to Tax Agency
    Tax Agency rejects it

The Exoneration Kind tag is related to the VAT tax it is applied to, not
to the Pension Fund tax itself, so we have to modify the template.
A test has been added for the case.

Task link: https://www.odoo.com/web#model=project.task&id=3495670
opw-3495670

closes odoo/odoo#142543

X-original-commit: cbbdd974da4ce55a7b10fba39db4f9278f161808
Signed-off-by: Josse Colpaert <jco@odoo.com>
Signed-off-by: Paolo Gatti (pgi) <pgi@odoo.com>
This commit is contained in:
Paolo Gatti (pgi)
2023-11-20 03:46:47 +00:00
parent 8a0c5df159
commit d4c70ae1e3
3 changed files with 189 additions and 2 deletions
@@ -21,8 +21,8 @@
<ImponibileCassa t-esc="format_monetary(pension_fund.base_amount, currency)"/>
<AliquotaIVA t-esc="format_numbers(pension_fund.vat_tax.amount or 0.0)"/>
<Ritenuta t-if="pension_fund.withholding_tax and pension_fund.withholding_tax.sequence > pension_fund.tax.sequence">SI</Ritenuta>
<Natura t-if="pension_fund.tax.l10n_it_exempt_reason" t-esc="format_alphanumeric(pension_fund.tax.l10n_it_exempt_reason)"/>
<RiferimentoAmministrazione t-if="pension_fund.tax.description" t-esc="format_alphanumeric(pension_fund.tax.description, 20)"/>
<Natura t-if="pension_fund.vat_tax.l10n_it_exempt_reason" t-esc="format_alphanumeric(pension_fund.vat_tax.l10n_it_exempt_reason)"/>
<RiferimentoAmministrazione t-if="pension_fund.vat_tax.description" t-esc="format_alphanumeric(pension_fund.vat_tax.description, 20)"/>
</DatiCassaPrevidenziale>
</t>
</xpath>
@@ -0,0 +1,137 @@
<?xml version='1.0' encoding='UTF-8'?>
<p:FatturaElettronica xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 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" versione="FPR12">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>01234560157</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>___ignore___</ProgressivoInvio>
<FormatoTrasmissione>FPR12</FormatoTrasmissione>
<CodiceDestinatario>0000000</CodiceDestinatario>
<ContattiTrasmittente>
<Telefono>0266766700</Telefono>
<Email>test@test.it</Email>
</ContattiTrasmittente>
</DatiTrasmissione>
<CedentePrestatore>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>01234560157</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>01234560157</CodiceFiscale>
<Anagrafica>
<Denominazione>company_2_data</Denominazione>
</Anagrafica>
<RegimeFiscale>RF01</RegimeFiscale>
</DatiAnagrafici>
<Sede>
<Indirizzo>1234 Test Street </Indirizzo>
<CAP>12345</CAP>
<Comune>Prova</Comune>
<Nazione>IT</Nazione>
</Sede>
</CedentePrestatore>
<CessionarioCommittente>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>00465840031</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>93026890017</CodiceFiscale>
<Anagrafica>
<Denominazione>Alessi</Denominazione>
</Anagrafica>
</DatiAnagrafici>
<Sede>
<Indirizzo>Via Privata Alessi 6</Indirizzo>
<CAP>28887</CAP>
<Comune>Milan</Comune>
<Nazione>IT</Nazione>
</Sede>
</CessionarioCommittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
<DatiGeneraliDocumento>
<TipoDocumento>TD01</TipoDocumento>
<Divisa>EUR</Divisa>
<Data>___ignore___</Data>
<Numero>___ignore___</Numero>
<DatiCassaPrevidenziale>
<TipoCassa>TC22</TipoCassa>
<AlCassa>4.00</AlCassa>
<ImportoContributoCassa>30.00</ImportoContributoCassa>
<ImponibileCassa>750.00</ImponibileCassa>
<AliquotaIVA>0.00</AliquotaIVA>
<Natura>N2.2</Natura>
</DatiCassaPrevidenziale>
<ImportoTotaleDocumento>780.00</ImportoTotaleDocumento>
</DatiGeneraliDocumento>
</DatiGenerali>
<DatiBeniServizi>
<DettaglioLinee>
<NumeroLinea>1</NumeroLinea>
<Descrizione>
Ordinary accounting service for the year
</Descrizione>
<Quantita>1.00</Quantita>
<PrezzoUnitario>350.000000</PrezzoUnitario>
<PrezzoTotale>350.00</PrezzoTotale>
<AliquotaIVA>0.00</AliquotaIVA>
<Natura>N2.2</Natura>
</DettaglioLinee>
<DettaglioLinee>
<NumeroLinea>2</NumeroLinea>
<Descrizione>
Balance deposit for the past year
</Descrizione>
<Quantita>1.00</Quantita>
<PrezzoUnitario>300.000000</PrezzoUnitario>
<PrezzoTotale>300.00</PrezzoTotale>
<AliquotaIVA>0.00</AliquotaIVA>
<Natura>N2.2</Natura>
</DettaglioLinee>
<DettaglioLinee>
<NumeroLinea>3</NumeroLinea>
<Descrizione>
Ordinary accounting service for the trimester
</Descrizione>
<Quantita>1.00</Quantita>
<PrezzoUnitario>50.000000</PrezzoUnitario>
<PrezzoTotale>50.00</PrezzoTotale>
<AliquotaIVA>0.00</AliquotaIVA>
<Natura>N2.2</Natura>
</DettaglioLinee>
<DettaglioLinee>
<NumeroLinea>4</NumeroLinea>
<Descrizione>
Electronic invoices management
</Descrizione>
<Quantita>1.00</Quantita>
<PrezzoUnitario>50.000000</PrezzoUnitario>
<PrezzoTotale>50.00</PrezzoTotale>
<AliquotaIVA>0.00</AliquotaIVA>
<Natura>N2.2</Natura>
</DettaglioLinee>
<DatiRiepilogo>
<AliquotaIVA>0.00</AliquotaIVA>
<Natura>N2.2</Natura>
<ImponibileImporto>780.00</ImponibileImporto>
<Imposta>0.00</Imposta>
<EsigibilitaIVA>I</EsigibilitaIVA>
<RiferimentoNormativo>Fatture emesse o ricevute da contribuenti forfettari o minimi</RiferimentoNormativo>
</DatiRiepilogo>
</DatiBeniServizi>
<DatiPagamento>
<CondizioniPagamento>TP02</CondizioniPagamento>
<DettaglioPagamento>
<ModalitaPagamento>MP05</ModalitaPagamento>
<DataScadenzaPagamento>___ignore___</DataScadenzaPagamento>
<ImportoPagamento>780.00</ImportoPagamento>
<CodicePagamento>___ignore___</CodicePagamento>
</DettaglioPagamento>
</DatiPagamento>
</FatturaElettronicaBody>
</p:FatturaElettronica>
@@ -26,6 +26,17 @@ class TestWithholdingAndPensionFundTaxes(TestItEdi):
cls.enasarco_sale_tax = find_tax_by_ref('enasarcov')
cls.withholding_purchase_tax_23 = find_tax_by_ref('23awo')
cls.enasarco_purchase_tax = find_tax_by_ref('enasarcoa')
cls.inps_tax = find_tax_by_ref('4vinps')
cls.zero_tax = cls.env['account.tax'].with_company(cls.company).create({
'name': 'ZeroTax',
'sequence': 31,
'type_tax_use': 'sale',
'amount': 0.0,
'amount_type': 'percent',
'l10n_it_exempt_reason': 'N2.2',
'l10n_it_law_reference': 'Fatture emesse o ricevute da contribuenti forfettari o minimi',
})
cls.withholding_sale_line = {
'name': 'withholding_line',
@@ -56,6 +67,12 @@ class TestWithholdingAndPensionFundTaxes(TestItEdi):
])]
}
cls.inps_sale_line = {
'name': 'inps_line',
'quantity': 1,
'tax_ids': [(6, 0, [cls.inps_tax.id, cls.zero_tax.id])]
}
invoice_data = cls.get_real_client_invoice_data()
cls.withholding_tax_invoice = cls.env['account.move'].with_company(cls.company).create({
@@ -103,9 +120,25 @@ class TestWithholdingAndPensionFundTaxes(TestItEdi):
]
})
cls.inps_tax_invoice = cls.env['account.move'].with_company(cls.company).create({
'move_type': 'out_invoice',
'company_id': cls.company.id,
'partner_id': cls.italian_partner_a.id,
'invoice_date': datetime.date(2022, 3, 24),
'invoice_date_due': datetime.date(2022, 3, 24),
'invoice_line_ids': [
(0, 0, {
**cls.inps_sale_line,
'name': name,
'price_unit': price,
}) for (name, price) in invoice_data.lines
]
})
cls.withholding_tax_invoice._post()
cls.pension_fund_tax_invoice._post()
cls.enasarco_tax_invoice._post()
cls.inps_tax_invoice._post()
cls.module = 'l10n_it_edi_withholding'
@@ -261,3 +294,20 @@ class TestWithholdingAndPensionFundTaxes(TestItEdi):
self.assertEqual(self.enasarco_purchase_tax, enasarco_imported_tax)
self.assertEqual(-8.5, enasarco_imported_tax.amount)
self.assertEqual(self.withholding_purchase_tax_23, line.tax_ids.filtered(lambda x: x.l10n_it_withholding_reason == 'ZO'))
def test_inps_tax_export(self):
"""
Invoice
-----------------------------------------------------------------
Ordinary accounting service for the year 350.00
Balance deposit for the past year 300.00
Ordinary accounting service for the trimester 50.00
Electronic invoices management 50.00
-----------------------------------------------------------------
Total untaxed: 750.00
VAT: 0% of Untaxed Amount 0.00
INPS: 4% of Untaxed Amount 30.00
Document total: Taxed Amount 780.00
Payment amount: Document total 780.00
"""
self._assert_export_invoice(self.inps_tax_invoice, 'inps_tax_invoice.xml')