Compte
Français

BR-CO-16: Le montant net à payer (BT-115) 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-112 Invoice total amount with VAT
  • BT-113 Paid amount
  • BT-114 Rounding amount
  • BT-115 Amount due for payment
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-16] Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).

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

Pourquoi cette erreur apparaît

Le montant à payer (BT-115) doit être égal au total TTC (BT-112), diminué du montant déjà payé (BT-113) et augmenté du montant d'arrondi (BT-114). La règle contrôle cac:LegalMonetaryTotal/cbc:PayableAmount par rapport à cbc:TaxInclusiveAmount, cbc:PrepaidAmount et cbc:PayableRoundingAmount (UBL), ou ram:DuePayableAmount par rapport à ram:GrandTotalAmount, ram:TotalPrepaidAmount et ram:RoundingAmount (CII). Elle échoue généralement lorsque le logiciel inscrit le solde restant dû après un paiement partiel sans renseigner le montant déjà payé, ou utilise un signe erroné pour le montant d'arrondi.

Comment corriger

Formule : BT-115 = BT-112 - BT-113 + BT-114, arrondi à 2 décimales ; un BT-113 ou un BT-114 absent compte pour 0. Si un acompte a été reçu, inscrivez-le en valeur positive dans cbc:PrepaidAmount / ram:TotalPrepaidAmount et réduisez d'autant cbc:PayableAmount / ram:DuePayableAmount. N'utilisez cbc:PayableRoundingAmount / ram:RoundingAmount que pour l'arrondi de paiement en espèces, avec le signe de l'ajustement (par exemple -0.02 ou 0.03). Pour une facture entièrement réglée, PrepaidAmount est égal à TaxInclusiveAmount et PayableAmount vaut 0.00.

Exemple (valide)

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">200.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">200.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="EUR">238.00</cbc:TaxInclusiveAmount>
  <cbc:PrepaidAmount currencyID="EUR">100.00</cbc:PrepaidAmount>
  <cbc:PayableAmount currencyID="EUR">138.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

Ce que le validateur vérifie

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

UBL

cac:LegalMonetaryTotal

Test (XPath):

(exists(cbc:PrepaidAmount) and not(exists(cbc:PayableRoundingAmount)) and (xs:decimal(cbc:PayableAmount) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or (not(exists(cbc:PrepaidAmount)) and not(exists(cbc:PayableRoundingAmount)) and xs:decimal(cbc:PayableAmount) = xs:decimal(cbc:TaxInclusiveAmount)) or (exists(cbc:PrepaidAmount) and exists(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or  (not(exists(cbc:PrepaidAmount)) and exists(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = xs:decimal(cbc:TaxInclusiveAmount)))

CII

//ram:SpecifiedTradeSettlementHeaderMonetarySummation

Test (XPath):

(xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount) + xs:decimal(ram:RoundingAmount)) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) + xs:decimal(ram:RoundingAmount)) and not (xs:decimal(ram:TotalPrepaidAmount))) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount))) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount)) and not (xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount)))

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-16 ?

BR-CO-16 est une règle de base en 16931 : Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).

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

Oui. BR-CO-16 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-16 ?

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.