Skip to main content

UC-BEH-CAT-004 — Categoriestatus wijzigen

1. Kerngegevens

VeldWaarde
Usecase-IDUC-BEH-CAT-004
NaamCategoriestatus wijzigen
DomeinBeheerder / Categorieën beheren
Primaire actorBeheerder
Secundaire actor(en)Frontend, backend, database, autorisatiecomponent, categoriebeheercomponent, historiecomponent
RolcontextActieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker
Betrokken schermenContent > Categorieën beheren
Gerelateerde usecasesUC-BEH-CAT-001, UC-BEH-CAT-002, UC-BEH-CAT-003, UC-BEH-CAT-005, UC-BEH-CAT-006, UC-BEH-CAT-007
Primaire entiteitenCategories, CategoryHistory, CategoryMigrations, TeacherLevelCategories, TeacherLevelCategoryExercises
Secundaire entiteiten / eventsUsers, ExerciseRuns, SharedExercises, categoriebeheer-readmodels
Gerelateerde popupsPOP-BEH-CAT-STATUS-CONFIRM
PopupregisterOntwerpbronnen — Popup-register
MoSCoWMust

2. Omschrijving

Deze usecase beschrijft hoe een beheerder de functionele status van een centrale categorie wijzigt, bijvoorbeeld door een categorie niet langer nieuw kiesbaar te maken via soft-delete of door een eerder uitgefaseerde categorie te herstellen.

Een statuswijziging naar niet-kiesbaar is alleen toegestaan wanneer er geen actieve docentniveaukoppelingen en geen actieve oefenkoppelingen meer aan de categorie hangen. Functioneel geldt: eerst migreren of loskoppelen, daarna pas status wijzigen.

De wijziging wordt vastgelegd op Categories.IsDeleted en auditbaar geregistreerd in CategoryHistory met ActionType SOFT_DELETE of RESTORE.

Uitgangspunten

  • Categorieën zijn centrale onderwijsinhoud en geen private docentlabels.
  • Naam, kleur en icoon vormen samen de centrale categorie-identiteit.
  • Beheeracties op categorieën zijn volledig server-side gevalideerd.
  • Historische resultaten behouden hun oorspronkelijke categoriecontext.
  • Popupinhoud blijft bronhoudend in het centrale popupregister.

3. Scope

Deze usecase beschrijft:

  • Soft-deleten of uitfaseren van een centrale categorie wanneer geen actieve afhankelijkheden bestaan.
  • Herstellen van een soft-deleted categorie wanneer dat server-side toegestaan is.
  • Blokkeren van statuswijzigingen bij actieve TeacherLevelCategories of TeacherLevelCategoryExercises.
  • Bevestiging met verplichte reden.
  • Vastleggen van CategoryHistory voor statuswijziging.

Deze usecase beschrijft niet:

  • Docentniveaubeheer, leerlingautorisaties of oefeningconfiguratie wijzigen; die blijven bronhoudend in docentflows of docentondersteuning.
  • Nieuwe centrale categorieën aanmaken vanuit beheer; categorie-aanmaak is bronhoudend in de docentflow of via technische migratie wanneer dat expliciet nodig is.
  • Historische exercise runs herschrijven; bestaande runs behouden hun oorspronkelijke categoriecontext.
  • Popupteksten of knopteksten specificeren; usecases verwijzen uitsluitend naar PopupKey.
  • Migreren van gebruik naar een doelcategorie; dit hoort bij UC-BEH-CAT-005 en UC-BEH-CAT-006.
  • Naam, kleur of icoon wijzigen; dit hoort bij UC-BEH-CAT-003.
  • Hard verwijderen van categorieën.

3.1 Afbakening met aangrenzende domeinen

OnderdeelAfbakening
Docent / OefenaanbodDocenten koppelen categorieën aan niveaus en maken waar toegestaan nieuwe centrale categorieën aan; beheer past de centrale identiteit en onderhoudsacties toe.
Beheerder / DocentondersteuningSupport op concrete docentstructuren mag categoriegebruik inspecteren, maar centrale categorie-identiteit wordt hier beheerd.
Leerling / OefenaanbodLeerlingen zien alleen afgeleide toegankelijke categorieën; deze bundel bepaalt niet zelfstandig leerlingtoegang.
Database-informatieCategories, CategoryHistory en CategoryMigrations blijven de technische bron voor centrale categorie-identiteit en audit.

