11. Categorieën
Schermbrede uitgangspunten
Deze beheerpagina richt zich uitsluitend op centrale categorie-identiteit. De pagina is geen volledig beheer van docentniveaus, oefeningen of technische oefenmodules. Docentniveaukoppelingen, oefenkoppelingen en historische oefenruns worden hier alleen als impactinformatie of migratie-effect geraakt.
Header, beheerdernavigatie, berichteningang, profielmenu en footer vallen buiten scope van dit schermdocument. De getoonde mockupwaarden, zoals categorienamen, aantallen docentniveaus, aantallen oefenkoppelingen, datums en beheerdersnamen, zijn voorbeeldwaarden en moeten runtime uit de actuele databronnen worden bepaald.
Een categorie bestaat centraal uit naam, icoon, kleur en lifecycle-/auditinformatie. Die centrale identiteit wordt hergebruikt binnen meerdere docentniveaus. Een wijziging van naam, icoon of kleur werkt daarom door op alle contexten waar dezelfde categorie-identiteit wordt gebruikt. Een beheerder mag deze centrale identiteit alleen wijzigen na expliciete bevestiging en met een verplichte reden.
Categoriemigratie is een aparte beheeractie. Bij migratie wordt een broncategorie naar een bestaande doelcategorie overgezet. De migratie mag geen dubbele actieve koppelingen blind aanmaken, moet conflicten controleerbaar afhandelen en moet append-only worden vastgelegd. Historische oefenruns blijven hun oorspronkelijke categoriecontext behouden en worden niet achteraf herschreven.
11.1 Landingspagina
11.1.1 Schermafbeelding

