Skip to content

BR-DE-18: Cash discount line in payment terms (BT-20) has the wrong format

Official message

[BR-DE-18] 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.

XRechnung (CII) · Error · Message language: German · Version: xrechnung-3.0.2-validator-configuration-2026-08-31

[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.

XRechnung (UBL) · Error · Message language: German · Version: xrechnung-3.0.2-validator-configuration-2026-08-31
Severity
Error The invoice is invalid and may be rejected by the recipient.
Applies to
XRechnung (CII), XRechnung (UBL)
Affected fields
BT-20, BT-115

What does this mean?

In XRechnung a cash discount (Skonto) is stated in the payment terms (BT-20) using a fixed line format, e.g. #SKONTO#TAGE=14#PROZENT=2.00#. At least one line starting with # does not match this format, or the line break after the last discount line is missing.

Typical causes

The percentage does not have exactly two decimals or uses a comma instead of a point (e.g. PROZENT=2 or PROZENT=2,00).
The entry is written in lower case (e.g. #skonto#) or contains spaces.
A segment is missing or in the wrong order, or the line does not end with #.
No line break follows the last discount line.

How to fix the error

Write every discount entry on its own line: #SKONTO#TAGE=n#PROZENT=n.nn#, optionally with a fourth segment #BASISBETRAG=n.nn# if the discount does not refer to the amount due (BT-115).
Use upper case only, no spaces or tabs, percentage and base amount with a decimal point and exactly two decimals, percentage without sign.
End every discount line with a line break, including the last one.
CII: ram:SpecifiedTradePaymentTerms/ram:Description, UBL: cac:PaymentTerms/cbc:Note; the first element is checked in each case.
Generate and validate the invoice again.

In E-Rechnungsfreund

In the invoice form, section "Datum & Zeiträume" (dates and periods), enter the discount lines in the format above in the field "Zahlungsbedingungen (BT-20)", each on its own line, and validate the invoice again. The application adds the line break after the last discount line itself when it generates the XML.

Example

Wrong

<ram:SpecifiedTradePaymentTerms>
  <ram:Description>#SKONTO#TAGE=14#PROZENT=2#</ram:Description>
</ram:SpecifiedTradePaymentTerms>

Correct

<ram:SpecifiedTradePaymentTerms>
  <ram:Description>#SKONTO#TAGE=14#PROZENT=2.00#
</ram:Description>
</ram:SpecifiedTradePaymentTerms>
For developers: test expression per syntax

XRechnung (CII) (CII)

Context: /rsm:CrossIndustryInvoice

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' )

XRechnung (UBL) (UBL)

Context: /ubl:Invoice | /cn:CreditNote

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' )

Related validation rules

  • BR-DE-1: Payment instructions (BG-16) are missing
  • BR-DE-10: Deliver to city (BT-77) is missing
  • BR-DE-11: Deliver to post code (BT-78) is missing
  • BR-DE-14: VAT category rate (BT-119) is missing in the VAT breakdown
  • BR-DE-15: Buyer reference (BT-10) is missing
  • BR-DE-16: Seller VAT ID, tax number or tax representative is missing

Frequently asked questions

Is a discount in free text ("2% discount if paid within 14 days") checked as well?

No. The rule only checks lines that start with

Can several discount levels be stated?

Yes. Each level goes on its own line in the same format, e.g. one line with TAGE=7 and PROZENT=3.00 and another with TAGE=14 and PROZENT=2.00.

Last updated:
Explanation of the validation rule, not legal or tax advice.