Aller au contenu

Ironfang Finance - Référence des règles

BR-DEC-23 : Écrire le montant net de ligne avec deux décimales au plus

Un montant net de ligne a plus de deux chiffres après le point décimal. Arrondissez-le à deux décimales ; les zéros finaux comptent, donc 25.000 échoue.

EN 16931Erreur : le document n'est pas valideLignes et prix

Sur cette page

La réponse courte

BR-DEC-23 échoue lorsque le cbc:LineExtensionAmount d'une ligne est écrit avec plus de deux chiffres après le point décimal. Arrondissez le montant net de ligne à deux décimales et formatez-le ainsi : 25.00, pas 25.000.

Le contrôle compte des caractères ; il ne compare pas des nombres. 25.000 est le même montant que 25.00 et échoue quand même. Le document signale en même temps UBL-DT-01, qui est la forme générale de la même limite pour tout élément de montant.

Ce que la règle vérifie

Pour chaque cac:InvoiceLine ou cac:CreditNoteLine, la règle prend le texte de cbc:LineExtensionAmount, regarde ce qui suit le premier point décimal et exige que cela fasse au plus deux caractères.

Moins de décimales conviennent. 25, 25.0 et 25.00 passent tous.

Les zéros finaux comptent dans la limite, tout comme les espaces. 25.000 échoue, et lors d'un essai, 25.00 suivi d'espaces à l'intérieur de l'élément a également échoué, bien que le schéma l'accepte comme nombre.

La règle ne lit que le montant net de ligne. Le prix net de l'article n'est pas limité à deux décimales : un prix de 12.500 a été validé sans constat. Le total des lignes dans cac:LegalMonetaryTotal a sa propre règle de décimales.

TermeSignificationÉlément UBL
BT-131Montant net de ligne de facturecac:InvoiceLine/cbc:LineExtensionAmount
BT-131Montant net de ligne de facture (avoir)cac:CreditNoteLine/cbc:LineExtensionAmount

Comment une intégration en arrive là

Causes possibles, déduites de la forme de la règle et non d'une utilisation mesurée :

  • Le montant net de ligne est formaté avec la même précision que le prix unitaire ou la quantité, qui portent légitimement plus de décimales.
  • La quantité multipliée par le prix est écrite sans arrondi, par exemple 3 à 19.995, ce qui donne 59.985.
  • Une colonne de base de données de type decimal à trois ou quatre décimales est sérialisée à pleine échelle, zéros finaux compris.
  • Un formateur complète la valeur jusqu'à une largeur fixe et le remplissage se retrouve à l'intérieur de l'élément.

Comment corriger le document

  1. Calculez le montant net de ligne en arithmétique décimale : quantité multipliée par le prix net, plus les frais de ligne, moins les remises de ligne.
  2. Arrondissez le résultat à deux décimales une seule fois, à la fin. Gardez la précision supplémentaire sur le prix et la quantité, où elle est autorisée.
  3. Formatez avec exactement deux décimales et sans espaces autour, et écrivez le résultat dans cbc:LineExtensionAmount.
  4. Construisez le total des lignes du document à partir des montants de ligne arrondis, afin que l'arrondi n'ouvre pas un écart que BR-CO-10 signalerait ensuite.

Valider votre facture corrigée

Avant et après

Ce sont des extraits, pas des documents complets. Les documents synthétiques complets dont ils proviennent sont liés ci-dessous.

Fragment de la facture en échec : le montant net de ligne a trois décimales

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.000</cbc:LineExtensionAmount>
  <!-- item omitted from this fragment -->
  <cac:Price>
    <cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Fragment de la facture corrigée : le même montant avec deux décimales

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <!-- item omitted from this fragment -->
  <cac:Price>
    <cbc:PriceAmount currencyID="GBP">12.5</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Seul le formatage de cbc:LineExtensionAmount diffère : 25.000 devient 25.00. Le document en échec signale deux constats à l'étape EN 16931. BR-DEC-23 est situé sur la ligne, et UBL-DT-01 sur l'élément de montant lui-même : cette règle applique la limite de deux décimales à tout élément dont le nom se termine par Amount, hormis cbc:PriceAmount et les montants d'une remise à l'intérieur de cac:Price, donc un montant net de ligne qui enfreint BR-DEC-23 l'enfreint aussi. Une seule correction lève les deux. Le second exemple enregistré est un avoir avec la même valeur sur cac:CreditNoteLine, et il signale la même paire.

Ce que le validateur a signalé

Enregistré avec phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, le moteur du validateur gratuit, sur des données synthétiques. Un résultat enregistré est une preuve de non-régression pour ces documents ; ce n'est pas une certification.

Où la règle s'applique

  • S'applique à cac:InvoiceLine dans une Invoice et à cac:CreditNoteLine dans un CreditNote, avec un comportement identique.
  • La limite est de deux décimales quelle que soit la devise. La règle ne regarde pas currencyID.
  • Les autres formats de nombre n'atteignent jamais cette règle. Une virgule comme séparateur décimal ou un exposant comme 2.5E1 échoue à l'étape XSD, et les étapes EN 16931 et Peppol sont alors ignorées.
  • Les montants négatifs sont traités de la même façon : le signe se trouve avant le point décimal et n'est pas compté.

Portée et source

Rédigé pour Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, tel qu'appliqué aux documents Invoice et CreditNote en UBL 2.1. D'autres profils, syntaxes et versions peuvent définir cet identifiant autrement. Version du catalogue d'aide 2026-09-24.1 : source vérifiée le 2026-09-24, explication mise à jour le 2026-09-20.

La définition officielle de BR-DEC-23 (en anglais) contient le texte normatif et le test. Cette page en est notre explication, pas une copie.

Cette aide ne modifie pas le verdict du moteur. Corriger ce constat ne signifie pas que le document passe toutes les étapes de validation, et la validation ne certifie pas la conformité juridique ou fiscale et ne transmet aucun document via Peppol.