UC-DOC-AANB-007 — Nieuwe centrale categorie aanmaken via docentflow
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-AANB-007 |
| Naam | Nieuwe centrale categorie aanmaken via docentflow |
| Domein | Docent |
| Subdomein | Oefenaanbod, niveaus en categorieën |
| Primaire actor | Docent |
| Secundaire actor(en) | OefenHub-systeem |
| Rolcontext | Docent als eigenaar of actieve collaborator met bewerkrecht |
| Betrokken schermen | Oefenaanbod; categorie toevoegen; nieuwe categorie |
| Gerelateerde usecases | UC-DOC-AANB-005, UC-DOC-AANB-006, UC-DOC-AANB-008, beheerder categoriebeheer |
| Primaire entiteiten | Categories, LevelCategories |
| Secundaire entiteiten / events | CategoryHistory, CategoryCreated, CategoryLinkedToLevel |
| Gerelateerde popups | POP-DOC-AANB-NEW-CATEGORY-WARNING, POP-DOC-AANB-CATEGORY-CREATE-FAILED |
| Popupregister | Aanvullen indien deze popupkeys nog niet bestaan |
| MoSCoW | Must |
2. Omschrijving
De docent maakt vanuit het oefenaanbod een nieuwe centrale categorie aan wanneer geen bestaande centrale categorie passend is. Omdat categorieën gedeelde centrale tags zijn, legt deze usecase nadruk op zorgvuldigheid, waarschuwing en auditbaarheid. De nieuwe categorie wordt direct gekoppeld aan het geselecteerde niveau, zodat de docent daarna oefeningen binnen die categorie kan beheren. De docent krijgt hiermee geen vrij beheer over centrale categorie-identiteit nadat de categorie in gebruik is; centrale wijzigingen na aanmaak blijven beheerderverantwoordelijkheid.
Deze usecase beschrijft de docenthandeling binnen het subdomein Oefenaanbod, niveaus en categorieën. De usecase is procesgericht en beschrijft geen pixelniveau-schermdetails. Schermdetails, exacte layout en componentvormgeving blijven bronhoudend in schermdocumentatie en mockups. Centraal categoriebeheer, migratie van categorieën en beheerdercorrecties blijven bronhoudend in de beheerderflows en ontwerpbronnen.
3. Scope
Binnen scope:
- invoeren van naam, kleur en icoon voor een nieuwe centrale categorie;
- waarschuwen dat categorieën centrale gedeelde identiteit hebben;
- server-side controleren op vereiste velden en mogelijke doublures;
- aanmaken van de centrale categorie;
- direct koppelen van de nieuwe categorie aan het geselecteerde niveau;
- vastleggen van auditinformatie en categoriehistorie;
- terugkeren naar categorieoverzicht.
Buiten scope:
- beheerdergoedkeuring als aparte workflow;
- migreren of samenvoegen van dubbele categorieën;
- hernoemen of aanpassen van bestaande centrale categorieën;
- uploaden of beheren van iconen als mediarepository;
- aanmaken van oefeningen;
- zichtbaar maken voor leerlingen zonder actieve oefening.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De actor is ingelogd met actieve docentrol. |
| PRE-002 | Er is een geselecteerd niveau binnen docentcontext. |
| PRE-003 | De docent heeft bewerkrecht op het geselecteerde niveau. |
| PRE-004 | De actie Nieuwe categorie aanmaken is beschikbaar binnen de categorie-toevoegflow. |
| PRE-005 | Naam-, kleur- en icoonkeuze kunnen server-side gevalideerd worden. |
| PRE-006 | Het systeem kan bestaande centrale categorieën controleren op exacte of functioneel relevante overlap. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Er is een nieuwe centrale categorie aangemaakt met naam, kleur en icoon. |
| POST-002 | De nieuwe categorie is gekoppeld aan het geselecteerde niveau. |
| POST-003 | De aanmaak is auditbaar vastgelegd. |
| POST-004 | De categorie verschijnt in het categorieoverzicht van het niveau. |
| POST-005 | De categorie is pas leerlingzichtbaar wanneer binnen het niveau minimaal één actieve oefening bestaat. |
| POST-006 | Er zijn geen oefeningen of leerlingautorisaties aangemaakt. |
6. Trigger
De usecase start wanneer de docent binnen het categorieoverzicht kiest voor het aanmaken van een nieuwe centrale categorie. Dit gebeurt nadat de docent geen geschikte bestaande centrale categorie kiest of nadat de docent bewust voor een nieuwe centrale categorie kiest.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Categorieoverzicht | Kiest Nieuwe categorie aanmaken. | Systeem opent de invoerflow. | LevelId blijft actieve context. |
| 2 | Systeem | Backend autorisatie | Controleert bewerkrecht op niveau. | Alleen bevoegde docent mag aanmaken via deze route. | Levels, LevelCollaborators. |
| 3 | Systeem | Waarschuwingsstap | Toont centrale-categorie waarschuwing via popupkey of component. | Docent moet bewust doorgaan. | POP-DOC-AANB-NEW-CATEGORY-WARNING. |
| 4 | Docent | Categorieformulier | Vult naam, kleur en icoon in. | Systeem houdt invoer vast tot opslaan. | Naam, kleur, icoon. |
| 5 | Docent | Categorieformulier | Slaat op. | Backend ontvangt aanvraag voor categorie plus niveaukoppeling. | Geen losse categorie zonder vervolgkoppeling in deze flow. |
| 6 | Systeem | Validatie | Controleert verplichte velden, toegestane kleur, icoonkey en naamregels. | Ongeldige invoer wordt afgewezen. | Datavalidatie. |
| 7 | Systeem | Doublurecontrole | Controleert exacte en relevante bestaande categorieën. | Bij duidelijke doublure wordt de flow geblokkeerd of vraagt systeem bestaande categorie te gebruiken. | DRY en centrale identiteit. |
| 8 | Systeem | Database transactie | Maakt Categories-record aan. | Centrale categorie wordt bronrecord. | CreatedByUserId, CreatedAtUtc. |
| 9 | Systeem | Database transactie | Koppelt nieuwe categorie aan geselecteerd niveau. | LevelCategories-record wordt aangemaakt. | CategoryId, LevelId. |
| 10 | Systeem | Audit/history | Legt categorieaanmaak en koppeling vast. | History en events zijn herleidbaar. | CategoryCreated, CategoryLinkedToLevel. |
| 11 | Systeem | Readmodel | Herbouwt categorieoverzicht. | Nieuwe categorie verschijnt in docentbeheercontext. | Leerlingzichtbaarheid blijft afgeleid. |
| 12 | Docent | Categorieoverzicht | Bekijkt nieuw gekoppelde categorie. | Docent kan doorgaan met oefeningen aanmaken. | Vervolg naar oefening-usecases. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Docent heeft geen bewerkrecht. | Systeem blokkeert de flow. | Generieke toegang-geweigerdafhandeling. | Geen. |
| ALT-002 | 3 | Docent annuleert na waarschuwing. | Systeem sluit de flow en keert terug naar categorieoverzicht. | Geen extra popup. | Geen. |
| ALT-003 | 6 | Naam ontbreekt of is ongeldig. | Systeem toont veldvalidatie en slaat niet op. | Inline validatie. | Geen. |
| ALT-004 | 6 | Kleur of icoon is ongeldig. | Systeem toont veldvalidatie en slaat niet op. | Inline validatie. | Geen. |
| ALT-005 | 7 | Categorie lijkt al te bestaan. | Systeem blokkeert of adviseert bestaande categorie te koppelen volgens vastgestelde duplicaatregel. | POP-DOC-AANB-NEW-CATEGORY-WARNING of specifieke doubluremelding. | Geen. |
| ALT-006 | 8 | Categorieaanmaak slaagt maar koppeling faalt binnen transactie. | Systeem rolt volledige transactie terug. | POP-DOC-AANB-CATEGORY-CREATE-FAILED. | Geen blijvende mutatie. |
| ALT-007 | 10 | Audit/historyregistratie faalt. | Systeem rolt transactie terug wanneer audit verplicht transactioneel is. | POP-DOC-AANB-CATEGORY-CREATE-FAILED. | Geen blijvende mutatie. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een docent mag een nieuwe centrale categorie alleen aanmaken binnen een niveau waarop de docent bewerkrecht heeft. |
| BR-002 | Categorieën zijn centrale gedeelde tags; aanmaak door een docent maakt geen privé-categorie. |
| BR-003 | Naam, kleur en icoon vormen gedeelde categorie-identiteit en moeten bij aanmaak zorgvuldig gekozen worden. |
| BR-004 | Wanneer een passende bestaande categorie bestaat, moet hergebruik via koppelen de voorkeur hebben boven nieuwe aanmaak. |
| BR-005 | Een nieuwe centrale categorie wordt in deze flow direct gekoppeld aan het geselecteerde niveau. |
| BR-006 | Docenten mogen centrale categorie-eigenschappen na ingebruikname niet vrij wijzigen. |
| BR-007 | Centrale wijzigingen na aanmaak, migratie of samenvoeging van categorieën zijn beheerderverantwoordelijkheid. |
| BR-008 | Een nieuwe categorie wordt niet automatisch zichtbaar voor leerlingen zonder actieve onderliggende oefening. |
| BR-009 | Categorieaanmaak en niveaukoppeling moeten transactioneel samenhangend verwerkt worden. |
| BR-010 | De aanmaak moet auditbaar zijn met actor, tijdstip en relevante waarden. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| LevelId | Moet bestaan en bewerkbaar zijn voor de docent. |
| Name | Verplicht, getrimd, binnen lengte-eisen en niet leeg na normalisatie. |
| NameNormalized | Moet geschikt zijn voor doublurecontrole en zoeken. |
| ColorKey / ColorValue | Moet behoren tot toegestane categorie-kleurset of valide centrale kleurrepresentatie. |
| IconKey | Moet verwijzen naar toegestane icoonkeuze. |
| CategoryId | Wordt server-side gegenereerd. |
| CreatedByUserId | Wordt server-side gevuld. |
| LevelCategory | Moet unieke actieve koppeling tussen nieuw CategoryId en LevelId vormen. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 8 | Create | Categories | Nieuwe centrale categorie wordt aangemaakt met naam, kleur, icoon en auditvelden. |
| 9 | Create | LevelCategories | De nieuwe categorie wordt direct aan het geselecteerde niveau gekoppeld. |
| 10 | History | CategoryHistory | Aanmaak en initiële waarden worden vastgelegd. |
| 10 | Event | CategoryCreated | Domeinevent voor de nieuwe centrale categorie. |
| 10 | Event | CategoryLinkedToLevel | Domeinevent voor de directe koppeling aan het geselecteerde niveau. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Exercises | Categorieaanmaak maakt geen oefening aan. |
| ExerciseModules | Geen technische module wordt geselecteerd. |
| ExerciseRuns | Leerlingen starten niets in deze flow. |
| TeacherStudentLevelAuthorizations | Leerlingtoegang wijzigt niet. |
| SystemMessages | Categorieaanmaak via docentflow stuurt geen systeemberichten naar leerlingen. |
| FrontpageContent | Frontpage-inhoud wordt niet gewijzigd. |
13. State diagram
Niet van toepassing. Een categorie kent statusvelden, maar deze usecase maakt een actieve initiële categorie aan en doorloopt geen statuslifecycle.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| POP-DOC-AANB-NEW-CATEGORY-WARNING | Voor het aanmaken van een nieuwe centrale categorie. | Waarschuwt dat de categorie centrale gedeelde identiteit krijgt. |
| POP-DOC-AANB-CATEGORY-CREATE-FAILED | Wanneer categorieaanmaak of koppeling niet kan worden opgeslagen. | Voorkomt onduidelijke gedeeltelijke verwerking. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft dat docenten nieuwe centrale categorieën kunnen aanmaken via de docentflow, maar dat dit geen privé-categorieën zijn. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus en autorisatie en contextcontrole beschrijven de technische uitwerking. Beschrijf transactie voor Categories + LevelCategories + history en server-side doublurecontrole. |
| Software Requirements Specification | Neem eisen op voor waarschuwing, validatie, audit en het voorkomen van onnodige doublures. |
| Database-informatie | Controleer Categories, LevelCategories en CategoryHistory. |
| Ontwerpbronnen | Beschrijven business rules, command, event en popupkeys. |
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-AANB-007-001 | SRS-AUTH-001 SRS-AUTH-004 SRS-CAT-002 SRS-TCH-002 AC-AUTH-001 AC-AUTH-004 AC-CAT-002 AC-TCH-002 | Een bevoegde docent een nieuwe centrale categorie kunnen laten aanmaken vanuit een geselecteerd niveau |
REQ-UC-DOC-AANB-007-002 | SRS-CAT-001 SRS-SHR-001 SRS-TCH-002 AC-CAT-001 AC-SHR-001 AC-TCH-002 | Vóór aanmaak duidelijk maken dat de categorie centrale gedeelde identiteit krijgt |
REQ-UC-DOC-AANB-007-003 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Naam, kleur en icoon verplicht en server-side valideren |
REQ-UC-DOC-AANB-007-004 | SRS-CAT-001 SRS-TCH-002 AC-CAT-001 AC-TCH-002 | Controleren of een passende bestaande categorie al beschikbaar is |
REQ-UC-DOC-AANB-007-005 | SRS-AUTH-004 SRS-CAT-001 SRS-TCH-002 AC-AUTH-004 AC-CAT-001 AC-TCH-002 | De nieuwe categorie direct koppelen aan het geselecteerde niveau |
REQ-UC-DOC-AANB-007-006 | SRS-CAT-002 SRS-TCH-002 AC-CAT-002 AC-TCH-002 | Categorieaanmaak en niveaukoppeling transactioneel verwerken |
REQ-UC-DOC-AANB-007-007 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Aanmaak en koppeling auditbaar vastleggen |
REQ-UC-DOC-AANB-007-008 | SRS-AUTH-001 SRS-CAT-001 SRS-LRN-009 SRS-TCH-002 AC-AUTH-001 AC-CAT-001 AC-LRN-009 AC-TCH-002 | Geen oefeningen of leerlingautorisaties aanmaken bij categorieaanmaak |
REQ-UC-DOC-AANB-007-009 | SRS-RDM-001 SRS-RDM-005 SRS-CAT-001 SRS-TCH-002 AC-RDM-001 AC-RDM-005 AC-CAT-001 AC-TCH-002 | De nieuwe categorie na succesvolle verwerking tonen in het categorieoverzicht |
REQ-UC-DOC-AANB-007-010 | SRS-CAT-001 SRS-TCH-002 SRS-NFR-SEC-001 SRS-NFR-AUD-001 AC-CAT-001 AC-TCH-002 AC-NFR-SEC-001 AC-NFR-AUD-001 | Categorieaanmaak veilig terugrollen wanneer koppeling of auditregistratie faalt |