Differenze di arrotondamento

Come prevenire e gestire correttamente le differenze di arrotondamento nelle fatture UBL: PayableRoundingAmount, arrotondamento IVA e prezzi IVA inclusa.

Uno dei messaggi di errore più frustranti durante l'invio di e-fatture riguarda una differenza di arrotondamento. I totali IVA non corrispondono agli importi delle righe, oppure il totale della fattura si discosta di un centesimo dalla somma calcolata. Il risultato: la fattura viene respinta durante la validazione. Questo articolo spiega da dove provengono le differenze di arrotondamento e come prevenirle o risolverle.

Perché si verificano le differenze di arrotondamento?

Le differenze di arrotondamento nascono dalla combinazione di tre fattori: moltiplicazione, divisione e arrotondamento a due decimali. Alcuni esempi:

Prezzo unitario con molti decimali. Un prezzo di 3,333... euro per unità x 3 unità = 9,999 euro. Arrotondato diventa 10,00 euro. Ma se prima si arrotonda il prezzo unitario a 3,33 e poi si moltiplica: 3,33 x 3 = 9,99. Un centesimo di differenza.

IVA per riga rispetto all'IVA per totale. Se si calcola l'IVA per ogni riga della fattura e la si arrotonda, per poi sommare i risultati, la somma può differire dall'IVA calcolata sul totale. Con il 21% di IVA su 33,33 euro si ottengono 7,00 euro (arrotondati). Ma il 21% su 3 x 33,33 = 21% su 99,99 = 21,00 euro. Mentre 3 x 7,00 = 21,00 euro. In questo caso il risultato è corretto, ma con altri importi potrebbe non esserlo.

Prezzi IVA inclusa. Alcuni settori (retail, ristorazione) lavorano con prezzi IVA inclusa. L'importo netto deve essere ricalcolato, il che introduce un ulteriore momento di arrotondamento.

Come UBL gestisce le differenze di arrotondamento
Numero di decimali: regole attuali e future

EN 16931-1:2017 (versione di produzione attuale) prescrive che tutti gli importi vengano arrotondati a 2 decimali, indipendentemente dalla valuta.

La revisione EN 16931-1:2026 (approvazione CEN il 13 marzo 2026, urn:cen.eu:en16931:2026) sostituisce questo con un numero di decimali dipendente dalla valuta: il numero di decimali = la colonna "minor unit" di ISO 4217 per la valuta utilizzata. L'implementazione Peppol tramite OpenPeppol è prevista come BIS Billing 4.0 (indicativamente 2027). Fino a quando questa versione non sarà in produzione, si applica la regola attuale dei 2 decimali.

Eccezioni nel 2026 (fisse, indipendentemente dalla valuta):

  • BT-129 Invoiced quantity: 4 decimali.
  • BT-146 Item net price, BT-147 Item price discount, BT-148 Item gross price: minor unit ISO 4217 + 2 decimali aggiuntivi.
  • BT-149 Item price base quantity: 2 decimali.
  • Campi percentuale (tra cui BT-138 percentuale di sconto, BT-152 aliquota IVA): 2 decimali.

Impatto su eConnect: le fatture in uscita vengono sempre inviate in euro (minor unit 2) — nessun cambiamento. Le fatture in entrata possono contenere valute con minor unit fino a 4 — il trattamento deve gestire fino a 4 decimali. Vedere anche EN 16931-1:2026 principali modifiche per la panoramica completa.

PayableRoundingAmount

Lo standard UBL prevede un elemento specifico per le differenze di arrotondamento: PayableRoundingAmount nel blocco LegalMonetaryTotal. Questo elemento assorbe piccole differenze di arrotondamento, consentendo al PayableAmount di essere un importo tondo:

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">99.99</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">99.99</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="EUR">120.99</cbc:TaxInclusiveAmount>
  <cbc:PayableRoundingAmount currencyID="EUR">0.01</cbc:PayableRoundingAmount>
  <cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

La differenza di 0,01 euro viene indicata esplicitamente. Le regole di validazione ammettono un PayableRoundingAmount, a condizione che la differenza sia sufficientemente piccola (di norma al massimo 1 euro, a seconda del profilo).

XPath: Invoice/LegalMonetaryTotal/PayableRoundingAmount.

Esempio 1 (arrotondamento per eccesso): TaxInclusiveAmount è 9,99 euro, l'importo da pagare desiderato è 10,00 euro. Quindi PayableRoundingAmount = 0,01 euro e PayableAmount = 10,00 euro.

Esempio 2 (nessuna modifica a PayableAmount): con un calcolo del prezzo a 4 decimali può verificarsi una micro-differenza, ad esempio 8,2646 × 1,21 = 10,000166. In quel caso PayableAmount rimane invariato e non è necessario alcun PayableRoundingAmount.

