UC-LLN-HIS-001 — Oefeninggeschiedenis bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-HIS-001 |
| Naam | Oefeninggeschiedenis bekijken |
| Domein | Leerling / Resultaten, statistieken, geschiedenis en PDF-export |
| Primaire actor | Leerling |
| Secundaire actor(en) | OefenHub frontend, OefenHub backend, database, technische oefenmodule |
| Rolcontext | Ingelogde leerling met een geldige leerlingcontext en toegang tot de eigen resultaat- of geschiedenisgegevens. |
| Betrokken schermen | Oefening-startpagina, oefeninggeschiedenispagina, geschiedenisoverzicht, leegstaatcomponent, terugnavigatie. |
| Gerelateerde usecases | UC-LLN-OEF-001 — Oefening-startpagina openen; UC-LLN-HIS-002 — Geschiedenis filteren en pagineren; UC-LLN-HIS-003 — Resultaatdetail vanuit geschiedenis openen; UC-LLN-RES-001 — Resultaat na afronding bekijken; UC-LLN-TOEG-003 — Oefeningstoegang controleren bij openen |
| Primaire entiteiten | ExerciseRuns, Exercises, Categories, Levels |
| Secundaire entiteiten / events | ExerciseModules, opgeslagen resultaatpayload, readmodel voor oefeninggeschiedenis |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing; deze flow gebruikt routeguard-, leegstaat- of componentgedrag. |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een leerling de geschiedenis van een specifieke oefening bekijkt. De geschiedenis is gekoppeld aan de actuele oefeningcontext en toont afgeronde exercise runs die horen bij de huidige oefening, categorie en niveaucontext. De lijst gebruikt opgeslagen uniforme runvelden zoals afrondmoment, aantal vragen, aantal goed, aantal fout en aantal Geen idee. Niet-afgeronde runs, docent-testruns en runs buiten de toegestane leerlingcontext worden niet als reguliere geschiedenisregels getoond.
De geschiedenispagina is een leesflow. De leerling kan vanuit de lijst doorklikken naar een resultaatdetail, maar het openen van dat detail hoort bij UC-LLN-HIS-003. Filteren en pagineren horen bij UC-LLN-HIS-002. De usecase bewaakt vooral welke dataset als oefeninggeschiedenis zichtbaar mag worden.
Deze usecase is onderdeel van het leerlingdomein Resultaten, statistieken, geschiedenis en PDF-export. De flow gebruikt bestaande exercise-rungegevens, historische niveau-, categorie- en oefeningcontext en de uniforme resultaatvelden die tijdens oefenen en afronden zijn opgeslagen.
DRY-afbakening: deze usecase is niet de bron voor oefeninggeneratie, antwoordcontrole, statistiekberekening, autorisatiebeheer door docenten, relatievorming, profielbeheer of PDF-layoutregels buiten de eigen context. Waar die onderwerpen relevant zijn, verwijst de usecase naar de bestaande bronflows en centrale ontwerpbronnen.
3. Scope
Deze usecase omvat wel:
- openen van de oefeninggebonden geschiedenispagina
- server-side bepalen van de relevante oefening-, categorie- en niveaucontext
- ophalen van afgeronde runs voor de ingelogde leerling binnen die context
- uitsluiten van niet-afgeronde runs
- uitsluiten van testruns
- tonen van afrondmoment, aantal vragen, goed, fout en
Geen idee - tonen van functioneel herkenbare contextinformatie zonder technische GUID's
- tonen van een lege staat wanneer geen afgeronde runs bestaan
- aanbieden van doorklik naar resultaatdetail
- aanbieden van terugnavigatie naar de oefeningpagina
Deze usecase omvat niet:
- filteren en pagineren als aparte interactieflow
- resultaatdetail tonen
- PDF exporteren
- oefening opnieuw maken
- oefening starten of hervatten
- geschiedenis verwijderen
- docent- of ouderweergave van resultaten
- herberekenen van resultaatstatistieken uit de payload
- beheer van niveauautorisaties
- wijzigen van profiel- of niveaukeuze
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd als leerling. |
| PRE-002 | De server-side sessiecontext bevat een geldig intern Users.Id. |
| PRE-003 | De leerlingcontext is geldig en niet geblokkeerd door account- of routeguardafhandeling. |
| PRE-004 | De relevante run-, oefening-, categorie- of niveaugegevens bestaan of kunnen veilig als leeg resultaat worden afgehandeld. |
| PRE-005 | De backend kan de benodigde autorisatiecontrole uitvoeren op basis van de huidige gebruiker en historische runcontext. |
| PRE-006 | De betreffende feature voor geschiedenis/resultaatweergave is beschikbaar binnen de applicatie. |
| PRE-007 | De frontendroute is een geldige leerlingroute of wordt door routeguard geblokkeerd. |
| PRE-008 | Er is geen client-side identifier die zonder server-side validatie als autorisatiebron wordt gebruikt. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De leerling krijgt uitsluitend geautoriseerde resultaat- of geschiedenisgegevens te zien. |
| POST-002 | De weergegeven dataset is server-side gefilterd op de ingelogde leerling en de toegestane context. |
| POST-003 | Er ontstaan geen nieuwe relaties, rollen, meldingen, privéberichten of systeemnotificaties. |
| POST-004 | Niet-toegankelijke of ontbrekende gegevens worden veilig geblokkeerd of als lege staat getoond. |
| POST-005 | Zoeken, filteren, openen of bekijken wijzigt geen brondata van de exercise run. |
| POST-006 | Navigatie naar resultaat, oefening of PDF verloopt via vervolgusecases. |
| POST-007 | De schermweergave gebruikt functioneel begrijpelijke labels en geen technische GUID's als primaire herkenning. |
| POST-008 | De zichtbare gegevens blijven consistent met de opgeslagen historische runcontext. |
6. Trigger
De usecase start wanneer de leerling vanaf de oefening-startpagina of een gelijkwaardige leerlingroute de actie Geschiedenis kiest voor een specifieke oefening.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Leerling | Oefening-startpagina | Kiest Geschiedenis. | Frontend opent de geschiedenisroute voor de gekozen oefening. | ExerciseId, niveaucontext. |
| 2 | OefenHub frontend | Geschiedenisroute | Stuurt de oefening- en contextidentificatie naar de backend. | Backendvalidatie start. | Geen client-side autorisatie. |
| 3 | OefenHub backend | Routeguard | Controleert ingelogde leerlingcontext. | Ongeldige sessie wordt geblokkeerd. | Users.Id, rol Leerling. |
| 4 | OefenHub backend | Contextservice | Laadt de actuele of historische oefeningcontext. | Oefening, categorie en niveau worden bepaald. | ExerciseId, CategoryId, LevelId. |
| 5 | OefenHub backend | Autorisatieservice | Controleert of de leerling deze oefeningcontext mag openen. | Alleen toegestane context gaat door. | Server-side controle. |
| 6 | OefenHub backend | Geschiedenisservice | Selecteert afgeronde runs voor deze leerling en oefeningcontext. | Dataset wordt beperkt tot eigen afgeronde runs. | CompletedAtUtc gevuld. |
| 7 | OefenHub backend | Geschiedenisservice | Sluit niet-afgeronde runs uit. | Lopende of verlaten runs verschijnen niet in de lijst. | Geen geschiedenisregel. |
| 8 | OefenHub backend | Geschiedenisservice | Sluit testruns uit. | Docent-testdata komt niet in leerlinggeschiedenis. | IsTestRun = false. |
| 9 | OefenHub backend | Geschiedenisservice | Leest uniforme totalen uit runvelden. | Samenvattingskolommen worden gevuld. | Geen herberekening. |
| 10 | OefenHub backend | Geschiedenisservice | Sorteert standaard op afrondmoment aflopend. | Meest recente afgeronde run staat bovenaan. | CompletedAtUtc desc. |
| 11 | OefenHub backend | Geschiedenisservice | Bepaalt eerste pagina volgens standaardgrootte. | Maximaal het standaard aantal regels wordt voorbereid. | Paginering. |
| 12 | OefenHub backend | API response | Stuurt readmodel naar frontend. | Frontend ontvangt lijst, totalen en navigatiecontext. | Afgeleid readmodel. |
| 13 | OefenHub frontend | Geschiedenisoverzicht | Toont titel en toelichting. | Leerling herkent de oefeningcontext. | Geen bronmutatie. |
| 14 | OefenHub frontend | Geschiedenisoverzicht | Toont filterregel in standaardstand. | Standaardperiode of defaultfilter is zichtbaar. | UC-LLN-HIS-002 voor interactie. |
| 15 | OefenHub frontend | Geschiedenistabel | Toont geschiedenisregels. | Leerling ziet afgerond, aantal vragen, goed, fout en Geen idee. | Uniforme runvelden. |
| 16 | OefenHub frontend | Geschiedenistabel | Maakt regels klikbaar voor resultaatdetail. | Doorklikcontext is beschikbaar. | UC-LLN-HIS-003. |
| 17 | OefenHub frontend | Paginering | Toont standaardpaginering wanneer nodig. | Leerling ziet actuele reeks en navigatie. | UC-LLN-HIS-002. |
| 18 | OefenHub frontend | Leegstaat | Toont lege staat wanneer geen runs bestaan. | Geen foutmelding nodig. | Normale toestand. |
| 19 | Leerling | Geschiedenisoverzicht | Bekijkt de lijst. | Er vindt geen domeinmutatie plaats. | Read-only. |
| 20 | Leerling | Navigatie | Kiest Terug naar <oefening>. | Frontend keert terug naar oefening-startpagina. | Routecontext. |
| 21 | OefenHub frontend | Oefening-startpagina | Toont oefeningcontext opnieuw. | Leerling kan andere oefenacties kiezen. | Geen mutatie. |
| 22 | OefenHub backend | Logging | Kan technische requestlogging vastleggen. | Geen domeinevent vereist. | Applicatielogging. |
| 23 | OefenHub backend | Resultaat-/geschiedenisservice | Voert aanvullende consistentiecontrole 23 uit. | Alleen bruikbare gegevens gaan door naar de frontend. | Server-side afleiding. |
| 24 | OefenHub backend | Resultaat-/geschiedenisservice | Voert aanvullende consistentiecontrole 24 uit. | Alleen bruikbare gegevens gaan door naar de frontend. | Server-side afleiding. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Geen geldige leerlingcontext | Routeguard blokkeert de geschiedenisroute en leidt naar login of veilige contextafhandeling. | Niet van toepassing | Geen |
| ALT-002 | 4 | Oefening bestaat niet meer als actuele startcontext | Systeem probeert historische context veilig te tonen wanneer er afgeronde runs bestaan; anders volgt niet-beschikbaarafhandeling. | Niet van toepassing | Geen |
| ALT-003 | 5 | Leerling heeft geen toegang tot de context | Backend geeft geen geschiedenisdataset terug. | Niet van toepassing | Geen |
| ALT-004 | 6 | Geen afgeronde runs gevonden | Frontend toont lege staat met terugnavigatie. | Niet van toepassing | Geen |
| ALT-005 | 7 | Alleen niet-afgeronde runs aanwezig | Lijst blijft leeg omdat deze runs niet als geschiedenis gelden. | Niet van toepassing | Geen |
| ALT-006 | 8 | Dataset bevat testruns | Backend filtert testruns uit. | Niet van toepassing | Geen |
| ALT-007 | 10 | Historische naamgeving ontbreekt gedeeltelijk | Systeem toont beschikbare snapshot- of fallbackcontext zonder technische GUID's. | Niet van toepassing | Geen |
| ALT-008 | 11 | Paginering vraagt pagina buiten bereik | Backend corrigeert naar geldige pagina of levert lege pagina binnen grenzen. | Niet van toepassing | Geen |
| ALT-009 | 12 | Databasefout bij laden | Systeem toont veilige foutafhandeling en geen gedeeltelijke dataset. | Niet van toepassing | Geen |
| ALT-010 | 16 | Resultaatdetail niet langer toegankelijk | Doorklik wordt geblokkeerd door UC-LLN-HIS-003. | Niet van toepassing | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Geschiedenis toont alleen exercise runs waarvoor de ingelogde leerling server-side inzagerecht heeft. |
| BR-002 | Afgeronde leerlingruns blijven zichtbaar in geschiedenis, ook wanneer actuele oefening- of niveauautorisatie later wijzigt. |
| BR-003 | Niet-afgeronde runs verschijnen niet als afgeronde geschiedenisregel. |
| BR-004 | Docent-testruns worden niet als permanente leerlinggeschiedenis getoond. |
| BR-005 | Uniforme totalen en statistieken worden gelezen uit opgeslagen runvelden en niet telkens opnieuw uit de modulepayload berekend. |
| BR-006 | Technische identifiers zoals GUID's worden niet als herkenningsmiddel aan de leerling getoond. |
| BR-007 | Zoeken, filteren en pagineren wijzigen geen domeindata. |
| BR-008 | Een resultaatdetail mag alleen worden geopend voor een run die binnen de geautoriseerde leerlingcontext valt. |
| BR-009 | Historische niveau-, categorie- en oefeningcontext blijft leidend voor geschiedenisweergave. |
| BR-010 | PDF-download gebruikt dezelfde historisch opgeslagen runcontext als de resultaatweergave. |
| BR-011 | UC-LLN-HIS-001 gebruikt bestaande resultaat- en geschiedenisbronnen en maakt geen alternatieve bron van waarheid aan. |
| BR-012 | Wanneer actuele toegang is vervallen, blijft eerder afgeronde geschiedenis alleen zichtbaar voor zover historie volgens de bestaande regels bewaard mag blijven. |
| BR-013 | Browsergeschiedenis, URL-manipulatie en clientcache geven geen recht op extra resultaten of geschiedenis. |
| BR-014 | De frontend mag de dataset niet uitbreiden buiten de door backend geleverde geautoriseerde selectie. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Oefeningcontext | De oefening moet bij de gevraagde historische of actuele context horen en mag niet alleen uit clientstate worden vertrouwd. |
| Leerling-id | De backend gebruikt de server-side gebruiker en nooit een client-aangeleverde leerling-id als bron voor eigen geschiedenis. |
| Runstatus | Alleen afgeronde runs met afrondmoment worden als geschiedenisregel getoond. |
| Testrun | IsTestRun mag niet zichtbaar worden als permanente leerlinggeschiedenis. |
| Niveaucontext | De run moet binnen de gevraagde oefening- en niveaucontext vallen of als historische context verklaarbaar zijn. |
| Samenvattingsvelden | Aantal vragen, goed, fout en Geen idee moeten uit opgeslagen uniforme velden komen. |
| Sortering | Standaardsortering is aflopend op afrondmoment. |
| Leeg resultaat | Geen geschiedenisregels is een geldige toestand. |
| Technische identifiers | GUID's worden niet als zichtbare herkenningswaarde getoond. |
| Autorisatie | De dataset wordt voor iedere request opnieuw server-side gefilterd. |
11. Datamutaties en events
| Stap | Type | Entiteit / gegevensbron | Mutatie |
|---|---|---|---|
| 1 | Read | Sessie- en leerlingcontext | De actuele leerlingcontext wordt gecontroleerd. |
| 4 | Read | Oefening-, categorie- en niveaucontext | De gevraagde oefeningcontext wordt server-side gevalideerd. |
| 6 | Read | ExerciseRuns | Afgeronde eigen runs binnen de toegestane context worden gelezen. |
| 9 | Read | Uniforme runvelden | Afrondmoment, aantallen en samenvattingswaarden worden gelezen. |
| 12 | Presentatie | Geschiedenisreadmodel | Het overzicht wordt opgebouwd uit bestaande data. |
| 18 | Presentatie | Leegstaat | Een lege geschiedenis wordt getoond zonder domeinmutatie. |
Er worden in deze usecase geen functionele domeinevents geregistreerd. Technische requestlogging valt buiten de usecasebron en verandert geen domeindata.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
ExerciseRuns | De runs worden gelezen maar niet gewijzigd. |
ExerciseRunProgress / payload | Vraagdetails worden in deze lijstweergave niet aangepast. |
Users | Het bekijken van geschiedenis wijzigt geen accountgegevens. |
UserSettings | Filterstand wordt in deze usecase niet als structurele voorkeur opgeslagen. |
UserRelationships | Relatiecontext wordt niet gewijzigd. |
TeacherStudentLevelAccess | Autorisaties worden niet gewijzigd. |
SystemMessages | Er wordt geen systeembericht aangemaakt. |
PrivateMessageThreads | Er wordt geen privébericht aangemaakt. |
Tickets | Er wordt geen melding aangemaakt. |
| PDF-bestand | Er wordt geen PDF gegenereerd in deze usecase. |
13. State diagram
Niet van toepassing als zelfstandig statusmodel. Deze usecase wijzigt geen persistent statusobject. De zichtbaarheid van geschiedenis en resultaten wordt afgeleid uit bestaande runvelden, accountcontext, autorisatiecontext en historische data.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Hoofdroute
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Alle stappen | Geschiedenis gebruikt geen popupregister-popup. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Functioneel Ontwerp beschrijft geschiedenis, filters, resultaatdetail, statistieken, opnieuw maken en PDF-download vanuit leerlingcontext. |
| Technisch Ontwerp | Technisch Ontwerp: oefenruns en resultaten, PDF-export, readmodels en tellers, frontend-resultaatweergave en privacy/retentie beschrijft de technische afbakening, server-side brondata, autorisatie en UI-compositie voor deze usecase. |
| Software Requirements Specification | Software Requirements Specification bevat centrale eisen en acceptatiecriteria voor resultaten, geschiedenis, statistieken, PDF-export en autorisatie op historische data. |
| Database-informatie | Database-informatie blijft bron voor runresultaten, voortgangsrecords, snapshots en exportbrondata; normale PDF-downloads introduceren geen permanente PDF-tabel. |
| Ontwerpbronnen | Ontwerpbronnen bevatten aanvullende businessregels voor resultaatweergave, geschiedenis, statistieken en exportrepresentatie. |
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-LLN-HIS-001-001 | SRS-LRN-010 SRS-NFR-AUD-001 AC-LRN-010 AC-NFR-AUD-001 | Een leerling de geschiedenis van een specifieke oefening kunnen tonen |
REQ-UC-LLN-HIS-001-002 | SRS-AUTH-001 SRS-RDM-001 SRS-RDM-005 SRS-RDM-006 SRS-LRN-010 SRS-NFR-AUD-001 AC-AUTH-001 AC-RDM-001 AC-RDM-005 AC-RDM-006 AC-LRN-010 AC-NFR-AUD-001 | Geschiedenis server-side filteren op de ingelogde leerling |
REQ-UC-LLN-HIS-001-003 | SRS-LRN-008 SRS-NFR-AUD-001 AC-LRN-008 AC-NFR-AUD-001 | Alleen afgeronde runs als oefeninggeschiedenis tonen |
REQ-UC-LLN-HIS-001-004 | SRS-RDM-001 SRS-RDM-006 SRS-LRN-008 SRS-NFR-AUD-001 AC-RDM-001 AC-RDM-006 AC-LRN-008 AC-NFR-AUD-001 | Niet-afgeronde runs uitsluiten van de afgeronde geschiedenislijst |
REQ-UC-LLN-HIS-001-005 | SRS-LRN-010 SRS-TCH-004 SRS-NFR-AUD-001 AC-LRN-010 AC-TCH-004 AC-NFR-AUD-001 | Docent-testruns uitsluiten van leerlinggeschiedenis |
REQ-UC-LLN-HIS-001-006 | SRS-LRN-010 SRS-NFR-AUD-001 AC-LRN-010 AC-NFR-AUD-001 | Uniforme runvelden gebruiken voor geschiedenisregels |
REQ-UC-LLN-HIS-001-007 | SRS-LRN-010 SRS-NFR-SEC-001 SRS-NFR-AUD-001 AC-LRN-010 AC-NFR-SEC-001 AC-NFR-AUD-001 | Een lege geschiedenis veilig kunnen tonen |
REQ-UC-LLN-HIS-001-008 | SRS-LRN-009 AC-LRN-009 | Technische identifiers verbergen voor leerlingen |
REQ-UC-LLN-HIS-001-009 | SRS-AUTH-001 SRS-LRN-006 AC-AUTH-001 AC-LRN-006 | Doorklikken naar resultaatdetail alleen toestaan voor geautoriseerde runs |
REQ-UC-LLN-HIS-001-010 | SRS-LRN-010 SRS-NFR-AUD-001 AC-LRN-010 AC-NFR-AUD-001 | Bij het bekijken van geschiedenis geen domeindata wijzigen |