BR-DE-18: Skonto in den Zahlungsbedingungen (BT-20) richtig angeben
Mindestens eine Zeile in BT-20, die mit # beginnt, entspricht nicht exakt dem Skonto-Muster der XRechnung, oder nach der letzten Skonto-Zeile fehlt der Zeilenumbruch. Freitext ohne # prüft die Regel nicht.
[BR-DE-18] Skonto Zeilen in Invoice müssen diesem regulärem Ausdruck entsprechen: (^|\r?\n)#(SKONTO)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$. 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.
Betroffen:BT-20
Was die Regel prüft
BR-DE-18 ist eine Fehlerregel (Stufe „fatal“). Geprüft wird nur das erste Element mit den Zahlungsbedingungen (BT-20, in der Visualisierung „Skonto; weitere Zahlungsbedingungen“): in UBL cac:PaymentTerms/cbc:Note[1], in CII ram:SpecifiedTradePaymentTerms/ram:Description[1].
Der Validator zerlegt den Text an den Zeilenumbrüchen. Jede Zeile, die nach dem Entfernen von Leerraum am Anfang und Ende mit # beginnt, gilt als Skonto-Zeile und muss diesem Ausdruck entsprechen:
(^|\r?\n)#(SKONTO)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$| Segment | Erlaubter Inhalt | Beispiel |
|---|---|---|
SKONTO | nur dieses Wort, in Großbuchstaben | #SKONTO# |
TAGE=n | ganze Zahl ohne Vorzeichen | TAGE=14 |
PROZENT=n | Ziffern, Punkt, genau zwei Nachkommastellen, kein Vorzeichen | PROZENT=2.00 |
BASISBETRAG=n (optional) | Betrag mit genau zwei Nachkommastellen, Minus erlaubt | BASISBETRAG=357.93 |
Ein zweiter Teil der Bedingung betrifft das Zeilenende: Der Text hinter dem letzten #…#-Block muss mit optionalem Leerraum und einem Zeilenumbruch beginnen. Fehlt der Umbruch nach der letzten Skonto-Zeile, schlägt BR-DE-18 an, auch wenn jede Zeile für sich korrekt ist.
Typische Ursachen
- Prozentwert ohne zwei Nachkommastellen:
PROZENT=2oderPROZENT=2.5stattPROZENT=2.00bzw.PROZENT=2.50. Das passiert, wenn die Software den Wert als Zahl ohne feste Formatierung ausgibt. - Dezimalkomma statt Punkt:
PROZENT=2,00entsteht, wenn der Wert mit deutscher Ländereinstellung formatiert wird. - Einheiten im Wert:
PROZENT=2.00%oderTAGE=14Tage. - Kleinschreibung wie
#skonto#tage=14#…oder ein Leerzeichen innerhalb der Zeile, etwa#SKONTO# TAGE=14#PROZENT=2.00#. - Zwei Skontostufen in einer Zeile ohne Umbruch dazwischen:
#SKONTO#TAGE=7#PROZENT=2.00##SKONTO#TAGE=14#PROZENT=1.00#. - Die Software kürzt Leerraum am Ende des Textes weg und entfernt damit den Zeilenumbruch nach der letzten Skonto-Zeile.
- Verzugszinsen im alten Format
#VERZUG#…: Dieses Segment wurde mit XRechnung 3.0.0 gestrichen. Vorlagen aus der Zeit davor erzeugen deshalb jetzt BR-DE-18. - Freitext, der mit
#beginnt, etwa eine Aufzählung mit Rautenzeichen. Laut Spezifikation darf unstrukturierter Text in BT-20 überhaupt kein#enthalten. - Basisbetrag im falschen Format:
BASISBETRAG=357,93oderBASISBETRAG=357.9.
Beispiel aus der KoSIT-Testsuite
Testdatei 01.10a enthält drei Skontostufen. Die dritte Zeile mit PROZENT=0.00 legt fest, dass nach 30 Tagen kein Abzug mehr gilt. Jede Zeile beginnt und endet mit #; auch nach der letzten Stufe folgt ein Zeilenumbruch, erst dann schließt das Element.
<cac:PaymentTerms>
<cbc:Note>#SKONTO#TAGE=7#PROZENT=2.00#
#SKONTO#TAGE=14#PROZENT=1.00#
#SKONTO#TAGE=30#PROZENT=0.00#
</cbc:Note>
</cac:PaymentTerms>Quelle: KoSIT XRechnung-Testsuite 2026-08-31, Datei instances/standard/01.10a-INVOICE_ubl.xml (Apache 2.0)
<ram:SpecifiedTradePaymentTerms>
<ram:Description>#SKONTO#TAGE=7#PROZENT=2.00#
#SKONTO#TAGE=14#PROZENT=1.00#
#SKONTO#TAGE=30#PROZENT=0.00#
</ram:Description>
</ram:SpecifiedTradePaymentTerms>Quelle: KoSIT XRechnung-Testsuite 2026-08-31, Datei instances/standard/01.10a-INVOICE_uncefact.xml (Apache 2.0)
Zum Vergleich steht in Testdatei 03.02a der Freitext „Bei Zahlungen binnen 14 Tagen, 2% Skonto“. Diese Datei ist gültig, weil keine Zeile mit # beginnt. Automatisch auswerten kann der Rechnungsempfänger diese Angabe allerdings nicht; Abschnitt 13.2 der Spezifikation nennt genau das als Grund für das feste Format.
Lösung
In der Rechnungssoftware
- Prüfen Sie, ob Ihr Programm eigene Felder für Skonto (Tage, Prozentsatz) hat. Wenn ja, tragen Sie die Bedingungen dort ein und nicht im Freitext der Zahlungsbedingungen.
- Wenn Sie die Zeile selbst schreiben: Großbuchstaben, keine Leerzeichen, Punkt als Dezimaltrenner, Prozentwert immer mit zwei Nachkommastellen, jede Stufe in einer eigenen Zeile.
- Entfernen Sie Rautenzeichen aus sonstigen Hinweisen in den Zahlungsbedingungen.
- Gilt der Skonto nur für einen Teil des Betrags, etwa nur für Material, ergänzen Sie
#BASISBETRAG=…#mit zwei Nachkommastellen.
Im XML (UBL und CII)
- Formatieren Sie Prozentwert und Basisbetrag unabhängig von der Ländereinstellung, z. B. mit fester Formatierung auf zwei Nachkommastellen und Punkt.
- Schreiben Sie nach jeder Skonto-Zeile einen Zeilenumbruch, auch nach der letzten, und kürzen Sie den Elementinhalt danach nicht.
- Weiterer Freitext gehört in dasselbe Element (UBL: erstes
cbc:Noteincac:PaymentTerms, CII: ersteram:Description), jeweils in eigenen Zeilen ohne#am Anfang. - Laden Sie die neue Datei in XRechnung prüfen; der Bericht nennt bei einem verbleibenden Fehler den kompletten Inhalt von BT-20.
Quellen
- XRechnung-Schematron 2.6.0 (Release v2.6.0, kompatibel mit XRechnung 3.0)KoSIT (GitHub itplr-kosit), 2. September 2026 · geprüft am 7. November 2026
- Spezifikation XRechnung 3.0.2 (CIUS und Extension), Abschnitt 11.1 (BT-20) und Abschnitt 13.2 „Umgang mit Skonto“KoSIT (xeinkauf.de), 20. Juni 2024 · geprüft am 7. November 2026
- XRechnung-Testsuite 2026-08-31 (Release v2026-08-31)KoSIT (GitHub itplr-kosit), 2. September 2026 · geprüft am 7. November 2026