Skip to main content

UC-LLN-TOEG-001 — Beschikbare categorieën bekijken

1. Kerngegevens

VeldWaarde
Usecase-IDUC-LLN-TOEG-001
NaamBeschikbare categorieën bekijken
DomeinLeerling / Oefenaanbod en toegang
Primaire actorLeerling
Secundaire actor(en)OefenHub frontend, OefenHub backend, autorisatielaag, database, categorie-readmodel, routeguard
RolcontextIngelogde gebruiker met rol Leerling en een geldige of opnieuw te bepalen actieve niveaucontext.
Betrokken schermenLeerlingnavigatie, leerling-frontpage, categoriecomponent, oefenaanbodcomponent, routeguard voor leerlingroutes.
Gerelateerde usecasesUC-LLN-TOEG-002 — Beschikbare oefeningen bekijken; UC-LLN-TOEG-003 — Oefeningstoegang controleren bij openen; UC-LLN-TOEG-005 — Open niveau gebruiken; UC-LLN-TOEG-006 — Privéniveau gebruiken via autorisatie; UC-LLN-FP-001 — Leerling-frontpage bekijken; UC-GEN-PROF-003 — Verplicht niveau instellen
Primaire entiteitenUsers, UserSettings, TeacherLevels, TeacherLevelCategories, Categories, TeacherStudentLevelAccess, UserRelationships
Secundaire entiteiten / eventsTeacherLevelCategoryExercises, Exercises, ExerciseModules
Gerelateerde popupsNiet van toepassing
PopupregisterNiet van toepassing
MoSCoWMust

2. Omschrijving

Deze usecase beschrijft hoe een leerling de beschikbare categorieën binnen de actuele leerlingcontext bekijkt. De categorieën die zichtbaar worden, zijn geen vrij opvraagbare catalogus, maar een server-side afgeleide selectie op basis van de ingelogde leerling, het actieve niveau, actieve docent- leerlingcontext, eventuele open-niveauregels, actieve categorie-koppelingen en actieve onderliggende oefeningen.

De leerlingnavigatie toont alleen categorieën die functioneel beschikbaar zijn om verder naar oefeningen te gaan. Een centrale categorie kan dus bestaan in Categories, maar toch niet zichtbaar zijn voor een specifieke leerling wanneer de categorie niet aan het actieve niveau is gekoppeld, de niveaucontext niet meer toegankelijk is, de categorie-koppeling inactief is of er binnen die categorie geen actieve onderliggende oefening meer beschikbaar is. Frontend-zichtbaarheid is hierbij uitsluitend presentatie; de backend blijft bron voor de toegangsbeslissing.

Deze usecase maakt geen nieuwe categorieën, geen nieuwe autorisaties en geen oefenruns aan. Het doel is alleen het bepalen en tonen van de toegestane categorie-ingangen voor de leerling. Wanneer geen categorieën beschikbaar zijn, toont de interface een lege staat of vervolgroute, zonder dat het systeem automatisch een niveau, categorie of autorisatie verzint.

3. Scope

Deze usecase omvat wel:

  • laden van beschikbare categorieën voor de ingelogde leerling
  • bepalen van de actuele niveaucontext voor categoriequeries
  • server-side filteren op toegankelijke niveaus, actieve categorie-koppelingen en actieve onderliggende oefeningen
  • tonen van categorie-identiteit zoals naam, icoon en kleur vanuit het centrale categoriemodel
  • respecteren van sortering binnen het docentniveau waar die beschikbaar is
  • tonen van een lege staat wanneer geen categorieën beschikbaar zijn
  • blokkeren van categorieën buiten de toegestane leerlingcontext
  • doorverwijzen naar bestaande profiel- of accountflows wanneer niveaucontext ontbreekt

