Attestwire › XRechnung-Regeln › BR-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- Gilt für
xrechnung-ubl, xrechnung-cii- 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
"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 Informationen zur Gewährung von Skonto müssen wie folgt im Element "Payment terms" (BT-20) übermittelt werden: Anzugeben ist im ersten Segment "SKONTO", im zweiten "TAGE=n", im dritten "PROZENT=n". Prozentzahlen sind ohne Vorzeichen sowie mit Punkt getrennt von zwei Nachkommastellen anzugeben. Liegt dem zu berechnenden Betrag nicht BT-115, "fälliger Betrag" zugrunde, sondern nur ein Teil des fälligen Betrags der Rechnung, ist der Grundwert zur Berechnung von Skonto als viertes Segment "BASISBETRAG=n" gemäß dem semantischen Datentypen Amount anzugeben.
Jeder Eintrag beginnt mit einer #, die Segmente sind mit einer # getrennt und eine Zeile schließt mit einer # ab. Am Ende einer vollständigen Skontoangabe muss ein XML-konformer Zeilenumbruch folgen. Alle Angaben zur Gewährung von Skonto müssen in Großbuchstaben gemacht werden. Zusätzliches Whitespace (Leerzeichen, Tabulatoren oder Zeilenumbrüche) ist nicht zulässig.
Andere Zeichen oder Texte als in den oberen Vorgaben genannt sind nicht zulässig.
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.
{
"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.