UC-BEH-CAT-007 — Categoriegeschiedenis bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-CAT-007 |
| Naam | Categoriegeschiedenis bekijken |
| Domein | Beheerder / Categorieën beheren |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, database, autorisatiecomponent, categoriebeheercomponent, historiecomponent |
| Rolcontext | Actieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Content > Categorieën beheren |
| Gerelateerde usecases | UC-BEH-CAT-001, UC-BEH-CAT-002, UC-BEH-CAT-003, UC-BEH-CAT-004, UC-BEH-CAT-005, UC-BEH-CAT-006 |
| Primaire entiteiten | Categories, CategoryHistory, CategoryMigrations, TeacherLevelCategories, TeacherLevelCategoryExercises |
| Secundaire entiteiten / events | Users, ExerciseRuns, SharedExercises, categoriebeheer-readmodels |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een beheerder de beheerhistorie van een centrale categorie bekijkt. De geschiedenis toont relevante beheeracties op categorieniveau, waaronder aanmaak, inhoudelijke wijzigingen, statuswijzigingen en migratiegerelateerde acties.
CategoryHistory is de leesbare auditlaag voor categoriewijzigingen. Migraties worden in de geschiedenis zichtbaar gemaakt als gewone geschiedenisregels op bron- en doelcategorie, terwijl CategoryMigrations de compacte bron-doel-registratie bevat.
Het bekijken van geschiedenis is read-only en wijzigt geen categorie, koppeling, migratie of auditrecord.
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:
- Tonen van CategoryHistory voor één categorie.
- Tonen van actiecode, oude waarde, nieuwe waarde, reden, actor en datum/tijd.
- Tonen van migratiegerelateerde regels op bron- en doelcategorie.
- Veilige actorweergave bij geanonimiseerde of inactieve beheerders.
- Pagineren of compact tonen van grotere historysets.
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.
- Historyregels aanpassen of verwijderen.
- Zoeken in globale beheerlogs buiten deze categoriecontext.
- Volledige migratietabel als los beheerlogdomein aanbieden.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Docent / Oefenaanbod | Docenten koppelen categorieën aan niveaus en maken waar toegestaan nieuwe centrale categorieën aan; beheer past de centrale identiteit en onderhoudsacties toe. |
| Beheerder / Docentondersteuning | Support op concrete docentstructuren mag categoriegebruik inspecteren, maar centrale categorie-identiteit wordt hier beheerd. |
| Leerling / Oefenaanbod | Leerlingen zien alleen afgeleide toegankelijke categorieën; deze bundel bepaalt niet zelfstandig leerlingtoegang. |
| Database-informatie | Categories, CategoryHistory en CategoryMigrations blijven de technische bron voor centrale categorie-identiteit en audit. |
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd in OefenHub. |
| PRE-002 | De backend heeft server-side vastgesteld dat de gebruiker een actieve beheerderrol heeft. |
| PRE-003 | De beheerder bevindt zich binnen de beheeromgeving via Content > Categorieën beheren. |
| PRE-004 | De pagina gebruikt actuele serverdata; clientstate, routeparameters of verborgen formuliervelden bepalen geen autorisatie of categorie-identiteit. |
| PRE-005 | De beheerder heeft de detailweergave van één categorie geopend. |
| PRE-006 | De categorie bestaat of is historisch raadpleegbaar. |
| PRE-007 | CategoryHistory bevat nul of meer regels voor deze categorie. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De beheerder ziet de categoriegeschiedenis of een lege geschiedenisstaat. |
| POST-002 | Geen historyrecord is gewijzigd of aangemaakt. |
| POST-003 | Geen categoriegegevens zijn gewijzigd. |
| POST-004 | Migratiegerelateerde historie is herkenbaar als bron- of doelactie. |
| POST-005 | De getoonde datum/tijd is gebaseerd op UTC-opslag en lokale weergave. |
6. Trigger
De usecase start wanneer de beheerder binnen categoriebeheer het onderdeel Geschiedenis opent.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Beheerweergave | Opent Geschiedenis. | De frontend vraagt historyregels op. | CategoryId uit detailcontext. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen beheerder mag categoriehistory bekijken. | Server-side autorisatie. |
| 3 | Backend | Historiequery | Valideert CategoryId. | Ook soft-deleted categorieën kunnen history tonen. | Categories.Id. |
| 4 | Backend | Historiequery | Laadt CategoryHistory-regels. | Regels worden aflopend of functioneel chronologisch gesorteerd. | CategoryHistory. |
| 5 | Backend | Actorweergave | Verrijkt actorinformatie veilig. | Geanonimiseerde of inactieve beheerders worden zonder actuele persoonsgegevens weergegeven. | Users. |
| 6 | Frontend | Geschiedenis | Toont historyregels met actie, oude waarde, nieuwe waarde, reden, actor en tijdstip. | De beheerder kan reconstructie uitvoeren. | Read-only history. |
| 7 | Frontend | Paginering | Toont compacte navigatie indien nodig. | Pagineren wijzigt geen history. | Readmodel. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Gebruiker is geen beheerder. | De backend weigert toegang. | Niet van toepassing. | Geen. |
| ALT-002 | 3 | Categorie bestaat niet meer als normaal record maar heeft historische verwijzingen. | De history wordt getoond wanneer server-side reconstructie veilig mogelijk is. | Niet van toepassing. | Geen. |
| ALT-003 | 4 | Er zijn geen historyregels. | De tab toont een lege staat. | Niet van toepassing. | Geen. |
| ALT-004 | 5 | Actor is geanonimiseerd. | De UI toont een veilige geanonimiseerde actorweergave. | Niet van toepassing. | Geen. |
| ALT-005 | 6 | OldValue of NewValue is leeg. | De UI toont dit als niet van toepassing zonder de betekenis te wijzigen. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | CategoryHistory is append-only en mag niet via de GUI worden aangepast of verwijderd. |
| BR-002 | Een historyregel moet de beheeractie, actor, tijdstip en reden zichtbaar maken wanneer deze is vastgelegd. |
| BR-003 | Migratieacties zijn zichtbaar als gewone geschiedenisregels op categorieniveau. |
| BR-004 | CategoryMigrations vervangt CategoryHistory niet; het vult de migratiereconstructie aan. |
| BR-005 | Geanonimiseerde actoren mogen geen actuele persoonsgegevens tonen. |
| BR-006 | Paginering, sortering of filtering van history is readmodelgedrag. |
| BR-007 | Geschiedenis toont beheeracties op categorieniveau en is geen zoekfunctie over alle docentstructuren. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | CategoryId is verplicht en server-side gevalideerd. |
| VAL-002 | ActionType wordt alleen weergegeven wanneer het een bekende gesloten waarde is; onbekende waarden worden veilig als technische auditwaarde getoond. |
| VAL-003 | ChangedAtUtc wordt als UTC opgeslagen en lokaal weergegeven. |
| VAL-004 | Reason wordt weergegeven zoals opgeslagen, met veilige encoding. |
| VAL-005 | OldValue en NewValue worden veilig geëncodeerd om XSS te voorkomen. |
| VAL-006 | Actorweergave mag niet vertrouwen op client-aangeleverde gebruikersnamen. |
11. Datamutaties en events
| ID | Mutatie / event | Toelichting |
|---|---|---|
| MUT-001 | Geen functionele mutatie | Geschiedenis bekijken is read-only. |
| MUT-002 | Geen domeinevent | Het bekijken van CategoryHistory schrijft geen nieuw CategoryHistory- of ander auditrecord. |
12. Geen datamutaties
| ID | Geen mutatie | Reden |
|---|---|---|
| NO-001 | CategoryHistory | Regels worden niet aangepast of verwijderd. |
| NO-002 | CategoryMigrations | Migratierecords worden niet aangepast. |
| NO-003 | Categories | Categorie-identiteit en status blijven ongewijzigd. |
| NO-004 | TeacherLevelCategories | Koppelingen blijven ongewijzigd. |
| NO-005 | Users | Actorinformatie wordt alleen gelezen. |
13. State diagram
Niet van toepassing. Deze usecase toont append-only historie en wijzigt geen statusobject. Filteren, sorteren en pagineren zijn readmodelgedrag.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Niet van toepassing.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Categoriebeheer toont geschiedenis met aanmaak, wijzigingen, status en migratieacties. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, databaseontwerp en historie en background jobs beschrijven de technische uitwerking. CategoryHistory is append-only en wordt read-only ontsloten in categoriebeheer. |
| Software Requirements Specification | SRS moet historyweergave, veilige actorweergave en XSS-veilige waardeweergave vastleggen. |
| Database | Gebruikt CategoryHistory en waar nodig CategoryMigrations als reconstructiebron. |
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 |
|---|---|---|
UC-BEH-CAT-007-REQ-001 | SRS-CAT-001 SRS-ADM-001 AC-CAT-001 AC-ADM-001 | Per categorie een beheerhistorie kunnen tonen |
UC-BEH-CAT-007-REQ-002 | SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-001 AC-NFR-AUD-001 | Per historyregel actie, oude waarde, nieuwe waarde, reden, actor en tijdstip tonen wanneer aanwezig |
UC-BEH-CAT-007-REQ-003 | SRS-CAT-004 SRS-ADM-006 SRS-ADM-001 AC-CAT-004 AC-ADM-006 AC-ADM-001 | Migratiegerelateerde acties zichtbaar maken op bron- en doelcategorie |
UC-BEH-CAT-007-REQ-004 | SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-001 AC-NFR-AUD-001 | CategoryHistory niet wijzigen bij raadplegen |
UC-BEH-CAT-007-REQ-005 | SRS-ADM-003 SRS-ADM-001 SRS-NFR-SEC-001 SRS-NFR-PRV-001 AC-ADM-003 AC-ADM-001 AC-NFR-SEC-001 AC-NFR-PRV-001 | Geanonimiseerde of inactieve actoren veilig weergeven |
UC-BEH-CAT-007-REQ-006 | SRS-ADM-001 SRS-NFR-SEC-001 AC-ADM-001 AC-NFR-SEC-001 | Opgeslagen tekstwaarden veilig encoden bij weergave |
UC-BEH-CAT-007-REQ-007 | SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-001 AC-NFR-AUD-001 | Een lege historyset duidelijk en zonder fout tonen |
UC-BEH-CAT-007-REQ-008 | SRS-RDM-001 SRS-RDM-008 SRS-ADM-001 SRS-NFR-AUD-001 SRS-NFR-PER-001 AC-RDM-001 AC-RDM-008 AC-ADM-001 AC-NFR-AUD-001 AC-NFR-PER-001 | Historysortering en paginering als readmodelgedrag behandelen |