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 match the line pricing formula: LineExtensionAmount = InvoicedQuantity × (ItemNetPrice ÷ BaseQuantity) + Sum(LineCharges) − Sum(LineAllowances). The Peppol Schematron accepts a deviation of at most 0.02 to absorb rounding. Common causes of failure include dropping line-level discounts during XML conversion, rounding unit prices to 2 decimals too early, or not dividing by the item price base quantity (BT-149).
Problem Description
ERROR
Peppol BIS Billing 3.0 rule (OpenPeppol)
Context and Significance
PEPPOL-EN16931-R120 fails as soon as the exported BT-131 deviates by more than 0.02 from the amount recalculated from quantity, net price, base quantity and line allowances and charges. Typical causes are a line allowance lost during conversion, a unit price rounded to 2 decimals too early, or a base quantity (BT-149) that was not divided by.
Solution
In your ERP billing configuration or conversion pipeline, keep unit prices at full precision and include all line-level allowances and charges in the BT-131 calculation before rounding the line amount to 2 decimals; divide by the base quantity (BT-149) when it is set. In UBL 2.1, for quantity 2 at price 100.00 with a 10.00 line allowance, write <cbc:LineExtensionAmount currencyID="EUR">190.00</cbc:LineExtensionAmount>.
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>