UC-DOC-RES-003 - Afgeronde oefenrun van leerling bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-RES-003 |
| Naam | Afgeronde oefenrun van leerling bekijken |
| Domein | Docent |
| Subdomein | Resultaten en geschiedenis binnen docentcontext |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem, Leerling |
| Rolcontext | Actieve docentcontext met geldige docentrol en resultaatinzage binnen eigen geautoriseerde niveaucontext |
| Betrokken schermen | Docent - Geschiedenis, Docent - Resultaatdetail |
| Gerelateerde usecases | UC-DOC-RES-001, UC-DOC-RES-004, UC-DOC-RES-005, UC-DOC-RES-006, UC-LLN-HIS-003 |
| Primaire entiteiten | Users, TeacherStudentLevelAccess, ExerciseRuns, Exercises, Categories, TeacherLevels |
| Secundaire entiteiten / events | ExerciseRunProgress, modulepayload, resultaatdetail-readmodel, autorisatiecontrole |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een docent een afgeronde oefenrun van een leerling opent vanuit de docentgeschiedenis.
De docent krijgt inzicht in de run binnen de eigen onderwijscontext, inclusief samenvatting en vraag-antwoordgegevens die voor resultaatanalyse nodig zijn.
De flow is read-only en mag de historische run niet herschrijven.
3. Scope
3.1 Binnen scope
- Openen van een concreet resultaat vanuit een toegestane geschiedenisregel.
- Server-side valideren dat de run binnen de docentcontext valt.
- Tonen van runmetadata, niveau, categorie, oefening en afrondmoment.
- Tonen van vraag-antwoordregels voor zover generiek beschikbaar.
- Voorbereiden van vervolgacties zoals statistieken bekijken of PDF downloaden.
3.2 Buiten scope
- Herberekenen of corrigeren van historische resultaten.
- Wijzigen van leerlingantwoorden.
- Opnieuw starten van een leerlingrun namens de leerling.
- Bekijken van resultaten buiten docentcontext.
- Moduleconfiguratie wijzigen.
3.3 DRY-afbakening
- Leerlingresultaten en statistiekdefinities blijven inhoudelijk bronhoudend in de leerlingresultaat- en centrale FO/TO/SRS-regels.
- Docentniveau-autorisaties worden hier toegepast, maar het wijzigen ervan blijft bronhoudend in het subdomein Leerlingen en niveau-autorisaties.
- Relatievorming en relatieontkoppeling blijven bronhoudend in het generieke relatiedomein.
- PDF-layoutregels worden niet per usecase als nieuwe bronwaarheid herhaald, maar verwijzen naar de centrale resultaat- en PDF-afspraken.
- Deze usecases maken geen eigen kopie van oefenruns, statistieken of histories voor docenten.
- Directe toegang via URL, filter of exportverzoek blijft altijd onder dezelfde autorisatiegrens vallen.
- Systeemberichten, privéberichten en meldingen worden niet aangemaakt door het bekijken van resultaten.
- Module-specifieke payload blijft eigendom van de technische module; de docentweergave gebruikt veilige representaties.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd. |
| PRE-002 | De gebruiker heeft een actieve docentrol. |
| PRE-003 | De OefenHub-sessiecontext is server-side opgebouwd. |
| PRE-004 | De betrokken leerling, run of resultatenlijst valt potentieel binnen de docentcontext. |
| PRE-005 | De backend kan actuele autorisatie-, relatie- en resultaatgegevens ophalen. |
| PRE-006 | De relevante resultaatdata is beschikbaar in de persistente run- en voortgangsopslag. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De docent ziet uitsluitend resultaten die binnen de eigen docentcontext vallen. |
| POST-002 | Geen resultaat, oefenrun, autorisatie of profielgegeven is gewijzigd door deze read-only flow. |
| POST-003 | Een verboden of verouderd verzoek is veilig geblokkeerd zonder contextlek. |
| POST-004 | De frontend toont een actuele lijst, detailweergave, export of veilige afwijzing. |
| POST-005 | Fout- en blokkadesituaties worden veilig afgehandeld zonder nieuwe domeinentiteiten te introduceren. |
| POST-006 | Vervolgacties blijven binnen de daarvoor bedoelde usecases. |
6. Trigger
De docent klikt in de leerlinggeschiedenis op een afgeronde oefenrun.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Geschiedenisregel | Klikt op een afgeronde oefenrun | Frontend vraagt detail op | ExerciseRunId |
| 2 | Frontend | Routeguard | Stuurt detailverzoek | Backend start controle | Client-ID is niet leidend |
| 3 | Systeem | Resultatenservice | Laadt runmetadata | Controleert dat run bestaat en afgerond is | ExerciseRuns |
| 4 | Systeem | Autorisatieservice | Controleert docentcontext voor runniveau en leerling | Bepaalt zichtbaarheid | TeacherStudentLevelAccess |
| 5 | Systeem | Resultatenservice | Laadt uniforme totalen | Bouwt samenvatting | TotalCorrect, TotalWrong, CompletedAtUtc |
| 6 | Systeem | Resultatenservice | Laadt generieke vraag-antwoordweergave | Bouwt resultaatdetail | Progress/payload |
| 7 | Systeem | Contextservice | Laadt niveau-, categorie- en oefencontext | Verrijkt detailweergave | TeacherLevels, Categories, Exercises |
| 8 | Systeem | Readmodel | Controleert of modulepresentatie beschikbaar is | Gebruikt veilige fallback waar nodig | ExerciseModules |
| 9 | Frontend | Resultaatdetail | Toont detailinformatie | Docent ziet alleen read-only resultaat | Geen mutatie |
| 10 | Docent | Resultaatdetail | Kiest eventueel statistieken of PDF | Vervolg naar UC-DOC-RES-004 of UC-DOC-RES-005 | Read-only vervolg |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Run bestaat niet | Systeem toont niet-beschikbaarafhandeling. | Niet van toepassing | Geen |
| ALT-002 | 3 | Run is niet afgerond | Systeem weigert detailweergave als geschiedenisresultaat. | Niet van toepassing | Geen |
| ALT-003 | 4 | Run valt buiten docentcontext | Systeem blokkeert toegang zonder inhoud te tonen. | Niet van toepassing | Geen |
| ALT-004 | 6 | Vraagpayload is technisch niet renderbaar | Systeem toont generieke veilige fallback of blokkeert detaildeel. | Niet van toepassing | Geen |
| ALT-005 | 8 | Gekoppelde module is niet meer actief | Historisch resultaat blijft zichtbaar zolang renderrepresentatie beschikbaar is. | Niet van toepassing | Geen |
| ALT-006 | 9 | Frontendcache bevat verouderde runlink | Systeem gebruikt actuele autorisatiecontrole en ververst de lijst. | Niet van toepassing | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een docent mag alleen afgeronde runs openen binnen de eigen geautoriseerde docentcontext. |
| BR-002 | Een afgeronde run wordt read-only getoond. |
| BR-003 | Resultaatdetails worden niet opnieuw berekend als dat niet nodig is voor herstel of controle. |
| BR-004 | Uniforme runvelden zijn leidend voor samenvatting en totalen. |
| BR-005 | Module-specifieke payload wordt alleen gebruikt voor veilige vraag-antwoordrepresentatie. |
| BR-006 | Historische resultaten blijven functioneel leesbaar wanneer de oefening wijzigt. |
| BR-007 | Testruns worden niet als leerlingresultaatdetail getoond. |
| BR-008 | Open of onderbroken runs worden niet via deze resultaatdetailflow getoond. |
| BR-009 | Directe URL-toegang wordt altijd server-side gevalideerd. |
| BR-010 | Technische GUIDs zijn geen gebruikersgerichte herkenningsgegevens. |
| BR-011 | Een gedeelde oefening die als zelfstandige run is afgerond, blijft een zelfstandige run met eigen resultaat. |
| BR-012 | Detailweergave mag geen toegang geven tot andere leerlinggegevens buiten context. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| DocentUserId | Moet overeenkomen met de server-side ingelogde gebruiker en mag niet uit formulierinvoer worden vertrouwd. |
| StudentUserId | Moet binnen de toegestane docentcontext vallen voordat resultaten worden gelezen. |
| ExerciseRunId | Moet bestaan, afgerond zijn en binnen de toegestane context vallen. |
| TeacherLevelId | Moet onderdeel zijn van de eigen docentcontext of historische resultaatcontext waar de docent recht op heeft. |
| CategoryId | Mag alleen als filter worden toegepast binnen de reeds toegestane dataset. |
| ExerciseId | Mag alleen als filter of context worden gebruikt binnen de toegestane dataset. |
| Periodefilter | Moet geldige datums bevatten en mag niet leiden tot datasetuitbreiding buiten autorisatie. |
| Paginering | Moet worden begrensd op toegestane waarden en bij lege pagina veilig terugvallen. |
| PDF-bestandsnaam | Moet worden opgeschoond van ongeldige tekens en lengtebeperkingen respecteren. |
| Modulepayload | Mag alleen via veilige render- of exportrepresentatie worden gebruikt. |
11. Datamutaties en events
| Stap | Type | Entiteit / readmodel | Gedrag |
|---|---|---|---|
| 1 | Query | Docentcontext-readmodel | Controleert actuele docenttoegang tot de leerling, het niveau en de run. |
| 2 | Query | ExerciseRuns | Leest de afgeronde run als deze binnen de docentcontext valt. |
| 3 | Query | ExerciseRunProgress / resultaatdetail-readmodel | Leest vraagdetails, antwoorden, uniforme totalen en opgeslagen statistiekvelden. |
| 4 | Geen domeinmutatie | ExerciseRuns / ExerciseRunProgress | Het openen van een afgerond resultaat wijzigt geen runinhoud, score of voortgang. |
| 5 | Geen domeinmutatie | Exercises / Categories / TeacherLevels | Historische of betekenisvolle context wordt gelezen, niet aangepast. |
| 6 | Geen domeinmutatie | SystemMessages / PrivateMessages / Tickets | Resultaatdetailinzage maakt geen communicatie- of meldingsrecords aan. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Users | Resultaat- en geschiedenisweergave wijzigt geen gebruikersaccount. |
| UserRoles / Roles | Bekijken of exporteren van resultaten wijzigt geen rollen. |
| UserRelationships | Docent-leerlingrelaties worden alleen gecontroleerd, niet gewijzigd. |
| TeacherStudentLevelAccess | Autorisaties worden gecontroleerd, niet aangepast. |
| TeacherLevels | Niveaucontext wordt gelezen en niet gewijzigd. |
| Categories | Categoriecontext wordt gelezen en niet gewijzigd. |
| Exercises | Oefeningcontext wordt gelezen en niet gewijzigd. |
| ExerciseRuns | Bekijken, filteren of exporteren wijzigt de run niet. |
| ExerciseRunProgress | Vraagdetails worden gelezen en niet aangepast. |
| SystemMessages | Resultaatinzage maakt geen systeemberichten aan. |
| PrivateMessages | Resultaatinzage maakt geen privéberichten aan. |
| Tickets | Resultaatinzage maakt geen melding aan. |
13. State diagram
Niet van toepassing als persistent statusmodel. De usecase leest bestaande oefenrunstatussen en autorisatiecontext, maar introduceert geen nieuwe status voor docentresultaatinzage.
14. Decision flow
15. Data lifecycle diagram
Deze usecase maakt geen nieuwe resultaatdata aan. Het lifecyclebeeld toont dat bestaande runs alleen worden gelezen.
16. Sequence diagrammen
16.1 Afgeronde run openen
16.2 Directe route of verouderde clientstate blokkeren
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Alle momenten | Resultaatinzage, filtering, export en blokkades gebruiken geen nieuwe domeinspecifieke popupregister-popup. |
| Niet van toepassing | PDF-downloadfout | Een exportfout wordt via generieke foutafhandeling verwerkt zonder popupteksten in de usecase te dupliceren. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Docentresultaten moeten expliciet contextgebonden worden beschreven: alleen resultaten van niveaus die de docent zelf aan de leerling heeft geautoriseerd of waarvoor de docent volgens de geldende docentcontext inzagerecht heeft. |
| Technisch Ontwerp | Technisch Ontwerp: oefenruns, resultaten en PDF-brondata, PDF-export, readmodels en resultaatlezers en autorisatie beschrijven de technische uitwerking. Backendqueries voor geschiedenis, filters, resultaatdetails en PDF-export moeten altijd eerst autorisatiecontext toepassen en daarna pas filters, sortering of exportlogica. |
| Software Requirements Specification | Requirements moeten vastleggen dat directe URL-toegang, filterparameters en exportverzoeken geen toegang buiten docentcontext mogen opleveren. |
| Database-informatie | ExerciseRuns en gerelateerde resultaatdata blijven bronhoudend; er is geen aparte docentresultatentabel nodig. |
| Ontwerpbronnen | Autorisatiematrix, business rules en usecase-matrices moeten docentresultaatinzage en blokkades buiten context opnemen. Read-only resultaatinzage vraagt geen nieuw domeinevent. |
| Privacy/AVG | Resultaatinzage door docenten moet dataminimalisatie respecteren en geen resultaten buiten onderwijscontext zichtbaar maken. |
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-DOC-RES-003-001 | SRS-LRN-009 SRS-TCH-001 AC-LRN-009 AC-TCH-001 | Een afgeronde oefenrun binnen docentcontext kunnen tonen |
REQ-UC-DOC-RES-003-002 | SRS-AUTH-001 SRS-LRN-006 SRS-TCH-004 AC-AUTH-001 AC-LRN-006 AC-TCH-004 | Niet-afgeronde runs weigeren als resultaatdetail |
REQ-UC-DOC-RES-003-003 | SRS-LRN-003 SRS-TCH-001 SRS-NFR-SEC-001 AC-LRN-003 AC-TCH-001 AC-NFR-SEC-001 | Vraag-antwoordgegevens veilig renderen |
REQ-UC-DOC-RES-003-004 | SRS-LRN-009 SRS-TCH-001 AC-LRN-009 AC-TCH-001 | Historische runcontext behouden |
REQ-UC-DOC-RES-003-005 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Directe toegang buiten context blokkeren |
REQ-UC-DOC-RES-003-006 | SRS-TCH-004 AC-TCH-004 | Resultaatdetails niet wijzigen bij bekijken |
REQ-UC-DOC-RES-003-007 | SRS-AUTH-001 SRS-LRN-009 SRS-TCH-001 AC-AUTH-001 AC-LRN-009 AC-TCH-001 | Toegang tot leerlingresultaten altijd server-side valideren |
REQ-UC-DOC-RES-003-008 | SRS-LRN-009 SRS-TCH-005 AC-LRN-009 AC-TCH-005 | Testruns uitsluiten van docentresultaten |
REQ-UC-DOC-RES-003-009 | SRS-LRN-006 SRS-TCH-004 SRS-NFR-AUD-001 AC-LRN-006 AC-TCH-004 AC-NFR-AUD-001 | Niet-afgeronde runs buiten resultaatgeschiedenis houden |
REQ-UC-DOC-RES-003-010 | SRS-TCH-001 AC-TCH-001 | Technische identifiers niet als gebruikersgerichte herkenningsgegevens tonen |
REQ-UC-DOC-RES-003-011 | SRS-TCH-004 AC-TCH-004 | Resultaatinzage zonder domeinmutatie verwerken |