PEPPOL-EN16931-R120
A line's net amount must follow from the line's own figures: quantity × (net price ÷ price base quantity), plus the line's charges and minus its allowances.
- Severity
- Warning
- Applies to
- CII, UBL
- Rule set
- v2026-01-31
Official rule text
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
Why does PEPPOL-EN16931-R120 happen?
The line amount comes from the invoice object, where it was computed long ago, and quantity, price and discounts are written alongside it. As soon as the price base quantity is not 1, or a line discount appears, the two routes diverge.
How do you fix PEPPOL-EN16931-R120?
Compute cbc:LineExtensionAmount from exactly the values present on the line — cbc:InvoicedQuantity, cac:Price/cbc:PriceAmount, cac:Price/cbc:BaseQuantity and the line's cac:AllowanceCharge. This rule is a warning rather than a rejection: the invoice stays valid, but its numbers contradict each other.
In the XML
A UBL fragment. The CII path is named above — same change, different element names.
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">50.00</cbc:Amount>
</cac:AllowanceCharge>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine><cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">950.00</cbc:LineExtensionAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">50.00</cbc:Amount>
</cac:AllowanceCharge>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>NormAPI provides technical validation, not tax or legal advice.