Deze usecase omvat niet:

  • aanmaken, wijzigen, migreren of verwijderen van categorieën
  • docentbeheer van niveaus en categorieën
  • beheerderacties rond centrale categorie-identiteit
  • starten of genereren van een oefening
  • tonen van volledige oefeningdetails
  • wijzigen van niveauautorisaties
  • maken of accepteren van relaties
  • instellen van verplicht niveau zelf; dat hoort bij de profielusecase
  • opslaan van een frontpage-specifieke cachetabel

DRY-afbakening voor deze usecase: beheer van niveaus, categorieën, oefeningen, relaties en autorisaties blijft bij de daarvoor bedoelde docent-, beheerder-, profiel- en relatieusecases. Deze usecase gebruikt de uitkomst daarvan als toegangsvoorwaarde en maakt die processen niet opnieuw bronhoudend.

4. Pre-condities

IDVoorwaarde
PRE-001De gebruiker is succesvol ingelogd en heeft de rol Leerling.
PRE-002Er is een actuele leerlingcontext beschikbaar of deze kan server-side worden bepaald.
PRE-003De leerling heeft een geselecteerd of afleidbaar actief niveau, tenzij de flow naar verplichte niveaukeuze moet gaan.
PRE-004De backend kan toegankelijke niveaus bepalen op basis van open-niveauregels of actieve niveauautorisatie.
PRE-005Categorieën, niveau-categorie-koppelingen en onderliggende oefenkoppelingen zijn beschikbaar als brondata.
PRE-006Routeguard en autorisatielaag vertrouwen niet op clientstate als bron voor categoriezichtbaarheid.

5. Post-condities

IDResultaat
POST-001De leerling ziet alleen categorieën die binnen de actuele leerlingcontext beschikbaar zijn.
POST-002Categorieën zonder actieve onderliggende oefenmogelijkheid worden niet als startbare categorie getoond.
POST-003De getoonde categorienaam, kleur en icoon komen uit het centrale categoriemodel.
POST-004Er zijn geen categorieën, relaties, autorisaties of oefenruns aangemaakt.
POST-005Wanneer de niveaucontext ontbreekt of ongeldig is, is geen misleidende categoriecatalogus getoond.
POST-006Wanneer geen categorieën beschikbaar zijn, is een veilige lege staat of bestaande vervolgroute getoond.
POST-007Eventuele vervolgactie naar oefeningen moet opnieuw server-side worden gecontroleerd.

6. Trigger

