UC-DOC-AANB-001 — Oefenaanbod openen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-AANB-001 |
| Naam | Oefenaanbod openen |
| Domein | Docent |
| Subdomein | Oefenaanbod, niveaus en categorieën |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem |
| Rolcontext | Ingelogde gebruiker met actieve rol Docent |
| Betrokken schermen | Docentnavigatie, Oefenaanbod, niveaucontextselector, niveau-overzichtssamenvatting |
| Gerelateerde usecases | UC-DOC-FP-002 — Docentcontext bepalen; UC-DOC-AANB-002 — Niveau selecteren; UC-DOC-AANB-003 — Nieuw niveau aanmaken; UC-DOC-AANB-005 — Categorieën binnen niveau bekijken |
| Primaire entiteiten | Levels, LevelCollaborators, UserRoles, Users |
| Secundaire entiteiten / events | StudentLevelAuthorizations, Exercises, LevelCategoryLinks, audit/readmodel |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een docent de pagina Oefenaanbod opent.
De pagina Oefenaanbod is het centrale startpunt waar een docent werkt met de eigen onderwijsstructuur. De pagina werkt altijd vanuit een docentcontext en toont de niveaus waarvoor de docent relevant is als eigenaar of actieve collaborator. Na het openen van de pagina bepaalt het systeem welk niveau als actuele werkcontext geldt. Vanuit die context kan de docent vervolgens categorieën, oefeningen, collaborators, eigenaarschap en leerlingtoegang benaderen via vervolgflows.
De usecase beschrijft nadrukkelijk niet het beheren van categorieën of oefeningen zelf. Die handelingen zijn uitgewerkt in aparte usecases binnen dit of een volgend docent-subdomein.
3. Scope
Binnen scope:
- openen van de Oefenaanbodpagina door een docent;
- server-side controleren van de actieve docentrol;
- bepalen welke niveaus relevant zijn voor de docent;
- tonen van een niveaukeuze of lege toestand;
- laden van compacte niveaucontextinformatie;
- bepalen van de huidige niveaucontext voor vervolgacties;
- blokkeren van toegang wanneer geen geldige docentcontext bestaat.
Buiten scope:
- aanmaken of wijzigen van niveaus;
- categorieën koppelen of aanmaken;
- oefeningen aanmaken, configureren of testen;
- leerlingautorisaties wijzigen;
- eigenaarschap overdragen;
- beheerderondersteuning vanuit het beheerportaal;
- relatie-uitnodigingen naar leerlingen of docenten;
- leerlingzijde van zichtbaarheid van oefenaanbod.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd binnen OefenHub. |
| PRE-002 | De gebruiker heeft een actieve roltoekenning voor Docent. |
| PRE-003 | De sessiecontext is server-side gevalideerd. |
| PRE-004 | De navigatieroute naar Oefenaanbod is beschikbaar voor de docentcontext. |
| PRE-005 | De pagina wordt niet geopend op basis van client-side rolclaims alleen. |
| PRE-006 | Eventuele gecombineerde rollen zijn al door de generieke account- en frontpageflows bepaald. |
| PRE-007 | De database bevat nul, één of meer niveaus waarbij de docent eigenaar of actieve collaborator is. |
| PRE-008 | Inactieve rollen en beëindigde collaboratorrelaties tellen niet mee als actieve docentcontext. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De Oefenaanbodpagina is geladen voor een geldige docentcontext. |
| POST-002 | Het systeem heeft de relevante niveaus voor de docent bepaald. |
| POST-003 | Indien mogelijk is één actuele niveaucontext bepaald. |
| POST-004 | De pagina toont niveau-informatie zonder ongeautoriseerde leerlingdata te tonen. |
| POST-005 | Er zijn geen domeinmutaties uitgevoerd door alleen de pagina te openen. |
| POST-006 | Wanneer geen niveaus bestaan, ziet de docent een lege toestand met route naar nieuw niveau aanmaken. |
| POST-007 | Wanneer toegang ongeldig is, wordt geen docentdata geladen. |
| POST-008 | Vervolgacties blijven afhankelijk van de geselecteerde niveaucontext en autorisatie. |
6. Trigger
De usecase start wanneer een ingelogde gebruiker met docentrol in de docentnavigatie kiest voor Oefenaanbod of via een geldige interne route naar de Oefenaanbodpagina navigeert.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Navigatie | Kiest Oefenaanbod. | Routeguard activeert server-side controle. | Alleen actieve docentrol is geldig. |
| 2 | Systeem | Routeguard | Controleert authenticatie en rolcontext. | Laat route toe bij geldige docentcontext. | UserRoles + Roles. |
| 3 | Systeem | Oefenaanbod service | Bepaalt relevante niveaus. | Haalt niveaus op waar docent eigenaar of actieve collaborator is. | Levels, LevelCollaborators. |
| 4 | Systeem | Oefenaanbod service | Bepaalt actuele niveaucontext. | Gebruikt geldige eerder geselecteerde context of kiest veilige standaard. | UserSettings of applicatielogica. |
| 5 | Systeem | Pagina Oefenaanbod | Laadt compacte samenvatting. | Toont naam, eigenaar, zichtbaarheid en relevante aantallen. | Readmodel, geen mutatie. |
| 6 | Docent | Pagina Oefenaanbod | Bekijkt niveaucontext. | Ziet vervolgacties die bij de context passen. | Acties blijven autorisatieafhankelijk. |
| 7 | Docent | Pagina Oefenaanbod | Kiest eventueel een ander niveau. | Start UC-DOC-AANB-002. | Niveau selecteren. |
| 8 | Docent | Pagina Oefenaanbod | Kiest eventueel nieuw niveau. | Start UC-DOC-AANB-003. | Nieuw niveau aanmaken. |
| 9 | Docent | Pagina Oefenaanbod | Kiest eventueel categorieën of oefeningen. | Systeem routeert naar vervolgusecases. | Geselecteerde niveaucontext verplicht. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Gebruiker is niet ingelogd. | Route wordt geblokkeerd en gebruiker gaat naar loginflow. | Identity-provider/routeguard. | Geen. |
| ALT-002 | 2 | Gebruiker heeft geen actieve docentrol. | Oefenaanbod wordt niet geladen. | Generieke toegangafhandeling. | Geen. |
| ALT-003 | 3 | Docent heeft geen niveaus. | Pagina toont lege toestand en route naar nieuw niveau. | Inline melding. | Geen. |
| ALT-004 | 4 | Eerder geselecteerde niveaucontext is niet meer geldig. | Systeem kiest geen ongeldige context en vraagt selectie of gebruikt geldige fallback. | Inline melding. | Geen. |
| ALT-005 | 5 | Aantallen kunnen tijdelijk niet worden berekend. | Pagina laadt kerninformatie en toont aantallen als niet beschikbaar. | Inline melding. | Geen. |
| ALT-006 | 5 | Collaboratorrelatie is beëindigd tijdens laden. | Niveau wordt niet als actieve context getoond. | Inline melding indien relevant. | Geen. |
| ALT-007 | 6 | Docent probeert via oude URL een niet-toegankelijk niveau te openen. | Routeguard blokkeert niveaucontext en toont veilige afhandeling. | Generieke toegangafhandeling. | Geen. |
| ALT-008 | 6 | Gebruiker heeft gecombineerde rol Docent + Ouder/voogd. | Docentcontext wordt gebruikt omdat route Oefenaanbod docentgebonden is. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Oefenaanbod is alleen beschikbaar voor gebruikers met een actieve docentrol. |
| BR-002 | De pagina Oefenaanbod werkt altijd vanuit een docentcontext. |
| BR-003 | Een docent ziet alleen niveaus waarvoor hij eigenaar is of actieve collaborator is. |
| BR-004 | Een beëindigde collaboratorrelatie geeft geen toegang meer tot het niveau in Oefenaanbod. |
| BR-005 | De pagina toont geen detailinformatie over leerlingen buiten een expliciete leerlingcontext. |
| BR-006 | De pagina is geen beheerderondersteuningspagina en geeft geen beheerderrechten. |
| BR-007 | Het openen van de pagina veroorzaakt geen domeinmutaties. |
| BR-008 | Een oude client-side selectie mag nooit leiden tot toegang tot een inmiddels ongeldig niveau. |
| BR-009 | Vervolgacties moeten opnieuw server-side autorisatie controleren. |
| BR-010 | Samenvattingsaantallen zijn afgeleide readmodelwaarden en geen zelfstandige brondata. |
| BR-011 | Een niveaucontext mag niet uit routeparameters alleen worden vertrouwd. |
| BR-012 | Een docent met meerdere rollen gebruikt binnen deze pagina expliciet de docentcontext. |
| BR-013 | Systeemnotificaties worden niet door deze usecase bepaald of getoond. |
| BR-014 | Relatievorming met leerlingen of andere docenten blijft bronhoudend in het generieke relatiedomein. |
| BR-015 | Frontpage-samenvattingen worden niet door deze pagina gemuteerd. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Gebruikerssessie | Moet server-side geldig zijn. |
| Rolcontext | Moet actieve rol Docent bevatten. |
| Niveau-ID uit route of voorkeur | Moet bestaan en binnen de docentcontext toegankelijk zijn. |
| Collaboratorstatus | Alleen actieve collaboratorrecords tellen mee. |
| Eigenaarschap | Alleen actuele eigenaarstatus telt mee. |
| Readmodel-aantallen | Moeten worden afgeleid uit actuele toegankelijke records. |
| Clientstate | Mag niet als autorisatiebron worden gebruikt. |
| Gecombineerde rolcontext | Moet expliciet naar docentcontext worden gerouteerd. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 1-2 | Read | Users, UserRoles, Roles | Sessie- en docentrolcontext worden gelezen. |
| 3-4 | Read | Levels, LevelCollaborators | Toegankelijke niveaus worden bepaald op basis van eigenaarschap of actieve collaboratorcontext. |
| 5 | Readmodel | Oefenaanbodreadmodel | Samenvattingsdata wordt opgebouwd uit actuele toegankelijke records. |
| 7-9 | Geen | Vervolgusecases | Keuzes op de pagina starten aparte vervolgusecases; deze flow voert zelf geen mutatie uit. |
Deze usecase kent geen persistente domeinmutaties en geen nieuw domeinevent. Het bepalen van de actuele werkcontext is autorisatie- en readmodelgedrag.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Levels | Bekijken van Oefenaanbod maakt of wijzigt geen niveau. |
| LevelCollaborators | Bekijken koppelt of ontkoppelt geen collaborators. |
| StudentLevelAuthorizations | Bekijken wijzigt geen leerlingtoegang. |
| Exercises | Bekijken maakt of wijzigt geen oefeningen. |
| LevelCategoryLinks | Bekijken koppelt geen categorieën. |
| SystemMessages | Oefenaanbod openen verstuurt geen systeemberichten. |
| ExerciseRuns | Er wordt geen oefening gestart of gewijzigd. |
| UserRelationships | Relaties worden niet aangemaakt of aangepast. |
13. State diagram
Niet van toepassing.
De usecase raakt geen statusobject met eigen lifecycle. De zichtbaarheid van niveaus is een afgeleide van eigenaarschap en actieve collaboratorcontext.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Oefenaanbod openen
16.2 Ongeldige context blokkeren
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Oefenaanbod openen | Deze usecase gebruikt routeguard- en inline afhandeling, geen popupregister-popup. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijven dat Oefenaanbod het centrale docentstartpunt is voor niveaus, categorieën en oefeningen. |
| Functioneel Ontwerp | Vastleggen dat de pagina vanuit één geselecteerde niveaucontext werkt. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus en autorisatie en contextcontrole beschrijven de technische uitwerking. Server-side bepalen van docentcontext, niveaucontext en toegankelijke niveaus. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus en autorisatie en contextcontrole beschrijven de technische uitwerking. Samenvattingsaantallen als readmodel, niet als zelfstandige brondata. |
| Software Requirements Specification | Beschrijft dat Oefenaanbod alleen beschikbaar is voor actieve docentrol. |
| Software Requirements Specification | Beschrijft dat oude clientstate of routeparameters nooit autorisatie bepalen. |
| Database-informatie | Geen nieuwe tabellen; gebruik bestaande Levels, LevelCollaborators en UserRoles. |
| Ontwerpbronnen | Business rules en autorisatiematrix uitbreiden met openen van Oefenaanbod. |
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-001-001 | SRS-ACC-003 SRS-ACC-005 SRS-CAT-001 SRS-TCH-001 SRS-NFR-ACC-001 AC-ACC-003 AC-ACC-005 AC-CAT-001 AC-TCH-001 AC-NFR-ACC-001 | Oefenaanbod alleen toegankelijk maken voor gebruikers met een actieve docentrol |
REQ-UC-DOC-AANB-001-002 | SRS-AUTH-001 SRS-ACC-003 SRS-ACC-005 SRS-CAT-006 SRS-TCH-002 SRS-NFR-ACC-001 AC-AUTH-001 AC-ACC-003 AC-ACC-005 AC-CAT-006 AC-TCH-002 AC-NFR-ACC-001 | Bij openen van Oefenaanbod server-side bepalen welke niveaus voor de docent toegankelijk zijn |
REQ-UC-DOC-AANB-001-003 | SRS-CAT-001 SRS-TCH-006 AC-CAT-001 AC-TCH-006 | Niveaus tonen waarbij de docent actuele eigenaar of actieve collaborator is |
REQ-UC-DOC-AANB-001-004 | SRS-AUTH-001 SRS-REL-003 SRS-REL-006 SRS-CAT-001 SRS-TCH-006 AC-AUTH-001 AC-REL-003 AC-REL-006 AC-CAT-001 AC-TCH-006 | Beëindigde collaboratorrelaties niet gebruiken voor toegang tot Oefenaanbod |
REQ-UC-DOC-AANB-001-005 | SRS-ACC-003 SRS-ACC-005 SRS-CAT-001 SRS-TCH-002 SRS-NFR-ACC-001 AC-ACC-003 AC-ACC-005 AC-CAT-001 AC-TCH-002 AC-NFR-ACC-001 | Een lege toestand tonen wanneer de docent nog geen toegankelijke niveaus heeft |
REQ-UC-DOC-AANB-001-006 | SRS-AUTH-001 SRS-CAT-006 SRS-TCH-002 AC-AUTH-001 AC-CAT-006 AC-TCH-002 | Een oude of ongeldige niveaucontext blokkeren |
REQ-UC-DOC-AANB-001-007 | SRS-CAT-006 SRS-TCH-001 AC-CAT-006 AC-TCH-001 | Bij alleen openen van Oefenaanbod geen domeinmutaties uitvoeren |
REQ-UC-DOC-AANB-001-008 | SRS-RDM-001 SRS-RDM-002 SRS-ACC-003 SRS-ACC-005 SRS-TCH-001 SRS-NFR-ACC-001 AC-RDM-001 AC-RDM-002 AC-ACC-003 AC-ACC-005 AC-TCH-001 AC-NFR-ACC-001 | Samenvattingsaantallen afleiden uit actuele toegankelijke records |
REQ-UC-DOC-AANB-001-009 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Vervolgacties opnieuw server-side autoriseren |
REQ-UC-DOC-AANB-001-010 | SRS-AUTH-003 SRS-CAT-001 SRS-TCH-001 AC-AUTH-003 AC-CAT-001 AC-TCH-001 | Bij gecombineerde rollen binnen Oefenaanbod de docentcontext gebruiken |