UC-BEH-FEAT-004 — Systeemnotificatie aanmaken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-FEAT-004 |
| Naam | Systeemnotificatie aanmaken |
| Domein | Beheerder / Features en systeemnotificaties |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, database, autorisatiecomponent, beheerlogcomponent |
| Rolcontext | Actieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Site Instellingen > Features > Systeemnotificaties > Actief & gepland |
| Gerelateerde usecases | UC-BEH-FEAT-003, UC-BEH-FEAT-008, UC-GEN-NOT-001 |
| Primaire entiteiten | SiteNotifications, SiteNotificationHistory, Users |
| Secundaire entiteiten / events | SiteNotificationCreated |
| Gerelateerde popups | POP-BEH-NOT-CREATE-CONFIRM, POP-BEH-NOT-SAVED, POP-BEH-NOT-SAVE-FAILED |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een beheerder een nieuwe systeemnotificatie aanmaakt. De notificatie krijgt een doelgroep, type, titel, tekst, startmoment, eventueel eindmoment en displayregel.
De nieuwe notificatie wordt opgeslagen in SiteNotifications. De aanmaak en relevante velden worden auditbaar vastgelegd in SiteNotificationHistory of het notificatiegeschiedeniskanaal.
Een nieuwe notificatie kan direct actief zijn wanneer StartAtUtc bereikt is, of gepland wanneer het startmoment in de toekomst ligt.
Uitgangspunten
- Start- en eindmomenten worden door de backend in UTC opgeslagen.
- De UI toont lokale datum/tijd maar stuurt of converteert veilig naar UTC.
- Eenmalige weergave wordt niet server-side per gebruiker geregistreerd.
- Overlapping met bestaande notificaties is toegestaan.
3. Scope
Deze usecase beschrijft:
- Invoeren van type, doelgroep, titel, tekst, planning en weergaveregel.
- Valideren van toegestane enumwaarden en lengtegrenzen.
- Opslaan van een nieuw SiteNotifications-record.
- Vastleggen van aanmaakhistorie.
- Terugkeren naar het overzicht met de nieuwe notificatie zichtbaar in de juiste tab.
Deze usecase beschrijft niet:
- Nieuwe NotificationType-, AudienceType- of DisplayRule-waarden definiëren.
- Eindgebruikersweergave van de notificatie.
- Mailbox-systeemberichten versturen.
- Popupdefinities aanmaken.
- Bestaande notificaties wijzigen of heractiveren.
3.1 Afbakening met aangrenzende usecases
| Onderdeel | Afbakening |
|---|---|
| UC-BEH-FEAT-003 | Toont de aangemaakte notificatie in de juiste tab. |
| UC-BEH-FEAT-008 | Beschrijft de betekenis van DisplayRule voor beheer en gebruikersweergave. |
| UC-GEN-NOT-001 | Toont relevante actieve notificaties aan gebruikers. |
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 Site Instellingen-route is beschikbaar via de beheerdernavigatie. |
| PRE-004 | Clientstate, querystringwaarden of zichtbare UI-elementen bepalen niet zelfstandig de autorisatie. |
| PRE-005 | De beheerder bevindt zich in de Systeemnotificaties-tab. |
| PRE-006 | De centrale sleutelsets voor AudienceType, NotificationType en DisplayRule zijn beschikbaar. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Er bestaat een nieuw SiteNotifications-record wanneer alle validaties slagen. |
| POST-002 | CreatedAtUtc, CreatedByUserId, UpdatedAtUtc en eventueel UpdatedByUserId zijn gevuld volgens de mutatieregels. |
| POST-003 | De aanmaak is auditbaar vastgelegd. |
| POST-004 | De notificatie wordt in Actief & gepland of na het verstrijken van de einddatum als verlopen getoond afhankelijk van planning. |
| POST-005 | Er is geen gebruikersgerichte seen-status aangemaakt. |
6. Trigger
De usecase start wanneer de beheerder kiest voor het aanmaken van een nieuwe systeemnotificatie en het formulier bevestigt.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Systeemnotificaties-tab | Kiest Nieuwe systeemnotificatie. | De frontend opent een invoerweergave met toegestane velden. | Geen vrije enumwaarden. |
| 2 | Beheerder | Formulier | Vult doelgroep, type, titel, tekst, start, optionele einddatum en weergaveregel in. | De frontend voert basisvalidatie uit. | Title max 50, BodyText max 1000. |
| 3 | Beheerder | Bevestiging | Bevestigt het aanmaken. | De frontend toont bevestigingspopup. | POP-BEH-NOT-CREATE-CONFIRM. |
| 4 | Backend | Autorisatiecomponent | Controleert beheerdercontext opnieuw. | Alleen actieve beheerders mogen opslaan. | Server-side autorisatie. |
| 5 | Backend | Validatie | Valideert AudienceType, NotificationType, DisplayRule en datums. | Ongeldige waarden worden geweigerd. | Centrale sleutelsets. |
| 6 | Backend | Database-transactie | Maakt SiteNotifications-record aan. | CreatedAtUtc en CreatedByUserId worden gevuld. | UTC. |
| 7 | Backend | Historie | Legt aanmaak en velden vast. | De beheeractie is achteraf reconstrueerbaar. | SiteNotificationHistory. |
| 8 | Frontend | Overzicht | Ververst de tab en selecteert de nieuwe notificatie. | De beheerder ziet status actief of gepland. | POP-BEH-NOT-SAVED. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Titel of tekst overschrijdt maximumlengte. | Opslaan wordt geblokkeerd met veldvalidatie. | Inline fout of POP-BEH-NOT-SAVE-FAILED. | Geen. |
| ALT-002 | 5 | EndAtUtc ligt vóór StartAtUtc. | De backend weigert opslag. | POP-BEH-NOT-SAVE-FAILED. | Geen. |
| ALT-003 | 5 | AudienceType is niet toegestaan. | De backend weigert opslag en toont veilige validatiefout. | POP-BEH-NOT-SAVE-FAILED. | Geen. |
| ALT-004 | 5 | DisplayRule is OncePerBrowser. | De notificatie wordt normaal opgeslagen; browsermarkers ontstaan pas aan gebruikerszijde bij tonen. | Niet van toepassing. | SiteNotifications. |
| ALT-005 | 6 | Opslaan of history schrijven faalt. | De transactie wordt teruggedraaid. | POP-BEH-NOT-SAVE-FAILED. | Geen gedeeltelijke mutatie. |
| ALT-006 | 8 | StartAtUtc ligt in de toekomst. | De notificatie verschijnt als gepland en wordt nog niet aan gebruikers getoond. | Niet van toepassing. | Geen extra mutatie. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Een systeemnotificatie is een eigen beheerdomein en geen popup of mailboxbericht. |
| BR-002 | AudienceType, NotificationType en DisplayRule zijn gesloten sleutelsets. |
| BR-003 | Title is maximaal 50 tekens en BodyText maximaal 1000 tekens. |
| BR-004 | StartAtUtc is verplicht; EndAtUtc mag leeg zijn. |
| BR-005 | Datums worden opgeslagen en vergeleken in UTC. |
| BR-006 | Overlapping met andere notificaties is toegestaan. |
| BR-007 | Een nieuwe versie van belangrijke informatie moet als nieuwe notificatie worden aangemaakt wanneer OncePerBrowser-markers opnieuw tonen zouden blokkeren. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | AudienceType moet Public, Authenticated, Teacher, Student, Guardian of Admin zijn. |
| VAL-002 | NotificationType moet Info of Warning zijn. |
| VAL-003 | DisplayRule moet Always of OncePerBrowser zijn. |
| VAL-004 | Title is verplicht en maximaal 50 tekens. |
| VAL-005 | BodyText is verplicht en maximaal 1000 tekens. |
| VAL-006 | EndAtUtc mag alleen gevuld zijn wanneer het na StartAtUtc ligt. |
| VAL-007 | Lokale UI-tijd moet betrouwbaar naar UTC worden geconverteerd. |
11. Datamutaties en events
| ID | Mutatie / event | Toelichting |
|---|---|---|
| MUT-001 | SiteNotifications insert | Nieuw record met doelgroep, type, titel, tekst, start, einddatum en displayregel. |
| MUT-002 | SiteNotificationHistory insert | Aanmaak en relevante veldwaarden worden vastgelegd. |
| MUT-003 | SiteNotificationCreated event | Interne eventregistratie voor audit en eventuele cacheverversing. |
12. Geen datamutaties
| ID | Geen mutatie | Reden |
|---|---|---|
| NO-001 | SystemMessages | Er wordt geen mailbox-systeembericht aangemaakt. |
| NO-002 | PopupDetails | Er wordt geen popupdefinitie aangemaakt. |
| NO-003 | Gebruikersseenstatus | Er wordt geen server-side per-gebruiker-seenrecord aangemaakt. |
| NO-004 | Browsermarkers | Markers ontstaan niet in beheer maar pas in gebruikersbrowser bij tonen. |
| NO-005 | Bestaande notificaties | Bestaande records worden niet aangepast door aanmaak. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Deze usecase verwijst uitsluitend naar PopupKey. Popupteksten, knopteksten, inputlabels en themakeuzes blijven bronhoudend in het popupregister en popup-themes.
| PopupKey | Gebruik |
|---|---|
| POP-BEH-NOT-CREATE-CONFIRM | Bevestigt publicatie of planning van een nieuwe systeemnotificatie. |
| POP-BEH-NOT-SAVED | Terugkoppeling na succesvolle aanmaak. |
| POP-BEH-NOT-SAVE-FAILED | Veilige foutmelding bij validatie- of opslagfout. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft beheervelden en tabs voor systeemnotificaties. |
| Technisch Ontwerp | Technisch Ontwerp: communicatie en systeemnotificaties, readmodels en badges en frontendstate beschrijven de technische uitwerking. Vraagt UTC-conversie, enumvalidatie en transactionele history. |
| Software Requirements Specification | Levert eisen voor aanmaken, validatiegrenzen, doelgroep en displayregel. |
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-FEAT-004-REQ-001 | SRS-ADM-001 SRS-POP-002 AC-ADM-001 AC-POP-002 | Beheerders nieuwe systeemnotificaties kunnen laten aanmaken |
UC-BEH-FEAT-004-REQ-002 | SRS-ADM-001 SRS-POP-002 AC-ADM-001 AC-POP-002 | AudienceType, NotificationType en DisplayRule beperken tot de bekende sleutelsets |
UC-BEH-FEAT-004-REQ-003 | SRS-ADM-001 SRS-NFR-PER-001 AC-ADM-001 AC-NFR-PER-001 | Title en BodyText verplicht en begrensd valideren |
UC-BEH-FEAT-004-REQ-004 | SRS-ADM-001 AC-ADM-001 | StartAtUtc verplicht opslaan in UTC |
UC-BEH-FEAT-004-REQ-005 | SRS-ADM-001 AC-ADM-001 | EndAtUtc leeg kunnen laten en, wanneer gevuld, alleen toestaan na StartAtUtc |
UC-BEH-FEAT-004-REQ-006 | SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-001 AC-NFR-AUD-001 | Aanmaak auditbaar vastleggen |
UC-BEH-FEAT-004-REQ-007 | SRS-AUTH-001 SRS-ADM-001 SRS-POP-001 AC-AUTH-001 AC-ADM-001 AC-POP-001 | Bij aanmaak geen SystemMessage, PopupDetails of server-side seenrecord creëren |