BR-DE-19: IBAN invalid for SEPA credit transfer (code 58)
Severity: warning · Syntax: CII, UBL
Official message
"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.
What this means
When payment means type code (BT-81) is 58, payment account identifier (BT-84) should contain a valid IBAN. The rule is a warning. The function xr:checkIBAN strips spaces, requires the pattern ^[A-Z]{2}[0-9]{2}[a-zA-Z0-9]{0,30}$ and the mod-97 check (rearranged IBAN, letter A=10, remainder 1). Another payment code does not trigger the rule. UBL reads cac:PayeeFinancialAccount/cbc:ID, CII reads ram:PayeePartyCreditorFinancialAccount/ram:IBANID.
Typical cause
The account is a domestic number without a country code, or the IBAN check digits are mistyped.
How to fix it
For code 58 set an IBAN that passes the pattern and the mod-97 check. The sample is a well-known test IBAN.
UBL
<cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>
<cac:PayeeFinancialAccount>
<cbc:ID>DE89370400440532013000</cbc:ID>
</cac:PayeeFinancialAccount>CII
<ram:TypeCode>58</ram:TypeCode>
<ram:PayeePartyCreditorFinancialAccount>
<ram:IBANID>DE89370400440532013000</ram:IBANID>
</ram:PayeePartyCreditorFinancialAccount>
Business term
Payment account identifier (BT-84), Payment means type code (BT-81)
Related rules
Context and assertion
UBL /ubl:Invoice/cac:PaymentMeans[normalize-space(cbc:PaymentMeansCode) = ('30','58')] | /cn:CreditNote/cac:PaymentMeans[normalize-space(cbc:PaymentMeansCode) = ('30','58')]
CII /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans[normalize-space(ram:TypeCode) = ('30','58')]
UBL
not(normalize-space(cbc:PaymentMeansCode) = '58') or xr:checkIBAN(string(cac:PayeeFinancialAccount/cbc:ID))CII
not(normalize-space(ram:TypeCode) = '58') or xr:checkIBAN(string(ram:PayeePartyCreditorFinancialAccount/ram:IBANID))
Check a file now, free of charge
curl -F "file=@rechnung.xml" https://checkxrechnung.com/v1/validate
Questions
What does BR-DE-19 actually check?
When payment means type code (BT-81) is 58, payment account identifier (BT-84) should contain a valid IBAN. The rule is a warning. The function xr:checkIBAN strips spaces, requires the pattern ^[A-Z]{2}[0-9]{2}[a-zA-Z0-9]{0,30}$ and the mod-97 check (rearranged IBAN, letter A=10, remainder 1). Another payment code does not trigger the rule. UBL reads cac:PayeeFinancialAccount/cbc:ID, CII reads ram:PayeePartyCreditorFinancialAccount/ram:IBANID.
How do I fix BR-DE-19?
For code 58 set an IBAN that passes the pattern and the mod-97 check. The sample is a well-known test IBAN.
If BR-DE-19 passes, is the invoice legally compliant?
No. This page helps you read this one Schematron assertion. A pass is not a statement about tax law, portal acceptance, or bank overlays.