Error code PEPPOL-EN16931-R120 means: the net amount of an invoice line does not equal quantity × unit price, plus charges and minus allowances on that line.
What does PEPPOL-EN16931-R120 mean?
The validator shows this message (as worded in the official rules):
[PEPPOL-EN16931-R120]-Invoice line net amount MUST equal (Invoiced quantity * (Item net price/item price base quantity) + Sum of invoice line charge amount - sum of invoice line allowance amount
For each invoice line, the rule recalculates: quantity (InvoicedQuantity, BT-129) × net price (Price/PriceAmount, BT-146, divided by the base quantity BaseQuantity, BT-149, if present), plus line charges and minus line allowances. The result must match the line amount (LineExtensionAmount, BT-131). Peppol allows a 2-cent tolerance: 3 × 99.99 = 299.97 against 300.00 is a 3-cent difference and therefore an error.
Common causes
- The unit price is rounded (for example 33.33 for a third of 100), while the line amount was calculated on the unrounded price.
- A line discount is included in the line amount but not added as an
AllowanceChargeon the line, or the other way round. - The price applies per pack or per 100 units, but the base quantity (
BaseQuantity) is missing. - The unit price was entered including VAT instead of excluding VAT.
How to fix it as the sender
- Calculate the line amount from quantity × price, not the price from the line amount.
- For a price per 100 or per pack, use the base quantity field, or convert to a unit price with more decimals.
- Always enter the unit price excluding VAT.
- Add line discounts as an allowance with its own amount, not built into both the price and the line amount.
Received an invoice with this error?
You cannot correct the invoice yourself. Ask the supplier for a corrected invoice. It is often a setting in their software.
Example in the XML
❌ Wrong
<cac:InvoiceLine>
<cbc:InvoicedQuantity unitCode="HUR">3</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">300.00</cbc:LineExtensionAmount>
...
<cac:Price>
<cbc:PriceAmount currencyID="EUR">99.99</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<!-- 3 x 99.99 = 299.97, not 300.00 -->
✅ Correct
<cac:InvoiceLine>
<cbc:InvoicedQuantity unitCode="HUR">3</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">300.00</cbc:LineExtensionAmount>
...
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
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
The unit price in Peppol may have more than two decimals. A price of 33.3333 is allowed and solves many rounding problems.
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
- BR-CO-15: The total with VAT is not equal to the total without VAT plus the VAT amount.
- BR-27: The net price of an item on an invoice line is negative. That is never allowed.
Frequently asked questions about PEPPOL-EN16931-R120
How much tolerance does R120 allow?
2 cents per line. A difference of 0.02 or less is accepted; from 0.03 it is an error.
Can the unit price have more decimals?
Yes. The line amount has two decimals, but the price can be more precise, for example 33.3333.