Error code PEPPOL-EN16931-R046 / PEPPOL-EN16931-R044 means: the net price does not equal the gross price minus the allowance (R046), or there is a charge on price level (R044).
What does PEPPOL-EN16931-R046 / PEPPOL-EN16931-R044 mean?
The validator shows this message (as worded in the official rules):
[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.
In UBL, an allowance on the unit price is in cac:Price/cac:AllowanceCharge. The gross price (BT-148) is in cbc:BaseAmount, the allowance per unit (BT-147) in cbc:Amount and the net price (BT-146) in cbc:PriceAmount. PEPPOL-EN16931-R046 checks that the net price equals the gross price minus the allowance. In addition, PEPPOL-EN16931-R044 states that only an allowance is allowed on price level, not a charge: cbc:ChargeIndicator is always false there.
Common causes
- The software converts a discount percentage into an amount and rounds it differently from the net price.
- The allowance in
cbc:Amountis stated for the whole line instead of per unit. - A charge, such as an environmental fee, is on price level with
ChargeIndicatortrue.
How to fix it as the sender
- State the allowance per unit in
cbc:Amount, not for the whole line. - Make sure
cbc:PriceAmountexactly equalscbc:BaseAmountminuscbc:Amount. - Do not put charges on price level, but as a charge on line level or document level. Validate again.
Received an invoice with this error?
An invoice with this error is not compliant. Ask the supplier for a corrected invoice and do not change the XML yourself.
Example in the XML
❌ Wrong
<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, not 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>
Both snippets come from a complete test invoice that we checked with our validator: the wrong version gives exactly this message, the correct version no errors at all.
Good to know
An allowance on price level is informative: the line amount is calculated with the net price. An allowance that lowers the line amount itself belongs as cac:AllowanceCharge directly under the invoice line.
Check your invoice
Drop your XML into the free validator. You see right away whether this error still occurs, with a link to the explanation for every message.
Official rule
The full rule with its technical test (Schematron) is in the official Peppol documentation:
Related error codes
- PEPPOL-EN16931-R120: The net amount of an invoice line does not equal quantity × unit price, plus charges and minus allowances on that line.
- BR-CO-10: The total of the invoice lines at the bottom of the invoice does not equal the sum of the line amounts.
Frequently asked questions about PEPPOL-EN16931-R046 / PEPPOL-EN16931-R044
Do I have to state the gross price?
No, the gross price and the price allowance are optional. If you do state them, they must match the net price.
Where do I put a charge on a product?
As a charge on the invoice line (cac:InvoiceLine/cac:AllowanceCharge with ChargeIndicator true), or as a separate invoice line.