UC-BEH-CAT-001 — Categorieoverzicht bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-CAT-001 |
| Naam | Categorieoverzicht bekijken |
| Domein | Beheerder / Categorieën beheren |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, database, autorisatiecomponent, categoriebeheercomponent, historiecomponent |
| Rolcontext | Actieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Content > Categorieën beheren |
| Gerelateerde usecases | UC-BEH-CAT-002, UC-BEH-CAT-003, UC-BEH-CAT-004, UC-BEH-CAT-005, UC-BEH-CAT-006, UC-BEH-CAT-007 |
| Primaire entiteiten | Categories, CategoryHistory, CategoryMigrations, TeacherLevelCategories, TeacherLevelCategoryExercises |
| Secundaire entiteiten / events | Users, ExerciseRuns, SharedExercises, categoriebeheer-readmodels |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een beheerder het overzicht van centrale categorieën bekijkt binnen het beheeronderdeel Content. De pagina richt zich uitsluitend op de centrale categorie-identiteit: naam, kleur, icoon, status, gebruiksimpact en beheerhistorie op hoofdlijnen.
De overzichtspagina is een selectiestap. De beheerder wijzigt hier geen categoriegegevens rechtstreeks, maar selecteert één categorie en opent daarna de detail- en beheerweergave via Open beheer.
Per categorie worden minimaal naam, huidige status, aantal actieve docentniveaus waarin de categorie voorkomt en aantal onderliggende actieve oefenkoppelingen getoond. Deze aantallen zijn afgeleide readmodelwaarden over TeacherLevelCategories en TeacherLevelCategoryExercises.
Uitgangspunten
- Categorieën zijn centrale onderwijsinhoud en geen private docentlabels.
- Naam, kleur en icoon vormen samen de centrale categorie-identiteit.
- Beheeracties op categorieën zijn volledig server-side gevalideerd.
- Historische resultaten behouden hun oorspronkelijke categoriecontext.
- Popupinhoud blijft bronhoudend in het centrale popupregister.
3. Scope
Deze usecase beschrijft:
- Laden van de centrale categorielijst.
- Tonen van naam, kleur, icoon en status per categorie.
- Tonen van gebruiksimpact per categorie: actieve docentniveaus en actieve oefenkoppelingen.
- Selecteren van één categorie als voorbereiding op detailbeheer.
- Afhandeling van lege, gefilterde of foutieve overzichtstoestanden.
Deze usecase beschrijft niet:
- Docentniveaubeheer, leerlingautorisaties of oefeningconfiguratie wijzigen; die blijven bronhoudend in docentflows of docentondersteuning.
- Nieuwe centrale categorieën aanmaken vanuit beheer; categorie-aanmaak is bronhoudend in de docentflow of via technische migratie wanneer dat expliciet nodig is.
- Historische exercise runs herschrijven; bestaande runs behouden hun oorspronkelijke categoriecontext.
- Popupteksten of knopteksten specificeren; usecases verwijzen uitsluitend naar PopupKey.
- Categoriegegevens wijzigen; dit hoort bij UC-BEH-CAT-003.
- Categoriemigratie voorbereiden of uitvoeren; dit hoort bij UC-BEH-CAT-005 en UC-BEH-CAT-006.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Docent / Oefenaanbod | Docenten koppelen categorieën aan niveaus en maken waar toegestaan nieuwe centrale categorieën aan; beheer past de centrale identiteit en onderhoudsacties toe. |
| Beheerder / Docentondersteuning | Support op concrete docentstructuren mag categoriegebruik inspecteren, maar centrale categorie-identiteit wordt hier beheerd. |
| Leerling / Oefenaanbod | Leerlingen zien alleen afgeleide toegankelijke categorieën; deze bundel bepaalt niet zelfstandig leerlingtoegang. |
| Database-informatie | Categories, CategoryHistory en CategoryMigrations blijven de technische bron voor centrale categorie-identiteit en audit. |
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd in OefenHub. |
| PRE-002 | De backend heeft server-side vastgesteld dat de gebruiker een actieve beheerderrol heeft. |
| PRE-003 | De beheerder bevindt zich binnen de beheeromgeving via Content > Categorieën beheren. |
| PRE-004 | De pagina gebruikt actuele serverdata; clientstate, routeparameters of verborgen formuliervelden bepalen geen autorisatie of categorie-identiteit. |
| PRE-005 | De beheerpagina Categorieën beheren is bereikbaar via het menu Content. |
| PRE-006 | De database bevat nul of meer Categories-records. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De beheerder ziet een actueel overzicht van centrale categorieën. |
| POST-002 | Geen categoriegegevens zijn gewijzigd. |
| POST-003 | Geen history- of migratierecord is aangemaakt. |
| POST-004 | Een geselecteerde categorie kan worden geopend via UC-BEH-CAT-002. |
| POST-005 | De getoonde aantallen zijn afgeleid en niet als los beheerrecord opgeslagen. |
6. Trigger
De usecase start wanneer de beheerder in het menu Content de pagina Categorieën beheren opent.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Content-menu | Opent Categorieën beheren. | De frontend vraagt het categorieoverzicht op. | Route: Content > Categorieën beheren. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen een actieve beheerder mag centrale categorieën beheren. | Server-side autorisatie. |
| 3 | Backend | Categoriequery | Laadt Categories inclusief statusvelden. | Categorieën worden geschikt gemaakt voor overzichtsweergave. | Categories. |
| 4 | Backend | Impactreadmodel | Berekent actieve docentniveaus per categorie. | Alleen actieve TeacherLevelCategories tellen mee. | TeacherLevelCategories.IsActive. |
| 5 | Backend | Impactreadmodel | Berekent actieve oefenkoppelingen per categorie. | Alleen actieve TeacherLevelCategoryExercises onder actieve niveau-categorieën tellen mee. | TeacherLevelCategoryExercises.IsActive. |
| 6 | Frontend | Overzicht | Toont lijst met naam, status, aantallen en visuele identiteit. | De beheerder kan één categorie selecteren. | Read-only overzicht. |
| 7 | Beheerder | Overzicht | Selecteert één categorie. | De actie Open beheer wordt beschikbaar. | Geselecteerde CategoryId in servervalideerbare context. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Gebruiker is geen beheerder. | De backend weigert toegang en toont een veilige toegang-geweigerdafhandeling. | Niet van toepassing. | Geen. |
| ALT-002 | 3 | Er bestaan geen categorieën. | Het overzicht toont een lege staat met uitleg dat er geen centrale categorieën beschikbaar zijn. | Niet van toepassing. | Geen. |
| ALT-003 | 4 | Impactberekening faalt gedeeltelijk. | De categorie blijft zichtbaar, maar impactwaarden worden niet als nul geïnterpreteerd; het systeem toont een veilige foutindicatie. | Niet van toepassing. | Geen. |
| ALT-004 | 6 | Een categorie is soft deleted. | De categorie blijft zichtbaar voor beheer en historie, maar wordt herkenbaar als niet nieuw kiesbaar getoond. | Niet van toepassing. | Geen. |
| ALT-005 | 7 | De geselecteerde categorie bestaat niet meer bij openen. | De selectie wordt geweigerd en het overzicht wordt opnieuw geladen. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Het categorieoverzicht is read-only; mutaties gebeuren pas in detailusecases. |
| BR-002 | Een centrale categorie is geen privé-categorie van een docent en mag in het overzicht niet als docentgebonden object worden gepresenteerd. |
| BR-003 | Het aantal actieve docentniveaus telt actieve TeacherLevelCategories per categorie. |
| BR-004 | Het aantal actieve oefenkoppelingen telt actieve TeacherLevelCategoryExercises onder actieve niveau-categorieën. |
| BR-005 | Soft-deleted of gemigreerde broncategorieën blijven zichtbaar voor beheeranalyse en historie, maar niet als normale nieuwe keuze voor docenten. |
| BR-006 | Sortering en filtering van het overzicht wijzigen geen categorie, koppeling, oefening of historie. |
| BR-007 | De beheerder moet eerst één categorie selecteren voordat detailbeheer beschikbaar komt. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | De opgevraagde pagina vereist een server-side beheerderclaim. |
| VAL-002 | CategoryId in selecties moet verwijzen naar een bestaand Categories-record. |
| VAL-003 | Impactaantallen worden server-side berekend en mogen niet vanuit de client worden aangeleverd. |
| VAL-004 | Statuslabels zijn afgeleide UI-labels en vervangen niet de onderliggende databasevelden. |
| VAL-005 | De kleurwaarde in het overzicht wordt uitsluitend weergegeven wanneer ColorHex geldig is. |
| VAL-006 | IconKey wordt als sleutel weergegeven of vertaald naar een bekende iconrepresentatie; onbekende keys leiden niet tot datamutatie. |
11. Datamutaties en events
| ID | Mutatie / event | Toelichting |
|---|---|---|
| MUT-001 | Geen functionele mutatie | Het raadplegen van het overzicht wijzigt geen categorie- of koppeldata. |
| MUT-002 | Geen domeinevent | Het raadplegen van het overzicht schrijft geen CategoryHistory-, CategoryMigrations- of systeemberichtrecord. |
12. Geen datamutaties
| ID | Geen mutatie | Reden |
|---|---|---|
| NO-001 | Categories | Naam, kleur, icoon en IsDeleted blijven ongewijzigd. |
| NO-002 | TeacherLevelCategories | Koppelingen en IsActive blijven ongewijzigd. |
| NO-003 | TeacherLevelCategoryExercises | Oefenkoppelingen blijven ongewijzigd. |
| NO-004 | CategoryHistory | Bekijken schrijft geen historie. |
| NO-005 | CategoryMigrations | Bekijken start geen migratie. |
13. State diagram
Niet van toepassing. Deze usecase raadpleegt een overzicht en wijzigt geen persistent statusobject. De relevante beslislogica staat in hoofdstuk 14 en de readmodel-lifecycle in hoofdstuk 15.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Niet van toepassing.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Categorieën beheren is een zelfstandige beheerpagina binnen Content met een overzicht van centrale categorieën en gebruiksimpact. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, databaseontwerp en historie en background jobs beschrijven de technische uitwerking. Het overzicht gebruikt een readmodel over Categories, TeacherLevelCategories en TeacherLevelCategoryExercises. |
| Software Requirements Specification | SRS moet vastleggen welke records meetellen voor de getoonde aantallen en dat het overzicht read-only is. |
| Database | Geen nieuwe tabel nodig; bestaande categorie- en koppelbronnen volstaan voor het overzicht. |
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 |
|---|---|---|
UC-BEH-CAT-001-REQ-001 | SRS-AUTH-001 SRS-RDM-001 SRS-RDM-004 SRS-RDM-005 SRS-CAT-001 SRS-ADM-001 AC-AUTH-001 AC-RDM-001 AC-RDM-004 AC-RDM-005 AC-CAT-001 AC-ADM-001 | Alleen beheerders toegang geven tot het categorieoverzicht |
UC-BEH-CAT-001-REQ-002 | SRS-CAT-001 SRS-ADM-001 AC-CAT-001 AC-ADM-001 | Per categorie naam, status, kleur en icoon tonen |
UC-BEH-CAT-001-REQ-003 | SRS-CAT-001 SRS-TCH-002 SRS-ADM-001 AC-CAT-001 AC-TCH-002 AC-ADM-001 | Per categorie het aantal actieve docentniveaus tonen |
UC-BEH-CAT-001-REQ-004 | SRS-CAT-001 SRS-ADM-001 AC-CAT-001 AC-ADM-001 | Per categorie het aantal actieve oefenkoppelingen tonen |
UC-BEH-CAT-001-REQ-005 | SRS-RDM-001 SRS-RDM-005 SRS-CAT-001 SRS-ADM-001 AC-RDM-001 AC-RDM-005 AC-CAT-001 AC-ADM-001 | Bij raadplegen van het overzicht geen categoriegegevens wijzigen |
UC-BEH-CAT-001-REQ-006 | SRS-CAT-001 SRS-ADM-001 AC-CAT-001 AC-ADM-001 | Soft-deleted of historisch relevante categorieën voor beheer raadpleegbaar houden |
UC-BEH-CAT-001-REQ-007 | SRS-AUTH-001 SRS-AUTH-002 SRS-AUTH-004 SRS-CAT-001 SRS-ADM-001 AC-AUTH-001 AC-AUTH-002 AC-AUTH-004 AC-CAT-001 AC-ADM-001 | Één geselecteerde categorie kunnen doorgeven aan de detailbeheerflow zonder clientstate als autorisatiebron te gebruiken |