UC-LLN-HIS-004 — Geschiedenis alles bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-HIS-004 |
| Naam | Geschiedenis alles 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 | Geschiedenis alles-pagina, filterbalk, brede geschiedenistabel, paginering, resultaatdetailroute, lege staat. |
| Gerelateerde usecases | UC-LLN-HIS-001 — Oefeninggeschiedenis bekijken; UC-LLN-HIS-002 — Geschiedenis filteren en pagineren; UC-LLN-HIS-003 — Resultaatdetail vanuit geschiedenis openen; UC-LLN-DEL-003 — Gedeelde oefening starten; UC-LLN-RES-001 — Resultaat na afronding bekijken |
| Primaire entiteiten | ExerciseRuns, historische niveau-, categorie- en oefeningcontext |
| Secundaire entiteiten / events | Gedeelde-oefeningcontext, duplicate-context, breed geschiedenisreadmodel |
| 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 een brede geschiedenisweergave opent met alle afgeronde eigen oefenruns over niveaus, categorieën en oefeningen heen. Deze pagina verschilt van de oefeninggebonden geschiedenis doordat de basisdataset niet beperkt is tot één oefening, maar nog steeds strikt server-side wordt gefilterd op de ingelogde leerling en toegestane historische context. Afgeronde gedeelde oefeningen mogen in deze brede geschiedenis worden opgenomen wanneer zij als zelfstandige afgeronde run van de leerling bestaan.
De pagina ondersteunt minimaal filters op periode, niveau, categorie en type run. De exacte filterinteractie volgt dezelfde principes als UC-LLN-HIS-002: filters beperken de geautoriseerde dataset en openen nooit data van andere leerlingen.
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 brede leerlinggeschiedenis
- server-side ophalen van alle afgeronde eigen runs
- opnemen van afgeronde gedeelde oefeningen als eigen runs
- onderscheiden van normale runs, duplicate runs en gedeelde runs waar relevant
- tonen van periode-, niveau-, categorie- en typefilter
- tonen van samenvattende geschiedenisregels
- pagineren van brede geschiedenis
- doorklikken naar resultaatdetail
- veilig tonen van lege brede geschiedenis
- uitsluiten van niet-afgeronde runs en testruns
Deze usecase omvat niet:
- oefeninggebonden geschiedenis als startpunt
- gedetailleerde resultaatweergave zelf
- PDF exporteren
- oefening opnieuw maken
- delen met vrienden
- docent- of oudergeschiedenis
- beheeranalyse van alle gebruikers
- verwijderen van geschiedenis
- aanpassen van niveauautorisaties
- herberekenen van statistieken
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 de brede pagina Geschiedenis (alles) opent vanuit de leerlingnavigatie, frontpage of een andere toegestane route.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Leerling | Navigatie / frontpage | Opent Geschiedenis (alles). | Frontend opent brede geschiedenisroute. | Leerlingroute. |
| 2 | OefenHub frontend | Geschiedenis alles-route | Vraagt brede geschiedenisdataset op. | Backendvalidatie start. | Geen client-side autorisatie. |
| 3 | OefenHub backend | Routeguard | Controleert sessie en leerlingrol. | Ongeldige context wordt geblokkeerd. | Users.Id, rol Leerling. |
| 4 | OefenHub backend | Geschiedenisservice | Bepaalt basisdataset voor deze leerling. | Alleen eigen runs komen in aanmerking. | Server-side user filter. |
| 5 | OefenHub backend | Geschiedenisservice | Selecteert afgeronde runs over alle niveaus en categorieën. | Brede dataset wordt opgebouwd. | CompletedAtUtc. |
| 6 | OefenHub backend | Geschiedenisservice | Sluit niet-afgeronde runs uit. | Lopende runs verschijnen niet. | Runstatus. |
| 7 | OefenHub backend | Geschiedenisservice | Sluit testruns uit. | Testdata verschijnt niet in leerlinggeschiedenis. | IsTestRun = false. |
| 8 | OefenHub backend | Geschiedenisservice | Neemt afgeronde gedeelde runs op wanneer zij eigen runs zijn. | Ontvangen gedeelde oefeningen zijn zichtbaar na afronding. | Zelfstandige run ontvanger. |
| 9 | OefenHub backend | Geschiedenisservice | Laadt historische contextlabels. | Niveau, categorie en oefening kunnen worden getoond. | Snapshots/context. |
| 10 | OefenHub backend | Filterservice | Past standaardfilter toe. | Defaultdataset wordt begrensd. | Periode/type default. |
| 11 | OefenHub backend | Paginering | Berekent totaal en eerste pagina. | Paginering is beschikbaar. | Query. |
| 12 | OefenHub backend | API response | Stuurt breed geschiedenisreadmodel terug. | Frontend ontvangt regels, filters en totalen. | Readmodel. |
| 13 | OefenHub frontend | Geschiedenis alles | Toont titel en toelichting. | Leerling herkent brede geschiedeniscontext. | Geen beheercontext. |
| 14 | OefenHub frontend | Filterbalk | Toont filters op periode, niveau, categorie en type run. | Leerling kan dataset beperken. | UC-LLN-HIS-002-principes. |
| 15 | OefenHub frontend | Geschiedenistabel | Toont regels met datum, niveau, categorie, oefening en totalen. | Leerling ziet eigen afgeronde oefenhistorie. | Uniforme velden. |
| 16 | OefenHub frontend | Geschiedenistabel | Toont type run waar relevant. | Normaal, opnieuw gemaakt of gedeeld kan worden onderscheiden. | Afgeleide context. |
| 17 | OefenHub frontend | Paginering | Toont pagina-informatie. | Leerling kan navigeren. | Afgeleid totaal. |
| 18 | Leerling | Filterbalk | Past filter toe. | Frontend vraagt nieuwe gefilterde dataset. | Zie filterprincipes. |
| 19 | OefenHub backend | Geschiedenisservice | Past filter toe binnen eigen dataset. | Dataset wordt beperkt, niet uitgebreid. | Server-side. |
| 20 | Leerling | Geschiedenistabel | Klikt op een resultaatregel. | Frontend start resultaatdetailusecase. | UC-LLN-HIS-003. |
| 21 | Leerling | Geschiedenis alles | Bekijkt of verlaat de pagina. | Geen brondata wordt gewijzigd. | Read-only. |
| 22 | OefenHub frontend | Leegstaat | Toont lege staat wanneer geen afgeronde runs bestaan. | Normale toestand. | Geen fout. |
| 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 brede geschiedenis. | Niet van toepassing | Geen |
| ALT-002 | 5 | Geen afgeronde runs | Frontend toont lege brede geschiedenis. | Niet van toepassing | Geen |
| ALT-003 | 8 | Gedeelde run heeft historische snapshotcontext | Systeem toont snapshotcontext zoals bij afronding of delen beschikbaar. | Niet van toepassing | Geen |
| ALT-004 | 9 | Historische context ontbreekt gedeeltelijk | Systeem toont beschikbare functionele context zonder technische GUID's. | Niet van toepassing | Geen |
| ALT-005 | 10 | Filtercombinatie levert geen resultaten op | Frontend toont lege filterstaat. | Niet van toepassing | Geen |
| ALT-006 | 14 | Filterwaarde niet toegestaan | Backend weigert of corrigeert naar veilige default. | Niet van toepassing | Geen |
| ALT-007 | 15 | Run hoort bij ingetrokken actuele autorisatie | Afgeronde geschiedenis blijft zichtbaar voor de leerling zelf. | Niet van toepassing | Geen |
| ALT-008 | 16 | Type run niet eenduidig | Systeem toont algemene historiecontext en vermijdt misleidende labels. | Niet van toepassing | Geen |
| ALT-009 | 20 | Resultaatdetail niet toegankelijk | UC-LLN-HIS-003 blokkeert de detailroute. | Niet van toepassing | Geen |
| ALT-010 | 22 | Databasefout bij brede query | Systeem toont veilige foutafhandeling zonder gedeeltelijke data. | 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-004 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 |
|---|---|
| Leerlingcontext | Basisdataset wordt altijd bepaald vanuit de server-side ingelogde leerling. |
| Runstatus | Alleen afgeronde runs worden getoond. |
| Testrun | Testruns worden uitgesloten. |
| Gedeelde run | Een gedeelde oefening telt pas mee wanneer voor de leerling een zelfstandige afgeronde run bestaat. |
| Niveaufilter | Niveaufilter mag alleen waarden gebruiken die in de eigen historische dataset voorkomen. |
| Categoriefilter | Categoriefilter mag alleen de eigen historische dataset beperken. |
| Typefilter | Type run wordt afgeleid uit runcontext en mag niet client-side worden verzonnen. |
| Periodefilter | Periodefilter gebruikt afrondmoment. |
| Paginering | Paginering blijft binnen gefilterde eigen dataset. |
| Resultaatdetail | Doorklik vereist nieuwe autorisatiecontrole. |
11. Datamutaties en events
| Stap | Type | Entiteit / gegevensbron | Mutatie |
|---|---|---|---|
| 1 | Read | Sessie- en leerlingcontext | De actuele leerlingcontext wordt gecontroleerd. |
| 4 | Read | ExerciseRuns | Eigen afgeronde runs over toegestane contexten worden gelezen. |
| 8 | Read | Gedeelde-oefeningcontext | Afgeronde eigen runs uit ontvangen gedeelde oefeningen worden meegenomen. |
| 10 | Readmodel | Standaardfilter | De standaardweergave wordt afgeleid uit bestaande gegevens. |
| 18 | Readmodel | Filter- en pagineringsparameters | Filters beperken dezelfde eigen dataset. |
| 22 | Presentatie | Leegstaat | Een lege brede geschiedenis wordt getoond zonder domeinmutatie. |
Brede geschiedenis bekijken registreert geen functioneel domeinevent en wijzigt geen brondata.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
ExerciseRuns | Brede geschiedenis leest runs en wijzigt deze niet. |
SharedExerciseRecipients | Ontvangen gedeelde oefeningen worden niet gewijzigd door geschiedenis te bekijken. |
ExerciseRunProgress / payload | Vraagdetails worden niet aangepast. |
UserSettings | Filters worden niet als blijvende voorkeur opgeslagen in deze usecase. |
TeacherStudentLevelAccess | Autorisaties worden niet gewijzigd. |
UserRelationships | Relaties worden niet gewijzigd. |
SystemMessages | Er wordt geen systeembericht aangemaakt. |
| PDF-bestand | Er wordt geen PDF gegenereerd. |
| Duplicate run | Er ontstaat geen duplicate run. |
Tickets | Er wordt geen melding aangemaakt. |
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 | Brede geschiedenis | Lege of geweigerde context wordt op de pagina afgehandeld. |
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-004-001 | SRS-RDM-001 SRS-RDM-005 SRS-RDM-006 SRS-LRN-010 SRS-NFR-AUD-001 AC-RDM-001 AC-RDM-005 AC-RDM-006 AC-LRN-010 AC-NFR-AUD-001 | Een brede geschiedenispagina voor leerlingen kunnen tonen |
REQ-UC-LLN-HIS-004-002 | SRS-LRN-008 SRS-NFR-AUD-001 AC-LRN-008 AC-NFR-AUD-001 | Brede geschiedenis beperken tot eigen afgeronde runs |
REQ-UC-LLN-HIS-004-003 | SRS-LRN-008 SRS-NFR-AUD-001 AC-LRN-008 AC-NFR-AUD-001 | Niet-afgeronde runs en testruns uitsluiten van brede geschiedenis |
REQ-UC-LLN-HIS-004-004 | SRS-LRN-009 SRS-SHR-001 AC-LRN-009 AC-SHR-001 | Afgeronde gedeelde oefeningen opnemen wanneer zij als eigen run bestaan |
REQ-UC-LLN-HIS-004-005 | SRS-RDM-001 SRS-RDM-005 SRS-RDM-006 SRS-CAT-001 SRS-LRN-009 AC-RDM-001 AC-RDM-005 AC-RDM-006 AC-CAT-001 AC-LRN-009 | Filters op periode, niveau, categorie en type run kunnen ondersteunen |
REQ-UC-LLN-HIS-004-006 | SRS-AUTH-001 SRS-RDM-001 SRS-LRN-009 AC-AUTH-001 AC-RDM-001 AC-LRN-009 | Filters alleen binnen de geautoriseerde dataset toepassen |
REQ-UC-LLN-HIS-004-007 | SRS-RDM-001 SRS-RDM-006 SRS-LRN-010 SRS-NFR-AUD-001 SRS-NFR-PER-001 AC-RDM-001 AC-RDM-006 AC-LRN-010 AC-NFR-AUD-001 AC-NFR-PER-001 | Paginering ondersteunen op brede geschiedenis |
REQ-UC-LLN-HIS-004-008 | SRS-AUTH-001 SRS-LRN-006 SRS-NFR-AUD-001 AC-AUTH-001 AC-LRN-006 AC-NFR-AUD-001 | Resultaatdetail vanuit brede geschiedenis kunnen starten via server-side controle |
REQ-UC-LLN-HIS-004-009 | SRS-LRN-010 SRS-NFR-SEC-001 SRS-NFR-AUD-001 AC-LRN-010 AC-NFR-SEC-001 AC-NFR-AUD-001 | Een lege brede geschiedenis veilig tonen |
REQ-UC-LLN-HIS-004-010 | SRS-LRN-010 SRS-NFR-AUD-001 AC-LRN-010 AC-NFR-AUD-001 | Bij bekijken van brede geschiedenis geen domeindata wijzigen |