Seven rules revolve around the same block. BR-49, BR-61 and BR-50 come from the European standard EN 16931 and apply to any format; the BR-DE ones are XRechnung only (KoSIT Schematron v2.6.0):
- BR-DE-1 (fatal): “Eine Rechnung (INVOICE) muss Angaben zu "PAYMENT INSTRUCTIONS" (BG-16) enthalten.” Without a payment block, the XRechnung is not valid.
- 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.” A credit transfer cannot also carry card data (BG-18) or direct debit data (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.” A warning: with code 58, the account should be a valid IBAN.

The payment means you will see
- 30
- Credit transfer. What Odoo writes on an invoice with a Recipient Bank.
- 58
- SEPA credit transfer. What our XRechnung and ZUGFeRD module writes.
- ZZZ
- Mutually defined. What Odoo writes on an invoice without a bank.
- 57
- Standing agreement. What Odoo writes on credit notes.
What Odoo does with an invoice
In Odoo 17, 18, 19 and 20 the decision is the same and hangs on the invoice's Recipient Bank field. With a bank, the means is 30 and the account goes into BT-84: BR-61, BR-50 and BR-DE-23-a are met on their own. Without one, the means is ZZZ. The BG-16 block exists, so BR-DE-1 does not fire, but the invoice does not say which account to pay into.
On top of that, before generating the file, Odoo repeats the BR-61 check: if the means is 30 or 58 and the invoice has no Recipient Bank, it stops with the required-field message. With the logic above that is hard to reach, but a module that changes the payment means can trigger it.
With our XRechnung and ZUGFeRD module
The module does not look at the Recipient Bank: the payment instructions come from your company's XRechnung IBAN, with means 58, the IBAN in BT-84 and the BIC if there is one. If that IBAN is empty, the module generates nothing and stops first with the message “Company IBAN (BT-84) is required for XRechnung generation.”. So, with the module, an invoice without BG-16 never goes out.

On Odoo 18, 19 and 20, with the FlexigoTech Cloud subscription, every XRechnung it does generate also goes through the KoSIT rules, and only one that passes them is marked Ready to send. On Odoo 17, the published version does not validate.
How to fix it
- In Odoo, pick the bank account you collect on in the invoice's Recipient Bank field before generating the XRechnung.
- With our module, fill in your company's XRechnung IBAN (and the BIC if your customer asks for it).
- Check the IBAN is right: with means 58, BR-DE-19 warns when it is not.
- Generate the XRechnung again; the one already sent stays as it was.
Keep reading
Checked in the module's source code (version 17.0 and 20.0) and the linked sources
Sources
- Module source code: 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_
- Module source code: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.py
- Module source code: flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Module source code: 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
