SYCTRA

Un documento non è testo. È un'impaginazione.

Il nostro motore non copia parole: ricostruisce le tabelle, recupera i dati dietro un grafico, restituisce le formule in LaTeX e rispetta l'ordine di lettura dei documenti a più colonne. Poi i campi entrano nel vostro ERP, e i casi dubbi vanno a un umano.

  • 22 famiglie di formati
  • Tabelle e grafici ricostruiti
  • Distribuibile al 100 % in locale

Why extraction fails exactly where it costs the most

Never on the clean documents. Always on the ones carrying the value.

01

The table becomes a soup of words

Most extractors flatten a table into a stream of words. Merged headers, propagated cells and blocks that start at C4 disappear — and with them the only thing you wanted to read.

02

The chart is not read at all

The figures driving the decision sit in a curve, not in a sentence. A conventional extractor returns the figure caption and stops there. The data stays locked inside the image.

03

The format changes with every sender

Thirty suppliers, thirty layouts, plus skewed scans and ZIP archives. Rigid templates break the moment a column moves, and the configuration starts over.

22 format families, one call

An unknown type does not fail: it falls back to text decoding if it is readable. Text, HTML, XML, CSV and spreadsheet formats are handled locally, with no API call and no cost.

FamilyExtensionsExtraction path
Digital PDFpdfOCR → Markdown per page, tables preserved; falls back to the text layer
Scanned PDFpdfFull OCR; batched for documents of 1,000+ pages, stitched back in order
Imagespng jpg jpeg gif webp bmp tiff heicVision model: transcription, tables and chart data
Worddocx docm dotx doc rtf odtLibreOffice → PDF → OCR, true layout; native fallback
PowerPointpptx pptm ppsx ppt pps odpLibreOffice → PDF → OCR, presenter notes included
Excelxlsx xlsm xls xlsb odsOne Markdown table per sheet, offset blocks re-framed
OpenDocumentodt ods odp odgLibreOffice → PDF → OCR
Web and markuphtml htm xhtml xmlClean text, scripts and styles stripped, entities decoded — local, $0
Text and codetxt md csv tsv json yaml toml ini py js ts java c cpp go rs sh sqlDirect decoding, instant — local, $0
BooksepubChapters in OPF spine order, offline
EmailemlHeaders, body (text preferred, HTML cleaned) and attachments listed
Audiomp3 wav m4a ogg flac aac opus amrffmpeg chunking → parallel transcription → timestamped transcript
Videomp4 mov webm avi mkv m4v mpeg wmvAudio track extracted then transcribed, absolute timestamps
ArchiveszipRecursive expansion: every inner file becomes a document

Zip-bomb guardrails (entry count, decompressed size, depth) and a 300 MB per-file limit, configurable.

From document received to data written

Every step can refuse to continue. That is what keeps doubtful data out of your system.

01 / 05

Capture and estimate

The document arrives by email, drop into a watched folder, scan or API call. Before any processing, a local estimate counts pages and type — no upload, no API call, free. On a batch of several thousand pages, that is how you know the bill before you trigger it.

What is rebuilt, not merely copied

That is the difference between readable text and usable data.

Complete tables

Markdown tables with headers merged across several rows, merged cells propagated, offset blocks re-framed — a table starting at C4 is found — and empty rows or columns purged.

The data behind a chart

For every chart: type, title, axis titles and units including rotated labels, full legend, and a table rebuilding the underlying data, one row per tick and one column per series. Values read off the scale are marked ≈.

Formulas as LaTeX

Scanned mathematics comes out as usable LaTeX, not as a typographic approximation.

Reading order respected

Multi-column documents are returned column by column, not line by line across the page — the difference between coherent text and scrambled text.

Handwriting and historical documents

Tested on real documents, down to degraded 19th-century cursive, with a dedicated profile that transcribes without modernising.

Multilingual, Arabic included

French, English and right-to-left Arabic. 96% recall on Arabic scans at our internal bench, where the public state of the art for Arabic PDF-to-Markdown plateaus around 65%.

Accuracy comes from vocabulary, not from the model

