01 Problém
Provozní tým z oblasti cestovního ruchu plánoval směny ručně v tabulkách. Pravidla o odpočinku, kvalifikacích, svátcích a férovosti existovala jen v hlavách lidí, takže každý plán trval hodiny a rozpadl se, kdykoli někdo vypadl.
02 Co aplikace dělá
- Automaticky generuje rozpisy pomocí Google OR-Tools CP-SAT; tvrdá pravidla i měkké preference jsou zapsané jako omezení.
- Webová administrace pro plánovače: zaměstnanci, dostupnost, pravidla, kontrola plánu a ruční úpravy.
- Nativní Flutter aplikace, kde zaměstnanci vidí směny a zadávají dostupnost.
- Export do XLSX, PDF a iCal; české státní svátky se řeší automaticky.
03 Architektura
- 01 MobileFlutter aplikace s generovaným Dart (dio) API klientem
- 02 AdminNext.js administrace v monorepu se sdíleným balíčkem API klienta
- 03 APIFastAPI, SQLAlchemy 2, Argon2 + přihlášení Googlem
- 04 SolverModel OR-Tools CP-SAT jako izolovaný, testovaný modul
- 05 DataPostgreSQL s migracemi Alembic
- 06 OpsNasazení přes Docker + Compose, samostatný QA image pro review
04 Technologie
FastAPIPython 3.12OR-Tools CP-SATPostgreSQLSQLAlchemyAlembicNext.jsFlutterDocker
05 Jak jsem pracoval s AI
Omezení solveru jsem nejdřív ručně sepsal jako pravidla v běžném jazyce s příklady. Agenti je pak implementovali po jednom, každé s vlastním testem. OpenAPI schéma generuje Dart klienta, takže agenti na frontendu pracují proti kontraktu a nehádají.
06 Co je ověřené
- CP-SAT solver implementovaný s vlastní sadou testů.
- Backend: 23 souborů pytest; frontendové monorepo: 29 testovacích souborů.
- 12 migrací Alembic, Docker image a nasazení přes Compose.
07 Upřímné poznámky
- Vzniklo pro konkrétního klienta, jehož název neuvádím. CI pipeline zatím chybí, testy se spouští lokálně.