Texte officiel de la règle
[PEPPOL-EN16931-R046] Item net price MUST equal (Gross price - Allowance amount) when gross price is provided.
Le texte normatif est en anglais ; il est cité tel quel.
Pourquoi cette erreur apparaît
Lorsqu'un prix brut (BT-148) est indiqué, le prix net (BT-146) doit être exactement égal au prix brut diminué de la remise sur le prix de l'article (BT-147) ; aucune tolérance n'est admise. En UBL, la règle compare cac:Price/cbc:PriceAmount à cac:Price/cac:AllowanceCharge/cbc:BaseAmount moins cbc:Amount ; en CII, ram:NetPriceProductTradePrice/ram:ChargeAmount à ram:GrossPriceProductTradePrice/ram:ChargeAmount moins ram:AppliedTradeAllowanceCharge/ram:ActualAmount. Elle échoue lorsque la remise est dérivée d'un pourcentage et arrondie séparément, ou lorsque les prix net et brut n'ont pas le même nombre de décimales.
Comment corriger
Formule : PriceAmount = BaseAmount - Amount (UBL) / ChargeAmount du prix net = ChargeAmount du prix brut - ActualAmount (CII), comparés en décimales exactes. Calculez d'abord le montant de la remise, puis déduisez-en le prix net, en utilisant le même nombre de décimales pour les trois valeurs (jusqu'à quatre sont courantes pour les prix). Si vous ne pouvez pas reproduire exactement le couple prix brut/remise, supprimez la remise au niveau du prix et le prix brut, et n'indiquez que le prix net, ce qui suffit toujours.
Exemple (valide)
<cac:Price>
<cbc:PriceAmount currencyID="EUR">85.50</cbc:PriceAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">4.50</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">90.00</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>
Ce que le validateur vérifie
Élément vérifié (contexte):
UBL
cac:Price/cac:AllowanceChargeTest (XPath):
not(cbc:BaseAmount) or xs:decimal(../cbc:PriceAmount) = xs:decimal(cbc:BaseAmount) - xs:decimal(cbc:Amount)CII
rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePriceTest (XPath):
not(ram:ChargeAmount) or xs:decimal(../ram:NetPriceProductTradePrice/ram:ChargeAmount) = xs:decimal(ram:ChargeAmount) - u:decimalOrZero(ram:AppliedTradeAllowanceCharge/ram:ActualAmount[1])
Vérifier votre facture
Déposez votre XML ou PDF dans le validateur : chaque règle en échec renvoie vers sa page ici. Gratuit, sans compte, le fichier n'est pas conservé.
La même vérification par API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validateRègles liées
PEPPOL-EN16931-R001Identifiant du processus métier (BT-23) absentPEPPOL-EN16931-R002Une seule note autorisée au niveau document, sauf si l'acheteur et le vendeur…PEPPOL-EN16931-R003Ni référence acheteur ni référence de bon de commandePEPPOL-EN16931-R004Identifiant de spécification autre que Peppol BIS Billing 3.0PEPPOL-EN16931-R005Devise de comptabilisation de la TVA identique à la devise de facturePEPPOL-EN16931-R006Un seul objet facturé autorisé au niveau documentPEPPOL-EN16931-R007Identifiant du processus métier au format incorrectPEPPOL-EN16931-R008Le document contient des éléments vides
Questions fréquentes
Que signifie PEPPOL-EN16931-R046 ?
PEPPOL-EN16931-R046 est une règle peppol bis billing 3.0 : Item net price MUST equal (Gross price - Allowance amount) when gross price is provided.
Ma facture sera-t-elle rejetée à cause de PEPPOL-EN16931-R046 ?
Oui. PEPPOL-EN16931-R046 est classée « bloquante » ; les validateurs (plateformes agréées, points d'accès Peppol, KoSIT, KSeF) rejettent la facture tant qu'elle n'est pas corrigée.
À quels formats s'applique PEPPOL-EN16931-R046 ?
Factures et avoirs transmis via le réseau Peppol (UBL) et, XRechnung reprenant ces règles, toute XRechnung. Syntaxe : UBL et CII.
Source: Peppol BIS Billing 3.0.20 (November 2025). Catalogue généré à partir des jeux de règles officiels le 2026-10-15.