Zum Inhalt springen

Ironfang Finance - Regelreferenz

BR-CL-23: Einen Code nach UN/ECE-Empfehlung 20 in unitCode verwenden

Jeder unitCode an einer Positionsmenge oder Preisbasismenge muss ein Code nach UN/ECE Rec 20 oder Rec 21 sein, in Großbuchstaben. Lokale Abkürzungen wie EACH schlagen fehl.

EN 16931Fehler: Das Dokument ist ungültigCodelistenPositionen und Preise

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.

BegriffBedeutungUBL-Element
BT-130Code der Maßeinheit der in Rechnung gestellten Mengecac:InvoiceLine/cbc:InvoicedQuantity/@unitCode
BT-149Basismenge zum Artikelpreis: Attribut für den Code der Maßeinheitcac: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 PCE in der Annahme, es sei ein Standardcode, doch sie steht nicht auf dieser Liste.
  • Verpackungsarten werden ohne das Präfix X gesendet, 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

  1. Listen Sie die verschiedenen Einheiten auf, die Ihr System in eine Rechnungsposition schreiben kann.
  2. 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.
  3. Fassen Sie unbekannte Einheiten nicht unter C62 zusammen. Die Einheit ist Teil dessen, was verkauft wurde; eine Menge von 2 in Kilogramm und 2 eines Stücks sind unterschiedliche Aussagen.
  4. Schreiben Sie den Code in Großbuchstaben in unitCode an der Positionsmenge und denselben Code in cac:Price/cbc:BaseQuantity, wenn dieses Element vorhanden ist.
  5. Lassen Sie den Export bei einer Einheit ohne Zuordnung fehlschlagen, damit die Lücke gefunden wird, wenn die Einheit eingeführt wird.

Korrigierte Rechnung prüfen

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

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:InvoicedQuantity in einer Invoice, cac:CreditNoteLine/cbc:CreditedQuantity in einer CreditNote. cac:Price/cbc:BaseQuantity ist in beiden gleich. Die aufgezeichnete Gutschrift mit unitCode="EACH" an cbc:CreditedQuantity und C62 an 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:InvoicedQuantity innerhalb einer cac:CreditNoteLine wird 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.

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.