Was die Regel verlangt
Die KoSIT-Prüfregeln beschreiben das Format in der Fehlermeldung selbst. Der Kern, wörtlich:
[BR-DE-18] … 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. … 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.
Quelle: KoSIT, XRechnung-Schematron 2.6.0 in der Prüfkonfiguration vom 31.08.2026, Datei XRechnung-UBL-validation.xsl
Die Stufe ist Fehler („fatal“). Eine Rechnung mit einer falsch geschriebenen Skonto-Zeile gilt als nicht konform, auch wenn alle Beträge stimmen. Die Prüfung verwendet dafür dieses Muster:
#SKONTO#TAGE=[0-9]+#PROZENT=[0-9]+\.[0-9]{2}(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#
Wann die Regel überhaupt prüft
Das ist der Teil, den viele übersehen. BR-DE-18 schaut sich nur die Zeilen in BT-20 an, die
mit # beginnen. Daraus folgt dreierlei:
- Normale Zahlungsbedingungen sind erlaubt. „Zahlbar innerhalb von 30 Tagen“ ohne Raute löst die Regel nicht aus, auch nicht in derselben Angabe vor einer Skonto-Zeile.
- Skonto nur als Fließtext wird nicht geprüft. „2 % Skonto bei Zahlung binnen 14 Tagen“ besteht BR-DE-18, ist aber für die Software des Empfängers nicht lesbar. Wer Skonto automatisch verarbeitet haben will, braucht das Format.
- Jede andere Zeile mit Raute ist ein Fehler. Beginnt eine Zeile in BT-20
mit
#, ohne eine Skonto-Angabe zu sein, schlägt die Regel an. Das passiert etwa, wenn Textbausteine im Stil der Rechnungsbemerkungen (#ADU#…) in die Zahlungsbedingungen geraten.
Geprüft wird in UBL das erste cbc:Note unter cac:PaymentTerms, in
CII die erste ram:Description unter ram:SpecifiedTradePaymentTerms.
Getestete Beispiele
Wir haben jede Zeile dieser Tabelle am 15.10.2026 mit dem offiziellen XRechnung-Schematron
2.6.0 geprüft. Ausgangspunkt war eine gültige Testrechnung aus der KoSIT-Testsuite, in der nur
BT-20 geändert wurde. ⏎ steht für den Zeilenumbruch.
| Inhalt von BT-20 | BR-DE-18 |
|---|---|
#SKONTO#TAGE=14#PROZENT=2.00#⏎ | erfüllt |
Zahlbar in 30 Tagen.⏎#SKONTO#TAGE=14#PROZENT=2.00#⏎ | erfüllt |
#SKONTO#TAGE=7#PROZENT=3.00#⏎#SKONTO#TAGE=14#PROZENT=2.00#⏎ | erfüllt, zwei Skontostufen |
#SKONTO#TAGE=14#PROZENT=2.00#BASISBETRAG=100.00#⏎ | erfüllt |
#SKONTO#TAGE=14#PROZENT=2.00#⏎Danach netto. | erfüllt |
2 % Skonto bei Zahlung innerhalb 14 Tagen | erfüllt, aber nicht maschinenlesbar |
#SKONTO#TAGE=14#PROZENT=2.00# (ohne Umbruch) | Fehler, Zeilenumbruch fehlt |
#SKONTO#TAGE=14#PROZENT=2,00#⏎ | Fehler, Komma statt Punkt |
#SKONTO#TAGE=14#PROZENT=2#⏎ | Fehler, Nachkommastellen fehlen |
#skonto#tage=14#prozent=2.00#⏎ | Fehler, Kleinbuchstaben |
#SKONTO# TAGE=14#PROZENT=2.00#⏎ | Fehler, Leerzeichen im Eintrag |
#SKONTO#TAGE=14#PROZENT=2.00⏎ | Fehler, schließende Raute fehlt |
#SKONTO#TAGE=14#PROZENT=2.00# danach netto⏎ | Fehler, Text in derselben Zeile |
#Bitte Rechnungsnummer angeben⏎ | Fehler, Raute ohne Skonto |
Leerzeichen vor der ersten Raute hat die Prüfung in unserem Test toleriert. Verlassen sollten Sie sich darauf nicht: Die Regel selbst schreibt, zusätzliches Whitespace sei nicht zulässig.
BASISBETRAG: wann das vierte Segment nötig ist
Ohne viertes Segment bezieht sich der Prozentsatz auf den fälligen Betrag der Rechnung
(BT-115). Gilt Skonto nur für einen Teil, etwa weil Material skontierbar ist und eine
Fracht nicht, steht der Grundbetrag in BASISBETRAG=, mit Punkt und zwei
Nachkommastellen. Ein Beispiel:
#SKONTO#TAGE=10#PROZENT=3.00#BASISBETRAG=850.00#
So sieht es in der Datei aus
UBL:
<cac:PaymentTerms> <cbc:Note>Zahlbar innerhalb von 30 Tagen. #SKONTO#TAGE=14#PROZENT=2.00# </cbc:Note> </cac:PaymentTerms>
CII:
<ram:SpecifiedTradePaymentTerms> <ram:Description>Zahlbar innerhalb von 30 Tagen. #SKONTO#TAGE=14#PROZENT=2.00# </ram:Description> </ram:SpecifiedTradePaymentTerms>
Der Umbruch nach der letzten Raute gehört in den Text des Elements. Manche Programme schneiden ihn beim Export ab; dann scheitert eine sonst korrekte Angabe genau an dieser Stelle.
So wird der Fehler behoben
- Den Wert aus BT-20 ansehen. Im XRechnung-Viewer
zeigt „XML anzeigen“ den Quelltext; die Datei wird dabei nicht hochgeladen. Gesucht ist
PaymentTerms(UBL) oderSpecifiedTradePaymentTerms(CII). - Die Skonto-Zeile in genau dieser Form schreiben: Großbuchstaben, Rauten als Trenner, Punkt mit zwei Nachkommastellen, Raute am Ende, danach ein Zeilenumbruch.
- Andere Zeilen, die mit
#beginnen, aus BT-20 entfernen. - Die Rechnung neu erzeugen und vor dem Versand erneut prüfen.
Als Empfänger korrigieren Sie die Datei nicht selbst; das muss der Aussteller tun. Wie die Prüfstufen zusammenhängen, erklärt E-Rechnungen prüfen: KoSIT, EN 16931 und Pflichtangaben.
Quellen
- KoSIT: Prüfkonfiguration validator-configuration-xrechnung v2026-08-31 (XRechnung 3.0.2, XRechnung-Schematron 2.6.0)
- KoSIT: Prüfregeln validator-configuration-xrechnung 3.0.2 (XRechnung 3.0.2), Release vom 31.08.2026
Hinweis: Dieser Ratgeber gibt einen allgemeinen Überblick (Stand: Oktober 2026) und ersetzt keine Rechts- oder Steuerberatung. Für Ihren konkreten Fall wenden Sie sich bitte an Ihre Steuerberatung.