Architektura
Pět rozhodnutí, ze kterých plyne všechno ostatní. Popisují zamýšlený stav; co z toho už existuje v kódu, je na roadmapě.
Pět rozhodnutí
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
Výsledky extrakce jsou content-addressed a cachované
Dokument je identifikovaný SHA-256 svých bajtů a výsledek extrakce je uložený proti tomuto hashi. Přehrání projekce znovu použije cache a nespustí OCR ani LLM. Bez toho by každá oprava projektoru stála celý backfill znovu.
Detail
Confidence je plnohodnotné pole, ne řádek v logu
Každá vytěžená hodnota nese skóre spolehlivosti, použitou metodu a stránku dokumentu. Pod prahem nejde do projekce, ale do fronty lidské kontroly — u vysokých nominálů je práh přísnější.
Detail
Jeden zapisovatel, mnoho čtenářů
Feed vlastní vždy právě jeden poller, držený leasem v Redisu s TTL; lease po mrtvém držiteli vyprší a je převzatý. Všechno ostatní čte projekci, takže záruky uspořádání zůstávají triviální a škálování je otázkou jen na straně čtenářů.
Detail
Z dokumentu na údaj, a co když to selže
OCR + LLM extrakce do schématu
Klasické OCR na formulářích přihlášek selhává. Pipeline kombinuje OCR a multimodální extrakci do deklarovaného JSON schématu, výsledek validuje a teprve pak zapisuje.
Detail
Chování při selhání
Selhání zdroje, pád uprostřed dávky ani nejistá extrakce nesmí skončit zápisem nesprávného stavu. Každý z těchto případů má předem určené chování a žádné z nich se nepřevádí na negativní výsledek.
Detail
Co musí přežít incident
Replika a úložiště dokumentů. Všechno ostatní je odvozené a znovu postavitelné. Zálohovací politika neplyne z ničeho jiného než z téhle věty.