Auf dieser Seite
Die kurze Antwort
BR-21 schlägt bei einer Position fehl, deren eigenes cbc:ID keinen Text hat. Im aufgezeichneten Beispiel beginnt die einzige cac:InvoiceLine mit <cbc:ID></cbc:ID>. Schreiben Sie die Positionsnummer oder eine andere Referenz, die diese Position von den anderen unterscheidet, in dieses Element jeder cac:InvoiceLine oder cac:CreditNoteLine.
Das Element zu löschen ist kein Ausweg. Das UBL-Schema verlangt in jeder Position ein cbc:ID, daher wird eine Position ohne dieses Element im XSD-Prüfschritt abgewiesen, und keine der Geschäftsregeln wird gemeldet.
Was die Regel prüft
Die Regel wird einmal pro Position ausgewertet, für jede cac:InvoiceLine in einer Rechnung und jede cac:CreditNoteLine in einer Gutschrift. Sie liest nur das cbc:ID, das direkt zur Position gehört, und ist erfüllt, wenn dieses Element mindestens ein Zeichen enthält, das kein Leerraum ist.
Leer und nur aus Leerraum bestehend werden gleich behandelt. Im Versuch meldeten ein Start- und End-Tag ohne Inhalt, ein selbstschließendes <cbc:ID/> und ein Element mit drei Leerzeichen jeweils BR-21 zusammen mit PEPPOL-EN16931-R008. Ein leeres cbc:ID mit einem Attribut schemeID schlug auf dieselbe Weise fehl, weil ein Attribut kein Inhalt ist.
Eine Position ganz ohne cbc:ID erreicht diese Regel nie. Im Versuch mit einer Rechnung und einer Gutschrift wies der XSD-Prüfschritt das Dokument ab, und die Prüfschritte EN 16931 und Peppol wurden übersprungen.
Über das Vorhandensein hinaus wird der Wert nicht untersucht. LINE-A besteht genauso wie 1, und im Versuch bestand eine Rechnung mit zwei Positionen, die beide die Nummer 1 trugen, jeden Prüfschritt. EN 16931 beschreibt die Positionskennung als innerhalb des Dokuments eindeutig; halten Sie sie daher eindeutig, auch wenn der Validator das nicht prüft.
| Begriff | Bedeutung | UBL-Element |
|---|---|---|
| BT-126 | Kennung der Rechnungsposition | cac:InvoiceLine/cbc:ID (cac:CreditNoteLine/cbc:ID in a credit note) |
| BG-25 | Rechnungsposition | cac:InvoiceLine (cac:CreditNoteLine in a credit note) |
Wie es in einer Integration dazu kommt
Mögliche Ursachen, abgeleitet aus der Form der Regel und nicht aus gemessener Nutzung:
- Positionsnummern werden beim Buchen der Rechnung vergeben, und das XML wird aus einem Entwurf erzeugt, in dem das Feld noch leer ist.
- Positionen, die der Export selbst hinzufügt, etwa Versandkosten oder eine Rundungsposition, haben keine Zeile in der Quelltabelle und daher keine Positionsnummer zum Übernehmen.
- Eine Positionsreferenz mit dem Wert null wird als leeres Element serialisiert, statt aus der Reihenfolge der Position befüllt zu werden.
- Die Kennung wird aus einem Feld gelesen, das es nur für manche Positionsarten gibt, etwa eine Bestellpositionsreferenz, und bei Freitextpositionen ist es leer.
So korrigieren Sie das Dokument
- Erkennen Sie am Ort des Befunds, etwa
cac:InvoiceLine[1], welche Position betroffen ist. Jede Position mit leerer Kennung ergibt einen eigenen Befund. - Nehmen Sie die Kennung aus der Quellposition: ihre Positionsnummer oder laufende Nummer auf der ausgestellten Rechnung. Hat die Quelle keine, nummerieren Sie die Positionen beim Erzeugen des XML in Dokumentreihenfolge:
1,2,3. - Halten Sie die Kennungen innerhalb des Dokuments eindeutig und gleich wie auf jedem PDF oder jeder Kopie der Rechnung, damit der Käufer sich Ihnen gegenüber auf eine Position beziehen kann.
- Belassen Sie
cbc:IDdort, wo das Schema es vorsieht, am Anfang der Position vor einem etwaigencbc:Noteund der Menge. Wird es verschoben oder entfernt, wird aus diesem Befund ein XSD-Fehler.
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: Die Positionskennung ist vorhanden, aber leer
<cac:InvoiceLine>
<cbc:ID></cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Ausschnitt der korrigierten Rechnung: Die Position hat die Nummer 1
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Nur das cbc:ID der Position unterscheidet sich: leer in der fehlerhaften Rechnung, 1 in der korrigierten. Das fehlerhafte Dokument meldet außerdem PEPPOL-EN16931-R008, verortet an diesem cbc:ID statt an der Position, weil Peppol jedes Element ohne Inhalt ablehnt. Die Positionsnummer einzutragen behebt beide Befunde.
Was der Validator gemeldet hat
- Die fehlerhafte Rechnung meldet BR-21 und PEPPOL-EN16931-R008. 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 einer UBLInvoiceund fürcac:CreditNoteLinein einerCreditNote. Im Versuch mit einer Gutschrift meldete eine leere PositionskennungBR-21ancac:CreditNoteLine[1]undPEPPOL-EN16931-R008an derencbc:ID, dasselbe Paar wie bei der Rechnung. - Andere
cbc:ID-Elemente liest diese Regel nicht: weder die Dokumentnummer direkt unter dem Wurzelelement, dieBR-02abdeckt, noch die in der Position verschachtelten, etwa den Code der Umsatzsteuerkategorie incac:ClassifiedTaxCategory.
Verwandte Regeln
- PEPPOL-EN16931-R008 wird am selben Element gemeldet, wenn die Positionskennung vorhanden, aber leer ist
- BR-02 ist die entsprechende Vorhandenseinsprüfung für die Dokumentnummer unter dem Wurzelelement
- BR-22 verlangt eine Menge in derselben Position
- BR-25 verlangt einen Artikelnamen in jeder 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-24.
Die offizielle Definition von BR-21 (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.

