UC-OVG-RES-004 — Afgeronde oefenrun van kind bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-OVG-RES-004 |
| Naam | Afgeronde oefenrun van kind bekijken |
| Domein | Ouder/voogd / Resultaten en geschiedenis |
| Primaire actor | Ouder/voogd |
| Secundaire actor(en) | Frontend, backend, database |
| Rolcontext | Actieve ouder-/voogdcontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Kindgeschiedenis, Resultaatdetail |
| Gerelateerde usecases | UC-OVG-RES-002, UC-OVG-RES-003, UC-OVG-RES-005, UC-LLN-RES-001 |
| Primaire entiteiten | ExerciseRuns, ExerciseRunProgress, Users, UserRelationships |
| Secundaire entiteiten / events | GuardianRunDetailReadModel |
| Gerelateerde popups | POP-OVG-RESULT-ACCESS-DENIED, POP-OVG-RESULT-NOT-AVAILABLE |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een ouder/voogd één afgeronde oefenrun van een gekoppeld kind opent vanuit de kindgeschiedenis. De detailweergave gebruikt de historische runcontext en toont de samenvatting van de run als read-only informatie.
De ouder/voogd krijgt geen acties om de run opnieuw te maken, te delen of te wijzigen namens het kind. De detailroute wordt opnieuw server-side geautoriseerd, ook wanneer de run vanuit een gefilterde lijst is aangeklikt.
Uitgangspunten
- Alleen afgeronde runs kunnen als resultaatdetail worden geopend.
- De run moet bij een actief gekoppeld kind horen.
- Historische runcontext is leidend voor naamgeving en totalen.
- De ouder/voogd kan de run niet wijzigen.
- Run-ID uit de route is nooit voldoende voor toegang.
3. Scope
Deze usecase beschrijft:
- openen van een runregel vanuit geschiedenis;
- server-side controleren van relatie en run-eigenaarschap;
- lezen van runmetadata en uniforme totalen;
- voorbereiden van detail- en statistieksectie;
- tonen van veilige niet-beschikbaarafhandeling bij ontbrekende run.
Deze usecase beschrijft niet:
- oefening opnieuw maken;
- oefening delen;
- run corrigeren;
- payload herstellen of herberekenen.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Leerling / Resultaten | De historische run, statistiekvelden en PDF-bron blijven dezelfde bron als in het leerlingdomein; de ouder-/voogdweergave voegt alleen autorisatie en selectie op oudercontext toe. |
| Docent / Resultaten | Docentresultaten blijven beperkt tot de eigen docentcontext; ouder/voogd mag juist alle niveaus van het gekoppelde kind zien. |
| Generiek / Relaties | Relatievorming, uitnodigingen en algemene relatie-lifecycle blijven buiten deze resultaatusecases. |
| Database / Readmodels | Tellers, filters en overzichten zijn afgeleide readmodels boven bestaande relatie-, niveau-, oefening- en rungegevens. |
4. Pre-condities
| 001 | De ouder/voogd bekijkt kindgeschiedenis. | | 002 | Een runregel is geselecteerd. | | 003 | De run is afgerond. | | 004 | De run hoort bij het geselecteerde kind. |
5. Post-condities
| 001 | De run is read-only getoond of veilig geblokkeerd. | | 002 | Geen rungegevens zijn gewijzigd. | | 003 | De detailweergave kan doorlinken naar statistieken of PDF-export. | | 004 | Ongeautoriseerde toegang geeft geen gedeeltelijke resultaatdata terug. |
6. Trigger
De ouder/voogd klikt op een afgeronde runregel in de kindgeschiedenis.
7. Normale processtroom
| Stap | Actor / component | Actie | Resultaat | Data / controle |
|---|---|---|---|---|
| 1 | Ouder/voogd | Selecteert runregel | Frontend opent detailroute | RunId |
| 2 | Backend | Valideert relatie en run-eigenaarschap | Toegang wordt bepaald | UserRelationships + ExerciseRuns |
| 3 | Backend | Leest runmetadata | Historische context wordt samengesteld | Level/Category/Exercise context |
| 4 | Backend | Leest uniforme totalen | Samenvatting wordt gevuld | ExerciseRuns |
| 5 | Frontend | Toont detailkop | Ouder/voogd ziet runcontext | GuardianRunDetailReadModel |
| 6 | Frontend | Biedt vervolg naar details/statistieken/PDF | Vervolgusecases zijn beschikbaar | UC-OVG-RES-005/006 |
7.1 Scherm- en routegedrag
- De resultatenroutes worden altijd opnieuw server-side geautoriseerd.
- De ouder-/voogdweergave toont read-only informatie over gekoppelde kinderen.
- De pagina gebruikt functionele namen en context, geen technische identifiers als herkenningsmiddel.
- Oude filters, routeparameters of browserstate mogen geen toegang afdwingen.
8. Alternatieve en exceptionele processtromen
| 001 | Run is niet afgerond: detailweergave wordt geblokkeerd. | | 002 | Run hoort bij ander kind: toegang wordt geweigerd. | | 003 | Ouderrelatie is intussen beëindigd: detailweergave wordt niet meer getoond. | | 004 | Historische module bestaat niet meer: de opgeslagen runcontext blijft getoond voor zover beschikbaar. | | 005 | Payload is beschadigd: uniforme runvelden blijven leidend en technische fout wordt veilig afgehandeld. |
8.1 Afhandeling van verouderde of ongeldige clientstate
- De backend herhaalt autorisatie bij iedere raadpleeg-, filter-, export- of liveactie.
- Oude routeparameters, browserselecties en clientcache worden genegeerd wanneer de actuele server-side context geen toegang geeft.
- De frontend mag het scherm herstellen door het actuele readmodel opnieuw op te vragen.
9. Business rules
| 001 | Run-ID uit de URL is geen autorisatie. | | 002 | Alleen afgeronde runs zijn zichtbaar als geschiedenisdetail. | | 003 | Ouder/voogd mag geen runstatus, antwoorden of scores wijzigen. | | 004 | Historische rungegevens zijn leidend boven actuele oefenconfiguratie. | | 005 | Toegang vervalt zodra de ouder-/voogdrelatie niet meer actief is. |
9.1 Readmodel- en tellerdefinities
| Waarde | Definitie | Uitsluitingen / grenzen |
|---|---|---|
| Runheader | Naam kind, datum, niveau, categorie en oefening uit historische runcontext. | Geen technische GUID-weergave. |
| Uniforme totalen | Aantal vragen, goed, fout en Geen idee uit runvelden. | Geen herberekening uit clientstate. |
| Contextlabels | Historische naamgeving van niveau/categorie/oefening. | Latere hernoemingen mogen historische context niet overschrijven. |
| Detailbeschikbaarheid | Alleen wanneer run completed is en relatie actief. | Lopende runs uitgesloten. |
9.2 Autorisatie- en privacygrenzen
- De zichtbare dataset wordt altijd server-side beperkt tot actieve ouder-/voogdrelaties.
- Een gebruiker met gecombineerde rollen krijgt binnen deze routes geen impliciete docent- of beheerderinzage.
- Resultaat- en livegegevens van niet-gekoppelde kinderen worden nooit gedeeltelijk getoond.
10. Datavalidatie
| 001 | RunId moet bestaan. | | 002 | Run moet bij geselecteerd kind horen. | | 003 | Run moet afgerond zijn. | | 004 | Kind moet actief gekoppeld zijn aan ouder/voogd. | | 005 | De gelezen dataset moet beperkt blijven tot de run en zichtbare kindcontext. |
11. Datamutaties en events
| 001 | Geen functionele datamutaties. | | 002 | Het detailreadmodel wordt opgebouwd uit bestaande rungegevens. |
12. Geen datamutaties
| 001 | ExerciseRuns blijven ongewijzigd. | | 002 | ExerciseRunProgress blijft ongewijzigd. | | 003 | Antwoorden, score en statistieken worden niet overschreven. | | 004 | UserRelationships blijven ongewijzigd. |
13. State diagram
Niet van toepassing. Deze usecase opent een read-only resultaatdetail en wijzigt geen persistent statusobject.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik |
|---|---|
| POP-OVG-RESULT-ACCESS-DENIED | Wordt gebruikt wanneer actuele autorisatie voor de run ontbreekt. |
| POP-OVG-RESULT-NOT-AVAILABLE | Wordt gebruikt wanneer het resultaat veilig niet beschikbaar is. |
Popupteksten, knopteksten, inputlabels en themakeuzes worden niet in deze usecase gedupliceerd. Het popupregister en de popupthemes blijven bronhoudend.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| 001 | Ouder/voogdresultaatdetails gebruiken dezelfde historische runcontext als leerlingresultaten. | | 002 | Het detail is read-only en omvat geen acties om namens het kind te oefenen. | | 003 | Run-ID en oude filterstate zijn nooit voldoende voor autorisatie. |
18.1 Impact voor database-informatie en ontwerpbronnen
| 001 | Autorisatiematrix moet ouder-/voogdraadpleging onderscheiden van docentraadpleging. | | 002 | Usecase-scherm-matrix moet de betrokken ouder-/voogdschermen koppelen aan deze usecase. | | 003 | Usecase-requirement-matrix moet de requirements uit hoofdstuk 19 opnemen. | | 004 | Readmodeldefinities voor ouder-/voogdresultaten moeten alle niveaus van het gekoppelde kind omvatten. |
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.
Er zijn voor deze usecase geen aparte requirement-afleidingen vastgelegd. De procesbeschrijving blijft broncontext voor de SRS-traceability.