PEPPOL-EN16931-R120: Line net amount must reconcile
Line net amount must reconcile; multiply quantity by net price per base quantity, then add charges and subtract allowances.
What the rule says
[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
Official xrechnung source, version 2.6.0 / XRechnung 3.0.2. Apache 2.0; sources, licences and notices. Syntax and business checks are separate; this is not certification.
Line net amount must reconcile
Line net amount must reconcile. The controlled example changes the specific field or group named by this rule. Set only /*/cac:InvoiceLine[1]/cbc:InvoicedQuantity to '2'.
Business terms: No explicit BT number in the official rule text; use the XML context below.
Multiply quantity by net price per base quantity, then add charges and subtract allowances.
Reproduced failure and correction
Tested on 2 November 2026 with the production SaxonC-HE 13.1 / saxonche 13.1.1 engine, xrechnung mode, UBL. The XSD passes; the report then contains PEPPOL-EN16931-R120. Restoring this fragment makes the complete original invoice pass the selected checks.
[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 amountAdditional triggered rules: 0. None. Counts include distinct error and warning codes; the target code is excluded.
Precise mutated XPath: /*/cac:InvoiceLine[1]/cbc:InvoicedQuantity.
Calculation using this invoice
Line net amount shown: 100.00 EUR. Expected: quantity 2 × (net price 100.00 / base quantity 1) + line charges 0.00 − line allowances 0.00 = 200.00 EUR. The absent price base quantity defaults to 1. Difference: 100.00 EUR, exceeding the pinned tolerance. Round the line result to two decimal places; restoring the original quantity 1 gives 100.00 EUR.
Before: triggers this rule
<cac:InvoiceLine xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:ID>Zeitschrift [...]</cbc:ID>
<cbc:Note>Die letzte Lieferung im Rahmen des abgerechneten Abonnements erfolgt in 12/2016 Lieferung erfolgt / erfolgte direkt vom Verlag</cbc:Note>
<cbc:InvoicedQuantity unitCode="XPP">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cac:OrderLineReference>
<cbc:LineID>6171175.1</cbc:LineID>
</cac:OrderLineReference>
<cac:Item>
<cbc:Description>Zeitschrift Inland</cbc:Description>
<cbc:Name>Zeitschrift [...]</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>246</cbc:ID>
</cac:SellersItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listID="IB">0721-880X</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
After: passes
<cac:InvoiceLine xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:ID>Zeitschrift [...]</cbc:ID>
<cbc:Note>Die letzte Lieferung im Rahmen des abgerechneten Abonnements erfolgt in 12/2016 Lieferung erfolgt / erfolgte direkt vom Verlag</cbc:Note>
<cbc:InvoicedQuantity unitCode="XPP">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cac:OrderLineReference>
<cbc:LineID>6171175.1</cbc:LineID>
</cac:OrderLineReference>
<cac:Item>
<cbc:Description>Zeitschrift Inland</cbc:Description>
<cbc:Name>Zeitschrift [...]</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>246</cbc:ID>
</cac:SellersItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listID="IB">0721-880X</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
The context shown is part of a complete invoice; it is not a standalone invoice. Mutation: value at /*/cac:InvoiceLine[1]/cbc:InvoicedQuantity. The passing baseline is validated with the selected pinned package. UBL examples use a controlled single-line adaptation of the official XRechnung example; the CII example uses the official EN 16931 baseline.
Download complete failing invoice · Download complete passing invoice
Check the rest of the invoice
Repair the source data and exporter, then validate the complete invoice again with the same package. Review every remaining error and warning; a passing rule is not a guarantee of recipient acceptance.
EN 16931 syntax and business checks · XRechnung profile requirements · Pro/Team batch checks.