The early-payment discount terms do not follow the expected shape
The early-payment discount (*Skonto*) lines placed in `Payment terms` (BT-20) must follow the shape `#SKONTO#TAGE=n#PROZENT=n.nn#`, one line per condition, each starting with `#`.
Only the issuer holds this value: Factlint reports it and never fabricates it. Test your invoice to find out whether it is affected.
The message your validator prints
Copied verbatim from the sealed artefact: this is the exact sentence the check prints when this rule fails.
cii[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.
ubl[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.
Quoted from schematron-xrechnung 3.0.2, licensed under Apache-2.0.
Common searches around this code
These phrases mirror what an integrator searches for: code, syntax, rule, business field and correction.
Test your file with this error in mind
Upload the invoice involved: the report will say whether this code appears, where it appears in the document, and whether Factlint can only report it or also fix it.
To automate this check in an ERP flow, call the validation API and link every returned code to its public page.
Why this error happens
EN 16931 has no structured field for early-payment discounts: XRechnung encodes one inside the free text of the payment terms, with a strict grammar. The percentage is written without a sign and with two decimals separated by a dot — `PROZENT=3` fails where `PROZENT=3.00` passes. Only lines starting with `#` are checked: the rest of the payment terms stays free text.
How to fix it
Rebuild the line in the system that produces your payment terms. Factlint does not rewrite it: the discount rate and base are financial data, and reformatting them would amount to transcribing them.
XML correction example
#SKONTO#TAGE=14#PROZENT=3#
#SKONTO#TAGE=14#PROZENT=3.00#