SummandLive demo, free and Pro.
The first two sections run the real @sweberdev/summand build in your browser: the XPath and Schematron engine with the official CEN and KoSIT rules, the PDF reader and the Leitweg-ID check. The Pro section shows output of the real Pro packages for a few sample invoices.
Your invoice never leaves your browser. Nothing is uploaded or stored.
Summand checks invoices technically against EN 16931 and XRechnung. It does not check XML schemas yet, and it is not tax advice.
Validate
Check an e-invoice against the official rulesEN 16931 and XRechnung.
Drop an XRechnung or ZUGFeRD / Factur-X file, or pick a sample. Summand finds the syntax and profile, applies the matching rule sets and lists every finding with rule, line and XPath.
Loading Summand and the rule sets…
Leitweg-ID
Check the address of a German public buyerISO 7064 check digits.
German public authorities are addressed by a Leitweg-ID in the buyer reference (BT-10). A typo means the invoice is rejected. Summand checks the structure and the two check digits.
Loading Summand and the rule sets…
Pro
Read, show and process invoices in bulkSummand Pro.
Summand Pro turns invoices into typed data, renders them for people and validates whole inboxes. Below is real output of summand-view and summand-inbox for the sample invoices.
summand-view: the invoice with errors as readable HTML, with its validation report
The ZUGFeRD sample in German
summand-inbox on a folder of six files
$ npx summand-inbox incoming --html report.html --audit-log audit.jsonl
ok incoming/2026-10/lieferant-471102.pdf
ok incoming/2026-10/mustermann-18383.xml
ok incoming/2026-10/mustermann-18383_cii.xml duplicate of incoming/2026-10/mustermann-18383.xml
FAIL incoming/2026-10/mustermann-18383_resent.xml 1 error(s), 1 warning(s) duplicate of incoming/2026-10/mustermann-18383.xml
ERR incoming/2026-10/scan-0815.pdf The PDF contains no embedded invoice XML. A ZUGFeRD / Factur-X invoice must embed the XML (for example factur-x.xml); a plain PDF is not an e-invoice.
ok incoming/2026-10/stadtwerke-2026-10.xml
6 file(s): 4 valid, 1 invalid, 1 unreadable, 2 duplicate(s), 1 warning(s)summand-read: one typed object for UBL and CII
import { readInvoice } from "@weber-development/summand-read"
const invoice = readInvoice(bytes) // UBL, CII or ZUGFeRD PDF
invoice.seller.vatId // "DE 123456789" BT-31
invoice.buyerReference // "04011000-12349-88" BT-10
invoice.totals.payable // "233.00" BT-115
invoice.payment.creditTransfers // [{ accountId: "DE79…", bic: "DRESDEFFXXX" }]
invoice.lines.map((l) => [l.item.name, l.quantity, l.unit, l.netAmount])Two lines of the audit log: each line carries the SHA-256 of the file and a chain value over the line before
{
"time": "2026-10-05T20:05:23.662Z",
"file": "incoming/2026-10/lieferant-471102.pdf",
"sha256": "05b5a382db8fdc60d1e9ec31fef7fb09c91d68413b9187f7ca116aed116ed1d0",
"size": 37897,
"status": "valid",
"errors": 0,
"warnings": 0,
"errorIds": [],
"number": "471102",
"issueDate": "2024-11-15",
"seller": "Lieferant GmbH",
"sellerVatId": "DE123456789",
"payableAmount": "529.87",
"currency": "EUR",
"ruleSets": [
"EN 16931 validation artefacts (UN/CEFACT CII) 1.3.16"
],
"chain": "911520726f5c04de09bbc52354d0392db48b288e8c264f5ab05e655fe5028f7b"
}
{
"time": "2026-10-05T20:05:23.762Z",
"file": "incoming/2026-10/mustermann-18383.xml",
"sha256": "8ed131cc276bb37d160ffc243dee9eade601de9ed04392ab38eac5ce26e9ac77",
"size": 6839,
"status": "valid",
"errors": 0,
"warnings": 0,
"errorIds": [],
"number": "18383",
"issueDate": "2020-11-27",
"seller": "Mustermann GmbH",
"sellerVatId": "DE 123456789",
"payableAmount": "233.00",
"currency": "EUR",
"ruleSets": [
"EN 16931 validation artefacts (UBL) 1.3.16",
"XRechnung Schematron (UBL), XRechnung 3.0 2.6.0"
],
"chain": "34984313b72ecb517a540adda3a0bf9aa2ce4143c358ce11232bd9eae28209bf"
}The HTML report of the same run
Next step
Validate invoices where they arriveMIT licensed.
Install @sweberdev/summand and call validateInvoice in your upload route, your mail handler or your CI. The getting started guide takes five minutes.