Sur cette page
La réponse courte
BR-14 échoue lorsque cac:LegalMonetaryTotal ne contient pas de cbc:TaxInclusiveAmount. Ajoutez-le après cbc:TaxExclusiveAmount, avec le total hors TVA plus le total de la TVA tiré de cac:TaxTotal/cbc:TaxAmount, arrondi à deux décimales : 25.00 + 5.00 = 30.00 dans l'exemple enregistré.
Deux contrôles arithmétiques perdent leur donnée d'entrée tant qu'il manque. BR-CO-15 ne peut pas confirmer la somme de TVA et BR-CO-16 ne peut pas confirmer le montant à payer, si bien que les deux sont signalés à côté de BR-14, et les trois sont levés ensemble.
Ce que la règle vérifie
La règle s'exécute sur cac:LegalMonetaryTotal et demande seulement si un enfant cbc:TaxInclusiveAmount est présent. Le montant lui-même relève de BR-CO-15 : lors d'un essai, un total TVA comprise de 25.00 au lieu de 30.00 a passé BR-14 et signalé BR-CO-15 et BR-CO-16.
Aucune forme vide de l'élément ne passe. Lors d'un essai, un cbc:TaxInclusiveAmount auto-fermant, portant seulement son currencyID, a été rejeté à l'étape XSD, et les étapes EN 16931 et Peppol ont été ignorées.
Le contrôle n'est soumis à aucune condition : chaque document a donc besoin de l'élément, y compris un document sans TVA due, où il répète simplement le total hors TVA.
| Terme | Signification | Élément UBL |
|---|---|---|
| BT-112 | Montant total de la facture TVA comprise | cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount |
| BT-109 | Montant total de la facture hors TVA | cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount |
| BT-110 | Montant total de la TVA de la facture | cac:TaxTotal/cbc:TaxAmount |
| BT-115 | Montant à payer | cac:LegalMonetaryTotal/cbc:PayableAmount |
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 :
- L'export n'écrit que les montants que la source stocke, comme le total net et le montant à payer, et ne dérive rien entre les deux.
- Le mapping juge le total TVA comprise superflu lorsque rien n'a été payé d'avance, puisqu'il est alors égal au montant à payer, et l'omet.
- Le total TTC est mappé directement sur
cbc:PayableAmount, et l'élément qui devrait aussi le contenir n'est jamais écrit. - L'étape de calcul de la TVA renvoie null pour le montant TTC et le sérialiseur ignore l'élément.
Comment corriger le document
- Fixez d'abord le total de la TVA :
cac:TaxTotal/cbc:TaxAmountdans la devise du document, queBR-CO-14vérifie par rapport à la ventilation de la TVA. - Ajoutez-le à
cbc:TaxExclusiveAmounten arithmétique décimale et arrondissez le résultat à deux décimales. - Écrivez le résultat comme
cbc:TaxInclusiveAmount, avec la devise du document danscurrencyID, aprèscbc:TaxExclusiveAmountet avantcbc:AllowanceTotalAmount. - Vérifiez le montant à payer par rapport à lui : total TVA comprise moins
cbc:PrepaidAmountpluscbc:PayableRoundingAmount, ce queBR-CO-16recalcule.
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 passent du total hors TVA au total des remises
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">5.00</cbc:TaxAmount>
<!-- VAT breakdown omitted from this fragment -->
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">25.00</cbc:TaxExclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="GBP">0.00</cbc:AllowanceTotalAmount>
<!-- charge total, prepaid and rounding amounts omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Fragment de la facture corrigée : le total TVA comprise de 30.00 suit le total hors TVA
<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>
<!-- charge total, prepaid and rounding amounts omitted from this fragment -->
<cbc:PayableAmount currencyID="GBP">30.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>La facture corrigée a un cbc:TaxInclusiveAmount de 30.00 entre le total hors TVA et le total des remises ; la facture en échec ne l'a pas et est identique par ailleurs. À côté de BR-14, le document en échec signale BR-CO-15 à la racine du document, qui ne peut pas montrer que 25.00 plus la TVA de 5.00 donne le total TVA comprise, et BR-CO-16 aux totaux monétaires, qui ne peut pas montrer que le montant à payer de 30.00 en découle. Ce seul élément lève les trois constats.
Ce que le validateur a signalé
- La facture en erreur signale BR-14, BR-CO-15 et BR-CO-16. 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
InvoiceetCreditNote. Lors d'un essai, un avoir sans l'élément a signalé les trois mêmes règles, tout comme la facture complète, dont le montant à payer de 70.00 dépend aussi d'un montant payé d'avance et d'un montant d'arrondi. - Le schéma UBL permet d'omettre l'élément : un document qui ne l'a pas passe donc l'étape XSD, et seules les règles EN 16931 remarquent le manque.
- À l'étape Peppol, rien ne réagit au manque ; elle a validé la facture en échec enregistrée.
- La limite de deux décimales pour ce montant est une règle distincte,
BR-DEC-14.
Règles liées
- BR-13 exige le total hors TVA sur lequel ce montant repose
- BR-CO-15 vérifie que le total TVA comprise est le total hors TVA plus le total de la TVA
- BR-CO-16 déduit le montant à payer de ce total, du montant payé d'avance et du montant d'arrondi
- BR-DEC-14 limite le total TVA comprise à deux décimales
- 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-28.1 : source vérifiée le 2026-09-28, explication mise à jour le 2026-09-28.
La définition officielle de BR-14 (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.

