UC-OVG-KIND-005 — Kind ontkoppelen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-OVG-KIND-005 |
| Naam | Kind ontkoppelen |
| Domein | Ouder/voogd / Kinderen en koppelingen |
| Primaire actor | Ouder/voogd |
| Secundaire actor(en) | Frontend, backend, database, berichtensysteem, relatie-audit |
| Rolcontext | Actieve ouder-/voogdcontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Kinderen, Kindinformatie, Ontkoppelbevestiging |
| Gerelateerde usecases | UC-OVG-KIND-003, UC-OVG-KIND-004, UC-OVG-KIND-006, UC-GEN-REL-004 |
| Primaire entiteiten | UserRelationships, RelationshipEvents, SystemMessages |
| Secundaire entiteiten / events | GuardianStudentRelationshipDeactivated, SystemMessageCreated |
| Gerelateerde popups | OVG_RELATION_DISCONNECT_CONFIRM, OVG_RELATION_DISCONNECT_SUCCESS, OVG_RELATION_DISCONNECT_ERROR |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
De usecase beschrijft hoe een ouder/voogd een actieve relatie met een gekoppeld kind beëindigt. De ouder/voogd mag de ouder-/voogdrelatie direct beëindigen na bevestiging. De relatie wordt niet hard verwijderd, maar administratief gedeactiveerd.
Na bevestiging wordt de relatie beëindigd, auditbaar vastgelegd en wordt het kind via een systeembericht geïnformeerd. De ontkoppeling verwijdert geen oefengeschiedenis en wijzigt geen exercise runs.
Uitgangspunten
- Een ouder/voogd mag een ouder-/voogdrelatie direct beëindigen.
- Ontkoppelen gebruikt soft-deactivation en geen hard delete.
- Ontkoppelen vereist bevestiging.
- De relatiehistorie blijft auditbaar.
- Ontkoppelen verwijdert geen afgeronde runs of geschiedenis.
3. Scope
Deze usecase beschrijft:
- Starten van ontkoppeling vanuit geselecteerd kind.
- Tonen van bevestigingspopup via PopupKey.
- Server-side controleren dat de relatie actief is.
- Soft-deactivation van UserRelationships.
- Vastleggen van relatie-event.
- Triggeren van communicatie naar het kind.
Deze usecase beschrijft niet:
- Relatie-uitnodiging afwijzen of intrekken.
- Ontkoppelverzoek door leerling laten goedkeuren.
- Oefengeschiedenis verwijderen.
- Identity-provideraccount wijzigen.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Generiek / Relaties | Relatie-uitnodigingen, acceptatie en algemene relatievorming blijven bronhoudend in het generieke relatiedomein. |
| Generiek / Berichten | Systeemberichten en leesstatussen blijven bronhoudend in het centrale berichtendomein. |
| Leerling | De leerling blijft eigenaar van eigen oefenuitvoering; ouder/voogd kan niet namens het kind oefenen. |
| Docent | Docentautorisaties en docentresultaatinzage blijven begrensd door docentcontext; ouder-/voogdcontext gebruikt eigen relatiegrens. |
4. Pre-condities
| ID | Waarde |
|---|---|
| 001 | Een kind is geselecteerd. |
| 002 | Er bestaat een actieve ouder-/voogdrelatie tussen ouder/voogd en kind. |
| 003 | De actor bevindt zich aan de ouder-/voogdkant van de relatie. |
| 004 | De bevestigingspopup is beschikbaar via PopupKey. |
5. Post-condities
| ID | Waarde |
|---|---|
| 001 | UserRelationships.IsActive is false voor de beëindigde relatie. |
| 002 | Deactiveringstijdstip en actor zijn vastgelegd. |
| 003 | Een relatie-event is vastgelegd. |
| 004 | Het kind wordt via systeembericht geïnformeerd of communicatie wordt veilig als fout afgehandeld. |
| 005 | Oefengeschiedenis blijft bestaan. |
6. Trigger
De usecase start wanneer de ouder/voogd de betreffende ouder-/voogdroute opent of de beschreven actie uitvoert binnen de actieve ouder-/voogdcontext.
7. Normale processtroom
| Stap | Actor / component | Actie | Resultaat | Data / controle |
|---|---|---|---|---|
| 1 | Ouder/voogd | Kiest Ontkoppel leerling | Frontend opent bevestigingspopup | PopupKey |
| 2 | Ouder/voogd | Bevestigt ontkoppeling | Frontend stuurt verzoek naar backend | Bevestiging |
| 3 | Backend | Controleert relatie en actor | Ontkoppeling is toegestaan | UserRelationships |
| 4 | Database | Deactiveert relatie | IsActive = false en deactivatievelden gevuld | UserRelationships |
| 5 | Database | Legt relatie-event vast | Ontkoppeling is auditbaar | RelationshipEvents |
| 6 | Backend | Maakt communicatie naar kind aan | Systeembericht of vervolgafhandeling gestart | SystemMessages |
| 7 | Frontend | Toont resultaat | Kind verdwijnt uit actieve lijst | Viewmodel |
7.1 Scherm- en routegedrag
- De pagina Kinderen toont een compacte lijst en gebruikt selectie als bewuste tussenstap.
- Vervolgacties blijven uitgeschakeld totdat een kind is geselecteerd.
- Bij wijziging van relatie- of autorisatiestatus wordt oude clientstate ongeldig gemaakt.
- De gebruiker krijgt geen docentgerichte filters of beheeracties te zien.
8. Alternatieve en exceptionele processtromen
| ID | Waarde |
|---|---|
| 001 | Gebruiker annuleert bevestiging: er wordt niets gewijzigd. |
| 002 | Relatie is al beëindigd: backend voert geen tweede deactivering uit en toont veilige afhandeling. |
| 003 | Actor is niet ouder-/voogdkant: ontkoppeling wordt geweigerd. |
| 004 | Systeembericht kan niet worden aangemaakt: relatie blijft beëindigd; fout wordt gelogd en communicatieherstel wordt afgehandeld volgens berichtenbeleid. |
| 005 | Kind zit actief in oefening: relatie wordt beëindigd; het systeembericht blijft via het berichtenoverzicht beschikbaar wanneer directe realtime zichtbaarheid ontbreekt. |
8.1 Afhandeling van verouderde of ongeldige clientstate
- De backend herhaalt de autorisatiecontrole bij iedere vervolgactie.
- Oude selectie-, route- of browsercontext wordt genegeerd wanneer de actuele server-side context geen toegang meer geeft.
- De frontend mag verouderde weergave herstellen door opnieuw het actuele viewmodel op te vragen.
9. Business rules
| ID | Waarde |
|---|---|
| 001 | Een ouder/voogd mag een ouder-/voogdrelatie direct beëindigen. |
| 002 | Ontkoppelen gebruikt soft-deactivation en geen hard delete. |
| 003 | Ontkoppelen vereist bevestiging. |
| 004 | De relatiehistorie blijft auditbaar. |
| 005 | Ontkoppelen verwijdert geen afgeronde runs of geschiedenis. |
9.1 Readmodel- en tellerdefinities
| Waarde | Definitie | Uitsluitingen / grenzen |
|---|---|---|
| Relatiestatus | UserRelationships.IsActive. | Wordt false na bevestigde ontkoppeling. |
| Auditregel | RelationshipEvent of gelijkwaardige relatie-audit. | Actor, rolcontext en tijdstip blijven herleidbaar. |
| Communicatiestatus | Systeembericht aan het kind. | Communicatie herstelt of wijzigt de relatie niet. |
9.2 Autorisatie- en privacygrenzen
- De zichtbare dataset wordt altijd server-side beperkt tot de actieve ouder-/voogdcontext.
- Persoonsgegevens van kinderen worden alleen getoond zolang er een actieve ouder-/voogdrelatie bestaat.
- Historische oefenresultaten worden gelezen binnen de toegestane context, maar niet gewijzigd door raadplegen of samenvatten.
10. Datavalidatie
| ID | Waarde |
|---|---|
| 001 | Relatie moet bestaan. |
| 002 | Relatie moet actief zijn. |
| 003 | RelationshipType moet ouder-/voogdrelatie zijn. |
| 004 | Ingelogde gebruiker moet de ouder-/voogdpartij zijn. |
| 005 | Kind-ID in verzoek moet overeenkomen met het relatie-record. |
11. Datamutaties en events
| ID | Waarde |
|---|---|
| 001 | UserRelationships.IsActive wordt op false gezet. |
| 002 | UserRelationships.DeactivatedAtUtc en DeactivatedByUserId worden gevuld. |
| 003 | RelationshipEvents krijgt een ontkoppel-event. |
| 004 | SystemMessages krijgt een bericht aan het kind, uitgewerkt in UC-OVG-KIND-006. |
12. Geen datamutaties
| ID | Waarde |
|---|---|
| 001 | Users worden niet verwijderd. |
| 002 | ExerciseRuns en resultaten blijven ongewijzigd. |
| 003 | TeacherLevelAuthorizations worden niet automatisch gewijzigd door ouder-/voogdontkoppeling. |
| 004 | PrivateMessageThreads worden niet verwijderd. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik | Opmerking |
|---|---|---|
| OVG_RELATION_DISCONNECT_CONFIRM | Gebruik binnen deze usecase. | Tekst, knoppen, acties en eventuele inputdefinitie blijven bronhoudend in het popupregister. |
| OVG_RELATION_DISCONNECT_SUCCESS | Gebruik binnen deze usecase. | Tekst, knoppen, acties en eventuele inputdefinitie blijven bronhoudend in het popupregister. |
| OVG_RELATION_DISCONNECT_ERROR | Gebruik binnen deze usecase. | Tekst, knoppen, acties en eventuele inputdefinitie blijven bronhoudend in het popupregister. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Aspect | Afleiding |
|---|---|
| FO/TO/SRS-001 | Ontkoppelen toont een waarschuwing. |
| FO/TO/SRS-002 | Bij bevestiging ontvangt de leerling een systeembericht. |
| FO/TO/SRS-003 | Ouder/voogd kan de relatie direct beëindigen. |
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-OVG-KIND-005-001 | SRS-REL-003 SRS-REL-006 SRS-GUA-003 SRS-GUA-004 AC-REL-003 AC-REL-006 AC-GUA-003 AC-GUA-004 | Ouder-/voogdontkoppeling pas uitvoeren na bevestiging |
REQ-UC-OVG-KIND-005-002 | SRS-REL-001 SRS-GUA-001 AC-REL-001 AC-GUA-001 | De relatie soft-deactiveren in plaats van hard verwijderen |
REQ-UC-OVG-KIND-005-003 | SRS-AUTH-001 SRS-REL-003 SRS-REL-006 SRS-GUA-003 SRS-GUA-004 SRS-NFR-AUD-001 AC-AUTH-001 AC-REL-003 AC-REL-006 AC-GUA-003 AC-GUA-004 AC-NFR-AUD-001 | Actor, rolcontext en tijdstip van ontkoppeling vastleggen |
REQ-UC-OVG-KIND-005-004 | SRS-REL-003 SRS-REL-006 SRS-MSG-001 SRS-GUA-003 SRS-GUA-004 AC-REL-003 AC-REL-006 AC-MSG-001 AC-GUA-003 AC-GUA-004 | Het kind informeren via systeembericht na ontkoppeling |
REQ-UC-OVG-KIND-005-005 | SRS-REL-003 SRS-REL-006 SRS-GUA-003 SRS-GUA-004 SRS-NFR-AUD-001 AC-REL-003 AC-REL-006 AC-GUA-003 AC-GUA-004 AC-NFR-AUD-001 | Oefengeschiedenis niet verwijderen door ouder-/voogdontkoppeling |