Kým marketingová stránka AI fakturácie hovorí v sloganoch, technický rozbor ukazuje konkrétne mechanizmy. Tento článok rozkladá ako 1FAKTURA (a podobní cloudoví poskytovatelia) extrahujú dáta z prijatej PDF faktúry — od momentu, keď používateľ uploadne PDF, až po štruktúrované polia v databáze.
Stručná odpoveď
Moderný AI OCR pipeline pre PDF faktúru má 5 krokov:
- PDF → obraz (rendering prvých 1 – 3 strán cez
pdfjs-dist) - Obraz → AI vision model (typicky OpenAI GPT-4 Vision)
- AI prompt s slovenským kontextom (sadzby, sekcie, formát IČ DPH)
- JSON Schema validácia (Zod schema pre extrahované polia)
- Fallback na Tesseract OCR pri zlyhaní AI volania
Presnosť na typických slovenských PDF faktúrach: 90 – 95 %. Cena za extrakciu: €0,01 – €0,03 / PDF. Latencia: 2 – 5 sekúnd.
Krok 1 — PDF → obraz
PDF nie je obraz, je to vektorový dokument s textovou vrstvou (väčšinou). Ale AI vision modely očakávajú obraz, nie PDF. Konverzia:
import * as pdfjs from "pdfjs-dist";
async function pdfToImages(pdfBuffer: Buffer): Promise<Buffer[]> {
const pdf = await pdfjs.getDocument({ data: pdfBuffer }).promise;
const images: Buffer[] = [];
for (let i = 1; i <= Math.min(pdf.numPages, 3); i++) {
const page = await pdf.getPage(i);
const viewport = page.getViewport({ scale: 2.0 }); // 2x zoom for OCR quality
const canvas = createCanvas(viewport.width, viewport.height);
const ctx = canvas.getContext("2d");
await page.render({ canvasContext: ctx, viewport }).promise;
images.push(canvas.toBuffer("image/png"));
}
return images;
}
Prečo prvé 1 – 3 strany: typická slovenská faktúra má 1 – 2 strany (hlavička, položky, súčty, päta). Posielanie všetkých strán zbytočne zvyšuje cenu AI volania. 3 strany sú dostatočný strop aj pre dlhšie faktúry s 20+ položkami.
Prečo 2x zoom: AI vision modely lepšie rozpoznávajú text na vyššom rozlíšení. 2x zoom je kompromis medzi presnosťou a veľkosťou súboru posielaného do API.
Krok 2 — Obraz → AI vision model
API volanie na OpenAI:
const response = await openai.chat.completions.create({
model: "gpt-4o", // alebo "gpt-4-vision-preview"
messages: [
{ role: "system", content: SLOVAK_INVOICE_EXTRACTION_PROMPT },
{
role: "user",
content: images.map((img) => ({
type: "image_url",
image_url: { url: `data:image/png;base64,${img.toString("base64")}` },
})),
},
],
response_format: { type: "json_object" },
temperature: 0, // determinizmus pre extrakciu
});
Kľúčové parametre:
model: "gpt-4o"— vlajková multi-modálna verzia s lacnou cenou. Pre náročnejšie use casygpt-4o(presnejšia, drahšia).response_format: { type: "json_object" }— donucuje AI vrátiť validný JSON. Bez toho dostávate text, ktorý treba parsovať.temperature: 0— zero temperature = deterministická extrakcia. Pre kreatívne úlohy (texts generation) by sme zvolili vyššiu.
Cena: pri vstupe 2-stránkovej faktúry v 2x zoom (~50 KB každý obraz) a typickom výstupe ~500 tokenov je cena za volanie cca $0.01 – $0.03.
Krok 3 — Prompt engineering pre slovenský kontext
Generický globálny AI nevie odpovedať na slovenskú špecifiku (sadzby 23/19/5/0, IČ DPH formát SK + 10 cifier, § 69 ods. 12). Tu prichádza prompt engineering — pridáme do system prompts slovenský účtovný kontext.
Náš interný SLOVAK_INVOICE_EXTRACTION_PROMPT (zjednodušený):
Si AI asistent pre slovenský fakturačný systém. Extrahuj polia
z PDF faktúry. Vráť JSON s týmito poľami:
{
"supplier": {
"name": "string",
"ico": "8 cifier alebo null",
"ic_dph": "SK + 10 cifier alebo null",
"address": "string alebo null"
},
"customer": { ... rovnaká štruktúra ... },
"invoice_number": "string",
"issue_date": "YYYY-MM-DD",
"due_date": "YYYY-MM-DD alebo null",
"items": [
{ "description": "string", "quantity": "number", "unit_price": "number", "vat_rate": 0|5|19|23 }
],
"total_base": "number",
"total_vat": "number",
"total_gross": "number",
"currency": "EUR | CZK | USD | ..."
}
Pravidlá:
1. IČ DPH SK má vždy tvar "SK" + 10 cifier. Ak nemá, vráť null.
2. IČO má 8 cifier. Ak nie, vráť null.
3. DPH sadzba je vždy 23, 19, 5 alebo 0. Ak nie je jednoznačné, vráť null.
4. Pri ručne písanom alebo nečitateľnom poli vráť null - NEPOKÚŠAJ SA ODHADNÚŤ.
5. Dátumy v tvare YYYY-MM-DD. Slovenské "16.5.2026" → "2026-05-16".
6. Sumy ako number, nie string. Decimal separator je bodka.
7. Sekcie kontrolného výkazu (A1, A2, B1, B2, C1, C2) NEEXTRAHUJ - to je
účtovník priradí.
Slovenský kontext:
- Sadzba 23 % je štandard
- 19 % pre reštaurácie, ubytovanie, alkohol (príloha 7a zákona o DPH)
- 5 % pre potraviny, knihy, lieky (príloha 7)
- 0 % pre vývoz mimo EÚ (§ 47), intra-EÚ B2B (§ 43), reverse charge (§ 69/12)
S týmto prompt-om je presnosť pre slovenské faktúry 90 – 95 %. Bez slovenského kontextu by bola 60 – 70 % (AI by sa pomýlila na sadzbách, formáte IČ DPH, slovenských menách mesiacov).
Pre detail formátu UBL XML, ktorý sa od 1. 1. 2027 stane povinný, pozri ako vystaviť e-faktúru v UBL.
Krok 4 — JSON Schema validácia
AI niekedy vráti JSON s nesprávnymi typmi (string namiesto number, ISO formát namiesto Slovak formátu). Validácia cez Zod:
import { z } from "zod";
const InvoiceSchema = z.object({
supplier: z.object({
name: z.string(),
ico: z.string().regex(/^\d{8}$/).nullable(),
ic_dph: z.string().regex(/^SK\d{10}$/).nullable(),
address: z.string().nullable(),
}),
customer: z.object({ ... }),
invoice_number: z.string(),
issue_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
due_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).nullable(),
items: z.array(z.object({
description: z.string(),
quantity: z.number(),
unit_price: z.number(),
vat_rate: z.union([z.literal(0), z.literal(5), z.literal(19), z.literal(23)]),
})),
total_base: z.number(),
total_vat: z.number(),
total_gross: z.number(),
currency: z.enum(["EUR", "CZK", "USD", "GBP", "PLN", "HUF"]),
});
const validated = InvoiceSchema.safeParse(JSON.parse(aiResponse));
if (!validated.success) {
// AI vrátila zle, fallback na Tesseract alebo notifikuj používateľa
}
Pri neúspechu Zod validácie spadneme na fallback workflow — používateľ dostane „AI extrakcia zlyhala, prosím vyplň polia manuálne", a my pošleme telemetric event do nášho monitoringu pre tréning lepších promptov.
Pre Zod patterny v slovenskom kontexte pozri náš bezplatný UBL validátor, ktorý použiva podobnú validáciu pre UBL 2.1 XML schémové polia.
Krok 5 — Fallback na Tesseract
Pri zlyhaní AI volania (timeout, rate limit, JSON parse error) sa pipeline prepne na Tesseract OCR + regex pravidlá:
import Tesseract from "tesseract.js";
async function fallbackExtract(image: Buffer) {
const { data: { text } } = await Tesseract.recognize(image, "slk+eng+ces");
// Regex extrakcia: IČO, IČ DPH, sumy, dátum
const ico = text.match(/IČO[:\s]*(\d{8})/)?.[1];
const icDph = text.match(/IČ DPH[:\s]*(SK\d{10})/)?.[1];
const issueDate = text.match(/(\d{1,2}\.\s*\d{1,2}\.\s*\d{4})/)?.[1];
// ...
return { ico, icDph, issueDate };
}
Tesseract presnosť: 60 – 75 % (proti 90 – 95 % AI vision). Ale: zadarmo, rýchlejšie (1 – 2 sek vs 2 – 5 sek), bez závislosti na externom API. Pre vysokoobjemových používateľov je Tesseract dlhodobo udržateľnejší.
V 1FAKTURE používame hybridný režim: AI volanie pre kvalitu, Tesseract ako fallback. Používateľ vidí extrakciu rovnako, len zadná logika sa líši.
Presnosť per pole typu
Pri benchmark teste na 500 slovenských PDF faktúrach (zber z reálnej produkčnej prevádzky 1FAKTURY) sme namerali:
| Pole | AI presnosť | Tesseract presnosť | |---|---|---| | supplier.ico | 96 % | 78 % | | supplier.ic_dph | 94 % | 65 % | | invoice_number | 92 % | 70 % | | issue_date | 95 % | 80 % | | total_base | 93 % | 60 % | | total_vat | 91 % | 55 % | | vat_rate (správna sadzba) | 88 % | 45 % | | items[].description | 75 % | 50 % | | items[].quantity | 80 % | 55 % |
Najťažšie pole pre AI: vat_rate — vyžaduje pochopenie kontextu (rovnaký dodávateľ môže fakturovať rôzne sadzby podľa tovaru). Najľahšie: supplier.ico a issue_date — sú vždy v predvídateľnom mieste faktúry.
Náklady a cenové optimalizácie
Pre slovenský trh sú typické náklady AI extrakcie:
| Mesačný objem | Náklad AI volaní | % z mesačnej licencie SaaS | |---|---|---| | 50 PDF | €0,50 – €1,50 | 3 – 8 % | | 200 PDF | €2 – €6 | 8 – 20 % | | 1 000 PDF | €10 – €30 | 30 – 100 % | | 5 000 PDF | €50 – €150 | 100 % + |
Pri objeme nad 1 000 PDF mesačne sa AI náklady stávajú významné. Cloudoví poskytovatelia toto riešia 3 prístupmi:
- Hybridný režim (AI pre prvý pokus, Tesseract pre vysokoobjemových)
- Cachovanie podobných dodávateľov (rovnaký dodávateľ s rovnakým layoutom = AI volanie len pri prvej faktúre, ostatné cez regex extrakciu)
- Custom enterprise tarifa s extra AI poplatkami
Pre detail nákladov AI vo fakturácii pozri AI a slovenská fakturácia 2027 prehľad.
Privacy & GDPR
Pri AI extrakcii sa PDF posiela do OpenAI API. To znamená:
- OpenAI je sub-procesor vašich dát podľa GDPR článku 28
- OpenAI DPA (Data Processing Addendum) deklaruje, že vstupy z API neukladá pre tréning modelov ani neuchováva nad rámec 30 dní pre abuse monitoring
- EU/SK dáta locality je obmedzená — OpenAI primárne hostuje v US (s EU regiónom v beta od 2024)
Pre vysokokriticky citlivé dokumenty (zmluvy s NDA, štátne zákazky) odporúčame:
- Vypnúť AI OCR v nastaveniach 1FAKTURY
- Robiť manuálny import s ručným vyplnením polí
- Alebo využiť self-hosted Tesseract len (žiadne dáta neopúšťajú EÚ servery)
Budúce smerovanie 2027 – 2028
On-premise / self-hosted AI
Otvorené modely (Llama 3.3 70B Vision, Qwen2-VL 72B) dosahujú v 2026 cca 80 – 88 % presnosť na slovenských PDF faktúrach — zatiaľ pod OpenAI GPT-4o úrovňou, ale s plnou data-locality kontrolou. V 2027 očakávame zlepšenie na 90 %+, kedy bude self-hosted AI rovnocenná alternatíva pre privacy-conscious zákazníkov.
Multi-modálne AI
GPT-5 a nasledujúce modely budú spracúvať PDF + tabuľky + obrázky + chatovú konverzáciu v jednom volaní. Pre fakturáciu to znamená, že môžete poslať e-mailovú konverzáciu s klientom + priloženú faktúru a AI extrahuje obojaké do štruktúrovaných dát.
Realtime extraction
V 2027 očakávame, že GPT-realtime API (audio + vision v reálnom čase) umožní scan QR PAY kódu mobilom + AI okamžite extrahuje faktúru za sekundy bez čakania na batch processing.
Súvisí
Pre prehľad AI funkcií v 1FAKTURE pozri AI faktúra hub. Pre širší kontext AI vo fakturácii pozri AI a slovenská fakturácia 2027. Pre detail UBL formátu pre rok 2027 (kde AI bude generovať validné UBL XML) pozri ako vystaviť e-faktúru v UBL a UBL validátor. Pre kontext zákona pozri sprievodcu e-faktúrou 2027.