/xXSDHub

BR-CO-13: Net invoice total must reconcile

Net invoice total must reconcile; sum line net amounts, subtract document allowances and add document charges.

What the rule says

[BR-CO-13]-Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

Official en16931 source, version 1.3.16. EUPL 1.2; sources, licences and notices. Syntax and business checks are separate; this is not certification.

Net invoice total must reconcile

Net invoice total must reconcile. The controlled example changes the specific field or group named by this rule. Set only /*/cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount to '100.01'.

Business terms: BT-107, BT-108, BT-109, BT-131.

Sum line net amounts, subtract document allowances and add document charges.

Reproduced failure and correction

Tested on 2 November 2026 with the production SaxonC-HE 13.1 / saxonche 13.1.1 engine, en16931 mode, UBL. The XSD passes; the report then contains BR-CO-13. Restoring this fragment makes the complete original invoice pass the selected checks.

[BR-CO-13]-Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

Additional triggered rules: 1. BR-CO-15. Counts include distinct error and warning codes; the target code is excluded.

Precise mutated XPath: /*/cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount.

Calculation using this invoice

Net invoice total shown: 100.01 EUR. Expected: line net 100.00 − document allowances 0.00 + document charges 0.00 = 100.00 EUR. Difference: 0.01 EUR. Round the result to two decimal places.

Before: triggers this rule

<cac:LegalMonetaryTotal 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:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
        <cbc:TaxExclusiveAmount currencyID="EUR">100.01</cbc:TaxExclusiveAmount>
        <cbc:TaxInclusiveAmount currencyID="EUR">121.00</cbc:TaxInclusiveAmount>
        <cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
    </cac:LegalMonetaryTotal>
    

After: passes

<cac:LegalMonetaryTotal 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:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
        <cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
        <cbc:TaxInclusiveAmount currencyID="EUR">121.00</cbc:TaxInclusiveAmount>
        <cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
    </cac:LegalMonetaryTotal>
    

The context shown is part of a complete invoice; it is not a standalone invoice. Mutation: value at /*/cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount. 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.