Account
Nederlands

BR-CO-17: Btw-bedrag per categorie (BT-117) is niet grondslag maal tarief

EN 16931-kernregel · Fout · UBL, CII

StandaardEN 16931-1 (Europees semantisch model voor e-facturen)ErnstFout: de factuur wordt geweigerdSyntaxUBL, CIIBedrijfstermen
  • BT-116 VAT category taxable amount
  • BT-117 VAT category tax amount
  • BT-119 VAT category rate
Geldt voorElke EN 16931-factuur: Peppol BIS Billing 3.0, NLCIUS, XRechnung, ZUGFeRD 2.x / Factur-X (profielen EN 16931, EXTENDED, XRECHNUNG) en andere nationale CIUS.

Officiële regeltekst

[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.

De normatieve tekst is Engels en wordt ongewijzigd geciteerd.

Waarom deze fout optreedt

In elke btw-specificatie moet het btw-bedrag (BT-117) gelijk zijn aan het belastbare bedrag (BT-116) vermenigvuldigd met het tarief (BT-119) gedeeld door 100, afgerond op twee decimalen; de schematron accepteert een afwijking van minder dan 1.00 om afronding per regel toe te staan. Is het tarief 0, dan moet het btw-bedrag 0 zijn. De regel leest cac:TaxSubtotal/cbc:TaxAmount, cbc:TaxableAmount en cac:TaxCategory/cbc:Percent (UBL) of ram:ApplicableTradeTax/ram:CalculatedAmount, ram:BasisAmount en ram:RateApplicablePercent (CII). Hij slaat aan wanneer het percentage als breuk is geschreven (0.19), wanneer categorieën met verschillende tarieven in één subtotaal zijn samengevoegd, of wanneer de grondslag is gewijzigd nadat de btw was berekend.

Zo lost u het op

Formule: BT-117 = round(BT-116 x BT-119 / 100, 2). Schrijf het tarief als percentage (19, 7, 0), niet als 0.19. Maak één cac:TaxSubtotal (ram:ApplicableTradeTax) per combinatie van categoriecode en tarief, tel de bijbehorende nettoregelbedragen en kortingen/toeslagen op documentniveau op in cbc:TaxableAmount / ram:BasisAmount, en bereken cbc:TaxAmount / ram:CalculatedAmount over die grondslag. Voor de categorieën E, AE, K, G, O en Z is het tarief 0 en moet het btw-bedrag 0.00 zijn.

Voorbeeld (geldig)

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

Wat de validator controleert

Gecontroleerd element (context):

UBL

cac:TaxTotal/cac:TaxSubtotal

Test (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:ApplicableTradeTax

Test (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))

Automatisch herstellen

Deze fout kan automatisch worden hersteld: na uw bevestiging herberekent de checker totalen en btw uit de regelbedragen.

Factuur herstellen →

Dezelfde controle via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Gerelateerde regels

Veelgestelde vragen

Wat betekent BR-CO-17?

BR-CO-17 is een en 16931-kernregel: VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.

Wordt mijn factuur geweigerd vanwege BR-CO-17?

Ja. BR-CO-17 is "fataal"; validators (Peppol-accesspoints, KoSIT, KSeF) weigeren de factuur totdat de fout is opgelost.

Voor welke formaten geldt BR-CO-17?

Elke EN 16931-factuur: Peppol BIS Billing 3.0, NLCIUS, XRechnung, ZUGFeRD 2.x / Factur-X (profielen EN 16931, EXTENDED, XRECHNUNG) en andere nationale CIUS. Syntax: UBL en CII.

Bron: EN 16931-1:2017 schematron (CEN TC434, via Peppol BIS 3.0.20). Catalogus gegenereerd uit de officiële regelsets op 2026-10-15.