# PEPPOL-EN16931-R046 Le prix net de l’article doit être égal au prix brut diminué de la remise sur prix

Selon la règle Peppol PEPPOL-EN16931-R046, lorsqu’une ligne de facture indique un prix brut dans BT-148 (cbc:BaseAmount) et une remise sur prix dans BT-147 (cbc:Amount), le prix net dans BT-146 (cbc:PriceAmount) doit respecter l’égalité exacte : prix net = prix brut − remise sur prix. La comparaison se fait sans tolérance d’arrondi : calculez le prix net avec le même nombre de décimales que le prix brut et la remise.

## Description du problème

> **ERREUR**: Règle Peppol BIS Billing 3.0 (OpenPeppol)

## Contexte et importance

Tout écart entre prix brut, remise unitaire et prix net déclenche PEPPOL-EN16931-R046. Le contrôle n’admet aucune tolérance d’arrondi : un prix net arrondi à 2 décimales échoue déjà lorsque le prix brut et la remise en comptent 4. L’erreur apparaît aussi lorsqu’une remise est exportée dans cbc:Amount mais que le prix net reste égal au prix brut.

## Solution

Dans le calcul de prix de votre ERP, calculez le prix net unitaire comme le prix brut diminué de la remise unitaire, avec la même précision décimale pour les trois valeurs. En UBL 2.1, dans <cac:Price>, vérifiez que <cbc:PriceAmount> est exactement égal à <cac:AllowanceCharge><cbc:BaseAmount> diminué de <cbc:Amount>. Si vous n’indiquez pas de prix brut, omettez cbc:BaseAmount : R046 n’est alors pas évaluée.

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

## Exemples valides

- Prix brut BT-148 = 100.00 EUR, Remise sur prix BT-147 = 20.00 EUR, Prix net BT-146 = 80.00 EUR
- Prix brut BT-148 = 50.00 EUR, Remise sur prix BT-147 = 5.00 EUR, Prix net BT-146 = 45.00 EUR

## Exemples invalides

- Prix brut 100.00 EUR moins remise 20.00 EUR exporté avec Prix net = 85.00 EUR (Erreur de calcul)
- Remise déclarée à 10.00 EUR mais le Prix net est égal au Prix brut sans déduction

## Exemples de code

### XML valide
```
<cac:Price>
  <cbc:PriceAmount currencyID="EUR">80.00</cbc:PriceAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">20.00</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">100.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
</cac:Price>
```

### XML invalide
```
<cac:Price>
  <cbc:PriceAmount currencyID="EUR">85.00</cbc:PriceAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">20.00</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">100.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
</cac:Price>
```

## Champs concernés

- [BT-146 Prix net de l’article](/resources/xrechnung/bt-146-item-net-price)
- [BT-148 Prix brut de l’article](/resources/xrechnung/bt-148-item-gross-price)
- [BT-147 Remise sur le prix de l’article](/resources/xrechnung/bt-147-item-price-discount)
- [BG-29 Détails du prix](/resources/xrechnung/bt-146-item-net-price)

## Règles associées

- [BR-24](/resources/kosit-validator-errors/br-24-invoice-line-net-amount-must-be-present)
- [PEPPOL-EN16931-R120](/resources/kosit-validator-errors/peppol-en16931-r120-line-net-amount-formula)

## 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-peppol/)
- [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.
