BT-81Payment means type codeBT-84Payment account identifier
Official rule text
[BR-DE-19] "Payment account identifier" (BT-84) shall contain a valid IBAN if "Payment means type code" (BT-81) requests SEPA as the means of payment with code 58.
Official text (German): "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.
Why this error occurs
If the payment means type code (BT-81) is 58 (SEPA credit transfer), XRechnung expects the payee account identifier (BT-84) to be a valid IBAN. The rule applies the IBAN check (country format and mod-97 checksum) to cac:PaymentMeans/cac:PayeeFinancialAccount/cbc:ID (UBL) or ram:PayeePartyCreditorFinancialAccount/ram:IBANID (CII) whenever the code is 58. Typical causes: a typo or a transposed digit, spaces or formatting inside the IBAN, a domestic account number instead of an IBAN, or code 58 used for a non-SEPA account.
How to fix it
Enter the IBAN as a continuous string of upper-case letters and digits without spaces, e.g. DE89370400440532013000, and verify it against the bank statement. If the account is not a SEPA account (no IBAN), use payment means code 30 (credit transfer) instead of 58 and give the account number plus BIC in cac:FinancialInstitutionBranch/cbc:ID. Keep the account holder in cbc:Name / ram:AccountName. This is a warning, but a wrong IBAN delays payment.
Example (valid)
<cac:PaymentMeans>
<cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>
<cac:PayeeFinancialAccount>
<cbc:ID>DE89370400440532013000</cbc:ID>
<cbc:Name>Muster GmbH</cbc:Name>
</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):
not(normalize-space(cbc:PaymentMeansCode) = '58') or xr:checkIBAN(string(cac:PayeeFinancialAccount/cbc:ID))CII
/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans[normalize-space(ram:TypeCode) = ('30','58')]Test (XPath):
not(normalize-space(ram:TypeCode) = '58') or xr:checkIBAN(string(ram:PayeePartyCreditorFinancialAccount/ram:IBANID))
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-20"Debited account identifier" shall contain a valid IBAN if "Payment means type code"…BR-DE-23-aCredit transfer selected but no payee account (BG-17)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-24-bIf 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-25-bIf BT-81 "Payment means type code" contains a code for direct debits (59), BG-17 and…BR-DE-1Payment instructions (BG-16) are missing
Frequently asked questions
What does BR-DE-19 mean?
BR-DE-19 is a xrechnung rule: "Payment account identifier" (BT-84) shall contain a valid IBAN if "Payment means type code" (BT-81) requests SEPA as the means of payment with code 58.
Will my invoice be rejected because of BR-DE-19?
No. BR-DE-19 is a warning: the invoice is accepted but the recipient sees the notice. Fix it anyway, warnings often become errors in later rule versions.
Which formats does BR-DE-19 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.