AttestwireXRechnung-RegelnBR-DE-18

BR-DE-18 Skonto in den Zahlungsbedingungen folgt einer festen Grammatik

Ihre Rechnung wurde abgelehnt, weil eine Skonto-Angabe in den Zahlungsbedingungen nicht der vorgeschriebenen Schreibweise folgt. Eine Zeile, die mit "#" beginnt, ist für XRechnung eine maschinenlesbare Skonto-Angabe und muss genau so aussehen: #SKONTO#TAGE=n#PROZENT=n.nn#, optional gefolgt von #BASISBETRAG=n.nn#. Im Standard ist das Feld BT-20; BR-DE-18 ist die Regel, die die Schreibweise prüft.

Die Regelnummer bezeichnet die fehlgeschlagene Prüfung. BT steht für ein Rechnungsfeld, BG für eine Gruppe von Feldern. XRechnung ergänzt die europäische Norm EN 16931 um deutsche Anforderungen (CIUS).

Informationselement
BT-20
Schweregrad
fatal — Ablehnung: das Dokument ist nicht konform
Regelwerk
XRechnung-CIUS (KoSIT) — nationale Verschärfung der EN 16931

Die Lösung

Schreiben Sie jeden Skonto-Eintrag in eine eigene Zeile, etwa "#SKONTO#TAGE=14#PROZENT=2.00#". Den Basisbetrag nur ergänzen, wenn sich das Skonto auf einen Teilbetrag statt auf den Gesamtbetrag (BT-115) bezieht.

Ein Wert, der die Prüfung besteht

So sieht das Feld aus, wenn es stimmt
"paymentTerms": "Zahlbar innerhalb von 30 Tagen.\n#SKONTO#TAGE=14#PROZENT=2.00#\n"

Was die Regel verlangt

Die Form ist bewusst starr, denn sie ist die eine Stelle, an der aus freiem Text in BT-20 etwas Maschinenlesbares wird: #SKONTO#TAGE=14#PROZENT=2.00#, optional mit einem vierten Segment #BASISBETRAG=1000.00# vor dem abschließenden #.

Die Einzelheiten, an denen es in der Praxis scheitert: Jedes Segment wird durch # getrennt und abgeschlossen. Alles steht in Großbuchstaben. Der Prozentwert hat genau zwei Nachkommastellen mit Punkt — niemals ein Komma — und kein Vorzeichen. Leerzeichen sind innerhalb des Eintrags nirgends erlaubt. Jeder Eintrag steht in einer eigenen Zeile und endet mit einem Zeilenumbruch.

Fließtext dürfen Sie weiterhin in BT-20 schreiben — er darf nur keine Zeile mit # beginnen. Zahlbar innerhalb von 30 Tagen. und darunter die Skonto-Zeile ist genau das, was der Standard vorsieht.

Der offizielle Regeltext

Die Regel BR-DE-18 stammt aus der XRechnung-CIUS und wird im Schematron der KoSIT geführt, den offiziellen Prüfregeln. Ein wörtliches Zitat des Regeltextes liegt uns für diese Regel nicht vor; was Sie oben lesen, ist unsere Erklärung. Maßgeblich ist die Veröffentlichung der KoSIT.

Warum es die Regel gibt

Skonto ist die einzige Zahlungsbedingung, die der Empfänger automatisch ausrechnen können muss — die Frist entscheidet, wann angewiesen wird, und der Prozentsatz, über welchen Betrag. Freier Text taugt dafür nicht. Deshalb hat XRechnung eine Mini-Syntax in ein Textfeld gelegt, und deshalb ist sie so unnachgiebig: Eine Grammatik, die Ausnahmen zulässt, ist keine.

So sieht der Befund aus

Genau dieses Objekt liefert die Bibliothek in result.errors, wenn die Regel anschlägt. Es wird beim Bauen dieser Seite durch Ausführen von @attestwire/en16931 erzeugt und entspricht dem Text, den Sie in Ihrem eigenen Log sehen. Die Meldung selbst ist englisch, weil die Bibliothek englisch meldet.

TeachingError
{
  "rule": "BR-DE-18",
  "field": "BT-20",
  "severity": "fatal",
  "message": "Line 1 of the payment terms (BT-20) starts with \"#\", which marks it as a Skonto (early-payment discount) entry, but \"#SKONTO#TAGE=14#PROZENT=2#\" does not match the grammar XRechnung prescribes. The format is rigid on purpose — it is the one place the standard turns free-text payment terms into something machine-readable — and it is: #SKONTO#TAGE=n#PROZENT=n.nn# with an optional fourth segment #BASISBETRAG=n.nn# before the closing #. Every segment is separated and terminated by \"#\", everything is upper case, the percentage carries exactly two decimals with a dot (never a comma) and no sign, and no whitespace of any kind is allowed inside the entry.",
  "fix": "Write each discount as its own line, e.g. \"#SKONTO#TAGE=14#PROZENT=2.00#\". Add the base amount only when the discount applies to part of the invoice rather than to the full amount due (BT-115): \"#SKONTO#TAGE=14#PROZENT=2.00#BASISBETRAG=1000.00#\". Each entry must end with a newline. Human-readable prose is fine in BT-20 as well — it just must not start a line with \"#\".",
  "example": "\"paymentTerms\": \"Zahlbar innerhalb von 30 Tagen.\\n#SKONTO#TAGE=14#PROZENT=2.00#\\n\"",
  "xpath": "/ubl:Invoice/cac:PaymentTerms/cbc:Note",
  "docsUrl": "https://attestwire.com/rules/BR-DE-18"
}

xpath zeigt auf das Element in einem UBL-Dokument — dort meldet auch ein KoSIT-Validator denselben Mangel. Bei einer CII-Rechnung (xrechnung-cii, ZUGFeRD, Factur-X) erhalten Sie dieselbe Zeichenkette und müssen sie selbst auf das CII-Element übertragen.

Häufige Fragen

Was bedeutet BR-DE-18?
Ihre Rechnung wurde abgelehnt, weil eine Skonto-Angabe in den Zahlungsbedingungen nicht der vorgeschriebenen Schreibweise folgt. Eine Zeile, die mit "#" beginnt, ist für XRechnung eine maschinenlesbare Skonto-Angabe und muss genau so aussehen: #SKONTO#TAGE=n#PROZENT=n.nn#, optional gefolgt von #BASISBETRAG=n.nn#. Im Standard ist das Feld BT-20; BR-DE-18 ist die Regel, die die Schreibweise prüft.
Wie behebe ich BR-DE-18?
Schreiben Sie jeden Skonto-Eintrag in eine eigene Zeile, etwa "#SKONTO#TAGE=14#PROZENT=2.00#". Den Basisbetrag nur ergänzen, wenn sich das Skonto auf einen Teilbetrag statt auf den Gesamtbetrag (BT-115) bezieht.
Ist BR-DE-18 Pflicht für XRechnung?
Ja. Ein Verstoß führt zur Ablehnung, aber nur, wenn Sie überhaupt eine Zeile mit "#" beginnen. Wer kein Skonto anbietet, ist von der Regel nicht betroffen.

Über eine Fehlermeldung hierhergekommen? Der docsUrl jedes Befunds führt auf die englische Seite; diese hier ist ihre deutsche Fassung. Etwas stimmt nicht — schreiben Sie uns.