/xXSDHub

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 amount

Additional 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 your corrected 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.