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