11.1.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-BEH-10-01 |
| Schermnaam | Categorieën — Landingspagina |
| Doelgroep / onderdeel | Beheerder / Contentbeheer |
| Bronbestand | oefenhub_beheerder_11_categorieen_V1_10.html |
| Mockupversie | V1.10 |
| Screenshotbestand | oefenhub_beheerder_11_categorieen_v1_10.png |
| Processtap / context | De beheerder opent via Content > Categorieën de centrale categoriebeheerpagina en selecteert eerst één categorie voor beheer. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | De landingspagina is bewust een selectie- en impactview. Detailbeheer start pas na selectie en de actie Open beheer. |
| Route / URL-patroon | Functioneel routepatroon: beheer/content/categorieen. |
| Autorisatie / vereiste rol-context | Actieve beheerdercontext; server-side afgedwongen. |
| Primair domeinobject / hoofdentiteit | Categories, aangevuld met impactafleiding uit TeacherLevelCategories en TeacherLevelCategoryExercises. |
| Gerelateerde schermen / navigatie | Open beheer — Intro / uitleg, Open beheer — Categorie, Open beheer — Migreren naar, Open beheer — Geschiedenis, Modules, Docent ondersteuning. |
| Data-karakter | Gemengd: zoek/filter state is tijdelijk; categoriekaarten en impactwaarden zijn read-only runtimegegevens; Nieuwe categorie is een navigatie-/startactie naar een aanmaakflow. |
11.1.3 Functionele beschrijving
De landingspagina is de centrale startview voor categoriebeheer. De beheerder ziet een lijst met bestaande centrale categorieën en selecteert daaruit precies één categorie. Pas na selectie wordt rechts de samenvatting van de gekozen categorie getoond en kan de beheerder via Open beheer naar de detailtabs gaan.
De pagina ondersteunt een tweestapsflow: eerst zoeken of bladeren, daarna beheren. Dit voorkomt dat de beheerder direct mutaties uitvoert zonder zicht op de impact. Per categorie toont de lijst minimaal de centrale naam, visuele identiteit, actuele status, het aantal actieve docentniveaus waarin de categorie voorkomt en het aantal actieve oefenkoppelingen onder die categorie. Deze aantallen zijn dynamisch en worden niet als vaste categorie-eigenschappen opgeslagen.
Het rechterpaneel toont de geselecteerde categorie als read-only samenvatting. De getoonde aanmaakgegevens, laatste wijziging en recente wijzigingen komen uit categorie- en historydata. De lijst Recente wijzigingen (laatste 60 dagen) is een gefilterde weergave van CategoryHistory voor de geselecteerde categorie en is bedoeld als snelle controle voordat de beheerder verdergaat.
De knop Nieuwe categorie is zichtbaar als startpunt voor het aanmaken van een nieuwe centrale categorie. De daadwerkelijke aanmaakflow is niet als aparte view in deze mockup uitgewerkt; functioneel moet die flow dezelfde centrale identiteit bewaken: naam, icoon, kleur, auditinformatie en server-side validatie op uniciteit en verplichte velden.
Leegstaten zijn relevant wanneer er nog geen categorieën bestaan, wanneer een zoekfilter geen resultaat oplevert of wanneer geen categorie geselecteerd is. In die situaties mag het rechterpaneel geen verouderde details tonen. Foutstaten zijn onder andere het niet kunnen laden van de categoriekaartlijst, het niet kunnen berekenen van impactaantallen of een selectiepoging op een inmiddels verwijderde of gemigreerde categorie.
11.1.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-BEH-10-01-S01 | Section | Introblok | Bovenste uitlegkaart van het categoriebeheer. | Categorieën beheren | Licht toe dat centrale categorie-identiteit wordt beheerd en dat migratie/statuswijziging gescheiden acties zijn. | CategoryManagementHeroSection |
| SCH-BEH-10-01-S02 | Section | Overzicht | Linker werkpaneel met zoekveld, categoriekaarten en aanmaakactie. | Overzicht | Startpunt van de selectieflow. | CategoryOverviewSection |
| SCH-BEH-10-01-B01 | Button | Overzicht > Nieuwe categorie | Start de flow voor het aanmaken van een nieuwe centrale categorie. | Nieuwe categorie | Onderliggende aanmaakview is niet apart in deze mockup uitgewerkt. | CreateCategoryButton |
| SCH-BEH-10-01-FILTER01 | Filter | Zoekveld categorieën | Filtert de zichtbare categoriekaarten op zoektekst. | Zoek categorie | Tijdelijke gebruikersinvoer; geen persistente categoriegegevens. | CategorySearchInput |
| SCH-BEH-10-01-T01 | Table | Categoriekaarten | Selecteerbare kaartlijst met bestaande centrale categorieën. | — | Bevat dynamische naam, omschrijving, status en impactbadges. | CategoryCardList |
| SCH-BEH-10-01-F01 | Field | Categoriekaart > Naam | Centrale categorienaam. | Bijvoorbeeld Rekenen | Mockupwaarde is voorbeelddata. | CategoryNameValue |
| SCH-BEH-10-01-F02 | Field | Categoriekaart > Statusbadge | Actuele inzetbaarheidsstatus van de categorie. | Actief | Afgeleid uit categorie-lifecycle en migratie-/soft-delete-status. | CategoryStatusBadge |
| SCH-BEH-10-01-F03 | Field | Categoriekaart > Docentniveau-impact | Aantal actieve docentniveaukoppelingen waarin de categorie voorkomt. | 12 docentenniveaus | Dynamische impactwaarde. | ActiveTeacherLevelCountBadge |
| SCH-BEH-10-01-F04 | Field | Categoriekaart > Oefenkoppelingen | Aantal actieve oefenkoppelingen onder deze categorie. | 46 oefenkoppelingen | Dynamische impactwaarde. | ActiveExerciseLinkCountBadge |
| SCH-BEH-10-01-A01 | Action | Categoriekaart > Selecteer | Selecteert een categorie als actieve context voor het rechterpaneel. | Selecteer | Geen mutatie; alleen selectie in de UI-state. | SelectCategoryAction |
| SCH-BEH-10-01-S03 | Section | Geselecteerde categorie | Rechter samenvattingskaart van de geselecteerde categorie. | Geselecteerde categorie | Toont read-only kerngegevens en recente wijzigingen. | SelectedCategorySummarySection |
| SCH-BEH-10-01-F05 | Field | Geselecteerde categorie > Kerngegevens | Samenvatting van naam, status, impact en auditinformatie. | — | Alleen beschikbaar na selectie. | SelectedCategorySummaryValues |
| SCH-BEH-10-01-T02 | Table | Recente wijzigingen | Compacte lijst met recente historyregels voor de geselecteerde categorie. | Recente wijzigingen (laatste 60 dagen) | Read-only, gefilterd op geselecteerde categorie. | RecentCategoryChangesList |
| SCH-BEH-10-01-B02 | Button | Geselecteerde categorie > Open beheer | Opent de detailtabs voor de geselecteerde categorie. | Open beheer | Disabled wanneer geen categorie is geselecteerd. | OpenCategoryManagementButton |
11.1.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-BEH-10-01-FILTER01 | Zoekveld categorieën | Zoek categorie | CategorySearchInput | Geen persistente databron | User input / runtime state | string | Ja | Filtert categoriekaarten; lege waarde toont de standaardlijst. |
| SCH-BEH-10-01-T01 | Categoriekaarten | — | CategoryCardList | Categories + TeacherLevelCategories + TeacherLevelCategoryExercises | Samengesteld read model | collection | Nee | Toont alleen categorieën die in de beheercontext relevant zijn; reguliere gebruikers mogen gemigreerde of soft-deleted broncategorieën niet opnieuw kunnen kiezen. |
| SCH-BEH-10-01-F01 | Categoriekaart > Naam | Dynamische categorienaam | CategoryNameValue | Categories.Name | Database | nvarchar(150) | Nee op deze view | Naam is centraal en uniek binnen actieve records. |
| SCH-BEH-10-01-F02 | Categoriekaart > Statusbadge | Actief / inactief / gemigreerd / historisch | CategoryStatusBadge | Categories.IsDeleted + CategoryMigrations + afgeleide lifecycle-regels | Afgeleid | enum/string | Nee | Statusweergave mag niet uitsluitend frontend bepaald zijn; server-side bepaalt beheerbaarheid. |
| SCH-BEH-10-01-F03 | Categoriekaart > Docentniveau-impact | Aantal docentniveaus | ActiveTeacherLevelCountBadge | TeacherLevelCategories + TeacherLevels.IsActive | Berekend | int | Nee | Telt actieve niveaukoppelingen waarin CategoryId voorkomt. |
| SCH-BEH-10-01-F04 | Categoriekaart > Oefenkoppelingen | Aantal oefenkoppelingen | ActiveExerciseLinkCountBadge | TeacherLevelCategories + TeacherLevelCategoryExercises | Berekend | int | Nee | Telt actieve oefenkoppelingen onder actieve niveau-categoriecontexten. |
| SCH-BEH-10-01-S03 | Geselecteerde categorie | Geselecteerde categorie | SelectedCategorySummarySection | Categories + CategoryHistory + Users | Samengesteld read model | object | Nee | Wordt gewist of vervangen wanneer de selectie wijzigt. |
| SCH-BEH-10-01-T02 | Recente wijzigingen | Recente wijzigingen (laatste 60 dagen) | RecentCategoryChangesList | CategoryHistory + Users | Database / tijdvensterfilter | collection | Nee | Toont alleen historyregels voor de geselecteerde categorie binnen het recente venster. |
| SCH-BEH-10-01-B01 | Nieuwe categorie | Nieuwe categorie | CreateCategoryButton | Autorisatiecontext + categorie-aanmaakflow | Applicatieactie | action | Ja | Alleen beschikbaar voor beheerder; server-side autorisatie blijft verplicht. |
| SCH-BEH-10-01-B02 | Open beheer | Open beheer | OpenCategoryManagementButton | Categories.Id | Navigatieactie op geselecteerde categorie | action | Ja | Alleen actief bij precies één geldige geselecteerde categorie. |
11.1.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-BEH-10-01-01 | SRS-CAT-007 AC-CAT-007 | De beheerder een centrale categorie-overzichtspagina tonen met bestaande centrale categorieën en per categorie minimaal naam, visuele identiteit, actuele status, actieve docentniveau-impact en actieve oefenkoppeling-impact |
REQ-SCH-BEH-10-01-02 | SRS-CAT-007 AC-CAT-007 | Eerst selectie van precies één categorie vereisen voordat de detail- en beheerweergave via Open beheer beschikbaar komt |
REQ-SCH-BEH-10-01-03 | SRS-CAT-007 AC-CAT-007 | Het rechterpaneel vullen met read-only kerngegevens en recente wijzigingen van uitsluitend de geselecteerde categorie |
REQ-SCH-BEH-10-01-04 | SRS-CAT-007 AC-CAT-007 | Zoeken of filteren op categoriegegevens ondersteunen zonder het zoekcriterium als categoriegegeven op te slaan |
REQ-SCH-BEH-10-01-05 | SRS-CAT-007 AC-CAT-007 | Bij lege resultaten, ontbrekende selectie of laadfouten voorkomen dat verouderde categoriedetails zichtbaar blijven |
REQ-SCH-BEH-10-01-06 | SRS-AUTH-001 SRS-CAT-007 AC-AUTH-001 AC-CAT-007 | Toegang tot de categoriebeheerpagina server-side beperken tot gebruikers met een actieve beheerdercontext |
REQ-SCH-BEH-10-01-07 | SRS-AUTH-001 SRS-CAT-007 AC-AUTH-001 AC-CAT-007 | De actie Nieuwe categorie kunnen tonen als startpunt voor categorie-aanmaak, waarbij de aanmaak server-side dezelfde categorievalidaties afdwingen als beheer van bestaande categorieën |
11.2 Open Beheer — Intro / uitleg
11.2.1 Schermafbeelding