De usecase start wanneer de leerling de leerling-frontpage, categorienavigatie of oefenaanbodroute opent en de frontend categorieën voor de actuele leerlingcontext moet tonen.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1LeerlingLeerling-frontpage / navigatieOpent de leerlingomgeving of categorieoverzicht.Frontend vraagt categorieën op voor de actuele leerlingcontext.Geen client-side categoriecatalogus als bron.
2OefenHub frontendCategoriecomponentStuurt een categoriequery naar de backend.Backend ontvangt alleen sessiecontext en optionele routecontext.UserId en rolcontext komen uit sessie, niet uit routeparameter.
3OefenHub backendRouteguard / autorisatielaagControleert of de gebruiker actief leerling is.Niet-leerlingcontext wordt geblokkeerd of naar juiste context geleid.Leerlingrol mag niet gecombineerd zijn met ouder/docent/beheerder.
4OefenHub backendNiveaucontextresolverBepaalt het actieve niveau van de leerling.Geselecteerd niveau wordt gevalideerd of een geldige context wordt afgeleid.UserSettings.SelectedTeacherLevelId mag niet blind worden vertrouwd.
5OefenHub backendToegangscontroleControleert of het niveau toegankelijk is.Alleen toegankelijke open of geautoriseerde niveaus blijven over.Open niveau of TeacherStudentLevelAccess + actieve relatie.
6OefenHub backendDatabasequeryHaalt actieve TeacherLevelCategories voor het niveau op.Inactieve of niet-gekoppelde categorieën vallen af.TeacherLevelCategories.IsActive = true.
7OefenHub backendDatabasequeryControleert aanwezigheid van actieve onderliggende oefenkoppelingen.Categorieën zonder actieve oefening worden niet als startbare categorie getoond.TeacherLevelCategoryExercises.IsActive en Exercises.IsActive.
8OefenHub backendCategoriemodelLeest centrale categorienaam, kleur en icoon.Response bevat alleen presentatievelden die de leerling mag zien.Naam/kleur/icoon uit Categories.
9OefenHub backendReadmodel / sorteringSorteert categorieën volgens niveaucontext.Frontend ontvangt geordende toegestane lijst.SortOrder is presentatielogica.
10OefenHub frontendCategoriecomponentToont de categorieën in navigatie of overzicht.Leerling ziet alleen toegestane categorie-ingangen.Geen datamutatie.
11LeerlingCategoriecomponentKan een categorie kiezen.Vervolg naar UC-LLN-TOEG-002.Oefeningen worden opnieuw server-side bepaald.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0013Gebruiker heeft geen actieve leerlingrol.Routeguard blokkeert leerlingcategorieën en leidt naar bestaande account-/contextafhandeling.Geen popupregister-popup.Geen.
ALT-0024Er is geen geselecteerd of afleidbaar niveau.Systeem leidt naar bestaande verplichte niveauflow of toont beperkte context zonder categorieën.Geen nieuwe popupkey.Geen.
ALT-0034Geselecteerd niveau bestaat niet meer of is inactief.Systeem beschouwt de niveaucontext als ongeldig en bepaalt opnieuw of een alternatief gekozen moet worden.Componentmelding of bestaande profielroute.Geen categorie-mutatie.
ALT-0045Niveau is niet toegankelijk voor deze leerling.Categoriequery retourneert geen categorieën voor dit niveau en routeguard voorkomt doorgebruik.Geen popupregister-popup.Geen.
ALT-0056Geen actieve categorie-koppelingen binnen het niveau.Frontend toont een lege staat voor oefenaanbod.Leegstaatcomponent.Geen.
ALT-0067Categorie heeft geen actieve onderliggende oefening.Categorie wordt niet getoond als startbare ingang.Geen.Geen.
ALT-0078Centrale categorie is gedeactiveerd of gemigreerd.Categorie wordt niet nieuw aangeboden, tenzij historische context elders expliciet nodig is.Geen.Geen.
ALT-0089SortOrder ontbreekt of bevat gelijke waarden.Systeem gebruikt stabiele fallbacksortering zonder inhoud te verbergen.Geen.Geen.
ALT-00910Frontend had nog oude categorieën in cache.Backendresponse overschrijft oude weergave; clientcache is niet leidend.Geen.Geen.

9. Business rules

IDRegel
BR-001Een leerling mag alleen categorieën zien binnen een niveau dat op dat moment voor die leerling toegankelijk is.
BR-002Frontend-zichtbaarheid van categorieën is nooit voldoende autorisatie voor het openen van oefeningen.
BR-003Een categorie wordt alleen als startbare leerlingcategorie getoond wanneer binnen die niveau-categorie minimaal één actieve oefening beschikbaar is.
BR-004Naam, kleur en icoon van een categorie worden centraal uit Categories gelezen en niet per leerlingcontext aangepast.
BR-005TeacherLevelCategories.IsActive is een afgeleide operationele vlag en wordt niet door de leerling gewijzigd.
BR-006Een lege categorie-lijst veroorzaakt geen automatische toekenning van niveauautorisatie.
BR-007Een ontbrekend verplicht niveau wordt niet stilzwijgend ingevuld door de categorieflow.
BR-008Categoriequeries filteren altijd server-side op de ingelogde leerling.
BR-009Historische categoriecontext van afgeronde runs hoort bij geschiedenis en niet bij het actuele oefenaanbod.
BR-010Deze usecase maakt geen relaties, uitnodigingen, systeemberichten of oefenruns aan.

10. Datavalidatie

