SyncliumSYNCLIUM
INCOMING DOCUMENTORIGIN EU / PEPPOLFORMAT UBL 2.1DESTINATION SAUDI ARABIATARGET ZATCA PHASE 2

SYNCLIUM // BORDER CONTROL FOR INVOICES

Every invoice
has a border.

Synclium moves it across — UBL 2.1 / PEPPOL, Factur-X CII and ZATCA Phase 2, transpiled through one canonical AST. Deterministic. Stateless. MIT open source.

TECHNICAL UTILITY — NOT GOVERNMENT CLEARANCE OR CERTIFICATION

DOC // INV-2026-088SCAN ACTIVE

TAX INVOICE — UBL 2.1

Nordwind Transit Systems GmbH

ID
INV-2026-088
ISSUE
2026-08-23
SELLER VAT
DE314982711
PAYABLE
EUR 1785.00

LINE 1 — Rail power inverter maintenance · S 19.00%

  • cbc:IDINV-2026-088
  • cbc:IssueDate2026-08-23
  • seller.taxIdDE314982711
  • line[0].taxS · 19.00%
  • totals.payableEUR 1785.00
  • profilePEPPOL BIS 3.0
ORIGIN
EU / PEPPOL
FORMAT
UBL 2.1
DESTINATION
SAUDI ARABIA
TARGET
ZATCA PHASE 2
02THE BORDER // PROCESSING CORRIDOR

Six gates. One document. No queues.

INGEST → DETECT → NORMALIZE → VALIDATE → COMPILE → EMIT. Each gate visibly rewrites the document; watch the seal change as it travels.

INGEST
DETECT
NORMALIZE
VALIDATE
COMPILE
EMIT
GATE 1/6 — INGESTraw bytes in · namespace sniffed
03TRANSLATION // ONE INVOICE, FOUR LANGUAGES

Same meaning. Different representation.

UBL → canonical AST → CII → ZATCA. Semantic values stay pinned while the syntax around them is rewritten. That is the whole product.

FIELDUBL 2.1CANONICAL ASTCIIZATCA
document.idcbc:ID → INV-2026-088id: INV-2026-088ram:ID → INV-2026-088cbc:ID → INV-2026-088
issue.datecbc:IssueDateissueDateudt:DateTimeString @102cbc:IssueDate
seller.taxPartyTaxScheme / CompanyIDseller.taxIdSpecifiedTaxRegistrationCompanyID · 15-digit
line.taxClassifiedTaxCategorytaxes[] {code, rate}ApplicableTradeTaxTaxSubtotal / Category
payableLegalMonetaryTotaltotals.payableAmountDuePayableAmountLegalMonetaryTotal
clearanceProfileID · CustomizationIDextensions[]GuidelineParameterUUID · ICV · PIH

THE ORANGE COLUMN IS THE PRODUCT. EVERYTHING ELSE IS A DIALECT.

04FORMAT TOPOLOGY // WHY POINT-TO-POINT DIES

N formats don't need N × (N − 1) converters.

Six dialects, thirty bespoke mappings — or six adapters into one hub. Toggle the collapse.

UBLCIIZATCAKSEFPINTDGI

CONNECTIONS

30

N × (N − 1) bespoke mappings. Add a format, touch everything.

05INVOICE PASSPORT // SYNCLIUM TRANSIT RECORD

Cleared to cross.

One document, stamped at every gate. Clearance status stays honest: validated technically, never submitted to any authority.

SYNCLIUM TRANSIT RECORD

Nº 088-2026-EU-SA

DOCUMENT ID
INV-2026-088
ORIGIN
EU / PEPPOL
DESTINATION
SAUDI ARABIA
SOURCE FORMAT
UBL 2.1 · BIS 3.0
TARGET FORMAT
ZATCA PHASE 2
SEMANTIC INTEGRITY
LOSSLESS · 6/6 FIELDS
VALIDATION STATE
STRUCTURE + RULES PASS
CLEARANCE STATUS
NOT SUBMITTED · TECHNICAL ONLY
AWAITING INSPECTION…
06LIVE COMPILER // SOURCE · CORE · TARGET

Watch the machine compile.

Real UBL in, real engine call, real ZATCA out. Telemetry below is measured in your browser against /api/v1 — never invented.

IDLE
  1. SOURCE
  2. DETECT
  3. CANONICAL
  4. VALIDATE
  5. EMIT
  6. TARGET

SOURCE // UBL 2.1

SYNCLIUM CORE // VALIDATION GATE

DETECTEDUBL 2.1
CANONICALAST · ZOD PARSED
VALID…

RULES

    TARGET // ZATCA

    —
    07MANDATE CLOCK // 2025 → 2028

    The deadlines are real. The engine is ready.

    Select a jurisdiction. The chamber reconfigures to its standard, clearance model, and Synclium support state.

    JURISDICTION

    SAUDI ARABIA

    MANDATE TIMING

    PHASE 2 · WAVES 1–15

    STANDARD

    ZATCA Fatoora Phase 2 XML

    CLEARANCE MODEL

    ZATCA clearance + reporting API

    ✓ SYNCLIUM READY0100000 standard · 0200000 simplified.
    08O(N²) COLLAPSE // THE MATH THAT KILLS CONVERTERS

    Add a format. Count the damage.

    Every new dialect multiplies point-to-point work. The hub divides it.

    N = 3

    POINT-TO-POINT

    N×(N−1)

    = 6 converters

    SYNCLIUM HUB

    2×N

    = 6 adapters

    09ZERO DATA // THE CHAMBER EMPTIES ITSELF

    Nothing is stored. Watch it leave.

    Invoices live in transient RAM for the duration of one compilation — then the chamber is empty. No disk, no database, no retention.

    BUFFER
    PARSE
    TRANSFORM
    VALIDATE
    EMIT
    DOCUMENT IN FLIGHT — HELD IN RAM ONLY

    SCOPE HONESTY: “ZERO DATA” COVERS SYNCLIUM ITSELF. RATE-LIMIT COUNTERS (SALTED HASHES, 24H TTL) AND ANY UPSTREAM AI PROVIDER RETENTION APPLY PER THEIR OWN POLICIES — SEE DOCS.

    10OPEN MACHINE // NOT A BLACK BOX

    Read the machine before you trust it.

    Every adapter is three pure functions — import, export, validate — covered by golden-file matrices. MIT licensed. Extend it in a day.

    REPOSITORY // PACKAGES

    • packages/corecanonical AST · zod + JSON schema
    • packages/formats/ublreference dialect adapter
    • packages/formats/facturxCII adapter
    • packages/formats/zatcaFatoora adapter (wraps UBL)
    • packages/formats/registrydetect · convert · validate
    • packages/extractGemini · Claude · mock providers
    • packages/clioib convert / validate / extract
    • packages/apiFastify · OpenAPI · stateless
    • examples/fixtures + 554-field eval set
    import / export / validate — the only interface a new format must implement. Copy packages/formats/ubl, rename, register, ship.

    EVAL // 554 VERIFIED FIELDS

    • mock baseline100.0% · 554/554

      deterministic · CI-enforced

    • Gemini Flash96.9% · 537/554

      free tier · GEMINI_API_KEY

    • Claude 3.5 Sonnet97.8% · 542/554

      ANTHROPIC_API_KEY

    11 // THE SITE ENDS. THE MACHINE REMAINS.

    Cross the border.

    SYNCLIUM TERMINALLIVE ENGINE · /api/v1

    synclium v1.0 · stateless · mit

    type 'run' to compile INV-2026-088 → zatca