El text de cada regla
Totes són fatals al Schematron de EN 16931 (validation-1.3.17), i Peppol BIS, XRechnung i Factur-X les apliquen igual:
- BR-08: «An Invoice shall contain the Seller postal address.»
- BR-09: «The Seller postal address (BG-5) shall contain a Seller country code (BT-40).»
- BR-10: «An Invoice shall contain the Buyer postal address (BG-8).»
- BR-11: «The Buyer postal address shall contain a Buyer country code (BT-55).»
- BR-CL-14: «Country codes in an invoice MUST be coded using ISO code list 3166-1»
Dins de l'adreça, les regles de EN 16931 només demanen el país. Però hi ha formats que demanen més: XRechnung exigeix a més ciutat i codi postal del venedor (BR-DE-3 i BR-DE-4) i del comprador (BR-DE-8 i BR-DE-9).

El que et diu Odoo
En les quatre versions, Odoo comprova BR-09 i BR-11 abans de generar el fitxer UBL. Si falta el país a la teva empresa o al client, l'avís és aquest: «The country is required for the %s.», amb «supplier» o «customer» al forat. A Odoo 17 la comprovació està a l'exportació Peppol BIS (i a les que hereten d'ella, com XRechnung); a 18, 19 i 20, a la capa comuna de EN 16931.
L'avís et diu quina de les dues fitxes mirar: «supplier» és la teva empresa, la de la factura; «customer» és el contacte de facturació del client.
Per què falta un país a Odoo
| Situació | On mirar-ho |
|---|---|
| Empresa creada de pressa, sense adreça | Configuració de l'empresa: carrer, ciutat, codi postal i país. |
| Client importat d'un full de càlcul | La columna de país buida o amb el nom escrit a mà en lloc de triat. |
| Factura a un contacte fill | L'adreça de facturació del contacte que va a la factura, no només la de la seva empresa. |
| Client particular d'una botiga en línia | La comanda va arribar amb adreça sense país, o amb un país que no és a la llista. |
Com que el país a Odoo es tria d'una llista i no s'escriu, BR-CL-14 gairebé mai surt d'una factura d'Odoo: el codi de dues lletres ve del mateix país. Si te'l surt, mira si el fitxer va passar per un altre programa abans d'arribar al client.
Amb el nostre mòdul XRechnung i ZUGFeRD

Amb el país, el mòdul no avisa. Si a la teva empresa o al client li falta, escriu DE, el codi d'Alemanya, a UBL i a CII, i la seva comprovació abans de generar no mira aquest camp. El fitxer compleix BR-09 i BR-11 i el validador de KoSIT l'accepta (ho hem comprovat), però l'adreça diu Alemanya encara que el client sigui en un altre país. Revisa el país de cada client abans de generar.
A Odoo 18, 19 i 20, amb la subscripció a FlexigoTech Cloud, cada XRechnung i cada ZUGFeRD EN 16931 que genera el mòdul es valida amb les regles de KoSIT. Si al client li falten la ciutat o el codi postal, això sí que surt: BR-DE-8 i BR-DE-9 queden a Validation Errors i la factura no es marca com Ready to send. La versió publicada per a Odoo 17 genera els fitxers però no els valida.
Passos
- Llegeix l'avís: «supplier» o «customer».
- Obre aquesta fitxa i tria el país de la llista; completa carrer, ciutat i codi postal encara que EN 16931 no els demani.
- Si facturas a un contacte d'una empresa, revisa l'adreça d'aquest contacte.
- Genera el fitxer de nou.
Continua llegint
Comprovat al codi del mòdul (versió 17.0 i 20.0) i a les fonts enllaçades
Fonts
- Codi del mòdul: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.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_
- Codi del mòdul: flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Codi del mòdul: flexigo_germany_xrechnung 20.0 (446f2f68): models/account_move.py
- Codi del mòdul: flexigo_germany_xrechnung 17.0 (ad05de8f): __manifest__.py
- github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.17
- github.com/itplr-kosit/xrechnung-schematron/releases/tag/v2.6.0
