BR-42EN 16931

BR-42: Positionsnachlass ohne Grund

Ein Nachlass auf Positionsebene (BG-27) braucht einen Grund als Freitext (BT-139) oder als Code (BT-140). Häufig wird nur der Rabattbetrag erfasst und das Grundfeld bleibt leer.

Regeltext im Prüfregelwerk

Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).

BG-27BT-139BT-140

Auch auf Positionsebene gilt: Ein Rabatt ohne Begründung besteht die Prüfung nicht. BR-42 verlangt für jeden Zeilennachlass einen Grund, als Text oder als Code.

Was die Regel prüft

Jeder Positionsnachlass (BG-27, BG = Business Group, eine Feldgruppe der Norm) muss mindestens eines dieser Felder füllen (BT = Business Term, das nummerierte Feld der Norm):

  • BT-139, ein Freitext wie „Mengenrabatt" oder „Sonderkondition"
  • BT-140, ein Code aus der Codeliste UNTDID 5189 (z. B. 95 für Discount)

Sind beide gefüllt, müssen sie dieselbe Art von Nachlass bezeichnen (geprüft von BR-CO-07). Die Regel ist strukturell identisch mit BR-33, nur eben pro Rechnungszeile statt fürs ganze Dokument.

Warum sie in der Praxis fehlschlägt

Der klassische Fall ist ein Prozentrabatt-Feld in der Positionserfassung: Der Nutzer trägt „10 %" ein, die Software rechnet den Betrag aus und schreibt ihn in die XML, aber ein Grundfeld gibt es in der Maske gar nicht. Der Nachlass landet ohne BT-139/BT-140 in der Datei.

Zweiter Fall: Import aus Warenwirtschaft oder Kassensystem. Dort ist der Rabatt oft nur eine Zahl am Artikel, ohne Textattribut. Beim Mapping in die E-Rechnung fehlt dann die Quelle für den Grund.

Dritter Fall: Der Grund wird als leeres Element geschrieben, weil das Template den Knoten immer anlegt. Das löst zusätzlich Meldungen über leere Elemente aus (PEPPOL-EN16931-R008).

So behebst du den Fehler

Trag pro Positionsrabatt einen kurzen Freitext in BT-139 ein. Bei generierten Rabatten darf der Text ruhig generisch sein („Rabatt", „Mengenrabatt"), er muss nur vorhanden und nicht leer sein. Wenn dein System viele gleichartige Rabatte erzeugt, setz einen sinnvollen Standardtext im Mapping, statt das Feld offen zu lassen.

Alternativ genügt der Code BT-140 allein; für deutsche B2B-Rechnungen ist der Freitext aber der robustere und lesbarere Weg. Belegschmied schreibt bei Positionsrabatten automatisch eine Bezeichnung als BT-139 mit.

XML-Beispiel: vorher und nachher

<!-- verletzt BR-42: weder Reason (BT-139) noch ReasonCode (BT-140) -->
<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator><udt:Indicator>false</udt:Indicator></ram:ChargeIndicator>
  <ram:ActualAmount>20.00</ram:ActualAmount>
</ram:SpecifiedTradeAllowanceCharge>
<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator><udt:Indicator>false</udt:Indicator></ram:ChargeIndicator>
  <ram:ActualAmount>20.00</ram:ActualAmount>
  <ram:Reason>Mengenrabatt 10 %</ram:Reason>
</ram:SpecifiedTradeAllowanceCharge>

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.

Regeln, die oft zusammen auftreten

← Alle Fehlermeldungen im Überblick