Technique

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

2 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.
  • Cas piégeux : ligne en autoliquidation (catégorie AE) qui met BT-110 à 0 et qu’on oublie de refléter dans BT-112.
  • Réparable automatiquement par /repair quand les composants BT-109 et BT-110 sont eux-mêmes corrects.

Ce que l’erreur veut dire

BR-CO-15 (Schematron EN16931, aligné Peppol) exige que GrandTotalAmount (BT-112, montant total avec TVA) soit strictement égal à la somme du TaxBasisTotalAmount (BT-109, HT après remises et frais documentaires) et du TaxTotalAmount (BT-110, total TVA). Tout écart bloque le document, sans tolérance. Attention sémantique : BT-112 est le total AVEC TVA ; ce n’est pas le « montant à payer » — ce dernier est BT-115 et relève de 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

<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é

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

Oui — l’endpoint /repair corrige automatiquement cette erreur dans la majorité des cas.

Et maintenant ?

Réparer mon Factur-X →

curl -X POST https://api.facturxapi.com/api/v1/repair \
  -H "Authorization: Bearer VOTRE_CLE" \
  -F "file=@facture.xml"

Voir aussi

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