On this page
The short answer
BR-IC-08 fails when the cbc:TaxableAmount of the K breakdown differs from the intra-community content of the document: K line net amounts, plus root-level K charges, minus root-level K allowances. The recorded example sends 25.00, the line alone, and leaves out the 6.00 freight charge in K; the correct figure is 31.00.
Rebuild the breakdown from the same allowances and charges that already feed the total without VAT, which in the example is 31.00 as well.
What the rule checks
For each cac:TaxCategory with cbc:ID of K and scheme VAT in the root cac:TaxTotal, the rule compares its cac:TaxSubtotal/cbc:TaxableAmount with a sum over the whole document and reports at that tax category.
Lines count when their item category is K, and root-level cac:AllowanceCharge elements when their cac:TaxCategory is K; the rates they carry play no part. The freight at 19, for instance, still counted towards 31.00 when tried, and only BR-IC-07 objected.
The match must be exact. When tried, 31.01 failed, where the Standard rated rule BR-S-08 would let a difference under 1.00 pass.
The monetary totals are not part of the comparison. The failing invoice keeps a total without VAT of 31.00, correct under BR-CO-13, and nothing is reported about it.
Several K breakdowns are each measured against the full sum. When tried, one breakdown of 25.00 for the line and another of 6.00 for the freight both failed this rule, and BR-IC-01 objected to there being two.
| Term | Meaning | UBL element |
|---|---|---|
| BT-116 | VAT category taxable amount | cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount |
| BT-118 | VAT category code | cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID |
| BT-131 | Invoice line net amount | cac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note) |
| BT-99 | Document level charge amount | cac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount |
| BT-92 | Document level allowance amount | cac:AllowanceCharge[cbc:ChargeIndicator = false]/cbc:Amount |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- The breakdown is built from the lines only, and freight or packaging added at document level never reaches it, as in the recorded example.
- The charge is coded
Kbut grouped into another breakdown, because the grouping uses the charge's tax code rather than its category. - An intra-community discount is subtracted from the total without VAT but not from the
Kbreakdown. - The taxable amount is taken from the order, and fees added at invoicing are missed.
How to fix it
- Add up
cbc:LineExtensionAmountof each line whosecac:Item/cac:ClassifiedTaxCategory/cbc:IDisK. - Add the amounts of root-level charges in category
Kand subtract the amounts of root-level allowances in categoryK. Line-level allowances and charges are already in the line amounts. - Write the result to the
cbc:TaxableAmountof the singleKcac:TaxSubtotal: 25.00 + 6.00 = 31.00 in the recorded example. The tax amount stays 0.00. - Build every breakdown from the same list of lines, allowances and charges that produces
cbc:TaxExclusiveAmount, so the two cannot drift apart.
The recorded example has one intra-community line and one freight charge in K, and no allowance.
Intra-community line net amount: 25.00 Freight charge in K: + 6.00 Allowances in K: none Expected taxable amount: 25.00 + 6.00 = 31.00 Sent: 25.00, which leaves out the freight, so the rule fails
Validate your corrected invoice
Before and after
These are fragments, not complete documents. The complete synthetic documents they come from are linked below.
Fragment of the failing invoice: a freight charge of 6.00 in K, and a K taxable amount of 25.00
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Freight to Berlin</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="GBP">6.00</cbc:Amount>
<!-- tax category K at 0 omitted from this fragment -->
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">25.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>K</cbc:ID>
<!-- rate 0, VATEX-EU-IC, reason text and tax scheme VAT omitted from this fragment -->
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="GBP">31.00</cbc:TaxExclusiveAmount>
<!-- other totals omitted from this fragment -->
</cac:LegalMonetaryTotal>Fragment of the corrected invoice: 25.00 + 6.00 = 31.00 in the K breakdown
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">31.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>K</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReasonCode>VATEX-EU-IC</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Intra-community supply</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>The K taxable amount is 25.00 in the failing invoice and 31.00 in the corrected one; the freight charge, the line and the monetary totals are identical in both. The failing document reports only BR-IC-08.
What the validator reported
- The failing invoice reports BR-IC-08. The corrected document passes every layer with no findings.Download the failing XMLDownload the corrected XML
Recorded on phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, the engine behind the free validator, using synthetic data. A recorded result is regression evidence for these documents; it is not a certification.
Where it applies
- Applies to UBL
InvoiceandCreditNote, summingcac:CreditNoteLineamounts in a credit note. The failing invoice converted to a credit note reported the same finding when tried. - Reported by the EN 16931 layer at each
Kbreakdown whose taxable amount is off. - The
Ktax amount beside it must be 0 underBR-IC-09, and only oneKbreakdown is allowed underBR-IC-01.
Related rules
- BR-IC-01 allows one K breakdown only, so the whole K sum belongs in a single taxable amount
- BR-AE-08 is the same sum for the reverse-charge breakdown
- BR-S-08 is the Standard rated version, which groups by rate and has a tolerance
- BR-CO-13 checks the total without VAT built from the same lines, allowances and charges
- Browse every rule in the reference
- Background: Understanding EN 16931 validation errors
Scope and source
Written for Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, as applied to UBL 2.1 Invoice and CreditNote documents. Other profiles, syntaxes and releases can define this identifier differently. Guidance version 2026-09-28.1: source checked 2026-09-28, explanation last updated 2026-09-28.
The official definition of BR-IC-08 carries the normative wording and test. This page is our explanation of it, not a copy.
Guidance does not change the engine verdict. Fixing this finding does not mean the document passes every layer, and validation does not certify legal or tax compliance or transmit a document over Peppol.

