BT-116VAT category taxable amountBT-117VAT category tax amountBT-119VAT category rate
Texte officiel de la règle
[BR-CO-17] VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.
Le texte normatif est en anglais ; il est cité tel quel.
Pourquoi cette erreur apparaît
Dans chaque ventilation de la TVA, le montant de taxe (BT-117) doit être égal à la base d'imposition (BT-116) multipliée par le taux (BT-119) et divisée par 100, arrondi à deux décimales ; le schematron tolère un écart inférieur à 1.00 pour tenir compte de l'arrondi par ligne. Si le taux est 0, le montant de taxe doit être 0. La règle lit cac:TaxSubtotal/cbc:TaxAmount, cbc:TaxableAmount et cac:TaxCategory/cbc:Percent (UBL) ou ram:ApplicableTradeTax/ram:CalculatedAmount, ram:BasisAmount et ram:RateApplicablePercent (CII). Elle se déclenche lorsque le pourcentage est écrit sous forme de fraction (0.19), lorsque des catégories à taux différents sont regroupées dans un même sous-total, ou lorsque la base a été modifiée après le calcul de la taxe.
Comment corriger
Formule : BT-117 = round(BT-116 x BT-119 / 100, 2). Écrivez le taux sous forme de pourcentage (19, 7, 0) et non 0.19. Créez un cac:TaxSubtotal (ram:ApplicableTradeTax) par combinaison de code de catégorie et de taux, additionnez les montants nets de ligne ainsi que les remises et majorations de niveau document correspondants dans cbc:TaxableAmount / ram:BasisAmount, et calculez cbc:TaxAmount / ram:CalculatedAmount à partir de cette base. Pour les catégories E, AE, K, G, O et Z, le taux est 0 et le montant de taxe doit être 0.00.
Exemple (valide)
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">245.90</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">46.72</cbc:TaxAmount>
<cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
</cac:TaxSubtotal>
Ce que le validateur vérifie
Élément vérifié (contexte):
UBL
cac:TaxTotal/cac:TaxSubtotalTest (XPath):
(round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) = 0 and (round(xs:decimal(cbc:TaxAmount)) = 0)) or (round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) != 0 and ((abs(xs:decimal(cbc:TaxAmount)) - 1 < round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 ) and (abs(xs:decimal(cbc:TaxAmount)) + 1 > round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 ))) or (not(exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent))) and (round(xs:decimal(cbc:TaxAmount)) = 0))CII
//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTaxTest (XPath):
(round(.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent)) = 0 and (round(xs:decimal(ram:CalculatedAmount)) = 0)) or (round(.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent)) != 0 and ((abs(xs:decimal(ram:CalculatedAmount)) - 1 <= round(abs(xs:decimal(ram:BasisAmount)) * (.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent) div 100) * 10 * 10) div 100 ) and (abs(xs:decimal(ram:CalculatedAmount)) + 1 >= round(abs(xs:decimal(ram:BasisAmount)) * (.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent) div 100) * 10 * 10) div 100 ))) or (not(exists(.[normalize-space(upper-case(ram:TypeCode))='VAT']/xs:decimal(ram:RateApplicablePercent))) and (round(xs:decimal(ram:CalculatedAmount)) = 0))
Corriger automatiquement
Cette erreur peut être corrigée automatiquement : après confirmation, le vérificateur recalcule les totaux et la TVA à partir des lignes.
La même vérification par API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validateRègles liées
BR-AF-09Le montant de TVA d'une ventilation de catégorie « IGIC »…BR-AG-09Le montant de TVA d'une ventilation de catégorie « IPSI »…BR-S-09La TVA au taux normal (BT-117) n'est pas égale à la base fois le tauxBR-AF-08Pour chaque taux de TVA distinct de catégorie « IGIC »,…BR-AG-08Pour chaque taux de TVA distinct de catégorie « IPSI »,…BR-S-08La base au taux normal (BT-116) ne correspond pas aux lignesBR-CO-14Le montant total de TVA (BT-110) ne correspond pas à la ventilationBR-45Chaque ventilation de TVA doit avoir une base imposable par catégorie
Questions fréquentes
Que signifie BR-CO-17 ?
BR-CO-17 est une règle de base en 16931 : VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.
Ma facture sera-t-elle rejetée à cause de BR-CO-17 ?
Oui. BR-CO-17 est classée « bloquante » ; les validateurs (plateformes agréées, points d'accès Peppol, KoSIT, KSeF) rejettent la facture tant qu'elle n'est pas corrigée.
À quels formats s'applique BR-CO-17 ?
Toute facture EN 16931 : Factur-X / ZUGFeRD 2.x (profils EN 16931, EXTENDED, XRECHNUNG), XRechnung, Peppol BIS Billing 3.0 et les CIUS nationales. Syntaxe : UBL et CII.
Source: EN 16931-1:2017 schematron (CEN TC434, via Peppol BIS 3.0.20). Catalogue généré à partir des jeux de règles officiels le 2026-10-15.