Cosa dice ogni regola
Sono tutte e quattro fatali nello Schematron di EN 16931 (validation-1.3.17):
- UBL-SR-48
- “Invoice lines shall have one and only one classified tax category.” È una regola della sintassi UBL: una riga, una categoria.
- BR-CO-04
- “Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).” L'altra faccia: nessuna riga senza categoria.
- BR-25
- “Each Invoice line (BG-25) shall contain the Item name (BT-153).” Ogni riga con un nome.
- BR-16
- “An Invoice shall have at least one Invoice line (BG-25)” Almeno una riga.

Il messaggio di Odoo
Odoo non aspetta il validatore. Prima di generare l'UBL scorre le righe e, se una non ha esattamente un'imposta, si ferma con: «Each invoice line shall have one and only one tax.» Succede in tutte e quattro le versioni, con una differenza:
- Odoo 17: conta le imposte della riga escludendo quelle a importo fisso, come le ecotasse; ne deve restare una.
- Odoo 18, 19 e 20: conta le categorie d'imposta che verranno scritte nella riga del file; ce ne deve essere una.
Nello stesso passaggio controlla BR-25: una riga senza prodotto né descrizione si ferma con «Each invoice line should have a product or a label.»
I casi che lo provocano
| Caso in Odoo | Cosa fare |
|---|---|
| Riga senza imposta, per esempio una spesa riaddebitata | Assegnale l'imposta corretta, anche se è al 0 % o esente. |
| Due imposte IVA sulla stessa riga | Lasciane una: se sono due aliquote diverse, dividi la riga. |
| IVA più un sovrapprezzo o una ritenuta sulla riga | Verifica se quella seconda imposta deve comparire nella fattura elettronica come imposta o in un altro modo; la risposta giusta dipende dal tuo Paese. |
| Riga di testo senza prodotto né descrizione | Scrivi la descrizione o trasformala in nota. |
Le sezioni e le note di Odoo non contano come righe, quindi non provocano il messaggio.
Con il nostro modulo XRechnung e ZUGFeRD
Il modulo genera l'XML con il proprio codice e non esegue il controllo di Odoo: una riga senza imposta o con due arriva al file così com'è. Lo abbiamo verificato con il validatore di KoSIT:
- Riga senza imposta: esce senza categoria IVA. In XRechnung UBL dà UBL-SR-48, BR-CO-04 e BR-Z-08; in XRechnung CII, il formato predefinito del modulo, BR-CO-04, BR-Z-01 e BR-Z-08.
- Riga con due imposte: in UBL viene scritta solo la prima con percentuale, ma il totale con IVA riporta entrambe e scatta BR-CO-15. In CII vanno entrambe sulla riga e l'IVA totale non quadra con il riepilogo, e scatta BR-CO-14.
- Riga con un'imposta al 0 %: in UBL esce come Z e KoSIT la accetta. In CII esce come S, e KoSIT segnala BR-S-05, oltre a BR-Z-01 e BR-Z-08.
Controlla le imposte di ogni riga prima di generare.

In Odoo 18, 19 e 20, con l'abbonamento a FlexigoTech Cloud, ogni XRechnung e ogni ZUGFeRD EN 16931 viene validato con le regole di KoSIT e le regole che falliscono restano in Validation Errors. In Odoo 17 la versione pubblicata non valida: questi file escono senza alcun avviso.
Passaggi
- Leggi il messaggio: ti dice se il problema è l'imposta o il nome della riga.
- Apri la fattura in bozza e controlla la colonna delle imposte riga per riga.
- Correggi, convalida e genera di nuovo il file.
Continua a leggere
Verificato nel codice del modulo (versione 17.0 e 20.0) e nelle fonti collegate
Fonti
- Codice del modulo: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.py
- Codice del modulo: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/cii_generator.py
- Codice del modulo: flexigo_germany_xrechnung 20.0 (446f2f68): models/res_company.py
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- Codice del modulo: flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Codice del modulo: flexigo_germany_xrechnung 17.0 (ad05de8f): __manifest__.py
- github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.17
