UC-DOC-OEF-006 - Oefening activeren of in onderhoud zetten
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-OEF-006 |
| Naam | Oefening activeren of in onderhoud zetten |
| Domein | Docent |
| Subdomein | Oefeningen configureren en testen |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem |
| Rolcontext | Docentcontext met bewerkrechten binnen het geselecteerde niveau |
| Betrokken schermen | Docent - Oefeningoverzicht, oefeningdetail, statusactie |
| Gerelateerde usecases | UC-DOC-OEF-001, UC-DOC-OEF-004, UC-DOC-OEF-005, UC-DOC-OEF-008, UC-LLN-TOEG-002, UC-LLN-TOEG-003 |
| Primaire entiteiten | Exercises, ExerciseHistory |
| Secundaire entiteiten / events | Levels, LevelCategories, Categories, ExerciseModules, LevelCollaborators, leerlingtoegang-readmodels |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een docent de gebruiksstatus van een concrete oefening wijzigt tussen In onderhoud en Actief. De status wordt functioneel gedragen door Exercises.IsActive.
Een oefening In onderhoud is niet zichtbaar of startbaar voor leerlingen. Een actieve oefening kan beschikbaar worden voor leerlingen wanneer ook de niveau-, categorie- en autorisatiecontext geldig is.
De usecase wijzigt alleen de status van de concrete oefening. Zij kent geen leerlingen toe, maakt geen nieuwe categorie aan en wijzigt geen technische module of moduleconfiguratie.
3. Scope
3.1 Binnen scope
- Tonen van de actuele status van een concrete oefening.
- Activeren van een oefening vanuit In onderhoud.
- In onderhoud zetten van een actieve oefening.
- Server-side controleren van docentrol, context en bewerkrechten.
- Controleren of de oefening voldoende geldig geconfigureerd is om te activeren.
- Bijwerken van Exercises.IsActive.
- Vastleggen van statuswijziging in ExerciseHistory.
- Afleiden van gevolgen voor leerlingzichtbaarheid zonder leerlingautorisaties te wijzigen.
3.2 Buiten scope
- Oefeninginhoud of configuratie bewerken.
- Nieuwe oefening aanmaken.
- Technische module beschikbaarheid beheren.
- Niveauautorisaties aan leerlingen wijzigen.
- Categorie-actiefstatus handmatig beheren.
- Bestaande afgeronde runs of geschiedenis wijzigen.
- 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 oefening bestaat binnen de geselecteerde niveau- en categoriecontext. |
| PRE-008 | De docent heeft bewerkrechten voor statusbeheer. |
| PRE-009 | De actuele status van de oefening is bekend. |
| PRE-010 | Bij activeren is de oefening voldoende geconfigureerd volgens generieke en modulespecifieke regels. |
| PRE-011 | De gekoppelde technische module is beschikbaar voor normale inzet wanneer activeren wordt gekozen. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De oefeningstatus is gewijzigd wanneer alle controles slagen. |
| POST-002 | Exercises.IsActive geeft de actuele status weer. |
| POST-003 | De statuswijziging is vastgelegd in ExerciseHistory. |
| POST-004 | Leerlingzichtbaarheid wordt afgeleid uit de nieuwe status en bestaande toegangsregels. |
| POST-005 | Bestaande afgeronde runs en geschiedenis zijn niet gewijzigd. |
| POST-006 | Bij blokkade of annuleren blijft de oude status behouden. |
6. Trigger
De docent kiest in een oefeningoverzicht of oefeningdetail voor Activeren of Zet in onderhoud.
De trigger kan ook ontstaan na succesvolle configuratie, wanneer de docent de oefening bewust beschikbaar wil maken voor leerlingen.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Oefeningdetail | Kiest statusactie | Frontend verstuurt gewenste statuswijziging | ExerciseId, gewenste status |
| 2 | Systeem | Backend | Controleert docentrol en context | Alleen bevoegde docent mag verder | UserRoles, Levels |
| 3 | Systeem | Backend | Controleert oefeningcontext | Oefening moet bij niveau en categorie horen | Exercises, LevelCategories |
| 4 | Systeem | Backend | Controleert bewerkrechten | Eigenaar of collaborator met statusrecht mag verder | LevelCollaborators |
| 5 | Systeem | Backend | Leest actuele status | Systeem bepaalt of wijziging zinvol is | Exercises.IsActive |
| 6 | Systeem | Backend | Controleert activeringsvoorwaarden | Bij activeren moet oefening geldig configureerbaar zijn | Configuratie, modulebeschikbaarheid |
| 7 | Systeem | Database | Wijzigt status | IsActive wordt aangepast | Exercises |
| 8 | Systeem | Database | Legt historie vast | Statuswijziging wordt auditbaar | ExerciseHistory UPDATE_STATUS |
| 9 | Systeem | Frontend | Ververst overzicht | Docent ziet nieuwe status | Statuslabel |
| 10 | Systeem | Readmodel | Leidt leerlingzichtbaarheid af | Beschikbaarheid volgt uit status en toegangscontext | Geen aparte handmatige categorie-status |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Geen actieve docentrol | Blokkeer statusactie | Routeguard | Geen |
| ALT-002 | 3 | Oefening bestaat niet of hoort niet bij context | Toon niet-beschikbaarafhandeling | Inline melding | Geen |
| ALT-003 | 4 | Geen statusbeheerrechten | Blokkeer actie | Toegangafhandeling | Geen |
| ALT-004 | 5 | Gewenste status is gelijk aan actuele status | Geen wijziging nodig | Geen popup | Geen |
| ALT-005 | 6 | Oefening is niet geldig configureerbaar | Blokkeer activeren en verwijs naar bewerken | Inline melding | Geen |
| ALT-006 | 6 | Gekoppelde technische module is niet beschikbaar | Blokkeer activeren | Inline melding | Geen |
| ALT-007 | 7 | Opslag faalt | Rollback en toon generieke fout | Generieke foutafhandeling | Geen blijvende mutatie |
| ALT-008 | 8 | Historie kan niet worden vastgelegd | Statuswijziging wordt niet als succesvol beschouwd wanneer audit vereist is | Generieke foutafhandeling | Rollback |
| ALT-009 | 10 | Activeren levert nog geen zichtbare leerlingcategorie op | Systeem toont geen extra actie; zichtbaarheid volgt uit totale context | Niet van toepassing | Geen extra mutatie |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Nieuwe oefeningen starten standaard In onderhoud. |
| BR-002 | Alleen IsActive bepaalt de concrete oefeningstatus Actief/In onderhoud. |
| BR-003 | Een oefening In onderhoud is niet zichtbaar of startbaar voor leerlingen. |
| BR-004 | Een actieve oefening is alleen voor leerlingen beschikbaar wanneer ook niveau-, categorie- en autorisatiecontext geldig zijn. |
| BR-005 | Activeren vereist dat de oefening geldig geconfigureerd is. |
| BR-006 | Activeren vereist een beschikbare technische module voor normale inzet. |
| BR-007 | In onderhoud zetten wijzigt bestaande afgeronde runs niet. |
| BR-008 | In onderhoud zetten kan voorkomen dat nieuwe runs worden gestart, maar wist geen geschiedenis. |
| BR-009 | Statuswijzigingen worden auditbaar vastgelegd in ExerciseHistory. |
| BR-010 | Categoriezichtbaarheid voor leerlingen wordt afgeleid uit actieve oefeningen binnen context en niet handmatig in deze usecase gezet. |
| BR-011 | Statusbeheer wijzigt geen leerlingautorisaties. |
| BR-012 | Statusbeheer verstuurt geen systeemberichten naar leerlingen binnen de huidige scope. |
| BR-013 | Clientstate mag niet bepalen of een oefening activeerbaar is. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| ExerciseId | Moet bestaan en binnen de toegankelijke docentcontext vallen. |
| Gewenste status | Moet overeenkomen met Actief of In onderhoud. |
| Exercises.IsActive | Wordt server-side gelezen en gewijzigd. |
| Bewerkrechten | Moeten uit eigenaarschap of collaboratorrechten volgen. |
| ModuleConfigurationJsonBase64 | Moet aanwezig en valideerbaar zijn bij activeren. |
| ExerciseModuleId | Moet verwijzen naar een beschikbare module bij activeren. |
| LevelCategory-koppeling | Moet actief zijn om leerlingbeschikbaarheid zinvol te maken. |
| UpdatedByUserId | Komt uit server-side docentcontext. |
| UpdatedAtUtc | Wordt server-side in UTC gezet. |
| ExerciseHistory.ActionType | Moet UPDATE_STATUS gebruiken of een gelijkwaardige gesloten actiewaarde. |
| Concurrency | Verouderde statusactie moet veilig worden afgehandeld. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 2 | Read | UserRoles / Roles | Docentrol wordt gecontroleerd. |
| 3 | Read | Exercises / LevelCategories | Oefeningcontext wordt gecontroleerd. |
| 4 | Read | LevelCollaborators | Statusrechten worden gecontroleerd. |
| 6 | Read | Exercises / ExerciseModules / modulevalidatie | Activeringsvoorwaarden worden gecontroleerd. |
| 7 | Update | Exercises | IsActive, UpdatedByUserId en UpdatedAtUtc worden bijgewerkt. |
| 8 | Create | ExerciseHistory | Statuswijziging wordt auditbaar vastgelegd. |
| 10 | Event | ExerciseStatusChanged | Domeinevent voor readmodelverversing en auditafleiding. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| ModuleConfigurationJsonBase64 | Statuswijziging wijzigt de configuratie niet. |
| ExerciseModules | Module wordt niet beheerd. |
| ExerciseRuns | Bestaande runs blijven intact. |
| LevelCategories | Categoriezichtbaarheid wordt afgeleid, niet handmatig gezet. |
| Categories | Centrale categorie-identiteit blijft ongewijzigd. |
| StudentAuthorizations | Deze usecase wijzigt geen leerlingtoegang. |
| ExerciseRunProgress | Er wordt geen leerlingvoortgang aangepast. |
| SystemMessages | Er worden geen systeemberichten aangemaakt. |
| PrivateMessages | Er worden geen privéberichten aangemaakt. |
| RelationshipInvitations | Relatievorming blijft buiten scope. |
13. State diagram
Deze usecase raakt het statusgedrag van een concrete oefening. De backendwaarde is Exercises.IsActive; gebruikersgericht zijn de statussen Actief en In onderhoud.
Er is geen aparte statuslookup nodig voor deze twee waarden zolang IsActive de bron van waarheid blijft.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Oefening activeren
16.2 Oefening in onderhoud zetten
16.3 Activeren geblokkeerd
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 | Docent kan oefeningstatus wijzigen tussen Actief en In onderhoud. |
| Functioneel Ontwerp | Alleen actieve oefeningen kunnen voor leerlingen beschikbaar worden. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Exercises.IsActive blijft de technische bron van waarheid. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Activeren vraagt controle op geldige configuratie en modulebeschikbaarheid. |
| Software Requirements Specification | Statuswijzigingen moeten auditbaar worden vastgelegd. |
| Database | Geen aparte statusentiteit nodig; ExerciseHistory registreert UPDATE_STATUS. |
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-006-001 | SRS-LRN-009 SRS-TCH-002 AC-LRN-009 AC-TCH-002 | De actuele oefeningstatus tonen als Actief of In onderhoud |
REQ-UC-DOC-OEF-006-002 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Alleen bevoegde docenten statuswijzigingen laten uitvoeren |
REQ-UC-DOC-OEF-006-003 | SRS-AUTH-001 SRS-TCH-001 SRS-MOD-003 AC-AUTH-001 AC-TCH-001 AC-MOD-003 | Activeren blokkeren wanneer configuratie of module ongeldig is |
REQ-UC-DOC-OEF-006-004 | SRS-TCH-001 AC-TCH-001 | Exercises.IsActive wijzigen bij succesvolle statusactie |
REQ-UC-DOC-OEF-006-005 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Statuswijzigingen auditbaar vastleggen in ExerciseHistory |
REQ-UC-DOC-OEF-006-006 | SRS-LRN-001 SRS-TCH-002 AC-LRN-001 AC-TCH-002 | In onderhoud-oefeningen niet zichtbaar of startbaar maken voor leerlingen |
REQ-UC-DOC-OEF-006-007 | SRS-AUTH-001 SRS-RDM-001 SRS-RDM-005 SRS-LRN-005 SRS-TCH-002 AC-AUTH-001 AC-RDM-001 AC-RDM-005 AC-LRN-005 AC-TCH-002 | Bij actieve oefeningen leerlingbeschikbaarheid afleiden uit de volledige toegangscontext |
REQ-UC-DOC-OEF-006-008 | SRS-AUTH-001 SRS-LRN-009 SRS-TCH-001 AC-AUTH-001 AC-LRN-009 AC-TCH-001 | Door statuswijziging geen leerlingautorisaties wijzigen |
REQ-UC-DOC-OEF-006-009 | SRS-LRN-009 SRS-TCH-001 AC-LRN-009 AC-TCH-001 | Door statuswijziging geen historische runs of resultaten wijzigen |
REQ-UC-DOC-OEF-006-010 | SRS-TCH-001 SRS-NFR-SEC-001 AC-TCH-001 AC-NFR-SEC-001 | Dubbele statusacties zonder effectieve wijziging veilig afhandelen |
REQ-UC-DOC-OEF-006-011 | SRS-AUTH-001 SRS-AUTH-002 SRS-TCH-001 SRS-GUA-001 AC-AUTH-001 AC-AUTH-002 AC-TCH-001 AC-GUA-001 | Verouderde clientstate opnieuw server-side controleren |
REQ-UC-DOC-OEF-006-012 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Statuswijziging en historie transactioneel verwerken waar audit verplicht is |