BR-CO-17: VAT category tax amount (BT-117) does not match taxable amount and rate
Official message
[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.
[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.
[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.
- Severity
- Error The invoice is invalid and may be rejected by the recipient.
- Applies to
- EN 16931 (CII), EN 16931 (UBL), Factur-X / ZUGFeRD EN 16931
- Affected fields
- BT-117, BT-116, BT-119
What does this mean?
The tax amount of a VAT category (BT-117) shall result from the VAT category taxable amount (BT-116) and the VAT category rate (BT-119). The value in BT-117 deviates too much from it.
Formula: BT-117 = BT-116 × (BT-119 / 100), rounded to two decimals. Example: 1000.00 × 19 / 100 = 190.00. The official check tolerates a deviation of up to one currency unit (e.g. 1.00 EUR). If the rate rounded to whole units is 0 or missing, the tax amount rounded to whole units must be 0.
Typical causes
The tax amount was calculated with a different rate than the one stated in BT-119, e.g. 7% instead of 19%.
The taxable amount (BT-116) was changed afterwards without recalculating the tax amount.
A tax amount was stated for a category with rate 0 (e.g. exempt or reverse charge).
How to fix the error
Calculate BT-117 for every category as BT-116 × BT-119 / 100 and round it to two decimals.
Check that BT-116 equals the sum of the lines and allowances/charges of this category and that BT-119 is the correct rate.
Then recalculate the invoice total VAT amount (BT-110) (BR-CO-14).
CII: ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax with ram:BasisAmount, ram:RateApplicablePercent and ram:CalculatedAmount, UBL: cac:TaxTotal/cac:TaxSubtotal with cbc:TaxableAmount, cac:TaxCategory/cbc:Percent and cbc:TaxAmount.
In E-Rechnungsfreund
In the invoice form, the VAT breakdown (BG-23) is built from VAT category and rate of the lines and allowances/charges when the XML is generated; the tax amount per category is calculated from taxable amount and rate and rounded to two decimals. The values in section "Steueraufstellung (BG-23)" (VAT breakdown) are not used for this. Check the rates of the lines and validate the invoice again.
Example
Wrong
<ram:ApplicableTradeTax>
<ram:CalculatedAmount>70.00</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>1000.00</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
Correct
<ram:ApplicableTradeTax>
<ram:CalculatedAmount>190.00</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>1000.00</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
For developers: test expression per syntax
EN 16931 (CII) (CII)
Context: //ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax
(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))
EN 16931 (UBL) (UBL)
Context: cac:TaxTotal/cac:TaxSubtotal
(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))
Factur-X / ZUGFeRD EN 16931 (CII)
Technical ID in the source: FX-SCH-A-000052
Context: //ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax
(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))
Related validation rules
- BR-CO-03: Value added tax point date (BT-7) and tax point date code (BT-8) are mutually exclusive
- BR-CO-04: Invoiced item VAT category code (BT-151) is missing
- BR-CO-05: Document level allowance reason code (BT-98) and allowance reason (BT-97) must indicate the same type
- BR-CO-06: Document level charge reason code (BT-105) and charge reason (BT-104) must indicate the same type
- BR-CO-07: Invoice line allowance reason code (BT-140) and allowance reason (BT-139) must indicate the same type
- BR-CO-08: Invoice line charge reason code (BT-145) and charge reason (BT-144) must indicate the same type
Frequently asked questions
Why is a deviation of a few cents not reported?
The official check tolerates a deviation of up to one currency unit, although the rule text requires rounding to two decimals. The correct value is the one rounded to two decimals; small deviations may also show up in the recipient's accounting.
Last updated:
Explanation of the validation rule, not legal or tax advice.