UC-LLN-HIS-003 — Resultaatdetail vanuit geschiedenis openen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-HIS-003 |
| Naam | Resultaatdetail vanuit geschiedenis openen |
| 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 | Geschiedenistabel, resultaatdetailweergave, resultaatpopup/resultaatcomponent, terugnavigatie. |
| Gerelateerde usecases | UC-LLN-HIS-001 — Oefeninggeschiedenis bekijken; UC-LLN-HIS-004 — Geschiedenis alles bekijken; UC-LLN-RES-001 — Resultaat na afronding bekijken; UC-LLN-RES-002 — Resultaatstatistieken bekijken; UC-LLN-RES-003 — Oefening opnieuw maken; UC-LLN-RES-004 — Resultaat als PDF downloaden |
| Primaire entiteiten | ExerciseRuns, opgeslagen vraag- en antwoordpayload, uniforme runstatistieken |
| Secundaire entiteiten / events | Exercises, Categories, Levels, ExerciseModules, opgeslagen resultaatpayload |
| 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 vanuit een geschiedenisregel het resultaatdetail van een afgeronde run opent. Het resultaatdetail gebruikt dezelfde functionele resultaatweergave als de resultaatpopup na afronding, maar de ingang is de geschiedenispagina. De backend controleert opnieuw of de run bestaat, afgerond is en bij de ingelogde leerling hoort of anderszins binnen de toegestane historische context valt.
Deze usecase is een leesflow. De leerling kan vanuit het resultaatdetail vervolgacties starten, zoals PDF-download of opnieuw maken, maar die acties blijven eigen usecases. Het openen van het resultaatdetail mag geen run, statistiek, relatie of autorisatie wijzigen.
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:
- klikken op een geschiedenisregel
- server-side valideren van run-id en leerlingcontext
- controleren dat de run afgerond en resultaatwaardig is
- laden van dezelfde resultaatdata als de resultaatpopup gebruikt
- tonen van samenvatting, vraagdetails en resultaatstatus
- tonen van statistiekensectie via opgeslagen runvelden
- tonen van duplicaat- of gedeelde context waar relevant
- aanbieden van vervolgacties volgens bestaande voorwaarden
- terugnavigeren naar de geschiedenislijst
- veilig blokkeren van onbekende of niet-toegankelijke runs
Deze usecase omvat niet:
- berekenen van statistieken als nieuwe afrondactie
- PDF genereren
- oefening opnieuw maken
- oefening delen
- geschiedenis filteren
- run wijzigen
- vraagantwoorddata corrigeren
- docent- of ouderdetailweergave
- beheeraudit bekijken
- nieuwe domeinstatus aanmaken
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 in de oefeninggeschiedenis of geschiedenis-alles een afgeronde run selecteert om het resultaatdetail te openen.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Leerling | Geschiedenistabel | Klikt op een geschiedenisregel. | Frontend start resultaatdetailroute. | ExerciseRunId. |
| 2 | OefenHub frontend | Resultaatdetailroute | Stuurt runreferentie naar backend. | Backendvalidatie start. | Geen client-side autorisatie. |
| 3 | OefenHub backend | Routeguard | Controleert leerlingcontext. | Ongeldige sessie wordt geblokkeerd. | Users.Id. |
| 4 | OefenHub backend | Resultaatservice | Zoekt de run op. | Onbekende run wordt geweigerd. | ExerciseRuns.Id. |
| 5 | OefenHub backend | Resultaatservice | Controleert eigenaar of toegestane historische inzage. | Onbevoegde inzage wordt geweigerd. | Server-side. |
| 6 | OefenHub backend | Resultaatservice | Controleert dat de run afgerond is. | Alleen afgeronde runs tonen volledig resultaat. | CompletedAtUtc. |
| 7 | OefenHub backend | Resultaatservice | Laadt uniforme runvelden. | Samenvatting en statistieken zijn beschikbaar. | Opgeslagen velden. |
| 8 | OefenHub backend | Resultaatservice | Laadt vraag- en antwoorddetails. | Resultatentabel kan worden opgebouwd. | Payload. |
| 9 | OefenHub backend | Resultaatservice | Laadt historische context. | Niveau, categorie en oefening worden herkenbaar getoond. | Snapshot/context. |
| 10 | OefenHub backend | Resultaatservice | Bepaalt beschikbare vervolgacties. | Knoppen worden volgens voorwaarden getoond. | PDF, opnieuw maken, delen. |
| 11 | OefenHub backend | API response | Stuurt resultaatreadmodel terug. | Frontend kan detailweergave renderen. | Readmodel. |
| 12 | OefenHub frontend | Resultaatdetail | Toont titel en context. | Leerling herkent de afgeronde run. | Historische labels. |
| 13 | OefenHub frontend | Resultaatdetail | Toont samenvatting. | Aantal vragen, goed, fout en datum zijn zichtbaar. | Uniforme velden. |
| 14 | OefenHub frontend | Resultaatdetail | Toont vraagdetails. | Leerling ziet gegeven en juiste antwoorden. | Payload. |
| 15 | OefenHub frontend | Resultaatdetail | Toont resultaatstatussen. | Goed, fout en Geen idee zijn onderscheidbaar. | Visuele status. |
| 16 | OefenHub frontend | Statistiekensectie | Toont opgeslagen statistieken. | Leerling ziet tijd- en spreidingsinformatie. | UC-LLN-RES-002. |
| 17 | OefenHub frontend | Resultaatacties | Toont toegestane vervolgacties. | Leerling kan een vervolgusecase starten. | Voorwaarden. |
| 18 | Leerling | Resultaatdetail | Bekijkt het resultaat. | Geen domeinmutatie vindt plaats. | Read-only. |
| 19 | Leerling | Resultaatdetail | Kiest terug naar geschiedenis. | Frontend navigeert terug naar vorige lijstcontext. | Routecontext. |
| 20 | OefenHub frontend | Geschiedenisoverzicht | Herstelt lijstcontext waar mogelijk. | Filter/pagina kan zichtbaar blijven. | Clientstate opnieuw veilig. |
| 21 | OefenHub backend | Logging | Kan technische requestlogging vastleggen. | Geen domeinevent vereist. | Applicatielogging. |
| 22 | OefenHub frontend | Resultaatdetail | Blijft binnen leerlinglayout. | Geen beheer- of docentdata zichtbaar. | Rolcontext. |
| 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 | Sessie verlopen | Routeguard leidt naar login of veilige context. | Niet van toepassing | Geen |
| ALT-002 | 4 | Run bestaat niet | Systeem toont niet-beschikbaarafhandeling. | Niet van toepassing | Geen |
| ALT-003 | 5 | Run hoort niet bij leerling | Backend weigert detaildata. | Niet van toepassing | Geen |
| ALT-004 | 6 | Run is niet afgerond | Systeem blokkeert resultaatdetail en verwijst naar hervatten wanneer de oefencontext dat toestaat. | Niet van toepassing | Geen |
| ALT-005 | 7 | Uniforme statistiekvelden ontbreken | Systeem toont veilige fout of beperkt resultaat volgens centrale herstelregels. | Niet van toepassing | Geen |
| ALT-006 | 8 | Vraagpayload kan niet worden gelezen | Systeem toont veilige niet-beschikbaarafhandeling voor detaildata. | Niet van toepassing | Geen |
| ALT-007 | 9 | Historische oefeningnaam ontbreekt | Systeem toont beschikbare context zonder technische GUID's. | Niet van toepassing | Geen |
| ALT-008 | 10 | PDF-actie niet beschikbaar | Frontend verbergt of blokkeert de actie. | Niet van toepassing | Geen |
| ALT-009 | 10 | Opnieuw maken niet beschikbaar | Frontend verbergt of blokkeert de actie. | Niet van toepassing | Geen |
| ALT-010 | 19 | Vorige lijstcontext ontbreekt | Frontend navigeert naar standaardgeschiedenis of oefeningpagina. | 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-003 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 |
|---|---|
| ExerciseRunId | Moet bestaan en server-side bij de juiste leerlingcontext passen. |
| Runstatus | Run moet afgerond of formeel resultaatwaardig zijn. |
| Eigenaar | De run moet eigendom van de leerling zijn of binnen een expliciet toegestane historische context vallen. |
| Vraagpayload | Payload moet veilig leesbaar zijn door de resultaatcomponent. |
| Uniforme velden | Samenvatting en statistieken komen uit opgeslagen runvelden. |
| Historische context | Niveau-, categorie- en oefeninglabels moeten functioneel uitlegbaar zijn. |
| Vervolgacties | Elke actie krijgt eigen server-side voorwaarden. |
| Terugnavigatie | Vorige lijstcontext mag geen autorisatie overslaan. |
| Technische identifiers | GUID's worden niet als primaire zichtbare context getoond. |
| Anonimisering | Geanonimiseerde namen worden niet herleidbaar gemaakt. |
11. Datamutaties en events
| Stap | Type | Entiteit / gegevensbron | Mutatie |
|---|---|---|---|
| 1 | Read | Geschiedenisregel / run-id | De geselecteerde resultaatcontext wordt aangeboden aan de backend. |
| 4 | Read | ExerciseRuns | De afgeronde run wordt gelezen. |
| 5 | Read | Sessie- en eigenaarscontrole | De backend controleert dat de leerling dit resultaat mag zien. |
| 7 | Read | Uniforme runvelden | Samenvatting, totalen en statistieken worden gelezen. |
| 8 | Read | Vraag- en antwoordpayload | Vraagdetails en antwoorden worden gelezen. |
| 11 | Presentatie | Resultaatdetailviewmodel | Het resultaatdetail wordt opgebouwd uit bestaande rundata. |
Het openen van resultaatdetail vanuit geschiedenis registreert geen functioneel domeinevent en wijzigt geen run, resultaat, autorisatie of relatie.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
ExerciseRuns | Resultaatdetail leest de run maar wijzigt deze niet. |
ExerciseRunProgress / payload | Antwoorddetails worden niet aangepast. |
ExerciseModules | Modulecontext wordt niet gewijzigd. |
Exercises | Oefeningconfiguratie wordt niet gewijzigd. |
UserSettings | Er wordt geen voorkeur gewijzigd. |
SystemMessages | Er wordt geen systeembericht aangemaakt. |
PrivateMessageThreads | Er wordt geen privébericht aangemaakt. |
Tickets | Er wordt geen melding aangemaakt. |
| PDF-bestand | Binnen deze usecase wordt geen PDF aangemaakt; PDF-export start uitsluitend via UC-LLN-RES-004. |
| Duplicate run | Binnen deze usecase ontstaat geen nieuwe run; opnieuw maken start uitsluitend via UC-LLN-RES-003. |
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 | Openen resultaatdetail | Niet-beschikbaar of geweigerd wordt via routeguard of component 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-003-001 | SRS-LRN-006 SRS-NFR-AUD-001 AC-LRN-006 AC-NFR-AUD-001 | Resultaatdetail vanuit een geschiedenisregel kunnen openen |
REQ-UC-LLN-HIS-003-002 | SRS-AUTH-001 SRS-LRN-006 AC-AUTH-001 AC-LRN-006 | De run server-side valideren voordat resultaatdetails worden getoond |
REQ-UC-LLN-HIS-003-003 | SRS-AUTH-001 SRS-LRN-006 AC-AUTH-001 AC-LRN-006 | Resultaatdetail blokkeren voor runs buiten de leerlingcontext |
REQ-UC-LLN-HIS-003-004 | SRS-AUTH-001 SRS-LRN-006 AC-AUTH-001 AC-LRN-006 | Resultaatdetail blokkeren voor niet-afgeronde runs |
REQ-UC-LLN-HIS-003-005 | SRS-LRN-006 AC-LRN-006 | Dezelfde brondata gebruiken als de resultaatweergave na afronding |
REQ-UC-LLN-HIS-003-006 | SRS-RDM-001 SRS-RDM-002 SRS-LRN-009 AC-RDM-001 AC-RDM-002 AC-LRN-009 | Samenvatting, vraagdetails en statistieken tonen waar beschikbaar |
REQ-UC-LLN-HIS-003-007 | SRS-LRN-009 AC-LRN-009 | Vervolgacties alleen tonen wanneer hun voorwaarden gelden |
REQ-UC-LLN-HIS-003-008 | SRS-LRN-010 SRS-NFR-AUD-001 AC-LRN-010 AC-NFR-AUD-001 | Terugnavigatie naar de geschiedeniscontext ondersteunen |
REQ-UC-LLN-HIS-003-009 | SRS-LRN-009 AC-LRN-009 | Technische identifiers niet als primaire context tonen |
REQ-UC-LLN-HIS-003-010 | SRS-LRN-006 AC-LRN-006 | Bij alleen openen van resultaatdetail geen domeindata wijzigen |