PEPPOL-EN16931-R101: Dokumentreferenz auf Positionsebene falsch verwendet
Auf Positionsebene ist nur eine einzige Art von Dokumentreferenz erlaubt: die Objektkennung der Rechnungszeile (BT-128). Lieferschein- oder Bestellnummern je Position lösen den Fehler aus.
Element Additional referenced document can only be used for Invoice line object.
Die Meldung klingt kryptisch, meint aber etwas Einfaches: Du hast an einer Rechnungsposition ein Dokument referenziert, und das erlaubt die Norm dort nur in genau einem Sonderfall.
Was die Regel prüft
Auf Positionsebene kennt die EN 16931 nur ein einziges Referenzfeld: die Objektkennung der Rechnungsposition (BT-128, BT steht für Business Term, das nummerierte Feld der Norm). Sie verweist auf ein Objekt, auf das sich die Zeile bezieht, etwa eine Zählernummer oder eine Abonnement-ID, und muss als Dokumenttyp den Code 130 tragen. Jede andere Dokumentreferenz an einer Position, zum Beispiel ein Lieferschein oder ein Vertrag je Zeile, ist unzulässig. Solche Referenzen gehören auf Dokumentebene, etwa als rechnungsbegründende Unterlage (BG-24).
Die Regel ist in der UBL-Syntax formuliert, wo Positionsreferenzen im Element cac:DocumentReference stehen. In CII (ZUGFeRD) entspricht dem das ram:AdditionalReferencedDocument innerhalb der Position.
Warum sie in der Praxis fehlschlägt
Typischer Auslöser sind Warenwirtschafts- und Handwerkerprogramme, die je Position die zugehörige Lieferschein- oder Auftragsnummer mitführen und diese Information beim Export brav als Dokumentreferenz an die Zeile hängen. Fachlich nachvollziehbar, von der Norm aber nicht vorgesehen.
Zweiter Fall: Die Software schreibt die Objektkennung zwar an die richtige Stelle, lässt aber den Dokumenttyp-Code 130 weg oder setzt einen anderen Code. Dann erkennt der Validator die Referenz nicht als zulässiges „Invoice line object" und meldet ebenfalls R101.
So behebst du den Fehler
Entscheide, was die Referenz aussagen soll. Eine Bestellnummer gehört in das Feld Bestellreferenz (BT-13), ein Vertrag in die Vertragsreferenz (BT-12), ein Lieferschein in die Lieferscheinreferenz (BT-16), alles auf Dokumentebene. Gilt die Angabe nur für einzelne Positionen, kannst du sie ersatzweise in die Positionsbeschreibung aufnehmen.
Ist die Angabe wirklich eine Objektkennung der Zeile (Zähler, Abo, Anlage), behalte sie an der Position und setz den Dokumenttyp-Code 130.
XML-Beispiel: vorher und nachher
Da die Regel UBL-spezifisch formuliert ist, hier der UBL-Ausschnitt. Eine Lieferscheinnummer hängt als Referenz an der Position:
<!-- verletzt PEPPOL-EN16931-R101: Referenz ohne Typ 130 an der Position -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cac:DocumentReference>
<cbc:ID>LS-2026-0815</cbc:ID>
</cac:DocumentReference>
<!-- … -->
</cac:InvoiceLine>
Korrigiert: An der Position steht nur noch eine echte Objektkennung mit Typ 130, der Lieferschein wandert auf Dokumentebene:
<cac:DespatchDocumentReference>
<cbc:ID>LS-2026-0815</cbc:ID>
</cac:DespatchDocumentReference>
<!-- … -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cac:DocumentReference>
<cbc:ID schemeID="ABZ">ZAEHLER-4711</cbc:ID>
<cbc:DocumentTypeCode>130</cbc:DocumentTypeCode>
</cac:DocumentReference>
<!-- … -->
</cac:InvoiceLine>
Rechnung selbst prüfen
Lade deine Datei hoch und sieh in Sekunden, welche Regeln sie besteht und welche nicht. Kostenlos, ohne Anmeldung, nichts wird gespeichert.