4. Oefening
4.1 Schermafbeelding

4.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-LLN-03-01 |
| Schermnaam | Oefening — Startpagina / keuzeview |
| Doelgroep / onderdeel | Leerling |
| Bronbestand | oefenhub_leerling_03_oefening_v3_2.html |
| Mockupversie | V3.2 |
| Screenshotbestand | oefenhub_leerling_03_oefening_v3_2.png |
| Processtap / context | Leerling heeft binnen de categorienavigatie een categorie en concrete oefening gekozen, bijvoorbeeld Rekenen > Optellen, en kiest vervolgens of een run wordt hervat, nieuw gestart of via geschiedenis wordt bekeken. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | De in de mockup zichtbare categorie, oefening, resterende aantallen, afgeronde aantallen en invoerwaarde zijn voorbeeldwaarden. Deze waarden zijn dynamisch per leerling, actief niveau, categorie, oefening en runstatus. |
| Route / URL-patroon | Functioneel routepatroon: leerlingcontext > categorie > oefening. Technische route nader te bepalen, maar moet de actuele LevelId, CategoryId en ExerciseId server-side kunnen afleiden of valideren. |
| Autorisatie / vereiste rol-context | Actieve leerlingcontext met toegang tot het gekozen niveau, de gekozen categorie en de gekozen actieve oefening via een geldige docentrelatie en niveauautorisatie. |
| Primair domeinobject / hoofdentiteit | Concrete oefening binnen een toegankelijke niveau- en categoriecontext; bij acties ontstaat of wordt verwezen naar een ExerciseRun. |
| Gerelateerde schermen / navigatie | 02_frontpage, 03_frontpage_geen_docent, 05_start_nieuwe, 06_geschiedenis_overzicht, 07_geschiedenis_details. |
| Data-karakter | Oriëntatie- en startscherm; de pagina toont conditionele acties en dynamische runinformatie, maar slaat zelf nog geen nieuwe oefenrun op totdat de leerling Start nieuwe bevestigt. |
4.3 Functionele beschrijving
Dit scherm is de oefening-startpagina voor één concrete oefening binnen de actieve leerlingcontext. De leerling komt hier nadat in de categorienavigatie eerst een categorie is gekozen, bijvoorbeeld Rekenen, en daarna een oefening binnen die categorie, bijvoorbeeld Optellen.
De pagina vormt de schakel tussen de leerling-frontpage of categorienavigatie en het daadwerkelijke oefenscherm. De leerling krijgt hier, afhankelijk van de eigen runhistorie, twee of drie hoofdmogelijkheden:
-
Verder gaan
Hiermee hervat de leerling de laatste nog niet afgeronde run voor exact deze oefening binnen het actieve niveau. Deze actie blijft visueel als actiekaart aanwezig om de layout stabiel te houden, maar is alleen actief wanneer er minimaal één niet-afgeronde run bestaat voor de combinatie leerling, niveau, categorie en oefening. Wanneer geen hervatbare run bestaat, wordt de actie disabled/grijs getoond met een beschrijvende tooltip. Wanneer meerdere niet-afgeronde runs bestaan, verwijst de actie naar de meest recente niet-afgeronde run binnen deze context. -
Start nieuwe
Hiermee genereert de leerling direct een nieuwe oefenrun. De leerling kan op deze pagina uitsluitend het aantal oefeningen/opgaven kiezen. Na klikken op Start nieuwe wordt geen extra configuratiescherm getoond; het systeem maakt de run aan en opent direct het oefenscherm met de eerste vraag. -
Geschiedenis
Hiermee opent de leerling de geschiedenis voor deze oefening binnen de relevante context. Deze actie blijft visueel als actiekaart aanwezig om te voorkomen dat de pagina uit balans raakt, maar is alleen actief wanneer er afgeronde, niet-test runs bestaan voor deze leerling en oefening. Wanneer er nog geen afgeronde runs zijn, wordt de actie disabled/grijs getoond met een beschrijvende tooltip of korte uitleg.
Actiekaarten en keuzevlakopbouw
De acties Verder gaan, Start nieuwe en Geschiedenis worden als duidelijke, grote keuzevlakken of actiekaarten gepresenteerd. Elk keuzevlak bevat minimaal:
- een primaire titel;
- een korte toelichting op de actie;
- waar relevant een contextregel, detailwaarde of invoerveld.
Deze opbouw bewaart de oorspronkelijke UX-intentie van rustige, herkenbare startkeuzes voor leerlingen. De exacte visuele uitwerking volgt de OefenHub-componentenstijl en hoeft niet pixelvast aan oude Word- of HTML-opbouw gekoppeld te blijven.
Wanneer de leerling van actief niveau wisselt, begint de hervatcontext voor Verder gaan functioneel opnieuw. Niet-afgeronde runs uit een ander niveau worden niet als hervatoptie aangeboden, ook niet wanneer categorie- of oefeningnaam overeenkomt.
Interpretatie van mockupwaarden
De zichtbare mockupwaarden zijn voorbeelddata. Dit geldt onder andere voor:
- de categorie- en oefeningnamen, zoals Rekenen en Optellen;
- de tekst bij Verder gaan, zoals het aantal resterende vragen;
- de invoerwaarde 15 bij Start nieuwe;
- de minimum- en maximumwaarden van het aantal opgaven;
- het aantal afgeronde oefeningen bij Geschiedenis;
- eventuele beschrijvende introductieteksten bij de oefening.
Deze waarden mogen niet hardcoded worden. Zij worden afgeleid uit de actuele leerlingcontext, de oefenconfiguratie, de runhistorie en de geldende systeem- en modulegrenzen.
Condities voor de startwaarde en het aantal oefeningen
De waarde 15 in de mockup is geen vaste systeemwaarde. Dit is de docent-geconfigureerde standaardwaarde voor deze concrete oefening. De waarde komt uit de modulespecifieke configuratiepayload van de oefening, bijvoorbeeld uit DefaultQuestionCount binnen Exercises.ModuleConfigurationJsonBase64 of de functioneel gelijkwaardige configuratiestructuur. Functioneel betekent dit niet dat iedere run altijd 15 vragen bevat. De leerling mag de waarde aanpassen binnen de door de docent ingestelde grenzen.
Voor het aantal oefeningen gelden minimaal de volgende regels:
- de standaardwaarde komt uit de oefeningconfiguratie die de docent heeft opgeslagen voor deze concrete oefening;
- de minimumwaarde komt uit dezelfde oefeningconfiguratie, bijvoorbeeld
MinimumQuestionCount; - de maximumwaarde komt uit dezelfde oefeningconfiguratie, bijvoorbeeld
MaximumQuestionCount; - de docent mag in de moduleconfiguratie geen maximum vastleggen dat boven het sitebrede absolute maximum van 100 uitkomt;
- de leerlinginvoer moet bij starten binnen de docent-geconfigureerde minimum- en maximumgrens vallen;
- de runtime moet alsnog server-side afdwingen dat het aangevraagde aantal niet boven het absolute systeemmaximum van 100 uitkomt, ook wanneer configuratie of clientstate onjuist is;
- de definitief aangevraagde waarde wordt bij het genereren opgeslagen als
ExerciseRuns.RequestedQuestionCount; - het daadwerkelijke aantal gegenereerde vragen wordt vastgelegd als
ExerciseRuns.TotalQuestions; - bij ongeldige invoer wordt geen run aangemaakt en krijgt de leerling een begrijpelijke validatiemelding.
Proces bij Start nieuwe
Wanneer de leerling op Start nieuwe klikt, is dit de functionele trigger voor het genereren van een volledig nieuwe oefenrun op basis van de concrete oefeningconfiguratie. Het systeem gebruikt daarbij de gekozen leerlingcontext, het actieve niveau, de gekozen categorie, de gekozen oefening, de gekoppelde technische module en de door de docent opgeslagen configuratiewaarden.
De run wordt niet pas tijdens de eerste vraag gedeeltelijk opgebouwd. Eerst moet de run server-side worden aangemaakt, inclusief de uniforme runmetadata, het aangevraagde aantal vragen, het daadwerkelijk gegenereerde aantal vragen en de benodigde vraag-/voortgangsrecords of modulepayload voor de volledige reeks. Pas wanneer deze generatie succesvol is afgerond en persistent is vastgelegd, wordt de leerling doorgestuurd naar het oefenscherm met vraag 1.
Wanneer generatie of opslag faalt, mag de leerling niet naar het oefenscherm worden doorgestuurd. In dat geval blijft de leerling op deze startpagina en krijgt deze een begrijpelijke foutmelding. Er mag geen half bruikbare run ontstaan die later als normale geschiedenisregel of hervatbare run wordt behandeld.
4.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-LLN-03-01-S01 | Section | Volledige pagina | Startpagina voor één gekozen oefening binnen de actieve leerlingcontext. | Oefening | Bevat breadcrumb, introductie en conditionele actiekaarten. | StudentExerciseStartPage |
| SCH-LLN-03-01-B01 | Button / link | Breadcrumb — terug naar categorie/frontpage | Navigatielink terug naar de voorafgaande categorie- of frontpagecontext. | Dynamisch, bijvoorbeeld Rekenen | Label is afhankelijk van gekozen categorie en routeherkomst. | ExerciseBreadcrumbBackLink |
| SCH-LLN-03-01-F01 | Field | Breadcrumb / titelcontext | Naam van de gekozen categorie. | Rekenen | Dynamische voorbeeldwaarde uit de mockup. | SelectedCategoryName |
| SCH-LLN-03-01-F02 | Field | Breadcrumb / titelcontext | Naam van de gekozen oefening. | Optellen | Dynamische voorbeeldwaarde uit de mockup. | SelectedExerciseName |
| SCH-LLN-03-01-S02 | Section | Introblok | Toont de naam en korte uitleg van de gekozen oefening. | Optellen | Tekst en naam zijn afhankelijk van oefenconfiguratie en content. | ExerciseIntroSection |
| SCH-LLN-03-01-F03 | Field | Introblok — titel | Titel van de gekozen oefening. | Optellen | Afgeleid uit concrete oefening binnen de gekozen categorie. | ExerciseTitle |
| SCH-LLN-03-01-F04 | Field | Introblok — uitleg | Korte introductietekst bij de oefening. | Dynamische oefenuitleg | Kan uit oefencontent of modulespecifieke beschrijving komen. | ExerciseIntroText |
| SCH-LLN-03-01-S03 | Section | Actiekaart links | Actiekaart voor het hervatten van een niet-afgeronde run. | Verder gaan | Blijft zichtbaar; actief wanneer een hervatbare run bestaat en disabled/grijs met tooltip wanneer die ontbreekt. | ContinueRunActionCard |
| SCH-LLN-03-01-F05 | Field | Verder gaan — detail | Toont hoeveel vragen nog openstaan binnen de te hervatten run. | Nog <aantal> van de <totaal> resterend | Dynamisch op basis van runvoortgang. Bij ontbreken van een hervatbare run toont de kaart een disabled staat met verklarende tooltip of korte tekst. | ContinueRunRemainingQuestionsText |
| SCH-LLN-03-01-B02 | Button | Verder gaan — knop | Hervat de meest recente niet-afgeronde run binnen deze oefening en dit actieve niveau. | Verder gaan | Start geen nieuwe run; gebruikt bestaande ExerciseRun. | ContinueRunButton |
| SCH-LLN-03-01-S04 | Section | Actiekaart midden | Actiekaart voor het genereren van een nieuwe run. | Start nieuwe | Altijd beschikbaar voor een leerling zolang de oefening actief en geautoriseerd is. | StartNewRunActionCard |
| SCH-LLN-03-01-F06 | Field | Start nieuwe — invoerveld | Invoer voor het aantal te genereren oefeningen/opgaven. | Aantal oefeningen | Standaardwaarde komt uit docent-geconfigureerde oefeninginstellingen, maar is wijzigbaar binnen de geconfigureerde minimum- en maximumgrenzen. | RequestedQuestionCountInput |
| SCH-LLN-03-01-B03 | Button | Start nieuwe — knop | Start server-side de generatie van een volledige nieuwe oefenrun op basis van de oefeningconfiguratie en opent daarna het oefenscherm. | Start nieuwe | Vervolgscherm: 05_start_nieuwe, pas na succesvolle runcreatie en vraaggeneratie. | StartNewRunButton |
| SCH-LLN-03-01-S05 | Section | Actiekaart rechts | Actiekaart voor het openen van de geschiedenis van deze oefening. | Geschiedenis | Blijft zichtbaar; actief wanneer afgeronde runs bestaan en disabled/grijs met tooltip wanneer die ontbreken. | ExerciseHistoryActionCard |
| SCH-LLN-03-01-F07 | Field | Geschiedenis — detail | Toont het aantal afgeronde runs voor deze leerling en oefening. | <aantal> oefeningen afgerond | Dynamisch; afgeronde niet-test runs tellen mee. | CompletedRunsCountText |
| SCH-LLN-03-01-B04 | Button | Geschiedenis — knop | Opent de oefeninggebonden geschiedenis. | Bekijk geschiedenis | Vervolgscherm: 06_geschiedenis_overzicht. | ViewExerciseHistoryButton |
| SCH-LLN-03-01-M01 | Message | Validatie aantal oefeningen | Begrijpelijke melding wanneer het ingevoerde aantal buiten toegestane grenzen valt. | Dynamische foutmelding | Alleen zichtbaar bij validatiefout. | RequestedQuestionCountValidationMessage |
4.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-LLN-03-01-S01 | Volledige pagina | Oefening | StudentExerciseStartPage | Users, actieve leerlingcontext, TeacherStudentLevelAccess, TeacherLevels, TeacherLevelCategories, Categories, Exercises | Samengestelde view op basis van gekozen categorie en oefening binnen toegankelijke leerlingcontext | Composite view | Nee | Pagina mag alleen laden wanneer de leerling toegang heeft tot het actieve niveau en de oefening actief beschikbaar is. |
| SCH-LLN-03-01-B01 | Breadcrumb — terug naar categorie/frontpage | Dynamisch | ExerciseBreadcrumbBackLink | Routecontext + actieve categorie/oefening | Afgeleid uit herkomstroute en gekozen categorie | Link | Nee | Terugnavigatie mag geen toegang geven tot categorieën of oefeningen buiten de geautoriseerde context. |
| SCH-LLN-03-01-F01 | Breadcrumb / titelcontext | Rekenen | SelectedCategoryName | Categories.Name via actieve TeacherLevelCategories-koppeling | Database | String | Nee | Naam is dynamisch; categorie moet actief/toegankelijk zijn binnen het actieve niveau. |
| SCH-LLN-03-01-F02 | Breadcrumb / titelcontext | Optellen | SelectedExerciseName | Exercises.Name | Database | String | Nee | Naam is dynamisch; oefening moet actief zijn en binnen de gekozen categorie/niveaucontext vallen. |
| SCH-LLN-03-01-F03 | Introblok — titel | Optellen | ExerciseTitle | Exercises.Name of modulespecifieke weergavetitel indien functioneel toegestaan | Database / afgeleid | String | Nee | Mag niet los afwijken van de gekozen oefeningcontext. |
| SCH-LLN-03-01-F04 | Introblok — uitleg | Dynamische oefenuitleg | ExerciseIntroText | Oefenconfiguratie, modulebeschrijving of beheerbaar contentblok afhankelijk van definitieve implementatie | Database / module / content | String / rich text | Nee | Tekst is read-only voor leerling en mag geen configuratievelden expose-en. |
| SCH-LLN-03-01-S03 | Actiekaart links | Verder gaan | ContinueRunActionCard | ExerciseRuns met UserId, LevelId, CategoryId, ExerciseId, IsCompleted = false, IsTestRun = false | Berekend uit runstatus | Section / conditional | Nee | Kaart blijft zichtbaar; knop is actief wanneer minimaal één hervatbare run bestaat voor exact deze context en disabled/grijs met tooltip wanneer die ontbreekt. |
| SCH-LLN-03-01-F05 | Verder gaan — detail | Nog <aantal> van de <totaal> resterend | ContinueRunRemainingQuestionsText | ExerciseRuns.TotalQuestions, ExerciseRuns.CompletedQuestionCount, eventueel ExerciseRunProgress.IsCompleted | Berekend | String | Nee | Resterend aantal = totaal aantal vragen minus afgeronde vragen binnen de geselecteerde hervatbare run. |
| SCH-LLN-03-01-B02 | Verder gaan — knop | Verder gaan | ContinueRunButton | Meest recente niet-afgeronde ExerciseRun binnen dezelfde leerling-, niveau-, categorie- en oefeningcontext | Berekend / actie | Button | Ja, actie | Bij meerdere niet-afgeronde runs wordt de laatste niet-afgeronde run gekozen; runs uit andere niveaus worden niet hervat. |
| SCH-LLN-03-01-S04 | Actiekaart midden | Start nieuwe | StartNewRunActionCard | Exercises, ExerciseModules, moduleconfiguratie en autorisatiecontext | Afgeleid uit actieve oefening en modulebeschikbaarheid | Section / action | Nee | Alleen beschikbaar wanneer de oefening actief is en de leerling toegang heeft. |
| SCH-LLN-03-01-F06 | Start nieuwe — invoerveld | Aantal oefeningen | RequestedQuestionCountInput | Exercises.ModuleConfigurationJsonBase64 met o.a. DefaultQuestionCount, MinimumQuestionCount en MaximumQuestionCount; bij opslaan naar ExerciseRuns.RequestedQuestionCount | User input met database-default uit oefeningconfiguratie | Integer | Ja | Default, minimum en maximum komen uit de door de docent opgeslagen moduleconfiguratie van deze concrete oefening. De docentconfiguratie mag het absolute systeemmaximum van 100 niet overschrijden; runtime validatie blijft server-side afdwingen dat leerlinginvoer binnen de opgeslagen min/max en het absolute maximum valt. Ongeldige invoer blokkeert runcreatie. |
| SCH-LLN-03-01-B03 | Start nieuwe — knop | Start nieuwe | StartNewRunButton | ExerciseRuns, ExerciseRunProgress, Exercises, ExerciseModules, Exercises.ModuleConfigurationJsonBase64 | Actie / user input | Button | Ja, actie | Valideert invoer, genereert server-side de volledige run op basis van de concrete oefeningconfiguratie, legt runmetadata en vraag-/voortgangsdata persistent vast en navigeert pas daarna naar het oefenscherm met vraag 1. Bij fout in generatie of opslag blijft de leerling op deze pagina en wordt geen normale hervatbare of afgeronde run beschikbaar gemaakt. |
| SCH-LLN-03-01-S05 | Actiekaart rechts | Geschiedenis | ExerciseHistoryActionCard | ExerciseRuns met IsCompleted = true, CompletedAtUtc gevuld en IsTestRun = false | Berekend uit afgeronde runhistorie | Section / conditional | Nee | Kaart blijft zichtbaar; knop is actief wanneer minimaal één afgeronde run bestaat voor deze leerling en oefeningcontext en disabled/grijs met tooltip wanneer die ontbreekt. |
| SCH-LLN-03-01-F07 | Geschiedenis — detail | <aantal> oefeningen afgerond | CompletedRunsCountText | ExerciseRuns | Berekend | String / integer in tekst | Nee | Alleen afgeronde, niet-test runs tellen mee; niet-afgeronde runs verschijnen niet in geschiedenis. |
| SCH-LLN-03-01-B04 | Geschiedenis — knop | Bekijk geschiedenis | ViewExerciseHistoryButton | Route naar oefeninggebonden geschiedenis met leerling-, niveau-, categorie- en oefeningcontext | Navigatie | Button | Ja, actie | Opent alleen geschiedenis die de leerling zelf mag bekijken. |
| SCH-LLN-03-01-M01 | Validatie aantal oefeningen | Dynamische foutmelding | RequestedQuestionCountValidationMessage | Validatieregels van invoerveld en module/systeemgrenzen | Berekend / validatie | String | Nee | Meldt concreet waarom runcreatie niet kan doorgaan, bijvoorbeeld te laag, te hoog of geen geldig getal. |
4.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-LLN-03-01-01 | SRS-CAT-001 AC-CAT-001 | Na keuze van een categorie en oefening een oefening-startpagina tonen voor exact die combinatie binnen de actieve leerlingcontext |
REQ-SCH-LLN-03-01-02 | SRS-AUTH-001 AC-AUTH-001 | Vóór het tonen van de oefening-startpagina server-side controleren of de leerling toegang heeft tot het actieve niveau, de gekozen categorie en de gekozen actieve oefening |
REQ-SCH-LLN-03-01-03 | SRS-CAT-001 AC-CAT-001 | Categorie- en oefeningnamen dynamisch tonen op basis van de gekozen context en mag mockupwaarden zoals Rekenen en Optellen niet hardcoded gebruiken |
REQ-SCH-LLN-03-01-04 | SRS-LRN-010 SRS-LRN-002 AC-LRN-010 AC-LRN-002 | De actie Verder gaan altijd als actiekaart tonen, maar alleen actief maken wanneer minimaal één niet-afgeronde, niet-test run bestaat voor dezelfde leerling, hetzelfde actieve niveau, dezelfde categorie en dezelfde oefening; zonder hervatbare run de actie disabled/grijs zijn met beschrijvende tooltip |
REQ-SCH-LLN-03-01-05 | SRS-LRN-010 SRS-LRN-002 AC-LRN-010 AC-LRN-002 | Wanneer meerdere hervatbare runs bestaan, Verder gaan altijd verwijzen naar de meest recente niet-afgeronde run binnen dezelfde oefening- en niveaucontext |
REQ-SCH-LLN-03-01-06 | SRS-LRN-010 SRS-LRN-002 AC-LRN-010 AC-LRN-002 | Het systeem geen-afgeronde runs uit andere niveaus niet hervatten via Verder gaan, ook niet wanneer de categorie of oefening dezelfde naam heeft |
REQ-SCH-LLN-03-01-07 | SRS-LRN-002 SRS-LRN-003 AC-LRN-002 AC-LRN-003 | De detailtekst bij Verder gaan dynamisch worden berekend uit de voortgang van de gekozen hervatbare run |
REQ-SCH-LLN-03-01-08 | SRS-AUTH-001 SRS-LRN-001 AC-AUTH-001 AC-LRN-001 | De actie Start nieuwe beschikbaar maken voor een leerling wanneer de oefening actief is en de leerling daarvoor geautoriseerd is |
REQ-SCH-LLN-03-01-09 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-CAT-001 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-CAT-001 | Op de oefening-startpagina uitsluitend het aantal oefeningen/opgaven als leerlinginvoer aanbieden en geen extra configuratiescherm tonen vóór het starten |
REQ-SCH-LLN-03-01-10 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-CAT-001 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-CAT-001 | Het invoerveld Aantal oefeningen als standaardwaarde de docent-geconfigureerde default uit de oefeningconfiguratie tonen, bijvoorbeeld DefaultQuestionCount, en mag mockupwaarde 15 niet als vaste systeemwaarde gebruiken |
REQ-SCH-LLN-03-01-11 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-CAT-001 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-CAT-001 | De ingevoerde waarde voor Aantal oefeningen valideren tegen de docent-geconfigureerde minimum- en maximumwaarde uit de oefeningconfiguratie en tegen het absolute systeemmaximum van 100 |
REQ-SCH-LLN-03-01-12 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-LRN-001 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-LRN-001 | Het systeem mag geen nieuwe ExerciseRun aanmaken wanneer het opgegeven aantal oefeningen ongeldig is |
REQ-SCH-LLN-03-01-13 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-LRN-001 SRS-LRN-003 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-LRN-001 AC-LRN-003 | Bij een geldige klik op Start nieuwe het systeem direct een nieuwe ExerciseRun aanmaken, het gevraagde aantal opslaan als RequestedQuestionCount en het oefenscherm openen met de eerste vraag |
REQ-SCH-LLN-03-01-14 | SRS-LRN-010 AC-LRN-010 | De aangemaakte run historisch koppelen aan de leerling, het actieve niveau, de categorie, de oefening en de gebruikte technische moduleversie |
REQ-SCH-LLN-03-01-15 | SRS-LRN-010 AC-LRN-010 | De actie Geschiedenis altijd als actiekaart tonen, maar alleen actief maken wanneer afgeronde, niet-test runs voor deze leerling en oefeningcontext bestaan; zonder afgeronde runs de actie disabled/grijs zijn met beschrijvende tooltip |
REQ-SCH-LLN-03-01-16 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-LRN-010 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-LRN-010 | Het aantal afgeronde oefeningen bij Geschiedenis dynamisch worden berekend uit afgeronde, niet-test ExerciseRuns en geen uit modulepayloads of mockuptekst worden afgeleid |
REQ-SCH-LLN-03-01-17 | SRS-LRN-010 SRS-LRN-002 AC-LRN-010 AC-LRN-002 | Niet-afgeronde runs geen meetellen als afgeronde geschiedenis en mogen alleen via hervatten of technische herstelroutes relevant blijven |
REQ-SCH-LLN-03-01-18 | SRS-LRN-010 SRS-LRN-002 AC-LRN-010 AC-LRN-002 | Voor Verder gaan en Geschiedenis een begrijpelijke disabled staat met tooltip of korte uitleg tonen wanneer de onderliggende runs ontbreken, zodat de driekaart-layout visueel behouden blijft |
REQ-SCH-LLN-03-01-19 | SRS-AUTH-004 AC-AUTH-004 | De oefening-startpagina mag geen technische identifiers zoals GUID's, module-id's of interne run-id's zichtbaar tonen aan de leerling |
REQ-SCH-LLN-03-01-20 | SRS-RDM-006 SRS-RDM-002 SRS-RDM-001 SRS-LRN-003 AC-RDM-006 AC-RDM-002 AC-RDM-001 AC-LRN-003 | Zichtbare aantallen, voortgangswaarden en runstatussen op dit scherm dynamisch worden afgeleid en geen als vaste testdata worden geïmplementeerd |
REQ-SCH-LLN-03-01-21 | SRS-AUTH-001 SRS-LRN-001 AC-AUTH-001 AC-LRN-001 | Een geldige klik op Start nieuwe de server-side generatie van een volledige nieuwe oefenrun starten op basis van de gekozen leerlingcontext, het actieve niveau, de gekozen categorie, de gekozen oefening, de gekoppelde technische module en de door de docent opgeslagen oefeningconfiguratie |
REQ-SCH-LLN-03-01-22 | SRS-LRN-001 SRS-LRN-003 AC-LRN-001 AC-LRN-003 | Bij het genereren van een nieuwe run zowel de uniforme runmetadata als de volledige vraag-/voortgangsreeks of modulepayload persistent vastleggen voordat de leerling naar het oefenscherm wordt doorgestuurd |
REQ-SCH-LLN-03-01-23 | SRS-LRN-003 AC-LRN-003 | Pas navigeren naar het oefenscherm met vraag 1 nadat runcreatie, vraaggeneratie en opslag succesvol zijn afgerond |
REQ-SCH-LLN-03-01-24 | SRS-LRN-010 SRS-LRN-002 AC-LRN-010 AC-LRN-002 | Wanneer runcreatie, vraaggeneratie of opslag faalt, mag het systeem de leerling niet naar het oefenscherm sturen en mag er geen half bruikbare run als normale hervatbare run of geschiedenisrecord beschikbaar komen |
REQ-SCH-LLN-03-01-25 | SRS-LRN-002 SRS-LRN-010 AC-LRN-002 AC-LRN-010 | De acties Verder gaan, Start nieuwe en Geschiedenis als herkenbare keuzevlakken tonen met minimaal titel, korte toelichting en waar relevant een contextregel, detailwaarde of invoerveld; exacte styling volgt de OefenHub-componentenstijl |
4.7 Technische koppeling
Voor technische uitwerking zijn vooral relevant:
- 05 Autorisatie, policies en server-side contextcontrole voor server-side controle op leerlingtoegang tot gekozen categorie en oefening.
- 08 Oefencatalogus, niveaus, categorieën, oefeningen en modules voor cataloguscontext, oefeningmetadata en actieve oefenconfiguratie.
- 09 Oefenmodulecontract en dynamische module-integratie voor modulekeuze, modulepayloads en dynamische oefenintegratie.
- 10 Oefenruns, voortgang, resultaten, statistieken en PDF-brondata voor starten of hervatten van runs en afgeleide voortgang.
- 17 Readmodels, tellers, badges, caching en materialisatie voor statistiek- en voortgangsindicatoren rond de oefening.
- 24 Frontend, Blazor, routing, state en componentopbouw voor oefeningroute, componentstate en responsieve opbouw.