A vision model transcribes “Dig. 0.25 mg” far better when it knows it is reading a prescription. You describe the document before parsing it, and the context is added to the extraction prompt — never substituted for the rules.

ProfileWhat it primes
medicalGeneric and brand drug names, dosages (mg, µg, mL, IU, 1-0-1, bid, per os), lab tests and reference ranges, ICD codes, vital signs. Never normalises a dose.
financeLocale-aware thousands separators, currencies, negatives in parentheses, VAT/net/gross, debit/credit, depreciation, invoice references. Never recomputes a total.
legalArticle and paragraph references, statute and case-law citations, defined terms, standard formulas, numbering hierarchy preserved.
technicalAlphanumeric part references, tolerances (±0.05 mm), SI units, ISO/DIN/ASTM standards, wiring marks; 0/O, 1/l/I, 5/S, 8/B disambiguation.
academicAbstract, numbered sections, formulas as LaTeX, figure captions, citations and bibliography.
historicalPeriod handwriting, abbreviations and ligatures, long s (ſ), historical currencies, faded ink. Transcribes without modernising, marks the illegible [?].
administrativeLabelled fields, checkboxes with their state, case numbers, stamps, marginal annotations, empty fields flagged.

Measured effect on an 1831 apothecary's ledger with the historical profile: period accents restored, abbreviations expanded, long s preserved (ſoin, deſſus).

The engine is chosen per request. Including “no network”.

The costs below are for the same invoice, processed by each engine. You trade accuracy, price and sovereignty without changing a line of code.

EngineModeCost on the same invoice
Mistral smallManaged API$0.00040
Mistral mediumManaged API — handwriting and degraded documents$0.00288
Google GeminiManaged API$0.00020
OpenAIManaged API, your key$0.00405
OllamaLocal, on your machine$0
vLLM / GPU (Qwen2.5-VL)Local, on your GPU$0
PaddleOCR-VLLocal, vLLM$0
Hugging FaceManaged routermodel-dependent

Fully offline mode: with a local endpoint, text, HTML, XML, CSV, Office, Excel, images, EPUB, email and PDF are all processed without any data leaving the machine. Security contract: a URL you choose never receives the server's keys — with no key supplied, the key sent is empty.

What the bench says

Every figure comes from a reproducible bench on a deterministic corpus whose content is exactly known — not from an estimate.

recall on 20 of the 21 document families in the reference corpus
100%

recall on 20 of the 21 document families in the reference corpus

on right-to-left Arabic scans, against roughly 65% for the public state of the art
96%

on right-to-left Arabic scans, against roughly 65% for the public state of the art

per page in local mode: text, Office, images and PDFs processed without leaving your premises
$0

per page in local mode: text, Office, images and PDFs processed without leaving your premises

Questi ordini di grandezza derivano da ciò che misuriamo al pilota su perimetri comparabili. Sul vostro corpus vengono misurati prima dell'industrializzazione, non promessi prima.

Against Docling, on the same corpus

Ground-truth bench: a deterministic corpus whose content is exactly known, 21 document families, word / cell / reading-order recall metrics. Docling ran on CPU with its default pipeline.

MetricOur engineDocling
Files processed19 / 1917 / 19
Average score99.9%75.4%
Total time29 s258 s
Chart data recovered100%0%
Scanned formulas100%0%
Arabic scan (RTL)96%0%

In fairness: Docling stays fully local in its default configuration, while our best path calls a commercial OCR API — our local mode exists too, and is measured separately. The full corpus can be inspected document by document, source next to extracted Markdown.

Three SDKs, two deployment modes, one API

The SDK alone is enough to start: it calls the APIs directly and handles text, HTML, XML and CSV locally. The service unlocks office formats, audio and video, EPUB, huge PDFs, figure description and local models — and the SDK detects it automatically, falling back to direct mode if it is absent.

python
pip install z-parser-sdk

import zparser as zp

# 1. Know the cost before spending it — local, no API call, free.
est = zp.estimate("catalogue.pdf")
print(est)              # ~$0.7000 (175 page(s), ocr:mistral-ocr-latest)

