Reference
Markdown exportPEPPOL-EN16931-R120 Invoice line net amount must equal quantity multiplied by unit net price adjusted for line allowances and charges
Under Peppol rule PEPPOL-EN16931-R120, the invoice line net amount in BT-131 (LineExtensionAmount) must be mathematically consistent with the line item pricing formula: LineExtensionAmount = round((InvoicedQuantity * (ItemNetPrice / BaseQuantity)) - Sum(LineAllowances) + Sum(LineCharges), 2). A currency-dependent slack tolerance (±0.02 EUR / standard currencies, or ±0.5 HUF) is permitted by Schematron rules to account for rounding differences. Common causes of failure include dropping line-level discounts during XML conversion, rounding intermediate unit prices to 2 decimals too early instead of using 4 decimal precision, or failing to divide by the item price base quantity (BT-149).
Problem Description
Under Peppol rule PEPPOL-EN16931-R120, the invoice line net amount in BT-131 (LineExtensionAmount) must be mathematically consistent with the line item pricing formula: LineExtensionAmount = round((InvoicedQuantity * (ItemNetPrice / BaseQuantity)) - Sum(LineAllowances) + Sum(LineCharges), 2). A currency-dependent slack tolerance (±0.02 EUR / standard currencies, or ±0.5 HUF) is permitted by Schematron rules to account for rounding differences. Common causes of failure include dropping line-level discounts during XML conversion, rounding intermediate unit prices to 2 decimals too early instead of using 4 decimal precision, or failing to divide by the item price base quantity (BT-149).
ERROR
XRechnung 3.0
Context and Significance
PEPPOL-EN16931-R120 is one of the most frequently observed rejection causes on Peppol networks, resulting from arithmetic differences between calculated line extensions and exported BT-131 values.
Solution
In your ERP billing configuration or PDF extraction pipeline, preserve high-precision unit prices (up to 4 or 6 decimal places) and ensure all line-level discounts and charges are included in the BT-131 calculation before final 2-decimal rounding. In UBL 2.1 syntax, populate <cbc:LineExtensionAmount currencyID="EUR">190.00</cbc:LineExtensionAmount> for quantity 2 at price 100.00 with a 10.00 line allowance. In UN/CEFACT CII syntax, populate <ram:LineTotalAmount>190.00</ram:LineTotalAmount> under <ram:SpecifiedTradeSettlementLineMonetarySummation>.
Quick actions
Valid Examples
- Quantity 2 x Unit price 100.00 EUR minus Line allowance 10.00 EUR gives BT-131 = 190.00 EUR
- Quantity 50 x Unit price 1.2550 EUR (62.75 EUR) gives BT-131 = 62.75 EUR
Invalid Examples
- Quantity 2 x Price 100.00 EUR minus Allowance 10.00 EUR = 190.00 EUR, but exported BT-131 is 200.00 EUR because line allowance was omitted from calculation
- Formula yields 190.00 EUR but BT-131 is exported as 189.90 EUR due to rounding truncation
Code Examples
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="H87">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">190.00</cbc:LineExtensionAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">10.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="H87">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">200.00</cbc:LineExtensionAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">10.00</cbc:Amount>
</cac:AllowanceCharge>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>