Skip to main content

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-IDRequirementCriteriumStatus
AC-AUTH-001SRS-AUTH-001Gegeven 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-002SRS-AUTH-002Gegeven 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-003SRS-AUTH-003Gegeven 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-004SRS-AUTH-004Gegeven 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-005SRS-AUTH-005Gegeven 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-IDRequirementCriteriumStatus
AC-ACC-001SRS-ACC-001Gegeven 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-002SRS-ACC-002Gegeven 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-003SRS-ACC-003Gegeven 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-004SRS-ACC-004Gegeven 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-005SRS-ACC-005Gegeven 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-006SRS-ACC-006Gegeven 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-007SRS-ACC-007Gegeven een ingelogde gebruiker; wanneer deze uitlogt; dan beëindigt het systeem de applicatiesessie zodat beveiligde routes opnieuw authenticatie en contextcontrole vereisen.Vastgesteld
AC-ACC-008SRS-ACC-008Gegeven 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-IDRequirementCriteriumStatus
AC-REL-001SRS-REL-001Gegeven 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-002SRS-REL-002Gegeven 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-003SRS-REL-003Gegeven 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-004SRS-REL-004Gegeven 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-005SRS-REL-005Gegeven 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-006SRS-REL-006Gegeven 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-007SRS-REL-007Gegeven 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-008SRS-REL-008Gegeven 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-009SRS-REL-009Gegeven 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-010SRS-REL-010Gegeven 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-011SRS-REL-011Gegeven 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-012SRS-REL-012Gegeven 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-IDRequirementCriteriumStatus
AC-CAT-001SRS-CAT-001Gegeven 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-002SRS-CAT-002Gegeven 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-003SRS-CAT-003Gegeven 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-004SRS-CAT-004Gegeven bestaande afgeronde runs; wanneer categorieën of modules later wijzigen; dan blijven historische runcontext en resultaatbron onveranderd reconstructeerbaar.Vastgesteld
AC-CAT-005SRS-CAT-005Gegeven 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-006SRS-CAT-006Gegeven 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-007SRS-CAT-007Gegeven 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-IDRequirementCriteriumStatus
AC-LRN-001SRS-LRN-001Gegeven 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-002SRS-LRN-002Gegeven 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-003SRS-LRN-003Gegeven 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-004SRS-LRN-004Gegeven 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-005SRS-LRN-005Gegeven 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-006SRS-LRN-006Gegeven 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-007SRS-LRN-007Gegeven 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-008SRS-LRN-008Gegeven 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-009SRS-LRN-009Gegeven 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-010SRS-LRN-010Gegeven 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-IDRequirementCriteriumStatus
AC-SHR-001SRS-SHR-001Gegeven 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-002SRS-SHR-002Gegeven 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-003SRS-SHR-003Gegeven 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-004SRS-SHR-004Gegeven 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-005SRS-SHR-005Gegeven 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-006SRS-SHR-006Gegeven 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-007SRS-SHR-007Gegeven 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-008SRS-SHR-008Gegeven 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-IDRequirementCriteriumStatus
AC-TCH-001SRS-TCH-001Gegeven 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-002SRS-TCH-002Gegeven 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-003SRS-TCH-003Gegeven 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-004SRS-TCH-004Gegeven 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-005SRS-TCH-005Gegeven 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-006SRS-TCH-006Gegeven 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-007SRS-TCH-007Gegeven 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-008SRS-TCH-008Gegeven 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-IDRequirementCriteriumStatus
AC-GUA-001SRS-GUA-001Gegeven een ouder/voogd; wanneer kinderenoverzicht wordt geopend; dan toont het systeem alleen kinderen met actieve GuardianStudent-relatie.Vastgesteld
AC-GUA-002SRS-GUA-002Gegeven 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-003SRS-GUA-003Gegeven 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-004SRS-GUA-004Gegeven 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-005SRS-GUA-005Gegeven 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-006SRS-GUA-006Gegeven 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-IDRequirementCriteriumStatus
AC-ADM-001SRS-ADM-001Gegeven 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-002SRS-ADM-002Gegeven een beheerder; wanneer die rollen toekent of intrekt; dan valideert het systeem toegestane rolset, accountstatus en auditregistratie.Vastgesteld
AC-ADM-003SRS-ADM-003Gegeven 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-004SRS-ADM-004Gegeven een modulewijziging of modulemigratie; wanneer deze wordt uitgevoerd; dan blijven bestaande runpayloads, resultaten, gedeelde oefeningen en PDF-contexten historisch interpreteerbaar.Vastgesteld
AC-ADM-005SRS-ADM-005Gegeven 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-006SRS-ADM-006Gegeven 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-007SRS-ADM-007Gegeven 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-008SRS-ADM-008Gegeven 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-IDRequirementCriteriumStatus
AC-MSG-001SRS-MSG-001Gegeven 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-002SRS-MSG-002Gegeven 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-003SRS-MSG-003Gegeven 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-004SRS-MSG-004Gegeven 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-005SRS-MSG-005Gegeven 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-006SRS-MSG-006Gegeven 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-007SRS-MSG-007Gegeven 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-008SRS-MSG-008Gegeven 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-009SRS-MSG-009Gegeven 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-010SRS-MSG-010Gegeven 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-001SRS-MAIL-001Gegeven 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-IDRequirementCriteriumStatus
AC-TIC-001SRS-TIC-001Gegeven 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-002SRS-TIC-002Gegeven 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-003SRS-TIC-003Gegeven een melding met status New; wanneer een beheerder extern wil reageren of oplossen; dan vereist het systeem eerst een actieve beheerderkoppeling.Vastgesteld
AC-TIC-004SRS-TIC-004Gegeven 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-005SRS-TIC-005Gegeven 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-006SRS-TIC-006Gegeven 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-007SRS-TIC-007Gegeven 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-008SRS-TIC-008Gegeven 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-IDRequirementCriteriumStatus
AC-LIVE-001SRS-LIVE-001Gegeven 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-002SRS-LIVE-002Gegeven een viewer; wanneer live meekijken wordt gestart; dan controleert het systeem docentcontext of GuardianStudent-relatie plus actieve runbeschikbaarheid.Vastgesteld
AC-LIVE-003SRS-LIVE-003Gegeven een geldige live-start; wanneer de liveweergave daadwerkelijk opent; dan registreert het systeem auditgegevens over viewer, leerling, run en tijdstip.Vastgesteld
AC-LIVE-004SRS-LIVE-004Gegeven 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-005SRS-LIVE-005Gegeven 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-006SRS-LIVE-006Gegeven 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-IDRequirementCriteriumStatus
AC-CNT-001SRS-CNT-001Gegeven 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-002SRS-CNT-002Gegeven 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-003SRS-CNT-003Gegeven een beheerder die vaste publieke pagina-inhoud beheert; wanneer tekst wordt gewijzigd; dan wijzigt het systeem geen routes, formulierlogica of componentstructuur.Vastgesteld
AC-CNT-004SRS-CNT-004Gegeven 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-IDRequirementCriteriumStatus
AC-POP-001SRS-POP-001Gegeven een beheerder die popupinhoud wijzigt; wanneer technische sleutel, actie of renderer wordt aangepast; dan weigert het systeem die wijziging.Vastgesteld
AC-POP-002SRS-POP-002Gegeven 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-003SRS-POP-003Gegeven 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-004SRS-POP-004Gegeven een beheerder die een systeemberichttemplate opslaat; wanneer de tekst onbekende of niet-ondersteunde placeholders bevat; dan weigert het systeem de opslag.Vastgesteld
AC-POP-005SRS-POP-005Gegeven 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-IDRequirementCriteriumStatus
AC-PDF-001SRS-PDF-001Gegeven een afgeronde run; wanneer een bevoegde gebruiker PDF exporteert; dan gebruikt het systeem dezelfde historische resultaatbron als de resultaatweergave.Vastgesteld
AC-PDF-002SRS-PDF-002Gegeven 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-003SRS-PDF-003Gegeven 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-004SRS-PDF-004Gegeven 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-IDRequirementCriteriumStatus
AC-MOD-001SRS-MOD-001Gegeven een moduleconfiguratie of runpayload; wanneer deze wordt opgeslagen; dan bevat de payload voldoende module- en schemainformatie voor latere interpretatie.Vastgesteld
AC-MOD-002SRS-MOD-002Gegeven 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-003SRS-MOD-003Gegeven 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-004SRS-MOD-004Gegeven 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-005SRS-MOD-005Gegeven 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-IDRequirementCriteriumStatus
AC-RDM-001SRS-RDM-001Gegeven 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-002SRS-RDM-002Gegeven 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-003SRS-RDM-003Gegeven 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-004SRS-RDM-004Gegeven 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-005SRS-RDM-005Gegeven 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-006SRS-RDM-006Gegeven 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-007SRS-RDM-007Gegeven 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-008SRS-RDM-008Gegeven 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-009SRS-RDM-009Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-RDM-001SRS-NFR-RDM-001Gegeven 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-002SRS-NFR-RDM-002Gegeven 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-003SRS-NFR-RDM-003Gegeven 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-004SRS-NFR-RDM-004Gegeven 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-005SRS-NFR-RDM-005Gegeven 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-IDRequirementCriteriumStatus
AC-ARCH-001SRS-ARCH-001Gegeven een gebruikersactie; wanneer deze domeingedrag veroorzaakt; dan wordt autorisatie, usecase-orkestratie en bron-van-waarheidbehandeling binnen OefenHub server-side bepaald.Vastgesteld
AC-ARCH-002SRS-ARCH-002Gegeven 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-003SRS-ARCH-003Gegeven 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-004SRS-ARCH-004Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-SEC-001SRS-NFR-SEC-001Gegeven 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-002SRS-NFR-SEC-002Gegeven 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-003SRS-NFR-SEC-003Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-PRV-001SRS-NFR-PRV-001Gegeven 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-002SRS-NFR-PRV-002Gegeven 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-003SRS-NFR-PRV-003Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-AUD-001SRS-NFR-AUD-001Gegeven 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-002SRS-NFR-AUD-002Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-REL-001SRS-NFR-REL-001Gegeven 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-002SRS-NFR-REL-002Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-PER-001SRS-NFR-PER-001Gegeven 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-002SRS-NFR-PER-002Gegeven 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-003SRS-NFR-PER-003Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-ACC-001SRS-NFR-ACC-001Gegeven 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-002SRS-NFR-ACC-002Gegeven 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-003SRS-NFR-ACC-003Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-LOG-001SRS-NFR-LOG-001Gegeven 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-002SRS-NFR-LOG-002Gegeven 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-IDRequirementCriteriumStatus
AC-NFR-AVL-001SRS-NFR-AVL-001Gegeven 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-002SRS-NFR-AVL-002Gegeven 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-003SRS-NFR-AVL-003Gegeven 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 |