Acceptatiecriteria
5.1 Doel
Dit hoofdstuk koppelt acceptatiecriteria expliciet aan requirement-ID's. De criteria zijn bedoeld als eerste toetsbare formulering; detailtestcases volgen later in testdocumentatie of SRS-vervolgrondes.
De acceptatiecriteria dekken de centrale requirements, inclusief readmodels, tellers, afgeleide schermwaarden en meetbare grenzen voor actualiteit, consistentie, fallbackgedrag en gebruikersgerichte responstijd. Ieder requirement heeft minimaal één criteriumregel.
5.2 Conventie
Een acceptatiecriterium gebruikt bij voorkeur Given/When/Then-taal. In tabellen wordt dit compact genoteerd als één criteriumregel.
5.3 Acceptatiecriteria per requirement
5.3.1 Rollen, context en autorisatie
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-AUTH-001 | SRS-AUTH-001 | Gegeven een gebruiker zonder de vereiste permission of zonder geldige relatie-/objectcontext; wanneer deze een route of actie direct probeert te benaderen; dan weigert het systeem de toegang zonder gedeeltelijke domeindata te tonen. | Vastgesteld |
| AC-AUTH-002 | SRS-AUTH-002 | Gegeven een zichtbare knop, link, filter, badge of browserhistorie-item; wanneer de gebruiker de achterliggende actie uitvoert; dan controleert de server opnieuw de actuele autorisatiecontext. | Vastgesteld |
| AC-AUTH-003 | SRS-AUTH-003 | Gegeven een gebruiker met meerdere niet-leerlingrollen; wanneer de frontpage, het menu of een vervolgroute wordt geopend; dan toont het systeem permissiongedreven blokken in vaste volgorde en mengt het geen objectscope tussen docent-, ouder-/voogd- en beheercontext. | Vastgesteld |
| AC-AUTH-004 | SRS-AUTH-004 | Gegeven een directe URL of gemanipuleerde route naar een object buiten de actuele rol-, relatie- of objectcontext; wanneer de gebruiker de route opent; dan weigert het systeem toegang en toont het geen gedeeltelijke objectdata. | Vastgesteld |
| AC-AUTH-005 | SRS-AUTH-005 | Gegeven een gebruiker waarvan rollen of rol-permissionkoppelingen wijzigen; wanneer daarna navigatie, frontpageblokken of vervolgacties worden bepaald; dan is de permissioncache geïnvalideerd of opnieuw geladen en worden zichtbaarheid en checks opnieuw bepaald op basis van de actuele permissions. | Vastgesteld |
5.3.2 Account, profiel en voorkeuren
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-ACC-001 | SRS-ACC-001 | Gegeven een geldige identity-providerlogin zonder bestaand intern account; wanneer de gebruiker OefenHub opent; dan maakt of koppelt het systeem een intern account volgens de provisioningregels. | Vastgesteld |
| AC-ACC-002 | SRS-ACC-002 | Gegeven een ingelogde gebruiker zonder actieve rolcontext; wanneer de frontpage wordt geopend; dan toont het systeem alleen de no-role context en geen rolgebonden functies. | Vastgesteld |
| AC-ACC-003 | SRS-ACC-003 | Gegeven een ingelogde gebruiker; wanneer die toegestane profielvelden wijzigt en opslaat; dan bewaart het systeem alleen ondersteunde velden en valideert het invoer server-side. | Vastgesteld |
| AC-ACC-004 | SRS-ACC-004 | Gegeven een geldig definitief verwijderverzoek; wanneer de flow wordt bevestigd; dan beëindigt het systeem reguliere toegang en verwerkt het afhankelijke relaties, rollen, sessies en zichtbaarheid volgens de anonimiseringregels. | Vastgesteld |
| AC-ACC-005 | SRS-ACC-005 | Gegeven een gebruiker met toegankelijkheidsvoorkeuren vóór login en profielinstellingen na login; wanneer de gebruiker inlogt; dan past het systeem profielwaarden of functionele defaults toe zonder tijdelijke browserwaarden automatisch als profielwaarheid te promoveren. | Vastgesteld |
| AC-ACC-006 | SRS-ACC-006 | Gegeven een account dat inactief of tijdelijk uitgeschakeld is; wanneer de gebruiker probeert in te loggen of een applicatieroute te openen; dan blokkeert het systeem reguliere toegang en toont het geen rolgebonden gegevens. | Vastgesteld |
| AC-ACC-007 | SRS-ACC-007 | Gegeven een ingelogde gebruiker; wanneer deze uitlogt; dan beëindigt het systeem de applicatiesessie zodat beveiligde routes opnieuw authenticatie en contextcontrole vereisen. | Vastgesteld |
| AC-ACC-008 | SRS-ACC-008 | Gegeven een geanonimiseerd account; wanneer een gebruiker een nieuwe relatie, uitnodiging of privécommunicatie probeert te starten; dan is dat account niet als actieve ontvanger of relatiepartij selecteerbaar. | Vastgesteld |
5.3.3 Relatiebeheer
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-REL-001 | SRS-REL-001 | Gegeven een gebruiker die een relatie-uitnodiging wil versturen; wanneer doelgebruiker, rol of relatiecontext niet toegestaan is; dan wordt de uitnodiging niet aangemaakt en toont het systeem een veilige melding die geen accountbestaan, verborgen rolcontext of relatiegegevens van derden prijsgeeft. | Vastgesteld |
| AC-REL-002 | SRS-REL-002 | Gegeven een ontvangen uitnodiging; wanneer de gebruiker accepteert; dan controleert het systeem dat de uitnodiging nog bestaat, geldig, niet verlopen en voor deze gebruiker bedoeld is. | Vastgesteld |
| AC-REL-003 | SRS-REL-003 | Gegeven een actieve relatie; wanneer een toegestane ontkoppeling wordt uitgevoerd; dan beëindigt het systeem toekomstige relatiecontext zonder historische records blind te verwijderen. | Vastgesteld |
| AC-REL-004 | SRS-REL-004 | Gegeven een verlopen relatie-uitnodiging; wanneer de ontvanger deze probeert te accepteren; dan weigert het systeem de acceptatie en blijft er geen actieve relatie ontstaan. | Vastgesteld |
| AC-REL-005 | SRS-REL-005 | Gegeven een bestaande actieve uitnodiging of relatie tussen dezelfde relevante partijen; wanneer een gebruiker opnieuw dezelfde uitnodiging probeert aan te maken; dan voorkomt het systeem een dubbele actieve context. | Vastgesteld |
| AC-REL-006 | SRS-REL-006 | Gegeven een beëindigde relatie; wanneer historische resultaten, berichten, tickets of auditregels worden geraadpleegd; dan blijven historische records volgens hun eigen domeinregels bestaan zonder toekomstige relatiecontext te herstellen. | Vastgesteld |
| AC-REL-007 | SRS-REL-007 | Gegeven een gebruiker die een relatie beëindigt of opnieuw contact wil leggen; wanneer dezelfde gebruiker later opnieuw een relatiecontext wil opbouwen; dan gebruikt het systeem geen aparte blokkeerstatus of blokkeerlijst, maar uitsluitend de normale uitnodigings-, acceptatie- en autorisatieregels. | Vastgesteld |
| AC-REL-008 | SRS-REL-008 | Gegeven een gebruiker met meerdere relaties van hetzelfde toegestane relatietype; wanneer een extra relatie-uitnodiging of relatie wordt verwerkt; dan weigert het systeem deze niet uitsluitend vanwege een generiek maximaal aantal relaties, maar alleen op basis van expliciete autorisatie-, status-, conflict- of domeinregels. | Vastgesteld |
| AC-REL-009 | SRS-REL-009 | Gegeven een beheerder met geldige beheercontext; wanneer de beheerder een bestaande relatie geforceerd ontkoppelt met verplichte reden; dan wordt de relatie soft gedeactiveerd, wordt actor, rolcontext, tijdstip en reden auditbaar vastgelegd en ontvangen beide betrokken partijen een systeembericht of gelijkwaardige systeemcommunicatie. | Vastgesteld |
| AC-REL-010 | SRS-REL-010 | Gegeven een openstaande uitnodiging, actieve relatie of spiegelbeeldige uitnodiging voor dezelfde relevante gebruikers, relatietype- en rolcontextcombinatie; wanneer een gebruiker een conflicterende uitnodiging probeert aan te maken of te accepteren; dan voorkomt de server een dubbele of strijdige relatiecontext en blijft de bestaande toestand auditbaar herleidbaar. | Vastgesteld |
| AC-REL-011 | SRS-REL-011 | Gegeven een relatie-uitnodiging naar een onbekend e-mailadres; wanneer externe e-mail nodig is om de ontvanger te bereiken; dan wordt de uitnodiging alleen zichtbaar/openstaand na expliciete consent, geslaagde template-/senderpreflight en een duurzaam opgeslagen mailattempt met geplande deliveryjob, en toont de gebruikersgerichte historie alleen veilige maildeliverymeldingen zonder technische SMTP- of providerdetails. | Vastgesteld |
| AC-REL-012 | SRS-REL-012 | Gegeven een openstaande verzonden relatie-uitnodiging; wanneer de uitnodiger deze wil herinneren of intrekken; dan staat herinneren alleen server-side toe wanneer het verzoek pending is en de beheerbare cooldown is verstreken, en loopt intrekken altijd via bevestiging waarna het verzoek niet meer accepteerbaar of zichtbaar openstaand is. | Vastgesteld |
5.3.4 Oefencatalogus
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-CAT-001 | SRS-CAT-001 | Gegeven een leerling met actuele niveaucontext; wanneer de catalogus wordt getoond; dan toont het systeem alleen categorieën en oefeningen waarvoor actuele toegang bestaat. | Vastgesteld |
| AC-CAT-002 | SRS-CAT-002 | Gegeven een docent die categorieën binnen een niveau beheert; wanneer een categorie wordt gekoppeld of gesorteerd; dan wijzigt het systeem de niveaukoppeling en niet onbedoeld de centrale categorie-identiteit. | Vastgesteld |
| AC-CAT-003 | SRS-CAT-003 | Gegeven een docent die een oefening opslaat; wanneer modulekeuze of configuratie ongeldig is; dan weigert het systeem opslag en blijft er geen gedeeltelijk bruikbare oefening actief. | Vastgesteld |
| AC-CAT-004 | SRS-CAT-004 | Gegeven bestaande afgeronde runs; wanneer categorieën of modules later wijzigen; dan blijven historische runcontext en resultaatbron onveranderd reconstructeerbaar. | Vastgesteld |
| AC-CAT-005 | SRS-CAT-005 | Gegeven een concrete oefening met status in onderhoud; wanneer een reguliere leerling de oefening wil starten; dan toont of start het systeem deze oefening niet als beschikbare oefening. | Vastgesteld |
| AC-CAT-006 | SRS-CAT-006 | Gegeven een niveau met open of privé context; wanneer een leerling het oefenaanbod opent; dan toont het systeem alleen niveaus en oefeningen waarvoor de leerling actuele toegang heeft. | Vastgesteld |
| AC-CAT-007 | SRS-CAT-007 | Gegeven een categoriemigratie; wanneer beheer deze uitvoert; dan past het systeem toekomstige actieve configuraties aan zonder historische runs of resultaten te herschrijven. | Vastgesteld |
5.3.5 Leerling oefenen
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-LRN-001 | SRS-LRN-001 | Gegeven een leerling met actuele toegang tot een actieve oefening; wanneer de leerling Start nieuwe kiest; dan maakt het systeem een nieuwe ExerciseRun aan met opgeslagen vraag- en runpayload. | Vastgesteld |
| AC-LRN-002 | SRS-LRN-002 | Gegeven een niet-afgeronde run binnen dezelfde leerling-, oefening- en niveaucontext; wanneer de leerling Verder gaan kiest; dan opent het systeem die run op basis van opgeslagen voortgang. | Vastgesteld |
| AC-LRN-003 | SRS-LRN-003 | Gegeven een actieve run; wanneer een leerling een antwoord bevestigt; dan valideert het systeem het antwoord via de betrokken oefenmodule, werkt het voortgang en uniforme totalen server-side bij en toont het de resultaatstatus die bij de vraagroute hoort, zoals goed, fout, Geen idee of het juiste antwoord wanneer tonen is toegestaan. | Vastgesteld |
| AC-LRN-004 | SRS-LRN-004 | Gegeven een vraag waarbij Geen idee beschikbaar is; wanneer de leerling deze actie gebruikt; dan registreert het systeem deze als antwoord-/voortgangsactie volgens module- en runregels. | Vastgesteld |
| AC-LRN-005 | SRS-LRN-005 | Gegeven een leerling in een actieve oefenrun; wanneer berichten, badges, tellerupdates, systeemnotificaties of meldingenactie-indicaties binnenkomen; dan bewaart het systeem de onderliggende data server-side maar toont het deze signalen niet zichtbaar boven of naast de oefencontext totdat de leerling de run verlaat, onderbreekt of afrondt. | Vastgesteld |
| AC-LRN-006 | SRS-LRN-006 | Gegeven een actieve run met alle vereiste vragen verwerkt; wanneer de run wordt afgerond; dan markeert het systeem de run als afgerond en toont resultaatweergave op basis van opgeslagen runcontext. | Vastgesteld |
| AC-LRN-007 | SRS-LRN-007 | Gegeven een niet-afgeronde run; wanneer de leerling later terugkeert binnen geldige toegang; dan kan de leerling de run hervatten op basis van server-side opgeslagen voortgang. | Vastgesteld |
| AC-LRN-008 | SRS-LRN-008 | Gegeven een afgeronde oefenrun; wanneer een leerling of client opnieuw een antwoordactie probeert te verwerken; dan wijzigt het systeem de afgeronde run, score en voortgang niet. | Vastgesteld |
| AC-LRN-009 | SRS-LRN-009 | Gegeven een leerlingactie rond starten, hervatten of beantwoorden; wanneer de actie server-side wordt verwerkt; dan controleert het systeem opnieuw leerling-, niveau-, oefening- en moduletoegang. | Vastgesteld |
| AC-LRN-010 | SRS-LRN-010 | Gegeven een leerling of bevoegde begeleider die geschiedenis opent; wanneer filters of directe routes worden gebruikt; dan toont het systeem alleen historische runs binnen de actuele geautoriseerde context. | Vastgesteld |
5.3.6 Gedeelde oefeningen
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-SHR-001 | SRS-SHR-001 | Gegeven een afgeronde eigen run en een actuele toegestane vriendschapscontext; wanneer de leerling deelt; dan maakt het systeem een SharedExercises-record voor de ontvanger. | Vastgesteld |
| AC-SHR-002 | SRS-SHR-002 | Gegeven een systeembericht met EntityType SharedExercise; wanneer de ontvanger het bericht opent; dan wordt alleen de gedeelde-oefeningcontext geopend en geen ontvangerrun aangemaakt. | Vastgesteld |
| AC-SHR-003 | SRS-SHR-003 | Gegeven een gedeelde oefening die nog niet gestart is; wanneer de ontvanger start; dan maakt het systeem een ontvangerrun aan met dezelfde vraaginhoud en vraagvolgorde als de bronrun. | Vastgesteld |
| AC-SHR-004 | SRS-SHR-004 | Gegeven een gedeelde oefening in het ontvangersoverzicht; wanneer de ontvanger verwijdert; dan verdwijnt het item uit diens overzicht zonder de bronrun of andere historie te verwijderen. | Vastgesteld |
| AC-SHR-005 | SRS-SHR-005 | Gegeven een gedeelde oefening waarvoor systeemcommunicatie wordt aangemaakt; wanneer het systeembericht wordt opgeslagen; dan gebruikt het systeem EntityType SharedExercise en EntityId van het gedeelde-oefeningrecord. | Vastgesteld |
| AC-SHR-006 | SRS-SHR-006 | Gegeven een ontvanger die een gedeelde oefening opnieuw maakt; wanneer de nieuwe uitvoering start; dan maakt het systeem een zelfstandige ontvangerrun zonder de bronrun of eerdere ontvangerrun te wijzigen. | Vastgesteld |
| AC-SHR-007 | SRS-SHR-007 | Gegeven een ontvanger die een gedeelde oefening uit het eigen overzicht verwijdert; wanneer de actie wordt bevestigd; dan verdwijnt het gedeelde record alleen uit de eigen overzichtscontext en niet uit historische bron- of ontvangerruns. | Vastgesteld |
| AC-SHR-008 | SRS-SHR-008 | Gegeven een bestaand gedeeld-oefeningrecord; wanneer de bronrun, bronoefening, categorie of module later wijzigt; dan blijven snapshotvelden van het gedeelde record historisch consistent. | Vastgesteld |
5.3.7 Docentfunctionaliteit
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-TCH-001 | SRS-TCH-001 | Gegeven een docent; wanneer deze leerlingen, niveaus, oefeningen of resultaten opent; dan begrenst het systeem de data tot actuele docentcontext en server-side rechten. | Vastgesteld |
| AC-TCH-002 | SRS-TCH-002 | Gegeven een docent met eigenaarschap of collaboratorrecht; wanneer die niveau- of categoriegegevens wijzigt; dan past het systeem alleen toegestane velden binnen die context aan. | Vastgesteld |
| AC-TCH-003 | SRS-TCH-003 | Gegeven een actieve docent-leerlingrelatie; wanneer de docent niveauautorisatie toekent of intrekt; dan registreert het systeem de toegangsverandering auditbaar en maakt het systeemcommunicatie voor de leerling aan over de gewijzigde niveauautorisatie, waarbij zichtbare signalering tijdens een actieve oefenrun mag worden uitgesteld. | Vastgesteld |
| AC-TCH-004 | SRS-TCH-004 | Gegeven een docent die resultaatdetails opent; wanneer de leerling of run buiten de docentcontext valt; dan weigert het systeem toegang zonder resultaatdata te tonen. | Vastgesteld |
| AC-TCH-005 | SRS-TCH-005 | Gegeven een docent die een oefening test; wanneer de testrun wordt afgerond; dan neemt het systeem deze niet op als leerlinggeschiedenis, leerlingstatistiek of ouder-/voogdresultaat. | Vastgesteld |
| AC-TCH-006 | SRS-TCH-006 | Gegeven een docent als collaborator op een niveau; wanneer deze een niveau-, categorie- of oefeningactie uitvoert; dan controleert het systeem de collaboratorcontext en toegestane rechten. | Vastgesteld |
| AC-TCH-007 | SRS-TCH-007 | Gegeven een docent die eigenaarschap van een niveau overdraagt; wanneer een kandidaat wordt gekozen; dan accepteert het systeem alleen een geldige docentkandidaat en legt het de overdracht auditbaar vast. | Vastgesteld |
| AC-TCH-008 | SRS-TCH-008 | Gegeven een docent die bulk-niveauautorisaties uitvoert; wanneer leerlingen en niveaus geselecteerd zijn; dan valideert het systeem per combinatie de actuele docent-leerlingrelatie en niveaucontext. | Vastgesteld |
5.3.8 Ouder-/voogdfunctionaliteit
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-GUA-001 | SRS-GUA-001 | Gegeven een ouder/voogd; wanneer kinderenoverzicht wordt geopend; dan toont het systeem alleen kinderen met actieve GuardianStudent-relatie. | Vastgesteld |
| AC-GUA-002 | SRS-GUA-002 | Gegeven een ouder/voogd met actieve kindrelatie; wanneer resultaat of geschiedenis wordt geopend; dan toont het systeem bestaande historische gegevens read-only en biedt geen oefenmutaties. | Vastgesteld |
| AC-GUA-003 | SRS-GUA-003 | Gegeven een actieve ouder-/voogdrelatie; wanneer de ouder/voogd ontkoppelt; dan beëindigt het systeem toekomstige inzage en behoudt het historische records volgens retentie- en anonimiseringregels. | Vastgesteld |
| AC-GUA-004 | SRS-GUA-004 | Gegeven een ouder-/voogdrelatie die wordt beëindigd; wanneer de ontkoppeling is verwerkt; dan ziet de ouder/voogd het kind niet meer in toekomstige kinderen-, resultaten- of livecontexten. | Vastgesteld |
| AC-GUA-005 | SRS-GUA-005 | Gegeven een ouder/voogd met actieve kindrelatie; wanneer deze een oefening wil starten, beantwoorden, corrigeren of opnieuw maken namens het kind; dan staat het systeem die mutatie niet toe. | Vastgesteld |
| AC-GUA-006 | SRS-GUA-006 | Gegeven een ouder/voogd die live wil meekijken; wanneer de livecontext wordt geopend; dan staat het systeem meekijken alleen toe voor een actief gekoppeld kind met actieve run. | Vastgesteld |
5.3.9 Beheerderfunctionaliteit
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-ADM-001 | SRS-ADM-001 | Gegeven een beheerder; wanneer die een beheeractie uitvoert; dan controleert het systeem de specifieke beheercontext en voert geen eindgebruikersmutatie uit buiten de beheerflow. | Vastgesteld |
| AC-ADM-002 | SRS-ADM-002 | Gegeven een beheerder; wanneer die rollen toekent of intrekt; dan valideert het systeem toegestane rolset, accountstatus en auditregistratie. | Vastgesteld |
| AC-ADM-003 | SRS-ADM-003 | Gegeven een toegestane anonimiseeractie; wanneer de beheerder bevestigt; dan verwerkt het systeem account-, rol-, relatie-, sessie- en zichtbaarheidseffecten zonder historische domeinrecords blind te verwijderen. | Vastgesteld |
| AC-ADM-004 | SRS-ADM-004 | Gegeven een modulewijziging of modulemigratie; wanneer deze wordt uitgevoerd; dan blijven bestaande runpayloads, resultaten, gedeelde oefeningen en PDF-contexten historisch interpreteerbaar. | Vastgesteld |
| AC-ADM-005 | SRS-ADM-005 | Gegeven een beheerder met accountbeheerrechten; wanneer deze een account uitschakelt of heractiveert; dan verwerkt het systeem de lifecycleactie auditbaar en volgens de accountstatusregels. | Vastgesteld |
| AC-ADM-006 | SRS-ADM-006 | Gegeven een categorie die gewijzigd of vervangen wordt; wanneer beheer geen expliciete migratieactie uitvoert; dan migreert het systeem bestaande niveaukoppelingen of oefeningen niet automatisch. | Vastgesteld |
| AC-ADM-007 | SRS-ADM-007 | Gegeven een beheerder die een systeeminstelling wijzigt; wanneer de invoer niet past bij het ingestelde datatype of de invoervorm; dan weigert het systeem de opslag zonder gedeeltelijke configuratiewijziging. | Vastgesteld |
| AC-ADM-008 | SRS-ADM-008 | Gegeven een beheerder die binnen docentondersteuning een docentcontext inspecteert of corrigeert; wanneer een beheeractie plaatsvindt; dan legt het systeem actor, context en wijziging auditbaar vast. | Vastgesteld |
5.3.10 Berichten, communicatie en notificaties
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-MSG-001 | SRS-MSG-001 | Gegeven een gebruiker; wanneer mailbox, filter of zoekopdracht wordt geopend; dan toont het systeem alleen systeemberichten en privéthreads binnen diens participant- of ontvangercontext, met per lijstregel een compacte éénregelige preview die bij onvoldoende ruimte visueel wordt afgekapt met ellipsis of gelijkwaardige afbreekindicatie. | Vastgesteld |
| AC-MSG-002 | SRS-MSG-002 | Gegeven een gebruiker die een privébericht wil sturen; wanneer relatie-, participant- of featurecontext ontbreekt of wanneer onderwerp of berichtinhoud de vastgelegde grenzen overschrijdt; dan blokkeert het systeem verzenden met veilige validatiefeedback. | Vastgesteld |
| AC-MSG-003 | SRS-MSG-003 | Gegeven een privéthread met meerdere deelnemers; wanneer één deelnemer verwijdert; dan verdwijnt de thread alleen uit diens mailboxweergave en niet bij andere deelnemers. | Vastgesteld |
| AC-MSG-004 | SRS-MSG-004 | Gegeven privéberichten ouder dan de vastgestelde bewaartermijn; wanneer retentie wordt verwerkt; dan past het systeem cleanup toe zonder zichtbaarheid of autorisatie voor andere data te verruimen. | Vastgesteld |
| AC-MSG-005 | SRS-MSG-005 | Gegeven een systeembericht met EntityType SharedExercise; wanneer de ontvanger het bericht opent; dan navigeert het systeem naar de geautoriseerde gedeelde-oefeningcontext zonder automatisch een run te starten. | Vastgesteld |
| AC-MSG-006 | SRS-MSG-006 | Gegeven een ongelezenbadge of teller; wanneer de gebruiker het berichtenoverzicht of item opent; dan bepaalt het systeem toegang opnieuw server-side en vertrouwt het niet op de badge als autorisatie. | Vastgesteld |
| AC-MSG-007 | SRS-MSG-007 | Gegeven een systeembericht dat verwijst naar een relatie, ticket, gedeelde oefening of thread; wanneer de gebruiker het bericht opent; dan markeert het systeem hoogstens het bericht als gelezen en verwerkt het geen onderliggende domeinactie automatisch. | Vastgesteld |
| AC-MSG-008 | SRS-MSG-008 | Gegeven de featuretoggle privéberichten is uitgeschakeld; wanneer een gebruiker een nieuw privébericht wil starten; dan blokkeert het systeem de nieuwe actie zonder bestaande threads of historie te verwijderen. | Vastgesteld |
| AC-MSG-009 | SRS-MSG-009 | Gegeven een geautoriseerde participant opent een privéthread; wanneer de thread wordt getoond; dan ziet de gebruiker één timeline van oud naar nieuw binnen het geladen venster, met marker voor nieuwe activiteit of anker naar laatste activiteit, zonder threaditems van niet-geautoriseerde gebruikers te lekken; oudere items worden uitsluitend via beveiligde POST met opaque cursor geladen en de server valideert cursor, user, thread en participantstatus opnieuw. | Vastgesteld |
| AC-MSG-010 | SRS-MSG-010 | Gegeven een privéthread wordt aangemaakt of getoond; wanneer threadicoon, threadkleur, participantaccent of thread-eventtekst wordt gebruikt; dan komen deze waarden uit server-side beheerde allowlists, opgeslagen participantdata of veilig opgebouwde eventtekst en niet uit vrije HTML/CSS of clientinput; events tonen de actor waar functioneel zichtbaar. | Vastgesteld |
| AC-MAIL-001 | SRS-MAIL-001 | Gegeven een relatie-uitnodiging naar een onbekend e-mailadres; wanneer externe e-mail nodig is om de ontvanger te bereiken; dan wordt de uitnodiging alleen zichtbaar/openstaand na expliciete consent, geslaagde template-/senderpreflight en een duurzaam opgeslagen mailattempt met geplande deliveryjob, gebruikt de maildelivery expliciet geconfigureerde SMTP-securitymodus voor implicit SSL of STARTTLS, faalt een ongeldige combinatie van beide transportmodi al bij applicatiestart, en toont de gebruikersgerichte historie alleen veilige maildeliverymeldingen zonder technische SMTP- of providerdetails. | Vastgesteld |
5.3.11 Meldingen en ticketafhandeling
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-TIC-001 | SRS-TIC-001 | Gegeven een ingelogde gebruiker en beschikbare meldingenfunctionaliteit; wanneer die categorie, onderwerp en beschrijving invult; dan maakt het systeem een ticket met technische snapshot en systeembericht. | Vastgesteld |
| AC-TIC-002 | SRS-TIC-002 | Gegeven een gebruiker die een melding opent; wanneer de melding niet door deze gebruiker is aangemaakt; dan weigert het systeem toegang zonder meldingdetails te tonen. | Vastgesteld |
| AC-TIC-003 | SRS-TIC-003 | Gegeven een melding met status New; wanneer een beheerder extern wil reageren of oplossen; dan vereist het systeem eerst een actieve beheerderkoppeling. | Vastgesteld |
| AC-TIC-004 | SRS-TIC-004 | Gegeven een gesloten melding binnen geldige heropencontext; wanneer de melding wordt heropend; dan registreert het systeem een heropenverzoek en behoudt eerdere closures en history. | Vastgesteld |
| AC-TIC-005 | SRS-TIC-005 | Gegeven een gebruiker die op een melding wil reageren; wanneer de melding gesloten is of geen gebruikersreactie toestaat; dan weigert het systeem de reactie en behoudt het de bestaande ticketstatus. | Vastgesteld |
| AC-TIC-006 | SRS-TIC-006 | Gegeven een ticket met interne beheerdiscussie; wanneer de melder de meldingdetails opent; dan toont het systeem alleen externe communicatie en geen interne beheerinformatie. | Vastgesteld |
| AC-TIC-007 | SRS-TIC-007 | Gegeven een melding met actuele oplossing en heropentermijn; wanneer de gebruiker de oplossing accepteert; dan wordt de melding gebruikersgericht gesloten en kan dezelfde sluiting niet meer via de gewone gebruikersflow worden heropend. | Vastgesteld |
| AC-TIC-008 | SRS-TIC-008 | Gegeven een periodieke verwerking voor verlopen heropentermijnen; wanneer dezelfde melding opnieuw aan de selectiecriteria voldoet of al verwerkt is; dan blijft de uitkomst consistent zonder dubbele sluitregistraties. | Vastgesteld |
5.3.12 Live meekijken
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-LIVE-001 | SRS-LIVE-001 | Gegeven een bevoegde docent of ouder/voogd; wanneer live meekijken wordt gestart; dan kan de viewer vraag en voortgang bekijken maar geen antwoord, score, status of runpayload wijzigen. | Vastgesteld |
| AC-LIVE-002 | SRS-LIVE-002 | Gegeven een viewer; wanneer live meekijken wordt gestart; dan controleert het systeem docentcontext of GuardianStudent-relatie plus actieve runbeschikbaarheid. | Vastgesteld |
| AC-LIVE-003 | SRS-LIVE-003 | Gegeven een geldige live-start; wanneer de liveweergave daadwerkelijk opent; dan registreert het systeem auditgegevens over viewer, leerling, run en tijdstip. | Vastgesteld |
| AC-LIVE-004 | SRS-LIVE-004 | Gegeven een viewer die tijdens live meekijken door eerdere vragen bladert; wanneer nieuwe live-updates binnenkomen; dan behoudt het systeem de browsepositie totdat de viewer terugkeert naar de actuele vraag. | Vastgesteld |
| AC-LIVE-005 | SRS-LIVE-005 | Gegeven een livekijksessie met verbindingsverlies; wanneer reconnect niet slaagt binnen de vastgestelde pogingen; dan beëindigt het systeem de liveweergave veilig zonder oefenrundata te wijzigen. | Vastgesteld |
| AC-LIVE-006 | SRS-LIVE-006 | Gegeven een beheerder zonder docent- of ouder-/voogdcontext voor een actieve run; wanneer deze live meekijken probeert te openen; dan weigert het systeem toegang. | Vastgesteld |
5.3.13 Contentbeheer
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-CNT-001 | SRS-CNT-001 | Gegeven een beheerder in contentbeheer; wanneer die content wijzigt; dan staat het systeem alleen beheerbare tekstuele velden toe en geen layout-, route- of componentwijzigingen. | Vastgesteld |
| AC-CNT-002 | SRS-CNT-002 | Gegeven een beheerder die footerlinks beheert; wanneer een link wordt gekoppeld; dan moet deze verwijzen naar een bestaand geldig URL-record en een toegestane footersectie. | Vastgesteld |
| AC-CNT-003 | SRS-CNT-003 | Gegeven een beheerder die vaste publieke pagina-inhoud beheert; wanneer tekst wordt gewijzigd; dan wijzigt het systeem geen routes, formulierlogica of componentstructuur. | Vastgesteld |
| AC-CNT-004 | SRS-CNT-004 | Gegeven een beheerder die een interne of externe URL opslaat; wanneer de URL ongeldig of onveilig is volgens de validatieregels; dan weigert het systeem opslag. | Vastgesteld |
5.3.14 Popups, templates, features en systeemnotificaties
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-POP-001 | SRS-POP-001 | Gegeven een beheerder die popupinhoud wijzigt; wanneer technische sleutel, actie of renderer wordt aangepast; dan weigert het systeem die wijziging. | Vastgesteld |
| AC-POP-002 | SRS-POP-002 | Gegeven een relevante actieve systeemnotificatie; wanneer een frontpage laadt; dan laadt de frontpage eerst en beoordeelt het systeem daarna maximaal één notificatie tegelijk. | Vastgesteld |
| AC-POP-003 | SRS-POP-003 | Gegeven een featuretoggle die wordt uitgeschakeld; wanneer bestaande data uit dat domein aanwezig is; dan verwijdert of herschrijft het systeem die data niet automatisch. | Vastgesteld |
| AC-POP-004 | SRS-POP-004 | Gegeven een beheerder die een systeemberichttemplate opslaat; wanneer de tekst onbekende of niet-ondersteunde placeholders bevat; dan weigert het systeem de opslag. | Vastgesteld |
| AC-POP-005 | SRS-POP-005 | Gegeven een systeemnotificatie met weergaveregel OncePerBrowser; wanneer de gebruiker deze sluit; dan onderdrukt het systeem herhaling in dezelfde browser zonder server-side gebruikersgezienrecord. | Vastgesteld |
5.3.15 PDF-export en resultaatpresentatie
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-PDF-001 | SRS-PDF-001 | Gegeven een afgeronde run; wanneer een bevoegde gebruiker PDF exporteert; dan gebruikt het systeem dezelfde historische resultaatbron als de resultaatweergave. | Vastgesteld |
| AC-PDF-002 | SRS-PDF-002 | Gegeven een PDF-download; wanneer export wordt uitgevoerd; dan maakt het systeem geen blijvend PDF-record als bron van waarheid en muteert geen resultaatdata. | Vastgesteld |
| AC-PDF-003 | SRS-PDF-003 | Gegeven een gebruiker die een PDF-resultaat downloadt; wanneer de export wordt gestart; dan controleert het systeem leerling-, docent- of ouder-/voogdcontext opnieuw server-side. | Vastgesteld |
| AC-PDF-004 | SRS-PDF-004 | Gegeven een historisch resultaat waarvan module-specifieke rendering niet beschikbaar is; wanneer PDF-export wordt aangevraagd; dan toont het systeem een veilige fallback of foutmelding zonder interne payloads te lekken. | Vastgesteld |
5.3.16 Oefenmodules en modulepayloads
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-MOD-001 | SRS-MOD-001 | Gegeven een moduleconfiguratie of runpayload; wanneer deze wordt opgeslagen; dan bevat de payload voldoende module- en schemainformatie voor latere interpretatie. | Vastgesteld |
| AC-MOD-002 | SRS-MOD-002 | Gegeven modulepayloadopslag; wanneer schemaherleidbaarheid nodig is; dan gebruikt het systeem moduleKey en schemaVersion in de payload en introduceert geen extra generieke ConfigSchemaVersion-kolom. | Vastgesteld |
| AC-MOD-003 | SRS-MOD-003 | Gegeven een technische module; wanneer een docent of testcontext een module selecteert; dan toont het systeem alleen modules die volgens actiefstatus en testzichtbaarheid voor die context beschikbaar zijn. | Vastgesteld |
| AC-MOD-004 | SRS-MOD-004 | Gegeven een modulemigratie; wanneer beheer de migratie uitvoert; dan verwerkt het systeem alleen de expliciet gekozen scope voor toekomstig gebruik en herschrijft het geen historische runs. | Vastgesteld |
| AC-MOD-005 | SRS-MOD-005 | Gegeven een historische run met oudere modulepayload; wanneer resultaat, geschiedenis of PDF wordt geopend; dan gebruikt het systeem moduleKey en schemaVersion om de payload backwards-compatible te interpreteren of veilig af te handelen. | Vastgesteld |
5.3.17 Readmodels, tellers en afgeleide schermwaarden
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-RDM-001 | SRS-RDM-001 | Gegeven een scherm met tellers, namen, datums, statussen, snippets of contextlabels; wanneer het scherm wordt opgebouwd; dan gebruikt het systeem actuele brondata of beheerbare content en geen mockup-, test- of hardcoded productiegegevens. | Vastgesteld |
| AC-RDM-002 | SRS-RDM-002 | Gegeven een zichtbare teller of samenvattingswaarde; wanneer deze als requirement of readmodel wordt uitgewerkt; dan is in het readmodel- en tellerdefinitieregister vastgelegd welke records meetellen, welke statussen en filters gelden, welk tijdvenster wordt gebruikt en welke records worden uitgesloten. | Vastgesteld |
| AC-RDM-003 | SRS-RDM-003 | Gegeven een frontpage of vaste contentpositie met dynamische samenvattingswaarden; wanneer beheerbare content wordt opgeslagen; dan worden runtime-afgeleide tellers, recente items, meldingen, statistieken en populaire items niet als vaste ContentBlocks of mockupwaarden opgeslagen. | Vastgesteld |
| AC-RDM-004 | SRS-RDM-004 | Gegeven een beheerder-, account-, module-, popup-, template- of docentondersteuningssamenvatting; wanneer het readmodel wordt berekend; dan telt het systeem alleen objecten die volgens actuele status, rolcontext, actiefstatus, soft-delete en anonimisering functioneel mogen meetellen. | Vastgesteld |
| AC-RDM-005 | SRS-RDM-005 | Gegeven een docentgericht overzicht van leerlingen, niveaus, categorieën, oefeningen, collaborators of autorisaties; wanneer het systeem samenvattingen of lijsten toont; dan worden deze waarden afgeleid uit de actuele docent-, niveau-, relatie- en autorisatiecontext. | Vastgesteld |
| AC-RDM-006 | SRS-RDM-006 | Gegeven een leerling-, docent- of ouder-/voogdweergave van runs, geschiedenis, resultaten, gedeelde oefeningen of live voortgang; wanneer waarden worden getoond; dan gebruikt het systeem opgeslagen runcontext, afgeronde niet-test runs en toegestane historische context in plaats van clientstate of modulepayload-herberekening voor gewone uitlezing. | Vastgesteld |
| AC-RDM-007 | SRS-RDM-007 | Gegeven een berichten-, relatie- of meldingenoverzicht met badges, filters, paginering of samenvattingskaarten; wanneer het readmodel wordt berekend; dan gebruikt het systeem alleen de voor de gebruiker zichtbare dataset en de actuele relatie-, lees-, ticket- of uitnodigingsstatus. | Vastgesteld |
| AC-RDM-008 | SRS-RDM-008 | Gegeven een presentatievoorkeur, responsieve layout of toegankelijkheidssamenvatting; wanneer de gebruiker de weergave opent of aanpast; dan wijzigt dit alleen presentatie, volgorde, paginagrootte of visuele status en nooit autorisaties, domeinrecords of zichtbare gegevenssets. | Vastgesteld |
| AC-RDM-009 | SRS-RDM-009 | Gegeven een samenvattingswaarde of readmodel dat niet kan worden geladen; wanneer het scherm wordt getoond; dan toont het systeem een veilige onbekend- of foutstatus zonder onjuiste nulwaarde en legt het de technische fout server-side herleidbaar vast volgens de algemene regels in het readmodel- en tellerdefinitieregister. | Vastgesteld |
5.3.18 Readmodel-actualiteit, consistentie en performance
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-RDM-001 | SRS-NFR-RDM-001 | Gegeven een readmodel, teller, badge, filterresultaat of samenvattingskaart; wanneer de gebruiker geen actuele autorisatie heeft voor onderliggende records; dan tellen die records niet mee en toont het systeem geen namen, aantallen, identifiers of contextdata waaruit die records afleidbaar zijn. | Vastgesteld |
| AC-NFR-RDM-002 | SRS-NFR-RDM-002 | Gegeven een bevestigde domeinmutatie die een zichtbare teller of readmodelwaarde raakt; wanneer een betrokken scherm opnieuw server-side wordt opgebouwd; dan gebruikt het systeem de bijgewerkte bronstand, en automatisch ververste badges of samenvattingen buiten actieve leerling-oefeningen worden uiterlijk binnen 5 seconden zichtbaar bijgewerkt. | Vastgesteld |
| AC-NFR-RDM-003 | SRS-NFR-RDM-003 | Gegeven een teller en een detailoverzicht met dezelfde rolcontext, filters en periode; wanneer beide na hetzelfde peilmoment worden opgebouwd; dan komt de teller overeen met de totale detaildataset of met het expliciet getoonde pagineringstotaal. | Vastgesteld |
| AC-NFR-RDM-004 | SRS-NFR-RDM-004 | Gegeven een readmodelwaarde die niet veilig kan worden berekend; wanneer het scherm wordt getoond; dan toont het systeem een onbekend-, fout- of tijdelijk-niet-beschikbaarstatus in plaats van een misleidende nulwaarde, en legt het de technische oorzaak server-side herleidbaar vast zonder gevoelige payloads in de gebruikersmelding. | Vastgesteld |
| AC-NFR-RDM-005 | SRS-NFR-RDM-005 | Gegeven een frontpage of overzichtsscherm met readmodelwaarden onder de representatieve acceptatiedataset; wanneer het scherm wordt geopend; dan is de primaire inhoud in 95% van de metingen binnen 2 seconden bruikbaar zichtbaar, en filteren of pagineren binnen hetzelfde overzicht in 95% van de metingen binnen 1 seconde verwerkt. | Vastgesteld |
5.3.19 Functionele architectuurcontext
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-ARCH-001 | SRS-ARCH-001 | Gegeven een gebruikersactie; wanneer deze domeingedrag veroorzaakt; dan wordt autorisatie, usecase-orkestratie en bron-van-waarheidbehandeling binnen OefenHub server-side bepaald. | Vastgesteld |
| AC-ARCH-002 | SRS-ARCH-002 | Gegeven een login- of sessieflow; wanneer authenticatie nodig is; dan gebruikt OefenHub de externe identity provider als authenticatiebron en beheert het zelf geen wachtwoorden. | Vastgesteld |
| AC-ARCH-003 | SRS-ARCH-003 | Gegeven een domeinactie, live-voortgang, berichtstatus of badgewaarde; wanneer hierover een realtime event wordt verzonden of ontvangen; dan mag het event geen zelfstandige domeinmutatie, autorisatie, score, readstate of bronwaarde vormen zonder bijbehorende server-side brondata. | Vastgesteld |
| AC-ARCH-004 | SRS-ARCH-004 | Gegeven een periodieke job die domeinstatussen verwerkt; wanneer de job opnieuw draait of gedeeltelijk faalt; dan voorkomt het systeem dubbele domeinmutaties en blijft de toestand consistent. | Vastgesteld |
5.3.20 NFR — Security
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-SEC-001 | SRS-NFR-SEC-001 | Gegeven een technische, validatie- of autorisatiefout; wanneer feedback wordt getoond; dan bevat de melding geen tokens, stacktraces, interne identifiers, querydetails, modulepayloads of ongeautoriseerde domeindata en krijgt de gebruiker een rolpassende vervolghandeling. | Vastgesteld |
| AC-NFR-SEC-002 | SRS-NFR-SEC-002 | Gegeven gebruiker- of beheerderinvoer met rich text; wanneer het systeem deze opslaat of rendert; dan wordt onveilige HTML, scriptinhoud en actieve markup geweigerd of gesanitized. | Vastgesteld |
| AC-NFR-SEC-003 | SRS-NFR-SEC-003 | Gegeven een autorisatie- of validatiefout; wanneer het systeem feedback toont; dan bevat de melding geen stacktrace, token, interne identifier, technische payload of niet-geautoriseerde domeindata. | Vastgesteld |
5.3.21 NFR — Privacy en dataminimalisatie
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-PRV-001 | SRS-NFR-PRV-001 | Gegeven een geanonimiseerd account; wanneer historische records worden getoond; dan toont het systeem geen onnodige actuele persoonsgegevens en behoudt het alleen functioneel noodzakelijke historische context. | Vastgesteld |
| AC-NFR-PRV-002 | SRS-NFR-PRV-002 | Gegeven gegevens van een leerling; wanneer een ouder, docent of beheerder deze raadpleegt; dan controleert het systeem actuele relatie-, docent- of beheercontext. | Vastgesteld |
| AC-NFR-PRV-003 | SRS-NFR-PRV-003 | Gegeven een historisch record dat naar een geanonimiseerd account verwijst; wanneer een bevoegde gebruiker het record bekijkt; dan toont het systeem alleen de functioneel noodzakelijke geanonimiseerde weergave. | Vastgesteld |
5.3.22 NFR — Audit en herleidbaarheid
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-AUD-001 | SRS-NFR-AUD-001 | Gegeven een beheeractie, live-viewstart, ticketbehandeling of supportcorrectie; wanneer de actie slaagt; dan legt het systeem minimaal actor, rolcontext, objecttype, object-id, actie, resultaat en tijdstip auditbaar vast zonder gewone beheeractie om bestaande auditregels te laten overschrijven. | Vastgesteld |
| AC-NFR-AUD-002 | SRS-NFR-AUD-002 | Gegeven een bestaand audit- of historyrecord; wanneer een beheerder een gewone beheeractie uitvoert; dan wordt het auditrecord niet aangepast of verwijderd maar hoogstens aangevuld met een nieuwe auditregel. | Vastgesteld |
5.3.23 NFR — Realtime en betrouwbaarheid
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-REL-001 | SRS-NFR-REL-001 | Gegeven een live-, badge-, notificatie- of statusweergave die afhankelijk is van realtime updates; wanneer een update mist, vertraagt of de verbinding onzeker is; dan toont het systeem geen verouderde clientstate als definitieve waarheid en gebruikt het server-side brondata of readmodels om de zichtbare toestand te bevestigen of veilig te herstellen. | Vastgesteld |
| AC-NFR-REL-002 | SRS-NFR-REL-002 | Gegeven gemiste realtime updates of een verbroken verbinding; wanneer de gebruiker de betrokken pagina herlaadt, opnieuw opent of reconnect; dan toont het systeem de actuele server-side toestand en voorkomt het dubbele bevestigde mutaties of blijvend verouderde live-/badgeweergave. | Vastgesteld |
5.3.24 NFR — Performance en efficiëntie
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-PER-001 | SRS-NFR-PER-001 | Gegeven een gebruiker met geldige context; wanneer een frontpage opent; dan gebruikt het systeem afgeleide readmodels of compacte queries en geen onnodige volledige detaildatasets. | Vastgesteld |
| AC-NFR-PER-002 | SRS-NFR-PER-002 | Gegeven een PDF-export voor een representatieve resultaatdataset; wanneer de export wordt gestart; dan is de download binnen 30 seconden beschikbaar of toont het systeem een veilige timeout-/foutmelding zonder resultaatdata te muteren en zonder technische renderdetails te lekken. | Vastgesteld |
| AC-NFR-PER-003 | SRS-NFR-PER-003 | Gegeven een overzicht met mogelijk veel records; wanneer de gebruiker het overzicht opent; dan begrenst het systeem de dataset via paginering, filters of samenvatting zodat geen onbeperkte lijst wordt geladen. | Vastgesteld |
5.3.25 NFR — Toegankelijkheid
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-ACC-001 | SRS-NFR-ACC-001 | Gegeven opgeslagen toegankelijkheidsvoorkeuren voor contrast, dyslexielettertype of tekstgrootte; wanneer de gebruiker inlogt of een nieuwe pagina opent; dan past het systeem de voorkeuren consequent toe zonder rol-, relatie- of autorisatiecontext te beïnvloeden. | Vastgesteld |
| AC-NFR-ACC-002 | SRS-NFR-ACC-002 | Gegeven een gebruiker die de webinterface met toetsenbord bedient; wanneer hoofdmenu, formulieren, tabbladen, modals en primaire acties worden gebruikt; dan zijn deze zonder muis bereikbaar, logisch getabd, zichtbaar focusbaar en niet geblokkeerd door alleen-hovergedrag. | Vastgesteld |
| AC-NFR-ACC-003 | SRS-NFR-ACC-003 | Gegeven een leerling die tijdens oefenen of navigeren een foutmelding krijgt; wanneer de melding wordt getoond; dan is de tekst kindgericht, handelingsgericht, niet technisch en zonder gevoelige details, en bevat zij een veilige vervolgstap wanneer de leerling nog kan herstellen of anders een veilige verwijzing naar opnieuw proberen of hulp vragen. | Vastgesteld |
5.3.26 NFR — Logging
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-LOG-001 | SRS-NFR-LOG-001 | Gegeven technische logging, foutlogging of auditlogging; wanneer gegevens worden vastgelegd; dan worden secrets, tokens, volledige requestpayloads, antwoordinhoud van kinderen en onnodige modulepayloaddetails niet in gewone logs opgenomen, terwijl een correlatie-id of herleidbare foutreferentie beschikbaar blijft. | Vastgesteld |
| AC-NFR-LOG-002 | SRS-NFR-LOG-002 | Gegeven audit- of historygegevens; wanneer een gebruiker, docent, ouder/voogd of beheerder deze raadpleegt; dan toont het systeem alleen auditinformatie binnen de toegestane rol-, relatie-, beheer- of objectcontext en nooit interne loggingpayloads als gebruikersinformatie. | Vastgesteld |
5.3.27 NFR — Beschikbaarheid en externe afhankelijkheden
| Acceptatie-ID | Requirement | Criterium | Status |
|---|---|---|---|
| AC-NFR-AVL-001 | SRS-NFR-AVL-001 | Gegeven de identity provider tijdelijk niet beschikbaar is; wanneer een gebruiker wil inloggen of een sessie moet worden vernieuwd; dan toont het systeem veilige feedback, start het geen gedeeltelijke provisioning, en geeft het geen gedeeltelijke account-, rol- of kinddata vrij. | Vastgesteld |
| AC-NFR-AVL-002 | SRS-NFR-AVL-002 | Gegeven een domeinactie die systeemcommunicatie of mail triggert; wanneer mailverzending faalt na een succesvolle bronmutatie; dan blijft de brontransactie consistent, wordt de fout veilig gelogd of opnieuw verwerkbaar gemaakt en ontstaat er geen dubbele domeinmutatie door een retry. | Vastgesteld |
| AC-NFR-AVL-003 | SRS-NFR-AVL-003 | Gegeven een domeinactie die systeemcommunicatie of e-mail triggert; wanneer mailafhandeling vertraagt of faalt; dan blijft de brontransactie zichtbaar in de applicatie volgens de domeinregels, wordt de mailfout veilig herleidbaar gemaakt en wordt de gebruiker niet misleid alsof de domeinactie niet is uitgevoerd. | Vastgesteld |
| AC-REL-013 | SRS-REL-013 | Gegeven een nieuw OefenHub-account met geverifieerd e-mailadres; wanneer er pending externe relatie-uitnodigingen voor dat e-mailadres bestaan; dan claimt het systeem deze uitnodigingen voor de gebruiker zonder ze automatisch te accepteren en zonder verlopen, ingetrokken of reeds gekoppelde uitnodigingen te wijzigen. | Vastgesteld |
| AC-REL-014 | SRS-REL-014 | Gegeven een nieuwe gebruiker met geclaimde compatibele relatie-uitnodigingen; wanneer de rolkeuze is afgerond; dan moet de gebruiker deze uitnodigingen accepteren of weigeren in de onboardingcontext voordat normale appnavigatie beschikbaar wordt, zonder vrije reden te hoeven invullen bij normale weigering. | Vastgesteld |
| AC-ACC-009 | SRS-ACC-009 | Gegeven een ingelogde gebruiker zonder OnboardingCompletedAtUtc; wanneer de gebruiker een normale approute opent; dan bepaalt een centrale onboarding-gate de eerstvolgende verplichte stap en vult OnboardingCompletedAtUtc pas wanneer alle verplichte stappen zijn afgerond; tijdens verplichte onboarding toont de shell geen regulier menu, berichtenicoon of profielmenu maar wel een losse uitlogactie. | Vastgesteld |
| AC-AUTH-006 | SRS-AUTH-006 | Gegeven een OIDC remote failure zoals ontbrekende correlation-cookie; wanneer de callback wordt verwerkt; dan toont OefenHub geen Developer Exception maar een veilige gebruikersmelding en logt technische details met correlation-id zonder tokens of payloads. | Vastgesteld |
| AC-AUTH-007 | SRS-AUTH-007 | Gegeven een ingelogde gebruiker; wanneer een permissioncheck wordt uitgevoerd; dan gebruikt OefenHub de gecachete permission-set als die geldig is, laadt bij cache miss alle actieve permissions uit alle actieve rollen opnieuw, en leegt de cache expliciet bij rol-, account- of rolepermissionmutaties. | Vastgesteld |