Il testo della regola, così come compare nel rapporto del validatore (KoSIT lo scrive in tedesco), è questo: «Das Element "Buyer reference" (BT-10) muss übermittelt werden.» Significa che l'elemento Buyer reference deve essere presente nella fattura. Nello Schematron di XRechnung 3.0.2 (versione v2.6.0 di KoSIT) la sua gravità è fatal: non è un avviso, la fattura non passa.
Cosa controlla e cosa no
La regola verifica solo che il campo esista e non sia vuoto. Non controlla che il valore abbia senso: qualsiasi testo la soddisfa. In UBL è l'elemento cbc:BuyerReference, nell'intestazione del documento.
Peppol BIS, il formato usato in Belgio o nei Paesi Bassi, è più flessibile: basta il riferimento dell'acquirente oppure quello dell'ordine, come dice la sua regola PEPPOL-EN16931-R003: «A buyer reference or purchase order reference MUST be provided.» Per questo una fattura che viaggia senza problemi su Peppol può cadere in BR-DE-15 quando la converti in XRechnung per un cliente tedesco.

Da dove prende Odoo il BT-10
L'esportazione XRechnung inclusa in Odoo (senza moduli di terzi) compila il campo così:
| Versione | Valore di BT-10 | Se non c'è nessuno |
|---|---|---|
| Odoo 17 | Il campo Riferimento dell'azienda cliente. Se il suo Peppol e-address (EAS) è 0204, il suo Peppol Endpoint. | Scrive «N/A». |
| Odoo 18 e 19 | Il campo Riferimento del contatto o, se vuoto, quello della sua azienda. Con EAS 0204, il Peppol Endpoint. | Scrive «N/A». |
| Odoo 20 | Uguale, ma lo schema e l'identificatore si chiamano Routing ID e Routing Endpoint. Con Routing ID 0204, il Routing Endpoint. | Scrive «N/A». |
Con la XRechnung di Odoo, BR-DE-15 non scatta mai, perché il campo non è mai vuoto. Ma «N/A» rispetta solo la lettera della regola. Non è il riferimento che si aspetta il tuo cliente e, se fatturi a una pubblica amministrazione, non è il suo Leitweg-ID. Prima di inviare, apri l'XML o l'anteprima e controlla cosa contiene BT-10.
Quando il cliente è una pubblica amministrazione
0204 è lo schema del Leitweg-ID nella lista degli schemi di indirizzo elettronico. Se sul contatto dell'ente imposti quello schema e come identificatore il suo Leitweg-ID, Odoo lo copia in BT-10 senza che tu debba digitarlo in ogni fattura. Per un'azienda privata, il valore abituale è il riferimento che ti chiede, spesso il suo numero d'ordine o di fornitore: va nel campo Riferimento della sua scheda.
Con il nostro modulo XRechnung e ZUGFeRD
Il modulo aggiunge una scheda propria, E-Invoicing, nella scheda del cliente, con due campi per questo dato: Leitweg-ID (BT-10), che usa se segni il cliente come pubblica amministrazione (B2G Partner), e Buyer Reference (BT-10) per tutti gli altri. Se segni il cliente come pubblica amministrazione e il Leitweg-ID manca, il modulo non genera la fattura: si ferma con «B2G partner requires a Leitweg-ID (BT-10).». Se non lo è e la Buyer Reference è vuota, l'XML esce senza BuyerReference, senza riempitivi come «N/A», ed è lì che compare BR-DE-15.

Su Odoo 18, 19 e 20 lo vedi prima di inviare qualsiasi cosa: con l'abbonamento a FlexigoTech Cloud, ogni XRechnung che generi viene validata con le regole di KoSIT e gli errori restano sulla fattura, in Validation Errors, una riga per regola. Una fattura con BR-DE-15 non viene segnata come Ready to send. La versione pubblicata per Odoo 17 genera la XRechnung ma non la valida.
Come risolvere
- Se il cliente è una pubblica amministrazione tedesca, chiedi il suo Leitweg-ID e inseriscilo nella sua scheda: nel campo Leitweg-ID della scheda E-Invoicing con il nostro modulo, oppure come indirizzo elettronico con schema 0204 in Odoo.
- Se è un'azienda, chiedi quale riferimento vuole vedere e salvalo nella sua scheda (Buyer Reference con il modulo, Riferimento in Odoo).
- Genera di nuovo la XRechnung: quella già inviata non cambia, e se è stata rifiutata bisogna inviare quella corretta.
- Controlla BT-10 nel risultato prima di inviarla.
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): models/account_move.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_
- 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/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- Codice del modulo: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.py
- 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/itplr-kosit/xrechnung-schematron/releases/tag/v2.6.0
- docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R003/
