Aller au contenu

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

BR-12 : Ajouter la somme des montants nets des lignes aux totaux monétaires

cac:LegalMonetaryTotal n'a pas de cbc:LineExtensionAmount. Écrivez-y la somme des montants nets des lignes, même lorsque le document n'a qu'une seule ligne.

EN 16931Erreur : le document n'est pas valideTotaux

Sur cette page

La réponse courte

BR-12 échoue lorsque cac:LegalMonetaryTotal n'a pas d'enfant cbc:LineExtensionAmount. Ajoutez-le comme premier élément des totaux monétaires, avec la somme des cbc:LineExtensionAmount de toutes les lignes, arrondie à deux décimales.

Le même nom d'élément apparaît sur chaque ligne, ce qui rend ce total facile à oublier. Les montants des lignes ne comptent pas pour lui : la somme au niveau du document doit aussi être écrite, même lorsqu'une ligne unique rend les deux valeurs identiques.

Ce que la règle vérifie

La règle s'exécute sur cac:LegalMonetaryTotal et exige un élément cbc:LineExtensionAmount directement à l'intérieur. Sa valeur n'est pas examinée ici ; savoir si elle est égale à la somme des lignes relève de BR-CO-10.

Un total des lignes vide n'arrive jamais jusque-là. Le schéma exige que chaque montant soit un nombre décimal : lors d'un essai, un cbc:LineExtensionAmount vide dans les totaux a donc échoué à l'étape XSD, et l'étape EN 16931 a été ignorée.

Parmi les totaux monétaires, le schéma UBL n'exige que le montant à payer, ce qui explique qu'un document sans total des lignes passe l'étape XSD. Le bloc des totaux monétaires est lui-même obligatoire : lors d'un essai, un document sans cac:LegalMonetaryTotal a échoué au schéma.

Les montants nets des lignes sur cac:InvoiceLine ou cac:CreditNoteLine sont des éléments distincts et ne satisfont pas la règle, quel que soit leur nombre.

TermeSignificationÉlément UBL
BT-106Somme des montants nets des lignes de facturecac:LegalMonetaryTotal/cbc:LineExtensionAmount
BT-131Montant net de ligne de facturecac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note)

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 bloc des totaux est construit à partir d'une liste fixe de champs qui ne contient que les totaux stockés par le système source, comme le total net et le total brut, et le total des lignes n'en fait pas partie.
  • Le mapping considère le total des lignes comme redondant lorsqu'il n'y a ni remise ni frais au niveau du document, parce qu'il serait alors égal au total hors TVA.
  • Le total des lignes est calculé après l'écriture du bloc des totaux : il est donc encore nul lorsque le sérialiseur l'atteint, et il est ignoré.

Comment corriger le document

  1. Prenez le cbc:LineExtensionAmount de chaque ligne exactement tel qu'il est écrit, et additionnez-les en arithmétique décimale, en conservant le signe des lignes négatives.
  2. Arrondissez la somme à deux décimales et écrivez-la sous la forme de cbc:LineExtensionAmount, avec la devise du document dans currencyID, comme premier enfant de cac:LegalMonetaryTotal. Lors d'un essai, l'élément placé après cbc:TaxExclusiveAmount a échoué à l'étape XSD.
  3. Vérifiez que le total hors TVA est égal au nouveau total des lignes, moins le total des remises, plus le total des frais, afin que BR-CO-13 passe 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 : les totaux monétaires commencent au total hors TVA, tandis que la ligne garde son propre montant net

<cac:LegalMonetaryTotal>
  <cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="GBP">30.00</cbc:TaxInclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="GBP">0.00</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="GBP">0.00</cbc:ChargeTotalAmount>
  <!-- prepaid, rounding and payable amounts omitted from this fragment -->
</cac:LegalMonetaryTotal>

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <!-- item and price omitted from this fragment -->
</cac:InvoiceLine>

Fragment de la facture corrigée : le total des lignes de 25.00 ouvre les totaux monétaires

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="GBP">30.00</cbc:TaxInclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="GBP">0.00</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="GBP">0.00</cbc:ChargeTotalAmount>
  <!-- prepaid, rounding and payable amounts omitted from this fragment -->
</cac:LegalMonetaryTotal>

La facture corrigée a un cbc:LineExtensionAmount de 25.00 comme premier enfant de cac:LegalMonetaryTotal ; la facture en échec ne l'a pas, et son unique ligne est inchangée. Deux autres règles EN 16931 sont signalées au même emplacement. BR-CO-10 compare le total des lignes à la somme des lignes, et un total absent ne peut pas être égal à 25.00. BR-CO-13 calcule le total hors TVA attendu à partir du total des lignes : sans total des lignes, il ne peut pas confirmer les 25.00 envoyés. Rétablir l'élément lève les trois constats.

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 aux documents UBL Invoice et CreditNote ; les totaux monétaires portent le même nom dans les deux. Lors d'un essai, un avoir sans total des lignes a signalé les trois mêmes règles.
  • Considérez BR-CO-10 et BR-CO-13 à côté de cette règle comme des conséquences de l'unique élément manquant, et non comme des défauts distincts. Lors d'un essai sur l'exemple plus riche avec remises et frais au niveau du document, retirer son total des lignes de 66.00 a signalé les trois mêmes règles et rien d'autre.
  • L'élément de chaque ligne est une autre affaire. Le schéma l'y exige : lors d'un essai, une ligne sans son propre cbc:LineExtensionAmount a donc échoué à l'étape XSD, et aucune règle métier n'a été signalée pour elle.

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