Technique

Erreur BR-CO-15 EN16931 : BT-112 ≠ BT-109 + BT-110 — réconciliation des totaux

Mis à jour le 3 min de lecture Par FacturX API

BR-CO-15 vérifie que le montant total avec TVA (BT-112) = HT après remises (BT-109) + TVA totale (BT-110). Différent de BT-115 (montant à payer, BR-CO-16).

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 ; /repair ne 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"

Voir aussi

#en16931 #schematron #factur-x #erreurs #validation