Sur cette page
La réponse courte
PEPPOL-EN16931-R040 échoue lorsqu'un cac:AllowanceCharge porte à la fois cbc:BaseAmount et cbc:MultiplierFactorNumeric, et que cbc:Amount s'écarte de plus de 0.02 de montant de base x pourcentage / 100. Déterminez laquelle des trois valeurs est fausse dans les données source et corrigez celle-là.
cbc:MultiplierFactorNumeric est un pourcentage : 10 signifie dix pour cent. Ce n'est pas un coefficient comme 0.1.
Ce que la règle vérifie
La règle s'exécute sur chaque cac:AllowanceCharge placé directement sous la racine du document et directement sous une ligne. Remises et frais sont traités de la même façon ; cbc:ChargeIndicator ne joue aucun rôle. La remise dans cac:Price n'est pas couverte.
Si cbc:BaseAmount ou cbc:MultiplierFactorNumeric est absent, cette règle n'a rien à vérifier et passe. Une remise ou des frais sans aucun des deux éléments, avec seulement un cbc:Amount fixe, ne posent pas de problème.
Lorsque les deux sont présents, le montant attendu est montant de base x pourcentage / 100. Le produit n'est pas arrondi. La règle passe lorsque cbc:Amount s'en écarte de 0.02 au plus, et la limite est incluse : un écart d'exactement 0.02 passe, tout écart supérieur échoue.
Confirmé avec le validateur sur un montant de 3.50 à 10 pour cent : une base de 35.20 (attendu 3.52, écart de 0.02) passe ; une base de 35.21 (attendu 3.521) échoue ; une base de 35.30 (attendu 3.53) échoue. Il en va de même en dessous du montant, et pour une remise au niveau de la ligne.
Un pourcentage de 0 avec un montant de base attend un montant de 0 : un montant non nul échoue donc.
| Terme | Signification | Élément UBL |
|---|---|---|
| BG-20 | Remises au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = false] |
| BG-21 | Charges ou frais au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = true] |
| BG-27 | Remises sur la ligne de facture | cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = false] |
| BG-28 | Charges ou frais sur la ligne de facture | cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = true] |
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 pourcentage est envoyé sous forme de fraction, 0.1 pour dix pour cent, si bien que le montant attendu est cent fois plus petit que prévu.
- Le montant de base est pris dans un autre chiffre que celui sur lequel la remise a été calculée, par exemple la valeur brute de la ligne au lieu de la valeur après une remise précédente.
- Le montant a été négocié ou modifié à la main après application du pourcentage, et le pourcentage et la base sont restés tels quels.
- Plusieurs remises en pourcentage sont appliquées en cascade dans le système source, mais envoyées comme une seule remise avec uniquement le premier pourcentage.
- Le montant est arrondi par unité puis multiplié, ce qui s'écarte de plus de 0.02 d'un calcul unique sur la base entière.
Comment corriger le document
- Repérez le
cac:AllowanceChargeen échec grâce à l'emplacement du constat et calculezcbc:BaseAmountxcbc:MultiplierFactorNumeric/ 100 en arithmétique décimale. - Déterminez quelle valeur est fausse en revenant aux conditions commerciales. Si le pourcentage ou la base est faux, corrigez-le et ne touchez pas au montant.
- Si le montant est faux, corrigez-le puis recalculez tout ce qui en dépend : le montant net de la ligne pour une entrée au niveau de la ligne, ou le total des remises ou des frais, la ventilation de la TVA et les totaux du document pour une entrée au niveau du document.
- Si le montant est une somme fixe qui n'a jamais été dérivée d'un pourcentage, envoyez
cbc:Amountseul et supprimez à la foiscbc:BaseAmountetcbc:MultiplierFactorNumeric. En supprimer un seul fait échouerPEPPOL-EN16931-R041ouPEPPOL-EN16931-R042à la place.
L'exemple enregistré est un montant de frais au niveau du document de 3.50 sur une base de 35.00.
En échec : 35.00 x 20 / 100 = 7.00, montant envoyé 3.50, écart 3.50 Corrigé : 35.00 x 10 / 100 = 3.50, montant envoyé 3.50, écart 0.00 Écart autorisé : jusqu'à 0.02 inclus
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 : 20 pour cent de 35.00 font 7.00, mais le montant des frais est de 3.50
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>CG</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Example document charge</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>20</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="GBP">3.50</cbc:Amount>
<cbc:BaseAmount currencyID="GBP">35.00</cbc:BaseAmount>
<!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>Fragment de la facture corrigée : 10 pour cent de 35.00 donnent les 3.50 facturés
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>CG</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Example document charge</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>10</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="GBP">3.50</cbc:Amount>
<cbc:BaseAmount currencyID="GBP">35.00</cbc:BaseAmount>
<!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>Seul cbc:MultiplierFactorNumeric diffère : 20 dans le document en échec, 10 dans le document corrigé. Le document en échec ne signale que PEPPOL-EN16931-R040, car le montant de 3.50 concorde toujours avec le total des frais et le reste des totaux. Si l'on avait modifié le montant à la place, le total des frais aurait cessé de correspondre : avec le montant à 3.53 et rien d'autre de modifié, le validateur signale BR-CO-12 en plus de cette règle.
Ce que le validateur a signalé
- La facture en erreur signale PEPPOL-EN16931-R040. 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, au niveau du document et danscac:InvoiceLineoucac:CreditNoteLine. Confirmé sur des avoirs aux deux niveaux. - La remise dans
cac:Pricen'entre pas dans le champ de cette règle. Un pourcentage ajouté à cet endroit provoque les avertissementsUBL-CR-635etUBL-CR-671, et aucun constat de cette règle. - Le test figé lit un
cbc:Amountabsent comme 0, mais la chaîne complète n'arrive jamais jusque-là : uncac:AllowanceChargesanscbc:Amountest refusé par l'étape XSD et les étapes suivantes sont ignorées. - La règle ne vérifie pas que le montant de base est la bonne base, seulement que les trois nombres concordent entre eux.
Règles liées
- PEPPOL-EN16931-R041 échoue lorsqu'un pourcentage est envoyé sans montant de base
- PEPPOL-EN16931-R042 échoue lorsqu'un montant de base est envoyé sans pourcentage
- BR-CO-12 vérifie le total des frais dès que le montant de frais au niveau du document change
- BR-CO-11 vérifie le total des remises dès que le montant d'une remise au niveau du document change
- Parcourir toutes les règles de la référence
- Contexte (en anglais) : How Peppol invoice validation actually works
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 PEPPOL-EN16931-R040 (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.

