# BR-28 Le prix brut de l’article ne doit pas être négatif

Le prix brut de l’article (BT-148), soit le prix unitaire avant toute remise sur prix, ne doit pas être négatif.

## Description du problème

> **ERREUR**: Règle métier de la norme EN 16931 (CEN)

## Contexte et importance

Il s’agit d’une règle de base de la norme EN 16931 qui contrôle une valeur. L’erreur apparaît surtout lorsque le prix brut (BT-148) est calculé à partir d’une remise mal signée ou lorsqu’un montant de remise est placé par erreur dans cbc:BaseAmount. Le prix brut est le prix catalogue avant remise sur prix : il reste positif ou nul, et la remise sur prix (BT-147) se déclare séparément dans cbc:Amount. En Peppol, PEPPOL-EN16931-R046 vérifie que le prix net est égal au prix brut diminué de cette remise.

## Solution

Indiquez le prix brut dans cac:Price/cac:AllowanceCharge/cbc:BaseAmount (CII : ram:GrossPriceProductTradePrice/ram:ChargeAmount) avec une valeur positive ou nulle, et indiquez la remise sur prix (BT-147) dans cac:Price/cac:AllowanceCharge/cbc:Amount.

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

## Exemples valides

- BT-148 = 15.00 avec une remise sur prix de 2.50

## Exemples invalides

- BT-148 = -3.00 — prix brut négatif rejeté

## Exemples de code

### XML valide
```
<cac:Price>
  <cbc:PriceAmount currencyID="EUR">12.50</cbc:PriceAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">2.50</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">15.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
</cac:Price>
```

### XML invalide
```
<cac:Price>
  <cbc:PriceAmount currencyID="EUR">12.50</cbc:PriceAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">2.50</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">-3.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
</cac:Price>
```

## Champs concernés

- [BT-148 Prix brut de l’article](/resources/xrechnung/bt-148-item-gross-price)

## Règles associées

- [BR-27](/resources/kosit-validator-errors/br-27-item-net-price-not-negative)

## 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.