Veld / objectValidatie
LeerlingcontextMoet uit de server-side sessie komen en rol Leerling bevatten.
Actief niveauMoet bestaan, actief zijn en toegankelijk zijn voor de leerling.
Open niveauMag alleen als actuele context worden gebruikt wanneer het niveau functioneel als open beschikbaar is.
PrivéniveauVereist actieve docent-leerlingrelatie en actieve niveauautorisatie.
Categorie-koppelingMoet actief gekoppeld zijn aan het actuele niveau.
Categorie-identiteitMoet bestaan in Categories en niet als nieuwe leerlingwaarde worden aangemaakt.
Onderliggende oefeningMinimaal één actieve oefenkoppeling en actieve oefening is vereist voor zichtbaarheid als startbare categorie.
RouteparametersMogen de server-side leerlingcontext niet vervangen.

11. Datamutaties en events

StapTypeEntiteit / eventMutatie
1ReadUsers / sessiecontextIngelogde leerling wordt bepaald.
4ReadUserSettingsGeselecteerde niveaucontext wordt gelezen en gevalideerd.
5ReadTeacherLevels, TeacherStudentLevelAccess, UserRelationshipsToegankelijke niveaus worden bepaald.
6ReadTeacherLevelCategoriesActieve categorie-koppelingen worden opgehaald.
7ReadTeacherLevelCategoryExercises, ExercisesCategorieën zonder actieve oefening worden uitgefilterd.
8ReadCategoriesNaam, kleur en icoon worden gelezen.

Deze usecase kent geen persistente domeinevents. Het samenstellen van de categorielijst is readmodelgedrag binnen de actuele leerlingcontext.

12. Geen datamutaties

EntiteitReden
CategoriesLeerling bekijkt centrale categorieën maar wijzigt ze niet.
TeacherLevelCategoriesZichtbaarheid wordt gelezen, niet handmatig aangepast.
TeacherStudentLevelAccessDeze usecase kent geen niveauautorisatie toe.
UserRelationshipsDeze usecase maakt of beëindigt geen docent-leerlingrelatie.
UserSettingsCategorieën bekijken wijzigt het geselecteerde niveau niet.
ExerciseRunsEr wordt nog geen oefening gestart.
SystemMessagesLege staten of blokkades maken geen systeembericht aan.

13. State diagram

Niet van toepassing. Deze usecase raakt geen persistent statusobject met een eigen lifecycle. Toegang en zichtbaarheid worden afgeleid uit actuele niveaucontext, autorisaties, actieve relaties en contentstatussen.

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

17. Popupverwijzingen

PopupKeyMomentDoel
Niet van toepassingNiet van toepassingDeze usecase gebruikt routeguard-, leegstaat- of componentgedrag en geen popupregister-popup.

18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification

