Aller au contenu

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

UBL-DT-01 : Écrire chaque montant avec au plus deux décimales

Un montant a plus de deux chiffres après le point décimal. Chaque élément de montant est limité à deux, sauf le prix net de l'article et les remises sur le prix.

EN 16931Erreur : le document n'est pas valideTotauxTVA

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.

TermeSignificationÉlément UBL
-Tout élément dont le nom se termine par AmountAt any depth, for example cac:LegalMonetaryTotal/cbc:PayableAmount or cac:InvoiceLine/cac:AllowanceCharge/cbc:Amount
BT-110Montant total de la TVA de la facture (l'élément de l'exemple enregistré)cac:TaxTotal/cbc:TaxAmount
BT-146Prix net de l'article (exempté)cac:InvoiceLine/cac:Price/cbc:PriceAmount (cac:CreditNoteLine/cac:Price/cbc:PriceAmount in a credit note)
BT-147Remise sur le prix de l'article (exempté)cac:InvoiceLine/cac:Price/cac:AllowanceCharge/cbc:Amount
BT-148Prix 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

  1. Identifiez chaque élément grâce à l'emplacement du constat. Chaque montant fautif a son propre constat : la liste est donc complète.
  2. 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.
  3. Formatez chaque montant avec au plus deux décimales et sans espace autour. Ne gardez des décimales supplémentaires que sur cbc:PriceAmount et sur la remise à l'intérieur de cac:Price, où elles sont autorisées.
  4. 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é

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 Invoice et CreditNote, et aux montants placés n'importe où dans l'un ou l'autre, y compris ceux de cac:InvoiceLine et cac:CreditNoteLine. Lors d'un essai, un avoir avec un total de TVA de 11.700 n'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.700 comme 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.704 dans le total de TVA a aussi entraîné BR-CO-14, car ce n'est pas la somme des ventilations ; 11.700 l'est, et n'a rien entraîné d'autre.

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.