On this page
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
- Confirm the charge is the seller's own charge for delivering the
Kgoods. If it is, it stays in categoryK. - Set
cbc:Percentin the charge'scac:TaxCategoryto0. - Keep the freight amount of 6.00 inside the
Ktaxable amount; the corrected breakdown shows 31.00, the line plus the freight. - 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.
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: freight in category K at 19
<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
<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 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. 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
Kcharge with a non-zero rate. - A
Kcharge also needs VAT identifiers for both parties underBR-IC-04. The reverse-charge equivalent isBR-AE-07.
Related rules
- BR-IC-06 applies the same rate of 0 to a K document allowance
- BR-AE-07 is the reverse-charge counterpart for document charges
- BR-IC-08 counts this freight into the K taxable amount
- BR-IC-04 requires VAT identifiers for both parties whenever a K charge is present
- 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-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.

