Zum Inhalt springen

Ironfang Finance - Regelreferenz

BR-26: Den Nettopreis des Artikels in jeder Position ergänzen

Jede Position braucht cac:Price/cbc:PriceAmount, den Nettopreis je Einheit. Eine Position ohne cac:Price schlägt hier fehl, und die Peppol-Positionsberechnung mit ihr.

EN 16931Fehler: Das Dokument ist ungültigPositionen und PreiseKernfelder

Auf dieser Seite

Die kurze Antwort

BR-26 schlägt fehl, wenn eine Position kein cac:Price/cbc:PriceAmount hat. Ergänzen Sie nach cac:Item einen Block cac:Price mit dem Nettopreis je Einheit in cbc:PriceAmount, dazu eine cbc:BaseQuantity, wenn der Preis für mehr als eine Einheit angegeben ist.

Der Preis ist der Nettobetrag für eine Einheit oder für die Basismenge, nach einem etwaigen Preisnachlass. Er ist nicht die Positionssumme: Die aufgezeichnete Position mit 2 Einheiten im Wert von 25.00 hat einen Preis von 12.5.

Was die Regel prüft

Die Regel läuft für jede cac:InvoiceLine oder cac:CreditNoteLine und ist erfüllt, wenn die Position ein cac:Price mit einem cbc:PriceAmount hat. Der Betrag wird hier nicht beurteilt; ein Preis von 0 besteht.

In der Praxis bedeutet dieser Befund, dass der gesamte Block cac:Price fehlt. Das UBL-Schema erlaubt einer Position, cac:Price wegzulassen, doch sobald cac:Price vorhanden ist, muss es ein numerisches cbc:PriceAmount enthalten. Im Versuch wurden ein cac:Price nur mit einer Basismenge, ein leeres cac:Price und ein leeres cbc:PriceAmount alle am XSD-Prüfschritt abgewiesen, sodass keiner dieser Fälle diese Regel erreichte.

Zwei weitere Regeln schlagen bei derselben Position fehl, wann immer der Preis fehlt. BR-27 vergleicht den Preis mit null, und ein Preis, der nicht existiert, besteht diesen Vergleich nicht. PEPPOL-EN16931-R120 behandelt einen fehlenden Preis als 0 und erwartet daher als Positionsbetrag nur die Zuschläge der Position abzüglich der Nachlässe der Position.

BegriffBedeutungUBL-Element
BT-146Nettopreis des Artikelscac:InvoiceLine/cac:Price/cbc:PriceAmount (cac:CreditNoteLine/cac:Price/cbc:PriceAmount in a credit note)
BG-29Preiseinzelheitencac:InvoiceLine/cac:Price
BT-149Basismenge zum Artikelpreiscac:InvoiceLine/cac:Price/cbc:BaseQuantity

Wie es in einer Integration dazu kommt

Mögliche Ursachen, abgeleitet aus der Form der Regel und nicht aus gemessener Nutzung:

  • Positionen für eine Pauschale oder eine einmalige Gebühr werden nur als Betrag geführt, und der Export schreibt keinen Preis, weil die Quelle für sie keinen Preis je Einheit hat.
  • Der Preisblock wird nur ausgegeben, wenn ein Preislisteneintrag existiert, und diese Position wurde von Hand bepreist.
  • Die Abbildung wurde allein gegen das UBL-Schema geschrieben, in dem cac:Price optional ist, daher wurde es nie ergänzt.
  • Der Preis wird aus der Bestellposition übernommen, und Positionen, die erst bei der Rechnungsstellung hinzukommen, haben keine Bestellposition, aus der er stammen könnte.

So korrigieren Sie das Dokument

  1. Ermitteln Sie die Position anhand der Fundstelle des Befunds.
  2. Nehmen Sie den Nettopreis je Einheit aus der Quellposition: den Preis je Einheit nach einem etwaigen Nachlass auf Preisebene. Hat die Quelle nur eine Menge und einen Betrag, teilen Sie den Betrag vor Nachlässen und Zuschlägen der Position durch die Menge und behalten Sie so viele Nachkommastellen, dass Menge x Preis bis auf 0.02 wieder diesen Betrag ergibt.
  3. Schreiben Sie cac:Price in der Position nach cac:Item, mit cbc:PriceAmount in der Dokumentwährung und, bei einem Preis für mehrere Einheiten, cbc:BaseQuantity mit demselben unitCode wie die Positionsmenge.
  4. Halten Sie den Preis bei null oder positiv. Eine Minderungs- oder Korrekturposition erhält eine negative Menge und einen positiven Preis, sonst schlägt stattdessen BR-27 fehl.

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: Position 1 endet nach dem Artikel, ohne Preis

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example service</cbc:Name>
    <!-- tax category omitted from this fragment -->
  </cac:Item>
</cac:InvoiceLine>

Ausschnitt der korrigierten Rechnung: Auf den Artikel folgt ein Preis von 12.5 je 1 C62

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example service</cbc:Name>
    <!-- tax category omitted from this fragment -->
  </cac:Item>
  <cac:Price>
    <cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Die korrigierte Rechnung hat einen Block cac:Price mit einem cbc:PriceAmount von 12.5 und einer cbc:BaseQuantity von 1; die fehlerhafte Rechnung hat in Position 1 überhaupt keinen Preis. Das fehlerhafte Dokument meldet außerdem BR-27, weil die Prüfung, dass der Preis nicht negativ ist, keinen Wert zum Vergleichen hat und fehlschlägt, und PEPPOL-EN16931-R120, weil die Position bei einem als 0 gezählten Preis 0.00 ergeben müsste, nicht 25.00. Die Wiederherstellung des Preises behebt alle drei Befunde.

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 UBL Invoice und cac:CreditNoteLine in einer CreditNote, wo cac:Price dieselbe Struktur hat. Als der Preis aus einer Gutschriftsposition entfernt wurde, wurden dieselben drei Regeln bei cac:CreditNoteLine[1] gemeldet.
  • Der Bruttopreis und der Preisnachlass in cac:Price/cac:AllowanceCharge sind optional und spielen für diese Regel keine Rolle. Sind sie vorhanden, prüft PEPPOL-EN16931-R046, dass sich der Nettopreis aus ihnen ergibt.
  • Ein Preis von null gilt als vorhanden. Bei einer Position, deren Nettobetrag nicht null ist, scheitert er dennoch an der Positionsberechnung: Im Versuch mit der aufgezeichneten Position meldete ein Preis von 0 nur PEPPOL-EN16931-R120.

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-26 (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.