XRechnung (German national rules)

BR-DE-18: Cash discount (Skonto) in BT-20 badly formatted

Cash discounts go into the payment terms in a fixed syntax: #SKONTO#TAGE=14#PROZENT=2.00#.

Fact sheet

Rule
BR-DE-18
Severity
Error – the invoice is invalid
Rule set
XRechnung 3.0 (KoSIT)
Affected fields
BT-20
Syntax
CII & UBL

Check your invoice now

Upload a PDF or XML – free, without sign-up, against the official rule sets.

Open the online validator

Official wording

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

Source: official KoSIT Schematron for XRechnung 3.0.

What the rule requires

XRechnung has no dedicated field for cash discounts (German: Skonto). To keep them machine-readable, they go into the payment terms (BT-20) in a fixed syntax – with German keywords:

#SKONTO#TAGE=14#PROZENT=2.00#

  • Each discount line starts and ends with #; the segments are SKONTO, TAGE= (days) and PROZENT= (percent) – in capitals.
  • Percentages always with a dot and exactly two decimals: 2.00, not 2 or 2,00.
  • If the discount applies to part of the amount only, add #BASISBETRAG=300.00# (base amount).
  • The last discount line must be followed by a line feed. Several tiers go on separate lines.
  • No spaces inside the entry. Free text is allowed, but only on separate lines that do not start with #.

Common causes

  • A comma instead of a dot (PROZENT=2,00) or missing decimals (PROZENT=2) – often from formatting with a German culture.
  • The trailing line feed is missing because the software trims the text.
  • Lower case or spaces, e.g. #Skonto# or #SKONTO# TAGE=14.
  • Discount and free text on the same line.

Plain free text such as “2 % discount if paid within 14 days” does not trigger BR-DE-18, but the recipient cannot process it automatically.

What it looks like in XML

✗ CII – wrong (comma, no line feed)
<ram:SpecifiedTradePaymentTerms>
    <ram:Description>#SKONTO#TAGE=14#PROZENT=2,00#</ram:Description>
</ram:SpecifiedTradePaymentTerms>
✓ CII – correct
<ram:SpecifiedTradePaymentTerms>
    <ram:Description>#SKONTO#TAGE=14#PROZENT=2.00#
Payable within 30 days without deduction.</ram:Description>
    <ram:DueDateDateTime>
        <udt:DateTimeString format="102">20261120</udt:DateTimeString>
    </ram:DueDateDateTime>
</ram:SpecifiedTradePaymentTerms>

In UBL the same text goes into cac:PaymentTerms/cbc:Note.

Fix in C#

In the Facturexa Creator you pass the payment terms text as is. Format percentages with CultureInfo.InvariantCulture and the format "0.00", not with the culture of the machine.

C#
// Every discount line ends with a line feed, including the last one.
invoice.AddSpecifiedTradePaymentTerms(
    "#SKONTO#TAGE=7#PROZENT=3.00#\n" +
    "#SKONTO#TAGE=14#PROZENT=2.00#\n" +
    "Payable within 30 days without deduction.",
    dueDate: invoice.InvoiceDate.Value.AddDays(30));

Related rules

All explained validation rules