BG-17Credit transferBT-81Payment means type code
Official rule text
[BR-DE-23-a] If BT-81 "Payment means type code" contains a code for credit transfers (30, 58), BG-17 "CREDIT TRANSFER" must be transmitted.
Official text (German): Wenn BT-81 "Payment means type code" einen Schlüssel für Überweisungen enthält (30, 58), muss BG-17 "CREDIT TRANSFER" übermittelt werden.
Why this error occurs
If the payment means type code (BT-81) is 30 (credit transfer) or 58 (SEPA credit transfer), XRechnung requires the credit transfer group BG-17 with the payee's account. The rule looks for cac:PayeeFinancialAccount inside the cac:PaymentMeans with that code (UBL) or ram:PayeePartyCreditorFinancialAccount inside ram:SpecifiedTradeSettlementPaymentMeans (CII). Without an account the authority cannot pay. It typically fails when the bank data is missing in the master data or the exporter writes only the code.
How to fix it
In UBL add cac:PayeeFinancialAccount to the cac:PaymentMeans with cbc:ID (IBAN, BT-84), optionally cbc:Name (account holder, BT-85) and cac:FinancialInstitutionBranch/cbc:ID (BIC, BT-86). In CII add ram:PayeePartyCreditorFinancialAccount with ram:IBANID and ram:AccountName, plus ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID if needed. For code 58 the IBAN must be valid (BR-DE-19). Do not add card or direct debit groups to a credit transfer (BR-DE-23-b).
Example (valid)
<cac:PaymentMeans>
<cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>
<cac:PayeeFinancialAccount>
<cbc:ID>DE89370400440532013000</cbc:ID>
<cbc:Name>Muster GmbH</cbc:Name>
<cac:FinancialInstitutionBranch><cbc:ID>COBADEFFXXX</cbc:ID></cac:FinancialInstitutionBranch>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
What the validator checks
Checked element (context):
UBL
/ubl:Invoice/cac:PaymentMeans[normalize-space(cbc:PaymentMeansCode) = ('30','58')] | /cn:CreditNote/cac:PaymentMeans[normalize-space(cbc:PaymentMeansCode) = ('30','58')]Test (XPath):
cac:PayeeFinancialAccountCII
/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans[normalize-space(ram:TypeCode) = ('30','58')]Test (XPath):
ram:PayeePartyCreditorFinancialAccount
Check your invoice
Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.
Same check via API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validateRelated rules
BR-DE-24-bIf BT-81 "Payment means type code" contains a code for card payments (48, 54, 55),…BR-DE-25-bIf BT-81 "Payment means type code" contains a code for direct debits (59), BG-17 and…BR-DE-19Payment account identifier (BT-84) is not a valid IBANBR-DE-20"Debited account identifier" shall contain a valid IBAN if "Payment means type code"…BR-DE-23-bIf BT-81 "Payment means type code" contains a code for credit transfers (30, 58),…BR-DE-24-aIf BT-81 "Payment means type code" contains a code for card payments (48, 54, 55),…BR-DE-25-aIf BT-81 "Payment means type code" contains a code for direct debits (59), exactly…BR-DE-1Payment instructions (BG-16) are missing
Frequently asked questions
What does BR-DE-23-a mean?
BR-DE-23-a is a xrechnung rule: If BT-81 "Payment means type code" contains a code for credit transfers (30, 58), BG-17 "CREDIT TRANSFER" must be transmitted.
Will my invoice be rejected because of BR-DE-23-a?
Yes. BR-DE-23-a is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.
Which formats does BR-DE-23-a apply to?
XRechnung in UBL or CII syntax, including ZUGFeRD / Factur-X PDFs with the XRECHNUNG profile. Invoices to German public authorities (federal, state and municipal) must pass it. Syntax: UBL and CII.
Source: XRechnung 3.0.2, schematron 2.6.0 (KoSIT, September 2026). Catalogue generated from the official schematron on 2026-10-14.