Zum Inhalt springen

Ironfang Finance - Regelreferenz

BR-CO-23: Jedem Nachlass an einer Rechnungsposition einen Grund geben

Ein Nachlass an einer Position einer Rechnung oder Gutschrift muss seinen Grund als Code, Text oder beides nennen. Der Preisnachlass innerhalb von cac:Price ist nicht erfasst.

EN 16931Fehler: Das Dokument ist ungültigNachlässe und ZuschlägePositionen und Preise

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.

BegriffBedeutungUBL-Element
BG-27Nachlässe auf Ebene der Rechnungspositioncac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = false] (cac:CreditNoteLine/cac:AllowanceCharge in a credit note)
BT-139Grund für den Nachlass auf Ebene der Rechnungspositioncac:InvoiceLine/cac:AllowanceCharge/cbc:AllowanceChargeReason
BT-140Code für den Grund des Nachlasses auf Ebene der Rechnungspositioncac: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

  1. Finden Sie Position und Nachlass in der Fundstelle des Befunds, zum Beispiel cac:InvoiceLine[1]/cac:AllowanceCharge[1]. Der zweite Index zählt jedes cac:AllowanceCharge dieser Position, Zuschläge eingeschlossen.
  2. Reichen Sie die Rabattart aus dem Preisdatensatz durch, der den Nachlass erzeugt hat.
  3. Passt die Art zu einem Eintrag aus UNTDID 5189, schreiben Sie diesen Code in cbc:AllowanceChargeReasonCode (95 für einen einfachen Rabatt). Ergänzen Sie cbc:AllowanceChargeReason mit der Beschreibung, oder übermitteln Sie nur den Text, wenn kein Code passt.
  4. Halten Sie die Elemente in der UBL-Reihenfolge, direkt nach cbc:ChargeIndicator und vor cbc:MultiplierFactorNumeric und cbc:Amount. Kein Betrag an der Position muss neu berechnet werden.

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.

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

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:InvoiceLine in einer Invoice und cac:CreditNoteLine in einer CreditNote. Die Gutschriftversion des aufgezeichneten Beispiels meldete im Versuch BR-42 und BR-CO-23 bei cac: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-CL002 gegen die Nachlassliste und der Prüfschritt EN 16931 als BR-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.

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.