Aller au contenu

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

BR-DEC-25 : Écrire le montant de base d'une remise de ligne avec deux décimales au plus

Une remise de ligne a un cbc:BaseAmount avec plus de deux chiffres après le point décimal. Écrivez la base à laquelle le pourcentage a été appliqué avec deux au plus.

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

Sur cette page

La réponse courte

BR-DEC-25 échoue lorsqu'une remise sur une ligne, c'est-à-dire un cac:AllowanceCharge à l'intérieur de cac:InvoiceLine ou de cac:CreditNoteLine avec un cbc:ChargeIndicator à false, a un cbc:BaseAmount avec plus de deux chiffres après le point décimal. Écrivez le montant auquel le pourcentage de la remise a été appliqué avec deux décimales au plus, par exemple 40.00.

Dans l'exemple enregistré, seule la base est en cause : le montant de remise de 2.00 et le pourcentage de 5 étaient déjà acceptables. Le même élément déclenche aussi UBL-DT-01, si bien qu'une base complétée par des zéros produit deux constats.

Ce que la règle vérifie

La règle sélectionne chaque remise directement à l'intérieur d'une ligne et compte les caractères qui suivent le premier point dans son cbc:BaseAmount ; trois ou plus échouent. Une remise donnée comme montant fixe, sans base, n'a rien à compter et réussit.

Seule la forme écrite compte, pas la valeur. Lors d'un essai, un montant de base de 40 a été validé sans constat, tandis que 40.004 a échoué de la même façon que le 40.000 enregistré.

La base d'une remise sur le prix est le prix brut de l'article, dans cac:Price/cac:AllowanceCharge/cbc:BaseAmount, et cette règle ne l'atteint pas. Lors d'un essai, un prix brut écrit 15.000 a passé toutes les étapes.

Le contrôle Peppol du pourcentage lit le même élément, mais par sa valeur. Lors d'un essai, une base de 40.500, qui ne donne plus la remise de 2.00 à 5 pour cent, a aussi déclenché PEPPOL-EN16931-R040 ; 40.004 est resté dans sa tolérance de 0.02 et ne l'a pas déclenché.

TermeSignificationÉlément UBL
BT-137Montant de base de la remise sur la ligne de facturecac:InvoiceLine/cac:AllowanceCharge/cbc:BaseAmount (cac:CreditNoteLine/cac:AllowanceCharge/cbc:BaseAmount in a credit note), where cbc:ChargeIndicator is false

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 :

  • La base est la valeur brute de la ligne, quantité multipliée par un prix unitaire à trois ou quatre décimales, et elle est sérialisée avec cette précision.
  • Le montant de la remise est arrondi avant d'être écrit, mais la base à partir de laquelle il a été calculé est transmise telle quelle.
  • La base est stockée dans une colonne décimale à trois décimales, et le sérialiseur écrit chaque chiffre stocké, ce qui transforme 40 en 40.000.

Comment corriger le document

  1. Arrondissez le montant de base à deux décimales au moment du calcul de la remise, et appliquez le pourcentage au montant arrondi.
  2. Écrivez le résultat dans cbc:BaseAmount du cac:AllowanceCharge de la ligne, après cbc:Amount, sans chiffre au-delà de la deuxième décimale et sans espace.
  3. Vérifiez le montant de la remise par rapport à la base arrondie : PEPPOL-EN16931-R040 tolère un écart de 0.02 au plus avec la base multipliée par le pourcentage et divisée par 100.
  4. Si la remise portait en réalité sur le prix unitaire, modélisez-la plutôt dans cac:Price/cac:AllowanceCharge, où le prix brut peut garder ses décimales supplémentaires.

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 : une remise de ligne de 5 pour cent dont la base est écrite 40.000

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <!-- note, quantity, line net amount, accounting cost and order line reference omitted from this fragment -->
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
    <cbc:AllowanceChargeReason>Example discount</cbc:AllowanceChargeReason>
    <cbc:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
    <cbc:Amount currencyID="GBP">2.00</cbc:Amount>
    <cbc:BaseAmount currencyID="GBP">40.000</cbc:BaseAmount>
  </cac:AllowanceCharge>
  <!-- line charge, item and price omitted from this fragment -->
</cac:InvoiceLine>

Fragment de la facture corrigée : la même base écrite 40.00

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Example discount</cbc:AllowanceChargeReason>
  <cbc:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
  <cbc:Amount currencyID="GBP">2.00</cbc:Amount>
  <cbc:BaseAmount currencyID="GBP">40.00</cbc:BaseAmount>
</cac:AllowanceCharge>

La facture en échec et la facture corrigée diffèrent par un seul élément : le cbc:BaseAmount de la remise de ligne vaut 40.000 dans l'une et 40.00 dans l'autre. Cinq pour cent de l'un ou de l'autre donnent la remise de 2.00 que portent les deux documents, si bien que le contrôle Peppol du pourcentage et le montant net de ligne de 58.00 sont satisfaits dans les deux. Le document en échec signale BR-DEC-25 sur le cac:AllowanceCharge de la ligne et UBL-DT-01 sur le cbc:BaseAmount lui-même, car un montant de base est un élément de montant comme un autre et ne fait pas partie de ceux que UBL-DT-01 exempte. Deux décimales lèvent les deux constats.

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. Lors d'un essai, un avoir avec une base de remise de ligne de 40.000 a signalé les deux mêmes constats.
  • Seules les remises sont sélectionnées. La base de frais de ligne relève de BR-DEC-28, et la base d'une remise au niveau du document de BR-DEC-02.
  • Un montant de base sans pourcentage est un autre problème. Lors d'un essai, retirer cbc:MultiplierFactorNumeric de la ligne en échec a ajouté PEPPOL-EN16931-R042 aux deux constats.

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-28.1 : source vérifiée le 2026-09-28, explication mise à jour le 2026-09-28.

La définition officielle de BR-DEC-25 (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.