11.2.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-BEH-10-02 |
| Schermnaam | Categorieën — Open beheer — Intro / uitleg |
| Doelgroep / onderdeel | Beheerder / Contentbeheer |
| Bronbestand | oefenhub_beheerder_11_categorieen_V1_10.html |
| Mockupversie | V1.10 |
| Screenshotbestand | oefenhub_beheerder_11_categorieen_v1_10_knop_open_beheer_tab_01_intro_uitleg.png |
| Processtap / context | De beheerder heeft één categorie geselecteerd en opent de beheerweergave op de tab Intro / uitleg. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | Deze tab is read-only en beschrijft de beheeronderdelen en impact van de geselecteerde categorie. |
| Route / URL-patroon | Functioneel routepatroon: beheer/content/categorieen/:categorieId/beheer/intro. |
| Autorisatie / vereiste rol-context | Actieve beheerdercontext; server-side afgedwongen. |
| Primair domeinobject / hoofdentiteit | Geselecteerde Categories-record met impactafleiding. |
| Gerelateerde schermen / navigatie | Landingspagina, Open beheer — Categorie, Open beheer — Migreren naar, Open beheer — Geschiedenis. |
| Data-karakter | Read-only uitleg en berekende impactwaarden. |
11.2.3 Functionele beschrijving
Deze tab licht uit welke beheeracties voor de geselecteerde categorie beschikbaar zijn. De tab is bedoeld als oriëntatie voordat een beheerder basisgegevens wijzigt, koppelingen migreert of historie controleert. De geselecteerde categorie blijft gedurende de Open beheer-weergave dezelfde context; tabwisseling mag niet ongemerkt een andere broncategorie kiezen.
De view benoemt dat Categorie wordt gebruikt voor naam, icoon en kleur, dat Migreren naar wordt gebruikt om actieve koppelingen eerst naar een andere centrale categorie over te zetten, en dat Geschiedenis alle acties op categorieniveau toont. De informatiekaart benadrukt dat statuswijziging pas beschikbaar wordt wanneer er geen actieve docentniveaukoppelingen en geen actieve oefenkoppelingen meer aanwezig zijn.
Het blok Gebruik & impact toont dynamische aantallen en auditinformatie. Deze informatie helpt de beheerder inschatten hoe breed een wijziging doorwerkt. De waarden zijn read-only en moeten bij het openen en herladen van de beheerweergave opnieuw uit de actuele databasecontext worden bepaald.
11.2.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-BEH-10-02-S01 | Section | Beheerkop | Kop van de geopende beheerweergave voor de geselecteerde categorie. | Categoriebeheer · [categorienaam] | Categorienaam is dynamisch. | CategoryManagementHeader |
| SCH-BEH-10-02-B01 | Button | Beheerkop > Terug naar overzicht | Sluit de beheerweergave en keert terug naar de landingspagina. | Terug naar overzicht | Laat geselecteerde categoriecontext los of bewaart deze als selectie-state. | CloseCategoryManagementButton |
| SCH-BEH-10-02-TAB01 | TAB | Tabnavigatie beheer | Tabs binnen Open beheer. | Intro / uitleg, Categorie, Migreren naar, Geschiedenis | Actieve tab: Intro / uitleg. | CategoryManagementTabs |
| SCH-BEH-10-02-S02 | Section | Wat kun je hier doen? | Read-only uitlegblok over de beschikbare beheeronderdelen. | Wat kun je hier doen? | Geen mutatievelden. | CategoryManagementIntroSection |
| SCH-BEH-10-02-M01 | Message | Statuswijziging pas na migratie | Uitleg dat de categorie pas inactief kan worden wanneer actieve koppelingen zijn weggewerkt. | Statuswijziging pas na migratie | Business rule wordt server-side afgedwongen. | StatusChangeAfterMigrationMessage |
| SCH-BEH-10-02-M02 | Message | Historie blijft zichtbaar | Uitleg dat acties op categorieniveau herleidbaar blijven. | Historie blijft zichtbaar | Verwijst naar CategoryHistory. | CategoryHistoryVisibilityMessage |
| SCH-BEH-10-02-M03 | Message | Docenten ontvangen systeembericht | Uitleg dat betrokken docenten bij migratie geïnformeerd worden. | Docenten ontvangen systeembericht | Berichtgeving volgt de migratieflow. | CategoryMigrationTeacherNoticeMessage |
| SCH-BEH-10-02-S03 | Section | Gebruik & impact | Read-only impactkaart van de geselecteerde categorie. | Gebruik & impact | Toont tellingen en auditinformatie. | CategoryUsageImpactSection |
| SCH-BEH-10-02-F01 | Field | Gebruik & impact > Actieve docentniveaus | Aantal actieve docentniveaukoppelingen. | Actieve docentniveaus | Dynamische impactwaarde. | ActiveTeacherLevelsValue |
| SCH-BEH-10-02-F02 | Field | Gebruik & impact > Onderliggende oefenkoppelingen | Aantal actieve oefenkoppelingen. | Onderliggende oefenkoppelingen | Dynamische impactwaarde. | UnderlyingExerciseLinksValue |
| SCH-BEH-10-02-F03 | Field | Gebruik & impact > Aangemaakt | Aanmaakdatum en aanmaker. | Aangemaakt | Samengestelde auditweergave. | CreatedAuditValue |
| SCH-BEH-10-02-F04 | Field | Gebruik & impact > Laatst gewijzigd | Laatste wijzigingsdatum en actor. | Laatst gewijzigd | Samengestelde auditweergave. | UpdatedAuditValue |
11.2.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-BEH-10-02-S01 | Beheerkop | Categoriebeheer · [categorienaam] | CategoryManagementHeader | Categories.Name | Database | string | Nee | De geopende categoriecontext wordt bepaald door Categories.Id. |
| SCH-BEH-10-02-TAB01 | Tabnavigatie beheer | Intro / uitleg, Categorie, Migreren naar, Geschiedenis | CategoryManagementTabs | Geen directe databron | Runtime state | enum | Ja | Tabwisseling wijzigt alleen de view, niet de geselecteerde categorie. |
| SCH-BEH-10-02-F01 | Actieve docentniveaus | Actieve docentniveaus | ActiveTeacherLevelsValue | TeacherLevelCategories + TeacherLevels.IsActive | Berekend | int | Nee | Telt actieve niveaukoppelingen bij de geselecteerde CategoryId. |
| SCH-BEH-10-02-F02 | Onderliggende oefenkoppelingen | Onderliggende oefenkoppelingen | UnderlyingExerciseLinksValue | TeacherLevelCategories + TeacherLevelCategoryExercises | Berekend | int | Nee | Telt actieve oefenkoppelingen onder actieve niveau-categoriecontexten. |
| SCH-BEH-10-02-F03 | Aangemaakt | Aangemaakt | CreatedAuditValue | Categories.CreatedAtUtc + Categories.CreatedByUserId + Users | Database / samengesteld | string | Nee | UTC-opslag wordt gebruikersvriendelijk lokaal weergegeven. |
| SCH-BEH-10-02-F04 | Laatst gewijzigd | Laatst gewijzigd | UpdatedAuditValue | Categories.UpdatedAtUtc + Categories.UpdatedByUserId + Users | Database / samengesteld | string | Nee | Lege actor bij ontbrekende wijziging moet veilig als onbekend of niet beschikbaar worden weergegeven. |
| SCH-BEH-10-02-M01 | Statuswijziging pas na migratie | Statuswijziging pas na migratie | StatusChangeAfterMigrationMessage | Geen primaire databron | Business-rule uitleg | message | Nee | Uitleg mag niet worden gebruikt als enige afdwinging; server-side impactcontrole blijft leidend. |
11.2.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-BEH-10-02-01 | SRS-CAT-007 AC-CAT-007 | Binnen Open beheer een read-only Intro / uitleg-tab tonen die de beschikbare beheeronderdelen van de geselecteerde categorie uitlegt |
REQ-SCH-BEH-10-02-02 | SRS-CAT-007 AC-CAT-007 | In de Intro / uitleg-tab minimaal actieve docentniveau-impact, actieve oefenkoppeling-impact, aanmaakinformatie en laatste wijzigingsinformatie tonen |
REQ-SCH-BEH-10-02-03 | SRS-CAT-007 AC-CAT-007 | Tabwisseling binnen Open beheer uitvoeren zonder de geselecteerde broncategorie te wijzigen |
REQ-SCH-BEH-10-02-04 | SRS-CAT-007 AC-CAT-007 | Duidelijk maken dat statuswijziging pas beschikbaar mag zijn wanneer de actieve docentniveau- en oefenkoppeling-impact nul is |
REQ-SCH-BEH-10-02-05 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | De melding over systeemberichten bij migratie tonen als functionele uitleg, terwijl daadwerkelijke notificatie pas na succesvolle migratie mag plaatsvinden |
11.3 Open Beheer — Categorie
11.3.1 Schermafbeelding