4. Pre-condities

IDVoorwaarde
PRE-001De gebruiker is succesvol ingelogd in OefenHub.
PRE-002De backend heeft server-side vastgesteld dat de gebruiker een actieve beheerderrol heeft.
PRE-003De beheerder bevindt zich binnen de beheeromgeving via Content > Categorieën beheren.
PRE-004De pagina gebruikt actuele serverdata; clientstate, routeparameters of verborgen formuliervelden bepalen geen autorisatie of categorie-identiteit.
PRE-005De beheerder heeft de detailweergave van één categorie geopend.
PRE-006De actuele impactwaarden zijn server-side beschikbaar.
PRE-007De gewenste statusovergang is zichtbaar in de sectie Categorie.

5. Post-condities

IDResultaat
POST-001Categories.IsDeleted is gewijzigd wanneer alle voorwaarden geldig waren.
POST-002UpdatedByUserId en UpdatedAtUtc zijn bijgewerkt.
POST-003CategoryHistory bevat een statuswijzigingsregel met reden.
POST-004Bij geblokkeerde statuswijziging is geen datamutatie uitgevoerd.
POST-005Actieve docentstructuur en historische rungegevens blijven ongewijzigd.

6. Trigger

De usecase start wanneer de beheerder in de sectie Categorie een statuswijziging kiest, zoals uitfaseren of herstellen.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1BeheerderSectie CategorieKiest statuswijziging.De frontend vraagt server-side statuscontrole op.CategoryId en gewenste overgang.
2BackendAutorisatiecomponentControleert beheerdercontext.Alleen beheerder mag status wijzigen.Server-side autorisatie.
3BackendImpactcontroleControleert actieve docentniveaukoppelingen.Status naar niet-kiesbaar wordt geblokkeerd zolang actieve koppelingen bestaan.TeacherLevelCategories.IsActive.
4BackendImpactcontroleControleert actieve oefenkoppelingen.Status naar niet-kiesbaar wordt geblokkeerd zolang actieve oefenkoppelingen bestaan.TeacherLevelCategoryExercises.IsActive.
5FrontendPopupToont bevestigingspopup met verplichte reden.De beheerder bevestigt bewust de statuswijziging.PopupKey POP-BEH-CAT-STATUS-CONFIRM.
6BeheerderPopupBevestigt met reden.De backend verwerkt de statuswijziging.Reason verplicht.
7BackendCategorieServiceWijzigt IsDeleted of herstelt de categorie.Categories wordt bijgewerkt.Categories.IsDeleted.
8BackendHistorieServiceSchrijft CategoryHistory.ActionType is SOFT_DELETE of RESTORE.CategoryHistory.
9FrontendDetailweergaveToont nieuwe status.Beschikbare vervolgacties worden herberekend.Detailreadmodel.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0012Gebruiker is geen beheerder.De backend weigert toegang.Niet van toepassing.Geen.
ALT-0023Er bestaan actieve docentniveaukoppelingen.De statuswijziging naar niet-kiesbaar wordt geblokkeerd met uitleg.Niet van toepassing.Geen.
ALT-0034Er bestaan actieve oefenkoppelingen.De statuswijziging naar niet-kiesbaar wordt geblokkeerd met uitleg.Niet van toepassing.Geen.
ALT-0045Beheerder annuleert.De status blijft ongewijzigd.POP-BEH-CAT-STATUS-CONFIRM.Geen.
ALT-0056Reden ontbreekt.De bevestiging wordt geweigerd.POP-BEH-CAT-STATUS-CONFIRM.Geen.
ALT-0067Categorie is intussen door andere actie gewijzigd.De backend herlaadt de actuele status en voert geen verouderde overgang uit.Niet van toepassing.Geen.

9. Business rules

IDBusiness rule
BR-001Een categorie mag niet niet-kiesbaar worden gemaakt zolang actieve docentniveaukoppelingen bestaan.
BR-002Een categorie mag niet niet-kiesbaar worden gemaakt zolang actieve oefenkoppelingen bestaan.
BR-003Een statuswijziging is een beheeractie met verplichte reden.
BR-004Hard delete van Categories is niet toegestaan vanuit de GUI.
BR-005Een soft-deleted categorie blijft historisch raadpleegbaar en mag in beheerhistory zichtbaar blijven.
BR-006Herstellen van een categorie maakt geen oude docentkoppelingen automatisch actief.
BR-007Statuslabels in de GUI zijn afgeleid uit IsDeleted en gebruikscontext; zij vervangen geen historyregistratie.

