# PEPPOL-EN16931-R120 Le montant net de ligne de facture doit être égal à la quantité multipliée par le prix net ajusté des remises et frais de ligne

Conformément à la règle Peppol PEPPOL-EN16931-R120, le montant net de la ligne dans BT-131 (LineExtensionAmount) doit correspondre à la formule : montant net = quantité facturée × (prix net ÷ quantité de base) + total des frais de ligne − total des remises de ligne. Le Schematron Peppol accepte un écart de ±0,02 pour absorber les arrondis. Les causes fréquentes d’erreur sont la perte des remises de ligne lors de la conversion en XML, l’arrondi prématuré des prix unitaires ou l’omission de la quantité de base (BT-149).

## Description du problème

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

## Contexte et importance

PEPPOL-EN16931-R120 échoue dès que la valeur BT-131 exportée s’écarte de plus de 0,02 du montant recalculé à partir de la quantité, du prix net, de la quantité de base et des remises et frais de ligne. Causes typiques : une remise de ligne perdue lors de la conversion, un prix unitaire arrondi trop tôt à 2 décimales ou une quantité de base (BT-149) non prise en compte.

## Solution

Dans votre ERP ou votre chaîne de conversion, conservez la précision décimale des prix unitaires et intégrez toutes les remises et frais de ligne dans le calcul de BT-131 avant l’arrondi final à 2 décimales ; divisez par la quantité de base (BT-149) si elle est renseignée. En UBL 2.1, renseignez <cbc:LineExtensionAmount currencyID="EUR">190.00</cbc:LineExtensionAmount> pour une quantité 2 à 100.00 avec 10.00 de remise.

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

## Exemples valides

- Quantité 2 x Prix unitaire 100.00 EUR moins Remise de ligne 10.00 EUR donne BT-131 = 190.00 EUR
- Quantité 50 x Prix unitaire 1.2550 EUR (62.75 EUR) donne BT-131 = 62.75 EUR

## Exemples invalides

- Quantité 2 x Prix 100.00 EUR moins Remise 10.00 EUR = 190.00 EUR, mais BT-131 est exporté à 200.00 EUR car la remise a été oubliée dans le calcul
- La formule donne 190.00 EUR mais BT-131 est exporté à 189.90 EUR en raison d’un mauvais arrondi

## Exemples de code

### XML valide
```
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="H87">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="EUR">190.00</cbc:LineExtensionAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">10.00</cbc:Amount>
  </cac:AllowanceCharge>
  <cac:Price>
    <cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
  </cac:Price>
</cac:InvoiceLine>
```

### XML invalide
```
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="H87">2</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="EUR">200.00</cbc:LineExtensionAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">10.00</cbc:Amount>
  </cac:AllowanceCharge>
  <cac:Price>
    <cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
  </cac:Price>
</cac:InvoiceLine>
```

## Champs concernés

- [BT-131 Montant net de ligne de facture](/resources/xrechnung/bt-131-invoice-line-net-amount)
- [BT-129 Quantité facturée](/resources/xrechnung/bt-129-invoice-line-quantity)
- [BT-146 Prix net de l’article](/resources/xrechnung/bt-146-item-net-price)
- [BG-25 Ligne de facture](/resources/xrechnung/bt-126-invoice-line-identifier)

## Règles associées

- [BR-22](/resources/kosit-validator-errors/br-22-invoice-line-quantity-must-be-present)
- [BR-24](/resources/kosit-validator-errors/br-24-invoice-line-net-amount-must-be-present)
- [PEPPOL-EN16931-R046](/resources/kosit-validator-errors/peppol-en16931-r046-item-net-price-math)

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