4. Schermen en states
4.1 Docentweergave
4.1.1 Schermafbeelding

4.1.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-MOD-01-01 |
| Schermnaam | Module configuratie — Optellen & Aftrekken (simpel) |
| Doelgroep / onderdeel | Docent / technische oefenmodule |
| Bronbestand | oefenhub_docent_module_optellen_en_aftrekken_simpel_v1_23.html |
| Screenshotbestand | oefenhub_docent_module_optellen_en_aftrekken_simpel_v1_23.png |
| Processtap / context | Docent heeft binnen de generieke flow Nieuwe oefening toevoegen een technische module geselecteerd en opent de modulespecifieke configuratie. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification, database-informatie en ondersteunende modulearchitectuur. |
| Opmerkingen | De zichtbare configuratie-inhoud wordt door de technische module geleverd. De omliggende flow, autorisatie, opslagactie en koppeling aan de concrete oefening blijven generiek. |
| Route / URL-patroon | Functioneel geopend vanuit: Oefenaanbod > gekozen categorie > Nieuwe oefening > Selecteer en configureer. |
| Autorisatie / vereiste rol-context | Actieve docentcontext of actieve collaborator met bewerkrechten op het betreffende niveau. Server-side wordt gecontroleerd of de gebruiker de oefening binnen deze niveau-/categoriecontext mag aanmaken of aanpassen. |
| Primair domeinobject / hoofdentiteit | Exercises, gekoppeld aan één ExerciseModules-record en aan de actuele categoriecontext via TeacherLevelCategoryExercises. |
| Gerelateerde schermen / navigatie | Nieuwe oefening, Niveaus en categorieën, Moduleplatform en contract, Modules beheren. |
| Data-karakter | Generieke oefeninggegevens plus modulespecifieke configuratiepayload. |
4.1.3 Functionele beschrijving
De docentweergave wordt geopend binnen de generieke configuratiecontainer Module configureren. De container toont welke technische module gekozen is; de concrete configuratievelden worden door de module geleverd via het modulecontract. De docent configureert hiermee een concrete oefening, niet de technische module zelf.
De bovenste kaart bevat generieke oefeninggegevens: de naam van de oefening, het icoon en de keuze welke somtypen beschikbaar zijn. Naam en icoon horen bij Exercises; de keuze voor somtype hoort bij de modulespecifieke configuratiepayload. De zichtbare voorbeeldwaarden in de mockup, zoals Optellen en aftrekken t/m 20, zijn invoervoorbeelden en mogen niet als vaste productiegegevens worden geïnterpreteerd.
Daarna toont de module de getalposities. De labels getal 1 en getal 2 verwijzen naar de positie in de som: getal 1 + getal 2 of getal 1 - getal 2. Deze uitleg is nodig omdat de docent bij optellen en aftrekken dezelfde veldnamen ziet, terwijl de betekenis voor uitkomstvalidatie verschilt.
Voor Optellen configureren kan de docent voor getal 1 en getal 2 kiezen tussen een min/max-bereik of exacte toegestane waarden. Per getal is steeds precies één invoermodus actief. De niet-actieve modus wordt visueel gedimd en mag server-side niet worden meegenomen alsof die actief is. De uitkomstconfiguratie begrenst de toegestane somuitkomst.
Voor Aftrekken configureren gelden dezelfde keuzemogelijkheden. Aanvullend toont de module een waarschuwing dat een minimale uitkomst van ten minste 0 voorkomt dat negatieve uitkomsten worden gegenereerd. Dit is een functionele hulptekst; de echte geldigheid van een gegenereerde vraag wordt door de modulevalidatie en vraaggeneratie afgedwongen.
De sectie Optellen en Aftrekken balans configureren is alleen functioneel relevant wanneer OperationMode = Both. De sliders leggen een minimale ondergrens vast voor het aandeel optel- en aftreksommen. Het restant wordt door de module random ingevuld binnen de overige configuratieregels. Per somtype geldt in de mockup een bovengrens van 50%, zodat altijd ruimte blijft voor random opvulling of voor het andere somtype.
De sectie Oefening instellingen bevat oefeningbrede generatie- en runtime-instellingen. De docent kan beperkingen instellen voor veelvoorkomende patronen, zoals sommen met 1 als operand of hele tientallen. Daarnaast kan de docent standaard, minimum en maximum aantal vragen vastleggen. De leerling mag bij het starten van een run een aantal vragen kiezen binnen die grenzen; het systeemmaximum is 100. De opties Geen idee en Toon antwoord direct na vraag beïnvloeden de runtimeweergave bij leerlingen.
De knop Terug naar overzicht sluit de configuratie zonder opslag en keert terug naar de generieke modulekeuze. De knop Opslaan en toevoegen voert eerst generieke autorisatie en modulespecifieke validatie uit. Pas bij succesvolle validatie wordt de concrete oefening opgeslagen, gekoppeld aan de huidige categoriecontext en aangemaakt in status In onderhoud.
4.1.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-MOD-01-01-S01 | S | Configuratiecontainer | Hoofdsectie voor de modulespecifieke docentconfiguratie. | Module configureren | Container wordt generiek geopend; inhoud komt uit module. | ModuleConfigurationView |
| SCH-MOD-01-01-S02 | S | Bovenaan | Introregel met gekozen modulecontext. | Gekozen module: Optellen & Aftrekken (simpel) | Read-only contextinformatie uit ExerciseModules. | SelectedModuleContext |
| SCH-MOD-01-01-FORM01 | FORM | Algemene oefeninggegevens | Formulierblok met naam, icoon en somtype. | Algemene oefeninggegevens | Naam en icoon zijn generiek; somtype is moduleconfiguratie. | GenericExerciseDataForm |
| SCH-MOD-01-01-F01 | F | Algemene oefeninggegevens | Naam van de concrete oefening. | Geef de naam op voor deze oefening | Verplicht. | ExerciseName |
| SCH-MOD-01-01-F02 | F | Algemene oefeninggegevens | Icoon van de concrete oefening. | Selecteer een icoontje voor deze oefening | Hoort bij Exercises, niet bij ExerciseModules. | ExerciseIcon |
| SCH-MOD-01-01-F03 | F | Algemene oefeninggegevens | Keuze voor toegestane somtypen. | Wat gaat de oefening inhouden? | Waarden: Allebei, Alleen optellen, Alleen aftrekken. | OperationMode |
| SCH-MOD-01-01-M01 | M | Algemene oefeninggegevens | Uitleg over getalposities. | Getallen posities gedefinieerd | Module-uitleg zonder eigen opslag. | NumberPositionExplanation |
| SCH-MOD-01-01-S03 | S | Optellen configureren | Sectie voor optelsommen. | Optellen configureren | Alleen actief wanneer optellen in OperationMode is toegestaan. | AdditionConfigurationSection |
| SCH-MOD-01-01-RAD01 | F | Optellen > getal 1 | Keuze tussen min/max en exacte waarden. | Stel een min/max in / Exacte getallen gebruiken | Wederzijds exclusief. | AdditionNumber1Mode |
| SCH-MOD-01-01-F04 | F | Optellen > getal 1 | Minimale waarde van getal 1. | Wat is de minimale waarde van het eerste getal? | Actief bij min/max-modus. | AdditionNumber1Min |
| SCH-MOD-01-01-F05 | F | Optellen > getal 1 | Maximale waarde van getal 1. | Wat is de maximale waarde van het eerste getal? | Actief bij min/max-modus. | AdditionNumber1Max |
| SCH-MOD-01-01-F06 | F | Optellen > getal 1 | Exacte toegestane waarden van getal 1. | Selecteer de specifieke getallen die gebruikt mogen worden. | Actief bij exacte-waardenmodus. | AdditionNumber1ExactValues |
| SCH-MOD-01-01-RAD02 | F | Optellen > getal 2 | Keuze tussen min/max en exacte waarden. | Stel een min/max in / Exacte getallen gebruiken | Wederzijds exclusief. | AdditionNumber2Mode |
| SCH-MOD-01-01-F07 | F | Optellen > getal 2 | Minimale waarde van getal 2. | Wat is de minimale waarde van het tweede getal? | Actief bij min/max-modus. | AdditionNumber2Min |
| SCH-MOD-01-01-F08 | F | Optellen > getal 2 | Maximale waarde van getal 2. | Wat is de maximale waarde van het tweede getal? | Actief bij min/max-modus. | AdditionNumber2Max |
| SCH-MOD-01-01-F09 | F | Optellen > getal 2 | Exacte toegestane waarden van getal 2. | Selecteer de specifieke getallen die gebruikt mogen worden. | Actief bij exacte-waardenmodus. | AdditionNumber2ExactValues |
| SCH-MOD-01-01-F10 | F | Optellen > uitkomst | Minimale toegestane opteluitkomst. | Wat is de minimale waarde van het antwoord? | Modulespecifieke validatie. | AdditionResultMin |
| SCH-MOD-01-01-F11 | F | Optellen > uitkomst | Maximale toegestane opteluitkomst. | Wat is de maximale waarde van het antwoord? | Modulespecifieke validatie. | AdditionResultMax |
| SCH-MOD-01-01-S04 | S | Aftrekken configureren | Sectie voor aftreksommen. | Aftrekken configureren | Alleen actief wanneer aftrekken in OperationMode is toegestaan. | SubtractionConfigurationSection |
| SCH-MOD-01-01-RAD03 | F | Aftrekken > getal 1 | Keuze tussen min/max en exacte waarden. | Stel een min/max in / Exacte getallen gebruiken | Wederzijds exclusief. | SubtractionNumber1Mode |
| SCH-MOD-01-01-F12 | F | Aftrekken > getal 1 | Minimale waarde van getal 1. | Wat is de minimale waarde van het eerste getal? | Actief bij min/max-modus. | SubtractionNumber1Min |
| SCH-MOD-01-01-F13 | F | Aftrekken > getal 1 | Maximale waarde van getal 1. | Wat is de maximale waarde van het eerste getal? | Actief bij min/max-modus. | SubtractionNumber1Max |
| SCH-MOD-01-01-F23 | F | Aftrekken > getal 1 | Exacte toegestane waarden van getal 1. | Selecteer de specifieke getallen die gebruikt mogen worden. | Actief bij exacte-waardenmodus. | SubtractionNumber1ExactValues |
| SCH-MOD-01-01-RAD04 | F | Aftrekken > getal 2 | Keuze tussen min/max en exacte waarden. | Stel een min/max in / Exacte getallen gebruiken | Wederzijds exclusief. | SubtractionNumber2Mode |
| SCH-MOD-01-01-F14 | F | Aftrekken > getal 2 | Minimale waarde van getal 2. | Wat is de minimale waarde van het tweede getal? | Actief bij min/max-modus. | SubtractionNumber2Min |
| SCH-MOD-01-01-F15 | F | Aftrekken > getal 2 | Maximale waarde van getal 2. | Wat is de maximale waarde van het tweede getal? | Actief bij min/max-modus. | SubtractionNumber2Max |
| SCH-MOD-01-01-F24 | F | Aftrekken > getal 2 | Exacte toegestane waarden van getal 2. | Selecteer de specifieke getallen die gebruikt mogen worden. | Actief bij exacte-waardenmodus. | SubtractionNumber2ExactValues |
| SCH-MOD-01-01-M02 | M | Aftrekken > waarschuwing | Waarschuwing over negatieve uitkomsten. | Vul als minimale waarde tenminste 0 in zodat je voorkomt dat er een som met negatieve uitkomst gegenereerd wordt. | Modulegedreven helpertekst. | NegativeResultWarning |
| SCH-MOD-01-01-F16 | F | Aftrekken > uitkomst | Minimale toegestane aftrekuitkomst. | Wat is de minimale waarde van het antwoord? | Modulespecifieke validatie. | SubtractionResultMin |
| SCH-MOD-01-01-F17 | F | Aftrekken > uitkomst | Maximale toegestane aftrekuitkomst. | Wat is de maximale waarde van het antwoord? | Modulespecifieke validatie. | SubtractionResultMax |
| SCH-MOD-01-01-S05 | S | Balans | Sectie voor verdeling tussen optellen en aftrekken. | Optellen en Aftrekken balans configureren | Alleen actief bij OperationMode = Both. | BalanceConfigurationSection |
| SCH-MOD-01-01-F18 | F | Balans | Minimale percentage optelsommen. | Hoeveel procent optel sommen? | Range-slider. | AdditionMinimumPercentage |
| SCH-MOD-01-01-F19 | F | Balans | Minimale percentage aftreksommen. | Hoeveel procent aftrek sommen? | Range-slider. | SubtractionMinimumPercentage |
| SCH-MOD-01-01-M03 | M | Balans | Uitleg over minimale verdeling en random opvulling. | De percentages worden gebruikt ... | Module-uitleg zonder eigen opslag. | BalanceExplanation |
| SCH-MOD-01-01-S06 | S | Oefening instellingen | Sectie met generatie- en runtime-instellingen. | Oefening instellingen | Modulespecifieke configuratie met generieke runtime-impact. | ExerciseSettingsSection |
| SCH-MOD-01-01-RAD05 | F | Oefening instellingen | Beperken van sommen met 1 als operand. | Voorkom te veel sommen met “1 + x” of “y + 1” | Ja/Nee. | LimitOneOperandQuestions |
| SCH-MOD-01-01-RAD06 | F | Oefening instellingen | Beperken van sommen met hele tientallen. | Voorkom te veel sommen met hele tientallen | Ja/Nee. | LimitRoundTensQuestions |
| SCH-MOD-01-01-F20 | F | Oefening instellingen | Standaard aantal vragen bij starten. | De standaard waarde voor het aantal oefeningen | Numeriek. | DefaultQuestionCount |
| SCH-MOD-01-01-F21 | F | Oefening instellingen | Minimum aantal vragen. | De minimale waarde voor het aantal oefeningen | Numeriek. | MinimumQuestionCount |
| SCH-MOD-01-01-F22 | F | Oefening instellingen | Maximum aantal vragen. | De maximale waarde voor het aantal oefeningen | Numeriek. | MaximumQuestionCount |
| SCH-MOD-01-01-RAD07 | F | Oefening instellingen | Beschikbaarheid van de knop Geen idee. | Is de “Geen idee” knop beschikbaar? | Ja/Nee. | AllowMarkAsDunno |
| SCH-MOD-01-01-RAD08 | F | Oefening instellingen | Direct feedback tonen na beantwoording. | Toon antwoord direct na vraag? | Ja/Nee. | ShowAnswerAfterSubmit |
| SCH-MOD-01-01-B01 | B | Onderzijde | Terug naar generieke modulekeuze. | Terug naar overzicht | Sluit zonder opslag. | BackToModuleOverviewButton |
| SCH-MOD-01-01-B02 | B | Onderzijde | Slaat de concrete oefening op. | Opslaan en toevoegen | Centrale opslagactie met modulevalidatie. | SaveAndAddExerciseButton |
4.1.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-MOD-01-01-S02 | Bovenaan | Gekozen module: Optellen & Aftrekken (simpel) | SelectedModuleContext | ExerciseModules.DisplayName, ExerciseModules.CodeReference, ExerciseModules.Version | Geselecteerd module-record uit vorige stap | Samengestelde tekst | Nee | De modulecontext moet overeenkomen met de gekozen ExerciseModuleId. |
| SCH-MOD-01-01-F01 | Algemene oefeninggegevens | Geef de naam op voor deze oefening | ExerciseName | Exercises.Name | Directe docent-invoer | string | Ja | Verplicht; maximale lengte volgt de generieke oefeningvalidatie. |
| SCH-MOD-01-01-F02 | Algemene oefeninggegevens | Selecteer een icoontje voor deze oefening | ExerciseIcon | Exercises.IconKey of functioneel equivalente icoonreferentie | Directe docentkeuze | string / asset key | Ja | Moet een toegestane icoonsleutel zijn. |
| SCH-MOD-01-01-F03 | Algemene oefeninggegevens | Wat gaat de oefening inhouden? | OperationMode | Exercises.ModuleConfigurationJsonBase64 | Directe docentkeuze, gevalideerd door module | enum | Ja | Toegestane waarden: Both, AdditionOnly, SubtractionOnly. |
| SCH-MOD-01-01-F04 | Optellen > getal 1 | Wat is de minimale waarde van het eerste getal? | AdditionNumber1Min | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij AdditionNumber1Mode = Range; minimum mag niet groter zijn dan maximum. |
| SCH-MOD-01-01-F05 | Optellen > getal 1 | Wat is de maximale waarde van het eerste getal? | AdditionNumber1Max | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij AdditionNumber1Mode = Range; maximum mag niet kleiner zijn dan minimum. |
| SCH-MOD-01-01-F06 | Optellen > getal 1 | Selecteer de specifieke getallen die gebruikt mogen worden. | AdditionNumber1ExactValues | Exercises.ModuleConfigurationJsonBase64 | Directe docentselectie | integer-collectie | Ja | Alleen actief bij AdditionNumber1Mode = ExactValues; minimaal één waarde vereist. |
| SCH-MOD-01-01-F07 | Optellen > getal 2 | Wat is de minimale waarde van het tweede getal? | AdditionNumber2Min | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij AdditionNumber2Mode = Range; minimum mag niet groter zijn dan maximum. |
| SCH-MOD-01-01-F08 | Optellen > getal 2 | Wat is de maximale waarde van het tweede getal? | AdditionNumber2Max | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij AdditionNumber2Mode = Range; maximum mag niet kleiner zijn dan minimum. |
| SCH-MOD-01-01-F09 | Optellen > getal 2 | Selecteer de specifieke getallen die gebruikt mogen worden. | AdditionNumber2ExactValues | Exercises.ModuleConfigurationJsonBase64 | Directe docentselectie | integer-collectie | Ja | Alleen actief bij AdditionNumber2Mode = ExactValues; minimaal één waarde vereist. |
| SCH-MOD-01-01-F10 | Optellen > uitkomst | Wat is de minimale waarde van het antwoord? | AdditionResultMin | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Minimum mag niet hoger zijn dan maximum; gegenereerde sommen moeten binnen de uitkomstgrenzen vallen. |
| SCH-MOD-01-01-F11 | Optellen > uitkomst | Wat is de maximale waarde van het antwoord? | AdditionResultMax | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Maximum mag niet lager zijn dan minimum; gegenereerde sommen moeten binnen de uitkomstgrenzen vallen. |
| SCH-MOD-01-01-F12 | Aftrekken > getal 1 | Wat is de minimale waarde van het eerste getal? | SubtractionNumber1Min | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij SubtractionNumber1Mode = Range; minimum mag niet groter zijn dan maximum. |
| SCH-MOD-01-01-F13 | Aftrekken > getal 1 | Wat is de maximale waarde van het eerste getal? | SubtractionNumber1Max | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij SubtractionNumber1Mode = Range; maximum mag niet kleiner zijn dan minimum. |
| SCH-MOD-01-01-F23 | Aftrekken > getal 1 | Selecteer de specifieke getallen die gebruikt mogen worden. | SubtractionNumber1ExactValues | Exercises.ModuleConfigurationJsonBase64 | Directe docentselectie | integer-collectie | Ja | Alleen actief bij SubtractionNumber1Mode = ExactValues; minimaal één waarde vereist. |
| SCH-MOD-01-01-F14 | Aftrekken > getal 2 | Wat is de minimale waarde van het tweede getal? | SubtractionNumber2Min | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij SubtractionNumber2Mode = Range; minimum mag niet groter zijn dan maximum. |
| SCH-MOD-01-01-F15 | Aftrekken > getal 2 | Wat is de maximale waarde van het tweede getal? | SubtractionNumber2Max | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Alleen actief bij SubtractionNumber2Mode = Range; maximum mag niet kleiner zijn dan minimum. |
| SCH-MOD-01-01-F24 | Aftrekken > getal 2 | Selecteer de specifieke getallen die gebruikt mogen worden. | SubtractionNumber2ExactValues | Exercises.ModuleConfigurationJsonBase64 | Directe docentselectie | integer-collectie | Ja | Alleen actief bij SubtractionNumber2Mode = ExactValues; minimaal één waarde vereist. |
| SCH-MOD-01-01-F16 | Aftrekken > uitkomst | Wat is de minimale waarde van het antwoord? | SubtractionResultMin | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Minimum mag niet hoger zijn dan maximum; bij 0 worden negatieve uitkomsten uitgesloten door vraaggeneratie. |
| SCH-MOD-01-01-F17 | Aftrekken > uitkomst | Wat is de maximale waarde van het antwoord? | SubtractionResultMax | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Maximum mag niet lager zijn dan minimum. |
| SCH-MOD-01-01-F18 | Balans | Hoeveel procent optel sommen? | AdditionMinimumPercentage | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer via slider | integer / percentage | Ja | Alleen actief bij OperationMode = Both; waarde ligt binnen toegestane slidergrenzen en is maximaal 50. |
| SCH-MOD-01-01-F19 | Balans | Hoeveel procent aftrek sommen? | SubtractionMinimumPercentage | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer via slider | integer / percentage | Ja | Alleen actief bij OperationMode = Both; waarde ligt binnen toegestane slidergrenzen en is maximaal 50. |
| SCH-MOD-01-01-RAD05 | Oefening instellingen | Voorkom te veel sommen met “1 + x” of “y + 1” | LimitOneOperandQuestions | Exercises.ModuleConfigurationJsonBase64 | Directe docentkeuze | boolean | Ja | Bij true genereert de module maximaal het ingestelde aantal vragen met operandwaarde 1. |
| SCH-MOD-01-01-RAD06 | Oefening instellingen | Voorkom te veel sommen met hele tientallen | LimitRoundTensQuestions | Exercises.ModuleConfigurationJsonBase64 | Directe docentkeuze | boolean | Ja | Bij true genereert de module maximaal het ingestelde aantal vragen met een heel tiental als operand. |
| SCH-MOD-01-01-F20 | Oefening instellingen | De standaard waarde voor het aantal oefeningen | DefaultQuestionCount | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Moet tussen minimum en maximum liggen. |
| SCH-MOD-01-01-F21 | Oefening instellingen | De minimale waarde voor het aantal oefeningen | MinimumQuestionCount | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Moet kleiner dan of gelijk aan de standaardwaarde en kleiner dan of gelijk aan de maximumwaarde zijn. |
| SCH-MOD-01-01-F22 | Oefening instellingen | De maximale waarde voor het aantal oefeningen | MaximumQuestionCount | Exercises.ModuleConfigurationJsonBase64 | Directe docent-invoer | integer | Ja | Moet groter dan of gelijk aan de standaardwaarde en minimumwaarde zijn; mag het platformmaximum 100 niet overschrijden. |
| SCH-MOD-01-01-RAD07 | Oefening instellingen | Is de “Geen idee” knop beschikbaar? | AllowMarkAsDunno | Exercises.ModuleConfigurationJsonBase64 | Directe docentkeuze | boolean | Ja | Werkt door in de leerlingweergave; markering telt functioneel als fout maar blijft herkenbaar in resultaten. |
| SCH-MOD-01-01-RAD08 | Oefening instellingen | Toon antwoord direct na vraag? | ShowAnswerAfterSubmit | Exercises.ModuleConfigurationJsonBase64 | Directe docentkeuze | boolean | Ja | Bij true toont de module feedback vóór de volgende vraag; bij false wordt feedback pas via resultaatcontext zichtbaar. |
| SCH-MOD-01-01-B02 | Onderzijde | Opslaan en toevoegen | SaveAndAddExerciseButton | Exercises, TeacherLevelCategoryExercises, ExerciseHistory | Centrale opslagactie met modulevalidatie | command | Ja | Nieuwe oefening wordt opgeslagen, gekoppeld aan de huidige categoriecontext en start in status In onderhoud. |
4.1.6 Leegstaten, foutstaten en disabled states
| Situatie | Gedrag |
|---|---|
| Geen actieve modulebeschikbaarheid | De module mag niet in de generieke modulekeuze verschijnen voor reguliere docenten wanneer ExerciseModules.IsActive = false, tenzij de gebruiker via testcontext toegang heeft op basis van IsVisibleForTesting. |
| Geen bewerkrecht op niveau/categorie | De configuratie mag niet worden opgeslagen; server-side controle blokkeert de actie ook wanneer de frontendknop zichtbaar zou zijn. |
| Niet-actieve invoermodus | De niet-geselecteerde min/max- of exacte-waardenmodus wordt visueel gedimd en server-side genegeerd. |
OperationMode = AdditionOnly | Aftrekconfiguratie en balansvelden zijn functioneel niet actief en mogen niet als vereiste configuratie meetellen. |
OperationMode = SubtractionOnly | Optelconfiguratie en balansvelden zijn functioneel niet actief en mogen niet als vereiste configuratie meetellen. |
OperationMode = Both | Optelconfiguratie, aftrekconfiguratie en balansvalidatie zijn actief. |
| Geen genereerbare vragen | Opslaan wordt server-side geweigerd met een functionele foutmelding, omdat de combinatie van bereiken, exacte waarden en uitkomstgrenzen geen geldige vraag oplevert. |
| Ongeldige aantallen | Opslaan wordt geweigerd wanneer minimum, standaard en maximum niet logisch oplopen of wanneer het maximum boven het platformmaximum ligt. |
| Terug naar overzicht | De view sluit zonder opslag; onopgeslagen wijzigingen worden niet als configuratiepayload bewaard. |
4.2 Leerlingweergave
4.2.1 Schermafbeelding

