# BR-47 Btw-categoriecode moet in elke btw-uitsplitsing aanwezig zijn

Volgens EN 16931-regel BR-47 moet elke btw-uitsplitsing (BG-23) een btw-categoriecode (BT-118) bevatten uit de door de norm toegestane deelverzameling van UNTDID 5305 (BR-CL-17 in UBL / BR-CL-18 in CII): "S" (standaardtarief, ook voor verlaagde tarieven zoals 9%), "Z" (nultarief), "E" (vrijgesteld), "AE" (btw verlegd), "K" (intracommunautaire levering), "G" (uitvoer buiten de EU), "O" (niet onderworpen aan btw), "L" (IGIC, Canarische Eilanden), "M" (IPSI, Ceuta en Melilla) of "B" (split payment, alleen Italië). Per categorie en tarief staat er één uitsplitsing met grondslag (BT-116) en btw-bedrag (BT-117).

## Probleembeschrijving

> **FOUT**: Bedrijfsregel van EN 16931 (CEN)

> **Waar BR-47 wordt gecontroleerd**
>
> Een validator controleert een e-factuur in stappen. Eerst moet het bestand goed gevormde XML zijn die past bij het UBL- of CII-schema (XSD). Dan volgen de bedrijfsregels van EN 16931: BR-kernregels, BR-CO-berekeningen, BR-CL-codelijsten, BR-DEC-decimalen en regels per btw-categorie zoals BR-S. Daarna komen de nationale of netwerkregels die BT-24 kiest: BR-DE voor XRechnung, PEPPOL-EN16931 voor Peppol BIS Billing. Het rapport noemt elke geschonden regel: één fout betekent afwijzen, alleen waarschuwingen betekenen nog steeds accepteren. BR-47: kernregel van EN 16931, gemeld in de stap “EN 16931-regels”.

## Context en betekenis

Dit is een kernregel van EN 16931. Zonder BT-118 kan de ontvanger de grondslag en het btw-bedrag niet aan een btw-categorie toewijzen, en kunnen de categorieregels (BR-S, BR-AE, BR-E enz.) niet worden toegepast. De fout ontstaat vaak als een export alleen het percentage in cac:TaxCategory schrijft. Een code buiten de toegestane lijst, zoals "AA" voor het verlaagde tarief, geeft geen BR-47 maar faalt op BR-CL-17 (UBL) of BR-CL-18 (CII).

## Oplossing

Zorg in de btw-instellingen van uw ERP dat elke btw-uitsplitsing in TaxTotal een btw-categoriecode bevat. Voeg in UBL 2.1 onder <cac:TaxTotal> het element <cac:TaxSubtotal><cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory></cac:TaxSubtotal> toe. Voeg in CII <ram:CategoryCode> toe onder <ram:ApplicableHeaderTradeSettlement><ram:ApplicableTradeTax>.

- [XML valideren](/nl/xrechnung-validator?source=resource&rule=BR-47)
- [Factuur converteren](/nl/pdf-to-xrechnung?source=resource&rule=BR-47)

## Geldige voorbeelden

- Btw-uitsplitsing BG-23 met BT-118 = "S" (standaardtarief 19%)
- Btw-uitsplitsing BG-23 met BT-118 = "AE" (btw verlegd)

## Ongeldige voorbeelden

- cac:TaxSubtotal bevat grondslag en btw-bedrag maar laat cbc:ID in cac:TaxCategory weg
- CII: ram:ApplicableTradeTax met ram:TypeCode VAT, ram:BasisAmount en ram:CalculatedAmount maar zonder ram:CategoryCode

## Codevoorbeelden

### Geldig XML
```
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="EUR">19.00</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="EUR">19.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>19.00</cbc:Percent>
      <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>
```

### Ongeldig XML
```
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="EUR">19.00</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="EUR">19.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:Percent>19.00</cbc:Percent>
      <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>
```

## Betrokken velden

- [BT-118 Btw-categoriecode](/resources/xrechnung/bt-118-vat-category-code)
- [BG-23 Btw-uitsplitsing](/resources/xrechnung/bt-116-vat-category-taxable-amount)
- [BT-116 Belastbaar bedrag per categorie](/resources/xrechnung/bt-116-vat-category-taxable-amount)
- [BT-117 Btw-bedrag per categorie](/resources/xrechnung/bt-117-vat-category-tax-amount)

## Gerelateerde regels

- [BR-CO-17](/resources/kosit-validator-errors/br-co-17-vat-category-tax-amount-must-match-base-times-rate)
- [BR-48](/resources/kosit-validator-errors/br-48-vat-breakdown-category-rate-required)
- [BR-CL-17](/resources/kosit-validator-errors/br-cl-17-uncl5305-document-tax-category)
- [BR-CL-18](/resources/kosit-validator-errors/br-cl-18-uncl5305-line-tax-category)

## Validatietools

- [Officiële KoSIT-validator](https://github.com/itplr-kosit/validator): Draai de officiële KoSIT-validator met de XRechnung-configuratie om EN 16931- en XRechnung-regels te controleren.
- [PDF naar XRechnung converteren](/pdf-to-xrechnung): Vind validatiefouten tijdens de conversie en controleer elke correctie.

## Gerelateerde bronnen

- [Officiële specificatie](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/)
- [Testsuite](https://github.com/itplr-kosit/xrechnung-testsuite)
- [Alle validatiefouten](/resources/kosit-validator-errors): Overzicht van de hier uitgelegde validatieregels uit EN 16931, XRechnung en Peppol.
