BT-20Payment termsBT-115Amount due for payment
Offizieller Regeltext
[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.
Warum dieser Fehler auftritt
XRechnung definiert ein maschinenlesbares Format für Skontoangaben im Text der Zahlungsbedingungen (BT-20): Jedes Skonto ist eine Zeile der Form #SKONTO#TAGE=n#PROZENT=n.nn# mit optionalem viertem Segment #BASISBETRAG=n.nn#, abgeschlossen durch einen Zeilenumbruch. Die Regel zerlegt cac:PaymentTerms/cbc:Note (UBL) bzw. ram:SpecifiedTradePaymentTerms/ram:Description (CII) zeilenweise, prüft jede mit # beginnende Zeile gegen den offiziellen regulären Ausdruck und verlangt nach dem letzten vollständigen Skonto-Eintrag einen Zeilenumbruch. Sie schlägt an bei Kleinschreibung, fehlenden Nachkommastellen (PROZENT=2), Komma statt Punkt, Leerzeichen um das Gleichheitszeichen oder fehlendem abschließendem Zeilenumbruch; typische Ursache sind handgeschriebene Bedingungen oder Templates, die Skonto als Fließtext mit # beginnen lassen.
So beheben Sie den Fehler
Jedes Skonto in eine eigene Zeile exakt als #SKONTO#TAGE=14#PROZENT=2.00# schreiben, gefolgt von einem Zeilenumbruch (CRLF wird akzeptiert); #BASISBETRAG=1000.00# nur als viertes Segment ergänzen, wenn das Skonto nur auf einen Teil des fälligen Betrags gilt. Großbuchstaben, Punkt mit genau zwei Nachkommastellen beim Prozentsatz, keine Leerzeichen oder Tabs und nichts anderes in diesen Zeilen. Freitext ist in derselben Note auf Zeilen erlaubt, die nicht mit # beginnen. Die Note muss nach der letzten Skonto-Zeile mit einem Zeilenumbruch enden, nicht direkt mit dem schließenden Tag.
Beispiel (gültig)
<cac:PaymentTerms>
<cbc:Note>Zahlbar innerhalb von 30 Tagen.
#SKONTO#TAGE=14#PROZENT=2.00#
#SKONTO#TAGE=7#PROZENT=3.00#
</cbc:Note>
</cac:PaymentTerms>
Was der Validator prüft
Geprüftes Element (Kontext):
UBL
/ubl:Invoice | /cn:CreditNoteTest (XPath):
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
/rsm:CrossIndustryInvoiceTest (XPath):
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' )
Rechnung prüfen
Legen Sie Ihre XML- oder PDF-Datei im Validator ab; jede verletzte Regel ist mit ihrer Seite hier verlinkt. Kostenlos, ohne Konto, die Datei wird nicht gespeichert.
Dieselbe Prüfung per API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validateVerwandte Regeln
BR-DEX-09Amount due for payment = Invoice total amount with VAT - Paid amount + Rounding amount…BR-DE-1Zahlungsinformationen (BG-16) fehlenBR-DE-2Kontaktdaten des Verkäufers (BG-6) fehlenBR-DE-3Ort des Verkäufers (BT-37) fehltBR-DE-4Das Element "Seller post code" muss übermittelt werdenBR-DE-5Ansprechpartner des Verkäufers (BT-41) fehltBR-DE-6Telefonnummer des Verkäuferkontakts (BT-42) fehltBR-DE-7E-Mail-Adresse des Verkäuferkontakts (BT-43) fehlt
Häufige Fragen
Was bedeutet BR-DE-18?
BR-DE-18 ist eine XRechnung-Regel: 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.
Wird meine Rechnung wegen BR-DE-18 abgelehnt?
Ja. BR-DE-18 ist als „fatal“ eingestuft; Validatoren (KoSIT, Peppol Access Points, ZRE/OZG-RE) weisen die Rechnung zurück, bis der Fehler behoben ist.
Für welche Formate gilt BR-DE-18?
XRechnung in UBL- oder CII-Syntax, einschließlich ZUGFeRD-/Factur-X-PDFs mit dem Profil XRECHNUNG. Rechnungen an deutsche öffentliche Auftraggeber (Bund, Länder, Kommunen) müssen sie bestehen. Syntax: UBL und CII.
Quelle: XRechnung 3.0.2, schematron 2.6.0 (KoSIT, September 2026). Katalog erzeugt aus dem offiziellen Schematron am 2026-10-14.