Aller au contenu

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

BR-CO-23 : Ajouter un motif à chaque remise sur une ligne de facture

Une remise rattachée à une ligne de facture ou d'avoir doit indiquer son motif par un code, un texte ou les deux. La remise sur prix dans cac:Price n'est pas concernée.

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

Sur cette page

La réponse courte

BR-CO-23 échoue lorsqu'un cac:AllowanceCharge dans cac:InvoiceLine (ou cac:CreditNoteLine) a un cbc:ChargeIndicator à false et ne porte ni cbc:AllowanceChargeReasonCode ni cbc:AllowanceChargeReason. Donnez son motif à la remise de ligne : un code UNTDID 5189, une description, ou les deux.

La même remise est aussi signalée comme BR-42, une seconde règle EN 16931 au contrôle identique. Ajouter le motif une seule fois satisfait les deux.

Ce que la règle vérifie

La règle examine chaque cac:AllowanceCharge enfant direct d'une ligne qui se lit comme une remise. La remise est acceptée dès que l'un des deux éléments de motif y existe.

Chaque remise est jugée séparément : une ligne avec deux remises a besoin d'un motif sur chacune, et chaque ligne du document est parcourue.

La remise sur prix dans cac:Price est un autre élément et sort du champ de cette règle. L'exemple enregistré avec remise sur prix n'a pas de motif sur sa remise au niveau du prix et se valide sans constat.

Les frais de ligne en sortent aussi. La facture complète a des frais de ligne avec un texte de motif et sans code, ce qui suffit pour leur propre règle, BR-CO-24.

Un élément présent satisfait la règle même sans contenu. Lors d'un essai, un cbc:AllowanceChargeReason vide sur la remise de ligne a passé BR-CO-23 et a été signalé à la place par PEPPOL-EN16931-R008.

TermeSignificationÉlément UBL
BG-27Remises sur la ligne de facturecac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = false] (cac:CreditNoteLine/cac:AllowanceCharge in a credit note)
BT-139Motif de la remise de ligne de facturecac:InvoiceLine/cac:AllowanceCharge/cbc:AllowanceChargeReason
BT-140Code du motif de la remise sur la ligne de facturecac:InvoiceLine/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 :

  • Une remise client ou une remise sur volume est appliquée ligne par ligne par un moteur de prix qui enregistre le pourcentage et le montant, mais pas le type de remise.
  • Les remises de ligne sont générées à partir de l'écart entre prix catalogue et prix de vente, ce qui ne laisse aucun motif à rattacher.
  • Le motif est mappé pour les remises au niveau du document, mais le mapping au niveau des lignes a été écrit séparément et l'omet.
  • Le texte du motif est tronqué ou nettoyé jusqu'à être vide, et l'élément est alors omis.

Comment corriger le document

  1. Retrouvez la ligne et la remise dans l'emplacement du constat, par exemple cac:InvoiceLine[1]/cac:AllowanceCharge[1]. Le second index compte chaque cac:AllowanceCharge de cette ligne, frais compris.
  2. Reportez le type de remise depuis l'enregistrement de prix qui a produit la remise.
  3. Lorsque le type correspond à une entrée de UNTDID 5189, écrivez ce code dans cbc:AllowanceChargeReasonCode (95 pour une remise simple). Ajoutez cbc:AllowanceChargeReason avec la description, ou envoyez le texte seul lorsqu'aucun code ne convient.
  4. Gardez les éléments dans l'ordre UBL, juste après cbc:ChargeIndicator et avant cbc:MultiplierFactorNumeric et cbc:Amount. Aucun montant de la ligne n'est à recalculer.

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 de 5 pour cent sur la ligne 1 n'a pas de motif, les frais de ligne à côté en ont un

<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:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
    <cbc:Amount currencyID="GBP">2.00</cbc:Amount>
    <cbc:BaseAmount currencyID="GBP">40.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReason>Example charge</cbc:AllowanceChargeReason>
    <cbc:Amount currencyID="GBP">0.01</cbc:Amount>
  </cac:AllowanceCharge>
  <!-- item and price omitted from this fragment -->
</cac:InvoiceLine>

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

<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.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
  <!-- line charge, item and price omitted from this fragment -->
</cac:InvoiceLine>

Sur la ligne 1, la facture corrigée porte le code de motif 95 et le texte Example discount sur la remise de 5 pour cent ; la facture en échec n'a ni l'un ni l'autre, et rien d'autre ne change. Le document en échec signale aussi BR-42, qui applique le même contrôle que BR-CO-23 à la même remise : la même modification lève donc les deux. Les frais de ligne voisins avaient déjà un texte de motif et n'ont pas été signalés.

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, la version avoir de l'exemple enregistré a signalé BR-42 et BR-CO-23 à cac:CreditNoteLine[1]/cac:AllowanceCharge[1].
  • Seule l'étape EN 16931 signale un motif manquant. Lorsqu'un code est présent, l'étape Peppol le vérifie par rapport à la liste des remises en tant que PEPPOL-EN16931-CL002, et l'étape EN 16931 en tant que BR-CL-19.
  • Le montant d'une remise de ligne entre dans le calcul du montant net de la ligne, mais ajouter un motif ne change aucune valeur.

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