Sur cette page
La réponse courte
BR-CO-22 échoue lorsqu'un cac:AllowanceCharge placé à la racine et marqué comme frais, avec un cbc:ChargeIndicator à true, n'indique pas ce que couvrent ces frais. Ajoutez cbc:AllowanceChargeReasonCode avec le code UNTDID 7161 du service facturé, cbc:AllowanceChargeReason avec une description, ou les deux.
Chaque montant de frais sans motif est signalé deux fois : une fois comme BR-CO-22 et une fois comme BR-38, qui applique le même contrôle. Une seule correction vaut pour les deux.
Ce que la règle vérifie
Seuls les éléments cac:AllowanceCharge enfants directs de la racine Invoice ou CreditNote et marqués comme frais sont examinés. Chacun doit contenir au moins l'un des deux éléments de motif.
Un code sans texte passe, tout comme un texte sans code : lors d'un essai, les deux variantes de la facture corrigée ont été acceptées.
Cette règle ne vérifie que la présence. Un cbc:AllowanceChargeReasonCode vide l'a passée lors d'un essai, mais a ensuite été signalé par BR-CL-20, PEPPOL-EN16931-CL003 et PEPPOL-EN16931-R008.
Les frais de ligne ont leur propre paire de règles, BR-CO-24 et BR-44. Retirer le texte de motif des frais de ligne de la facture complète a signalé ces deux-là, et non BR-CO-22.
Le libellé du texte n'est jamais jugé par rapport au code. BR-CO-06, qui existe dans ce but, a un test qui passe toujours dans cette version.
| Terme | Signification | Élément UBL |
|---|---|---|
| BG-21 | Charges ou frais au niveau du document | cac:AllowanceCharge[cbc:ChargeIndicator = true] |
| BT-104 | Motif des charges ou frais au niveau du document | cac:AllowanceCharge/cbc:AllowanceChargeReason |
| BT-105 | Code du motif des charges ou frais au niveau du document | cac:AllowanceCharge/cbc:AllowanceChargeReasonCode |
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 transport ou la manutention est ajouté comme forfait par un module d'expédition qui stocke un montant et une catégorie de TVA, mais aucun type de service.
- La description des frais se trouve dans le modèle de mise en page imprimée et ne fait pas partie des données transmises au mapping XML.
- Une majoration est appliquée automatiquement, par exemple sur les petites commandes, par une règle de prix qui n'a aucun nom à transmettre.
- Les champs de motif vides sont supprimés par le sérialiseur, et le motif était vide pour ces frais.
Comment corriger le document
- Localisez les frais à partir du constat. Dans l'exemple enregistré, il s'agit de
cac:AllowanceCharge[2], car l'index compte ensemble les remises et les frais placés sous la racine. - Établissez quel service ou quel coût les frais couvrent, à partir de la commande, de l'enregistrement d'expédition ou de la règle de prix qui les a ajoutés.
- Cherchez le service dans la liste des frais UNTDID 7161 que publie Peppol ; par exemple,
FCcorrespond à Freight service,DLà Delivery etPCà Packing. Écrivez le code correspondant danscbc:AllowanceChargeReasonCodeet, si rien ne convient, envoyez seulement le textecbc:AllowanceChargeReason. - Placez le code juste après
cbc:ChargeIndicatoret le texte après le code, tous deux avantcbc:MultiplierFactorNumericetcbc:Amount, sinon l'étape XSD rejette le document. - Enregistrez le motif là où les frais sont créés dans le système source, afin que les documents suivants ne reproduisent pas la lacune.
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 : des frais de 10 pour cent au niveau du document sans code ni texte de motif
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<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>Fragment de la facture corrigée : les mêmes frais avec le code de motif CG et un texte de motif
<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>Deux éléments manquent aux frais du document dans la facture en échec : cbc:AllowanceChargeReasonCode avec CG et cbc:AllowanceChargeReason avec Example document charge. Le document en échec signale BR-38 à côté de BR-CO-22, car les deux règles testent la même chose sur les mêmes frais : rétablir le motif lève donc les deux. CG signifie Cleaning dans UNTDID 7161 et le texte enregistré est générique ; des frais réels doivent porter le code et le libellé de leur propre service.
Ce que le validateur a signalé
- La facture en erreur signale
BR-38et BR-CO-22. 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 à
Invoiceet àCreditNote. Lors d'un essai, un avoir construit de la même façon a signaléBR-38etBR-CO-22sur les mêmes frais. - L'étape EN 16931 lit
cbc:ChargeIndicatorcomme un booléen. Des frais écrits avec1au lieu detruecomptent toujours comme frais ici : lors d'un essai sans motif, ils ont signalé cette règle etBR-38, ainsi quePEPPOL-EN16931-R043pour la graphie. - Savoir si un code appartient à la liste des frais est une question distincte, à laquelle répond
BR-CL-20.
Règles liées
- BR-CO-21 est l'exigence correspondante pour les remises au niveau du document
- BR-CL-20 vérifie un code de motif de frais par rapport à la liste UNTDID 7161
- BR-CO-12 vérifie que les montants des frais donnent le total des frais
- PEPPOL-EN16931-R043 exige que l'indicateur de frais soit écrit true ou false
- 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 BR-CO-22 (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.

