Sur cette page
La réponse courte
BR-CO-12 échoue lorsque cac:LegalMonetaryTotal/cbc:ChargeTotalAmount ne concorde pas avec les frais au niveau du document. Additionnez le cbc:Amount des éléments cac:AllowanceCharge placés directement sous la racine du document avec un cbc:ChargeIndicator à true, arrondissez à deux décimales et envoyez ce résultat comme total des frais.
Les frais rattachés à une ligne restent en dehors de ce montant ; ils font partie du montant net de la ligne.
Ce que la règle vérifie
Seuls les enfants cac:AllowanceCharge de la racine Invoice ou CreditNote dont le cbc:ChargeIndicator vaut true sont additionnés. Les remises au niveau du document, ainsi que tout cac:AllowanceCharge situé dans une ligne ou un prix, sont laissés de côté.
Les frais additionnés sont arrondis à deux décimales et doivent être exactement égaux au total. Un total de 3.51 face à un seul montant de frais de 3.50 échoue.
Omettre cbc:ChargeTotalAmount n'est accepté que si le document n'a aucun frais au niveau du document. Des frais sans total échouent. Sans aucun frais, un total de 0.00 passe et toute autre valeur échoue.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-108 | Somme des charges ou frais au niveau du document | cac:LegalMonetaryTotal/cbc:ChargeTotalAmount |
| BT-99 | Montant des charges ou frais au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount |
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 :
- Les frais de port, de manutention ou similaires sont stockés comme montant d'en-tête dans le système source, et les éléments
cac:AllowanceChargesont générés à partir d'une autre source qui ne concorde pas avec lui. - Des frais de ligne sont comptés dans le total des frais du document en plus de leur montant net de ligne.
- Le
cbc:ChargeIndicatorest erroné sur un élément, si bien que des frais sont additionnés avec les remises, ou une remise avec les frais. - Les éléments de frais sont écrits, mais le total est ignoré parce que le mapping le considère comme facultatif.
- Des frais exprimés en pourcentage sont recalculés pour le total au lieu de réutiliser le
cbc:Amountarrondi qui a été écrit.
Comment corriger le document
- Rassemblez les éléments
cac:AllowanceChargeplacés directement sous la racine du document dont lecbc:ChargeIndicatorvauttrue. - Additionnez leurs valeurs
cbc:Amount, telles qu'elles sont écrites dans le XML, en arithmétique décimale et arrondissez à deux décimales. - Écrivez le résultat dans
cac:LegalMonetaryTotal/cbc:ChargeTotalAmount. En l'absence de frais au niveau du document, omettez l'élément ou envoyez 0.00. - Reconstruisez le total hors TVA à partir du total des frais corrigé, puisque
BR-CO-13le lit.
L'exemple enregistré comporte des frais au niveau du document, égaux à 10 pour cent d'une base de 35.00.
Frais au niveau du document : 3.50 Total des frais envoyé (BT-108) : 4.50, donc BR-CO-12 échoue Total hors TVA envoyé : 68.50, soit 66.00 - 1.00 + 3.50 Face aux 4.50 envoyés, BR-CO-13 attend 66.00 - 1.00 + 4.50 = 69.50, et échoue donc aussi
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 indique 4.50, les seuls frais au niveau du document sont de 3.50
<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>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">66.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
<!-- total with VAT omitted from this fragment -->
<cbc:AllowanceTotalAmount currencyID="GBP">1.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="GBP">4.50</cbc:ChargeTotalAmount>
<!-- prepaid, rounding and payable amounts omitted from this fragment -->
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : le total est égal au seul montant de frais
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">66.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
<!-- total with VAT omitted from this fragment -->
<cbc:AllowanceTotalAmount currencyID="GBP">1.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="GBP">3.50</cbc:ChargeTotalAmount>
<!-- prepaid, rounding and payable amounts omitted from this fragment -->
</cac:LegalMonetaryTotal>Seul cbc:ChargeTotalAmount diffère : 4.50 dans le document en échec, 3.50 dans le document corrigé. Le document en échec signale aussi BR-CO-13, car son total hors TVA de 68.50 a été calculé avec un total des frais de 3.50 et ne correspond pas aux 4.50 envoyés. Rectifier le total des frais lève les deux constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-CO-12 et BR-CO-13. 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 de la même façon aux documents UBL
InvoiceetCreditNote; un avoir comportant la même erreur signale les deux mêmes constats. - Omettre le total alors que des frais sont présents signale aussi
BR-CO-13, qui traite alors le total des frais manquant comme si rien n'était ajouté. - Cette règle ne fait qu'additionner. Le motif, la catégorie de TVA, le montant de base et le pourcentage de chaque montant de frais sont vérifiés ailleurs.
Règles liées
- BR-CO-11 est le contrôle correspondant pour les remises au niveau du document
- BR-CO-13 ajoute le total des frais lorsqu'il vérifie le total hors TVA
- PEPPOL-EN16931-R040 vérifie un montant de frais par rapport à son montant de base et à son pourcentage
- PEPPOL-EN16931-R041 exige un montant de base dès que des frais portent un pourcentage
- 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-20.
La définition officielle de BR-CO-12 (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.

