Compte
Français

BR-DE-18: Lignes d'escompte (Skonto) mal formées dans les conditions de paiement

Règle XRechnung · Erreur · UBL, CII

NormeXRechnung 3.0.2 (KoSIT, CIUS allemande de l'EN 16931)GravitéErreur: la facture est rejetéeSyntaxeUBL, CIITermes métier
  • BT-20 Payment terms
  • BT-115 Amount due for payment
S'applique àXRechnung en syntaxe UBL ou CII, y compris les PDF Factur-X / ZUGFeRD au profil XRECHNUNG. Obligatoire pour facturer les administrations publiques allemandes.

Texte officiel de la règle

[BR-DE-18] Cash discount (Skonto) lines in … must match this regular expression: … . The information on the granting of a cash discount must be transmitted in the element "Payment terms" (BT-20) as follows: the first segment must state "SKONTO", the second "TAGE=n", the third "PROZENT=n". Percentages must be given without a sign and with two decimal places separated by a point. If the amount to be calculated is not based on BT-115, "Amount due for payment", but only on a part of the amount due of the invoice, the base value for calculating the cash discount must be given as a fourth segment "BASISBETRAG=n" in accordance with the semantic data type Amount. Each entry begins with a #, the segments are separated by a # and a line ends with a #. A complete cash discount statement must be followed by an XML-conformant line break. All information on the granting of a cash discount must be given in upper case. Additional whitespace (spaces, tabs or line breaks) is not permitted. Characters or text other than those specified above are not permitted.

Le texte normatif est en anglais ; il est cité tel quel.

Pourquoi cette erreur apparaît

XRechnung définit un format lisible par machine pour les conditions d'escompte dans le texte des conditions de paiement (BT-20) : chaque escompte occupe une ligne de la forme #SKONTO#TAGE=n#PROZENT=n.nn#, avec un quatrième segment facultatif #BASISBETRAG=n.nn#, terminée par un saut de ligne. La règle découpe cac:PaymentTerms/cbc:Note (UBL) ou ram:SpecifiedTradePaymentTerms/ram:Description (CII) ligne par ligne, contrôle chaque ligne commençant par # au moyen de l'expression régulière officielle et exige un saut de ligne après la dernière entrée Skonto complète. Elle se déclenche en cas de minuscules, de décimales manquantes (PROZENT=2), de virgule décimale, d'espaces autour du signe = ou d'absence de saut de ligne final ; elle provient souvent de conditions saisies à la main ou de modèles qui rédigent l'escompte en texte libre commençant par #.

Comment corriger

Écrivez chaque escompte sur sa propre ligne, exactement sous la forme #SKONTO#TAGE=14#PROZENT=2.00# suivie d'un saut de ligne (CRLF est accepté) ; ajoutez #BASISBETRAG=1000.00# comme quatrième segment uniquement si l'escompte ne porte que sur une partie du montant à payer. Utilisez des majuscules, un point avec exactement deux décimales pour le pourcentage, aucun espace ni tabulation, et rien d'autre sur ces lignes. Des conditions en texte libre sont autorisées dans la même note sur des lignes ne commençant pas par #. Veillez à ce que la note se termine par un saut de ligne après la dernière ligne Skonto, et non directement par la balise fermante.

Exemple (valide)

<cac:PaymentTerms>
  <cbc:Note>Zahlbar innerhalb von 30 Tagen.
#SKONTO#TAGE=14#PROZENT=2.00#
#SKONTO#TAGE=7#PROZENT=3.00#
</cbc:Note>
</cac:PaymentTerms>

Ce que le validateur vérifie

Élément vérifié (contexte):

UBL

/ubl:Invoice | /cn:CreditNote

Test (XPath):

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

CII

/rsm:CrossIndustryInvoice

Test (XPath):

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

Vérifier votre facture

Déposez votre XML ou PDF dans le validateur : chaque règle en échec renvoie vers sa page ici. Gratuit, sans compte, le fichier n'est pas conservé.

Vérifier votre facture →

La même vérification par API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Règles liées

Questions fréquentes

Que signifie BR-DE-18 ?

BR-DE-18 est une règle xrechnung : Cash discount (Skonto) lines in … must match this regular expression: … . The information on the granting of a cash discount must be transmitted in the element "Payment terms" (BT-20) as follows: the first segment must state "SKONTO", the second "TAGE=n", the third "PROZENT=n". Percentages must be given without a sign and with two decimal places separated by a point. If the amount to be calculated is not based on BT-115, "Amount due for payment", but only on a part of the amount due of the invoice, the base value for calculating the cash discount must be given as a fourth segment "BASISBETRAG=n" in accordance with the semantic data type Amount. Each entry begins with a #, the segments are separated by a # and a line ends with a #. A complete cash discount statement must be followed by an XML-conformant line break. All information on the granting of a cash discount must be given in upper case. Additional whitespace (spaces, tabs or line breaks) is not permitted. Characters or text other than those specified above are not permitted.

Ma facture sera-t-elle rejetée à cause de BR-DE-18 ?

Oui. BR-DE-18 est classée « bloquante » ; les validateurs (plateformes agréées, points d'accès Peppol, KoSIT, KSeF) rejettent la facture tant qu'elle n'est pas corrigée.

À quels formats s'applique BR-DE-18 ?

XRechnung en syntaxe UBL ou CII, y compris les PDF Factur-X / ZUGFeRD au profil XRECHNUNG. Obligatoire pour facturer les administrations publiques allemandes. Syntaxe : UBL et CII.

Source: XRechnung 3.0.2, schematron 2.6.0 (KoSIT, September 2026). Catalogue généré à partir des jeux de règles officiels le 2026-10-15.