# 2. Parse with business context: accuracy comes from vocabulary.
doc = zp.parse(
    "balance-sheet.pdf",
    domain="finance",
    context="Algerian balance sheet, amounts in DZD, SCF chart of accounts.",
)

print(doc.text)         # Markdown: tables, chart data recovered, LaTeX
print(doc.cost)         # 0.0533 — real cost, every unit included
print(doc.usage)        # breakdown of billed units
print(doc.cost_unpriced)  # flags any model with an unknown price

Never a 500 on a broken document: the service replies 200 with status "error", so a single file cannot break an ingestion pipeline. Cascading fallbacks — OCR unavailable, the text layer is kept; LibreOffice missing, the native parser takes over; vision fails, the OCR text stands.

Three flows, three treatments

01 · Contesto

The accounts team keys in three hundred invoices a month, arriving by email in around ten different layouts.

02 · Cosa mettiamo in atto

Automatic reading with the finance profile, field extraction, matching against ERP purchase orders, writing of compliant invoices and an exception queue for the rest.

03 · Risultato

Data entry disappears across most of the flow. The team handles discrepancies, with the document and the reason for doubt in front of them.

Cosa potete vedere funzionare fin da subito

Questi prodotti sono già costruiti. Alcuni sono accessibili online, gli altri si mostrano in dimostrazione su richiesta.

Demo online

CERFA

I tuoi moduli amministrativi compilati partendo dai tuoi documenti.

L'agente legge i tuoi fascicoli, precompila il modulo CERFA corrispondente e segnala le incoerenze tra i campi. Tu rileggi, firmi, e ti sei ripreso una mattinata.

Prova online
Su richiesta

Risposta ai bandi di gara

La tua relazione tecnica scritta sul tuo template.

L'agente legge il capitolato, recupera le tue referenze e scrive secondo la tua struttura e la tua identità. Passi dalla pagina bianca direttamente alla revisione.

Richiedi una demo

Domande frequenti

No. Extraction works by understanding the document, not by position on the page. That is what absorbs a new layout without reconfiguration, and what separates this from rigid templates.

A vision model reads the figure and rebuilds a table: one row per tick, one column per series, with the type, title, axes and their units, and the legend. Values read off the scale rather than labelled are marked ≈ — you can see what is certain and what is estimated.

It is first re-rendered at 300 dpi and re-read by a stronger model. If that is not enough, it goes to the exception queue with the reason. Uncertain data never enters the database: that rule is what makes the rest usable.

No, and that is the design point: a clean page is never re-read. On a standard printed corpus, escalation overhead is close to zero. And you can know the bill before triggering it anyway, since the estimate is local and free.

Yes. With a local vision endpoint — Ollama, vLLM on your GPU, PaddleOCR-VL — text, HTML, XML, CSV, Office, Excel, images, EPUB, email and PDF are all processed without any data leaving the machine, at zero cost per page.

96% recall on Arabic scans at our internal bench, where the public state of the art for Arabic PDF-to-Markdown plateaus around 65% on KITAB-bench. Right-to-left reading order is respected, including inside tables.

Via API where one exists: the service exposes parsing, rendering and figure-extraction endpoints, with Prometheus metrics for monitoring. Where the ERP has no API, the software pole builds the connector — often the real subject of the project.

The service replies 200 with an error status rather than a 500, so a single file cannot break your ingestion pipeline. Zip-bomb guardrails and a per-file size limit protect the service from booby-trapped archives.

Cosa questa soluzione non fa

We do not aim for zero human involvement, and we distrust anyone who promises it. On a real flow some items will always be ambiguous: our goal is that this share is identified and escalated, never written to the database unchecked. The engine never normalises a dosage and never recomputes a total — it transcribes what is written and flags what it could not read. And fully offline mode is slower and needs a GPU: we recommend it when sensitivity demands it, not on principle.

Which document defeats your current extractor?

Bring twenty, the ugliest included: skewed scans, tables with merged headers, charts with no data table. We will hand back the extracted Markdown and the real cost per page.