Dokumentace

Architektura

Aplikace je jedna Next.js instance s hexagonální architekturou: business logika je izolovaná v jádru a s okolním světem mluví přes rozhraní.

src/appNext.js stránky a API,tenká vrstva: načti,deleguj, vykreslisrc/dependencyDI kontejner, drátováníslužeb a adaptérů,žádná logikasrc/coreveškerá business logika:scheduler, cykly, kancelář,lhůty, gateports (rozhraní)IRoutingProvider, IOutputRepository…src/infrastructureExcel, Mapy.cz, soubory,LLM klienti: implementaceportů z coreŠipky ukazují směr závislostí. Core nezná Excel, síť ani framework, závisí jen na vlastních portech.

Proč to tak je

Jádro (src/core) obsahuje všechna plánovací rozhodnutí a neimportuje nic z okolních vrstev: žádný Excel, žádné API, žádný framework. Místo toho definuje porty, tedy rozhraní jako IRoutingProvider nebo IOutputRepository, a infrastruktura (src/infrastructure) je implementuje: čtení a zápis Excelů, Mapy.cz routing s perzistentní cache, ukládání výsledků, LLM klienti.

Díky tomu běží testy jádra bez sítě a bez souborů: místo Mapy.cz se použije výpočet vzdušnou čarou, místo Excelu data v paměti. Stejná pravidla, která rozhodují v produkci, se testují na syntetických scénářích s předem známým správným výsledkem.

Kontejner (src/dependency) je jediné místo, kde se služby spojují s konkrétními implementacemi. Aplikační vrstva (src/app, tenhle web) je tenká: vezme data ze služby a vykreslí je, sama nikdy nerozhoduje o plánu.

Tok jednoho požadavku

Stránka nebo API route přijme požadavek
Zvaliduje vstup (datum) a sáhne do kontejneru pro službu.
Služba v core provede rozhodnutí
Například ElinService: horizont, backlog, cykly, kancelář, vkládání, návrhy, gate. Vše podle konfigurace, deterministicky.
Infrastruktura obslouží vstupy a výstupy
Čtení Excelů, dotazy na Mapy.cz, zápis výsledku do out/ a do návrhového XLSX.
Aplikace vykreslí výsledek
Kontrolní přehled čte uložený výsledek běhu a jen ho zobrazuje.