Technique

BR-CO-17 EN16931 : erreur d'arrondi TVA dans Factur-X, correction ERP

Mis à jour le 4 min de lecture Par FacturX API

Guide BR-CO-17 : comprendre l'erreur d'arrondi TVA EN16931 dans Factur-X, vérifier BT-116, BT-117, BT-119 et corriger le calcul ERP.

BR-CO-17 est une erreur de cohérence TVA. Elle apparaît quand le montant de TVA déclaré pour une catégorie ne correspond pas au calcul attendu à partir de la base taxable et du taux.

Dans les ERP, la cause est souvent un décalage d’arrondi : calcul ligne par ligne, calcul global, ventilation par catégorie, ou montant ajusté manuellement.

Réponse courte

Pour chaque catégorie TVA, EN16931 attend une cohérence entre :

Business TermSens
BT-116base taxable de la catégorie
BT-117montant TVA de la catégorie
BT-119taux TVA de la catégorie

La logique attendue est :

BT-117 ≈ BT-116 × BT-119 / 100

Un écart d’un centime ne suffit pas à conclure à un échec BR-CO-17. Le binding CII CEN EN16931, version 1.3.16 contient une tolérance dans cette règle. D’autres règles, profils ou contrôles d’entrée API peuvent imposer des contraintes différentes. Cette tolérance ne justifie pas d’ajuster arbitrairement un montant fiscal.

Exemple simple

Base taxable :

<ram:BasisAmount>99.99</ram:BasisAmount>
<ram:CalculatedAmount>22.00</ram:CalculatedAmount>
<ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>

Calcul attendu :

99.99 × 20 / 100 = 19.998 → 20.00

Le fragment déclare 22.00. Évalué isolément avec le XPath BR-CO-17 du binding CII 1.3.16 cité ci-dessus, ce cas échoue ; 20.00 et 20.01 passent cette règle pour la même base et le même taux. Cela ne constitue pas une validation complète de facture. Les extraits ci-dessous ne sont pas des blocs CII complets.

Correction :

<ram:BasisAmount>99.99</ram:BasisAmount>
<ram:CalculatedAmount>20.00</ram:CalculatedAmount>
<ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>

Où se trouve l’erreur dans CII

La ventilation TVA se trouve dans ApplicableTradeTax au niveau du règlement.

XPath simplifié :

rsm:CrossIndustryInvoice
  /rsm:SupplyChainTradeTransaction
  /ram:ApplicableHeaderTradeSettlement
  /ram:ApplicableTradeTax

Champs concernés :

<ram:ApplicableTradeTax>
  <ram:CalculatedAmount>20.00</ram:CalculatedAmount>
  <ram:TypeCode>VAT</ram:TypeCode>
  <ram:BasisAmount>99.99</ram:BasisAmount>
  <ram:CategoryCode>S</ram:CategoryCode>
  <ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>

Les 4 causes les plus fréquentes

1. TVA calculée globalement au lieu d’être ventilée par catégorie

Si une facture contient plusieurs catégories TVA, le total global ne suffit pas. Il faut une ventilation par catégorie avec base, taux et montant TVA cohérents.

Erreur typique :

  • lignes à 20% et lignes exonérées ;
  • une seule base taxable globale ;
  • un seul montant TVA ;
  • catégories mal séparées.

2. Arrondi ligne vs arrondi catégorie

Deux stratégies peuvent produire un écart :

Stratégie A : calculer TVA ligne par ligne puis sommer
Stratégie B : sommer les bases puis calculer la TVA sur la catégorie

Selon les montants, A et B peuvent différer d’un centime. Le XML doit rester cohérent avec la stratégie attendue par les règles appliquées et avec les montants déclarés.

3. Remise document mal rattachée à la catégorie TVA

Une remise au niveau document doit être rattachée à une catégorie TVA. Si elle réduit le total HT mais pas la base taxable de la catégorie, BT-116 devient incohérent avec les lignes.

Cela peut déclencher BR-CO-17, mais aussi BR-S-08 ou les équivalents selon la catégorie.

4. Ajustement manuel du total TVA

Certains ERP autorisent une correction manuelle du total TVA pour coller à une facture historique ou à un arrondi commercial. Cette correction doit aussi être répercutée dans la ventilation, sinon le XML devient contradictoire.

Comment diagnostiquer

Pour chaque catégorie TVA :

  1. Lister les lignes de cette catégorie.
  2. Additionner les bases HT de ces lignes.
  3. Ajouter les charges document de même catégorie.
  4. Soustraire les remises document de même catégorie.
  5. Comparer au BT-116.
  6. Calculer BT-116 × BT-119 / 100.
  7. Comparer au BT-117.

Table de debug :

CatégorieBase attendueBase XMLTauxTVA attendueTVA XML
S 20%99.9999.9920.0020.0022.00
E 0%40.0040.000.000.000.00

Dans cet exemple, l’erreur est sur le montant TVA de la catégorie S.

Correction côté ERP

La correction durable se fait dans le moteur de calcul ou le mapping XML.

Pseudo-code :

type VatBucket = {
  category: string
  rate: number
  taxableBase: Decimal
}

function computeVatAmount(bucket: VatBucket): Decimal {
  return bucket.taxableBase
    .mul(bucket.rate)
    .div(100)
    .toDecimalPlaces(2)
}

Puis le XML doit reprendre exactement ces valeurs :

const vatAmount = computeVatAmount(bucket)

writeCiiApplicableTradeTax({
  basisAmount: bucket.taxableBase,
  calculatedAmount: vatAmount,
  categoryCode: bucket.category,
  rateApplicablePercent: bucket.rate,
})

Ne calculez pas CalculatedAmount à partir d’un total global si BasisAmount vient d’une ventilation différente.

Peut-on réparer automatiquement ?

Changer un montant de TVA modifie une donnée financière. Dans FacturX API, /validate contrôle sans réparer et /repair ne recalcule pas la TVA ni les totaux métier. Corrigez le calcul ou le mapping dans votre ERP à partir des données comptables, puis contrôlez le document régénéré. Un diagnostic documentaire ne garantit pas l’acceptation par une PA.

Erreurs liées

Continuer la lecture

Étape suivante recommandée

Vous voulez retrouver la catégorie TVA qui déclenche BR-CO-17 ?

Voici ce que vous allez obtenir :

  • Montants de base et TVA extraits
  • Catégorie TVA concernée
  • Écart d'arrondi visible
  • Lien vers les erreurs BR-CO liées
#BR-CO-17 #TVA #arrondi #en16931 #factur-x #schematron #erp