7. Bekijk geschiedenis
7.1 Schermafbeelding

7.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-DOC-05-01 |
| Schermnaam | Bekijk geschiedenis — leerlingresultaten binnen docentcontext |
| Doelgroep / onderdeel | Docent |
| Bronbestand | oefenhub_docent_05_bekijk_geschiedenis_v1_13.html |
| Mockupversie | V1.13 |
| Screenshotbestand | oefenhub_docent_05_bekijk_geschiedenis_v1_13.png |
| Processtap / context | De docent opent vanuit het leerlingenoverzicht of online-overzicht de geschiedenis van één specifieke leerling en bekijkt alleen afgeronde oefenruns binnen de eigen docentcontext. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | Dit scherm is een lees- en analysepagina. De docent kan hier geen resultaten wijzigen of verwijderen. |
| Route / URL-patroon | /docent/leerlingen/{studentUserId}/geschiedenis?niveau={teacherLevelId}&categorie={categoryId}&periode={periodKey} |
| Autorisatie / vereiste rol-context | Actieve rol Docent; actieve docent-leerlingrelatie met de geselecteerde leerling; inzage uitsluitend voor niveaus die binnen deze docentcontext aan de leerling zijn geautoriseerd. |
| Primair domeinobject / hoofdentiteit | ExerciseRuns van de geselecteerde leerling, gefilterd op docentcontext, niveau-autorisatie, categorie en periode. |
| Gerelateerde schermen / navigatie | 06_leerlingen, 08_online_overzicht, 09_meekijken, 10_autoriseer_leerling, 11_autoriseer_niveau. |
7.3 Functionele beschrijving
Het scherm Bekijk geschiedenis toont de oefengeschiedenis van één geselecteerde leerling voor de ingelogde docent. De pagina is bedoeld om voortgang, afgeronde runs, beantwoorde vragen en statistieken te analyseren zonder dat de docent de resultaten kan aanpassen.
De docent komt op dit scherm nadat eerst een leerling is gekozen, bijvoorbeeld via Leerlingen of Online. De breadcrumb toont daarom de route Home > Leerlingen > <leerlingnaam> > Geschiedenis. De leerlingcontext staat bovenaan vast; de filters op het scherm beperken alleen welke runs en statistieken binnen die leerlingcontext worden getoond.
De kern van het scherm bestaat uit vijf functionele zones:
- een introductieblok met uitleg over docentcontext en autorisatiegrenzen;
- een leerlingkaart met de gekozen leerling en het relevante niveau in deze docentcontext;
- een samenvattingskaart met totalen voor de huidige filterselectie;
- een filterbalk voor zoeken, niveau, categorie en periode;
- een master-detailweergave met links afgeronde oefeningen en rechts de details van de geselecteerde run.
Interpretatie van mockupwaarden
De concrete namen, aantallen, datums, oefeningtitels, antwoorden en statistiekwaarden die in de mockup zichtbaar zijn, zijn voorbeeldwaarden. Zij beschrijven niet één vaste situatie en mogen niet als vaste businessdata worden geïnterpreteerd.
Voor dit scherm geldt dat vrijwel alle inhoudelijke waarden dynamisch worden opgebouwd vanuit de geselecteerde leerling, de actieve docentcontext, de ingestelde filters en de geselecteerde exercise run. Dit geldt onder meer voor leerlingnaam, initialen, niveau, categorie, oefening, afrondmoment, aantal vragen, aantal goed/fout, aantal Geen idee, vraagteksten, gegeven antwoorden, juiste antwoorden en statistieken.
Ook de vraag- en antwoordweergave is moduleafhankelijk. Een rekenmodule kan bijvoorbeeld een compacte som met één antwoordveld tonen, terwijl een andere oefening meerdere antwoordvelden, tekstuele antwoorden of een andere renderstructuur kan gebruiken. De documentatie specificeert daarom de functie, databron en regels achter de velden; de zichtbare mockupwaarden zijn alleen bedoeld als illustratieve testdata.
De lijst Afgeronde oefeningen toont alleen exercise runs die formeel zijn afgerond. Niet-afgeronde runs, tijdelijke docent-testruns en runs buiten de eigen docentcontext blijven buiten beeld. Elke lijstregel toont categorie, oefening, afrondmoment, niveau en compacte totalen voor vragen, goed, fout en Geen idee. De lijst is visueel scrollbaar binnen het kaartblok, zodat de detailweergave ernaast op dezelfde pagina zichtbaar blijft. Voor grotere datasets moet de backend alsnog begrenzen hoeveel records per keer worden geladen; scrollen in de mockup betekent niet dat onbeperkt alle historie in één response mag worden opgehaald.
Wanneer de docent op Bekijk details klikt, wordt de rechter detailkaart gevuld met de geselecteerde exercise run. In de mockup staat deze detailkaart permanent rechts naast de lijst. De detailkaart bevat inklapbare secties voor Samenvatting, Vragen en antwoorden en Statistieken. De gebruiker blijft op dezelfde pagina; er wordt dus geen aparte mutatieflow gestart.
Procesverloop
- De docent opent het scherm vanuit een leerlingcontext.
- Het systeem controleert of de huidige gebruiker in rolcontext
Docenteen actieve docent-leerlingrelatie heeft met de geselecteerde leerling. - Het systeem bepaalt de toegestane niveaus via
TeacherStudentLevelAccessbinnen deze docent-leerlingrelatie. - Het systeem haalt afgeronde, niet-test exercise runs op voor de geselecteerde leerling, beperkt tot de toegestane docentniveaus.
- De filterselecties bepalen welke runs in de lijst en samenvatting meetellen.
- De meest recente zichtbare run wordt standaard geselecteerd, tenzij via route-state of querystring een andere run is meegegeven.
- Bij selectie van een lijstregel worden samenvatting, vraagdetails en statistieken voor die run in het detailpaneel getoond.
Business rules
- De docent ziet uitsluitend resultaten van de geselecteerde leerling binnen de eigen docentcontext.
- De docent ziet geen resultaten van niveaus die door een andere docent zijn geautoriseerd, ook niet wanneer dezelfde leerling met meerdere docenten gekoppeld is.
- Collaboratorrechten op een niveau geven geen automatisch recht op leerlingresultaten. Daarvoor blijft een expliciete docent-leerlingrelatie en leerlingniveau-autorisatie nodig.
- Alleen records met
ExerciseRuns.IsCompleted = trueen een gevuldCompletedAtUtcworden in deze geschiedenis getoond. - Records met
ExerciseRuns.IsTestRun = trueworden niet getoond. - Resultaten worden niet opnieuw berekend voor de lijstweergave. Lijsttotalen en samenvattingswaarden gebruiken de uniforme velden op
ExerciseRuns. - Concrete waarden uit de mockup, zoals namen, aantallen, datums, antwoorden en statistieken, zijn voorbeelddata; implementatie moet deze waarden altijd dynamisch uit de geselecteerde leerling, filters, run en moduleweergave bepalen.
- Vraagdetails worden gelezen uit
ExerciseRunProgressen/of de modulespecifieke payload inQuestionDataJsonBase64. De technische module blijft verantwoordelijk voor interpretatie van modulespecifieke vraag- en antwoordstructuren. - Een fout antwoord of Geen idee moet functioneel toegang geven tot het juiste antwoord als toelichting. In de mockup gebeurt dit compact via de resultaatsindicator; implementatie mag dit als tooltip, inline toelichting of detailregel renderen zolang de informatie beschikbaar is.
- De samenvattingskaart telt altijd binnen de actuele filters. Wijzigt de docent niveau, categorie, periode of zoekterm, dan worden lijst en samenvatting op dezelfde filtercontext gebaseerd.
- Intrekken van autorisatie verwijdert historische runs niet uit de database. Of eerder zichtbare docentgeschiedenis na intrekking zichtbaar blijft, wordt bepaald door de autorisatieregel van dit scherm: standaard toont dit scherm alleen de op dat moment toegestane docentcontext.
Leegstand en foutafhandeling
- Als de leerling geen afgeronde runs heeft binnen de toegestane docentcontext, toont het scherm een lege staat met uitleg dat er nog geen afgeronde oefeningen beschikbaar zijn.
- Als filters geen resultaten opleveren, toont het scherm een filter-lege staat met de mogelijkheid om filters te verruimen.
- Als de docent geen toegang meer heeft tot de leerling of het niveau, wordt geen gedeeltelijke data getoond; het systeem toont een autorisatiemelding en biedt navigatie terug naar Leerlingen.
- Als detaildata van een run technisch niet meer volledig kan worden geïnterpreteerd, blijven de uniforme samenvattingsvelden zichtbaar en toont de vraagdetailsectie een foutmelding dat detailweergave niet beschikbaar is.
7.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-DOC-05-01-S01 | Section | Breadcrumb bovenaan | Navigatiepad vanaf home en leerlingen naar de geschiedenis van de gekozen leerling. | Home › Leerlingen › <leerlingnaam> › Geschiedenis | Leerlingnaam is dynamisch. | HistoryBreadcrumb |
| SCH-DOC-05-01-S02 | Section | Introkaart | Legt uit dat de docent alleen afgeronde oefeningen binnen de eigen docentcontext ziet. | Voortgang van leerling bekijken | Tekst is informatief en niet interactief. | HistoryIntroPanel |
| SCH-DOC-05-01-S03 | Section | Leerlingkaart links onder intro | Toont de vaste leerlingcontext voor dit scherm. | <leerlingnaam> | Naam, niveau en contextregel zijn dynamisch. | StudentContextCard |
| SCH-DOC-05-01-F01 | Field | Leerlingkaart, avatar | Visuele initialenweergave van de geselecteerde leerling. | <initiaal> | Afgeleid uit voornaam of fallback op naamweergave. | StudentAvatarInitial |
| SCH-DOC-05-01-F02 | Field | Leerlingkaart, naam | Volledige weergavenaam van de geselecteerde leerling. | <leerlingnaam> | Dynamisch; niet bewerkbaar op dit scherm. | StudentDisplayName |
| SCH-DOC-05-01-F03 | Field | Leerlingkaart, metaregel | Beschrijft relatie en huidig/geselecteerd niveau binnen de docentcontext. | Gekoppeld als leerling · Huidig niveau: <niveau> | Niveauwaarde is dynamisch; bij meerdere niveaus kan de tekst functioneel worden aangepast naar meervoud. | StudentContextSummary |
| SCH-DOC-05-01-M01 | Message | Leerlingkaart, blauwe melding | Benadrukt dat het scherm beperkt is tot eigen autorisaties. | Alleen jouw geautoriseerde niveaus en resultaten | Informatieve autorisatiehint. | TeacherContextNotice |
| SCH-DOC-05-01-S04 | Section | Samenvattingskaart rechts boven | Toont geaggregeerde waarden over de huidige filterselectie. | Samenvatting | Alle waarden worden herberekend bij filterwijziging. | HistorySummaryPanel |
| SCH-DOC-05-01-F04 | Field | Samenvatting, tegel 1 | Aantal afgeronde runs in de huidige filterselectie. | Afgerond | Teller op runniveau. | CompletedRunCount |
| SCH-DOC-05-01-F05 | Field | Samenvatting, tegel 2 | Gemiddelde score op basis van goed beantwoorde vragen. | Gem. score | Berekend als percentage over de gefilterde runs. | AverageScorePercentage |
| SCH-DOC-05-01-F06 | Field | Samenvatting, tegel 3 | Totaal aantal vragen dat als Geen idee is gemarkeerd. | Geen idee | Som van DunnoCount. | TotalDunnoCount |
| SCH-DOC-05-01-F07 | Field | Samenvatting, tegel 4 | Gemiddelde beantwoordingstijd per vraag. | Gem. tijd | Gewogen gemiddelde over afgeronde vragen. | AverageQuestionTimeSeconds |
| SCH-DOC-05-01-S05 | Section | Filterbalk | Filtert lijst en samenvatting. | Zoek in geschiedenis / Niveau / Categorie / Periode | Filters werken gecombineerd. | HistoryFilterPanel |
| SCH-DOC-05-01-F08 | Field | Zoekveld | Vrij zoeken binnen categorie, oefening en niveau. | Zoek in geschiedenis | Placeholder: Zoek op categorie, oefening of niveau. | HistorySearchQuery |
| SCH-DOC-05-01-F09 | Field | Niveau-dropdown | Beperkt de geschiedenis tot één toegestaan docentniveau of alle eigen niveaus. | Niveau | Opties worden alleen gevuld met niveaus die binnen deze docentcontext toegestaan zijn. | SelectedTeacherLevelId |
| SCH-DOC-05-01-F10 | Field | Categorie-dropdown | Beperkt de geschiedenis tot één categorie. | Categorie | Opties worden bepaald binnen toegestane niveaus en beschikbare runs. | SelectedCategoryId |
| SCH-DOC-05-01-F11 | Field | Periode-dropdown | Beperkt de geschiedenis op afrondmoment. | Periode | Waarden: Afgelopen 7 dagen, Afgelopen 30 dagen, Dit jaar, Alles. | SelectedPeriodKey |
| SCH-DOC-05-01-S06 | Section | Linker kaart | Masterlijst met afgeronde oefeningen. | Afgeronde oefeningen | De lijst is scrollbaar binnen het blok. | CompletedRunsList |
| SCH-DOC-05-01-T01 | Table/List | Lijstregel afgeronde oefening | Eén afgeronde run met titel, afrondmoment, niveau en totalen. | <categorienaam> · <oefeningnaam> | Categorie, oefening en waarden zijn dynamisch per run. Sorteert standaard aflopend op afrondmoment. | CompletedRunListItem |
| SCH-DOC-05-01-F12 | Field | Lijstregel, titel | Combinatie van categorie en oefening. | <categorienaam> · <oefeningnaam> | Weergave komt uit categorie- en oefennaam op basis van runcontext. | RunTitle |
| SCH-DOC-05-01-F13 | Field | Lijstregel, metadata | Afrondmoment en niveau van de run. | Afgerond op <datum> · <tijd> · Niveau: <niveau> | Datum, tijd en niveau zijn dynamisch; tijd wordt in lokale gebruikerstijd weergegeven. | RunCompletionMeta |
| SCH-DOC-05-01-F14 | Field | Lijstregel, totalen | Compacte tags met aantal vragen, goed, fout en Geen idee. | <aantal vragen> vragen · <aantal goed> goed · <aantal fout> fout · <aantal geen idee> geen idee | Dynamische waarden uit uniforme runvelden; mockupwaarden zijn voorbeelddata. | RunTotalsSummary |
| SCH-DOC-05-01-B01 | Button | Lijstregel rechts | Selecteert de run en toont details rechts. | Bekijk details | Verandert geen data. | ViewRunDetailsButton |
| SCH-DOC-05-01-S07 | Section | Rechter kaart | Detailpaneel voor geselecteerde run. | Resultaatdetails | Alleen-lezen. | RunDetailPanel |
| SCH-DOC-05-01-S08 | Section | Detailpaneel, sectie Samenvatting | Inklapbare sectie met kerngegevens van de run. | Samenvatting | Staat in mockup open. | RunSummarySection |
| SCH-DOC-05-01-F15 | Field | Samenvatting detail | Niveau van de geselecteerde run. | Niveau | Waarde op basis van ExerciseRuns.LevelId. | DetailLevelName |
| SCH-DOC-05-01-F16 | Field | Samenvatting detail | Oefeningnaam van de geselecteerde run. | Oefening | Waarde op basis van ExerciseRuns.ExerciseId. | DetailExerciseName |
| SCH-DOC-05-01-F17 | Field | Samenvatting detail | Totaal aantal vragen in de run. | Totaal vragen | Waarde uit TotalQuestions. | DetailTotalQuestions |
| SCH-DOC-05-01-F18 | Field | Samenvatting detail | Aantallen goed, fout en Geen idee. | Goed / fout / geen idee | Waarden uit uniforme runvelden. | DetailResultCounts |
| SCH-DOC-05-01-F19 | Field | Samenvatting detail | Volgnummer van geselecteerde run binnen de gefilterde set. | Run van totaal runs | Afgeleid uit sortering en totaal binnen filtercontext. | DetailRunRank |
| SCH-DOC-05-01-F20 | Field | Samenvatting detail | Afrondmoment van de run. | Afgerond op | Lokale weergave van CompletedAtUtc. | DetailCompletedAt |
| SCH-DOC-05-01-S09 | Section | Detailpaneel, sectie Vragen en antwoorden | Scrollbaar overzicht van vragen, gegeven antwoorden en resultaatstatus. | Vragen en antwoorden | Staat in mockup open. | QuestionAnswerSection |
| SCH-DOC-05-01-T02 | Table/List | Vraagregel | Eén vraag binnen de geselecteerde run. | Nr / Opgave / Gegeven antwoord | Juist antwoord wordt minimaal beschikbaar gemaakt bij fout of Geen idee. | QuestionAnswerRow |
| SCH-DOC-05-01-F21 | Field | Vraagregel, nummer | Volgnummer van de vraag binnen de run. | Nr | Komt uit SequenceNumber. | QuestionSequenceNumber |
| SCH-DOC-05-01-F22 | Field | Vraagregel, opgave | Gerenderde opgave. | Opgave | Module-specifieke weergave uit vraagpayload; kan per oefeningstype verschillen. | QuestionPrompt |
| SCH-DOC-05-01-F23 | Field | Vraagregel, antwoord | Door leerling gegeven antwoord of Geen idee. | Gegeven antwoord | Module-specifieke antwoordrepresentatie. | GivenAnswerDisplay |
| SCH-DOC-05-01-M02 | Message | Vraagregel, groen vinkje | Resultaatstatus goed. | ✓ | Alleen visueel compact; semantische status moet toegankelijk zijn. | CorrectResultIndicator |
| SCH-DOC-05-01-M03 | Message | Vraagregel, rood kruis | Resultaatstatus fout. | ✕ | Moet juiste antwoord als toelichting beschikbaar maken. | IncorrectResultIndicator |
| SCH-DOC-05-01-M04 | Message | Vraagregel, geel vraagteken | Resultaatstatus Geen idee. | ? | Telt functioneel als fout en toont juiste antwoord als toelichting. | DunnoResultIndicator |
| SCH-DOC-05-01-S10 | Section | Detailpaneel, sectie Statistieken | Inklapbare sectie met runstatistieken. | Statistieken | Staat in mockup open; waarden zijn runniveau-statistieken. | RunStatisticsSection |
| SCH-DOC-05-01-F24 | Field | Statistieken | Gemiddelde tijd per vraag. | Gemiddelde tijd per vraag | Uit uniforme statistiekvelden. | DetailAverageTimeSeconds |
| SCH-DOC-05-01-F25 | Field | Statistieken | Nauwkeurigheid van de run. | Nauwkeurigheid | Berekend op basis van goed / totaal. | DetailAccuracyPercentage |
| SCH-DOC-05-01-F26 | Field | Statistieken | Totale doorlooptijd. | Totale doorlooptijd | Berekend uit start- en afrondmoment of opgeslagen uniform veld. | DetailTotalDuration |
| SCH-DOC-05-01-F27 | Field | Statistieken | Aantal uitschieters. | Uitschieters | Som van onder- en bovengrensuitschieters. | DetailOutlierCount |
| SCH-DOC-05-01-F28 | Field | Statistieken | Langzaamste vraag. | Langzaamste vraag | Afgeleid uit vraagdoorlooptijden. | DetailSlowestQuestion |
| SCH-DOC-05-01-F29 | Field | Statistieken | Snelste vraag. | Snelste vraag | Afgeleid uit vraagdoorlooptijden. | DetailFastestQuestion |
| SCH-DOC-05-01-F30 | Field | Statistieken | Ondergrens van statistische bandbreedte. | Ondergrens | Waarde uit LowerBoundSeconds. | DetailLowerBoundSeconds |
| SCH-DOC-05-01-F31 | Field | Statistieken | Bovengrens van statistische bandbreedte. | Bovengrens | Waarde uit UpperBoundSeconds. | DetailUpperBoundSeconds |
| SCH-DOC-05-01-F32 | Field | Uitschieterblok | Vragen onder de ondergrens. | Uitschieters ondergrens | Toont Geen wanneer er geen items zijn. | LowerOutlierList |
| SCH-DOC-05-01-F33 | Field | Uitschieterblok | Vragen boven de bovengrens. | Uitschieters bovengrens | Toont dynamisch vraagnummer en tijd in seconden. | UpperOutlierList |
| SCH-DOC-05-01-M05 | Message | Lege lijst | Melding wanneer geen afgeronde runs beschikbaar zijn. | Nog geen afgeronde oefeningen gevonden | Niet zichtbaar in de mockup, wel vereist voor volledige schermwerking. | EmptyHistoryMessage |
| SCH-DOC-05-01-M06 | Message | Autorisatiefout | Melding wanneer docent geen toegang heeft tot geselecteerde leerling of niveau. | Je hebt geen toegang tot deze geschiedenis | Bevat geen detaildata. | UnauthorizedHistoryMessage |
7.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-DOC-05-01-S01 | Breadcrumb | Home › Leerlingen › <leerlingnaam> › Geschiedenis | HistoryBreadcrumb | Routecontext + Users | Afgeleid | string | Nee | Leerlingnaam wordt alleen getoond wanneer autorisatiecontrole succesvol is. |
| SCH-DOC-05-01-F01 | Avatar | M | StudentAvatarInitial | Users | Afgeleid | string(1-2) | Nee | Afleiden uit voornaam; fallback op achternaam of gebruikerscode. |
| SCH-DOC-05-01-F02 | Leerlingnaam | <leerlingnaam> | StudentDisplayName | Users | Database | string | Nee | Volledige naam volgens ingestelde naamweergave; geen e-mailadres tonen. |
| SCH-DOC-05-01-F03 | Leerlingcontext | Gekoppeld als leerling · Huidig niveau: <niveau> | StudentContextSummary | UserRelationships, TeacherStudentLevelAccess, TeacherLevels | Afgeleid | string | Nee | Niveau en contexttekst zijn dynamisch; alleen tonen als actieve docent-leerlingrelatie bestaat. |
| SCH-DOC-05-01-M01 | Autorisatiehint | Alleen jouw geautoriseerde niveaus en resultaten | TeacherContextNotice | Applicatietekst | Vast | string | Nee | Moet zichtbaar blijven om privacygrens te verduidelijken. |
| SCH-DOC-05-01-F04 | Samenvatting | Afgerond | CompletedRunCount | ExerciseRuns | Berekend | integer | Nee | Count van runs met IsCompleted = true, IsTestRun = false, gevuld CompletedAtUtc, binnen filters en docentcontext. |
| SCH-DOC-05-01-F05 | Samenvatting | Gem. score | AverageScorePercentage | ExerciseRuns.CorrectCount, ExerciseRuns.TotalQuestions | Berekend | decimal/percentage | Nee | sum(CorrectCount) / sum(TotalQuestions) * 100; bij nul vragen geen percentage tonen. |
| SCH-DOC-05-01-F06 | Samenvatting | Geen idee | TotalDunnoCount | ExerciseRuns.DunnoCount | Berekend | integer | Nee | Som binnen dezelfde filtercontext als de lijst. |
| SCH-DOC-05-01-F07 | Samenvatting | Gem. tijd | AverageQuestionTimeSeconds | ExerciseRuns.AverageTimeSeconds, ExerciseRuns.TotalQuestions | Berekend | decimal/seconden | Nee | Gewogen gemiddelde: sum(AverageTimeSeconds * TotalQuestions) / sum(TotalQuestions). |
| SCH-DOC-05-01-F08 | Filter | Zoek in geschiedenis | HistorySearchQuery | Gebruikersinvoer | User input | string | Ja | Zoeken op categorie-, oefening- en niveaunaam; trimmen; case-insensitive; geen wildcard-SQL direct gebruiken. |
| SCH-DOC-05-01-F09 | Filter | Niveau | SelectedTeacherLevelId | TeacherStudentLevelAccess, TeacherLevels | Database + user input | GUID/null | Ja | Opties beperken tot niveaus die binnen huidige docent-leerlingrelatie toegestaan zijn; null betekent alle toegestane niveaus. |
| SCH-DOC-05-01-F10 | Filter | Categorie | SelectedCategoryId | Categories, TeacherLevelCategories, ExerciseRuns | Database + user input | GUID/null | Ja | Opties beperken tot categorieën die binnen toegestane niveaus en beschikbare historie voorkomen. |
| SCH-DOC-05-01-F11 | Filter | Periode | SelectedPeriodKey | Applicatie-enum | User input | enum/string | Ja | Toegestane waarden: Last7Days, Last30Days, ThisYear, All; standaard Last30Days. |
| SCH-DOC-05-01-T01 | Afgeronde oefeningen | <categorienaam> · <oefeningnaam> | CompletedRunListItem | ExerciseRuns, TeacherLevels, Categories, Exercises | Database | object/list | Nee | Alleen afgeronde, niet-test runs; sortering standaard CompletedAtUtc DESC; backend begrenst page size. |
| SCH-DOC-05-01-F12 | Lijstregel | <categorienaam> · <oefeningnaam> | RunTitle | Categories.Name, Exercises.Name | Database | string | Nee | Combineert categorie en oefening met scheidingsteken ·; waarden verschillen per run. |
| SCH-DOC-05-01-F13 | Lijstregel | Afgerond op <datum> · <tijd> · Niveau: <niveau> | RunCompletionMeta | ExerciseRuns.CompletedAtUtc, TeacherLevels.Name | Database + afgeleid | string | Nee | Datum, tijd en niveau verschillen per run; UTC-tijd omzetten naar lokale gebruikersweergave. |
| SCH-DOC-05-01-F14 | Lijstregel | <aantal vragen> vragen · <aantal goed> goed · <aantal fout> fout · <aantal geen idee> geen idee | RunTotalsSummary | ExerciseRuns.TotalQuestions, CorrectCount, IncorrectCount, DunnoCount | Database | string | Nee | Dynamische waarden direct uitlezen uit uniforme runvelden; niet uit payload herberekenen. |
| SCH-DOC-05-01-B01 | Actie | Bekijk details | ViewRunDetailsButton | ExerciseRuns.Id | User input | action | Ja | Alleen selecteren van bestaande zichtbare run toegestaan; geen mutatie. |
| SCH-DOC-05-01-S07 | Detailpaneel | Resultaatdetails | RunDetailPanel | ExerciseRuns | Database | object | Nee | Toont standaard meest recente zichtbare run of geselecteerde run. |
| SCH-DOC-05-01-F15 | Detail samenvatting | Niveau | DetailLevelName | TeacherLevels.Name via ExerciseRuns.LevelId | Database | string | Nee | Historische niveaucontext van de run is leidend. |
| SCH-DOC-05-01-F16 | Detail samenvatting | Oefening | DetailExerciseName | Exercises.Name via ExerciseRuns.ExerciseId | Database | string | Nee | Actuele oefeningnaam tonen; wanneer snapshotvelden beschikbaar zijn, is de historische snapshot leidend. |
| SCH-DOC-05-01-F17 | Detail samenvatting | Totaal vragen | DetailTotalQuestions | ExerciseRuns.TotalQuestions | Database | integer | Nee | Moet overeenkomen met aantal gegenereerde of afgeronde vragen in de run. |
| SCH-DOC-05-01-F18 | Detail samenvatting | Goed / fout / geen idee | DetailResultCounts | ExerciseRuns.CorrectCount, IncorrectCount, DunnoCount | Database | string | Nee | Geen idee telt functioneel als fout maar blijft apart zichtbaar. |
| SCH-DOC-05-01-F19 | Detail samenvatting | Run van totaal runs | DetailRunRank | Gefilterde runset | Berekend | string | Nee | Rangnummer berekenen binnen dezelfde filtercontext en sortering als de lijst. |
| SCH-DOC-05-01-F20 | Detail samenvatting | Afgerond op | DetailCompletedAt | ExerciseRuns.CompletedAtUtc | Database | datetime/string | Nee | Alleen gevuld voor afgeronde runs; lokale datum/tijd tonen. |
| SCH-DOC-05-01-T02 | Vragen en antwoorden | Nr / Opgave / Gegeven antwoord | QuestionAnswerRow | ExerciseRunProgress, ExerciseRuns.QuestionDataJsonBase64 | Database + module-rendering | object/list | Nee | Volgorde op SequenceNumber; module bepaalt renderbare vraag- en antwoordtekst. |
| SCH-DOC-05-01-F21 | Vraagregel | Nr | QuestionSequenceNumber | ExerciseRunProgress.SequenceNumber | Database | integer | Nee | Uniek binnen ExerciseRunId. |
| SCH-DOC-05-01-F22 | Vraagregel | Opgave | QuestionPrompt | ExerciseRunProgress.QuestionStateJsonBase64 of ExerciseRuns.QuestionDataJsonBase64 | Database + module-rendering | string/renderfragment | Nee | Module-specifieke inhoud veilig renderen; geen vrije HTML uit payload zonder sanitizing; in de mockup heet dit Som. |
| SCH-DOC-05-01-F23 | Vraagregel | Gegeven antwoord | GivenAnswerDisplay | ExerciseRunProgress.QuestionStateJsonBase64 | Database + module-rendering | string/renderfragment | Nee | Antwoordrepresentatie kan per module verschillen. |
| SCH-DOC-05-01-M02 | Resultaatindicator | ✓ | CorrectResultIndicator | ExerciseRunProgress.IsCorrect, IsDunno | Database | boolean/status | Nee | Groen vinkje bij IsCorrect = true en IsDunno = false. |
| SCH-DOC-05-01-M03 | Resultaatindicator | ✕ | IncorrectResultIndicator | ExerciseRunProgress.IsCorrect, payload juist antwoord | Database + module-rendering | boolean/status | Nee | Rood kruis bij fout; juiste antwoord beschikbaar maken als toelichting. |
| SCH-DOC-05-01-M04 | Resultaatindicator | ? | DunnoResultIndicator | ExerciseRunProgress.IsDunno, payload juist antwoord | Database + module-rendering | boolean/status | Nee | Geel vraagteken bij IsDunno = true; telt als fout. |
| SCH-DOC-05-01-F24 | Statistieken | Gemiddelde tijd per vraag | DetailAverageTimeSeconds | ExerciseRuns.AverageTimeSeconds | Database | decimal/seconden | Nee | Uniform opgeslagen na afronding. |
| SCH-DOC-05-01-F25 | Statistieken | Nauwkeurigheid | DetailAccuracyPercentage | ExerciseRuns.CorrectCount, TotalQuestions | Berekend | decimal/percentage | Nee | CorrectCount / TotalQuestions * 100; afronden volgens UI-conventie. |
| SCH-DOC-05-01-F26 | Statistieken | Totale doorlooptijd | DetailTotalDuration | ExerciseRuns.StartedAtUtc, CompletedAtUtc | Berekend | duration/string | Nee | Verschil tussen start en afronding; tonen als minuten/seconden. |
| SCH-DOC-05-01-F27 | Statistieken | Uitschieters | DetailOutlierCount | ExerciseRuns.LowerOutlierCount, UpperOutlierCount | Berekend/database | integer | Nee | Som van onder- en bovengrensuitschieters. |
| SCH-DOC-05-01-F28 | Statistieken | Langzaamste vraag | DetailSlowestQuestion | ExerciseRunProgress.FirstShownAtUtc, AnsweredAtUtc | Berekend | string | Nee | Vraag met hoogste vraagdoorlooptijd binnen afgeronde vragen. |
| SCH-DOC-05-01-F29 | Statistieken | Snelste vraag | DetailFastestQuestion | ExerciseRunProgress.FirstShownAtUtc, AnsweredAtUtc | Berekend | string | Nee | Vraag met laagste vraagdoorlooptijd binnen afgeronde vragen. |
| SCH-DOC-05-01-F30 | Statistieken | Ondergrens | DetailLowerBoundSeconds | ExerciseRuns.LowerBoundSeconds | Database | decimal/seconden | Nee | Opgeslagen statistische ondergrens van de run. |
| SCH-DOC-05-01-F31 | Statistieken | Bovengrens | DetailUpperBoundSeconds | ExerciseRuns.UpperBoundSeconds | Database | decimal/seconden | Nee | Opgeslagen statistische bovengrens van de run. |
| SCH-DOC-05-01-F32 | Uitschieterblok | Uitschieters ondergrens | LowerOutlierList | ExerciseRunProgress, ExerciseRuns.LowerBoundSeconds | Berekend | string/list | Nee | Toon Geen bij nul uitschieters. |
| SCH-DOC-05-01-F33 | Uitschieterblok | Uitschieters bovengrens | UpperOutlierList | ExerciseRunProgress, ExerciseRuns.UpperBoundSeconds | Berekend | string/list | Nee | Toon vraagnummer en duur, bijvoorbeeld <vraagnummer> · <duur> sec; voorbeeldwaarden zijn niet vast. |
| SCH-DOC-05-01-M05 | Leegstand | Nog geen afgeronde oefeningen gevonden | EmptyHistoryMessage | Queryresultaat | Afgeleid | string | Nee | Tonen wanneer gefilterde runset leeg is. |
| SCH-DOC-05-01-M06 | Autorisatiefout | Je hebt geen toegang tot deze geschiedenis | UnauthorizedHistoryMessage | Autorisatiecontrole | Afgeleid | string | Nee | Geen leerlingnaam, rungegevens of statistieken lekken bij ontbreken van rechten. |
7.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-DOC-05-01-01 | SRS-TCH-008 AC-TCH-008 | De geschiedenis tonen voor precies één geselecteerde leerling binnen de actieve docentcontext |
REQ-SCH-DOC-05-01-02 | SRS-TCH-008 AC-TCH-008 | Vóór het ophalen van data controleren of de docent een actieve docent-leerlingrelatie heeft met de geselecteerde leerling |
REQ-SCH-DOC-05-01-03 | SRS-AUTH-001 SRS-TCH-008 AC-AUTH-001 AC-TCH-008 | Geschiedenis beperken tot niveaus die binnen de eigen docentcontext voor deze leerling geautoriseerd zijn |
REQ-SCH-DOC-05-01-04 | SRS-TCH-008 AC-TCH-008 | Het systeem mag collaboratorrechten niet gebruiken als zelfstandig recht om leerlingresultaten te bekijken |
REQ-SCH-DOC-05-01-05 | SRS-TCH-005 AC-TCH-005 | Alleen afgeronde, niet-test exercise runs tonen |
REQ-SCH-DOC-05-01-06 | SRS-TCH-001 AC-TCH-001 | De lijst standaard sorteren op meest recent afgeronde run |
REQ-SCH-DOC-05-01-07 | SRS-TCH-008 AC-TCH-008 | Zoeken ondersteunen op categorie, oefening en niveau |
REQ-SCH-DOC-05-01-08 | SRS-TCH-008 AC-TCH-008 | Een niveaufilter tonen met uitsluitend toegestane docentniveaus voor deze leerling |
REQ-SCH-DOC-05-01-09 | SRS-TCH-008 AC-TCH-008 | Een categoriefilter tonen dat past binnen de toegestane niveaus en beschikbare geschiedenis |
REQ-SCH-DOC-05-01-10 | SRS-TCH-001 AC-TCH-001 | Periodefiltering toepassen op het afrondmoment van de run |
REQ-SCH-DOC-05-01-11 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-TCH-001 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-TCH-001 | De samenvattingskaart dezelfde filtercontext gebruiken als de lijst |
REQ-SCH-DOC-05-01-12 | SRS-TCH-001 AC-TCH-001 | Lijsttotalen uit uniforme runvelden komen en niet uit de modulepayload worden herberekend |
REQ-SCH-DOC-05-01-13 | SRS-TCH-001 AC-TCH-001 | Selectie van Bekijk details de detailkaart vullen zonder gegevens te wijzigen |
REQ-SCH-DOC-05-01-14 | SRS-TCH-008 AC-TCH-008 | De detailkaart een samenvatting tonen van niveau, oefening, totalen, runpositie en afrondmoment |
REQ-SCH-DOC-05-01-15 | SRS-TCH-001 AC-TCH-001 | De vraagdetailsectie vragen en antwoorden in runvolgorde tonen |
REQ-SCH-DOC-05-01-16 | SRS-TCH-001 AC-TCH-001 | Bij fout of Geen idee het juiste antwoord beschikbaar zijn als toelichting |
REQ-SCH-DOC-05-01-17 | SRS-TCH-001 AC-TCH-001 | Geen idee apart zichtbaar blijven en tegelijk als fout meetellen |
REQ-SCH-DOC-05-01-18 | SRS-TCH-001 AC-TCH-001 | De statistiekensectie uniforme runstatistieken tonen |
REQ-SCH-DOC-05-01-19 | SRS-TCH-001 AC-TCH-001 | Uitschieters onder en boven de grens afzonderlijk tonen |
REQ-SCH-DOC-05-01-20 | SRS-TCH-001 AC-TCH-001 | De lijst en detailsecties mogen visueel scrollbaar zijn, maar data geen onbeperkt in één keer geladen worden |
REQ-SCH-DOC-05-01-21 | SRS-TCH-001 AC-TCH-001 | Een lege staat tonen wanneer er geen resultaten zijn |
REQ-SCH-DOC-05-01-22 | SRS-AUTH-004 SRS-TCH-001 AC-AUTH-004 AC-TCH-001 | Voorkomen dat technische identifiers zichtbaar worden voor docenten |
REQ-SCH-DOC-05-01-23 | SRS-TCH-001 AC-TCH-001 | Datum- en tijdwaarden lokaal en consistent tonen |
REQ-SCH-DOC-05-01-24 | SRS-TCH-001 AC-TCH-001 | Detailweergave veilig degraderen wanneer modulespecifieke payload niet renderbaar is, waarbij uniforme runvelden zichtbaar blijven en de vraagdetailsectie een functionele melding toont zonder ruwe payload of technische stacktrace |
REQ-SCH-DOC-05-01-25 | SRS-TCH-001 AC-TCH-001 | Alleen-lezen blijven en mag geen acties aanbieden voor verwijderen, aanpassen, herberekenen of corrigeren van resultaten |
REQ-SCH-DOC-05-01-26 | SRS-TCH-008 AC-TCH-008 | Alle inhoudelijke voorbeeldwaarden uit de mockup vervangen door dynamische waarden uit leerlingcontext, filters, rungegevens en module-rendering; mockupwaarden geen hardcoded worden |
7.7 Technische koppeling
Voor technische uitwerking zijn vooral relevant:
- 05 Autorisatie, policies en server-side contextcontrole voor server-side controle dat de docent de geselecteerde leerling en runhistorie mag bekijken.
- 10 Oefenruns, voortgang, resultaten, statistieken en PDF-brondata voor afgeronde runs, pogingdetails, scores, antwoordreeksen en historiekbrondata.
- 16 PDF-export met QuestPDF voor exporteerbare resultaatweergaven wanneer geschiedenis naar PDF wordt omgezet.
- 17 Readmodels, tellers, badges, caching en materialisatie voor docentgeschiedenisoverzichten en statistische samenvattingen.
- 24 Frontend, Blazor, routing, state en componentopbouw voor filters, detailnavigatie en tabelstate.
- 25 Privacy, retentie, anonimisering en gegevensbescherming voor doelbinding en minimale weergave van leerlingresultaten.