BR-DE-18Skonto Zeilen in […] müssen diesem regulärem Ausdruck entsprechen: […].
Offizieller 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.
KoSIT formuliert diese Regel in den beiden Dateien unterschiedlich. Oben steht die UBL-Fassung, hier die andere:
Wortlaut in CII
Skonto Zeilen in […] muessen diesem regulärem Ausdruck entsprechen: […]. 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.
Skonto-Angaben in den Zahlungsbedingungen (BT-20) müssen einem festen maschinenlesbaren Format folgen: #SKONTO#TAGE=n#PROZENT=n.nn#, je Angabe eine Zeile, alles in Großbuchstaben, Prozent mit Punkt und genau zwei Nachkommastellen.
- Schweregrad
- Fehler
- Gilt für
- CII, UBL
- Regelwerk
- v2026-08-31
- Geprüft am
Geschrieben und gegen das offizielle KoSIT-Regelwerk geprüft von Dmytro Yalanskyi, NormAPI.
Warum tritt BR-DE-18 auf?
Die Regel prüft ausschließlich Zeilen, die mit # beginnen. Ein freier Satz wie „2 % Skonto bei Zahlung innerhalb von 14 Tagen“ wird ignoriert und fällt nicht durch — er ist für den Empfänger allerdings auch nicht maschinell auswertbar. Der Fehler entsteht beim halb korrekten Versuch: PROZENT=2 statt PROZENT=2.00, ein Leerzeichen zu viel oder der fehlende Zeilenumbruch am Ende. Der offizielle Regeltext lässt oben zwei Stellen offen, weil das Regelwerk sie erst beim Prüfen einsetzt: den Namen des Elements und den Ausdruck selbst. Er lautet (^|\r?\n)#(SKONTO)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$ und sagt drei Dinge, die im Fließtext fehlen: TAGE nimmt nur ganze Zahlen, PROZENT kein Vorzeichen, BASISBETRAG ausdrücklich auch ein Minus.
Was der Validator prüft
Der Ausdruck, den das offizielle KoSIT-Regelwerk auswertet — nicht paraphrasiert, sondern aus der ausgelieferten Schematron-Datei gelesen. UBL und CII adressieren verschiedene Dokumentbäume, deshalb steht dieselbe Regel je Syntax anders da.
- UBL
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' )Variablen darin
- $XR-SKONTO-REGEX
- '(^|\r?\n)#(SKONTO)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$'
- CII
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' )Variablen darin
- $XR-SKONTO-REGEX
- '(^|\r?\n)#(SKONTO)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$'
Quelle: Regelwerk v2026-08-31
Wie behebt man BR-DE-18?
Schreiben Sie den Eintrag exakt als #SKONTO#TAGE=14#PROZENT=2.00# und schließen Sie ihn mit einem Zeilenumbruch ab. Prozentwerte immer mit Punkt und genau zwei Nachkommastellen. Bezieht sich das Skonto nur auf einen Teilbetrag, folgt als viertes Segment #BASISBETRAG=n.nn#. Kein zusätzliches Leerzeichen, kein weiterer Text in derselben Zeile.
Im XML
Ausschnitt in UBL. Der CII-Pfad steht oben im Text — dieselbe Änderung, andere Elementnamen.
<cac:PaymentTerms>
<cbc:Note>2 % Skonto bei Zahlung innerhalb von 14 Tagen</cbc:Note>
</cac:PaymentTerms><cac:PaymentTerms>
<cbc:Note>#SKONTO#TAGE=14#PROZENT=2.00#
Zahlbar innerhalb von 30 Tagen netto</cbc:Note>
</cac:PaymentTerms>Verwandte Regeln
NormAPI liefert technische Validierung, keine Steuer- oder Rechtsberatung.