BR-47Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118).

Official rule text

Every VAT breakdown block must be defined through a VAT category code (BT-118) — one of the ten BR-CL-17 permits. Those are S, Z, E, AE, K, G, O, L, M and B.

Severity
Error
Applies to
CII, UBL
Rule set
v2026-08-31
Checked on

Written and checked against the official KoSIT rule set by Dmytro Yalanskyi, NormAPI.

Why does BR-47 happen?

Systems distinguish rates by percentage and need no category for it. 0% then stands for exempt, intra-community and reverse charge alike, though those are three different categories.

What the validator checks

The expression the official KoSIT rule set evaluates — not paraphrased, but read from the Schematron file it ships. UBL and CII address different document trees, so the same rule reads differently in each.

UBL
exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID)
CII
(.[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)

Source: rule set v2026-08-31

How do you fix BR-47?

Set BT-118 in cac:TaxSubtotal/cac:TaxCategory/cbc:ID in UBL, ram:ApplicableTradeTax/ram:CategoryCode in CII. It is the same code as on the line, see BR-CO-04.

In the XML

A UBL fragment. The CII path is named above — same change, different element names.

Fails
<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>
Fixed
<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>

Related rules

NormAPI provides technical validation, not tax or legal advice.