einvoice / EN 16931 / XRechnung rule reference

BR-DEX-02

What this rule means and how to fix it

The 'Invoice line net amount' (BT-131) of an INVOICE LINE (BG-25) or a SUB INVOICE LINE (BG-DEX-01) should equal the sum of the directly nested SUB INVOICE LINEs' net amounts.

Der Wert von "Invoice line net amount" (BT-131) einer "INVOICE LINE" (BG-25) oder einer "SUB INVOICE LINE" (BG-DEX-01) soll der Summe der "Invoice line net amount" (BT-131) der direkt darunterliegenden "SUB INVOICE LINE" (BG-DEX-01) entsprechen.

Deutsche Fassung: Amtlicher KoSIT-Text (official KoSIT assert text).

Requires
the 'Invoice line net amount' (BT-131) of an INVOICE LINE (BG-25) or a SUB INVOICE LINE (BG-DEX-01) should equal the sum of the directly nested SUB INVOICE LINEs' net amounts.
Business terms
BG-25 BG-DEX-01 BT-131
Syntax
Binds the UBL-2.1 Invoice / CreditNote syntax
Location (UBL-2.1 path)
cac:InvoiceLine
Fix
Add the required element at `cac:InvoiceLine`: the 'Invoice line net amount' (BT-131) of an INVOICE LINE (BG-25) or a SUB INVOICE LINE (BG-DEX-01) should equal the sum of the directly nested SUB INVOICE LINEs' net amounts.
Fix (Deutsch)
Ergänzen Sie das erforderliche Element bei `cac:InvoiceLine`: Der Wert von "Invoice line net amount" (BT-131) einer "INVOICE LINE" (BG-25) oder einer "SUB INVOICE LINE" (BG-DEX-01) soll der Summe der "Invoice line net amount" (BT-131) der direkt darunterliegenden "SUB INVOICE LINE" (BG-DEX-01) entsprechen.
Severity
warning
Provenance source
xrechnung-ubl
Provenance assert

Der Wert von "Invoice line net amount" (BT-131) einer "INVOICE LINE" (BG-25) oder einer "SUB INVOICE LINE" (BG-DEX-01) soll der Summe der "Invoice line net amount" (BT-131) der direkt darunterliegenden "SUB INVOICE LINE" (BG-DEX-01) entsprechen.

The Location above is a UBL-2.1 path, and no UN/CEFACT-CII path for this rule is published here; Fix and Fix (Deutsch), verbatim from remediation_catalog.json and not reworded here; the UBL-2.1 binding of this rule is differentially proven against the official KoSIT XRechnung 2.5.0 (XRechnung 3.0.2) Schematron.

Where to check the fix: paste the corrected invoice into the browser validator at /einvoice/validate/ — it runs this same engine locally in your browser, with no upload, and stops reporting BR-DEX-02 once the edit lands.

Korrektur prüfen: Laden Sie die geänderte Rechnung in den Browser-Validator unter /einvoice/validate/ — er führt dieselbe Engine lokal im Browser aus, ohne Upload, und meldet BR-DEX-02 nicht mehr, sobald die Korrektur greift.

The same invoice, failing and fixed

No vendored test suite ships a labelled example for this rule, so this pair was found rather than written. The engine was run over the vendored instance corpus/xrechnung-testsuite/src/test/business-cases/extension/04.01a-INVOICE_ubl.xml under --profile xrechnung, then re-run over the same file with one mechanical edit applied to one element, over and over, until the edit below changed the verdict: the text content of LineExtensionAmount was deleted, leaving the element present but empty. The page publishes it because the engine reported BR-DEX-02 for the edited document and did not report it for the untouched one.

UBL Invoice (XRechnung extension) — fails

The vendored file around the change, verbatim:

<cbc:LineExtensionAmount currencyID="EUR"></cbc:LineExtensionAmount>

UBL Invoice (XRechnung extension) — passes

The same lines as 04.01a-INVOICE_ubl.xml actually ships them — this block is the fix for the block above:

<cbc:LineExtensionAmount currencyID="EUR">818.04</cbc:LineExtensionAmount>

What the engine reports for the edited invoice

{
  "element": "cac:InvoiceLine/cbc:LineExtensionAmount",
  "field": "cac:InvoiceLine/cbc:LineExtensionAmount",
  "fix_hint": "Add the required element at `cac:InvoiceLine`: the 'Invoice line net amount' (BT-131) of an INVOICE LINE (BG-25) or a SUB INVOICE LINE (BG-DEX-01) should equal the sum of the directly nested SUB INVOICE LINEs' net amounts.",
  "location": "cac:InvoiceLine",
  "message": "The 'Invoice line net amount' (BT-131) should equal the sum of the directly nested SUB INVOICE LINE net amounts.",
  "rule": "BR-DEX-02",
  "severity": "warning",
  "terms": [
    "BG-25",
    "BG-DEX-01",
    "BT-131"
  ],
  "title": "The 'Invoice line net amount' (BT-131) of an INVOICE LINE (BG-25) or a SUB INVOICE LINE (BG-DEX-01) should equal the sum of the directly nested SUB INVOICE LINEs' net amounts."
}

Rule ids the engine reports for 04.01a-INVOICE_ubl.xml untouched: none. After the edit, BR-CO-10 BR-DEX-02 BR-S-08 are reported that were not before — one mechanical edit can break more than one rule at a time, and BR-CO-10 BR-S-08 are the neighbours this one takes with it.

Two honest limits. This is an edit that provokes the rule, not the only one, and it is not a claim about how real exporters break it. And it is the reverse of the fix a reader needs: the passing block is the vendored file's own content, which is what a conformant invoice looks like here.

Reproduce it yourself: take corpus/xrechnung-testsuite/src/test/business-cases/extension/04.01a-INVOICE_ubl.xml from this repository, apply the one edit named above, and run einvoice validate 04.01a-INVOICE_ubl.xml --profile xrechnung --format json, or paste the file into the browser validator, which runs this same engine locally with no upload.

Everything here is free and open source — pick up whatever helps, at your own pace: