# BR-IC-07: Correct the VAT rate on an intra-community document charge to 0

A document-level charge in category `K`, such as freight on goods sent to another member state, must carry a VAT rate of 0.

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

## The short answer

`BR-IC-07` fails when a charge, `cbc:ChargeIndicator` of `true`, has tax category `K` and a rate that is not 0. The freight to Berlin in the recorded example is 6.00 at 19, the rate on a German carrier's invoice; write `0` instead.

Freight the seller charges for delivering its own goods is part of the price of the intra-community supply, so it takes category `K` and no VAT, like the goods.

## What the rule checks

The rule tests each `cac:TaxCategory` under a charge whose `cbc:ID` is `K` and whose scheme is `VAT`, at document level or inside a line, and reports at that element. When tried, a `K` charge at 19 inside the line was reported under this rule, beside the warning `UBL-CR-558`. `K` allowances fall under `BR-IC-06`.

Any rate other than zero fails. When tried, the freight at 20 failed this rule alone, just as 19 did.

Recoding the freight as Standard rated is not a quiet fix. When tried, changing the charge to `S` at 20 without a Standard rated breakdown reported `BR-S-01`, and `BR-IC-08` because the `K` taxable amount of 31.00 no longer matched.

The rate does not change the sum. With the freight at 19, the `K` taxable amount of 31.00 still satisfied `BR-IC-08`.

| Term | Meaning | UBL element |
|---|---|---|
| BT-102 | Document level charge VAT category code | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:ID` |
| BT-103 | Document level charge VAT rate | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cac:TaxCategory/cbc:Percent` |

## How an integration ends up here

Possible causes, from the shape of the rule rather than from measured usage:

- The freight rate is copied from the carrier's invoice, which was issued in Germany at the German rate.
- Freight is set up as a separate domestic service at the seller's Standard rate, and only its category is switched to `K`.
- Charges are generated by a shipping module that does not know the VAT rules applied to the lines.

## How to fix it

1. Confirm the charge is the seller's own charge for delivering the `K` goods. If it is, it stays in category `K`.
2. Set `cbc:Percent` in the charge's `cac:TaxCategory` to `0`.
3. Keep the freight amount of 6.00 inside the `K` taxable amount; the corrected breakdown shows 31.00, the line plus the freight.
4. Derive the rate of a document-level charge from its VAT category rather than from purchase data, so the carrier's rate never reaches the sales 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: freight in category K at 19

```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>
  <cac:TaxCategory>
    <cbc:ID>K</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
```

Fragment of the corrected invoice: the same freight charge at 0

```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>
  <cac:TaxCategory>
    <cbc:ID>K</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
```

The freight charge has `cbc:Percent` `19` in the failing invoice and `0` in the corrected one; its amount and category are the same. The failing document reports only `BR-IC-07`.

### What the validator reported

- The failing invoice reports **BR-IC-07**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-IC-07-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`. The failing invoice converted to a credit note reported the same finding when tried.
- Reported by the EN 16931 layer as a fatal finding for each `K` charge with a non-zero rate.
- A `K` charge also needs VAT identifiers for both parties under `BR-IC-04`. The reverse-charge equivalent is `BR-AE-07`.

## Related rules

- [BR-IC-06 applies the same rate of 0 to a K document allowance](https://ironfang.com/docs/finance/rules/BR-IC-06.md)
- [BR-AE-07 is the reverse-charge counterpart for document charges](https://ironfang.com/docs/finance/rules/BR-AE-07.md)
- [BR-IC-08 counts this freight into the K taxable amount](https://ironfang.com/docs/finance/rules/BR-IC-08.md)
- [BR-IC-04 requires VAT identifiers for both parties whenever a K charge is present](https://ironfang.com/docs/finance/rules/BR-IC-04.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-07](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-IC-07/) 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-07)
- [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
