Error codes

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.