11.3.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-BEH-10-03 |
| Schermnaam | Categorieën — Open beheer — Categorie |
| Doelgroep / onderdeel | Beheerder / Contentbeheer |
| Bronbestand | oefenhub_beheerder_11_categorieen_V1_10.html |
| Mockupversie | V1.10 |
| Screenshotbestand | oefenhub_beheerder_11_categorieen_v1_10_knop_open_beheer_tab_02_categorie.png |
| Processtap / context | De beheerder heeft één categorie geselecteerd en opent de tab Categorie om centrale basisgegevens te beheren. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | Opslaan en statuswijziging zijn gescheiden acties. Opslaan vraagt bevestiging en reden; statuswijziging is geblokkeerd zolang actieve koppelingen bestaan. |
| Route / URL-patroon | Functioneel routepatroon: beheer/content/categorieen/:categorieId/beheer/categorie. |
| Autorisatie / vereiste rol-context | Actieve beheerdercontext; server-side afgedwongen. |
| Primair domeinobject / hoofdentiteit | Categories met CategoryHistory voor wijzigingen. |
| Gerelateerde schermen / navigatie | Landingspagina, Intro / uitleg, Migreren naar, Geschiedenis. |
| Data-karakter | Mutatieview voor centrale categorie-identiteit, met read-only impactkaart en bevestigingsmodal. |
11.3.3 Functionele beschrijving
Deze tab beheert de centrale basisgegevens van de geselecteerde categorie: naam, icoon en kleur. Omdat een centrale categorie door meerdere docentniveaus en oefenkoppelingen gebruikt kan worden, werkt een wijziging in deze tab breder door dan één docentcontext. De beheerder ziet daarom naast de mutatievelden ook het blok Gebruik & impact.
De actuele status is zichtbaar maar wordt niet als regulier veld in dezelfde opslagactie gewijzigd. De knop Status wijzigen start een aparte statusflow. In de mockup is die actie niet beschikbaar, omdat de geselecteerde categorie nog actieve docentniveaukoppelingen en oefenkoppelingen heeft. Het systeem toont dan een modal met uitleg dat eerst moet worden gemigreerd of losgekoppeld. Frontend-disabled states zijn hierbij niet voldoende; de server moet de impact opnieuw controleren voordat een statuswijziging wordt uitgevoerd.
De knop Opslaan opent een bevestigingsmodal. In die modal moet de beheerder bevestigen dat de wijziging moet worden doorgevoerd en een verplichte Reden van wijziging invullen. Pas daarna mogen naam, icoon en kleur worden opgeslagen. Elke inhoudelijke wijziging wordt afzonderlijk in CategoryHistory vastgelegd met oude waarde, nieuwe waarde, actor, tijdstip en reden.
Validatie is relevant voor verplichte naam, unieke naam binnen actieve records, verplichte IconKey en geldige ColorHex. Bij gelijktijdige wijzigingen door meerdere beheerders moet het systeem een concurrencyconflict kunnen herkennen en voorkomen dat oudere waarden nieuwere wijzigingen overschrijven.
11.3.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-BEH-10-03-TAB01 | TAB | Tabnavigatie beheer | Tabs binnen Open beheer. | Intro / uitleg, Categorie, Migreren naar, Geschiedenis | Actieve tab: Categorie. | CategoryManagementTabs |
| SCH-BEH-10-03-FORM01 | FORM | Categoriegegevens | Formulier voor centrale categorie-identiteit. | Categorie | Mutatieformulier voor naam, icoon en kleur. | CategoryIdentityForm |
| SCH-BEH-10-03-F01 | Field | Naam categorie | Tekstveld voor de centrale categorienaam. | Naam categorie | Centrale naam werkt door in alle contexten waar de categorie gebruikt wordt. | CategoryNameInput |
| SCH-BEH-10-03-F02 | Field | Huidige status | Read-only statusweergave. | Huidige status | Statuswijziging verloopt via aparte actie. | CurrentCategoryStatusValue |
| SCH-BEH-10-03-F03 | Field | Icoon | Selectiegroep voor de centrale icoonsleutel. | Icoon | Mockup toont visuele opties. | CategoryIconSelectionGroup |
| SCH-BEH-10-03-F04 | Field | Kleur | Selectiegroep voor de centrale kleur. | Kleur | Mockup toont kleurkeuzes als swatches. | CategoryColorSelectionGroup |
| SCH-BEH-10-03-B01 | Button | Status wijzigen | Start de aparte statuswijzigingsflow of toont blokkademelding. | Status wijzigen | Alleen uitvoerbaar wanneer actieve impactwaarden nul zijn. | ChangeCategoryStatusButton |
| SCH-BEH-10-03-B02 | Button | Opslaan | Start bevestigingsmodal voor inhoudelijke wijzigingen. | Opslaan | Schrijft pas na bevestiging en verplichte reden. | SaveCategoryChangesButton |
| SCH-BEH-10-03-S01 | Section | Gebruik & impact | Read-only impactkaart naast het formulier. | Gebruik & impact | Context voor de beheerder tijdens mutatie. | CategoryUsageImpactSection |
| SCH-BEH-10-03-F05 | Field | Gebruik & impact > Actieve docentniveaus | Aantal actieve docentniveaukoppelingen. | Actieve docentniveaus aanwezig | Dynamische impactwaarde. | ActiveTeacherLevelsValue |
| SCH-BEH-10-03-F06 | Field | Gebruik & impact > Actieve oefenkoppelingen | Aantal actieve oefenkoppelingen. | Actieve oefenkoppelingen aanwezig | Dynamische impactwaarde. | ActiveExerciseLinksValue |
| SCH-BEH-10-03-M01 | Message | Impactnotitie | Uitleg dat inactief zetten pas beschikbaar is bij nul actieve impact. | Eerst migreren, daarna status wijzigen | Business-rule toelichting. | CategoryStatusImpactNote |
| SCH-BEH-10-03-MOD01 | MOD | Modal Wijzigingen opslaan | Bevestigingspopup voor opslaan van naam, icoon en kleur. | Wijzigingen opslaan | Bevat verplichte reden. | SaveCategoryChangesModal |
| SCH-BEH-10-03-F07 | Field | Modal > Reden van wijziging | Verplicht tekstveld voor auditreden. | Reden van wijziging | Wordt opgeslagen in CategoryHistory. | CategoryChangeReasonTextarea |
| SCH-BEH-10-03-B03 | Button | Modal > Annuleren | Sluit modal zonder opslag. | Annuleren | Laat formulierwaarden ongewijzigd in edit-state. | CancelSaveCategoryChangesButton |
| SCH-BEH-10-03-B04 | Button | Modal > Bevestig opslaan | Bevestigt en verwerkt de wijziging. | Bevestig opslaan | Alleen actief bij geldige reden en geldige formulierwaarden. | ConfirmSaveCategoryChangesButton |
| SCH-BEH-10-03-MOD02 | MOD | Modal Status wijzigen niet beschikbaar | Informatiepopup wanneer actieve koppelingen statuswijziging blokkeren. | Status wijzigen niet beschikbaar | Geen mutatie; alleen uitleg. | StatusChangeUnavailableModal |
| SCH-BEH-10-03-B05 | Button | Statusmodal > Sluiten | Sluit de informatieve blokkademodal. | Sluiten | Geen wijziging. | CloseStatusUnavailableModalButton |
11.3.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-BEH-10-03-F01 | Naam categorie | Naam categorie | CategoryNameInput | Categories.Name | Database / user input | nvarchar(150) | Ja | Verplicht; uniek binnen actieve records; trimming en server-side validatie verplicht. |
| SCH-BEH-10-03-F02 | Huidige status | Huidige status | CurrentCategoryStatusValue | Categories.IsDeleted + CategoryMigrations + impactafleiding | Afgeleid | enum/string | Nee | Statuswijziging mag alleen via aparte flow en server-side impactcontrole. |
| SCH-BEH-10-03-F03 | Icoon | Icoon | CategoryIconSelectionGroup | Categories.IconKey | Database / user input | nvarchar(100) | Ja | Verplicht; code-/sleutelwaarde zonder harde FK. |
| SCH-BEH-10-03-F04 | Kleur | Kleur | CategoryColorSelectionGroup | Categories.ColorHex | Database / user input | nvarchar(7) | Ja | Verplicht; geldig hex-formaat. |
| SCH-BEH-10-03-F05 | Actieve docentniveaus aanwezig | Actieve docentniveaus aanwezig | ActiveTeacherLevelsValue | TeacherLevelCategories + TeacherLevels.IsActive | Berekend | int | Nee | Wordt gebruikt om statuswijziging te blokkeren zolang waarde groter dan 0 is. |
| SCH-BEH-10-03-F06 | Actieve oefenkoppelingen aanwezig | Actieve oefenkoppelingen aanwezig | ActiveExerciseLinksValue | TeacherLevelCategoryExercises + TeacherLevelCategories | Berekend | int | Nee | Wordt gebruikt om statuswijziging te blokkeren zolang waarde groter dan 0 is. |
| SCH-BEH-10-03-B02 | Opslaan | Opslaan | SaveCategoryChangesButton | Categories + CategoryHistory | Mutatieactie | action | Ja | Opent bevestigingsmodal; voert zelf nog geen definitieve opslag uit. |
| SCH-BEH-10-03-F07 | Reden van wijziging | Reden van wijziging | CategoryChangeReasonTextarea | CategoryHistory.Reason | User input | nvarchar(500) | Ja | Verplicht vóór definitief opslaan; mag niet alleen uit whitespace bestaan. |
| SCH-BEH-10-03-B04 | Bevestig opslaan | Bevestig opslaan | ConfirmSaveCategoryChangesButton | Categories + CategoryHistory | Mutatieactie | action | Ja | Schrijft gewijzigde waarden en één of meer historyrecords met oude/nieuwe waarde, actor, tijdstip en reden. |
| SCH-BEH-10-03-B01 | Status wijzigen | Status wijzigen | ChangeCategoryStatusButton | Categories + TeacherLevelCategories + TeacherLevelCategoryExercises | Mutatieactie / server-side controle | action | Ja | Alleen uitvoerbaar wanneer actieve docentniveaukoppelingen en actieve oefenkoppelingen nul zijn. |
| SCH-BEH-10-03-MOD02 | Status wijzigen niet beschikbaar | Status wijzigen niet beschikbaar | StatusChangeUnavailableModal | Berekende impactwaarden | Runtime state | modal | Nee | Wordt getoond wanneer statuswijziging functioneel geblokkeerd is. |
11.3.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-BEH-10-03-01 | SRS-CAT-007 AC-CAT-007 | In de tab Categorie de centrale categorienaam, icoonsleutel en kleur beheerbaar maken |
REQ-SCH-BEH-10-03-02 | SRS-CAT-007 AC-CAT-007 | De actuele categoriestatus zichtbaar tonen, maar statuswijziging functioneel scheiden van reguliere opslag van naam, icoon en kleur |
REQ-SCH-BEH-10-03-03 | SRS-CAT-007 AC-CAT-007 | Vóór definitieve opslag van naam, icoon of kleur een bevestigingsmodal tonen met een verplichte reden van wijziging |
REQ-SCH-BEH-10-03-04 | SRS-AUTH-001 SRS-CAT-007 AC-AUTH-001 AC-CAT-007 | Categoriegegevens server-side valideren op verplichte naam, unieke actieve naam, verplichte IconKey en geldig ColorHex-formaat |
REQ-SCH-BEH-10-03-05 | SRS-NFR-AUD-001 SRS-CAT-007 AC-NFR-AUD-001 AC-CAT-007 | Wijzigingen aan naam, icoon en kleur historisch vastleggen met oude waarde, nieuwe waarde, actor, tijdstip en reden |
REQ-SCH-BEH-10-03-06 | SRS-CAT-007 AC-CAT-007 | Statuswijziging blokkeren zolang de categorie nog actieve docentniveaukoppelingen of actieve oefenkoppelingen heeft |
REQ-SCH-BEH-10-03-07 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Bij geblokkeerde statuswijziging een duidelijke melding tonen dat eerst migratie of loskoppeling nodig is |
REQ-SCH-BEH-10-03-08 | SRS-CAT-007 AC-CAT-007 | Concurrencyconflicten bij gelijktijdige categoriebeheerwijzigingen herkennen en mag nieuwere wijzigingen niet stil overschrijven |
11.4 Open Beheer — Migreren naar
11.4.1 Schermafbeelding

