VERIX
One rule set. Every syntax.
VERIX is a validation language for business documents. Rules name business terms and carry no path — a small per-syntax binding maps them to the XML — so one rule set validates UBL and CII alike. No XPath, no XSLT, no Saxon, no JVM.
One rule set, every syntax
Rules reference EN 16931 business terms, never paths. A tiny binding maps terms to each syntax — write a rule once and it validates UBL, CII, and whatever binds next.
Zero dependencies
No XPath, XSLT, Saxon or JVM. One self-contained engine — nothing to bolt into your stack, nothing to license, nothing to keep patched.
Errors that name the term
A failure names the business term and the value that broke it — not a line in a generated file. The person who owns the data knows exactly what to fix.
Rules read like the standard. Bindings do the rest.
The rules name business terms and carry no path. A small per-syntax binding maps those terms to XML — so the very same rules validate UBL and CII, unchanged.
# No paths. No namespaces. No prefixes. No XPath. rule BR-CO-09 text The Seller VAT identifier shall have an ISO 3166-1 prefix, except EL for Greece. severity error cites EN 16931-1 BR-CO-09 for each Seller when VatIdentifier is present check VatIdentifier starts with one of iso3166.alpha2 or VatIdentifier starts with "EL"
map BT-1 cbc:ID map BT-5 cbc:DocumentCurrencyCode group BG-4 cac:AccountingSupplierParty map BT-31 cbc:CompanyID
map BT-1 rsm:ExchangedDocument/ram:ID map BT-5 …ram:InvoiceCurrencyCode group BG-4 …/ram:SellerTradeParty map BT-31 ram:SpecifiedTaxRegistration…
Interested in VERIX?
It's an open specification in active development. Tell us and we'll reach out — whether you want to build on it, validate against it, or shape where it goes.
