El texto de la regla, tal como sale en el informe del validador (KoSIT la escribe en alemán), es este: «Das Element "Buyer reference" (BT-10) muss übermittelt werden.» Quiere decir que el elemento Buyer reference tiene que ir en la factura. En el Schematron de XRechnung 3.0.2 (versión v2.6.0 de KoSIT) su gravedad es fatal: no es un aviso, la factura no pasa.
Qué comprueba y qué no
La regla solo mira que el campo exista y no esté vacío. No comprueba que el valor tenga sentido: cualquier texto la cumple. En UBL es el elemento cbc:BuyerReference, en la cabecera del documento.
Peppol BIS, el formato que se usa en Bélgica o Países Bajos, es más flexible: le basta con la referencia del comprador o con la del pedido, como dice su regla PEPPOL-EN16931-R003: «A buyer reference or purchase order reference MUST be provided.» Por eso una factura que viaja sin problemas por Peppol puede caer en BR-DE-15 cuando la conviertes en XRechnung para un cliente alemán.

De dónde saca Odoo el BT-10
La exportación XRechnung que trae Odoo (sin módulos de terceros) rellena el campo así:
| Versión | Valor de BT-10 | Si no hay ninguno |
|---|---|---|
| Odoo 17 | El campo Referencia de la empresa cliente. Si su Peppol e-address (EAS) es 0204, su Peppol Endpoint. | Escribe «N/A». |
| Odoo 18 y 19 | El campo Referencia del contacto o, si está vacío, el de su empresa. Con EAS 0204, el Peppol Endpoint. | Escribe «N/A». |
| Odoo 20 | Igual, pero el esquema y el identificador se llaman Routing ID y Routing Endpoint. Con Routing ID 0204, el Routing Endpoint. | Escribe «N/A». |
Con la XRechnung de Odoo, BR-DE-15 no llega a saltar, porque el campo nunca va vacío. Pero «N/A» solo cumple la letra de la regla. No es la referencia que espera tu cliente, y si facturas a una administración no es su Leitweg-ID. Antes de enviar, abre el XML o la vista previa y mira qué lleva BT-10.
Cuando el cliente es una administración
El 0204 es el esquema del Leitweg-ID en la lista de direcciones electrónicas. Si en la ficha del organismo pones ese esquema y su Leitweg-ID como identificador, Odoo lo copia a BT-10 sin que tengas que escribirlo en cada factura. Para una empresa privada, lo normal es la referencia que te pida, a menudo su número de pedido o de proveedor: va en el campo Referencia de su ficha.
Con nuestro módulo XRechnung y ZUGFeRD
El módulo tiene su propia pestaña E-Invoicing en la ficha del cliente, con dos campos para este dato: Leitweg-ID (BT-10), que usa si marcas el cliente como administración (B2G Partner), y Buyer Reference (BT-10) para el resto. Si marcas el cliente como administración y le falta el Leitweg-ID, el módulo no genera la factura: para con «B2G partner requires a Leitweg-ID (BT-10).». Si no lo es y la Buyer Reference está vacía, el XML sale sin BuyerReference, sin rellenos como «N/A», y ahí aparece el BR-DE-15.

En Odoo 18, 19 y 20 lo ves antes de mandar nada: con la suscripción a FlexigoTech Cloud, cada XRechnung que generas se valida con las reglas de KoSIT y los fallos quedan en la factura, en Validation Errors, una línea por regla. Una factura con BR-DE-15 no se marca como Ready to send. La versión publicada para Odoo 17 genera la XRechnung pero no la valida.
Cómo dejarlo bien
- Si el cliente es una administración alemana, pide su Leitweg-ID y ponlo en su ficha: en el campo Leitweg-ID de la pestaña E-Invoicing con nuestro módulo, o como dirección electrónica con esquema 0204 en Odoo.
- Si es una empresa, pregunta qué referencia quiere ver y guárdala en su ficha (Buyer Reference con el módulo, Referencia en Odoo).
- Genera la XRechnung de nuevo: la que ya enviaste no cambia, y si la rechazaron toca mandar la corregida.
- Comprueba BT-10 en el resultado antes de enviarla.
Sigue leyendo
Comprobado en el código del módulo (versión 17.0 y 20.0) y en las fuentes enlazadas
Fuentes
- Código del módulo: 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_
- Código del módulo: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.py
- Código del módulo: flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Código del módulo: 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/