Arrotondamento IVA per aliquota

Il calcolo dell'IVA in una fattura UBL avviene per aliquota IVA, non per riga. Tutti gli importi delle righe con la stessa aliquota IVA vengono sommati per ottenere la base imponibile (TaxableAmount), sulla quale viene calcolata l'IVA. Questo evita di arrotondare per ogni riga e di ottenere una differenza di arrotondamento cumulativa.

La formula è:

TaxableAmount = somma dei LineExtensionAmount per categoria IVA
              - AllowanceTotalAmount per categoria IVA
              + ChargeTotalAmount per categoria IVA

TaxAmount = TaxableAmount × Percent / 100 (arrotondato a 2 decimali)

Importante: calcoli sempre l'IVA sulla base imponibile totale per aliquota, non per riga. Il calcolo dell'IVA per riga è la causa più comune di differenze di arrotondamento.

Prezzi IVA inclusa

Con prezzi IVA inclusa, l'importo netto deve essere ricalcolato. L'approccio standard è:

  1. Calcolare l'importo netto per riga: lordo / (1 + aliquota IVA/100)
  2. Arrotondare a 2 decimali
  3. Il LineExtensionAmount corrisponde a questo importo netto
  4. La differenza tra la somma di tutti gli importi netti delle righe e il totale lordo meno l'IVA può generare una differenza di arrotondamento
  5. Questa viene assorbita dal PayableRoundingAmount
<!-- Prezzo IVA inclusa: €12,10 per unità, 3 unità -->
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="EA">3</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="EUR">30.00</cbc:LineExtensionAmount>
  <cac:Price>
    <cbc:PriceAmount currencyID="EUR">10.00</cbc:PriceAmount>
  </cac:Price>
</cac:InvoiceLine>

In questo esempio il prezzo IVA inclusa è 12,10 euro. L'importo netto è 10,00 euro per unità (12,10 / 1,21). Per 3 unità = 30,00 euro. IVA: 21% di 30,00 = 6,30 euro. Totale: 36,30 euro. Questo corrisponde esattamente a 3 x 12,10 euro. Ma con prezzi che non sono divisibili in modo esatto, si verifica una differenza.

Come eConnect gestisce questa situazione

eConnect valida ogni fattura verificando la coerenza interna. Se è presente una piccola differenza di arrotondamento che rientra nella tolleranza, la fattura viene accettata. In caso di scostamenti più significativi, si riceve un messaggio di errore chiaro che indica dove si trova la differenza.

La funzione di riparazione automatica XML di eConnect può, in alcuni casi, aggiungere un PayableRoundingAmount mancante se la differenza è inferiore al limite di tolleranza. Tuttavia, è sempre preferibile gestire correttamente l'arrotondamento nel proprio software.

Regole pratiche
  1. Calcolare l'IVA per aliquota, non per riga. Sommare prima tutti gli importi delle righe per aliquota IVA, quindi calcolare l'IVA su quel totale.
  2. Arrotondare solo alla fine. Lavorare internamente con più di due decimali e arrotondare solo al momento di compilare gli elementi XML.
  3. Utilizzare PayableRoundingAmount per l'ultimo centesimo. Se nonostante un corretto arrotondamento rimane una piccola differenza, assorbirla con questo elemento.
  4. Verificare la somma. TaxExclusiveAmount + TaxAmount deve essere uguale a TaxInclusiveAmount. E TaxInclusiveAmount meno PrepaidAmount più PayableRoundingAmount deve essere uguale a PayableAmount.
  5. Testare con il Validator eConnect. Inviare la fattura al validatore prima di spedirla. Il validatore controlla tutte le regole di calcolo.
Domande frequenti
Come si prevengono le differenze di arrotondamento nella fattura?

Calcoli l'IVA per aliquota (non per riga), lavori internamente con più di due decimali e arrotondi solo al momento di compilare gli elementi XML. Se nonostante un corretto arrotondamento rimane una piccola differenza, la assorba con l'elemento PayableRoundingAmount.

Che cos'è PayableRoundingAmount?

È un elemento UBL specifico che assorbe le piccole differenze di arrotondamento nei totali della fattura. La differenza viene indicata esplicitamente, in modo che la fattura venga comunque convalidata. La maggior parte dei profili ammette un massimo di 1 euro.

eConnect può correggere automaticamente le differenze di arrotondamento?

In alcuni casi la funzione di riparazione automatica XML può aggiungere un PayableRoundingAmount mancante se la differenza è inferiore alla soglia di tolleranza. Tuttavia, è sempre preferibile gestire correttamente l'arrotondamento nel proprio software.

Verifichi la Sua fattura


Correlati