UC-DOC-AANB-006 — Bestaande categorie aan niveau koppelen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-AANB-006 |
| Naam | Bestaande categorie aan niveau koppelen |
| Domein | Docent |
| Subdomein | Oefenaanbod, niveaus en categorieën |
| Primaire actor | Docent |
| Secundaire actor(en) | OefenHub-systeem |
| Rolcontext | Docent als eigenaar of actieve collaborator van een niveau |
| Betrokken schermen | Oefenaanbod; niveaucontext; categorie koppelen |
| Gerelateerde usecases | UC-DOC-AANB-002, UC-DOC-AANB-005, UC-DOC-AANB-007, UC-DOC-AANB-008, UC-DOC-OEF-001 |
| Primaire entiteiten | Levels, Categories, LevelCategories |
| Secundaire entiteiten / events | CategoryLinkedToLevel, CategoryHistory |
| Gerelateerde popups | POP-DOC-AANB-CATEGORY-ALREADY-LINKED, POP-DOC-AANB-CATEGORY-LINK-FAILED |
| Popupregister | Aanvullen indien deze popupkeys nog niet bestaan |
| MoSCoW | Must |
2. Omschrijving
De docent koppelt een bestaande centrale categorie aan het geselecteerde niveau. Deze route voorkomt onnodige doublures doordat de docent eerst uit bestaande centrale categorieën kan kiezen. Na koppeling kan de docent binnen die categorie concrete oefeningen beheren of aanmaken. De koppeling maakt de categorie nog niet automatisch zichtbaar voor leerlingen; leerlingzichtbaarheid volgt pas uit actieve onderliggende oefeningen binnen het niveau.
Deze usecase beschrijft de docenthandeling binnen het subdomein Oefenaanbod, niveaus en categorieën. De usecase is procesgericht en beschrijft geen pixelniveau-schermdetails. Schermdetails, exacte layout en componentvormgeving blijven bronhoudend in schermdocumentatie en mockups. Centraal categoriebeheer, migratie van categorieën en beheerdercorrecties blijven bronhoudend in de beheerderflows en ontwerpbronnen.
3. Scope
Binnen scope:
- tonen van selecteerbare bestaande centrale categorieën;
- koppelen van precies één bestaande categorie aan het geselecteerde niveau;
- voorkomen van dubbele actieve koppelingen binnen hetzelfde niveau;
- vastleggen van actor en tijdstip van de koppeling;
- auditbaar maken van de niveau-categorie-koppeling;
- terugkeren naar categorieoverzicht na succesvolle koppeling.
Buiten scope:
- aanmaken van een nieuwe centrale categorie;
- wijzigen van categorie-identiteit;
- migreren of samenvoegen van categorieën;
- automatisch aanmaken van oefeningen;
- automatisch zichtbaar maken van de categorie voor leerlingen zonder actieve oefening;
- leerlingautorisaties wijzigen.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De actor is ingelogd met actieve docentrol. |
| PRE-002 | Er is een geselecteerd niveau binnen de docentcontext. |
| PRE-003 | De docent heeft bewerkrecht op het niveau als eigenaar of actieve collaborator. |
| PRE-004 | Er bestaat minimaal één centrale categorie die als koppelbaar mag worden aangeboden. |
| PRE-005 | De te koppelen categorie is actief en niet uitgefaseerd voor nieuwe koppelingen. |
| PRE-006 | Er bestaat nog geen actieve koppeling tussen hetzelfde niveau en dezelfde categorie. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Er is een actieve koppeling tussen het niveau en de bestaande centrale categorie. |
| POST-002 | De categorie verschijnt in het categorieoverzicht van het niveau. |
| POST-003 | Er is auditinformatie vastgelegd over actor en tijdstip. |
| POST-004 | De categorie is niet automatisch leerlingzichtbaar wanneer er nog geen actieve oefeningen zijn. |
| POST-005 | Er zijn geen centrale categorie-eigenschappen gewijzigd. |
| POST-006 | Er zijn geen oefeningen, leerlingautorisaties of systeemberichten aangemaakt. |
6. Trigger
De usecase start wanneer de docent in het categorieoverzicht van een niveau kiest voor de actie om een bestaande categorie te koppelen. De docent wil hergebruik maken van een al bestaande centrale categorie in plaats van een nieuwe centrale categorie aan te maken.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Categorieoverzicht | Kiest actie Bestaande categorie koppelen. | Systeem opent/selecteert de koppelcomponent. | LevelId uit actieve docentcontext. |
| 2 | Systeem | Backend autorisatie | Controleert bewerkrecht op niveau. | Alleen eigenaar of actieve collaborator mag koppelen. | Levels, LevelCollaborators. |
| 3 | Systeem | Categoriekeuze | Laadt actieve centrale categorieën die nog niet gekoppeld zijn. | Reeds gekoppelde categorieën worden uitgesloten of als niet-koppelbaar gemarkeerd. | Categories, LevelCategories. |
| 4 | Docent | Categoriekeuze | Selecteert één bestaande categorie. | Systeem bewaart selectie clientside tot bevestiging. | CategoryId. |
| 5 | Docent | Categoriekeuze | Bevestigt koppeling. | Systeem valideert selectie opnieuw server-side. | Geen vertrouwen op clientstate. |
| 6 | Systeem | Backend verwerking | Controleert dubbele koppeling en categorietoestand. | Bij geldige selectie wordt koppeling aangemaakt. | Unieke niveau-categoriecombinatie. |
| 7 | Systeem | Database | Maakt LevelCategories-record aan of activeert toegestane nieuwe koppeling volgens datamodel. | Actor en timestamp worden vastgelegd. | CreatedByUserId, CreatedAtUtc. |
| 8 | Systeem | Audit/event | Registreert koppelactie. | Event of historyregel maakt wijziging herleidbaar. | CategoryLinkedToLevel. |
| 9 | Systeem | Readmodel | Herbouwt categorieoverzicht. | Nieuwe categorie verschijnt in beheercontext. | Afgeleide zichtbaarheid = afhankelijk van actieve oefeningen. |
| 10 | Docent | Categorieoverzicht | Bekijkt resultaat. | Docent kan doorgaan naar oefeningen binnen categorie. | Vervolg naar UC-DOC-OEF-001. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Docent heeft geen bewerkrecht op niveau. | Systeem blokkeert de actie. | Generieke toegang-geweigerdafhandeling. | Geen. |
| ALT-002 | 3 | Er zijn geen koppelbare categorieën beschikbaar. | Systeem toont lege keuze met route naar nieuwe categorie aanmaken als toegestaan. | Geen popupregister-popup. | Geen. |
| ALT-003 | 5 | Categorie is inmiddels gekoppeld door andere gebruiker. | Systeem blokkeert dubbele koppeling en ververst overzicht. | POP-DOC-AANB-CATEGORY-ALREADY-LINKED. | Geen. |
| ALT-004 | 5 | Categorie is inmiddels gedeactiveerd of uitgefaseerd. | Systeem blokkeert koppeling en vraagt nieuwe selectie. | Generieke niet-beschikbaarafhandeling of popupkey toevoegen indien nodig. | Geen. |
| ALT-005 | 6 | Unieke constraint of concurrencycontrole faalt. | Systeem rolt transactie terug en toont veilige foutafhandeling. | POP-DOC-AANB-CATEGORY-LINK-FAILED. | Geen blijvende mutatie. |
| ALT-006 | 8 | Auditregistratie faalt binnen transactie. | Systeem rolt de koppeling terug als audit verplicht transactioneel is. | POP-DOC-AANB-CATEGORY-LINK-FAILED. | Geen blijvende mutatie. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een docent mag alleen een categorie koppelen aan een niveau waarop de docent bewerkrecht heeft. |
| BR-002 | Alleen bestaande actieve centrale categorieën mogen als doel van deze usecase worden gekozen. |
| BR-003 | Een niveau mag niet meer dan één actieve koppeling met dezelfde centrale categorie hebben. |
| BR-004 | Het koppelen van een categorie maakt geen nieuwe centrale categorie aan. |
| BR-005 | Het koppelen van een categorie wijzigt geen naam, kleur of icoon van de centrale categorie. |
| BR-006 | Een gekoppelde categorie wordt pas leerlingzichtbaar wanneer er binnen die categorie minimaal één actieve oefening bestaat. |
| BR-007 | Koppelbare categorieën worden server-side bepaald; de client mag geen willekeurige CategoryId afdwingen. |
| BR-008 | De koppelactie moet herleidbaar zijn via actor en tijdstip. |
| BR-009 | De koppelactie veroorzaakt geen systeembericht aan leerlingen. |
| BR-010 | Centrale categorie-migratie of beheerdercorrectie is geen onderdeel van deze docentflow. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| LevelId | Bestaat, is actief genoeg voor docentbeheer en is toegankelijk voor actor. |
| CategoryId | Bestaat, is actief en is toegestaan voor nieuwe koppelingen. |
| TeacherUserId | Heeft actieve docentrol en bewerkrecht binnen geselecteerd niveau. |
| LevelCategory | Unieke actieve combinatie van LevelId en CategoryId. |
| CreatedByUserId | Wordt server-side gevuld met huidige gebruiker. |
| CreatedAtUtc | Wordt server-side in UTC gezet. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 7 | Create | LevelCategories | Nieuwe actieve koppeling tussen niveau en bestaande centrale categorie wordt aangemaakt. |
| 7 | Auditvelden | LevelCategories | CreatedByUserId en CreatedAtUtc worden gevuld. |
| 8 | Event | CategoryLinkedToLevel | Vastgelegd dat een bestaande centrale categorie aan het niveau is gekoppeld. |
| 9 | Readmodel | Categorieoverzicht | Het categorieoverzicht wordt opnieuw opgebouwd uit brondata. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Categories | Centrale categorie wordt hergebruikt en niet gewijzigd. |
| Exercises | Koppelen van categorie maakt geen oefeningen aan. |
| ExerciseRuns | Geen leerlingrun ontstaat door categorie koppelen. |
| UserSettings | Docentvoorkeuren worden niet gewijzigd. |
| SystemMessages | Leerlingen worden niet geïnformeerd over alleen een categorie-koppeling. |
| TeacherStudentLevelAuthorizations | Niveau-autorisaties blijven ongewijzigd. |
13. State diagram
Niet van toepassing. De usecase wijzigt een koppeling, maar geen statusobject met eigen lifecycle.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| POP-DOC-AANB-CATEGORY-ALREADY-LINKED | Wanneer de categorie al aan het niveau gekoppeld is. | Voorkomt dubbele koppeling. |
| POP-DOC-AANB-CATEGORY-LINK-FAILED | Wanneer de koppeling door technische of concurrencyfout niet kan worden opgeslagen. | Geeft veilige foutafhandeling zonder halve mutatie. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft expliciet dat docenten bestaande centrale categorieën kunnen koppelen aan een niveau om doublures te voorkomen. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus en autorisatie en contextcontrole beschrijven de technische uitwerking. Beschrijf server-side filtering van koppelbare categorieën, unieke niveau-categoriecombinatie en transactiegrenzen. |
| Software Requirements Specification | Neem eisen op voor het voorkomen van dubbele koppelingen, autorisatie en auditbaarheid. |
| Database-informatie | Controleer LevelCategories inclusief auditvelden en unieke actieve combinatie. |
| Ontwerpbronnen | Beschrijven command en event voor categorie-koppeling door docent. |
19. SRS-trace
Deze usecase bevat geen normatieve requirementtekst. De centrale eis en acceptatiecriteria staan in de SRS; onderstaande tabel koppelt de usecase-afleiding alleen aan centrale SRS-*- en AC-*-items.
| Usecase-afleiding | Dekt | Usecasecontext |
|---|---|---|
REQ-UC-DOC-AANB-006-001 | SRS-CAT-002 SRS-TCH-002 AC-CAT-002 AC-TCH-002 | Een docent met bewerkrecht een bestaande centrale categorie aan een niveau kunnen laten koppelen |
REQ-UC-DOC-AANB-006-002 | SRS-CAT-002 SRS-TCH-002 AC-CAT-002 AC-TCH-002 | Alleen actieve en koppelbare centrale categorieën aanbieden |
REQ-UC-DOC-AANB-006-003 | SRS-CAT-005 SRS-TCH-002 AC-CAT-005 AC-TCH-002 | Voorkomen dat dezelfde categorie meerdere keren actief aan hetzelfde niveau wordt gekoppeld |
REQ-UC-DOC-AANB-006-004 | SRS-AUTH-001 SRS-CAT-006 SRS-TCH-002 AC-AUTH-001 AC-CAT-006 AC-TCH-002 | De koppelactie server-side valideren op niveaucontext, docentrol en categoriecontext |
REQ-UC-DOC-AANB-006-005 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Actor en tijdstip van de koppelactie vastleggen |
REQ-UC-DOC-AANB-006-006 | SRS-CAT-002 SRS-TCH-002 AC-CAT-002 AC-TCH-002 | Bij het koppelen geen centrale categorie-eigenschappen wijzigen |
REQ-UC-DOC-AANB-006-007 | SRS-AUTH-001 SRS-LRN-009 SRS-TCH-002 AC-AUTH-001 AC-LRN-009 AC-TCH-002 | Bij het koppelen geen oefeningen of leerlingautorisaties aanmaken |
REQ-UC-DOC-AANB-006-008 | SRS-RDM-001 SRS-RDM-005 SRS-CAT-001 SRS-TCH-002 AC-RDM-001 AC-RDM-005 AC-CAT-001 AC-TCH-002 | De categorie na succesvolle koppeling tonen in het categorieoverzicht van het niveau |
REQ-UC-DOC-AANB-006-009 | SRS-SHR-001 SRS-TCH-001 SRS-NFR-SEC-001 AC-SHR-001 AC-TCH-001 AC-NFR-SEC-001 | Concurrencyfouten veilig afhandelen zonder dubbele of gedeeltelijke koppeling |