DoeldocumentAfleiding
Functioneel OntwerpFunctioneel Ontwerp beschrijft zichtbaar oefenaanbod, niveaucontext, categorie-/oefeningtoegang en veilige blokkades.
Technisch OntwerpTechnisch Ontwerp: autorisatie en contextcontrole, oefencatalogus, readmodels en frontend-routing beschrijft de technische afbakening, server-side brondata, autorisatie en UI-compositie voor deze usecase.
Software Requirements SpecificationSoftware Requirements Specification bevat centrale eisen en acceptatiecriteria voor aanbodfiltering, server-side autorisatie, blokkades en geen ongewenste datamutaties.
Database-informatieDatabase-informatie blijft bron voor catalogus-, autorisatie- en soft-linkrelaties waarmee zichtbaar aanbod server-side wordt bepaald.
OntwerpbronnenOntwerpbronnen bevatten aanvullende businessregels voor oefenaanbod, niveaus, categorieën en autorisatiegrenzen.

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-afleidingDektUsecasecontext
REQ-UC-LLN-TOEG-001-001SRS-AUTH-001
SRS-RDM-001
SRS-RDM-005
SRS-CAT-001
SRS-LRN-009
AC-AUTH-001
AC-RDM-001
AC-RDM-005
AC-CAT-001
AC-LRN-009
Categorieën voor leerlingen server-side filteren op actuele leerlingcontext
REQ-UC-LLN-TOEG-001-002SRS-ACC-003
SRS-ACC-005
SRS-CAT-001
SRS-LRN-009
SRS-NFR-ACC-001
AC-ACC-003
AC-ACC-005
AC-CAT-001
AC-LRN-009
AC-NFR-ACC-001
Alleen categorieën tonen binnen een voor de leerling toegankelijk niveau
REQ-UC-LLN-TOEG-001-003SRS-CAT-001
SRS-LRN-001
AC-CAT-001
AC-LRN-001
Categorieën zonder actieve onderliggende oefening niet als startbare categorie tonen
REQ-UC-LLN-TOEG-001-004SRS-CAT-002
SRS-LRN-009
AC-CAT-002
AC-LRN-009
Categorienaam, kleur en icoon lezen uit de centrale categoriebron
REQ-UC-LLN-TOEG-001-005SRS-AUTH-001
SRS-CAT-001
SRS-LRN-009
AC-AUTH-001
AC-CAT-001
AC-LRN-009
Bij categorieën bekijken geen niveauautorisatie aanmaken of wijzigen
REQ-UC-LLN-TOEG-001-006SRS-CAT-006
SRS-LRN-009
SRS-NFR-SEC-001
AC-CAT-006
AC-LRN-009
AC-NFR-SEC-001
Ontbrekende of ongeldige niveaucontext veilig afhandelen zonder categoriecatalogus vrij te geven
REQ-UC-LLN-TOEG-001-007SRS-AUTH-001
SRS-AUTH-002
SRS-CAT-001
SRS-LRN-009
AC-AUTH-001
AC-AUTH-002
AC-CAT-001
AC-LRN-009
Clientstate of routeparameters niet gebruiken als autorisatiebron voor categoriezichtbaarheid
REQ-UC-LLN-TOEG-001-008SRS-RDM-001
SRS-RDM-005
SRS-CAT-001
SRS-LRN-009
AC-RDM-001
AC-RDM-005
AC-CAT-001
AC-LRN-009
Een lege staat kunnen tonen wanneer geen categorieën beschikbaar zijn
REQ-UC-LLN-TOEG-001-009SRS-CAT-001
SRS-LRN-009
AC-CAT-001
AC-LRN-009
Gedeactiveerde of gemigreerde categorieën niet als nieuwe leerlingingang tonen
REQ-UC-LLN-TOEG-001-010SRS-RDM-001
SRS-RDM-005
SRS-CAT-006
SRS-LRN-009
AC-RDM-001
AC-RDM-005
AC-CAT-006
AC-LRN-009
Categorieën stabiel sorteren binnen de niveaucontext
REQ-UC-LLN-TOEG-001-011SRS-LRN-009
SRS-GUA-001
AC-LRN-009
AC-GUA-001
Actuele brondata gebruiken wanneer frontendcache verouderd is
REQ-UC-LLN-TOEG-001-012SRS-RDM-001
SRS-RDM-005
SRS-RDM-006
SRS-CAT-004
SRS-LRN-005
AC-RDM-001
AC-RDM-005
AC-RDM-006
AC-CAT-004
AC-LRN-005
Categorieën niet uit historische exercise runs afleiden voor actueel aanbod
REQ-UC-LLN-TOEG-001-013SRS-RDM-001
SRS-RDM-005
SRS-CAT-006
SRS-LRN-009
AC-RDM-001
AC-RDM-005
AC-CAT-006
AC-LRN-009
Open en privéniveaucontext op dezelfde categoriefiltering laten uitkomen
REQ-UC-LLN-TOEG-001-014SRS-CAT-001
SRS-LRN-009
AC-CAT-001
AC-LRN-009
Een categorie alleen tonen als vervolg naar oefeningen zinvol is