5. Start nieuwe oefening
5.1 Schermafbeelding

5.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-LLN-04-01 |
| Schermnaam | Start nieuwe oefening — Oefenrun uitvoeren |
| Doelgroep / onderdeel | Leerling |
| Bronbestand | oefenhub_leerling_04_start_nieuwe_v4_3.html |
| Mockupversie | V4.3 |
| Screenshotbestand | oefenhub_leerling_04_start_nieuwe_v4_3.png |
| Processtap / context | Nadat de leerling op de oefening-startpagina Start nieuwe heeft gekozen, is een nieuwe exercise run gegenereerd en opent dit scherm de runtime-weergave voor die run. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende module-documentatie. |
| Opmerkingen | De zichtbare module-inhoud in de mockup is bewust een placeholder. De inhoudelijke oefenmodule wordt niet in deze schermdocumentatie uitgewerkt, maar per technische module beschreven bij de oefenmodules. |
| Route / URL-patroon | Functioneel routepatroon: leerlingcontext > geselecteerde categorie > geselecteerde oefening > actieve oefenrun. |
| Autorisatie / vereiste rol-context | Actieve leerlingcontext; de exercise run moet bij de ingelogde leerling horen en voortkomen uit een toegankelijke niveau-, categorie- en oefeningcontext. |
| Primair domeinobject / hoofdentiteit | Actieve ExerciseRun met gekoppelde Exercise, ExerciseModule en server-side voortgang. |
| Gerelateerde schermen / navigatie | 04_oefening, 06_geschiedenis_overzicht, 07_geschiedenis_details, oefenmodules. |
| Data-karakter | Runtime-scherm; alle zichtbare context-, voortgangs-, vraag- en antwoordwaarden zijn dynamisch per leerling, niveau, oefening, technische module en concrete exercise run. |
5.3 Functionele beschrijving
Dit scherm toont de generieke OefenHub-runtimeomgeving voor een nieuwe oefenrun nadat de leerling op de vorige pagina Start nieuwe heeft gekozen. Op dat moment is de nieuwe ExerciseRun al server-side gegenereerd en opgeslagen. Dit scherm is dus niet verantwoordelijk voor het kiezen van het aantal vragen of het aanmaken van de run; het opent en toont de reeds aangemaakte run.
De pagina bestaat functioneel uit drie lagen:
-
Generieke leerlingcontext
De header, categorienavigatie, breadcrumb en pagina-intro tonen waar de leerling zich bevindt. In de mockup is dat bijvoorbeeld Rekenen > Optellen > Nieuwe oefening, maar deze labels zijn dynamisch en worden afgeleid uit de geselecteerde runcontext. -
Runcontext
De applicatie laadt de actieveExerciseRun, controleert of deze bij de ingelogde leerling hoort en bepaalt op basis van de gekoppelde oefening welke technische module gebruikt moet worden. De run bevat de uniforme metadata en de server-side voortgang die nodig zijn voor hervatten, opslaan na ieder antwoord en eventuele live meekijkscenario's. -
Technische oefenmodule
De inhoudelijke vraagweergave, antwoordvelden, module-specifieke validatie, feedback en eventuele module-eigen knoppen worden geleverd door de technische oefenmodule. De mockup toont hiervoor bewust{Placeholder voor technische oefen modules}. Deze placeholder hoort niet als productie-inhoud te verschijnen.
De technische module wordt niet vrij in deze schermdocumentatie uitgewerkt. De centrale verwijzing voor module-uitwerkingen is: Modules - schermdocumentatie. Per module kan daar worden beschreven hoe de leerlingweergave, vraagopbouw, feedback en module-specifieke interactie precies werken.
Proces bij openen van dit scherm
Bij het openen van dit scherm verloopt het proces functioneel als volgt:
- De applicatie ontvangt of bepaalt de actieve
ExerciseRunId. - Het systeem controleert server-side of de run hoort bij de ingelogde leerling en binnen een toegankelijke leerlingcontext valt.
- Het systeem laadt de runmetadata, de gekoppelde oefening, het actieve niveau, de categorie en de gekoppelde technische module.
- Via de aan de oefening gekoppelde
ExerciseModuleIden de modulemetadata uitExerciseModuleswordt de juiste technische module bepaald. - Via het strategy pattern wordt de juiste technische module-library aangesproken.
- De module krijgt een contextobject mee, bijvoorbeeld op basis van
ExerciseRunIden het actuele vraagnummer. - De module rendert de inhoudelijke vraag- en antwoordweergave binnen de generieke modulecontainer van dit scherm.
- Na iedere bevestigde antwoordstap wordt voortgang server-side opgeslagen, zodat hervatten en live meekijken betrouwbaar blijven.
Interpretatie van mockupwaarden
De zichtbare waarden in de mockup zijn voorbeeldwaarden. Namen zoals Emma, de categorie Rekenen, de oefening Optellen, de breadcrumb, het aantal berichten, de actieve oefening en de technische moduleplaceholder mogen niet als vaste data worden geïnterpreteerd.
Ook eventuele module-inhoud die later op deze plek verschijnt, verschilt per:
- leerling;
- actief niveau;
- geselecteerde categorie;
- geselecteerde oefening;
- technische module;
- concrete
ExerciseRun; - huidig vraagnummer en voortgangsstatus.
5.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-LLN-04-01-S01 | Section | Header / leerlingnavigatie | Generieke leerlingheader met logo, welkomstregel, categorienavigatie, berichtenicoon en profielingang. | Welkom terug, <naam> | Generieke headercomponent; waarden zijn dynamisch. | StudentHeaderSection |
| SCH-LLN-04-01-F01 | Field | Header — welkomstregel | Toont de ingelogde leerlingnaam of passende weergavenaam. | Welkom terug, <naam> | In de mockup staat Emma als voorbeeldwaarde. | StudentWelcomeText |
| SCH-LLN-04-01-S02 | Section | Categoriebalk | Toont de categorieën en oefeningen die voor de leerling in het actieve niveau beschikbaar zijn. | Rekenen, Taal, Engels, Spelling, Topografie | Alleen toegankelijke categorieën/oefeningen mogen functioneel actief zijn. | StudentCategoryNavigationSection |
| SCH-LLN-04-01-F02 | Field | Categoriebalk — actieve categorie | Geeft aan welke categorie in de huidige runcontext actief is. | <categorienaam> | In de mockup is dit Rekenen; dynamisch per run. | ActiveCategoryName |
| SCH-LLN-04-01-F03 | Field | Dropdown — actieve oefening | Geeft aan welke oefening binnen de actieve categorie wordt uitgevoerd. | <oefeningnaam> | In de mockup is dit Optellen; dynamisch per run. | ActiveExerciseName |
| SCH-LLN-04-01-S03 | Section | Breadcrumb | Toont de padcontext naar de actieve oefenrun. | Home › <categorie> › <oefening> › Nieuwe oefening | Labels komen uit de runcontext; niet hardcoded. | ExerciseRunBreadcrumbSection |
| SCH-LLN-04-01-F04 | Field | Breadcrumb — categorie | Categorieonderdeel van de breadcrumb. | <categorie> | Dynamische waarde uit de runcontext. | BreadcrumbCategoryName |
| SCH-LLN-04-01-F05 | Field | Breadcrumb — oefening | Oefeningonderdeel van de breadcrumb. | <oefening> | Dynamische waarde uit de runcontext. | BreadcrumbExerciseName |
| SCH-LLN-04-01-F06 | Field | Breadcrumb — huidige stap | Huidige stap binnen de oefenflow. | Nieuwe oefening | Label beschrijft de actieve runweergave. | BreadcrumbCurrentStepLabel |
| SCH-LLN-04-01-S04 | Section | Oefenschil | Generieke container waarin de pagina-intro en modulecontainer staan. | Start nieuwe oefening | Structurele OefenHub-container; inhoudelijke moduleweergave valt hieronder. | ExerciseRuntimeShell |
| SCH-LLN-04-01-F07 | Field | Intro — titel | Titel boven de runtimecontainer. | Nieuwe oefening starten | Tekst is generiek voor de runtimeweergave na start van een nieuwe run. | ExerciseRuntimeTitle |
| SCH-LLN-04-01-F08 | Field | Intro — uitleg | Korte uitleg over het doorlopen van vragen binnen de oefenrun. | Beantwoord de som en ga daarna direct door naar de volgende vraag. | De tekst kan generiek of modulecontextueel zijn, maar is geen invoerwaarde. | ExerciseRuntimeIntroText |
| SCH-LLN-04-01-S05 | Section | Modulecontainer | Afgebakend gebied waar de technische module de vraag- en antwoordweergave rendert. | Technische oefenmodule | In de HTML als regio met aria-label="Technische oefenmodule". | TechnicalModuleHostRegion |
| SCH-LLN-04-01-M01 | Message | Modulecontainer — placeholder | Mockup-only placeholder om de positie van module-inhoud aan te geven. | {Placeholder voor technische oefen modules} | Mag niet als productie-inhoud verschijnen. | TechnicalModulePlaceholderMessage |
| SCH-LLN-04-01-A01 | Action / interface | Modulecontainer — module renderen | Applicatieactie waarmee de juiste technische module via strategy pattern wordt geladen en gerenderd. | n.v.t. | Technische actie achter de schermen; geen losse zichtbare knop. | RenderExerciseModuleAction |
| SCH-LLN-04-01-A02 | Action / interface | Modulecontainer — antwoord bevestigen | Module- of generieke actie waarbij een antwoordstap wordt verwerkt en voortgang server-side wordt opgeslagen. | Module-afhankelijk | De zichtbare knoptekst en invoervorm worden per module bepaald. | SubmitModuleAnswerAction |
| SCH-LLN-04-01-S06 | Section | Footer | Generieke leerlingfooter met beheerbare footerinhoud en links. | OefenHub / Handige links / Support | Functionele detailuitwerking van footerinhoud hoort niet specifiek bij deze view. | StudentFooterSection |
5.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-LLN-04-01-S01 | Header / leerlingnavigatie | Welkom terug, <naam> | StudentHeaderSection | Ingelogde gebruiker, gebruikersprofiel, berichtenstatus en toegankelijke categorie-/oefeningcontext | Samengestelde headerweergave binnen actieve leerlingcontext | Section / composite | Nee | Alleen gegevens voor de ingelogde leerling mogen zichtbaar zijn. |
| SCH-LLN-04-01-F01 | Header — welkomstregel | Welkom terug, <naam> | StudentWelcomeText | Users / applicatieprofiel van de ingelogde leerling | Dynamische weergavenaam van de ingelogde leerling | String | Nee | Mockupwaarde Emma is voorbeelddata. |
| SCH-LLN-04-01-S02 | Categoriebalk | Categorieën en oefeningen | StudentCategoryNavigationSection | Actieve niveauautorisaties, TeacherLevels, TeacherLevelCategories, Categories, Exercises | Toegankelijke categorieën en oefeningen binnen de actieve leerlingcontext | Collection | Nee | Alleen categorieën en oefeningen tonen waarvoor de leerling daadwerkelijk toegang heeft. |
| SCH-LLN-04-01-F02 | Categoriebalk — actieve categorie | <categorienaam> | ActiveCategoryName | Actieve ExerciseRun + gekoppelde categoriecontext | Categorie die hoort bij de actieve oefenrun | String | Nee | Mag niet los van de runcontext worden afgeleid uit alleen de URL. |
| SCH-LLN-04-01-F03 | Dropdown — actieve oefening | <oefeningnaam> | ActiveExerciseName | Actieve ExerciseRun + gekoppelde Exercise | Oefening die hoort bij de actieve oefenrun | String | Nee | Alleen zichtbaar wanneer de run en oefening voor de leerling geldig zijn. |
| SCH-LLN-04-01-S03 | Breadcrumb | Home › <categorie> › <oefening> › Nieuwe oefening | ExerciseRunBreadcrumbSection | Actieve ExerciseRun, categorie- en oefeningcontext | Navigatiepad naar de actuele runtimeweergave | Composite / string collection | Nee | Breadcrumblabels zijn dynamisch; technische IDs worden niet getoond. |
| SCH-LLN-04-01-F04 | Breadcrumb — categorie | <categorie> | BreadcrumbCategoryName | Actieve ExerciseRun + categoriecontext | Naam van de categorie in de runcontext | String | Nee | In de mockup Rekenen; geen vaste waarde. |
| SCH-LLN-04-01-F05 | Breadcrumb — oefening | <oefening> | BreadcrumbExerciseName | Actieve ExerciseRun + Exercises.Name of historische runcontext | Naam van de oefening in de runcontext | String | Nee | In de mockup Optellen; geen vaste waarde. |
| SCH-LLN-04-01-F06 | Breadcrumb — huidige stap | Nieuwe oefening | BreadcrumbCurrentStepLabel | Codegedreven flowlabel | Huidige stap in de oefenrunflow | String | Nee | Label beschrijft de runtimeweergave na start van een nieuwe run. |
| SCH-LLN-04-01-S04 | Oefenschil | Start nieuwe oefening | ExerciseRuntimeShell | Actieve ExerciseRun + generieke leerlinglayout | Container voor runintro en modulehost | Section / composite | Nee | Shell toont geen module-specifieke vraaglogica buiten de modulecontainer. |
| SCH-LLN-04-01-F07 | Intro — titel | Nieuwe oefening starten | ExerciseRuntimeTitle | Codegedreven label of beheerbare contenttekst voor runtimeintro | Titel boven de modulehost | String | Nee | Geen runwaarde; mag contentgedreven worden beheerd indien daarvoor contentblokken bestaan. |
| SCH-LLN-04-01-F08 | Intro — uitleg | Beantwoord de som en ga daarna direct door naar de volgende vraag. | ExerciseRuntimeIntroText | Codegedreven of modulecontextueel tekstblok | Uitleg over de actuele oefenrunweergave | String | Nee | Tekst mag niet impliceren dat alle modules uitsluitend sommen gebruiken; module-specifieke toelichting hoort bij de module. |
| SCH-LLN-04-01-S05 | Modulecontainer | Technische oefenmodule | TechnicalModuleHostRegion | ExerciseRuns, Exercises.ExerciseModuleId, ExerciseModules, module-strategyregistratie | Runtimehost waarin de juiste technische module wordt gerenderd | Render region / component host | Nee | Moet de module kiezen op basis van de oefening/runcontext; niet op basis van handmatige UI-keuze. |
| SCH-LLN-04-01-M01 | Modulecontainer — placeholder | {Placeholder voor technische oefen modules} | TechnicalModulePlaceholderMessage | Mockup-only HTML-tekst | Visuele aanduiding van de plek waar module-inhoud verschijnt | String | Nee | Alleen documentatie/mockup; niet tonen in productie. |
| SCH-LLN-04-01-A01 | Modulecontainer — module renderen | n.v.t. | RenderExerciseModuleAction | Exercises.ExerciseModuleId, ExerciseModules.CodeReference, dependency injection / strategy pattern | Selectie en rendering van de juiste technische module | Interface action | Nee | Bij ontbrekende of inactieve module moet een veilige foutstatus worden getoond en mag de run niet corrupt raken. |
| SCH-LLN-04-01-A02 | Modulecontainer — antwoord bevestigen | Module-afhankelijk | SubmitModuleAnswerAction | Modulecomponent + server-side voortgangsopslag + ExerciseRunProgress of functioneel equivalente voortgangsregels | Verwerking van antwoord, feedback en voortgang | User input / action | Ja, binnen module | Na iedere bevestigde stap moeten voortgang en uniforme runvelden centraal worden opgeslagen volgens de generieke runregels. |
| SCH-LLN-04-01-S06 | Footer | OefenHub / Handige links / Support | StudentFooterSection | ContentBlocks, SiteLinks, FooterSections en footerlinktoewijzingen voor leerlingcontext | Generieke footerinhoud voor leerlingcontext | Section / composite | Nee op deze view | Footerinhoud is niet specifiek voor deze oefenrun en wordt niet als runwaarde behandeld. |
5.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-04-01-01 | SRS-CAT-001 AC-CAT-001 | Dit scherm pas openen nadat voor de leerling een nieuwe ExerciseRun is gegenereerd en persistent is opgeslagen |
REQ-SCH-LLN-04-01-02 | SRS-AUTH-001 AC-AUTH-001 | Bij openen van dit scherm server-side controleren dat de actieve ExerciseRun bij de ingelogde leerling hoort |
REQ-SCH-LLN-04-01-03 | SRS-CAT-001 AC-CAT-001 | De zichtbare categorie-, oefening- en breadcrumbcontext afleiden uit de actieve runcontext en niet uit vaste mockupwaarden |
REQ-SCH-LLN-04-01-04 | SRS-AUTH-004 AC-AUTH-004 | Technische identifiers zoals run-ID's, module-ID's en GUID's niet zichtbaar maken in de leerlinginterface |
REQ-SCH-LLN-04-01-05 | SRS-CAT-001 AC-CAT-001 | De technische module bepalen via de aan de oefening gekoppelde ExerciseModuleId en de modulemetadata uit ExerciseModules |
REQ-SCH-LLN-04-01-06 | SRS-CAT-001 AC-CAT-001 | Via het strategy pattern de juiste technische module-library laden voor de actieve oefenrun |
REQ-SCH-LLN-04-01-07 | SRS-LRN-003 AC-LRN-003 | De moduleweergave aanroepen via een uniform modulecontract, bijvoorbeeld met een context op basis van ExerciseRunId en huidig vraagnummer |
REQ-SCH-LLN-04-01-08 | SRS-LRN-003 AC-LRN-003 | De inhoudelijke vraagweergave, antwoordvelden, antwoordcontrole en module-specifieke feedback door de technische oefenmodule worden geleverd en vallen buiten de vaste UI-definitie van dit scherm |
REQ-SCH-LLN-04-01-09 | SRS-CAT-001 AC-CAT-001 | Een afgebakende modulecontainer tonen waarin technische module-inhoud veilig en consistent kan worden gerenderd |
REQ-SCH-LLN-04-01-10 | SRS-CAT-001 AC-CAT-001 | De mockuptekst {Placeholder voor technische oefen modules} geen als productie-inhoud worden getoond |
REQ-SCH-LLN-04-01-11 | SRS-AUTH-001 SRS-LRN-002 AC-AUTH-001 AC-LRN-002 | Na iedere bevestigde antwoordstap de voortgang server-side worden opgeslagen, zodat hervatten, resultaatberekening en live meekijken betrouwbaar blijven |
REQ-SCH-LLN-04-01-12 | SRS-NFR-AUD-001 SRS-LRN-003 AC-NFR-AUD-001 AC-LRN-003 | De module mag module-specifieke vraag- en antwoordpayloads gebruiken, maar uniforme runmetadata, voortgangsopslag, auditlogging en statistiekverwerking blijven centraal in OefenHub belegd |
REQ-SCH-LLN-04-01-13 | SRS-CAT-001 AC-CAT-001 | Wanneer de technische module niet gevonden, niet beschikbaar of niet correct laadbaar is, het systeem een veilige foutmelding tonen en voorkomen dat de run in een half verwerkte staat terechtkomt |
REQ-SCH-LLN-04-01-14 | SRS-LRN-003 AC-LRN-003 | Alle zichtbare waarden rond leerling, berichten, categorie, oefening, voortgang en module-inhoud dynamisch afleiden en mag mockupwaarden nooit hardcoded gebruiken |
REQ-SCH-LLN-04-01-15 | SRS-AUTH-001 AC-AUTH-001 | Autorisatiegrens: geen gegevens van andere leerlingen, andere runs of niet-geautoriseerde niveaus kunnen benaderen, ook niet via directe URL-manipulatie |
REQ-SCH-LLN-04-01-16 | SRS-CAT-001 AC-CAT-001 | Toegankelijk gemarkeerd zijn als technisch modulegebied, zodat de runtime-inhoud semantisch herkenbaar blijft voor hulpmiddelen |
REQ-SCH-LLN-04-01-17 | SRS-LRN-003 SRS-LRN-006 AC-LRN-003 AC-LRN-006 | Wanneer de laatste vraag van de run is afgerond, het systeem de runstatus en uniforme resultaatvelden centraal bijwerken voordat resultaatweergave of vervolgnavigatie wordt getoond |
REQ-SCH-LLN-04-01-18 | SRS-CAT-001 AC-CAT-001 | De inhoudelijke uitwerking van module-specifieke leerlingweergaven wordt vastgelegd in de oefenmodule-documentatie en niet als vaste onderdeeldefinitie binnen dit generieke scherm worden gedupliceerd |
5.7 Technische koppeling
Voor technische uitwerking zijn vooral relevant:
- 05 Autorisatie, policies en server-side contextcontrole voor server-side controle op startrechten binnen leerlingcontext.
- 08 Oefencatalogus, niveaus, categorieën, oefeningen en modules voor geselecteerde categorie, oefening en actieve configuratie.
- 09 Oefenmodulecontract en dynamische module-integratie voor modulecontract, vraagpayloads en antwoordregistratie.
- 10 Oefenruns, voortgang, resultaten, statistieken en PDF-brondata voor nieuwe run, runstatus, voortgang en afronding.
- 17 Readmodels, tellers, badges, caching en materialisatie voor bijwerking van tellers en afgeleide leerlingoverzichten na runmutaties.
- 24 Frontend, Blazor, routing, state en componentopbouw voor runstate, navigatiebeveiliging en interactiegedrag in Blazor.