Skip to main content

PEPPOL-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

Valid XML
<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>
Invalid XML
<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>

Affected Fields

Validation Tools