Sur cette page
La réponse courte
BR-DEC-18 échoue lorsque cac:LegalMonetaryTotal/cbc:PayableAmount a plus de deux caractères après le point décimal. Écrivez le montant à payer avec deux décimales au plus : 70.00, pas 70.000.
Le remplissage suffit à la déclencher : la valeur enregistrée 70.000 est le bon montant écrit avec un zéro de trop. UBL-DT-01 signale le même élément en parallèle.
Ce que la règle vérifie
La règle s'exécute sur cac:LegalMonetaryTotal, prend le texte de cbc:PayableAmount et échoue lorsque plus de deux caractères suivent le point décimal. Un zéro final compte comme n'importe quel autre chiffre.
Le format est contrôlé indépendamment de l'arithmétique qui a produit le montant. Lors d'un essai, 70.004 n'a été signalé que par cette règle et UBL-DT-01 : en présence d'un montant d'arrondi, BR-CO-16 arrondit le montant à payer avant de comparer, et n'a donc rien objecté.
Le montant payé d'avance et le montant d'arrondi à côté ont leurs propres règles de décimales. Lors d'un essai, un montant d'arrondi de -0.200 a signalé BR-DEC-17 avec UBL-DT-01, pas cette règle.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-115 | Montant à payer | cac:LegalMonetaryTotal/cbc:PayableAmount |
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 à payer est dérivé d'un total TVA comprise conservé avec une précision plus élevée, moins un acompte, et écrit sans arrondi final.
- Un arrondi de caisse à un pas plus grossier, comme 0.05, est calculé dans un type qui conserve trois décimales, et le résultat est écrit à cette échelle.
- Les montants sont conservés en virgule flottante et formatés avec trois décimales fixes.
Comment corriger le document
- Calculez le montant à payer à partir des totaux écrits : total TVA comprise moins montant payé d'avance plus montant d'arrondi.
- Arrondissez le résultat à deux décimales et formatez-le avec deux au plus, sans espaces.
- Écrivez-le dans
cac:LegalMonetaryTotal/cbc:PayableAmount, le dernier élément des totaux monétaires. - Formatez de la même façon tout
cbc:PrepaidAmountetcbc:PayableRoundingAmount, puisque chacun est lui aussi limité à deux décimales.
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 : 80.20 - 10.00 - 0.20 est écrit 70.000
<cac:LegalMonetaryTotal>
<!-- line, net, allowance and charge totals omitted from this fragment -->
<cbc:TaxInclusiveAmount currencyID="GBP">80.20</cbc:TaxInclusiveAmount>
<cbc:PrepaidAmount currencyID="GBP">10.00</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="GBP">-0.20</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="GBP">70.000</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : le montant à payer écrit 70.00
<cac:LegalMonetaryTotal>
<!-- line, net, allowance and charge totals omitted from this fragment -->
<cbc:TaxInclusiveAmount currencyID="GBP">80.20</cbc:TaxInclusiveAmount>
<cbc:PrepaidAmount currencyID="GBP">10.00</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="GBP">-0.20</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="GBP">70.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Seul cbc:PayableAmount est écrit différemment, 70.000 dans le document en échec et 70.00 dans le document corrigé ; le montant à payer est le même 80.20 - 10.00 - 0.20 dans les deux. Le document en échec signale BR-DEC-18 sur les totaux monétaires et UBL-DT-01 sur le montant à payer lui-même. UBL-DT-01 est le contrôle de type de données UBL qui limite tout élément de montant à deux décimales, sauf le prix net de l'article et les montants d'une remise sur le prix, ce qui explique qu'il répète ce constat pour le montant à payer. Corriger le format lève les deux.
Ce que le validateur a signalé
- La facture en erreur signale BR-DEC-18 et UBL-DT-01. Le document corrigé passe toutes les étapes de validation sans constat.Télécharger le XML en erreurTélécharger le XML corrigé
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 aussi bien aux documents UBL
Invoicequ'auxCreditNote. Lors d'un essai, un avoir avec un montant à payer de70.000a signalé les deux mêmes constats. - Un montant à payer négatif, comme sur certains avoirs ou certaines factures payées en trop, est compté de la même manière : le signe moins se trouve avant le point décimal et ne joue aucun rôle.
- La règle ignore la devise. Elle n'interdit pas deux décimales pour une devise sans unité divisionnaire, et n'en autorise pas une troisième pour une devise dont l'unité divisionnaire a trois chiffres.
Règles liées
- UBL-DT-01 signale le même montant à payer, en tant que limite générale de deux décimales sur les montants
- BR-CO-16 contrôle la valeur du montant à payer par rapport au total TVA comprise, au montant payé d'avance et au montant d'arrondi
- BR-DEC-12 applique la même limite au total hors TVA
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : Understanding EN 16931 validation errors
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-24.
La définition officielle de BR-DEC-18 (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.

