roosterwijs/ROADMAP.md

143 lines
No EOL
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Roosterwijs — Roadmap / backlog
Geplande verbeteringen, gegroepeerd. `[ ]` = nog te doen, `[x]` = klaar.
Afgeronde fases (05) staan in `README.md`. Dit bestand bevat het werk dat nog
volgt.
## Fase 6 — Rooster bewerken (snel & overzichtelijk)
- [x] **Blokken kopiëren** naar andere tijden en dagen (via het bewerkpaneel naar
meerdere tijdsloten tegelijk).
- [x] **Blok aanpassen bij klik**: klik op een blok in de Roostermaker opent een
bewerkpaneel.
- [x] **Snelle inline-aanpassing per blok**: vak/activiteit, locatie, doelgroep
(groep/subgroep/leerling), begeleiders en opmerking wijzigen in het paneel.
- [x] Vanuit de Roostermaker (tab **Indeling**) direct **subgroepen aanmaken**
onder een hoofdgroep, met verantwoordelijke(n) — kolomsgewijs overzicht
van subgroepen, vakken en wie verantwoordelijk is.
- [x] **Sneltoetsen** in de Roostermaker: N (nieuw blok), ←/→ (week terug/vooruit),
T (deze week), Esc (paneel/sluiten); met hint.
- [x] **Rol van een begeleider zichtbaar** in de Roostermaker: afkorting (LK/PO/KO)
bij de begeleider in een blok en de volledige rol bij het toewijzen.
- [x] **Vak-wizard** (module `blokwizard`, default uit; verschijnt als tab in de Roostermaker): stap-voor-stap vak →
voor wie → wanneer/waar (+periode) → begeleiders → controle → inplannen.
- [x] **Personen-wizard + import** (module `personenwizard`, default uit; tab onder Personen):
leerling/medewerker enkel toevoegen óf in bulk via plakken/CSV (komma,
puntkomma of tab; koprij optioneel) met preview; endpoint /api/personen-import/.
## Fase 6 — Overzicht & navigatie
- [~] **Alle klassen verwerkbaar in het rooster**, overzichtelijk gemaakt — een
**scope-filter** (per klas/leerplein/leerling/personeel) is toegevoegd in
Rooster en Roostermaker; een vast **per-leerplein-overzicht** kan nog volgen.
- [x] **Snelmenu** per klas én per bovenliggende groep (chips in Rooster én Roostermaker) om direct dat rooster te tonen.
- [x] **Schooljaar uit het hoofdmenu** halen en **onder Rooster** plaatsen
(tab "Schooljaar") met snelle invoer + kalenderbeheer.
- [x] **Instellingenmenu** (subtiel onderaan de zijbalk) waaronder **Gebruikers**
en **Modulebeheer** verdwijnen.
- [x] De hint **"Menu's verschijnen alleen voor ingeschakelde modules."** uit de
zijbalk verwijderd.
## Vakken
- [x] Per vak **automatisch een passend icoon** (afgeleid van de naam) — getoond
in het rooster en bij Activiteiten/vakken.
- [x] Optioneel: een icoon handmatig kunnen kiezen/overschrijven (`icoon`-veld
op Activiteit + migratie core 0007; leeg = automatisch op naam).
## Stage-module — uitbreidingen
- [x] **Aparte (stage)locaties** kunnen toevoegen, los van de gewone lokalen.
- [x] Een **begeleider aan meerdere stages** koppelen, maar **niet tegelijk aan
een theorievak** (conflict wordt voorkomen bij opslaan + gesignaleerd via
`/api/stage-conflicten/`).
- [x] Een leerling **verdwijnt op een stagedag(deel) uit de klas** in het rooster
(in het weekrooster gemarkeerd "Op stage" bij de betreffende blokken).
- [x] Stage instelbaar **per blok, per dagdeel of per dag**.
## Lokalen & dubbele boekingen
- [x] **Lokalen** als apart roomsysteem (naast de vrije Locaties), met
capaciteit; gedeeld door lessen en interne stages.
- [x] **Dubbele-boekingcheck** per tijdslot: gemeld in het conflicten-overzicht;
per school instelbaar om opslaan **hard te blokkeren** (Lokalen-scherm).
- [x] Interne stages gebruiken nu een **lokaal** (de aparte stagelocatie-lijst is
vervallen) en tellen mee in de dubbele-boekingcheck.
## Groepsindeling
- [x] **Eén sleep-overzicht**: bovenliggende groep → groep → subgroep genest, met
een zijbalk "nog niet ingedeeld". Personen naar elk niveau slepen; × haalt
ze weer weg. Leerlingen licht gekleurd, personeel donker; duidelijke
gekleurde structuur per niveau. Inline aanmaken/hernoemen.
- [x] **Toon-filter** (Allen / Leerlingen / Personeel) en **multi-select**: meerdere
personen aanvinken en in één keer in een gekozen groep plaatsen (of de
selectie samen slepen).
## Koppelingen & inzetregels
- [x] **Personeel koppelen aan leerplein en subgroep** (personeelsformulier:
stamgroep, subgroep-begeleiding én leerpleinen).
- [x] **Theorievakken automatisch beschikbaar voor leerkrachten** (een leerkracht
mag altijd op een theorievak ingezet worden; daarnaast worden theorievakken
bij het aanmaken automatisch gekoppeld).
- [x] **Inzetregel begeleider ↔ vak:** leerkracht/praktijkondersteuner alleen op
gekoppelde vakken (leerkracht bovendien altijd op theorievakken);
**klassenondersteuner overal**.
- [x] **Hiërarchie vastgelegd:** subgroep → groep (Subgroep.groep) en
groep → leerplein (Leerplein.groepen).
## Toegang & gebruikers
- [x] Login + gebruikersbeheer gebundeld in de accounts-module; inloggen ook met
e-mailadres.
- [x] **Wachtwoordreset**: beheerder genereert/zet wachtwoord én self-service via
e-maillink (SMTP via .env; standaard console-log).
- [x] **Bulk-import van gebruikers** met automatisch gegenereerde wachtwoorden,
persoon koppelen/aanmaken en een voorstel op naamgelijkenis.
## Module: Urenoverzicht
- [x] **Module die berekent hoeveel uur een groep per vak krijgt.** (module `uren`, default uit; endpoint /api/urenoverzicht/)
- [x] Optie om dit **per leerling** te tonen, **inclusief stage-uren**.
- [x] **Filters op de uren-tabellen** (per groep, per vak, zoek op leerling).
- [x] **Geschiedenis** per leerling: momentopnames opslaan (model
UrenMomentopname) en een tabel leerling × datum met totaal-uren.
- [x] **Vrije dagen tellen niet mee** in deze urenberekening.
## Roostermaker — vrije dagen & blok vervallen
- [x] **Vak met geldigheidsperiode**: een blok kan gelden **van/tot** een datum
(leeg = altijd). `geldig_van == geldig_tot` = eenmalig op die dag.
- [x] **Dag leegmaken + eenmalig alternatief**: per dag knop 🧹 (alle blokken díe
dag laten vervallen, blijft lesdag) en (eenmalig blok op die dag), zonder
gevolgen voor andere dagen.
- [x] **Vrije/vakantie-/studiedagen niet bruikbaar** in de Roostermaker: een
blok slepen naar een vrije dag wordt geweigerd; vrije dagkolommen zijn
gearceerd; dag-acties (leegmaken/eenmalig) verschijnen niet op vrije dagen.
- [x] De actie heet nu **"dit vak laten vervallen"** (per blok, juiste tekst).
- [x] Een **hele dag laten vervallen** kan direct in het weekrooster (knop in de
dagkop; maakt een vrije dag aan, met "weer lesdag" om te herstellen).
## Pictogrammen & leerlingweergave (ZML)
- [x] **Pictogram per vak uploaden** (afbeelding) en tonen in het rooster.
- [x] **Grote leerlingweergave** (één dag, groot pictogram + vakkleur) en
**ouderweergave** (weekoverzicht), per leerling of groep.
- [x] Vakkleur duidelijk gebruikt in de weergaven.
- [x] **Dagdeel-indeling (Ochtend/Middag)** met koppen + scheidingslijn in de
leerling- en ouderweergave (grens 12:00).
- [ ] Later: pictogrammen ook per losse activiteit/stap binnen een dagdeel.
## Later
- [x] **Auto-rooster slimmer**: voorkeuren — vak liever ochtend/middag (zachte
voorkeur met fallback), bepaalde dagen vrijhouden, en max. blokken per dag
per groep.
- [x] **Auto-rooster voor meerdere klassen tegelijk**: kies meerdere klassen; een
vak (bv. gym/atelier) kan voor meerdere klassen gelden, met gedeelde
bewaking van begeleider en lokaal over alle klassen heen.
- [ ] **Algemene visuele opfris** (UX/uiterlijk).
- [ ] **Module: automatisch rooster genereren.** De gebruiker ge