UC-BEH-SYSMSG-002 — Systeemberichttemplate openen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-SYSMSG-002 |
| Naam | Systeemberichttemplate openen |
| Domein | Beheerder / Systeemberichtenbeheer |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, autorisatiecomponent, database, historyservice |
| Rolcontext | Actieve beheerdercontext; overige combinatierollen geven geen extra beheerrechten binnen deze usecase |
| Betrokken schermen | Site Instellingen > Systeemberichten, templateoverzicht, templatedetail, template-editor, templategeschiedenis |
| Gerelateerde usecases | UC-BEH-SYSMSG-001, UC-BEH-SYSMSG-003, UC-BEH-SYSMSG-005, generieke berichtenusecases |
| Primaire entiteiten | SystemMessageTemplates, SystemMessageTemplateHistory |
| Secundaire entiteiten / events | SystemMessageType, ButtonTheme, Users, SystemMessages |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
De beheerder opent één systeemberichttemplate en ziet de stabiele referentienaam, domein, type, onderwerp, tekst en eventuele codegestuurde actieknop.
Systeemberichtenbeheer beheert bestaande systeemberichtsjablonen. Runtime-berichten in mailboxen blijven aparte SystemMessages-records; templatebeheer wijzigt alleen de broninhoud voor toekomstige systeemcommunicatie.
De runtime-foundation voor deze templates kan al door Feature 11 Batch 4 worden gebruikt. Deze beheerusecase bouwt geen nieuwe technische referenties, geen templateversie-FK op runtimeberichten en geen RowVersion-verplichting.
De usecase gebruikt als functionele basis: SystemMessageTemplates voor bestaande codegedreven sjablonen. Dit betekent dat de beheerinterface geen vrije technische constructies introduceert, maar alleen werkt binnen de bestaande sleutelsets, records en codevaste ankers.
De usecase is bedoeld als definitieve functionele beschrijving voor het verdere FO-, TO- en SRS-traject. Daarom wordt expliciet vastgelegd welke gegevens wel worden gelezen of gewijzigd, welke gegevens bewust niet worden gewijzigd en welke validaties altijd server-side moeten plaatsvinden.
Uitgangspunten
- De beheerdercontext is altijd server-side leidend.
- De beheerinterface maakt onderscheid tussen beheerbare inhoud en technische ankers.
- History is onderdeel van het functionele resultaat wanneer een beheerder een wijziging opslaat.
- Zoeken, filteren, contextselectie en detailopenen zijn read-only totdat expliciet wordt opgeslagen.
- Onbekende of gemanipuleerde identifiers worden veilig geblokkeerd.
- De gebruikersinterface toont geen technische stacktraces of interne databasefouten.
- Domeinoverschrijdende bijwerkingen zijn uitgesloten tenzij een usecase die expliciet benoemt.
- De uitwerking volgt de centrale popup-, DRY- en ontwerpbronafspraken.
3. Scope
Deze usecase beschrijft:
- De beheerder opent één systeemberichttemplate en ziet de stabiele referentienaam, domein, type, onderwerp, tekst en eventuele codegestuurde actieknop.
- Server-side controleren dat de gebruiker beheerder is.
- Werken binnen de afbakening van Beheerder / Systeemberichtenbeheer.
- Gebruik van SystemMessageTemplates voor bestaande codegedreven sjablonen.
- Scheiding tussen beheerbare velden en codegedreven of read-only velden.
- Veilige fout-, lege-staat- en blokkadeafhandeling.
- History of auditregistratie wanneer de usecase een wijziging uitvoert.
- Readmodelverversing na selectie, validatie of opslaan.
- Voorkomen dat deze beheeractie onbedoeld andere domeinen wijzigt.
Deze usecase beschrijft niet:
- Nieuwe systeemberichttemplates aanmaken via de GUI.
- Technische referentienaam of codegestuurde actie wijzigen.
- Bestaande verzonden SystemMessages met terugwerkende kracht aanpassen of koppelen aan een verplichte templateversie.
- Systeemberichten uitschakelen via een actief/in-gebruik schakelaar.
- Vrije of onbeperkte placeholderdefinities invoeren.
- Wijzigen van accounts, rollen of sessies buiten de autorisatiecontrole.
- Maken of wijzigen van oefenruns, resultaten, relaties, meldingen of privéberichten.
- Aanpassen van onderliggende code, migraties of seeddefinities via de beheerinterface.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd en heeft een actief intern OefenHub-account. |
| PRE-002 | De gebruiker bezit een actieve beheerderrol. |
| PRE-003 | De beheerder opent de relevante route via Site Instellingen of een onderliggende beheerpagina. |
| PRE-004 | De relevante records of contexten voor Beheerder / Systeemberichtenbeheer zijn aanwezig of kunnen als veilige lege staat worden getoond. |
| PRE-005 | De server-side autorisatiecomponent is beschikbaar. |
| PRE-006 | De database en historytabellen zijn beschikbaar voor read-only of muterende acties. |
| PRE-007 | De frontend gebruikt de actuele serverrespons en niet alleen eerder opgeslagen clientstate. |
| PRE-008 | Eventuele feature- of routebeschikbaarheid is door de applicatieconfiguratie toegestaan. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De usecase "Systeemberichttemplate openen" is uitgevoerd binnen de beheerdercontext. |
| POST-002 | De beheerder ziet een actuele, veilige weergave of een duidelijke blokkade. |
| POST-003 | Read-only acties hebben geen domeinmutatie uitgevoerd. |
| POST-006 | Er zijn geen template-, history- of runtimeberichtrecords gewijzigd. |
| POST-007 | Technische sleutels en codegedreven velden zijn ongewijzigd gebleven. |
| POST-008 | Andere domeinen zoals accounts, meldingen, relaties en oefenruns zijn niet gewijzigd. |
6. Trigger
De usecase start wanneer de beheerder de actie Systeemberichttemplate openen uitvoert binnen het beheeronderdeel Beheerder / Systeemberichtenbeheer.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Overzicht | Selecteert exact één record. | Frontend vraagt detailreadmodel op. | RecordId of Key. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerderrol. | Zonder beheerderrol wordt detail geblokkeerd. | Server-side controle. |
| 3 | Backend | Recordservice | Laadt record en technische metadata. | Detailweergave scheidt read-only en beheerbare velden. | SystemMessageTemplates, SystemMessageTemplateHistory. |
| 4 | Backend | Regelservice | Bepaalt variant-, template- of rendererbeperkingen. | UI krijgt toegestane acties terug. | SystemMessageTemplates voor bestaande codegedreven sjablonen. |
| 5 | Backend | Historyservice | Bepaalt beschikbare historie-indicatie. | Detail toont of historie aanwezig is. | Historytabellen. |
| 6 | Backend | Frontend | Levert detailreadmodel. | Frontend toont volledige detailweergave. | Geen mutatie. |
| 7 | Frontend | Detailpaneel | Toont read-only technische velden. | Sleutels, acties en rendererreferenties worden niet aanpasbaar. | Codegedreven waarden. |
| 8 | Frontend | Detailpaneel | Toont beheerbare velden waar toegestaan. | Bewerkactie is alleen zichtbaar bij geldige variant of template. | Veldrechten. |
| 9 | Beheerder | Detailpaneel | Controleert detail of start bewerken. | Bewerkusecase neemt over bij wijziging. | Geen mutatie. |
| 10 | Systeem | Beperkingscontrole | Blokkeert ongeldige Custom- of technische wijzigingen. | Afwijkende layout blijft codewijziging. | Geen datamutatie. |
| 11 | Frontend | Detailpaneel | Toont foutstaat indien record niet bestaat. | Geen technische details worden getoond. | Veilig. |
| 12 | Systeem | Audit | Registreert geen history door alleen openen. | History ontstaat pas bij wijziging. | Geen mutation. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | De gebruiker heeft geen actieve beheerderrol. | Backend blokkeert de actie en toont geen beheerdata. | Inline toegang geweigerd of veilige redirect. | Geen. |
| ALT-002 | 3 | Het interne account is gedeactiveerd of geanonimiseerd. | De sessiecontext wordt ongeldig gemaakt voor beheeracties. | Accountafhandeling. | Geen. |
| ALT-003 | 4 | Het gevraagde record of blok bestaat niet. | Het systeem toont een veilige niet-beschikbaarafhandeling. | Inline melding. | Geen. |
| ALT-004 | 4 | Het record is door een andere beheerder gewijzigd. | Het systeem vraagt actuele waarden opnieuw op of blokkeert opslaan bij versieconflict. | Inline conflictmelding. | Geen tot bevestigde nieuwe opslag. |
| ALT-005 | 5 | De invoer overschrijdt een validatiegrens. | Opslaan wordt geweigerd en fout wordt bij het veld getoond. | Inline validatie. | Geen. |
| ALT-006 | 5 | Een read-only veld is in de payload gewijzigd. | Backend negeert of weigert de payload en registreert geen wijziging. | Inline foutmelding. | Geen. |
| ALT-007 | 7 | Historyregistratie faalt terwijl de mutatie vereist auditbaar is. | De gehele transactie wordt teruggedraaid. | Veilige foutmelding. | Geen blijvende mutatie. |
| ALT-008 | 7 | De databaseactie faalt technisch. | De wijziging wordt niet gedeeltelijk opgeslagen. | Veilige foutmelding. | Geen of rollback. |
| ALT-009 | 8 | Zoek- of filterresultaat is leeg. | Het overzicht toont een neutrale lege staat. | Niet van toepassing. | Geen. |
| ALT-010 | 9 | De beheerder verlaat de pagina met niet-opgeslagen wijzigingen. | De UI waarschuwt volgens generieke formulierregels wanneer zulke bescherming beschikbaar is. | Generieke verlaten-waarschuwing indien geregistreerd. | Geen. |
| ALT-011 | 5 | Een onbekende placeholder wordt gebruikt. | Opslaan wordt geblokkeerd totdat alleen toegestane placeholders overblijven. | Inline validatie. | Geen. |
| ALT-012 | 6 | De template heeft een actieknop maar de code ondersteunt geen knoptekst. | Knoptekstveld blijft verborgen of read only. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Regel |
|---|---|
| BR-UC-BEH-SYSMSG-002-001 | De referentienaam van een systeemberichttemplate is stabiel en read only. |
| BR-UC-BEH-SYSMSG-002-002 | Nieuwe templates en technische referenties ontstaan via code en database-migraties. |
| BR-UC-BEH-SYSMSG-002-003 | Templatebeheer past geen bestaande verzonden SystemMessages aan. |
| BR-UC-BEH-SYSMSG-002-004 | Alleen toegestane placeholders mogen worden gebruikt en gevuld. |
| BR-UC-BEH-SYSMSG-002-005 | De actieknop is alleen zichtbaar wanneer de achterliggende code dit ondersteunt. |
| BR-UC-BEH-SYSMSG-002-006 | Wijzigingen worden historisch vastgelegd met actor, tijdstip, veld en oude en nieuwe waarde. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Beheerdercontext | De gebruiker moet server-side een actieve beheerderrol hebben. |
| Recordtoegang | Het record, blok of template moet binnen het gevraagde subdomein bestaan. |
| Read-only velden | Technische sleutels, actie-identifiers en codegedreven velden mogen niet via de GUI worden gewijzigd. |
| Concurrency | Opslaan moet de actuele recordversie controleren zodat overschrijven van nieuwere wijzigingen wordt voorkomen. |
| Subject | Maximaal 50 tekens. |
| Text | Maximaal 1000 tekens. |
| ButtonText | Maximaal 20 tekens wanneer een codegestuurde actieknop beschikbaar is. |
| ReferenceName | Moet bestaan en is read only. |
| SystemMessageType | Moet Info, Success, Warning, Error of Critical zijn. |
| Placeholders | Alleen expliciet toegestane variabelen zijn toegestaan. |
| Auditactor | UpdatedByUserId of ChangedByUserId moet naar de uitvoerende beheerder of systeemactor verwijzen. |
| Tijdstip | Wijzigingsmomenten worden in UTC vastgelegd. |
| Rendering | Beheerbare tekst moet veilig worden opgeslagen en gerenderd zonder actieve inhoud. |
| Lege waarden | Verplichte zichtbare velden mogen niet leeg worden opgeslagen wanneer de runtime ze nodig heeft. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| Alle stappen | Database | Niet van toepassing | Deze usecase is read-only en wijzigt geen template-, history- of runtimeberichtrecords. |
Transactionele uitgangspunten
- Er wordt geen wijzigingscommand uitgevoerd.
- Zoeken, filteren, selecteren en raadplegen leveren alleen een readmodel op.
- Er wordt geen historyregel geschreven voor het openen of bekijken van gegevens.
- Bij technische fouten wordt een veilige foutmelding getoond zonder interne details.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Users, Roles en UserRoles | Worden alleen gebruikt voor autorisatiecontrole; rollen of accounts worden niet gewijzigd. |
| Runtime gebruikersdata | Deze beheerusecase wijzigt geen leerling-, docent- of ouder-/voogddata. |
| Tickets en meldingen | Meldingenbeheer blijft in het generieke meldingendomein. |
| ExerciseRuns en resultaten | Oefenruns, geschiedenis en resultaten worden niet aangepast. |
| Relaties en uitnodigingen | Relatiebeheer wordt niet vanuit deze beheerpagina uitgevoerd. |
| SystemMessages | Reeds verzonden mailbox-systeemberichten worden niet met terugwerkende kracht aangepast. |
| Technische template-referenties | Nieuwe referenties en actiecodes ontstaan alleen via code en migraties. |
13. State diagram
Niet van toepassing. Deze usecase wijzigt geen persistente template- of runtimeberichtstatus. Autorisatie, selectie, validatie en historyweergave zijn read-only of controlelogica en vormen geen eigen statusmodel.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
Hoofdsequence
Vervolgsequence
17. Popupverwijzingen
Usecases verwijzen alleen naar PopupKey. Popupteksten, knopteksten, acties, inputvelden en themakeuzes worden centraal beheerd in het popupregister en de popup-themes.
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Geen bevestigings- of invoerpopup in de normale processtroom. | Inline meldingen, lege staten of veilige redirects volstaan. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft welke beheeractie de beheerder kan uitvoeren, welke schermonderdelen zichtbaar zijn en welke grenzen gelden tussen beheerbare inhoud en codegedreven structuur. |
| Technisch Ontwerp | Technisch Ontwerp: communicatie en systeemberichten, databaseontwerp en privacy en retentie beschrijven de technische uitwerking. Beschrijf server-side autorisatie, readmodelopbouw, transacties, historyregistratie en het gebruik van SystemMessageTemplates, SystemMessageTemplateHistory. |
| Software Requirements Specificatie | Beschrijft requirements voor toegangscontrole, validaties, foutafhandeling, immutable history en afbakening van beheerbare velden. |
| Database-informatie | Beschrijft of velden, constraints, historytabellen en sleutelsets voor SystemMessageTemplates, SystemMessageTemplateHistory volledig aansluiten op deze usecase. |
| Ontwerpbronnen en registers | Beschrijven autorisatiematrix en business rules bij waar nodig; deze read-only usecase vraagt geen zelfstandig command- of eventregisteritem. |
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-BEH-SYSMSG-002-001 | SRS-ADM-002 SRS-ADM-001 AC-ADM-002 AC-ADM-001 | De actie uitsluitend toestaan aan gebruikers met een actieve beheerderrol |
REQ-UC-BEH-SYSMSG-002-002 | SRS-AUTH-001 SRS-AUTH-002 SRS-ADM-002 SRS-ADM-001 AC-AUTH-001 AC-AUTH-002 AC-ADM-002 AC-ADM-001 | Alle beheerautorisatie server-side controleren en mag niet vertrouwen op clientstate of routeparameters |
REQ-UC-BEH-SYSMSG-002-003 | SRS-AUTH-004 SRS-ACC-003 SRS-ACC-005 SRS-ADM-001 SRS-NFR-SEC-001 SRS-NFR-ACC-001 AC-AUTH-004 AC-ACC-003 AC-ACC-005 AC-ADM-001 AC-NFR-SEC-001 AC-NFR-ACC-001 | Onbekende, ontbrekende of niet-toegankelijke records veilig afhandelen zonder technische details te tonen |
REQ-UC-BEH-SYSMSG-002-004 | SRS-ADM-001 AC-ADM-001 | Technische sleutels, actiecodes en codegedreven velden als read-only tonen |
REQ-UC-BEH-SYSMSG-002-005 | SRS-RDM-001 SRS-ADM-001 AC-RDM-001 AC-ADM-001 | Zoeken, filteren, selecteren en raadplegen behandelen als read-only acties zonder domeinmutatie |
REQ-UC-BEH-SYSMSG-002-006 | SRS-ADM-001 SRS-POP-004 SRS-NFR-AUD-001 AC-ADM-001 AC-POP-004 AC-NFR-AUD-001 | Bij deze usecase geen SystemMessageTemplates, SystemMessageTemplateHistory of reeds verzonden SystemMessages wijzigen |
REQ-UC-BEH-SYSMSG-002-007 | SRS-MSG-001 SRS-ADM-001 SRS-POP-004 AC-MSG-001 AC-ADM-001 AC-POP-004 | Bestaande systeemberichttemplates beheren zonder reeds verzonden mailbox-systeemberichten met terugwerkende kracht aan te passen |
REQ-UC-BEH-SYSMSG-002-008 | SRS-ADM-001 AC-ADM-001 | Lege staten, blokkades en niet-beschikbaar-situaties gebruikersgericht en zonder technische details weergeven |
REQ-UC-BEH-SYSMSG-002-009 | SRS-ADM-001 SRS-NFR-SEC-001 AC-ADM-001 AC-NFR-SEC-001 | Beheerbare tekst veilig renderen zonder actieve of onveilige inhoud |
REQ-UC-BEH-SYSMSG-002-010 | SRS-MSG-007 SRS-ADM-001 SRS-POP-004 AC-MSG-007 AC-ADM-001 AC-POP-004 | De usecase "Systeemberichttemplate openen" uitvoeren volgens de afbakening van het subdomein Beheerder / Systeemberichtenbeheer |