Peppol BIS Billing 3.0 · rule
DE-R-018
What does DE-R-018 mean? If both supplier and customer are located in Germany, information on cash discounts for prompt payment (Skonto) shall be provided within the element "Payment terms" BT-20 in the following way: First segment "SKONTO", second segment amount of days ("TAGE=N"), third segment percentage ("PROZENT=N"). Percentage must be separated by dot with two decimal places. In case the base value of the invoiced amount is not provided in BT-115 but as a partial amount, the base value shall be provided as fourth segment "BASISBETRAG=N" as semantic data type amount. Each entry shall start with a #, the segments must be separated by # and a row shall end with a #. A complete statement on cash discount for prompt payment shall end with a XML-conformant line break. All statements on cash discount for prompt payment shall be given in capital letters. Additional whitespaces (blanks, tabulators or line breaks) are not allowed. Other characters or texts than defined above are not allowed.
Why did my invoice fail DE-R-018?
On domestic German invoices, cash-discount (Skonto) terms must be encoded machine-readably inside Payment terms (BT-20) in a strict format: each statement starts and ends with #, with segments #SKONTO#TAGE=n#PROZENT=n.nn# (percentage with a dot and exactly two decimals), optionally followed by #BASISBETRAG=n# when the discount base is a partial amount rather than BT-115. Everything must be upper case, end with an XML-conformant line break, and contain no extra whitespace or other text. The rigid syntax exists so payment systems can parse Skonto terms automatically. In UBL BT-20 is cac:PaymentTerms/cbc:Note.
Official rule text
If both supplier and customer are located in Germany, information on cash discounts for prompt payment (Skonto) shall be provided within the element "Payment terms" BT-20 in the following way: First segment "SKONTO", second segment amount of days ("TAGE=N"), third segment percentage ("PROZENT=N"). Percentage must be separated by dot with two decimal places. In case the base value of the invoiced amount is not provided in BT-115 but as a partial amount, the base value shall be provided as fourth segment "BASISBETRAG=N" as semantic data type amount. Each entry shall start with a #, the segments must be separated by # and a row shall end with a #. A complete statement on cash discount for prompt payment shall end with a XML-conformant line break. All statements on cash discount for prompt payment shall be given in capital letters. Additional whitespaces (blanks, tabulators or line breaks) are not allowed. Other characters or texts than defined above are not allowed.
Common causes
- Free-text Skonto wording like "2% Skonto bei Zahlung in 14 Tagen" instead of the segment syntax
- Percentage written without two decimal places or with a comma (PROZENT=2 or PROZENT=2,00 instead of PROZENT=2.00)
- Lower-case keywords, missing leading/trailing #, or extra spaces/tabs inside the statement
- Missing the BASISBETRAG segment when the discount base is a partial amount
How do I fix it?
<cac:PaymentTerms> <cbc:Note>#SKONTO#TAGE=14#PROZENT=2.00# </cbc:Note> </cac:PaymentTerms>
Related rules
DE-R-001 · DE-R-002 · DE-R-003 · DE-R-004 · DE-R-005 · DE-R-006 · DE-R-007 · DE-R-008
Paste it into the live demo, or call POST /v1/validate. See the quickstart.