UC-DOC-OEF-004 - Oefening configureren
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-OEF-004 |
| Naam | Oefening configureren |
| Domein | Docent |
| Subdomein | Oefeningen configureren en testen |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem, technische module-interface |
| Rolcontext | Docentcontext met bewerkrechten binnen het geselecteerde niveau |
| Betrokken schermen | Docent - Nieuwe oefening, moduleconfiguratie, oefeningconfiguratieformulier |
| Gerelateerde usecases | UC-DOC-OEF-002, UC-DOC-OEF-003, UC-DOC-OEF-005, UC-DOC-OEF-006, UC-DOC-OEF-008 |
| Primaire entiteiten | Exercises, ExerciseModules, LevelCategories, Categories |
| Secundaire entiteiten / events | ModuleConfigurationJsonBase64, ExerciseHistory, LevelCollaborators, module-specifieke configuratie-DTO |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een docent na selectie van een technische module de nieuwe concrete oefening configureert. De docent vult generieke oefeninggegevens in, zoals naam en icoon, en daarnaast de module-specifieke configuratievelden die door de gekozen technische module worden aangeboden.
De technische module levert de configuratiecomponent en de lokale modulevalidatie. OefenHub blijft verantwoordelijk voor de generieke contextcontrole, centrale opslag, auditregistratie en de status van de concrete oefening.
Bij succesvolle opslag ontstaat een nieuw Exercises-record met een verwijzing naar precies één ExerciseModules-record. De nieuwe oefening staat standaard In onderhoud, zodat de oefening niet direct zichtbaar of startbaar wordt voor leerlingen voordat de docent deze bewust activeert.
3. Scope
3.1 Binnen scope
- Openen van de modulespecifieke configuratie na geldige modulekeuze.
- Invullen van generieke oefeninggegevens zoals naam en icoon.
- Invullen van module-specifieke configuratievelden.
- Uitvoeren van generieke en modulespecifieke validatie.
- Opslaan van een nieuw Exercises-record.
- Opslaan van de moduleconfiguratie als JSON/base64-payload.
- Vastleggen van aanmaak en configuratie in ExerciseHistory.
- Standaard plaatsen van de nieuwe oefening in status In onderhoud.
- Veilig afhandelen van annuleren, validatiefouten en verouderde context.
3.2 Buiten scope
- Technische module selecteren.
- Bestaande oefening bewerken.
- Oefening activeren voor leerlingen.
- Oefening testen als docent.
- Modulemigratie of wijziging van ExerciseModules.
- Technische modules centraal beheren of migreren.
- Leerlingresultaten bekijken of wijzigen.
- Niveau-autorisaties aan leerlingen toekennen of intrekken.
- Relatie-uitnodigingen, docent-leerlingrelaties of docent-docentrelaties aanmaken.
- Account-, profiel- of toegankelijkheidsinstellingen wijzigen.
- Systeemnotificaties beheren of tonen.
- Beheerderondersteuning of centrale modulebeheerflows uitvoeren.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De docent is ingelogd. |
| PRE-002 | De gebruiker heeft een actieve docentrol. |
| PRE-003 | Er is een geldige docentcontext bepaald. |
| PRE-004 | Er is een geldig niveau geselecteerd. |
| PRE-005 | De docent is eigenaar van het niveau of actieve collaborator met passende bewerkrechten. |
| PRE-006 | Er is een categoriecontext beschikbaar binnen het geselecteerde niveau. |
| PRE-007 | De nieuwe-oefening-flow is geldig gestart. |
| PRE-008 | Er is precies één technische module geselecteerd. |
| PRE-009 | De gekozen technische module is nog actief en selecteerbaar. |
| PRE-010 | De module-interface kan een configuratiecomponent en validatie aanbieden. |
| PRE-011 | De docent heeft bewerkrechten binnen het niveau en de categoriecontext. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Er is een nieuwe concrete oefening opgeslagen wanneer alle validatie slaagt. |
| POST-002 | De oefening verwijst naar precies één ExerciseModules-record. |
| POST-003 | De moduleconfiguratie is opgeslagen als JSON/base64-payload. |
| POST-004 | De nieuwe oefening staat standaard In onderhoud, oftewel IsActive = false. |
| POST-005 | Aanmaak en configuratie zijn auditbaar vastgelegd in ExerciseHistory. |
| POST-006 | Leerlingen zien of starten de oefening nog niet zolang deze In onderhoud staat. |
| POST-007 | Bij annuleren of validatiefout is geen half bruikbare oefening ontstaan. |
6. Trigger
De docent heeft in UC-DOC-OEF-003 een technische module gekozen en gaat verder naar de configuratie van de nieuwe oefening.
De docent kiest Opslaan nadat de generieke en modulespecifieke configuratievelden zijn ingevuld.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Systeem | Configuratieflow | Laadt aanmaakcontext | Context wordt opnieuw server-side gecontroleerd | LevelId, CategoryId, ExerciseModuleId |
| 2 | Systeem | Backend | Controleert docentrol en bewerkrechten | Alleen bevoegde docent mag configureren | UserRoles, LevelCollaborators |
| 3 | Systeem | Backend | Controleert modulekeuze | Module moet nog actief en selecteerbaar zijn | ExerciseModules.IsActive |
| 4 | Systeem | Module-interface | Vraagt configuratiecomponent op | Module levert invoervelden en lokale validatiecontext | GetModuleConfigureComponent |
| 5 | Docent | Configuratieformulier | Vult naam, icoon en configuratie in | Frontend bewaart invoer tijdelijk | Naam, IconKey, modulevelden |
| 6 | Docent | Configuratieformulier | Kiest Opslaan | Frontend verstuurt generieke en module-specifieke invoer | Formulierdata |
| 7 | Systeem | Backend | Valideert generieke gegevens | Naam, icoon, context en rechten worden gecontroleerd | Generieke validatie |
| 8 | Systeem | Module-interface | Valideert moduleconfiguratie | Module geeft geldige configuratie-DTO of fout terug | Modulespecifieke validatie |
| 9 | Systeem | Backend | Serialiseert configuratie | Configuratie wordt veilig opgeslagen als JSON/base64 | ModuleConfigurationJsonBase64 |
| 10 | Systeem | Database | Maakt oefening aan | Exercises-record ontstaat met IsActive = false | Exercises |
| 11 | Systeem | Database | Legt historie vast | Aanmaak en configuratie worden auditbaar | ExerciseHistory CREATE |
| 12 | Systeem | Frontend | Toont resultaat | Docent keert terug naar oefeningoverzicht of detail | Nieuwe oefening In onderhoud |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | Aanmaakcontext ontbreekt of is verlopen | Leid terug naar oefeningoverzicht of modulekeuze | Routeguard | Geen |
| ALT-002 | 2 | Docent heeft geen bewerkrechten meer | Blokkeer opslag | Toegangafhandeling | Geen |
| ALT-003 | 3 | Module is intussen inactief gemaakt | Blokkeer opslag en toon dat de module niet meer beschikbaar is | Inline melding | Geen |
| ALT-004 | 4 | Configuratiecomponent kan niet worden geladen | Blokkeer configuratie en log technisch | Generieke foutafhandeling | Geen |
| ALT-005 | 6 | Docent annuleert vóór opslag | Keer terug zonder oefening aan te maken | Geen popup | Geen |
| ALT-006 | 7 | Generieke validatie faalt | Toon veldgerichte validatie | Inline validatie | Geen |
| ALT-007 | 8 | Modulespecifieke validatie faalt | Toon modulevalidatie bij de relevante velden | Inline validatie | Geen |
| ALT-008 | 10 | Opslag faalt transactioneel | Rollback; geen half bruikbare oefening | Generieke foutafhandeling | Geen blijvende mutatie |
| ALT-009 | 11 | Historie kan niet worden vastgelegd | Opslag wordt niet als succesvol beschouwd wanneer audit vereist is | Generieke foutafhandeling | Rollback |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een concrete oefening kan pas ontstaan na geldige modulekeuze en geldige configuratie. |
| BR-002 | Een concrete oefening verwijst naar precies één ExerciseModules-record. |
| BR-003 | De module-specifieke configuratie wordt generiek opgeslagen als JSON/base64-payload. |
| BR-004 | De module is verantwoordelijk voor module-specifieke invoer en lokale validatie. |
| BR-005 | OefenHub is verantwoordelijk voor contextcontrole, opslag en audit. |
| BR-006 | Nieuwe oefeningen krijgen standaard IsActive = false. |
| BR-007 | Een oefening In onderhoud is niet zichtbaar of startbaar voor leerlingen. |
| BR-008 | Naam en icoon horen bij de concrete docent-oefening en zijn geen centrale module-eigenschappen. |
| BR-009 | Opslaan moet transactioneel zijn; er mag geen half bruikbare oefening ontstaan. |
| BR-010 | Aanmaak en configuratie moeten auditbaar zijn via ExerciseHistory. |
| BR-011 | Configureren wijzigt geen leerlingautorisaties. |
| BR-012 | Configureren maakt geen systeembericht of privébericht aan. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| LevelId | Moet bestaan en toegankelijk zijn voor de docentcontext. |
| CategoryId | Moet actief gekoppeld zijn aan het geselecteerde niveau. |
| ExerciseModuleId | Moet verwijzen naar een actieve en selecteerbare technische module. |
| Name | Verplicht, niet leeg en passend binnen de later vastgestelde lengtebegrenzing. |
| IconKey | Moet verwijzen naar een toegestane oefeningicoonkeuze. |
| ModuleConfigurationJsonBase64 | Moet voortkomen uit een door de module gevalideerde configuratie-DTO. |
| IsActive | Wordt bij nieuwe oefening standaard false gezet. |
| CreatedByUserId | Komt uit de server-side docentcontext. |
| CreatedAtUtc | Wordt server-side in UTC gezet. |
| ExerciseHistory.ActionType | Bevat minimaal CREATE en waar relevant UPDATE_CONFIGURATION. |
| Clientstate | Mag geen autorisatie of modulebeschikbaarheid bepalen. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 1 | Read | Levels / LevelCategories | Aanmaakcontext wordt gelezen en gecontroleerd. |
| 2 | Read | UserRoles / LevelCollaborators | Docentrechten worden gecontroleerd. |
| 3 | Read | ExerciseModules | Modulebeschikbaarheid wordt opnieuw gevalideerd. |
| 8 | Read | Module-interface | Modulespecifieke validatie wordt uitgevoerd. |
| 9 | Transform | ModuleConfigurationJsonBase64 | Configuratie-DTO wordt opgeslagen als JSON/base64. |
| 10 | Create | Exercises | Nieuwe oefening wordt aangemaakt met IsActive = false. |
| 11 | Create | ExerciseHistory | Aanmaak en configuratie worden auditbaar vastgelegd. |
| 12 | Event | ExerciseConfigured | Domeinevent voor readmodelverversing en auditafleiding. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| LevelCategories | De categoriecontext wordt niet gewijzigd. |
| Categories | Centrale categorie-identiteit wordt niet gewijzigd. |
| Levels | Niveaugegevens blijven ongewijzigd. |
| StudentAuthorizations | Deze usecase wijzigt geen leerlingtoegang. |
| ExerciseRuns | Deze usecase start of wijzigt geen leerlingrun. |
| ExerciseRunProgress | Er wordt geen leerlingvoortgang aangepast. |
| SystemMessages | Er worden geen systeemberichten aangemaakt. |
| PrivateMessages | Er worden geen privéberichten aangemaakt. |
| RelationshipInvitations | Relatievorming blijft buiten scope. |
| ExerciseModules | Technische modules worden alleen gelezen, niet gewijzigd. |
13. State diagram
Voor de concrete oefening ontstaat bij opslag de eerste status: In onderhoud. Dit is functioneel gelijk aan IsActive = false.
De usecase bevat daarom een beperkt state diagram voor de oefeningstatus vanaf aanmaak. De activering zelf hoort bij UC- DOC-OEF-006.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Nieuwe oefening configureren
16.2 Validatie faalt
16.3 Transactionele opslag faalt
17. Popupverwijzingen
| PopupKey | Moment | Toelichting |
|---|---|---|
| Niet van toepassing | Deze usecase gebruikt geen domeinspecifieke popup. | Routeguard-, inline validatie- of componentafhandeling volstaat. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Een docent configureert een concrete oefening binnen niveau en categorie. |
| Functioneel Ontwerp | Nieuwe oefening is standaard In onderhoud. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Module-specifieke configuratie en validatie komen uit de technische module. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Opslag van configuratie gebeurt generiek als JSON/base64. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Aanmaak en configuratie worden auditbaar via ExerciseHistory. |
| Software Requirements Specification | Het systeem moet half opgeslagen oefeningen voorkomen. |
| Database | Exercises bevat moduleverwijzing, configuratiepayload, IsActive en auditvelden. |
| Oefenmodules | Moduleplatform en contract beschrijft het generieke modulecontract; Optellen & Aftrekken (simpel) is de eerste concrete module-uitwerking voor configuratie, states en payloads. |
19. SRS-trace
Deze usecase bevat geen normatieve requirementtekst. De centrale eis en acceptatiecriteria staan in de SRS; onderstaande tabel koppelt de usecase-afleiding alleen aan centrale SRS-*- en AC-*-items.
| Usecase-afleiding | Dekt | Usecasecontext |
|---|---|---|
REQ-UC-DOC-OEF-004-001 | SRS-AUTH-001 SRS-LRN-009 SRS-TCH-002 AC-AUTH-001 AC-LRN-009 AC-TCH-002 | Alleen bevoegde docenten toestaan een oefening te configureren |
REQ-UC-DOC-OEF-004-002 | SRS-AUTH-001 SRS-CAT-001 SRS-TCH-002 SRS-MOD-003 AC-AUTH-001 AC-CAT-001 AC-TCH-002 AC-MOD-003 | De niveau-, categorie- en modulecontext server-side valideren |
REQ-UC-DOC-OEF-004-003 | SRS-LRN-009 SRS-TCH-002 SRS-NFR-AUD-001 AC-LRN-009 AC-TCH-002 AC-NFR-AUD-001 | Generieke oefeninggegevens kunnen vastleggen |
REQ-UC-DOC-OEF-004-004 | SRS-TCH-001 SRS-MOD-003 AC-TCH-001 AC-MOD-003 | Module-specifieke configuratie via de gekozen technische module laten valideren |
REQ-UC-DOC-OEF-004-005 | SRS-TCH-001 SRS-MOD-003 AC-TCH-001 AC-MOD-003 | De moduleconfiguratie als JSON/base64-payload opslaan |
REQ-UC-DOC-OEF-004-006 | SRS-LRN-009 SRS-TCH-002 AC-LRN-009 AC-TCH-002 | Een nieuwe oefening standaard met IsActive = false opslaan |
REQ-UC-DOC-OEF-004-007 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Aanmaak en configuratie in ExerciseHistory vastleggen |
REQ-UC-DOC-OEF-004-008 | SRS-LRN-009 SRS-TCH-002 SRS-NFR-AVL-001 AC-LRN-009 AC-TCH-002 AC-NFR-AVL-001 | Voorkomen dat annuleren of foutafhandeling half bruikbare oefeningen oplevert |
REQ-UC-DOC-OEF-004-009 | SRS-AUTH-001 SRS-LRN-009 SRS-TCH-001 AC-AUTH-001 AC-LRN-009 AC-TCH-001 | Door configureren geen leerlingautorisaties wijzigen |
REQ-UC-DOC-OEF-004-010 | SRS-MSG-001 SRS-TCH-001 SRS-POP-002 AC-MSG-001 AC-TCH-001 AC-POP-002 | Door configureren geen berichten of systeemnotificaties aanmaken |
REQ-UC-DOC-OEF-004-011 | SRS-AUTH-001 SRS-TCH-001 SRS-MOD-003 AC-AUTH-001 AC-TCH-001 AC-MOD-003 | Een niet meer beschikbare module bij opslag opnieuw blokkeren |
REQ-UC-DOC-OEF-004-012 | SRS-TCH-001 SRS-MOD-003 AC-TCH-001 AC-MOD-003 | Veld- en modulevalidatiefouten zonder datamutatie tonen |