11.4.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-BEH-10-04 |
| Schermnaam | Categorieën — Open beheer — Migreren naar |
| Doelgroep / onderdeel | Beheerder / Contentbeheer |
| Bronbestand | oefenhub_beheerder_11_categorieen_V1_10.html |
| Mockupversie | V1.10 |
| Screenshotbestand | oefenhub_beheerder_11_categorieen_v1_10_knop_open_beheer_tab_03_migreren_naar.png |
| Processtap / context | De beheerder heeft één broncategorie geopend en kiest in deze tab een bestaande actieve doelcategorie voor migratie. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | De broncategorie staat vast. Alleen een bestaande actieve doelcategorie mag worden geselecteerd. De doelcategorie wordt niet in deze flow aangemaakt. |
| Route / URL-patroon | Functioneel routepatroon: beheer/content/categorieen/:categorieId/beheer/migreren. |
| Autorisatie / vereiste rol-context | Actieve beheerdercontext; server-side afgedwongen. |
| Primair domeinobject / hoofdentiteit | CategoryMigrations met broncategorie, doelcategorie, actor, tijdstip en reden. |
| Gerelateerde schermen / navigatie | Landingspagina, Intro / uitleg, Categorie, Geschiedenis, systeemberichten voor betrokken docenten. |
| Data-karakter | Mutatieflow met zoek-/selectiestate, read-only impactinformatie, bevestigingsmodal en append-only auditregistratie. |
11.4.3 Functionele beschrijving
Deze tab ondersteunt het migreren van de geopende broncategorie naar een andere bestaande actieve categorie. De broncategorie staat vast zodra Open beheer is geopend. De beheerder zoekt alleen nog een doelcategorie en selecteert deze als migratiedoel. Migreren naar dezelfde categorie is niet toegestaan.
De doelcategorielijst toont uitsluitend bestaande doelcategorieën die functioneel als actief en selecteerbaar gelden. De lijst mag geen soft-deleted, al gemigreerde of anderszins niet-regulier-kiesbare categorieën aanbieden. Na selectie toont het rechterpaneel de gekozen doelcategorie met impactinformatie en auditgegevens. Pas daarna is de actie Migreer [bron] naar [doel] beschikbaar.
De migratieactie opent een bevestigingsmodal met Reden van migratie. De reden is verplicht en wordt vastgelegd in CategoryMigrations. Bij uitvoering worden relevante TeacherLevelCategories en onderliggende TeacherLevelCategoryExercises van de broncategorie naar de doelcategorie overgezet, waarbij bestaande doelkoppelingen en oefenkoppelingen gecontroleerd moeten worden. Dubbele actieve records mogen niet blind worden aangemaakt.
Na een succesvolle migratie blijft de broncategorie historisch herleidbaar, maar mag deze niet meer zichtbaar of kiesbaar zijn voor nieuwe docentkoppelingen of configuraties. Historische ExerciseRuns blijven onaangetast en behouden hun oorspronkelijke CategoryId-context. Betrokken docenten aan de bronkant moeten via een systeembericht of functioneel gelijkwaardige notificatie geïnformeerd kunnen worden.
Foutstaten zijn onder andere: geen doelcategorie geselecteerd, doelcategorie is dezelfde als bron, doelcategorie is inmiddels inactief geworden, conflicten in doelkoppelingen, ontbrekende reden, onvoldoende rechten of concurrencyproblemen tijdens de migratie.
11.4.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-BEH-10-04-TAB01 | TAB | Tabnavigatie beheer | Tabs binnen Open beheer. | Intro / uitleg, Categorie, Migreren naar, Geschiedenis | Actieve tab: Migreren naar. | CategoryManagementTabs |
| SCH-BEH-10-04-S01 | Section | Migreren naar andere actieve categorie | Linker paneel met uitleg, zoekveld en doelcategorielijst. | Migreren naar andere actieve categorie | Broncategorie staat vast. | CategoryMigrationTargetSelectionSection |
| SCH-BEH-10-04-F01 | Field | Broncategorie | Read-only broncategoriecontext. | De broncategorie staat al vast: [bron] | Afgeleid uit geopende beheercontext. | SourceCategoryValue |
| SCH-BEH-10-04-FILTER01 | Filter | Zoek doelcategorie | Filtert mogelijke doelcategorieën. | Zoek doelcategorie | Tijdelijke zoekstate. | MigrationTargetSearchInput |
| SCH-BEH-10-04-T01 | Table | Doelcategorieën | Lijst met selecteerbare actieve doelcategorieën. | — | Broncategorie mag niet in de lijst staan. | MigrationTargetCategoryList |
| SCH-BEH-10-04-F02 | Field | Doelcategoriekaart > Naam | Naam van mogelijke doelcategorie. | Bijvoorbeeld Hoofdrekenen | Mockupwaarde is voorbeelddata. | MigrationTargetNameValue |
| SCH-BEH-10-04-F03 | Field | Doelcategoriekaart > Docentniveau-impact | Impactaantal van doelcategorie. | 8 docentenniveaus | Dynamisch. | TargetTeacherLevelCountBadge |
| SCH-BEH-10-04-F04 | Field | Doelcategoriekaart > Oefenkoppelingen | Aantal oefenkoppelingen van doelcategorie. | 29 oefenkoppelingen | Dynamisch. | TargetExerciseLinkCountBadge |
| SCH-BEH-10-04-A01 | Action | Doelcategoriekaart > Selecteer | Selecteert één doelcategorie. | Selecteer | Nog geen migratie. | SelectMigrationTargetAction |
| SCH-BEH-10-04-S02 | Section | Geselecteerde doelcategorie | Rechter samenvattingspaneel van het geselecteerde doel. | Geselecteerde doelcategorie | Toont details voordat migratie kan starten. | SelectedMigrationTargetSection |
| SCH-BEH-10-04-B01 | Button | Migratie uitvoeren | Start de bevestigingsmodal voor migratie. | Migreer [bron] naar [doel] | Alleen beschikbaar bij geldige doelcategorie. | ExecuteCategoryMigrationButton |
| SCH-BEH-10-04-M01 | Message | Migratiewaarschuwing | Waarschuwing over systeembericht, historie en gevolg van migratie. | — | Informatieve controle vóór actie. | CategoryMigrationWarningMessage |
| SCH-BEH-10-04-MOD01 | MOD | Modal Categorie migreren | Bevestigingspopup voor definitieve migratie. | Categorie migreren | Bevat verplichte reden. | ConfirmCategoryMigrationModal |
| SCH-BEH-10-04-F05 | Field | Modal > Reden van migratie | Verplicht tekstveld voor migratiereden. | Reden van migratie | Wordt vastgelegd in CategoryMigrations. | CategoryMigrationReasonTextarea |
| SCH-BEH-10-04-B02 | Button | Modal > Annuleren | Sluit de modal zonder migratie. | Annuleren | Geen mutatie. | CancelCategoryMigrationButton |
| SCH-BEH-10-04-B03 | Button | Modal > Bevestig migratie | Voert de migratie uit na validatie. | Bevestig migratie | Server-side validatie blijft leidend. | ConfirmCategoryMigrationButton |
11.4.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-BEH-10-04-F01 | Broncategorie | De broncategorie staat al vast | SourceCategoryValue | Categories.Id + Categories.Name | Route-/beheercontext | object/string | Nee | Wordt bepaald door de geopende categorie; mag in deze tab niet worden gewijzigd. |
| SCH-BEH-10-04-FILTER01 | Zoek doelcategorie | Zoek doelcategorie | MigrationTargetSearchInput | Geen persistente databron | User input / runtime state | string | Ja | Filtert mogelijke doelcategorieën; geen opslag. |
| SCH-BEH-10-04-T01 | Doelcategorieën | — | MigrationTargetCategoryList | Categories + TeacherLevelCategories + TeacherLevelCategoryExercises | Samengesteld read model | collection | Nee | Toont alleen actieve bestaande categorieën exclusief broncategorie. |
| SCH-BEH-10-04-F02 | Doelcategoriekaart > Naam | Dynamische categorienaam | MigrationTargetNameValue | Categories.Name | Database | nvarchar(150) | Nee | Doelcategorie moet bestaan en actief selecteerbaar zijn. |
| SCH-BEH-10-04-F03 | Doelcategoriekaart > Docentniveau-impact | Docentniveaus | TargetTeacherLevelCountBadge | TeacherLevelCategories + TeacherLevels | Berekend | int | Nee | Read-only impactinformatie voor doelcategorie. |
| SCH-BEH-10-04-F04 | Doelcategoriekaart > Oefenkoppelingen | Oefenkoppelingen | TargetExerciseLinkCountBadge | TeacherLevelCategoryExercises | Berekend | int | Nee | Read-only impactinformatie voor doelcategorie. |
| SCH-BEH-10-04-S02 | Geselecteerde doelcategorie | Geselecteerde doelcategorie | SelectedMigrationTargetSection | Categories + audit- en impactgegevens | Samengesteld read model | object | Nee | Wordt pas gevuld na doelselectie. |
| SCH-BEH-10-04-B01 | Migreer [bron] naar [doel] | Migreer [bron] naar [doel] | ExecuteCategoryMigrationButton | CategoryMigrations + onderliggende herkoppelacties | Mutatieactie | action | Ja | Opent bevestigingsmodal; alleen beschikbaar bij geldige doelcategorie. |
| SCH-BEH-10-04-F05 | Reden van migratie | Reden van migratie | CategoryMigrationReasonTextarea | CategoryMigrations.Reason | User input | nvarchar(1000) | Ja | Verplicht; mag niet leeg of alleen whitespace zijn. |
| SCH-BEH-10-04-B03 | Bevestig migratie | Bevestig migratie | ConfirmCategoryMigrationButton | CategoryMigrations + CategoryHistory + TeacherLevelCategories + TeacherLevelCategoryExercises + SystemMessages | Mutatieactie | action | Ja | Migreert alleen na server-side conflictcontrole, auditregistratie en autorisatiecontrole. |
11.4.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-BEH-10-04-01 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Categoriemigratie altijd starten vanuit een reeds geopende broncategorie; de broncategorie mag in deze tab niet worden gewijzigd |
REQ-SCH-BEH-10-04-02 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Het systeem mag alleen bestaande actieve doelcategorieën selecteerbaar maken als migratiedoel |
REQ-SCH-BEH-10-04-03 | SRS-CAT-007 AC-CAT-007 | Migreren naar dezelfde categorie blokkeren |
REQ-SCH-BEH-10-04-04 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Vóór definitieve migratie de geselecteerde doelcategorie en de relevante impactinformatie zichtbaar maken |
REQ-SCH-BEH-10-04-05 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Vóór definitieve migratie een bevestigingsmodal tonen met verplichte reden van migratie |
REQ-SCH-BEH-10-04-06 | SRS-NFR-AUD-001 SRS-CAT-007 AC-NFR-AUD-001 AC-CAT-007 | Bij migratie broncategorie, doelcategorie, uitvoerende beheerder, tijdstip en reden vastleggen in CategoryMigrations |
REQ-SCH-BEH-10-04-07 | SRS-NFR-AUD-001 SRS-CAT-007 AC-NFR-AUD-001 AC-CAT-007 | Migraties aanvullend zichtbaar maken in CategoryHistory van zowel bron- als doelcategorie |
REQ-SCH-BEH-10-04-08 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Bij migratie bestaande doelkoppelingen en oefenkoppelingen controleren en mag geen dubbele actieve records blind aanmaken |
REQ-SCH-BEH-10-04-09 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Het systeem mag historische ExerciseRuns niet herschrijven tijdens of na een categoriemigratie |
REQ-SCH-BEH-10-04-10 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Na succesvolle migratie voorkomen dat de broncategorie nog als nieuwe keuze beschikbaar is voor reguliere docentkoppelingen of configuraties |
REQ-SCH-BEH-10-04-11 | SRS-CAT-007 SRS-ADM-006 AC-CAT-007 AC-ADM-006 | Betrokken docenten aan de bronkant via een systeembericht of functioneel gelijkwaardige notificatie kunnen informeren na succesvolle migratie |
11.5 Open Beheer — Geschiedenis
11.5.1 Schermafbeelding

