Auf dieser Seite
Die kurze Antwort
BR-CL-23 schlägt fehl, wenn ein Attribut unitCode etwas enthält, das nicht auf der Codeliste der Maßeinheiten steht, die mit den Validierungsartefakten ausgeliefert wird. Ersetzen Sie Ihre lokale Abkürzung der Einheit durch den Code nach UN/ECE-Empfehlung 20 mit derselben Bedeutung: KGM für Kilogramm, HUR für Stunden, C62, H87 oder EA für zählbare Stücke.
Die Fundstelle des Befunds nennt das Mengenelement mit dem falschen Code. Wenn Sie die Einheit der Positionsmenge ändern, ändern Sie sie auch an cac:Price/cbc:BaseQuantity, weil Peppol verlangt, dass beide übereinstimmen.
Was die Regel prüft
Die Regel läuft auf cbc:InvoicedQuantity, cbc:CreditedQuantity und cbc:BaseQuantity, jeweils wenn das Element ein Attribut unitCode hat, und sucht den Wert in einer festen Liste. Diese Liste verbindet UN/ECE-Empfehlung 20, die Maßeinheiten, mit Empfehlung 21, den Verpackungsarten, deren Codes mit einem vorangestellten X geschrieben werden: XPK wird akzeptiert, ein bloßes PK nicht.
Der Abgleich ist exakt und unterscheidet Groß- und Kleinschreibung. c62 und h87 schlagen fehl, wo C62 und H87 bestehen. Auch plausibel aussehende Abkürzungen, die nicht auf der Liste stehen, schlagen fehl: EACH, PCE, pcs, KG und HR werden alle abgelehnt. Ein leeres unitCode="" schlägt ebenfalls fehl.
Jede Menge ergibt einen eigenen Befund. Eine Position mit demselben falschen Code an der Menge und an der Preisbasismenge meldet die Regel zweimal.
Eine Menge ganz ohne Attribut unitCode liegt außerhalb dieser Regel, und das UBL-Schema erlaubt das. Bei der Positionsmenge wird das Fehlen stattdessen von BR-23 gemeldet. Bei cbc:BaseQuantity kann das Attribut ohne jeden Befund weggelassen werden.
| Begriff | Bedeutung | UBL-Element |
|---|---|---|
| BT-130 | Code der Maßeinheit der in Rechnung gestellten Menge | cac:InvoiceLine/cbc:InvoicedQuantity/@unitCode |
| BT-149 | Basismenge zum Artikelpreis: Attribut für den Code der Maßeinheit | cac:InvoiceLine/cac:Price/cbc:BaseQuantity/@unitCode |
Wie es in einer Integration dazu kommt
Mögliche Ursachen, abgeleitet aus der Form der Regel und nicht aus gemessener Nutzung:
- Die Einheit wird direkt aus den Produktstammdaten kopiert, die die Abkürzungen des ERP-Systems oder des Lagers verwenden und keine UN/ECE-Codes.
- Eine Zuordnungstabelle existiert, deckt aber nur die Einheiten ab, die bei ihrer Erstellung in Gebrauch waren, und eine neue Einheit fällt ohne Zuordnung durch.
- Codes durchlaufen einen Schritt, der sie in Kleinbuchstaben umwandelt.
- Das System verwendet eine weit verbreitete Abkürzung wie
PCEin der Annahme, es sei ein Standardcode, doch sie steht nicht auf dieser Liste. - Verpackungsarten werden ohne das Präfix
Xgesendet, das sie als Codes nach Empfehlung 21 kennzeichnet. - Dienstleistungspositionen haben in der Quelle keine Einheit, und ein erfundener Standardwert wird geschrieben, um das Attribut zu füllen.
So korrigieren Sie das Dokument
- Listen Sie die verschiedenen Einheiten auf, die Ihr System in eine Rechnungsposition schreiben kann.
- Ordnen Sie jede dem Code nach Empfehlung 20 mit derselben Bedeutung zu, oder bei einer Verpackungsart dem Code nach Empfehlung 21 mit dem Präfix
X. Führen Sie die Zuordnung als Daten, damit eine neue Einheit eine neue Zeile ist und keine Codeänderung. - Fassen Sie unbekannte Einheiten nicht unter
C62zusammen. Die Einheit ist Teil dessen, was verkauft wurde; eine Menge von 2 in Kilogramm und 2 eines Stücks sind unterschiedliche Aussagen. - Schreiben Sie den Code in Großbuchstaben in
unitCodean der Positionsmenge und denselben Code incac:Price/cbc:BaseQuantity, wenn dieses Element vorhanden ist. - Lassen Sie den Export bei einer Einheit ohne Zuordnung fehlschlagen, damit die Lücke gefunden wird, wenn die Einheit eingeführt wird.
Vorher und nachher
Dies sind Ausschnitte, keine vollständigen Dokumente. Die vollständigen synthetischen Dokumente, aus denen sie stammen, sind unten verlinkt.
Position der fehlerhaften Rechnung: EACH ist kein Code nach Empfehlung 20
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EACH">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item omitted from this fragment -->
<cac:Price>
<cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>Position der korrigierten Rechnung: C62 an beiden Mengen
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item omitted from this fragment -->
<cac:Price>
<cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>Nur der unitCode von cbc:InvoicedQuantity unterscheidet sich: EACH in der fehlerhaften Rechnung, C62 in der korrigierten. Das fehlerhafte Dokument meldet außerdem PEPPOL-EN16931-R130, verortet an cbc:BaseQuantity: Diese Peppol-Regel verlangt, dass die Preisbasismenge dieselbe Einheit wie die Positionsmenge verwendet, und C62 ist nicht EACH. Das ist eine Folge davon, dass ein Attribut geändert wurde und das andere nicht. Mit EACH an beiden Mengen meldet das Dokument BR-CL-23 zweimal und PEPPOL-EN16931-R130 gar nicht.
Was der Validator gemeldet hat
- Die fehlerhafte Rechnung meldet BR-CL-23 und PEPPOL-EN16931-R130. Das korrigierte Dokument besteht jeden Prüfschritt ohne Befunde.Fehlerhaftes XML herunterladenKorrigiertes XML herunterladen
- Die fehlerhafte Gutschrift meldet BR-CL-23 und PEPPOL-EN16931-R130. Das korrigierte Dokument besteht jeden Prüfschritt ohne Befunde.Fehlerhaftes XML herunterladenKorrigiertes XML herunterladen
Aufgezeichnet mit phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, der Engine hinter dem kostenlosen Validator, mit synthetischen Daten. Ein aufgezeichnetes Ergebnis ist ein Regressionsnachweis für diese Dokumente, keine Zertifizierung.
Wo die Regel gilt
- Die Positionsmenge heißt in den beiden Dokumenttypen unterschiedlich:
cac:InvoiceLine/cbc:InvoicedQuantityin einerInvoice,cac:CreditNoteLine/cbc:CreditedQuantityin einerCreditNote.cac:Price/cbc:BaseQuantityist in beiden gleich. Die aufgezeichnete Gutschrift mitunitCode="EACH"ancbc:CreditedQuantityundC62an der Basismenge meldet dieselben zwei Regeln wie die Rechnung. - Ein Mapper, der Gutschriften durch Umbenennen von Rechnungselementen erzeugt, muss auch die Menge umbenennen: Eine
cbc:InvoicedQuantityinnerhalb einercac:CreditNoteLinewird vom XSD-Prüfschritt abgelehnt. Sobald das Element stimmt, sind die Codeliste und das Verhalten dieser Regel identisch. - Die Codeliste ist die, die mit den festgelegten Artefakten zu EN 16931 veröffentlicht wird. Schlagen Sie Codes in dieser Liste oder in den UN/ECE-Empfehlungen selbst nach; diese Seite gibt sie nicht wieder.
Verwandte Regeln
- PEPPOL-EN16931-R121 prüft, dass die Preisbasismenge, die diese Einheit trägt, größer als null ist
- PEPPOL-EN16931-R120 prüft den aus Menge und Preis berechneten Nettobetrag der Position
- BR-CL-04 ist die entsprechende Codelisten-Prüfung für die Rechnungswährung
- BR-25 verlangt einen Artikelnamen in derselben Position
- Alle Regeln der Referenz ansehen
- Hintergrund (auf Englisch): Understanding EN 16931 validation errors
Umfang und Quelle
Geschrieben für Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, angewendet auf Invoice- und CreditNote-Dokumente in UBL 2.1. Andere Profile, Syntaxen und Releases können diese Kennung anders definieren. Version des Hinweiskatalogs 2026-09-24.1: Quelle geprüft am 2026-09-24, Erklärung zuletzt aktualisiert am 2026-09-20.
Die offizielle Definition von BR-CL-23 (auf Englisch) enthält den normativen Wortlaut und den Test. Diese Seite ist unsere Erklärung dazu, keine Kopie.
Die Erklärung ändert das Urteil der Engine nicht. Dass Sie diesen Befund beheben, heißt nicht, dass das Dokument jeden Prüfschritt besteht. Die Validierung bescheinigt keine rechtliche oder steuerliche Konformität und überträgt kein Dokument über Peppol.

