Le code d’erreur PEPPOL-EN16931-R046 / PEPPOL-EN16931-R044 signifie : le prix net n’est pas égal au prix brut moins la remise (R046), ou il y a un supplément au niveau du prix (R044).
Que signifie PEPPOL-EN16931-R046 / PEPPOL-EN16931-R044 ?
Le validateur affiche ce message (en anglais, comme dans les règles officielles) :
[PEPPOL-EN16931-R046]-Item net price MUST equal (Gross price - Allowance amount) when gross price is provided.
[PEPPOL-EN16931-R044]-Charge on price level is NOT allowed. Only value 'false' allowed.
En UBL, une remise sur le prix unitaire figure dans cac:Price/cac:AllowanceCharge. Le prix brut (BT-148) est dans cbc:BaseAmount, la remise par unité (BT-147) dans cbc:Amount et le prix net (BT-146) dans cbc:PriceAmount. PEPPOL-EN16931-R046 vérifie que le prix net est égal au prix brut moins la remise. En outre, PEPPOL-EN16931-R044 précise qu’au niveau du prix, seule une remise est permise, pas un supplément : cbc:ChargeIndicator y vaut toujours false.
Causes fréquentes
- Le logiciel convertit un pourcentage de remise en montant et l’arrondit autrement que le prix net.
- La remise dans
cbc:Amountest indiquée pour toute la ligne au lieu de par unité. - Un supplément, comme une contribution environnementale, figure au niveau du prix avec
ChargeIndicatortrue.
Comment corriger en tant qu’émetteur
- Indiquez dans
cbc:Amountla remise par unité, et non pour toute la ligne. - Veillez à ce que
cbc:PriceAmountsoit exactement égal àcbc:BaseAmountmoinscbc:Amount. - Ne placez pas les suppléments au niveau du prix, mais au niveau de la ligne ou du document. Validez à nouveau.
Vous avez reçu une facture avec cette erreur ?
Une facture avec cette erreur n’est pas conforme. Demandez une facture corrigée au fournisseur et ne modifiez pas le XML vous-même.
Exemple dans le XML
❌ Incorrect
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">25.00</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">120.00</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>
<!-- 120.00 - 25.00 = 95.00, et non 100.00 -->
✅ Correct
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">20.00</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">120.00</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>
Les deux extraits proviennent d’une facture de test complète vérifiée avec notre validateur : la version incorrecte donne exactement ce message, la version correcte aucune erreur.
Bon à savoir
Une remise au niveau du prix est informative : le montant de ligne se calcule avec le prix net. Une remise qui réduit le montant de ligne lui-même se place comme cac:AllowanceCharge directement sous la ligne de facture.
Vérifiez votre facture
Déposez votre XML dans le validateur gratuit. Vous voyez tout de suite si cette erreur se produit encore, avec un lien vers l’explication pour chaque message.
Règle officielle
La règle complète avec son test technique (Schematron) figure dans la documentation officielle Peppol :
Codes d’erreur liés
- PEPPOL-EN16931-R120: Le montant net d’une ligne de facture n’est pas égal à quantité × prix unitaire, plus les suppléments et moins les remises de cette ligne.
- BR-CO-10: Le total des lignes en bas de la facture ne correspond pas à la somme des montants de ligne.
Questions fréquentes sur PEPPOL-EN16931-R046 / PEPPOL-EN16931-R044
Dois-je indiquer le prix brut ?
Non, le prix brut et la remise sur le prix sont facultatifs. Si vous les indiquez, ils doivent correspondre au prix net.
Où placer un supplément sur un produit ?
Comme supplément sur la ligne de facture (cac:InvoiceLine/cac:AllowanceCharge avec ChargeIndicator true), ou comme ligne de facture distincte.