Intent: Rozvrh + substituce
Status: Implemented (seed-only — bez UI editace) · Updated: 2026-05-13
Problém
Rozvrh je páteř třídnice — bez něj day view neví co učitel učí, week view nemá co zobrazit. Sofie škola má 2 třídy, ~3-5 učitelů, ~6 předmětů, weekly recurrence Po-Pá. Rozvrh se mění zřídka (jednou za pololetí). Naopak substituce (jeden učitel za druhého) se mohou stát kdykoli během dne a musí být dohledatelné. Zároveň: rozvrh musí být jediný zdroj pravdy o tom, kdy se co učí — z něj vychází docházka, témata, day/week view.
Kdo to chce + jak ho poznáme
- Primární role:
teacher(čte rozvrh, dělá substituce),director(zakládá rozvrh — UI mimo MVP) - Stakeholder: Tomáš
- Kontext použití: rozvrh čte učitel kdykoli; substituci dělá učitel jednorázově v okamžiku „beru tu hodinu místo kolegyně"
Definice úspěchu
-
schedule_slotsmá weekly grid (class × day_of_week × slot_order) s časy + subject +default_teacher_id. Unique(class_id, school_year_id, day_of_week, slot_order). - Slot bez záznamu v daný konkrétní den = prázdný (gray dashed); záznam o tom, že hodina proběhla, je v
classbook_entries. -
classbook_entries.taught_byukazuje, kdo hodinu skutečně učil. Pokudtaught_by != default_teacher_id→ substituce. - Akce „Beru si hodinu" (
takeOverLesson) přepíšetaught_byna current user. Žádné UI pro plánované substituce dopředu. - Slot mimo
schedule_slotsnelze ad-hoc zaznamenat (žádné „přidat hodinu k existujícímu dnu" z UI; jen seedované sloty).
Out-of-scope
- Editace rozvrhu z UI (dnes manuálně v Supabase / migrace).
- Plánované budoucí substituce („zítra mě zastupuje X").
- Konflikty rozvrhu (učitel ve 2 třídách současně) — řešeno tím, že
class_staffpřiřazuje učitele k oběma třídám; UI je nezakazuje. - Multi-school rozvrhy (Sofie = jedna škola).
- Učební bloky napříč sloty („dvouhodinovka") — každý slot je samostatný.
- Vyrovnávací úvazek / pracovní výkaz (kancelářská feature, Fáze 2+).