# BR-S-1 Une opération de catégorie S exige au moins une ventilation de TVA de catégorie S

Une facture qui contient une ligne (BG-25), une remise au niveau du document (BG-20) ou des frais au niveau du document (BG-21) dont le code de catégorie de TVA (BT-151, BT-95 ou BT-102) est « Taux normal » (S) doit contenir, dans la ventilation de TVA (BG-23), au moins un code de catégorie de TVA (BT-118) égal à « S ».

## Description du problème

> **ERREUR**: Règle EN 16931 sur la catégorie de TVA

> **Où BR-S-01 est contrôlée**
>
> Un validateur contrôle une facture électronique par étapes. D’abord, le fichier doit être un XML bien formé conforme au schéma UBL ou CII (XSD). Viennent ensuite les règles métier de l’EN 16931 : règles de base BR, calculs BR-CO, listes de codes BR-CL, décimales BR-DEC et règles par catégorie de TVA comme BR-S. Puis les règles nationales ou de réseau sélectionnées par BT-24 : BR-DE pour XRechnung, PEPPOL-EN16931 pour Peppol BIS Billing. Le rapport liste chaque règle en échec : une erreur signifie rejet, des avertissements seuls signifient toujours acceptation. BR-S-01 : règle de catégorie de TVA EN 16931, étape « Règles EN 16931 ».

## Contexte et importance

Une ligne de catégorie S sans ventilation correspondante laisse la base imposable non déclarée, et le montant total de TVA ne peut être rattaché à aucune catégorie. En pratique, l’erreur survient quand des frais au niveau du document, par exemple des frais de port, reçoivent la catégorie S alors que le logiciel ne génère la ventilation qu’à partir des lignes, ou quand le code de catégorie d’une ligne est modifié manuellement après la génération de la ventilation.

## Solution

Ajoutez, pour chaque taux utilisé (BT-119), une ventilation de TVA (UBL : cac:TaxTotal/cac:TaxSubtotal ; CII : ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax) avec BT-118 = « S », la base imposable et le montant de TVA correspondants.

- [Valider le XML](/fr/xrechnung-validator?source=resource&rule=BR-S-1)
- [Convertir la facture](/fr/pdf-to-xrechnung?source=resource&rule=BR-S-1)

## Exemples valides

- Ligne avec BT-151 = « S » et ventilation de TVA avec BT-118 = « S », BT-119 = 20
- Remise au niveau du document avec BT-95 = « S » et ventilation « S » correspondante

## Exemples invalides

- BT-151 = « S » mais la ventilation de TVA ne contient que des lignes « Z »
- Frais au niveau du document avec BT-102 = « S », sans ventilation « S »

## Exemples de code

### XML valide
```
<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</cbc:Percent>
      <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>
<cac:InvoiceLine>
  <cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>19</cbc:Percent>
      <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
    </cac:ClassifiedTaxCategory>
  </cac:Item>
</cac:InvoiceLine>
```

### XML invalide
```
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>Z</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>
<cac:InvoiceLine>
  <cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cac:ClassifiedTaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>19</cbc:Percent>
      <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
    </cac:ClassifiedTaxCategory>
  </cac:Item>
</cac:InvoiceLine>
```

## Champs concernés

- [BT-118 Code de catégorie de TVA](/resources/xrechnung/bt-118-vat-category-code)
- [BT-151 Code de catégorie de TVA de l’article facturé](/resources/xrechnung/bt-151-invoice-line-vat-category-code)
- [BT-95 Code de catégorie de TVA de la remise au niveau du document](/resources/xrechnung/bt-95-document-level-allowance-vat-category-code)
- [BT-102 Code de catégorie de TVA des frais au niveau du document](/resources/xrechnung/bt-102-document-level-charge-vat-category-code)

## Règles associées

- [BR-CO-4](/resources/kosit-validator-errors/br-co-4-each-invoice-line-must-have-vat-category-code)
- [BR-S-5](/resources/kosit-validator-errors/br-s-05-standard-rated-line-vat-rate-must-be-positive)
- [BR-S-8](/resources/kosit-validator-errors/br-s-08-standard-rated-taxable-amount-must-match-lines-charges-allowances)

## Outils de validation

- [Validateur KoSIT officiel](https://github.com/itplr-kosit/validator): Exécutez le validateur officiel du KoSIT avec la configuration XRechnung pour contrôler les règles EN 16931 et XRechnung.
- [Convertir un PDF en XRechnung](/pdf-to-xrechnung): Repérez les erreurs de validation pendant la conversion et vérifiez chaque correction.

## Ressources associées

- [Spécification officielle](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/)
- [Suite de tests](https://github.com/itplr-kosit/xrechnung-testsuite)
- [Toutes les erreurs de validation](/resources/kosit-validator-errors): Vue d’ensemble des règles de validation EN 16931, XRechnung et Peppol expliquées ici.
