UC-DOC-SAM-005 — Eigenaarschap overdragen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-SAM-005 |
| Naam | Eigenaarschap overdragen |
| Domein | Docent |
| Subdomein | Samenwerking, collaborators en eigenaarschap |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem, ontvangende docent-collaborator |
| Rolcontext | Docentcontext als actuele eigenaar van het geselecteerde niveau |
| Betrokken schermen | Docent - Oefenaanbod, niveau-detail, Eigenaarschap overdragen |
| Gerelateerde usecases | UC-DOC-SAM-001, UC-DOC-SAM-002, UC-DOC-SAM-004, UC-DOC-SAM-006, UC-DOC-SAM-007, UC-DOC-AANB-002, UC-DOC-AANB-004 |
| Primaire entiteiten | Levels, LevelCollaborators, Users |
| Secundaire entiteiten / events | LevelOwnershipHistory, LevelCollaboratorHistory, SystemMessages, auditcontext, reden van overdracht |
| Gerelateerde popups | POP-DOC-SAM-TRANSFER-OWNERSHIP-CONFIRM, POP-DOC-SAM-TRANSFER-OWNERSHIP-SUCCESS, POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED |
| Popupregister | Centrale popupregisterregel(en) op PopupKey-niveau. |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe de actuele eigenaar van een niveau het eigenaarschap overdraagt aan een andere docent die al actieve collaborator van dat niveau is.
Eigenaarschap is een zwaardere bevoegdheid dan collaboratorrechten. De eigenaar beheert de niveaukern, collaborators en overdracht van eigenaarschap.
De overdracht is bewust beperkt tot bestaande actieve collaborators. Daardoor ontstaat geen impliciete docent-docentrelatie, geen nieuwe collaboratorroute en geen toegang voor willekeurige docenten buiten de samenwerkingscontext.
Na overdracht wordt de nieuwe eigenaar direct leidend voor niveaubeheer. De oude eigenaar blijft standaard als actieve collaborator aan het niveau gekoppeld, tenzij daarna een afzonderlijke ontkoppeling plaatsvindt.
3. Scope
Binnen scope
- Openen van de overdrachtspagina voor een geselecteerd niveau.
- Tonen van de actuele eigenaar en beschikbare actieve collaborators als kandidaten.
- Kiezen van precies één nieuwe eigenaar uit de actieve collaboratorlijst.
- Vastleggen van een verplichte reden van overdracht.
- Server-side valideren dat actor actuele eigenaar is en kandidaat actieve collaborator is.
- Wijzigen van
Levels.OwnerUserIdnaar de gekozen nieuwe eigenaar. - Borgen dat de oude eigenaar als collaborator actief blijft of wordt gemaakt.
- Auditbaar vastleggen van de overdracht en informeren van betrokken docenten.
Buiten scope
- Een docent-docentrelatie aanmaken.
- Een willekeurige docent buiten de actieve collaboratorlijst als eigenaar kiezen.
- Collaborators toevoegen of verwijderen als onderdeel van deze flow.
- Leerlingautorisaties wijzigen.
- Oefeningen, categorieën of niveau-inhoud inhoudelijk wijzigen.
- Beheerder-forceeracties vanuit docentondersteuning.
- Automatisch overdragen bij accountverwijdering; dat hoort bij account-lifecycle.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd. |
| PRE-002 | De gebruiker heeft een actieve docentrol. |
| PRE-003 | Er is een geselecteerd niveau. |
| PRE-004 | De gebruiker is de actuele eigenaar van het geselecteerde niveau. |
| PRE-005 | Het niveau bestaat en is niet logisch verwijderd. |
| PRE-006 | Er is ten minste één actieve collaborator beschikbaar als kandidaat voor overdracht. |
| PRE-007 | De overdrachtsactie is beschikbaar binnen de docentcontext. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Het niveau heeft een nieuwe actuele eigenaar. |
| POST-002 | De oude eigenaar is als actieve collaborator aan hetzelfde niveau gekoppeld of gebleven. |
| POST-003 | De overdracht is auditbaar vastgelegd met actor, oude eigenaar, nieuwe eigenaar, tijdstip en reden. |
| POST-004 | Betrokken docenten kunnen via systeemcommunicatie of samenwerkingscontext geïnformeerd worden. |
| POST-005 | Leerlingautorisaties, relaties, oefeningen en bestaande geschiedenis blijven inhoudelijk ongewijzigd. |
6. Trigger
De actuele eigenaar kiest vanuit de niveaucontext de actie Eigenaarschap overdragen.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Niveau-detail | Opent Eigenaarschap overdragen | Systeem laadt overdrachtscontext | Levels.Id |
| 2 | Systeem | Backend autorisatie | Controleert actieve docentrol en eigenaarstatus | Alleen actuele eigenaar mag verder | UserRoles, Levels.OwnerUserId |
| 3 | Systeem | Collaborator-readmodel | Haalt actieve collaborators op | Toont kandidatenlijst | LevelCollaborators.IsActive = true |
| 4 | Docent | Eigenaarschap overdragen | Selecteert nieuwe eigenaar | Systeem markeert kandidaat | CollaboratorUserId |
| 5 | Docent | Eigenaarschap overdragen | Vult reden van overdracht in | Systeem valideert verplichte reden | Reason |
| 6 | Docent | Eigenaarschap overdragen | Bevestigt overdracht | Systeem start server-side overdracht | Command TransferLevelOwnership |
| 7 | Systeem | Backend autorisatie | Valideert opnieuw eigenaarstatus en kandidaatstatus | Voorkomt verouderde UI-state | Concurrency |
| 8 | Systeem | Database | Wijzigt eigenaar van niveau | Levels.OwnerUserId wordt nieuwe eigenaar | Levels |
| 9 | Systeem | Database | Borgt oude eigenaar als collaborator | Oude eigenaar behoudt bewerktoegang als collaborator | LevelCollaborators |
| 10 | Systeem | Audit | Legt overdracht vast | Historyregel en event ontstaan | LevelOwnershipHistory, event |
| 11 | Systeem | Communicatie | Maakt informatieve systeemberichten voor betrokkenen | Betrokken docenten worden geïnformeerd | SystemMessages |
| 12 | Frontend | Niveau-detail | Toont bijgewerkte niveaucontext | Nieuwe eigenaar is zichtbaar | Readmodel |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Gebruiker is geen actuele eigenaar | Systeem blokkeert de overdracht en toont toegang geweigerd of niet-beschikbaarafhandeling. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-002 | 3 | Er zijn geen actieve collaborators | Systeem toont dat overdracht niet mogelijk is totdat eerst een collaborator is toegevoegd. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-003 | 4 | Geselecteerde kandidaat is niet langer actieve collaborator | Systeem weigert overdracht bij server-side validatie. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-004 | 5 | Reden ontbreekt of is te kort | Systeem blokkeert bevestigen en vraagt een geldige reden. | Niet van toepassing | Geen |
| ALT-005 | 7 | Eigenaarstatus is gewijzigd tussen laden en bevestigen | Systeem weigert de overdracht wegens verouderde context. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-006 | 8 | Databaseconflict of technische fout | Systeem rolt de transactie terug en behoudt bestaande eigenaar. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen |
| ALT-007 | 11 | Systeembericht kan niet worden aangemaakt | Systeem rondt de overdracht niet als volledig geslaagd af zolang verplichte communicatie niet consistent is verwerkt. | POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Geen blijvende deelmutatie |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Alleen de actuele eigenaar van een niveau mag eigenaarschap overdragen. |
| BR-002 | Een nieuwe eigenaar moet een actieve collaborator van hetzelfde niveau zijn. |
| BR-003 | Eigenaarschap mag niet rechtstreeks worden overgedragen aan een willekeurige docent buiten de collaboratorcontext. |
| BR-004 | Een reden van overdracht is verplicht. |
| BR-005 | Na overdracht blijft de oude eigenaar standaard actieve collaborator van het niveau. |
| BR-006 | Overdracht wijzigt geen leerlingautorisaties en geen docent-leerlingrelaties. |
| BR-007 | Overdracht wijzigt geen bestaande oefenruns, resultaten of geschiedenis. |
| BR-008 | De overdracht wordt auditbaar vastgelegd met oude eigenaar, nieuwe eigenaar, actor, tijdstip en reden. |
| BR-009 | Server-side validatie is leidend; de kandidatenlijst in de UI is geen autorisatiebewijs. |
| BR-010 | Een overdracht mag niet leiden tot een niveau zonder eigenaar. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| LevelId | Moet bestaan en in docentcontext toegankelijk zijn. |
| ActorUserId | Moet gelijk zijn aan actuele Levels.OwnerUserId op het moment van bevestigen. |
| NewOwnerUserId | Moet verwijzen naar een actieve collaborator van hetzelfde niveau. |
| Reason | Verplicht, niet leeg en binnen de tekstlimieten van de applicatie. |
| Concurrency | Eigenaarstatus en collaboratorstatus worden direct vóór mutatie opnieuw gecontroleerd. |
| OldOwnerCollaborator | Na overdracht moet de oude eigenaar als actieve collaborator kunnen blijven bestaan of worden aangemaakt als historisch herleidbaar record. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 8 | Update | Levels | OwnerUserId wordt gewijzigd van oude eigenaar naar nieuwe eigenaar; UpdatedByUserId en UpdatedAtUtc worden bijgewerkt. |
| 9 | Create/Update | LevelCollaborators | Oude eigenaar wordt als actieve collaborator geborgd wanneer dat nog niet bestaat. |
| 10 | Create | LevelOwnershipHistory | Overdracht wordt vastgelegd met oude eigenaar, nieuwe eigenaar, actor, tijdstip en reden. |
| 10 | Event | LevelOwnershipTransferred | Domeinevent voor audit en vervolgverwerking. |
| 11 | Create | SystemMessages | Informatieve systeemberichten aan oude en nieuwe eigenaar. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| UserRelationships | Docent-docentrelaties worden niet aangemaakt of gewijzigd. |
| StudentLevelAuthorizations | Leerlingtoegang blijft gelijk. |
| Exercises | Oefeningen worden niet gewijzigd. |
| ExerciseRuns | Resultaten en lopende runs worden niet aangepast. |
| Roles/UserRoles | Rollen worden niet gewijzigd. |
| LiveViewAudit | Er start of eindigt geen live meekijksessie door eigendomsoverdracht. |
13. State diagram
Eigenaarschap is geen los statusobject, maar de eigenaarreferentie van een niveau wijzigt wel van oude eigenaar naar nieuwe eigenaar. De oude eigenaar blijft daarna als collaborator actief.
14. Decision flow
De decision flow borgt dat eigenaarschap alleen overgaat naar een actieve collaborator van hetzelfde niveau en dat de verplichte reden aanwezig is.
15. Data lifecycle diagram
De actuele eigenaar wijzigt op het niveau. De oude eigenaar blijft via een actief collaboratorrecord betrokken bij hetzelfde niveau.
16. Sequence diagrammen
16.1 Eigenaarschap overdragen
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| POP-DOC-SAM-TRANSFER-OWNERSHIP-CONFIRM | Voor definitieve overdracht | Laat de eigenaar expliciet bevestigen dat het eigenaarschap wordt overgedragen. |
| POP-DOC-SAM-TRANSFER-OWNERSHIP-SUCCESS | Na succesvolle overdracht | Bevestigt dat de nieuwe eigenaar actief is. |
| POP-DOC-SAM-TRANSFER-OWNERSHIP-BLOCKED | Bij ongeldige actor, kandidaat, reden of concurrency | Legt uit dat overdracht niet uitgevoerd kan worden. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijven dat eigenaarschap uitsluitend naar actieve collaborators kan worden overgedragen en dat de oude eigenaar collaborator blijft. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, autorisatie en logging en historie beschrijven de technische uitwerking. Transactie, concurrencycontrole, auditregistratie en systeemberichtverwerking voor eigendomsoverdracht uitwerken. |
| Software Requirements Specification | Requirements opnemen voor verplichte reden, geldige kandidaat, eigenaarcontrole en behoud van leerlingtoegang. |
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-DOC-SAM-005-001 | SRS-CAT-001 SRS-TCH-007 AC-CAT-001 AC-TCH-007 | Eigenaarschap van een niveau alleen door de actuele eigenaar laten overdragen |
REQ-UC-DOC-SAM-005-002 | SRS-CAT-001 SRS-TCH-006 AC-CAT-001 AC-TCH-006 | Eigenaarschap alleen kunnen overdragen aan een actieve collaborator van hetzelfde niveau |
REQ-UC-DOC-SAM-005-003 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Een verplichte reden van overdracht vastleggen |
REQ-UC-DOC-SAM-005-004 | SRS-CAT-001 SRS-TCH-002 AC-CAT-001 AC-TCH-002 | Voorkomen dat een niveau zonder eigenaar ontstaat |
REQ-UC-DOC-SAM-005-005 | SRS-TCH-006 AC-TCH-006 | De oude eigenaar na overdracht als actieve collaborator behouden of borgen |
REQ-UC-DOC-SAM-005-006 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | De overdracht auditbaar vastleggen met oude eigenaar, nieuwe eigenaar, actor, tijdstip en reden |
REQ-UC-DOC-SAM-005-007 | SRS-AUTH-001 SRS-LRN-009 SRS-TCH-001 AC-AUTH-001 AC-LRN-009 AC-TCH-001 | Door eigendomsoverdracht geen leerlingautorisaties of resultaten wijzigen |
REQ-UC-DOC-SAM-005-008 | SRS-AUTH-001 SRS-TCH-001 SRS-GUA-001 AC-AUTH-001 AC-TCH-001 AC-GUA-001 | Verouderde UI-context bij overdracht server-side detecteren en blokkeren |