Siete reglas giran alrededor del mismo bloque. BR-49, BR-61 y BR-50 son de la norma europea EN 16931 y valen para cualquier formato; las BR-DE son solo de XRechnung (Schematron v2.6.0 de KoSIT):
- BR-DE-1 (fatal): «Eine Rechnung (INVOICE) muss Angaben zu "PAYMENT INSTRUCTIONS" (BG-16) enthalten.» Sin bloque de pago, la XRechnung no vale.
- BR-49 (fatal): «A Payment instruction (BG-16) shall specify the Payment means type code (BT-81).»
- BR-61 (fatal): «If the Payment means type code (BT-81) means SEPA credit transfer, Local credit transfer or Non-SEPA international credit transfer, the Payment account identifier (BT-84) shall be present.»
- BR-50 (fatal): «A Payment account identifier (BT-84) shall be present if Credit transfer (BG-17) information is provided in the Invoice.»
- BR-DE-23-a (fatal): «Wenn BT-81 "Payment means type code" einen Schlüssel für Überweisungen enthält (30, 58), muss BG-17 "CREDIT TRANSFER" übermittelt werden.»
- BR-DE-23-b (fatal): «Wenn BT-81 "Payment means type code" einen Schlüssel für Überweisungen enthält (30, 58), dürfen BG-18 und BG-19 nicht übermittelt werden.» Una transferencia no puede llevar a la vez datos de tarjeta (BG-18) ni de domiciliación (BG-19).
- BR-DE-19 (warning): «"Payment account identifier" (BT-84) soll eine korrekte IBAN enthalten, wenn in "Payment means type code" (BT-81) mit dem Code 58 SEPA als Zahlungsmittel gefordert wird.» Es un aviso: con el código 58, la cuenta debería ser un IBAN válido.

Los medios de pago que vas a ver
- 30
- Transferencia (credit transfer). Es el que pone Odoo en una factura con Recipient Bank.
- 58
- Transferencia SEPA. Es el que pone nuestro módulo XRechnung y ZUGFeRD.
- ZZZ
- Acordado entre las partes (mutually defined). Es el que pone Odoo en una factura sin banco.
- 57
- Acuerdo permanente (standing agreement). Es el que pone Odoo en los abonos.
Qué hace Odoo con una factura
En Odoo 17, 18, 19 y 20 la decisión es la misma y depende del campo Recipient Bank de la factura. Si tiene banco, el medio es 30 y la cuenta va en BT-84: BR-61, BR-50 y BR-DE-23-a se cumplen solas. Si no tiene, el medio es ZZZ. El bloque BG-16 existe, así que BR-DE-1 no salta, pero la factura no dice a qué cuenta pagar.
Además, antes de generar el fichero, Odoo repite la comprobación de BR-61: si el medio es 30 o 58 y la factura no tiene Recipient Bank, para con el aviso de campo obligatorio. Con la lógica de arriba es difícil llegar ahí, pero un módulo que cambie el medio de pago sí puede provocarlo.
Con nuestro módulo XRechnung y ZUGFeRD
El módulo no mira el Recipient Bank: las instrucciones de pago salen del IBAN de XRechnung de tu empresa, con el medio 58, el IBAN en BT-84 y el BIC si lo hay. Si ese IBAN está vacío, el módulo no genera nada y para antes con el aviso «Company IBAN (BT-84) is required for XRechnung generation.». Así, con el módulo, una factura sin BG-16 no llega a salir.

En Odoo 18, 19 y 20, con la suscripción a FlexigoTech Cloud, cada XRechnung que se genera pasa además por las reglas de KoSIT, y solo la que las cumple queda como Ready to send. En Odoo 17, la versión publicada no valida.
Cómo arreglarlo
- En Odoo, elige el banco de cobro en el campo Recipient Bank de la factura antes de generar la XRechnung.
- Con nuestro módulo, rellena el IBAN de XRechnung de tu empresa (y el BIC, si tu cliente lo pide).
- Comprueba que el IBAN es correcto: con el medio 58, BR-DE-19 avisa si no lo es.
- Vuelve a generar la XRechnung; la que ya enviaste se queda como estaba.
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_
- 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/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.17
- github.com/itplr-kosit/xrechnung-schematron/releases/tag/v2.6.0
