Aller au contenu

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

BR-CO-21 : Donner à chaque remise au niveau du document un code de motif ou un texte de motif

Une remise ou autre réduction portant sur l'ensemble du document doit indiquer pourquoi elle est accordée, dans cbc:AllowanceChargeReasonCode, cbc:AllowanceChargeReason ou les deux.

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

Sur cette page

La réponse courte

BR-CO-21 échoue lorsqu'un cac:AllowanceCharge placé directement sous la racine du document, avec un cbc:ChargeIndicator à false, n'a ni cbc:AllowanceChargeReasonCode ni cbc:AllowanceChargeReason. Ajoutez le motif pour lequel la remise a été accordée, tiré de l'enregistrement de remise de votre système source : un code de la liste des remises UNTDID 5189, un texte libre, ou les deux.

BR-33 effectue le même contrôle et est signalée sur la même remise : un motif manquant produit donc deux constats. Ajouter l'un ou l'autre élément lève les deux.

Ce que la règle vérifie

La règle parcourt chaque cac:AllowanceCharge enfant de la racine Invoice ou CreditNote dont l'indicateur se lit comme faux. Elle passe lorsque cette remise a un élément de code de motif, un élément de texte de motif, ou les deux.

L'un ou l'autre élément suffit. Lors d'un essai, la facture corrigée privée du code de sa remise, puis privée de son texte, a passé toutes les étapes.

Seule l'existence de l'élément est testée. Un cbc:AllowanceChargeReason vide, ou ne contenant que des espaces, a satisfait cette règle lors d'un essai, et l'étape Peppol l'a alors signalé comme PEPPOL-EN16931-R008.

Les remises de ligne et les frais au niveau du document ne sont pas comptés ici ; ils relèvent de BR-CO-23 et de BR-CO-22. La remise sur prix dans cac:Price n'a besoin d'aucun motif.

Rien ne compare le code au texte. BR-CO-05, la règle censée vérifier que les deux décrivent la même remise, passe toujours dans cette version.

TermeSignificationÉlément UBL
BG-20Remises au niveau du documentcac:AllowanceCharge[cbc:ChargeIndicator = false]
BT-97Motif de la remise au niveau du documentcac:AllowanceCharge/cbc:AllowanceChargeReason
BT-98Code du motif de la remise au niveau du documentcac: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 :

  • La remise n'est stockée que sous forme de montant, sans type ni description : le mapping n'a donc rien à écrire dans l'un ou l'autre élément.
  • Le motif est mappé à partir d'un champ facultatif, comme un nom de promotion, qui était vide pour ce document, et le sérialiseur a ignoré les deux éléments.
  • Le mapping n'écrit un code que lorsque le type de remise a un équivalent UNTDID connu, et n'écrit jamais de texte : un type non mappé se retrouve sans l'un ni l'autre.
  • Un geste commercial ou un escompte est ajouté comme remise par une étape de traitement ultérieure qui ne définit aucun motif.

Comment corriger le document

  1. Retrouvez la remise à partir de l'emplacement du constat. cac:AllowanceCharge[1] est le premier cac:AllowanceCharge sous la racine, et l'index compte les frais aussi bien que les remises.
  2. Prenez le motif dans l'enregistrement source qui a créé la remise : le type de remise, la promotion, la clause du contrat ou l'accord de ristourne.
  3. Si ce motif correspond à une entrée du sous-ensemble de UNTDID 5189 que publie Peppol, écrivez le code dans cbc:AllowanceChargeReasonCode ; 95 correspond à Discount et 100 à Special rebate. Si aucune entrée ne convient, envoyez seulement le texte cbc:AllowanceChargeReason.
  4. Respectez l'ordre UBL : cbc:ChargeIndicator, puis le code, puis le texte, puis cbc:Amount. Lors d'un essai, un texte placé avant le code, ou après le montant, a échoué à l'étape XSD et les étapes suivantes ont été ignorées.
  5. N'émettez pas d'élément vide comme valeur de remplacement. Il échange ce constat contre PEPPOL-EN16931-R008.

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 : la remise du document de 1.00 n'indique aucun motif

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:Amount currencyID="GBP">1.00</cbc:Amount>
  <!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>

Fragment de la facture corrigée : la remise porte le code de motif 95 et un texte de motif

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Example document discount</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="GBP">1.00</cbc:Amount>
  <!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>

La facture corrigée porte le code de motif 95 et le texte Example document discount sur sa remise au niveau du document ; la facture en échec n'a ni l'un ni l'autre, et rien d'autre ne diffère. Outre BR-CO-21, le document en échec signale BR-33, une règle EN 16931 qui effectue exactement le même contrôle sur la même remise, et la même modification la lève. Le montant, la catégorie de TVA et les totaux sont inchangés : aucune règle arithmétique ne se déclenche.

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 aussi bien à Invoice qu'à CreditNote. Lors d'un essai sur la version avoir de l'exemple enregistré, la même paire de constats, BR-33 et BR-CO-21, a été signalée.
  • Les règles EN 16931 lisent cbc:ChargeIndicator comme un booléen : une remise écrite avec 0 reste donc concernée. Lors d'un essai sans motif, elle a signalé cette règle et BR-33, ainsi que PEPPOL-EN16931-R043 pour la graphie.
  • Un code présent mais absent de la liste des remises passe cette règle et est rejeté par BR-CL-19.

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-21 (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.