160 lines
No EOL
8.6 KiB
Markdown
160 lines
No EOL
8.6 KiB
Markdown
# Roosterwijs — Roadmap / backlog
|
||
|
||
Geplande verbeteringen, gegroepeerd. `[ ]` = nog te doen, `[x]` = klaar.
|
||
Afgeronde fases (0–5) 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 — Weekroostermaker
|
||
|
||
- [x] **Weekroostermaker** (`/weekroostermaker`, menu onder Rooster): matrix met
|
||
alle klassen als kolommen en de algemene tijdvakken als rijen. Vakken per
|
||
klas plaatsen in het **vaste basisweekrooster** (geen periode-koppeling;
|
||
`geldig_van/tot` leeg). Live conflictsignalering over alle klassen heen
|
||
(begeleider/lokaal dubbel) + "Weekrooster voltooien" als eindcontrole.
|
||
Periode-afwijkingen blijven in de Roostermaker.
|
||
|
||
## 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.
|
||
- [x] **Roostermaker-tabbalk logischer**: de losse tab "Conflicten" is vervallen
|
||
(conflicten staan nu in het weekrooster zelf) en Vak-wizard + Auto-rooster
|
||
zitten onder één **"Genereren ▾"**-knop. Overgebleven: Week · Jaar ·
|
||
Genereren · Instellingen.
|
||
- [x] **Conflicten direct in het rooster**: een melding boven het weekrooster
|
||
(uitklapbaar met details) én een rode omlijning rond de betrokken blokken.
|
||
Client-side berekend uit de geladen blokken (begeleider/lokaal/leerling
|
||
dubbel op hetzelfde tijdslot), met respect voor geldigheidsperiodes.
|
||
|
||
## 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 |