BR-DE-18: Skonto falsch angegeben
Skontoangaben in den Zahlungsbedingungen (BT-20) müssen einem festen Zeilenformat folgen, zum Beispiel „#SKONTO#TAGE=10#PROZENT=2.00#“.
- Regelwerk
- XRechnung (KoSIT)
- Syntax
- UBL und CII
- Betroffene Felder
- BT-20, BT-115
Offizieller Regeltext
CII: Skonto Zeilen in Element muessen 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.
UBL: Skonto Zeilen in Element 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.
Kursiv gesetzte Teile sind Platzhalter: Der Validator ersetzt sie in seiner Meldung durch den Namen des geprüften Elements bzw. den Wert des Attributs.
Regeltext aus dem XRechnung-Schematron in Version 2.6.0 (KoSIT), Lizenz Apache 2.0; enthalten in der XRechnung-Validatorkonfiguration 2026-08-31.
Schweregrad
- UBL-Rechnung: Fehler
- UBL-Gutschrift: Fehler
- CII: Fehler
Ein Verstoß führt im Szenario „XRechnung“ des KoSIT-Validators zur Ablehnung der Rechnung.
Typische Ursachen
Der Prozentsatz hat keine zwei Nachkommastellen, es wird ein Komma statt eines Punkts verwendet, die Angabe ist kleingeschrieben, enthält Leerzeichen oder die Skontozeile endet nicht mit einem Zeilenumbruch.
So behebst du den Fehler
Jede Skontostufe als eigene Zeile im Format #SKONTO#TAGE=n#PROZENT=n.nn# angeben, bei abweichendem Grundbetrag mit viertem Segment, also #SKONTO#TAGE=n#PROZENT=n.nn#BASISBETRAG=n.nn#. Alles in Großbuchstaben und ohne Leerzeichen; nach der Skontoangabe folgt ein Zeilenumbruch. Freitext kann in weiteren Zeilen folgen.
Geprüftes Beispiel: falsch und richtig
Die Auszüge stammen aus vollständigen, synthetischen Rechnungen des E-Rechnungs-Testkorpus. Geänderte Zeilen sind hervorgehoben. Beide Dateien werden in den automatischen Tests mit dem KoSIT-Validator geprüft.
Beispiel in UBL
Änderung gegenüber der gültigen Rechnung: Skontoangabe ohne zwei Nachkommastellen (PROZENT=2).
</cac:PaymentMeans>
<cac:PaymentTerms>
<cbc:Note>#SKONTO#TAGE=10#PROZENT=2#
Zahlbar innerhalb von 30 Tagen ohne Abzug.</cbc:Note>
</cac:PaymentTerms>
<cac:TaxTotal> </cac:PaymentMeans>
<cac:PaymentTerms>
<cbc:Note>#SKONTO#TAGE=10#PROZENT=2.00#
Zahlbar innerhalb von 30 Tagen ohne Abzug; bei Zahlung innerhalb von 10 Tagen 2 % Skonto.</cbc:Note>
</cac:PaymentTerms>
<cac:TaxTotal>Prüfergebnis (KoSIT-Validator 1.6.3, Konfiguration 2026-08-31): falsche Datei abgelehnt, korrigierte Datei angenommen. Meldungen zur falschen Datei:
Vollständige Dateien im Testkorpus: br-de-18-skonto-format_ubl.xml (falsch) und skonto_ubl.xml (richtig).
Beispiel in CII
Änderung gegenüber der gültigen Rechnung: Skontoangabe ohne zwei Nachkommastellen (PROZENT=2).
</ram:ApplicableTradeTax>
<ram:SpecifiedTradePaymentTerms>
<ram:Description>#SKONTO#TAGE=10#PROZENT=2#
Zahlbar innerhalb von 30 Tagen ohne Abzug.</ram:Description>
<ram:DueDateDateTime>
<udt:DateTimeString format="102">20261031</udt:DateTimeString> </ram:ApplicableTradeTax>
<ram:SpecifiedTradePaymentTerms>
<ram:Description>#SKONTO#TAGE=10#PROZENT=2.00#
Zahlbar innerhalb von 30 Tagen ohne Abzug; bei Zahlung innerhalb von 10 Tagen 2 % Skonto.</ram:Description>
<ram:DueDateDateTime>
<udt:DateTimeString format="102">20261031</udt:DateTimeString>Prüfergebnis (KoSIT-Validator 1.6.3, Konfiguration 2026-08-31): falsche Datei abgelehnt, korrigierte Datei angenommen. Meldungen zur falschen Datei:
Vollständige Dateien im Testkorpus: br-de-18-skonto-format_cii.xml (falsch) und skonto_cii.xml (richtig).
Testdateien zu BR-DE-18
- br-de-18-skonto-format_ubl.xml – Skontoangabe ohne zwei Nachkommastellen (PROZENT=2)
- br-de-18-skonto-format_cii.xml – Skontoangabe ohne zwei Nachkommastellen (PROZENT=2)
- br-de-18-skonto-kleinbuchstaben_ubl.xml – Skontoangabe in Kleinbuchstaben
- br-de-18-skonto-kleinbuchstaben_cii.xml – Skontoangabe in Kleinbuchstaben
Technische Details: Kontext und Prüfausdruck aus dem Schematron
CII
Kontext:
/rsm:CrossIndustryInvoice
Prüfausdruck:
every $line in rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[1]/tokenize(. , '(\r?\n)')[starts-with( normalize-space(.) , '#')] satisfies matches ( normalize-space ($line), $XR-SKONTO-REGEX ) and matches( rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[1]/tokenize(. , '#.+#')[last()], '^\s*\n' )
UBL
Kontext:
/ubl:Invoice | /cn:CreditNote
Prüfausdruck:
every $line in cac:PaymentTerms/cbc:Note[1]/tokenize(. , '(\r?\n)')[starts-with( normalize-space(.) , '#')] satisfies matches ( normalize-space ($line), $XR-SKONTO-REGEX) and matches( cac:PaymentTerms/cbc:Note[1]/tokenize(. , '#.+#')[last()], '^\s*\n' )
Technische Formatprüfung nach XRechnung 3.0.2; keine steuerliche oder rechtliche Beratung.