11.5.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-BEH-10-05 |
| Schermnaam | Categorieën — Open beheer — Geschiedenis |
| Doelgroep / onderdeel | Beheerder / Contentbeheer |
| Bronbestand | oefenhub_beheerder_11_categorieen_V1_10.html |
| Mockupversie | V1.10 |
| Screenshotbestand | oefenhub_beheerder_11_categorieen_v1_10_knop_open_beheer_tab_03_geschiedenis.png |
| Processtap / context | De beheerder heeft één categorie geopend en bekijkt de audit- en historiegegevens op de tab Geschiedenis. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie. |
| Opmerkingen | Geschiedenis is read-only en toont gewone categorieaanpassingen én migratiegerelateerde acties. |
| Route / URL-patroon | Functioneel routepatroon: beheer/content/categorieen/:categorieId/beheer/geschiedenis. |
| Autorisatie / vereiste rol-context | Actieve beheerdercontext; server-side afgedwongen. |
| Primair domeinobject / hoofdentiteit | CategoryHistory, aangevuld met CategoryMigrations voor migratiedetails. |
| Gerelateerde schermen / navigatie | Landingspagina, Intro / uitleg, Categorie, Migreren naar. |
| Data-karakter | Read-only append-only auditweergave. |
11.5.3 Functionele beschrijving
Deze tab toont de historie van de geselecteerde categorie als read-only auditoverzicht. Alle relevante beheeracties op categorieniveau worden hier weergegeven, waaronder aanmaak, inhoudelijke wijzigingen, statuswijzigingen, soft-delete/herstelacties en migratiegerelateerde acties.
De tabel toont minimaal datum/tijd, actie, details, uitvoerende actor en reden. Bij inhoudelijke wijzigingen moeten oude en nieuwe waarden reconstrueerbaar zijn. Bij migraties moet zichtbaar zijn of de categorie bron of doel van de migratie was en welke andere categorie bij de migratie betrokken was.
De geschiedenis is append-only. Reguliere functionele processen mogen historyregels niet aanpassen of verwijderen. Deze view ondersteunt reconstructie, supportanalyse en controle achteraf. De tabel mag worden gefilterd of gesorteerd, maar filterstate is alleen runtime state en verandert de onderliggende historie niet.
11.5.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-BEH-10-05-TAB01 | TAB | Tabnavigatie beheer | Tabs binnen Open beheer. | Intro / uitleg, Categorie, Migreren naar, Geschiedenis | Actieve tab: Geschiedenis. | CategoryManagementTabs |
| SCH-BEH-10-05-T01 | Table | Geschiedenistabel | Chronologisch overzicht van categoriehistorie. | Geschiedenis van deze categorie | Read-only auditlijst. | CategoryHistoryTable |
| SCH-BEH-10-05-F01 | Field | Geschiedenis > Datum | Datum en tijdstip van de actie. | DATUM | Lokale weergave van UTC-opslag. | HistoryDateValue |
| SCH-BEH-10-05-F02 | Field | Geschiedenis > Actie | Type beheeractie. | ACTIE | Gesloten ActionType-set. | HistoryActionValue |
| SCH-BEH-10-05-F03 | Field | Geschiedenis > Details | Leesbare wijzigingsdetails. | DETAILS | Gebaseerd op ActionType, OldValue, NewValue en migratiecontext. | HistoryDetailsValue |
| SCH-BEH-10-05-F04 | Field | Geschiedenis > Door | Actor van de wijziging. | DOOR | Gebruiker of systeemactie. | HistoryActorValue |
| SCH-BEH-10-05-F05 | Field | Geschiedenis > Reden | Vastgelegde reden of toelichting. | REDEN | Verplicht bij beheerwijzigingen en migraties. | HistoryReasonValue |
11.5.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-BEH-10-05-T01 | Geschiedenistabel | Geschiedenis van deze categorie | CategoryHistoryTable | CategoryHistory + Users + optioneel CategoryMigrations | Samengesteld read model | collection | Nee | Toont alleen historyregels die bij de geselecteerde categorie horen. |
| SCH-BEH-10-05-F01 | Datum | DATUM | HistoryDateValue | CategoryHistory.ChangedAtUtc | Database | datetime | Nee | UTC-opslag lokaal weergeven. |
| SCH-BEH-10-05-F02 | Actie | ACTIE | HistoryActionValue | CategoryHistory.ActionType | Database / enum | string | Nee | ActionType komt uit gesloten code-/databasewaardeset. |
| SCH-BEH-10-05-F03 | Details | DETAILS | HistoryDetailsValue | CategoryHistory.OldValue + CategoryHistory.NewValue + CategoryMigrations | Samengesteld / afgeleid | string | Nee | Moet voldoende informatie tonen voor reconstructie van oude en nieuwe situatie. |
| SCH-BEH-10-05-F04 | Door | DOOR | HistoryActorValue | CategoryHistory.ChangedByUserId + Users | Database / samengesteld | string | Nee | Actor moet herleidbaar zijn zolang account- en privacyregels dat toestaan. |
| SCH-BEH-10-05-F05 | Reden | REDEN | HistoryReasonValue | CategoryHistory.Reason + CategoryMigrations.Reason | Database | string | Nee | Reden blijft zichtbaar voor beheer- en supportanalyse. |
11.5.6 Schermtrace naar SRS en acceptatiecriteria
De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.
Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-BEH-10-05-01 | SRS-NFR-AUD-001 SRS-CAT-007 AC-NFR-AUD-001 AC-CAT-007 | Per geselecteerde categorie een read-only geschiedenisweergave tonen met minimaal datum/tijd, actie, details, actor en reden |
REQ-SCH-BEH-10-05-02 | SRS-CAT-007 AC-CAT-007 | Inhoudelijke wijzigingen aan naam, kleur en icoon historisch reconstrueerbaar maken met oude en nieuwe waarde |
REQ-SCH-BEH-10-05-03 | SRS-NFR-AUD-001 SRS-CAT-007 AC-NFR-AUD-001 AC-CAT-007 | Statuswijzigingen en soft-delete/herstelacties als categoriehistorie tonen wanneer deze acties plaatsvinden |
REQ-SCH-BEH-10-05-04 | SRS-NFR-AUD-001 SRS-CAT-007 AC-NFR-AUD-001 AC-CAT-007 | Migraties als categoriehistorie zichtbaar maken, inclusief bron-/doelcontext en migratiereden |
REQ-SCH-BEH-10-05-05 | SRS-NFR-AUD-001 SRS-CAT-007 AC-NFR-AUD-001 AC-CAT-007 | CategoryHistory append-only behandelen en reguliere processen mogen historyregels niet aanpassen of verwijderen |
REQ-SCH-BEH-10-05-06 | SRS-AUTH-001 SRS-CAT-007 AC-AUTH-001 AC-CAT-007 | De geschiedenisweergave server-side beperken tot beheerdercontext |
11.6 Technische koppeling
Voor technische uitwerking van categoriebeheer zijn vooral relevant:
- 05 Autorisatie, policies en server-side contextcontrole voor beheerderautorisatie op categorie-inzage en categorieacties.
- 08 Oefencatalogus, niveaus, categorieën, oefeningen en modules voor centrale categorieën, statusvelden, migratiecontext en catalogusgrenzen.
- 09 Oefenmodulecontract en dynamische module-integratie voor samenhang tussen categorieën, modules en concrete oefeningen.
- 17 Readmodels, tellers, badges, caching en materialisatie voor categorietellers, statusoverzichten en beheerbadges.
- 19 Logging, audit, securitylogging en technische foutafhandeling voor geschiedenis, audit en foutafhandeling bij categoriebeheer.
- 24 Frontend, Blazor, routing, state en componentopbouw voor landingspagina, open-beheer-tabs, migratieformulier en tabelstate.