UC-DOC-SAM-007 — Samenwerkingswijziging auditbaar vastleggen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-SAM-007 |
| Naam | Samenwerkingswijziging auditbaar vastleggen |
| Domein | Docent |
| Subdomein | Samenwerking, collaborators en eigenaarschap |
| Primaire actor | Systeem |
| Secundaire actor(en) | Docent |
| Rolcontext | Systeemverwerking na collaborator- of eigenaarschapsmutaties binnen docentcontext |
| Betrokken schermen | Geen zelfstandig scherm; auditweergave kan zichtbaar zijn in niveau-detail, samenwerkingsgeschiedenis of beheerondersteuning |
| Gerelateerde usecases | UC-DOC-SAM-002, UC-DOC-SAM-003, UC-DOC-SAM-005, UC-DOC-SAM-006, UC-DOC-AANB-004, UC-BEH-DOC-ondersteuning |
| Primaire entiteiten | LevelCollaborators, Levels, LevelCollaboratorHistory, LevelOwnershipHistory |
| Secundaire entiteiten / events | SystemMessages, applicatielog, auditactor, reden, oude waarde, nieuwe waarde |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe OefenHub wijzigingen in samenwerking rond een niveau auditbaar vastlegt.
De usecase is een ondersteunende systeemflow bij collaborators toevoegen, collaborators ontkoppelen en eigenaarschap overdragen.
Auditbaarheid is nodig omdat samenwerkingswijzigingen bepalen wie onderwijsinhoud binnen een niveau kan aanpassen en wie eigenaar is van die context.
De auditlaag vervangt niet de formele bronrecords. Levels en LevelCollaborators blijven de actuele waarheid; historyrecords en logs maken reconstructie mogelijk.
3. Scope
Binnen scope
- Vastleggen van collaborator toegevoegd.
- Vastleggen van collaborator ontkoppeld.
- Vastleggen van eigenaarschap overgedragen.
- Vastleggen van actor, tijdstip, oude waarde, nieuwe waarde en reden waar verplicht.
- Beschikbaar maken van compacte samenwerkingshistorie voor docent- of beheerweergave.
- Scheiding tussen domeinhistory en technische logging bewaken.
- Niet schrijven van succes-audit bij mislukte of geblokkeerde mutaties.
Buiten scope
- De oorspronkelijke samenwerkingmutatie zelf uitvoeren.
- Volledige applicatielogging definiëren.
- Een generiek auditframework voor alle OefenHub-domeinen ontwerpen.
- Vrije tekst uit discussies of berichten dupliceren in auditregels.
- Leerlingresultaten of oefenruns herschrijven.
- Beheerder-forceeracties volledig uitwerken.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | Er is een samenwerkingsmutatie succesvol gevalideerd of uitgevoerd. |
| PRE-002 | De mutatie betreft collaborator toevoegen, collaborator ontkoppelen of eigenaarschap overdragen. |
| PRE-003 | De uitvoerende actor is bekend. |
| PRE-004 | Het niveau waarop de wijziging betrekking heeft is bekend. |
| PRE-005 | Voor redenplichtige acties is een reden beschikbaar. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De samenwerkingswijziging is herleidbaar vastgelegd. |
| POST-002 | De actuele bronrecords blijven de primaire waarheid. |
| POST-003 | Een mislukte of geblokkeerde wijziging heeft geen succes-auditregel gekregen. |
| POST-004 | De auditinformatie is beschikbaar voor bevoegde docent- of beheercontexten. |
| POST-005 | Technische logging en domeinhistorie blijven gescheiden. |
6. Trigger
Een succesvolle collaborator- of eigenaarschapsmutatie vraagt om auditregistratie binnen dezelfde transactie of als consistente vervolgverwerking.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Systeem | Mutatieflow | Ontvangt succesvolle samenwerkingsmutatie | Bepaalt auditsoort | ActionType |
| 2 | Systeem | Auditcontext | Verzamelt niveau, actor, doelgebruiker en oude/nieuwe waarden | Auditpayload wordt opgebouwd | Contextdata |
| 3 | Systeem | Auditcontext | Controleert of reden verplicht is | Blokkeert of markeert fout wanneer reden ontbreekt bij redenplichtige actie | Reason |
| 4 | Systeem | Database | Schrijft collaboratorhistory bij collaboratorwijziging | Historyrecord ontstaat | LevelCollaboratorHistory |
| 5 | Systeem | Database | Schrijft ownershiphistory bij eigendomsoverdracht | Historyrecord ontstaat | LevelOwnershipHistory |
| 6 | Systeem | Eventregister | Publiceert domeinevent voor de afgeronde samenwerkingsmutatie | Vervolgverwerking kan aansluiten | SamenwerkingsEvent |
| 7 | Systeem | Communicatie | Koppelt informatieve systeemberichten aan mutatiecontext | Betrokkenen kunnen geïnformeerd worden | SystemMessages |
| 8 | Systeem | Logging | Legt technische details alleen in applicatielog vast waar nodig | Geen duplicatie in domeinhistory | Structured logging |
| 9 | Frontend / Beheer | Geschiedenisweergave | Kan compacte history tonen | Gebruiker ziet herleidbare wijziging | Readmodel |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | Samenwerkingsmutatie is geblokkeerd | Er wordt geen succes-auditregel geschreven; technische blokkade kan worden gelogd. | Niet van toepassing | Geen domeinhistory |
| ALT-002 | 3 | Verplichte reden ontbreekt | De oorspronkelijke mutatie mag niet als succesvol worden afgerond. | Niet van toepassing | Rollback of blokkade |
| ALT-003 | 4 | Collaboratorhistory schrijven faalt | Systeem rolt de mutatie terug of markeert transactie als mislukt volgens gekozen consistentieregel. | Niet van toepassing | Rollback |
| ALT-004 | 5 | Ownershiphistory schrijven faalt | Systeem rolt de overdracht terug zodat geen niet-auditbare eigendomsoverdracht ontstaat. | Niet van toepassing | Rollback |
| ALT-005 | 7 | Vereiste vervolgverwerking faalt | De mutatieusecase rondt de transactie niet als volledig geslaagd af zolang verplichte audit of communicatie niet consistent is verwerkt. | Niet van toepassing | Geen half-afgeronde domeinmutatie |
| ALT-006 | 9 | Gebruiker mag historie niet zien | Systeem bewaart history maar toont deze niet buiten bevoegde context. | Niet van toepassing | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Samenwerkingswijzigingen rond een niveau moeten auditbaar zijn. |
| BR-002 | De actuele waarheid blijft in Levels en LevelCollaborators; history is reconstructie en verantwoording. |
| BR-003 | Collaborator toevoegen en ontkoppelen worden als afzonderlijke auditacties vastgelegd. |
| BR-004 | Eigendomsoverdracht wordt vastgelegd met oude eigenaar en nieuwe eigenaar. |
| BR-005 | Een reden wordt vastgelegd bij redenplichtige acties zoals eigendomsoverdracht en ontkoppeling waar dit is voorgeschreven. |
| BR-006 | Mislukte of geblokkeerde acties krijgen geen succes-auditregel. |
| BR-007 | Technische logging vervangt geen domeinhistorie voor succesvolle samenwerkingsmutaties. |
| BR-008 | Domeinhistorie mag geen onnodige persoonsgegevens of vrije discussie-inhoud dupliceren. |
| BR-009 | Alle historyregels moeten de echte actor bevatten, ook wanneer de actie via beheerondersteuning wordt uitgevoerd. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| ActionType | Moet een vooraf ondersteunde samenwerkingsactie zijn. |
| ActorUserId | Moet bekend zijn en de echte uitvoerende actor representeren. |
| LevelId | Moet verwijzen naar het geraakte niveau. |
| TargetUserId | Moet gevuld zijn wanneer de actie een collaborator of nieuwe eigenaar betreft. |
| OldValue/NewValue | Moeten voldoende informatie bevatten voor reconstructie zonder vrije datadump. |
| Reason | Verplicht bij redenplichtige acties. |
| Visibility | History wordt alleen getoond aan bevoegde docent- of beheercontexten. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 4 | Create | LevelCollaboratorHistory | Collaborator toegevoegd, ontkoppeld of statuswijziging vastleggen. |
| 5 | Create | LevelOwnershipHistory | Overdracht van eigenaarschap vastleggen. |
| 6 | Event | LevelCollaboratorAdded / LevelCollaboratorRemoved / LevelOwnershipTransferred | Domeinevents voor audit en vervolgverwerking. |
| 8 | Log | Applicatielog | Technische context en foutdetails vastleggen buiten domeinhistorie waar nodig. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Levels | Deze usecase schrijft niet zelf de primaire eigenaarwijziging; dat gebeurt in de mutatieusecase. |
| LevelCollaborators | Deze usecase schrijft niet zelf de primaire collaboratorstatus; dat gebeurt in de mutatieusecase. |
| ExerciseHistory | Samenwerkingsaudit is gescheiden van oefeningconfiguratiehistorie. |
| StudentLevelAuthorizations | Samenwerkingsaudit wijzigt geen leerlingtoegang. |
| TicketHistory | Meldingenhistorie wordt niet gebruikt voor docentniveau-samenwerking. |
13. State diagram
De auditflow kent geen eigen eindgebruikersstatus. Wel moet een succesvolle samenwerkingsmutatie altijd corresponderen met een passende historyregistratie.
14. Decision flow
De decision flow bepaalt welk historyrecord nodig is en voorkomt dat geblokkeerde mutaties als succesvolle samenwerkingswijziging worden geregistreerd.
15. Data lifecycle diagram
Historyrecords ontstaan als verantwoording bij primaire samenwerkingsmutaties. Zij worden niet gebruikt om actuele rechten te bepalen; actuele rechten blijven uit Levels en LevelCollaborators komen.
16. Sequence diagrammen
16.1 Samenwerkingswijziging auditbaar vastleggen
16.2 Audit faalt bij ontbrekende verplichte reden
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Geen popupmoment | Deze usecase gebruikt geen domeinspecifieke popup. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijven dat samenwerkingswijzigingen rond niveau, collaborator en eigenaarschap altijd herleidbaar moeten zijn. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, autorisatie en logging en historie beschrijven de technische uitwerking. Historytabellen, actiontypes, transactionele grenzen en loggingverantwoordelijkheid uitwerken. |
| Software Requirements Specification | Requirements opnemen voor auditregistratie bij collaborator- en eigenaarschapsmutaties. |
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-007-001 | SRS-CAT-001 SRS-TCH-002 SRS-NFR-AUD-001 AC-CAT-001 AC-TCH-002 AC-NFR-AUD-001 | Succesvolle samenwerkingswijzigingen rond een niveau auditbaar vastleggen |
REQ-UC-DOC-SAM-007-002 | SRS-REL-003 SRS-REL-006 SRS-TCH-006 SRS-NFR-AUD-001 AC-REL-003 AC-REL-006 AC-TCH-006 AC-NFR-AUD-001 | Collaborator toevoegen en ontkoppelen als afzonderlijke auditacties kunnen registreren |
REQ-UC-DOC-SAM-007-003 | SRS-TCH-001 AC-TCH-001 | Eigendomsoverdracht registreren met oude eigenaar, nieuwe eigenaar, actor, tijdstip en reden |
REQ-UC-DOC-SAM-007-004 | SRS-TCH-001 SRS-NFR-AVL-001 AC-TCH-001 AC-NFR-AVL-001 | Mislukte of geblokkeerde mutaties niet als succesvolle samenwerkingswijziging registreren |
REQ-UC-DOC-SAM-007-005 | SRS-TCH-001 AC-TCH-001 | Verplichte redenen afdwingen voordat redenplichtige samenwerkingsmutaties als succesvol worden afgerond |
REQ-UC-DOC-SAM-007-006 | SRS-AUTH-001 SRS-TCH-001 SRS-ADM-001 SRS-NFR-AUD-001 AC-AUTH-001 AC-TCH-001 AC-ADM-001 AC-NFR-AUD-001 | Samenwerkingshistory alleen tonen binnen bevoegde docent- of beheercontext |
REQ-UC-DOC-SAM-007-007 | SRS-TCH-001 SRS-NFR-LOG-001 AC-TCH-001 AC-NFR-LOG-001 | Technische logging en domeinhistorie gescheiden houden |
REQ-UC-DOC-SAM-007-008 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Actuele rechten blijven bepalen uit bronrecords en niet uit historyrecords |