Account
English

PEPPOL-EN16931-R120: Line net amount does not match quantity times price

Peppol BIS Billing 3.0 rule · Error · UBL / CII

StandardPeppol BIS Billing 3.0 (OpenPeppol)SeverityError: the invoice is rejectedSyntaxUBL, CIIApplies toInvoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well.

Official rule text

[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

Why this error occurs

Peppol verifies the arithmetic of each line: the line net amount (BT-131) must equal invoiced quantity (BT-129) times net price (BT-146) divided by the price base quantity (BT-149, default 1), plus line charges minus line allowances, with a tolerance of 0.02. The rule reads cbc:LineExtensionAmount, cbc:InvoicedQuantity, cac:Price/cbc:PriceAmount, cac:Price/cbc:BaseQuantity and the line cac:AllowanceCharge amounts (UBL), or ram:LineTotalAmount, ram:BilledQuantity, ram:NetPriceProductTradePrice/ram:ChargeAmount, ram:BasisQuantity and ram:SpecifiedTradeAllowanceCharge (CII). Typical causes: the gross price is exported instead of the net price, a price per 100 units without base quantity, line discounts already deducted from the price and subtracted again, or a rounding difference above two cents.

How to fix it

Formula: BT-131 = round(BT-129 x (BT-146 / BT-149) + Σ line charges - Σ line allowances, 2). Export the net unit price in cbc:PriceAmount; if the price is per 10 or 100 units, set cac:Price/cbc:BaseQuantity accordingly with the same unitCode as the quantity. Model a line discount either inside the price (price-level allowance) or as a line-level cac:AllowanceCharge, not both. Compute cbc:LineExtensionAmount from the exported values so the deviation stays within 0.02.

Example (valid)

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">250</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="EUR">31.25</cbc:LineExtensionAmount>
  ...
  <cac:Price><cbc:PriceAmount currencyID="EUR">12.50</cbc:PriceAmount><cbc:BaseQuantity unitCode="C62">100</cbc:BaseQuantity></cac:Price>
</cac:InvoiceLine>

What the validator checks

Checked element (context):

UBL

cac:InvoiceLine | cac:CreditNoteLine

Test (XPath):

u:slack($lineExtensionAmount, ($quantity * ($priceAmount div $baseQuantity)) + $chargesTotal - $allowancesTotal, 0.02)

CII

ram:IncludedSupplyChainTradeLineItem

Test (XPath):

u:slack($lineExtensionAmount, ($quantity * ($priceAmount div $baseQuantity)) + $chargesTotal - $allowancesTotal, 0.02)

Check your invoice

Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.

Check your invoice →

Same check via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Related rules

Frequently asked questions

What does PEPPOL-EN16931-R120 mean?

PEPPOL-EN16931-R120 is a peppol bis billing 3.0 rule: 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

Will my invoice be rejected because of PEPPOL-EN16931-R120?

Yes. PEPPOL-EN16931-R120 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.

Which formats does PEPPOL-EN16931-R120 apply to?

Invoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well. Syntax: UBL and CII.

Source: Peppol BIS Billing 3.0.20 (November 2025). Catalogue generated from the official schematron on 2026-10-14.