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 onlineIl 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.
Never on the clean documents. Always on the ones carrying the value.
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.
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.
Thirty suppliers, thirty layouts, plus skewed scans and ZIP archives. Rigid templates break the moment a column moves, and the configuration starts over.
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.
| Family | Extensions | Extraction path |
|---|---|---|
| Digital PDF | pdf | OCR → Markdown per page, tables preserved; falls back to the text layer |
| Scanned PDF | pdf | Full OCR; batched for documents of 1,000+ pages, stitched back in order |
| Images | png jpg jpeg gif webp bmp tiff heic | Vision model: transcription, tables and chart data |
| Word | docx docm dotx doc rtf odt | LibreOffice → PDF → OCR, true layout; native fallback |
| PowerPoint | pptx pptm ppsx ppt pps odp | LibreOffice → PDF → OCR, presenter notes included |
| Excel | xlsx xlsm xls xlsb ods | One Markdown table per sheet, offset blocks re-framed |
| OpenDocument | odt ods odp odg | LibreOffice → PDF → OCR |
| Web and markup | html htm xhtml xml | Clean text, scripts and styles stripped, entities decoded — local, $0 |
| Text and code | txt md csv tsv json yaml toml ini py js ts java c cpp go rs sh sql | Direct decoding, instant — local, $0 |
| Books | epub | Chapters in OPF spine order, offline |
eml | Headers, body (text preferred, HTML cleaned) and attachments listed | |
| Audio | mp3 wav m4a ogg flac aac opus amr | ffmpeg chunking → parallel transcription → timestamped transcript |
| Video | mp4 mov webm avi mkv m4v mpeg wmv | Audio track extracted then transcribed, absolute timestamps |
| Archives | zip | Recursive expansion: every inner file becomes a document |
Zip-bomb guardrails (entry count, decompressed size, depth) and a 300 MB per-file limit, configurable.
Every step can refuse to continue. That is what keeps doubtful data out of your system.
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.
Native PDFs are read directly; scans go through optical recognition tolerant of skewed, stained or low-resolution documents. Documents over a thousand pages are batched then stitched back in order. Tables are rebuilt as tables, not flattened into a stream of words.
Any page whose OCR looks weak — empty, gibberish, too few real words — is re-rendered at 300 dpi and re-read by a stronger vision model. Two guardrails: a clean page is never re-read, so the overhead is near zero on a printed corpus; and vision text only replaces OCR if it recovers more content. The output can never get worse.
Headers merged across several rows, propagated cells, offset blocks re-framed, empty rows and columns purged. Every figure is read by a vision model and described on its page — full-page scans are excluded automatically, never re-read twice. Scanned mathematics comes out as LaTeX, and multi-column documents are returned column by column.
Values are verified against each other and against your reference data: does the supplier exist, does the total match the lines, is the order reference valid. Compliant documents go into the ERP, CRM or business tool via API. Doubtful cases land in a human queue, with the document, the extracted fields and the precise reason for the doubt.
That is the difference between readable text and usable data.
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.
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 ≈.
Scanned mathematics comes out as usable LaTeX, not as a typographic approximation.
Multi-column documents are returned column by column, not line by line across the page — the difference between coherent text and scrambled text.
Tested on real documents, down to degraded 19th-century cursive, with a dedicated profile that transcribes without modernising.
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%.
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.
| Profile | What it primes |
|---|---|
medical | Generic 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. |
finance | Locale-aware thousands separators, currencies, negatives in parentheses, VAT/net/gross, debit/credit, depreciation, invoice references. Never recomputes a total. |
legal | Article and paragraph references, statute and case-law citations, defined terms, standard formulas, numbering hierarchy preserved. |
technical | Alphanumeric part references, tolerances (±0.05 mm), SI units, ISO/DIN/ASTM standards, wiring marks; 0/O, 1/l/I, 5/S, 8/B disambiguation. |
academic | Abstract, numbered sections, formulas as LaTeX, figure captions, citations and bibliography. |
historical | Period handwriting, abbreviations and ligatures, long s (ſ), historical currencies, faded ink. Transcribes without modernising, marks the illegible [?]. |
administrative | Labelled 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 costs below are for the same invoice, processed by each engine. You trade accuracy, price and sovereignty without changing a line of code.
| Engine | Mode | Cost on the same invoice |
|---|---|---|
| Mistral small | Managed API | $0.00040 |
| Mistral medium | Managed API — handwriting and degraded documents | $0.00288 |
| Google Gemini | Managed API | $0.00020 |
| OpenAI | Managed API, your key | $0.00405 |
| Ollama | Local, on your machine | $0 |
| vLLM / GPU (Qwen2.5-VL) | Local, on your GPU | $0 |
| PaddleOCR-VL | Local, vLLM | $0 |
| Hugging Face | Managed router | model-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.
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
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
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.
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.
| Metric | Our engine | Docling |
|---|---|---|
| Files processed | 19 / 19 | 17 / 19 |
| Average score | 99.9% | 75.4% |
| Total time | 29 s | 258 s |
| Chart data recovered | 100% | 0% |
| Scanned formulas | 100% | 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.
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.
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 pricenpm install z-parser
import { parse } from 'z-parser';
const doc = await parse('prescription.jpg', {
domain: 'medical', // primes drug names, dosages, reference ranges
visionProvider: 'mistral',
});
console.log(doc.text);
console.log(doc.cost);
// Zero dependencies, TypeScript types shipped, CLI included.# Fully offline: no data leaves the machine.
# Text, HTML, XML, CSV, Office, Excel, images, EPUB, email AND PDF.
doc = zp.parse(
"patient_file.pdf",
doc_vision=True,
vision_base_url="http://internal-gpu:8000/v1", # vLLM, Qwen2.5-VL
)
print(doc.cost) # 0.0 — local engine, nothing billed
# Security contract: a URL you choose never receives the
# server's keys. With no key supplied, the key sent is empty.docker run -d -p 4056:4056 -e MISTRAL_API_KEY=xxx yatchiyax/z-parser
# file -> {status, kind, parser, num_chars, usage, text}
curl -F file=@invoice.pdf http://localhost:4056/v1/parse
# Office -> displayable PDF (page N = slide N)
curl -F file=@deck.pptx http://localhost:4056/v1/render -o deck.pdf
# PDF -> extracted figures (artwork / page / embedded)
curl -F file=@report.pdf http://localhost:4056/v1/images
# monitoring
curl http://localhost:4056/healthz
curl http://localhost:4056/metrics # Prometheus metricsNever 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.
The accounts team keys in three hundred invoices a month, arriving by email in around ten different layouts.
Automatic reading with the finance profile, field extraction, matching against ERP purchase orders, writing of compliant invoices and an exception queue for the rest.
Data entry disappears across most of the flow. The team handles discrepancies, with the document and the reason for doubt in front of them.
Fifteen years of technical sheets, standards and calculation notes, many of them scans, with the values locked inside tables and charts.
Recovery of the legacy estate with the technical profile, table reconstruction and chart-data recovery, structured extraction into a usable table.
Technical data becomes queryable again, including values that existed only as a curve in a scanned PDF.
Reports and prescriptions contain dosages nobody will allow to transit through an external service.
Local deployment with a self-hosted vision model and the medical profile, priming drug names, dosages and reference ranges without ever normalising a dose.
Extraction runs on the premises, at zero cost per page, with a vocabulary that makes dosage transcription reliable.
Questi prodotti sono già costruiti. Alcuni sono accessibili online, gli altri si mostrano in dimostrazione su richiesta.
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 onlineLa 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 demoNo. 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.
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.
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.