Validation rules
UBL-SR-47 — UBL rule
Several cac:PaymentMeans elements carry different cbc:PaymentMeansCode values — when the code (BT-81) is repeated it must be identical everywhere.
- Rule
UBL-SR-47— official EN 16931 / XRechnung rule- Severity
- error
- Business term
BT-81— Payment means code- Field in your JSON
invoice.payment.means_code- Detected by
- tier 3 — KoSIT validator (authoritative)
- Reachability
- Only reachable when validating your own XML — normbill-generated documents cannot trigger it
The serializer emits a single PaymentMeans, so generated XML always has exactly one code.
How to fix it
Use the same payment means code on every PaymentMeans, or reduce the document to one PaymentMeans.
UBL-SR-47 auf Deutsch — was bedeutet der Fehler?
Der KoSIT-Validator lehnt die Rechnung ab, weil mehrere cac:PaymentMeans unterschiedliche cbc:PaymentMeansCode-Werte tragen — wird der Code (BT-81) wiederholt, muss er überall identisch sein.
So beheben Sie den Fehler
Verwenden Sie auf allen PaymentMeans denselben Zahlungsweg-Code — oder reduzieren Sie das Dokument auf einen Zahlungsweg.
Related rules
BR-DE-1— Payment instructions (BG-16) are missing. XRechnung requires them.BR-DE-25-a— Payment means is a SEPA direct debit (code 59) but direct-debit information (BG-19) is missing.NB-PAYMENT-MEANS-UNSUPPORTED— Card-payment means codes (48/54/55) need card information (BG-18) that normbill cannot express yet — KoSIT…BR-CL-16— The payment means code (BT-81) is not a UNTDID 4461 code.BR-49— Payment instructions (BG-16) are present but the payment means type code (BT-81) is missing.BR-DE-24-a— The payment means is a card payment (code 48, 54 or 55), so card information (BG-18) is required.
Official sources
- XRechnung specification (KoSIT / xeinkauf.de)
- KoSIT validator on GitHub and the XRechnung validator configuration
Every 422 from the API lists the rule id, the path in your request JSON, a plain-language message and a suggested fix — see the docs overview for the report format.
Or try it live: drop any XRechnung XML on the free validator — same KoSIT-backed report, no account.