10. Datavalidatie

IDValidatie
VAL-001CategoryId is verplicht en moet bestaan.
VAL-002De gewenste overgang moet passen bij de actuele status.
VAL-003Actieve TeacherLevelCategories moeten server-side worden geteld.
VAL-004Actieve TeacherLevelCategoryExercises moeten server-side worden geteld.
VAL-005Reason is verplicht en maximaal 500 tekens.
VAL-006Restore mag geen naamconflict veroorzaken met een actieve categorie.
VAL-007De statusovergang moet transactioneel worden uitgevoerd met historyregistratie.

11. Datamutaties en events

IDMutatie / eventToelichting
MUT-001Update CategoriesIsDeleted, UpdatedByUserId en UpdatedAtUtc worden aangepast.
MUT-002CategoryHistory CREATEStatuswijziging wordt vastgelegd met SOFT_DELETE of RESTORE en reden.

12. Geen datamutaties

IDGeen mutatieReden
NO-001TeacherLevelCategoriesKoppelingen worden niet automatisch gedeactiveerd of hersteld.
NO-002TeacherLevelCategoryExercisesOefenkoppelingen blijven ongewijzigd.
NO-003CategoryMigrationsStatuswijziging maakt geen migratierecord aan.
NO-004ExerciseRunsHistorische runs blijven ongewijzigd.
NO-005UsersRollen en accounts blijven ongewijzigd.

13. State diagram

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

17. Popupverwijzingen

Deze usecase verwijst uitsluitend naar PopupKey. Popupteksten, knopteksten, inputlabels, acties en themakeuzes blijven bronhoudend in het popupregister en popup-themes.

PopupKeyGebruik
POP-BEH-CAT-STATUS-CONFIRMBevestiging van statuswijziging met verplichte reden.

18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification

DocumentAfleiding
Functioneel OntwerpStatuswijziging is alleen toegestaan zonder actieve docentniveau- en oefenkoppelingen.
Technisch OntwerpTechnisch Ontwerp: oefencatalogus, databaseontwerp en historie en background jobs beschrijven de technische uitwerking. Status wordt technisch op Categories verwerkt en auditbaar vastgelegd in CategoryHistory.
Software Requirements SpecificationSRS moet blokkade bij actieve afhankelijkheden, verplichte reden en restore-validatie eisen.
DatabaseGebruikt Categories.IsDeleted en CategoryHistory; geen hard delete.

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-afleidingDektUsecasecontext
UC-BEH-CAT-004-REQ-001SRS-CAT-001
SRS-ADM-001
AC-CAT-001
AC-ADM-001
Statuswijziging van categorieën alleen voor beheerders toestaan
UC-BEH-CAT-004-REQ-002SRS-AUTH-001
SRS-CAT-002
SRS-TCH-002
SRS-ADM-001
AC-AUTH-001
AC-CAT-002
AC-TCH-002
AC-ADM-001
Uitfaseren blokkeren zolang actieve docentniveaukoppelingen bestaan
UC-BEH-CAT-004-REQ-003SRS-AUTH-001
SRS-ADM-001
AC-AUTH-001
AC-ADM-001
Uitfaseren blokkeren zolang actieve oefenkoppelingen bestaan
UC-BEH-CAT-004-REQ-004SRS-ADM-001
AC-ADM-001
Een verplichte reden vragen vóór statuswijziging
UC-BEH-CAT-004-REQ-005SRS-ADM-001
SRS-NFR-AUD-001
AC-ADM-001
AC-NFR-AUD-001
Statuswijzigingen vastleggen in CategoryHistory
UC-BEH-CAT-004-REQ-006SRS-CAT-001
SRS-ADM-001
AC-CAT-001
AC-ADM-001
Categorieën niet hard verwijderen via de beheer-GUI
UC-BEH-CAT-004-REQ-007SRS-CAT-001
SRS-ADM-001
SRS-NFR-SEC-001
AC-CAT-001
AC-ADM-001
AC-NFR-SEC-001
Herstel van een soft-deleted categorie veilig valideren op naamconflicten
UC-BEH-CAT-004-REQ-008SRS-CAT-001
SRS-ADM-001
AC-CAT-001
AC-ADM-001
Oude koppelingen niet automatisch herstellen door een categorierestore