Pourquoi le validateur signale-t-il BR-S-08, BR-S-09 et BR-CO-17 ?

Membres du SDK
AddProduct_Comfort() AddTradeAllowanceCharge() AddTradeTax() WriteTotals()
Termes métier
BT-116 VAT category taxable amount BT-117 VAT category tax amount BT-92 Document level allowance amount BT-106 Sum of Invoice line net amount BT-107 Sum of allowances on document level BT-109 Invoice total amount without VAT BT-110 Invoice total VAT amount BT-112 Invoice total amount with VAT
Publié le

En bref : ensemble, les trois règles BR-S-08, BR-S-09 et BR-CO-17 signalent presque toujours la même erreur : dans le détail de la TVA (BG-23), la base d’imposition (BT-116) contient la somme des lignes au lieu du montant net après remise. La bonne valeur est : somme des lignes de ce taux de TVA − remises + frais de ce taux de TVA. La taxe (BT-117) est calculée sur cette base.

Les trois règles

  • BR-S-08 : la base d’imposition par taux de TVA (BT-116) doit être égale à la somme des montants nets des lignes à ce taux, moins les remises (BT-92), plus les frais (BT-99) à ce taux.
  • BR-S-09 : le montant de la taxe (BT-117) doit être égal à base × taux de TVA (BT-119), arrondi commercialement à 2 décimales.
  • BR-CO-17 : le même calcul (base × taux = taxe), en tant que règle générale pour toutes les catégories de TVA.

Si la base est la somme des lignes, elle ne correspond pas à la remise (BR-S-08) – et le montant de taxe, pourtant correct, ne correspond plus à la base erronée (BR-S-09, BR-CO-17). C’est pourquoi les trois messages apparaissent toujours ensemble.

Exemple : remise de 20 % sur deux lignes sur trois

ChampFauxCorrect
Somme des montants nets des lignes (BT-106)105.05105.05 (67,23 + 16,81 + 21,01)
Remise (BT-92 / BT-107)16.8116.81 (20 % de 84,04)
Montant total hors TVA (BT-109)88.2488.24
Base d’imposition du détail (BT-116)105.0588.24
Taxe (BT-117 / BT-110)16.7716.77 (88,24 × 19 %)
Montant total TTC (BT-112)105.01105.01
Montant d’arrondi (BT-114)-0.01-0.01
Montant à payer (BT-115)105.00105.00

Une seule valeur est fausse – et c’est précisément elle qui génère les trois messages. Avec un seul taux de TVA, la base d’imposition du détail est toujours égale au montant total hors TVA (BT-109).

Dans le SDK Aloaha ZUGFeRD

' lignes (montants nets des lignes déjà arrondis à 2 décimales)
alo.AddProduct_Comfort("1", "", "A-1", "1", "H87", "Device rental", "", "", "EUR", "", "H87", _
                       False, "", "", "", "67.23", "EUR", "1", "H87", "VAT", "S", "19.00", "", "67.23", "EUR", "", "")
alo.AddProduct_Comfort("2", "", "A-2", "1", "H87", "Monitor rental", "", "", "EUR", "", "H87", _
                       False, "", "", "", "16.81", "EUR", "1", "H87", "VAT", "S", "19.00", "", "16.81", "EUR", "", "")
alo.AddProduct_Comfort("3", "not discountable", "A-3", "1", "H87", "Add-on module", "", "", "EUR", "", "H87", _
                       False, "", "", "", "21.01", "EUR", "1", "H87", "VAT", "S", "19.00", "", "21.01", "EUR", "", "")

' remise de 20 % sur les lignes 1 et 2 (base 84.04) – BG-20
alo.AddTradeAllowanceCharge(False, "84.04", "EUR", "16.81", "EUR", "VAT", "S", "19.00", "Discount", "20", "95")

' détail de la TVA : base = 105.05 - 16.81 = 88.24 (PAS 105.05)
alo.AddTradeTax("16.77", "EUR", "88.24", "EUR", "VAT", "S", "19.00")

' totaux : lignes, TTC, à payer, net, taxe, remises, payé, arrondi, frais
alo.WriteTotals("105.05", "105.01", "105.00", "88.24", "16.77", "16.81", "0.00", "-0.01", "0.00")

Le troisième paramètre de AddTradeTax est la base d’imposition (BT-116), le premier le montant de la taxe (BT-117). Nous avons généré les deux variantes avec le SDK et les avons contrôlées avec le validateur KoSIT (configuration XRechnung 3.0.2) : avec 105,05 comme base, il signale exactement BR-CO-17, BR-S-08 et BR-S-09 ; avec 88,24, la facture est acceptée sans erreur ni avertissement (état au 15 octobre 2026).

Plusieurs taux de TVA

La règle s’applique par taux de TVA : un appel AddTradeTax distinct pour chaque taux, base = lignes à ce taux − remises à ce taux + frais à ce taux. Une remise ou des frais au niveau du document doivent donc toujours avoir une catégorie et un taux de TVA (voir remises et frais avec pourcentage et code motif, en allemand). La somme de toutes les bases donne le montant total hors TVA (BT-109), la somme de tous les montants de taxe le montant total de la TVA (BT-110).

Erreurs apparentées

  • BR-CO-10 : la somme des lignes (BT-106) doit être calculée à partir des montants nets des lignes arrondis – et non à partir de prix non arrondis.
  • BR-CO-15 / BR-CO-16 : l’arrondi ne porte que sur le montant à payer, jamais sur le montant TTC : BR-CO-15 et BR-CO-16 pour le montant d’arrondi.
  • Les remises se placent dans une remise au niveau du document (BG-20), pas dans le montant d’arrondi.

Contrôler votre facture : comment valider ma XRechnung avant de l’envoyer ?

Questions fréquentes

Que signifie BR-S-08 ?

La base d’imposition de la catégorie de TVA S (BT-116) doit être égale à la somme des montants nets des lignes à ce taux, moins les remises, plus les frais à ce taux.

Que signifient BR-S-09 et BR-CO-17 ?

Le montant de taxe du détail (BT-117) doit être égal à la base d’imposition (BT-116) × taux de TVA, arrondi à 2 décimales. Si la base est fausse, la taxe ne correspond plus – c’est pourquoi ces messages apparaissent généralement avec BR-S-08.

La base d’imposition est-elle la somme des lignes ou le montant après remise ?

Le montant après remises (et après frais). Avec un seul taux de TVA, elle est égale au montant total hors TVA de la facture (BT-109).

Quel paramètre d’AddTradeTax correspond à la base d’imposition ?

Le troisième paramètre (BasisAmount, BT-116). Le premier paramètre est le montant de la taxe (CalculatedAmount, BT-117).

Termes métier dans cet article : BT-116 BT-117 BT-92 BT-106 BT-107 BT-109 BT-110 BT-112 BT-114 BT-115 BT-119 BG-20 BG-23