Compte
Français

BR-CO-13: Le total hors TVA (BT-109) est incohérent

Règle de base EN 16931 · Erreur · UBL, CII

NormeEN 16931-1 (modèle sémantique européen de la facture électronique)GravitéErreur: la facture est rejetéeSyntaxeUBL, CIITermes métier
  • BT-107 Sum of allowances on document level
  • BT-108 Sum of charges on document level
  • BT-109 Invoice total amount without VAT
  • BT-131 Invoice line net amount
S'applique àToute facture EN 16931 : Factur-X / ZUGFeRD 2.x (profils EN 16931, EXTENDED, XRECHNUNG), XRechnung, Peppol BIS Billing 3.0 et les CIUS nationales.

Texte officiel de la règle

[BR-CO-13] Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

Le texte normatif est en anglais ; il est cité tel quel.

Pourquoi cette erreur apparaît

Le montant total de la facture hors TVA (BT-109) doit être égal à la somme des montants nets des lignes (BT-106), moins les remises au niveau du document (BT-107), plus les majorations au niveau du document (BT-108). La règle évalue cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount par rapport à cbc:LineExtensionAmount, cbc:AllowanceTotalAmount et cbc:ChargeTotalAmount (UBL), ou ram:TaxBasisTotalAmount par rapport à ram:LineTotalAmount, ram:AllowanceTotalAmount et ram:ChargeTotalAmount (CII). Les écarts proviennent généralement d'un logiciel qui déduit BT-109 de la ventilation de TVA ou des totaux TTC au lieu de ces trois champs.

Comment corriger

Formule : BT-109 = BT-106 - BT-107 + BT-108, arrondi à 2 décimales ; BT-107 ou BT-108 absents valent 0. En UBL, écrivez le résultat dans cbc:TaxExclusiveAmount, en CII dans ram:TaxBasisTotalAmount. Vérifiez d'abord que BT-106, BT-107 et BT-108 sont eux-mêmes corrects (BR-CO-10 à BR-CO-12), puis recalculez BT-109 à partir des valeurs effectivement écrites. N'y incluez ni la TVA, ni l'arrondi, ni le montant déjà payé.

Exemple (valide)

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">250.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">245.90</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="EUR">292.62</cbc:TaxInclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="EUR">10.00</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="EUR">5.90</cbc:ChargeTotalAmount>
  <cbc:PayableAmount currencyID="EUR">292.62</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

Ce que le validateur vérifie

Élément vérifié (contexte):

UBL

cac:LegalMonetaryTotal

Test (XPath):

((cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10) div 100 ))  or (not(cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10 ) div 100)) or ((cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount)) * 10 * 10 ) div 100)) or (not(cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = xs:decimal(cbc:LineExtensionAmount)))

CII

//ram:SpecifiedTradeSettlementHeaderMonetarySummation

Test (XPath):

(xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) or      ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount)) *10 * 10) div 100)  and not (ram:ChargeTotalAmount)) or      ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100)  and not (ram:AllowanceTotalAmount)) or      ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount))  *10 * 10) div 100) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))

Corriger automatiquement

Cette erreur peut être corrigée automatiquement : après confirmation, le vérificateur recalcule les totaux et la TVA à partir des lignes.

Corriger ma facture →

La même vérification par API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Règles liées

Questions fréquentes

Que signifie BR-CO-13 ?

BR-CO-13 est une règle de base en 16931 : Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

Ma facture sera-t-elle rejetée à cause de BR-CO-13 ?

Oui. BR-CO-13 est classée « bloquante » ; les validateurs (plateformes agréées, points d'accès Peppol, KoSIT, KSeF) rejettent la facture tant qu'elle n'est pas corrigée.

À quels formats s'applique BR-CO-13 ?

Toute facture EN 16931 : Factur-X / ZUGFeRD 2.x (profils EN 16931, EXTENDED, XRECHNUNG), XRechnung, Peppol BIS Billing 3.0 et les CIUS nationales. Syntaxe : UBL et CII.

Source: EN 16931-1:2017 schematron (CEN TC434, via Peppol BIS 3.0.20). Catalogue généré à partir des jeux de règles officiels le 2026-10-15.