Auf dieser Seite
Die kurze Antwort
BR-CO-23 schlägt fehl, wenn ein cac:AllowanceCharge innerhalb von cac:InvoiceLine (oder cac:CreditNoteLine) cbc:ChargeIndicator false hat und weder cbc:AllowanceChargeReasonCode noch cbc:AllowanceChargeReason trägt. Geben Sie dem Positionsrabatt seinen Grund: einen Code aus UNTDID 5189, eine Beschreibung oder beides.
Derselbe Nachlass wird außerdem als BR-42 gemeldet, eine zweite Regel aus EN 16931 mit identischer Prüfung. Den Grund einmal zu ergänzen, erfüllt beide.
Was die Regel prüft
Die Regel betrachtet jedes cac:AllowanceCharge, das ein direktes Kind einer Position ist und als Nachlass gelesen wird. Der Nachlass wird akzeptiert, sobald eines der beiden Elemente für den Grund darin existiert.
Jeder Nachlass wird für sich beurteilt: Eine Position mit zwei Nachlässen braucht bei jedem einen Grund, und jede Position im Dokument wird durchlaufen.
Der Preisnachlass innerhalb von cac:Price ist ein anderes Element und liegt außerhalb dieser Regel. Das aufgezeichnete Beispiel mit Preisnachlass hat keinen Grund an seinem Nachlass auf Preisebene und wird ohne Befund validiert.
Auch Zuschläge an Positionen liegen außerhalb. Die umfangreiche Rechnung hat einen Positionszuschlag mit Text zum Grund und ohne Code, was für seine eigene Regel, BR-CO-24, genügt.
Ein vorhandenes Element erfüllt die Regel auch ohne Inhalt. Im Versuch bestand ein leeres cbc:AllowanceChargeReason am Positionsnachlass BR-CO-23 und wurde stattdessen von PEPPOL-EN16931-R008 gemeldet.
| Begriff | Bedeutung | UBL-Element |
|---|---|---|
| BG-27 | Nachlässe auf Ebene der Rechnungsposition | cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = false] (cac:CreditNoteLine/cac:AllowanceCharge in a credit note) |
| BT-139 | Grund für den Nachlass auf Ebene der Rechnungsposition | cac:InvoiceLine/cac:AllowanceCharge/cbc:AllowanceChargeReason |
| BT-140 | Code für den Grund des Nachlasses auf Ebene der Rechnungsposition | cac:InvoiceLine/cac:AllowanceCharge/cbc:AllowanceChargeReasonCode |
Wie es in einer Integration dazu kommt
Mögliche Ursachen, abgeleitet aus der Form der Regel und nicht aus gemessener Nutzung:
- Ein Kunden- oder Mengenrabatt wird je Position von einer Preis-Engine angewandt, die Prozentsatz und Betrag erfasst, aber nicht die Rabattart.
- Nachlässe an Positionen werden aus der Differenz zwischen Listenpreis und Verkaufspreis erzeugt, sodass es keinen Grund gibt, der sich anhängen ließe.
- Der Grund wird für Nachlässe auf Dokumentenebene gemappt, aber das Mapping auf Positionsebene wurde separat geschrieben und lässt ihn aus.
- Der Text zum Grund wird beim Kürzen oder Bereinigen zu nichts, und das Element wird dann weggelassen.
So korrigieren Sie das Dokument
- Finden Sie Position und Nachlass in der Fundstelle des Befunds, zum Beispiel
cac:InvoiceLine[1]/cac:AllowanceCharge[1]. Der zweite Index zählt jedescac:AllowanceChargedieser Position, Zuschläge eingeschlossen. - Reichen Sie die Rabattart aus dem Preisdatensatz durch, der den Nachlass erzeugt hat.
- Passt die Art zu einem Eintrag aus UNTDID 5189, schreiben Sie diesen Code in
cbc:AllowanceChargeReasonCode(95für einen einfachen Rabatt). Ergänzen Siecbc:AllowanceChargeReasonmit der Beschreibung, oder übermitteln Sie nur den Text, wenn kein Code passt. - Halten Sie die Elemente in der UBL-Reihenfolge, direkt nach
cbc:ChargeIndicatorund vorcbc:MultiplierFactorNumericundcbc:Amount. Kein Betrag an der Position muss neu berechnet werden.
Vorher und nachher
Dies sind Ausschnitte, keine vollständigen Dokumente. Die vollständigen synthetischen Dokumente, aus denen sie stammen, sind unten verlinkt.
Ausschnitt der fehlerhaften Rechnung: Der Nachlass von 5 Prozent an Position 1 hat keinen Grund, der Zuschlag daneben hat einen
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<!-- note, quantity, line net amount, accounting cost and order line reference omitted from this fragment -->
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="GBP">2.00</cbc:Amount>
<cbc:BaseAmount currencyID="GBP">40.00</cbc:BaseAmount>
</cac:AllowanceCharge>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Example charge</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="GBP">0.01</cbc:Amount>
</cac:AllowanceCharge>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Ausschnitt der korrigierten Rechnung: Der Positionsnachlass trägt den Code 95 für den Grund und einen Text zum Grund
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<!-- note, quantity, line net amount, accounting cost and order line reference omitted from this fragment -->
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Example discount</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="GBP">2.00</cbc:Amount>
<cbc:BaseAmount currencyID="GBP">40.00</cbc:BaseAmount>
</cac:AllowanceCharge>
<!-- line charge, item and price omitted from this fragment -->
</cac:InvoiceLine>An Position 1 hat die korrigierte Rechnung den Code 95 und den Text Example discount am Nachlass von 5 Prozent; die fehlerhafte Rechnung hat keines von beiden, und sonst ändert sich nichts. Das fehlerhafte Dokument meldet außerdem BR-42, das dieselbe Prüfung wie BR-CO-23 auf denselben Nachlass anwendet, daher behebt die eine Änderung beide. Der Positionszuschlag daneben hatte bereits einen Text zum Grund und wurde nicht gemeldet.
Was der Validator gemeldet hat
- Die fehlerhafte Rechnung meldet
BR-42und BR-CO-23. 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
- Gilt für
cac:InvoiceLinein einerInvoiceundcac:CreditNoteLinein einerCreditNote. Die Gutschriftversion des aufgezeichneten Beispiels meldete im VersuchBR-42undBR-CO-23beicac:CreditNoteLine[1]/cac:AllowanceCharge[1]. - Nur der Prüfschritt EN 16931 meldet einen fehlenden Grund. Ist ein Code vorhanden, prüft ihn der Peppol-Prüfschritt als
PEPPOL-EN16931-CL002gegen die Nachlassliste und der Prüfschritt EN 16931 alsBR-CL-19. - Der Betrag eines Positionsnachlasses fließt in die Berechnung des Nettobetrags der Position ein, aber das Ergänzen eines Grundes ändert keinen Wert.
Verwandte Regeln
- BR-CO-21 ist dieselbe Anforderung für Nachlässe auf das ganze Dokument
- BR-CL-19 prüft einen Code für den Grund eines Positionsnachlasses gegen die Liste UNTDID 5189
- PEPPOL-EN16931-R120 zieht den Positionsnachlass ab, wenn es den Nettobetrag der Position prüft
- PEPPOL-EN16931-R040 prüft den Betrag des Positionsnachlasses gegen seinen Basisbetrag und seinen Prozentsatz
- 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-24.
Die offizielle Definition von BR-CO-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.

