Vai al contenuto principale
EN 16931 · categorie IVA

Errori BR-E-10, BR-AE-10, BR-IC-10 e BR-G-10: il motivo di esenzione IVA

Ogni riepilogo IVA di una fattura elettronica riporta una categoria: S per l'aliquota ordinaria, E per esente, AE per reverse charge, K per cessione intracomunitaria, G per esportazione, O per fuori campo, Z per aliquota zero. Cinque di queste categorie richiedono di indicare perché non c'è IVA e due lo vietano. È la regola numero 10 di ciascuna famiglia, e fallisce quando la categoria non corrisponde all'imposta di Odoo.

FlexigoTech · Responsabile: Víctor Gómez · Aggiornato il 4 novembre 2026

In breve

Versioni
Odoo 17, 18, 19 e 20
Verificato
nel codice del modulo, versione 17.0 e 20.0 · nelle fonti collegate in fondo
Lettura
5 min

Le sette regole, con il testo dello Schematron di EN 16931 (validation-1.3.17). Sono tutte fatali:

RegolaCategoriaTesto
BR-E-10E, esenteA VAT breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).
BR-AE-10AE, reverse chargeA VAT breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).
BR-IC-10K, intracomunitariaA VAT breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).
BR-G-10G, esportazioneA VAT breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).
BR-O-10O, fuori campoA VAT breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).
BR-S-10S, ordinariaA VAT breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).
BR-Z-10Z, aliquota zeroA VAT breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).

Il motivo può essere indicato come codice (BT-121, dalla lista VATEX) o come testo (BT-120). Per E basta uno dei due; per AE, K, G e O, il codice o il testo devono significare esattamente quello: «Reverse charge», «Intra-community supply»… Le regole delle altre famiglie (BR-E-08, BR-AE-08 e seguenti) riguardano gli importi; qui si parla solo del motivo.

Scheda delle regole sul motivo di esenzione di EN 16931
Cinque categorie richiedono un motivo (E, AE, K, G, O) e due lo vietano (S, Z).

Come Odoo decide la categoria

È qui che le versioni divergono:

  • Odoo 17 e 18: di serie, l'imposta non ha un campo categoria e Odoo la deduce: per un cliente spagnolo con codice postale che inizia per 35 o 38 (Canarie), L, e per 51 o 52 (Ceuta e Melilla), M; E se l'imposta è al 0 % e venditore e cliente sono dello stesso paese; AE nell'autoliquidazione del cocontraente belga o nell'autofattura con imposta reverse charge; con partita IVA del venditore e imposta al 0 %, K se entrambi sono nello SEE e G se lo è solo uno; nel resto, S se l'imposta ha una percentuale ed E se è al 0 %. Il modulo standard account_edi_ubl_cii_tax_extension (Tax extension for UBL/CII), che non si installa da solo, aggiunge all'imposta Tax Category Code e Tax Exemption Reason Code: con la categoria impostata, Odoo usa quella invece di dedurla.
  • Odoo 19: ogni imposta ha Tax Category Code (AE, E, S, Z, G, O, K, L, M, B) e Tax Exemption Reason Code, con la lista VATEX.
  • Odoo 20: gli stessi due campi e, in più, Tax Exemption Reason, un testo libero.
  • In tutte e quattro le versioni: se una categoria E resta senza motivo, Odoo scrive il testo «Exempt from tax», che soddisfa BR-E-10.

La trappola tipica di Odoo 17 e 18 senza quel modulo è un'imposta al 0 % per un servizio fuori campo IVA, che la deduzione non contrassegna mai come O, oppure una vendita nazionale con reverse charge: la categoria esce diversa da quella che si aspetterebbe il tuo commercialista.

Con il nostro modulo XRechnung e ZUGFeRD

Il generatore del modulo pubblicato conosce solo due categorie, S e Z. In XRechnung UBL scrive S quando l'imposta ha una percentuale e Z quando è al 0 %. In XRechnung CII, il suo formato predefinito, ogni riga esce come S, anche con un'imposta al 0 %, e il validatore di KoSIT la respinge con BR-S-05 (l'abbiamo verificato). Una fattura in reverse charge, intracomunitaria, di esportazione o esente non esce con AE, K, G o E. Su Odoo 18, 19 e 20, con l'abbonamento a FlexigoTech Cloud, il modulo valida il risultato con le regole di KoSIT e lascia in Validation Errors qualsiasi regola che fallisce. Per quelle fatture, oggi, l'esportazione nativa di Odoo è quella che conosce le categorie. Su Odoo 17, la versione pubblicata non valida.

Registro di audit del modulo XRechnung in Odoo 20
Invii con il loro formato e il risultato della validazione, uno fallito. Schermata di Odoo 20 con dati dimostrativi; i risultati sono di prova.

Come risolverlo

  1. Individua la categoria nel riepilogo IVA dell'XML (BT-118) e confrontala con l'operazione reale.
  2. Su Odoo 19 e 20, apri l'imposta e imposta il suo Tax Category Code e, se è E, AE, K, G o O, il suo Tax Exemption Reason Code.
  3. Su Odoo 17 e 18, installa account_edi_ubl_cii_tax_extension e imposta su ogni imposta la sua categoria e, se quella categoria lo richiede, il suo motivo. Senza quel modulo, controlla il paese del cliente, il suo codice postale, la partita IVA e la posizione fiscale: sono i dati da cui Odoo deduce la categoria.
  4. Un motivo di esenzione su una riga ad aliquota ordinaria provoca BR-S-10: rimuovilo dall'imposta.
  5. Genera di nuovo il file.

Continua a leggere

Errore BR-CO-15 nella fattura elettronica: il totale con IVA non è imponibile più IVABR-CO-15, BR-CO-14, BR-CO-16 e BR-CO-17 verificano che i totali della fattura elettronica quadrino. Cosa somma ciascuna e quali falliscono per un centesimo.Errore BR-CO-09: la partita IVA del venditore o del cliente non ha il prefisso del paeseBR-CO-09 rifiuta una partita IVA senza prefisso del paese; BR-CO-26, BR-S-02, BR-AE-02 e BR-IC-02 richiedono quella del venditore o del cliente. L'avviso di Odoo.Errore UBL-SR-48: una riga della fattura con due imposte o senza nessunaUBL-SR-48 e BR-CO-04 richiedono una sola categoria IVA per riga della fattura elettronica. Il messaggio di Odoo 17, 18, 19 e 20, insieme a BR-25 e BR-16.
Verificato nel codice del modulo (versione 17.0 e 20.0) e nelle fonti collegate

Fonti