Výsledky extrakce jsou content-addressed a cachované
Tohle není optimalizace. Je to podmínka, bez které by event sourcing v tomhle produktu nefungoval — protože přehrání logu se vyplatí jen tehdy, když nestojí znovu všechny peníze za OCR a LLM.
- Klíč cache
- SHA-256 dokumentu plus verze extraktoru
- Přehrání projekce
- čte cache, nestahuje a nespouští OCR ani LLM
- Invalidace
- zvýšením verze extraktoru, selektivně podle typu dokumentu
- Stav
- plánováno (fáze 1: úložiště dokumentů, OCR, extrakce)
Ekonomika opravy
Bez cache by přehrání projekce znamenalo znovu vytěžit každý dokument. U backfillu v rozsahu celého rejstříku je to náklad, který se neschvaluje kvůli jedné opravené interpretaci pole.
Důsledek není, že se opravy zdraží. Důsledek je, že se přestanou dělat: tým odloží opravu chyby v datech na později a data tiše zestárnou do stavu, kterému nikdo nevěří. Levné přehrávání je jediná obrana proti tomuhle scénáři.
Adresování obsahem
Identita dokumentu není URL ani pořadové číslo v řízení, ale hash jeho bajtů. Tentýž dokument stažený znovu — nebo publikovaný ve dvou řízeních — se rozpozná jako už známý a nezpracovává se podruhé.
Zároveň tím zůstává stabilní odkaz, na kterém stojí provenience: hodnota ukazuje na hash a stránku, a ten odkaz přežije i opakované stažení.
%% title: Stádia dokumentové pipeline
%% caption: Dokument je adresovaný hashem obsahu a výsledek extrakce se cachuje podle hashe a verze extraktoru. Neprošlá kontrola citace nebo částky pošle pohledávku ke kontrole bez ohledu na ostatní. Dnes jen pro přihlášky; obecná klasifikace typu dokumentu, čtení rozvržení stránky a skóre po jednotlivých polích zatím postavené nejsou.
flowchart LR
A["Stažení<br/>adresováno obsahem"] --> H{"Hash<br/>už známý?"}
H -- "ano" --> C[("Cache<br/>SHA-256 + verze extraktoru")]
H -- "ne" --> B["Výběr dokumentu<br/>typ události a oddíl"]
B --> O["Text stránky<br/>vrstva nebo OCR"]
O --> E["Extrakce modelem<br/>do JSON schématu"]
E --> V{"Validace<br/>citace, částky,<br/>součty, IČO"}
V -- "selhala" --> Q["Fronta kontroly"]
V -- "prošla" --> S{"Skóre<br/>po dílčí pohledávce"}
S -- "pod prahem" --> Q
S -- "nad prahem" --> W[("Zápis s proveniencí<br/>dokument, stránka, skóre")]
E -.-> C
click A href "/roadmap/dokumentova-pipeline" "Dokumentová pipeline"
click C href "/architecture/vysledky-extrakce-jsou-cachovane" "Výsledky extrakce jsou cachované"
click E href "/architecture/ocr-a-llm-extrakce-do-schematu" "OCR + LLM extrakce do schématu"
click O href "/architecture/ocr-a-llm-extrakce-do-schematu" "OCR + LLM extrakce do schématu"
click V href "/docs/extrakce" "Extrakce"
click S href "/architecture/confidence-je-plnohodnotne-pole" "Confidence je plnohodnotné pole"
click Q href "/roadmap/fronta-lidske-kontroly" "Fronta lidské kontroly"
click W href "/about/cislo-bez-zdroje-neni-udaj" "Číslo bez zdroje není údaj"
class A st-in_progress
class Q st-in_progress
Barva uzlu je stav položky na roadmapě: Rozpracováno
Invalidace je záměrná, ne plošná
Klíč cache obsahuje i verzi extraktoru. Nová verze tak zneplatní jen to, co skutečně změnila — typicky jeden typ dokumentu — a zbytek se dál čte z cache.
Plošné vyhození cache je operace s cenou celého backfillu a zachází se s ní podle toho.
Kde to v repozitáři žije
docs/EXTRACTION.md— stádia pipeline a proč je cache architektonické rozhodnutídocs/ARCHITECTURE.md— úložiště, jejich znovupostavitelnost a záložní politikadocs/runbooks/replay.md— runbook přehrání projekce z logu
Souvisí
Event sourcing, protože zdroj je event stream
Systém je konzumentem oficiálního proudu událostí. Z něj staví lokální append-only repliku a z ní přehrává projekci aktuálního stavu. Oprava chyby v interpretaci znamená přehrát log, ne znovu stahovat rejstřík.
Detail
Dokumentová pipeline je oddělená od příjmu
Příjem je levný, rychlý a musí stíhat rejstřík. Extrakce je drahá, pomalá a občas potřebuje člověka. Spojit je znamená zpomalit příjem na rychlost nejpomalejšího skenu, proto jsou to dvě fronty s vlastními limity.
Detail
Dokumentová pipeline
RozpracovánoStahování do content-addressed úložiště, OCR, extrakce do deklarovaného schématu, validace a skóre spolehlivosti — dnes pro přihlášky, zprávy o přezkumu zatím ne. Výsledky jsou cachované podle hashe dokumentu a verze extraktoru, takže přehrání projekce nic nestojí.
Detail