Zum Inhalt springen

BR-DE – XRechnung

BR-DE-18: Skonto in den Zahlungsbedingungen (BT-20) falsch formatiert

FehlerGeschäftsregel XRechnung (KoSIT)

Offizielle Meldung

[BR-DE-18] Skonto Zeilen in müssen 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.

Quelle: KoSIT XRechnung, Version 3.0.2 (Schematron 2.6.0)

Was die Meldung bedeutet

Die Zahlungsbedingungen enthalten eine Skonto-Angabe, die nicht dem festen Muster von XRechnung folgt. Skonto wird nicht als Prosa, sondern in genau vorgeschriebener Form eingetragen, damit der Empfänger den Abzug automatisch berechnen kann. Sobald eine Zeile mit # beginnt, muss sie SKONTO, die Tage und den Prozentsatz mit zwei Nachkommastellen nennen, mit # enden und von einem Zeilenumbruch gefolgt sein. Weicht die Schreibweise ab, wird die Rechnung abgelehnt.

Häufige Ursachen

  • Prozentsatz ohne zwei Nachkommastellen oder mit Komma statt Punkt, zum Beispiel PROZENT=2 oder PROZENT=2,00.
  • Kleinschreibung, Leerzeichen innerhalb der Segmente oder eine fehlende Raute am Zeilenende.
  • Nach der letzten Skonto-Zeile fehlt der Zeilenumbruch, oder es folgt weiterer Text in derselben Zeile.

So beheben Sie den Fehler

Schreiben Sie jede Skonto-Staffel als eigene Zeile nach dem Muster #SKONTO#TAGE=n#PROZENT=n.nn# und schließen Sie die letzte Zeile mit einem Zeilenumbruch ab. Andere Bedingungen dürfen davor als normaler Text stehen.

Vorher – fehlerhaft
<cac:PaymentTerms>
  <cbc:Note>Zahlbar innerhalb von 30 Tagen.
#SKONTO#TAGE=10#PROZENT=2#</cbc:Note>
</cac:PaymentTerms>
Nachher – korrigiert
<cac:PaymentTerms>
  <cbc:Note>Zahlbar innerhalb von 30 Tagen.
#SKONTO#TAGE=10#PROZENT=2.00#
</cbc:Note>
</cac:PaymentTerms>

Häufige Fragen

Wie gebe ich zwei Skonto-Staffeln an?

Mit zwei Zeilen nach demselben Muster, zum Beispiel #SKONTO#TAGE=7#PROZENT=3.00# und darunter #SKONTO#TAGE=14#PROZENT=2.00#. Jede Zeile endet mit # und einem Zeilenumbruch.

Muss ich Skonto überhaupt strukturiert angeben?

Nur wenn Sie Skonto gewähren. Ohne Skonto genügt normaler Text in den Zahlungsbedingungen; sobald eine Zeile mit # beginnt, greift das feste Muster.

Betroffene Felder

  • BT-20
  • BT-115

Verwandte Regeln

Rechnung prüfen

Der XRechnung-Validator meldet diese Regel mit Zeilennummer und Fundstelle – direkt in Ihrem Browser, ohne Upload.

Zum XRechnung-Validator

Technische Details
UBL · Kontext (XPath)
/ubl:Invoice | /cn:CreditNote
UBL · Schematron-Test
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' )
CII · Kontext (XPath)
/rsm:CrossIndustryInvoice
CII · Schematron-Test
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' )

Erklärung erstellt am 13.09.2026