BR-DE-23-a
The invoice says payment is by bank transfer but gives no account to pay into.
Why it happens
Payment means code set to 30 or 58 without the accompanying account details.
How to fix it
Add cac:PayeeFinancialAccount with the account identifier (BT-84) — an IBAN for SEPA code 58. Note BR-DE-23-b also forbids card or direct-debit groups on the same payment means.
The official rule
XRechnung, official German wording[BR-DE-23-a] Wenn BT-81 "Payment means type code" einen Schlüssel für Überweisungen enthält (30, 58), muss BG-17 "CREDIT TRANSFER" übermittelt werden.
Our English rendering: If BT-81 "Payment means type code" contains a credit-transfer code (30, 58), then BG-17 "CREDIT TRANSFER" must be provided.
Technical detail — where the rule is evaluated and the exact test
| Syntax | Context and assertion |
|---|---|
| UBL | /ubl:Invoice/cac:PaymentMeans[normalize-space(cbc:PaymentMeansCode) = ('30','58')] | /cn:CreditNote/cac:PaymentMeans[normalize-space(cbc:PaymentMeansCode) = ('30','58')] |
cac:PayeeFinancialAccount | |
| CII | /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans[normalize-space(ram:TypeCode) = ('30','58')] |
ram:PayeePartyCreditorFinancialAccount |
Check your own invoice
Paste or drop your UBL or CII file into the free validator. It runs the official EN 16931 ruleset plus the German XRechnung layer and lists every rule that fires, BR-DE-23-a included — no signup, no limit.
Validate an e-invoice freeFixing the data at source instead? The CSV converter builds a compliant invoice from a spreadsheet export.