En bref
- BR-CO-15 vérifie que
BT-112(Invoice total amount with VAT, montant total avec TVA) =BT-109(HT après remises) +BT-110(TVA totale). - Ne pas confondre :
BT-112= total avec TVA ;BT-115= montant à payer (=BT-112 − BT-113 + BT-114, règle BR-CO-16). - Cause classique : changement de taux TVA ou de remise documentaire sans recalcul du total.
- Une ligne en autoliquidation (
AE) ne met pas à zéro toute la TVA d’une facture qui comporte aussi des opérations taxées. Le total TVA doit refléter les ventilations réellement présentes. - Corriger le calcul dans le système source puis revalider ;
/repairne recalcule pas les totaux métier.
Ce que l’erreur veut dire
BR-CO-15 vérifie BT-112 = BT-109 + BT-110. En CII, ces montants se trouvent dans SpecifiedTradeSettlementHeaderMonetarySummation, sous ApplicableHeaderTradeSettlement : GrandTotalAmount, TaxBasisTotalAmount et TaxTotalAmount dans la devise de facturation. Ne lui additionnez pas un éventuel total TVA exprimé dans une autre devise.
Le binding CII EN16931, version 1.3.16 compare le total à la somme arrondie à deux décimales. Cette égalité arithmétique ne prouve ni l’exactitude fiscale des composants ni l’acceptation par une PA. BT-112 est le total avec TVA ; le montant à payer est BT-115, contrôlé séparément par BR-CO-16.
Quand cette erreur arrive
Survient quand : (a) changement de taux TVA sans recalcul du total ; (b) ajout d’une remise documentaire (BG-20) qui modifie BT-109 mais pas BT-112 ; (c) ligne en autoliquidation (catégorie AE) où la TVA est 0 € mais où le moteur additionne une ligne fantôme ; (d) confusion entre HT brut et HT net (après remises et frais documentaires).
Exemple XML qui déclenche l’erreur
Fragments pédagogiques sous ApplicableHeaderTradeSettlement, avec InvoiceCurrencyCode égal à EUR dans leur contexte. Ils illustrent uniquement BR-CO-15, pas une facture complète validée.
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:TaxBasisTotalAmount>1000.00</ram:TaxBasisTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">200.00</ram:TaxTotalAmount>
<ram:GrandTotalAmount>1100.00</ram:GrandTotalAmount> <!-- ❌ devrait être 1200.00 -->
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
Exemple XML corrigé
Si les données comptables confirment 1 000,00 EUR HT et 200,00 EUR de TVA, le total avec TVA est 1 200,00 EUR. Sinon, corrigez d’abord les composants : changer le total pour satisfaire une égalité ne suffit pas.
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:TaxBasisTotalAmount>1000.00</ram:TaxBasisTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">200.00</ram:TaxTotalAmount>
<ram:GrandTotalAmount>1200.00</ram:GrandTotalAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
Correction manuelle
Toujours recalculer GrandTotalAmount = TaxBasisTotalAmount + TaxTotalAmount en fin de pipeline ERP, après finalisation des lignes, des remises documentaires et du calcul TVA. En autoliquidation pure : TaxTotalAmount = 0.00, donc GrandTotalAmount = TaxBasisTotalAmount. Si vous voulez calculer le montant à payer (avec acompte ou arrondi), utilisez BT-115 et la règle BR-CO-16, pas BT-112.
Réparable automatiquement par /repair ?
Pas par recalcul du total TTC. Le contrat public de l’API exclut le recalcul de TVA et des totaux métier par /repair. Vérifiez les données comptables, corrigez le calcul dans l’ERP, puis régénérez et validez le XML avec /validate.
Et maintenant ?
Diagnostiquer ma facture →
Après correction de la source, contrôler le XML sans le modifier :
curl -X POST https://api.facturxapi.com/api/v1/validate \
-H "Authorization: Bearer VOTRE_CLE" \
-F "file=@./facture.xml"