Sur cette page
La réponse courte
UBL-DT-01 échoue une fois pour chaque élément dont le nom se termine par Amount et dont le texte a plus de deux caractères après le point décimal. L'emplacement du constat est cet élément ; écrivez sa valeur avec au plus deux décimales, par exemple 11.70 au lieu de 11.700.
Deux sortes de montants sont exemptées : cbc:PriceAmount, et les montants d'une remise à l'intérieur de cac:Price. Tout le reste, des montants de ligne au total de TVA, est limité à deux décimales, et la plupart des montants ont aussi leur propre règle BR-DEC, signalée à côté de celle-ci.
Ce que la règle vérifie
La règle choisit les éléments par leur nom, à toute profondeur : tout élément dont le nom se termine par Amount. Pour chacun, elle prend le texte, trouve le premier point décimal et échoue si plus de deux caractères suivent. Les zéros finaux comptent, les espaces finales aussi ; lors d'un essai, 11.70 suivi d'une espace a échoué.
Les exemptions dépendent du nom de l'élément et de sa position. Le prix net de l'article est exclu où qu'il apparaisse, tout comme cbc:Amount et cbc:BaseAmount dans cac:Price/cac:AllowanceCharge, qui portent le rabais sur le prix et le prix brut. La facture corrigée de l'exemple enregistré a un prix net de 19.995 et se valide sans constat.
Le total de TVA directement sous cac:TaxTotal n'a pas, dans cette version, de règle de décimales propre qui fonctionne : le contrôle qui lui est dédié ne signale rien, et cette règle est donc le seul constat pour 11.700 à cet endroit. Le total de TVA dans une devise de comptabilité est dans la même situation ; lors d'un essai, 13.456 dans un second total de taxe n'a signalé que cette règle.
Lorsqu'un montant a sa propre règle, les deux arrivent ensemble. Lors d'un essai, passer à trois décimales les douze montants à deux décimales d'une facture minimale a produit douze constats UBL-DT-01 et onze constats BR-DEC : un pour chaque montant, sauf le total de TVA.
| Terme | Signification | Élément UBL |
|---|---|---|
| - | Tout élément dont le nom se termine par Amount | At any depth, for example cac:LegalMonetaryTotal/cbc:PayableAmount or cac:InvoiceLine/cac:AllowanceCharge/cbc:Amount |
| BT-110 | Montant total de la TVA de la facture (l'élément de l'exemple enregistré) | cac:TaxTotal/cbc:TaxAmount |
| BT-146 | Prix net de l'article (exempté) | cac:InvoiceLine/cac:Price/cbc:PriceAmount (cac:CreditNoteLine/cac:Price/cbc:PriceAmount in a credit note) |
| BT-147 | Remise sur le prix de l'article (exempté) | cac:InvoiceLine/cac:Price/cac:AllowanceCharge/cbc:Amount |
| BT-148 | Prix brut de l'article (exempté) | cac:InvoiceLine/cac:Price/cac:AllowanceCharge/cbc:BaseAmount |
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 :
- Un formateur de nombres est configuré une seule fois, avec trois ou quatre décimales pour convenir aux prix et aux quantités, et appliqué aussi aux montants.
- Les montants sont calculés dans un type plus précis et écrits sans arrondi, si bien qu'une valeur comme 11.704 arrive dans le XML.
- Une colonne décimale de la base de données avec une échelle de trois ou plus est écrite à pleine échelle, ce qui transforme 11.7 en
11.700. - Un moteur de templates écrit une espace ou un saut de ligne dans l'élément en même temps que la valeur.
Comment corriger le document
- Identifiez chaque élément grâce à l'emplacement du constat. Chaque montant fautif a son propre constat : la liste est donc complète.
- Arrondissez la valeur à deux décimales là où elle est calculée, et pas seulement là où elle est formatée, afin que les totaux qui en découlent utilisent le même chiffre.
- Formatez chaque montant avec au plus deux décimales et sans espace autour. Ne gardez des décimales supplémentaires que sur
cbc:PriceAmountet sur la remise à l'intérieur decac:Price, où elles sont autorisées. - Si l'arrondi a modifié une valeur, recalculez les totaux qui en dépendent avant l'envoi.
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 total de TVA est écrit 11.700
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">11.700</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">58.50</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<!-- tax category omitted from this fragment -->
</cac:TaxSubtotal>
<!-- zero-rated breakdown omitted from this fragment -->
</cac:TaxTotal>Fragment de la facture corrigée : le total de TVA écrit 11.70, comme sa ventilation
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">58.50</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<!-- tax category omitted from this fragment -->
</cac:TaxSubtotal>
<!-- zero-rated breakdown omitted from this fragment -->
</cac:TaxTotal>Le total de TVA directement sous cac:TaxTotal est écrit 11.700 dans la facture en échec et 11.70 dans la facture corrigée ; les ventilations et tous les autres totaux sont identiques, et la valeur elle-même est la même. Le document en échec ne signale que UBL-DT-01, sur cac:TaxTotal/cbc:TaxAmount. La règle de décimales EN 16931 prévue pour le total de TVA ne se déclenche pas dans cette version, et les contrôles arithmétiques comparent des valeurs, qui sont égales : rien d'autre n'est donc signalé.
Ce que le validateur a signalé
- La facture en erreur signale 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 aux documents UBL
InvoiceetCreditNote, et aux montants placés n'importe où dans l'un ou l'autre, y compris ceux decac:InvoiceLineetcac:CreditNoteLine. Lors d'un essai, un avoir avec un total de TVA de11.700n'a signalé que cette règle, comme la facture. - Elle est signalée par l'étape EN 16931, bien qu'elle contrôle le type de données UBL plutôt qu'un terme métier. L'étape XSD s'exécute d'abord et accepte
11.700comme décimal valide : le problème n'apparaît donc qu'ici. - Une valeur qui n'est pas du tout un décimal, comme une valeur avec une virgule ou un élément de montant vide, échoue plutôt à l'étape XSD, et les étapes des règles métier sont ignorées.
- Une valeur non arrondie n'est pas le même cas qu'une valeur complétée par des zéros. Lors d'un essai,
11.704dans le total de TVA a aussi entraînéBR-CO-14, car ce n'est pas la somme des ventilations ;11.700l'est, et n'a rien entraîné d'autre.
Règles liées
- BR-DEC-20 est signalé avec cette règle lorsqu'un montant de taxe de la ventilation de la TVA a trop de décimales
- BR-DEC-23 est signalé avec cette règle lorsqu'un montant net de ligne a trop de décimales
- BR-CO-14 contrôle la valeur du total de TVA, que l'exemple enregistré écrit avec une décimale de trop
- PEPPOL-EN16931-R046 contrôle le rabais et le prix brut au niveau du prix, que cette règle laisse de côté
- 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 UBL-DT-01 (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.

