# BR-IC-08: Include intra-community charges and allowances in the K taxable amount

The `K` VAT breakdown taxable amount must equal the `K` line net amounts plus `K` document charges minus `K` document allowances, with no tolerance.

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: VAT, Totals
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-IC-08/
- Explanation last updated: 2026-09-28

## 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 `K` but 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 `K` breakdown.
- The taxable amount is taken from the order, and fees added at invoicing are missed.

## How to fix it

1. Add up `cbc:LineExtensionAmount` of each line whose `cac:Item/cac:ClassifiedTaxCategory/cbc:ID` is `K`.
2. Add the amounts of root-level charges in category `K` and subtract the amounts of root-level allowances in category `K`. Line-level allowances and charges are already in the line amounts.
3. Write the result to the `cbc:TaxableAmount` of the single `K` `cac:TaxSubtotal`: 25.00 + 6.00 = 31.00 in the recorded example. The tax amount stays 0.00.
4. 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.

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

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

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

```xml
<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 XML](https://ironfang.com/finance/rule-examples/BR-IC-08-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/intra-community-freight-valid.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 `Invoice` and `CreditNote`, summing `cac:CreditNoteLine` amounts 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 `K` breakdown whose taxable amount is off.
- The `K` tax amount beside it must be 0 under `BR-IC-09`, and only one `K` breakdown is allowed under `BR-IC-01`.

## Related rules

- [BR-IC-01 allows one K breakdown only, so the whole K sum belongs in a single taxable amount](https://ironfang.com/docs/finance/rules/BR-IC-01.md)
- [BR-AE-08 is the same sum for the reverse-charge breakdown](https://ironfang.com/docs/finance/rules/BR-AE-08.md)
- [BR-S-08 is the Standard rated version, which groups by rate and has a tolerance](https://ironfang.com/docs/finance/rules/BR-S-08.md)
- [BR-CO-13 checks the total without VAT built from the same lines, allowances and charges](https://ironfang.com/docs/finance/rules/BR-CO-13.md)

## 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](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/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.

## Links

- [This rule as a web page](https://ironfang.com/docs/finance/rules/BR-IC-08)
- [Free Peppol invoice validator](https://ironfang.com/tools/peppol-validator)
- [Rule index](https://ironfang.com/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.com/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.com/mcp