De onderstaande schermafbeeldingen tonen alternatieve states van dezelfde leerlingweergave. Zij worden niet als aparte schermroutes behandeld, maar als states binnen dezelfde runtimeview.
State correct antwoord

State fout antwoord

4.2.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-MOD-01-02 |
| Schermnaam | Oefening uitvoeren — Optellen & Aftrekken (simpel) |
| Doelgroep / onderdeel | Leerling / technische oefenmodule |
| Bronbestand | oefenhub_leerling_module_optellen_en_aftrekken_simpel_v4_1.html |
| Screenshotbestand | oefenhub_leerling_module_optellen_en_aftrekken_simpel_v4_1.png |
| Processtap / context | Leerling maakt een gegenereerde ExerciseRun op basis van een concrete oefening die deze module gebruikt. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification, database-informatie en ondersteunende modulearchitectuur. |
| Opmerkingen | Correcte en foutieve feedback zijn runtime-states binnen dezelfde view. De omliggende navigatie, header, eventuele berichtenteller en footer vallen buiten deze modulebeschrijving. |
| Route / URL-patroon | Functioneel geopend vanuit de oefening-startpagina via Start nieuwe of Verder gaan. |
| Autorisatie / vereiste rol-context | Actieve leerlingcontext met server-side toegang tot niveau, categorie en oefening. |
| Primair domeinobject / hoofdentiteit | ExerciseRuns met ExerciseRunProgress, gekoppeld aan Exercises en het gebruikte ExerciseModules-record. |
| Gerelateerde schermen / navigatie | Oefening-startpagina, resultatenpopup, geschiedenis, delen, live meekijken. |
| Data-karakter | Runtimevraag, leerlingantwoord, feedbackstate en voortgang op basis van run- en progressiepayloads. |
Aanvullende state-referenties
| Referentie | Scherm-ID | Schermnaam | Bronbestand | Screenshotbestand |
|---|---|---|---|---|
| Correct antwoord | SCH-MOD-01-03 | Oefening uitvoeren — Optellen & Aftrekken (simpel) — state correct | oefenhub_leerling_module_optellen_en_aftrekken_simpel_goed_v1_1.html | oefenhub_leerling_module_optellen_en_aftrekken_simpel_goed_v1_1.png |
| Fout antwoord | SCH-MOD-01-04 | Oefening uitvoeren — Optellen & Aftrekken (simpel) — state fout | oefenhub_leerling_module_optellen_en_aftrekken_simpel_fout_v1_4.html | oefenhub_leerling_module_optellen_en_aftrekken_simpel_fout_v1_4.png |
4.2.3 Functionele beschrijving
De leerlingweergave toont één vraag tegelijk binnen de generieke oefenplayer. In de default state wordt een som getoond met twee operanden, een operator en een antwoordinvoer. De zichtbare mockupwaarde 17 + 9 = ? is gegenereerde voorbeelddata. In productie worden operandwaarden, operator en correcte uitkomst bepaald door de module op basis van de opgeslagen configuratiepayload van de concrete oefening.
De leerling vult het antwoord in en kiest Volgende vraag. Bij die actie wordt het antwoord server-side verwerkt. De module interpreteert de invoer, bepaalt of het antwoord correct is en levert de bijgewerkte vraagstate terug. De generieke engine schrijft de voortgang weg in ExerciseRunProgress, werkt uniforme totalen op ExerciseRuns bij en bepaalt of de volgende vraag of de afrondingsflow wordt getoond.
Wanneer ShowAnswerAfterSubmit = true, kan de module direct na beantwoording een feedbackstate tonen. De state correct antwoord toont het gegeven antwoord groen met de tekst Goed gedaan!. De state fout antwoord toont het gegeven antwoord rood met de tekst Helaas het antwoord was niet goed. Deze feedbackstates zijn geen aparte routes en geen aparte oefenruns; zij zijn weergavestates van dezelfde vraag binnen dezelfde run.
Wanneer ShowAnswerAfterSubmit = false, wordt na beantwoording direct doorgegaan volgens de generieke runflow en ziet de leerling de samenvattende resultaten pas in de resultaatcontext. De module moet in beide gevallen de juiste correctheidswaarde en vraagstate aan de generieke engine teruggeven.
De rechterkolom is generiek en toont voortgangsinformatie: de naam/context van de oefening, het aantal beantwoorde vragen, de visuele voortgangsbalk en een tip over opslag en hervatten. Deze waarden komen niet uit de module zelf, maar uit de runcontext en de generieke voortgangsberekening.
Als AllowMarkAsDunno = true, mag de generieke player of de modulecomponent een Geen idee-actie beschikbaar maken. Deze actie markeert de vraag als afgerond met IsDunno = true en telt functioneel als niet-correct antwoord, maar blijft herkenbaar in resultaten en analyse.
4.2.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-MOD-01-02-S01 | S | Pagina | Hoofdcontainer voor de leerling-oefenweergave. | Oefening | Generieke playercontainer met modulespecifieke vraagrendering. | StudentExerciseView |
| SCH-MOD-01-02-S02 | S | Linker kaart | Visuele vraagzone. | Oefening | Module-rendering binnen generieke player. | QuestionCard |
| SCH-MOD-01-02-F01 | F | Vraagzone | Eerste operand van de som. | 17 | Door module gegenereerde voorbeeldwaarde. | OperandA |
| SCH-MOD-01-02-F02 | F | Vraagzone | Operator van de som. | + | Door module gegenereerd op basis van OperationMode. | Operator |
| SCH-MOD-01-02-F03 | F | Vraagzone | Tweede operand van de som. | 9 | Door module gegenereerde voorbeeldwaarde. | OperandB |
| SCH-MOD-01-02-F04 | F | Vraagzone | Antwoordveld in inputstate. | ? | Invoer door leerling. | AnswerInput |
| SCH-MOD-01-02-F05 | F | Vraagzone | Antwoordweergave in feedbackstate. | 26 / 25 | Alleen zichtbaar na beantwoording wanneer feedback wordt getoond. | AnswerDisplay |
| SCH-MOD-01-02-M01 | M | Vraagzone | Feedbackmelding. | Goed gedaan! / Helaas het antwoord was niet goed | State-afhankelijk. | AnswerFeedbackMessage |
| SCH-MOD-01-02-B01 | B | Onderzijde vraagkaart | Navigatie en bevestiging van het antwoord. | Volgende vraag | Verwerkt de huidige vraag en laadt de volgende stap. | NextQuestionButton |
| SCH-MOD-01-02-B02 | B | Onderzijde vraagkaart | Optionele markering dat de leerling het antwoord niet weet. | Geen idee | Alleen beschikbaar wanneer AllowMarkAsDunno = true. | MarkAsDunnoButton |
| SCH-MOD-01-02-S03 | S | Rechter paneel | Voortgangspaneel. | Jouw voortgang | Generieke playerinformatie. | ProgressSidePanel |
| SCH-MOD-01-02-F06 | F | Rechter paneel | Naam of context van de oefening. | Subcategorie / Optellen tot en met 50 | Afkomstig uit oefening en runcontext. | ExerciseContextName |
| SCH-MOD-01-02-F07 | F | Rechter paneel | Tekstuele voortgang. | 1 van de 15 vragen beantwoord | Afgeleid uit runvoortgang. | ProgressText |
| SCH-MOD-01-02-F08 | F | Rechter paneel | Visuele voortgangsbalk. | voortgangsbalk | Percentage afgeleid uit beantwoorde vragen. | ProgressBar |
| SCH-MOD-01-02-M02 | M | Rechter paneel | Tip over opslaan en hervatten. | Je antwoord wordt opgeslagen zodra je naar de volgende vraag gaat. | Generieke playertekst; moet overeenkomen met server-side gedrag. | SaveAndResumeTip |
4.2.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-MOD-01-02-F01 | Vraagzone | 17 | OperandA | ExerciseRunProgress.QuestionStateJsonBase64 en/of ExerciseRuns.QuestionDataJsonBase64 | Door module gegenereerde vraagdata op basis van Exercises.ModuleConfigurationJsonBase64 | integer | Nee | Waarde moet voldoen aan de opgeslagen moduleconfiguratie en gekozen operation mode. |
| SCH-MOD-01-02-F02 | Vraagzone | + | Operator | ExerciseRunProgress.QuestionStateJsonBase64 | Door module gegenereerde vraagdata | enum/string | Nee | Operator moet + of - zijn en passen binnen OperationMode. |
| SCH-MOD-01-02-F03 | Vraagzone | 9 | OperandB | ExerciseRunProgress.QuestionStateJsonBase64 en/of ExerciseRuns.QuestionDataJsonBase64 | Door module gegenereerde vraagdata op basis van configuratie | integer | Nee | Waarde moet voldoen aan de opgeslagen moduleconfiguratie. |
| SCH-MOD-01-02-F04 | Vraagzone | ? | AnswerInput | Tijdelijke UI-state tot bevestiging; daarna ExerciseRunProgress.QuestionStateJsonBase64 | Directe leerlinginvoer | string / integer | Ja | Moet door de module als numeriek antwoord kunnen worden geïnterpreteerd. |
| SCH-MOD-01-02-F05 | Vraagzone | 26 / 25 | AnswerDisplay | ExerciseRunProgress.QuestionStateJsonBase64 | Bevestigde leerlingwaarde na verwerking | string / integer | Nee na bevestiging | Weergave volgt de opgeslagen antwoordstate. |
| SCH-MOD-01-02-M01 | Vraagzone | Goed gedaan! / Helaas het antwoord was niet goed | AnswerFeedbackMessage | Geen zelfstandige persistente bron | Modulevalidatie-resultaat + vaste modulefeedbacktekst | informatiemelding | Nee | Alleen zichtbaar wanneer directe feedback actief is of wanneer de huidige state feedback moet tonen. |
| SCH-MOD-01-02-B01 | Vraagkaart | Volgende vraag | NextQuestionButton | ExerciseRuns, ExerciseRunProgress | Command op huidige vraagstate | action | Ja | Bij klik verwerkt de server het antwoord, zet AnsweredAtUtc, IsCorrect en IsCompleted op vraagniveau en werkt runtotalen bij. |
| SCH-MOD-01-02-B02 | Vraagkaart | Geen idee | MarkAsDunnoButton | ExerciseRunProgress.IsDunno, ExerciseRuns.DunnoCount | Command op huidige vraagstate | action | Ja | Alleen beschikbaar bij AllowMarkAsDunno = true; vraag wordt afgerond met IsDunno = true. |
| SCH-MOD-01-02-F06 | Rechter paneel | Optellen tot en met 50 | ExerciseContextName | Exercises en runcontextsnapshot | Naam/context van de concrete oefening | string | Nee | Historische runcontext blijft leidend, ook als oefening later wordt hernoemd. |
| SCH-MOD-01-02-F07 | Rechter paneel | 1 van de 15 vragen beantwoord | ProgressText | ExerciseRuns.CompletedQuestionCount, ExerciseRuns.TotalQuestions | Afgeleide runvoortgang | samengestelde tekst | Nee | Moet synchroon blijven met server-side voortgang. |
| SCH-MOD-01-02-F08 | Rechter paneel | voortgangsbalk | ProgressBar | ExerciseRuns.CompletedQuestionCount, ExerciseRuns.TotalQuestions | Afgeleid percentage uit voortgang | percentage | Nee | Waarde = afgeronde vragen gedeeld door totaal aantal vragen. |
| SCH-MOD-01-02-M02 | Rechter paneel | Tip | SaveAndResumeTip | Geen zelfstandige persistente bron | Generieke playertekst | informatiemelding | Nee | Tekst mag alleen getoond worden wanneer server-side hervatten daadwerkelijk wordt ondersteund. |
4.2.6 Runtime-states
| State | Voorwaarde | Zichtbare gevolgen | Opslaggevolg |
|---|---|---|---|
| Inputstate | Vraag is getoond en nog niet bevestigd. | Antwoordveld toont ?; feedback ontbreekt. | FirstShownAtUtc is gevuld of wordt bij eerste tonen gevuld. |
| Correcte feedbackstate | Antwoord is bevestigd, modulevalidatie is correct en directe feedback is actief. | Gegeven antwoord wordt positief weergegeven met Goed gedaan!. | IsCorrect = true, IsCompleted = true, AnsweredAtUtc gevuld. |
| Foutieve feedbackstate | Antwoord is bevestigd, modulevalidatie is fout en directe feedback is actief. | Gegeven antwoord wordt negatief weergegeven met Helaas het antwoord was niet goed. | IsCorrect = false, IsCompleted = true, AnsweredAtUtc gevuld. |
| Geen-idee-state | Leerling gebruikt Geen idee. | Vraag wordt afgerond zonder correct antwoord; label of resultaatmarkering blijft herkenbaar. | IsDunno = true, IsCorrect = false, IsCompleted = true. |
| Volgende-vraagstate | Huidige vraag is verwerkt en er bestaat een volgende vraag. | Volgende vraag wordt geladen; voortgang wordt verhoogd. | Run- en progressietotalen zijn bijgewerkt. |
| Afrondingsstate | Laatste vraag is verwerkt. | Generieke resultatenflow wordt geopend. | ExerciseRuns.IsCompleted = true, CompletedAtUtc gevuld en definitieve statistieken berekend. |
| Hervatstate | Leerling verlaat de pagina vóór afronding en keert terug via Verder gaan. | Eerstvolgende open vraag of huidige niet-afgeronde vraag wordt opnieuw getoond. | Run blijft IsCompleted = false; progressie blijft server-side beschikbaar. |