Business rules
Dit document bevat domeinbrede regels die in meerdere usecases kunnen terugkomen. Usecases verwijzen naar deze regels met een stabiele BusinessRule-ID.
Tabelstructuur
| BusinessRule-ID | Domein | Regel | Geldt voor | Bron / toelichting |
|---|---|---|---|---|
| BR-GEN-SEC-001 | Autorisatie | Frontend-zichtbaarheid is nooit voldoende beveiliging; de backend controleert de relevante rol-, relatie- of objectcontext. | Alle afgeschermde acties | Algemene OefenHub-regel. |
| BR-GEN-REL-001 | Relaties | De relatiepagina toont actieve relaties en openstaande verstuurde uitnodigingen die voor de huidige gebruiker zichtbaar horen te zijn. | UC-GEN-REL-001 | Inkomende uitnodigingen worden niet als aparte lijst op de relatiepagina aangeboden. |
| BR-GEN-REL-002 | Relaties | Inkomende relatie-uitnodigingen worden via systeemberichten aangeboden. | UC-GEN-REL-001, UC-GEN-REL-005 | Dit is de enige leidende ingang voor het accepteren of afwijzen van een relatie-uitnodiging. |
| BR-GEN-REL-003 | Relaties | Een relatie-uitnodiging activeert nooit direct een relatie; acceptatie door de ontvanger blijft verplicht. | UC-GEN-REL-002, UC-GEN-REL-003, UC-GEN-REL-005 | Voorkomt dat uitnodigen en relatievorming functioneel door elkaar lopen. |
| BR-GEN-REL-004 | Relaties | Een vrienduitnodiging mag alleen vanuit een actieve leerlingcontext worden gestart. | UC-GEN-REL-002 | Een vriendschap is functioneel een relatie tussen twee leerlingrolcontexten. |
| BR-GEN-REL-005 | Relaties | Een ouder-/voogduitnodiging mag alleen vanuit een actieve leerlingcontext worden gestart. | UC-GEN-REL-003 | De zichtbare rol is Ouder/voogd; de technische rolcontext is Guardian. |
| BR-GEN-REL-006 | Relaties | Er mag geen nieuwe relatie-uitnodiging worden aangemaakt wanneer al een actieve identieke relatie bestaat. | UC-GEN-REL-002, UC-GEN-REL-003 | Server-side duplicaatcontrole verplicht. |
| BR-GEN-REL-007 | Relaties | Er mag geen nieuwe relatie-uitnodiging worden aangemaakt wanneer al een openstaande identieke of kruislings conflicterende uitnodiging bestaat. | UC-GEN-REL-002, UC-GEN-REL-003 | Kruislings uitnodigen tussen dezelfde gebruikers en rolcontexten mag geen dubbele pending uitnodigingen opleveren. |
| BR-GEN-REL-008 | Relaties | Een uitnodiging naar een onbekend e-mailadres mag alleen na expliciete bevestiging worden verstuurd, waarbij duidelijk is dat de naam van de uitnodiger in de externe e-mail wordt gedeeld. | UC-GEN-REL-002, UC-GEN-REL-003 | Ondersteunt transparantie richting uitnodiger en ontvanger. |
| BR-GEN-REL-009 | Relaties | Een openstaande uitnodiging naar een onbekend e-mailadres kan gedurende 7 dagen aan een nieuw geregistreerd account met hetzelfde genormaliseerde e-mailadres worden gekoppeld. | UC-GEN-REL-002, UC-GEN-REL-003, UC-GEN-REL-005 | Na de geldigheidsduur mag de uitnodiging niet meer accepteerbaar zijn. |
| BR-GEN-REL-010 | Relaties | Na registratie wordt gecontroleerd of er pending relatie-uitnodigingen bestaan voor het geregistreerde e-mailadres; pas nadat een UserId bekend is kan een systeembericht voor de ontvanger worden aangemaakt. | UC-GEN-REL-005 | Edgecase voor externe uitnodigingen. |
| BR-GEN-REL-011 | Relaties | Accepteren van een relatie-uitnodiging gebeurt direct, tenzij de gebruiker eerst bewust een ontbrekende doelrol moet kiezen of activeren. | UC-GEN-REL-005 | Er is geen algemene acceptatiebevestigingspopup. |
| BR-GEN-REL-012 | Relaties | Afwijzen van een relatie-uitnodiging vraagt altijd een bevestigingspopup. | UC-GEN-REL-005 | Voorkomt onbedoeld definitief afwijzen. |
| BR-GEN-REL-013 | Relaties | Bij acceptatie of afwijzing van een relatie-uitnodiging wordt de uitnodiger via een systeembericht of gelijkwaardige notificatie geïnformeerd. | UC-GEN-REL-005 | Geldt voor vriend- en ouder/voogduitnodigingen. |
| BR-GEN-REL-014 | Relaties | Afgehandelde uitnodigingen verdwijnen uit openstaande overzichten; reconstructie loopt via historie/audit. | UC-GEN-REL-001, UC-GEN-REL-005 | Er is geen aparte UI voor afgehandelde uitnodigingen. |
| BR-GEN-REL-015 | Relaties | Elke ontkoppelactie en elk ontkoppelverzoek opent altijd eerst een bevestigingsmodal. | UC-GEN-REL-004 | Geldt voor alle relatietypen waarvoor de actie beschikbaar is. |
| BR-GEN-REL-016 | Relaties | Handmatig ontkoppelen is een soft-deactivatie; relaties worden niet hard verwijderd. | UC-GEN-REL-004 | UserRelationships.IsActive = false, aangevuld met audit/event. |
| BR-GEN-REL-017 | Relaties | Ontkoppelen mag alleen door een betrokken partij in een geldige rolcontext of door een expliciet geautoriseerde beheerflow. | UC-GEN-REL-004 | Backendcontrole is leidend. |
| BR-GEN-REL-018 | Relaties | Sommige relatietypen kunnen directe ontkoppeling blokkeren en alleen een ontkoppelverzoek toestaan. | UC-GEN-REL-004 | Wordt per relatietype/rolcontext bepaald. |
| BR-GEN-REL-019 | Relaties | Ontkoppelen beëindigt toekomstige relatieafhankelijke toegang, maar herschrijft geen historische berichten, oefenruns of auditrecords. | UC-GEN-REL-004 | Historische gegevens blijven herleidbaar. |
| BR-GEN-REL-020 | Relaties | OefenHub is geen sociaal platform; vriendschapsrelaties zijn functioneel bedoeld voor toegestane communicatie en delen binnen OefenHub. | UC-GEN-REL-002 | Beperkt interpretatie van vriendschap tot functionele applicatiecontext. |
| BR-GEN-MSG-001 | Berichten | Het berichtenoverzicht toont alleen systeemberichten en privéberichtthreads die bij de ingelogde gebruiker horen. | UC-GEN-MSG-001 | Server-side objectfiltering is verplicht. |
| BR-GEN-MSG-002 | Berichten | Systeemberichten zijn niet verwijderbaar door gebruikers. | UC-GEN-MSG-001 | De verwijderactie is disabled en backend weigert gemanipuleerde requests. |
| BR-GEN-MSG-003 | Berichten | Verwijderen van een privéberichtthread uit de eigen mailboxweergave is participantgebonden en verwijdert de thread of berichten niet voor andere deelnemers. | UC-GEN-MSG-001, UC-GEN-MSG-003, UC-GEN-MSG-005 | Wordt vastgelegd via de participant-/mailboxlaag. |
| BR-GEN-MSG-004 | Berichten | Gelezen- en ongelezenstatus wordt gebruikergebonden bepaald. | UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-004 | Voor systeemberichten via ReadAtUtc, voor privéthreads via participant-readstate. |
| BR-GEN-MSG-005 | Berichten | Headerbadge en samenvattingskaart Ongelezen gebruiken dezelfde server-side ongelezenlogica. | UC-GEN-MSG-001, UC-GEN-MSG-002 | Voor leerlingen kan alleen de badge tijdelijk verborgen zijn tijdens een actieve oefenrun. |
| BR-GEN-MSG-006 | Berichten | Berichtpreviews en rich-textinhoud worden veilig gesanitized of geëncodeerd voordat zij in het overzicht worden weergegeven. | UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-004 | Voorkomt rendering van actieve inhoud. |
| BR-GEN-MSG-007 | Berichten | De bewaartermijn voor privéberichten wordt uit systeeminstellingen afgeleid en mag niet als mockupwaarde worden hardcoded. | UC-GEN-MSG-001 | Systeemberichten vallen niet onder deze privéberichtenretentie. |
| BR-GEN-MSG-008 | Berichten | Zoek-, filter- en pagineringsacties mogen de geautoriseerde mailboxdataset nooit verruimen. | UC-GEN-MSG-001 | Filters werken altijd binnen de eigen gebruikercontext. |
| BR-GEN-MSG-009 | Berichten | Thread-events binnen privéberichtthreads kunnen bijdragen aan de ongelezenstatus van een thread. | UC-GEN-MSG-001, UC-GEN-MSG-003, UC-GEN-MSG-004 | Thread-events zijn geen losse systeemberichten en geen gewone privéberichten. |
| BR-GEN-MSG-010 | Berichten | Het openen van een systeembericht of privéthread geldt als leesactie voor de ingelogde gebruiker. | UC-GEN-MSG-003 | Alleen de eigen systeem- of participantreadstate wordt aangepast. |
| BR-GEN-MSG-011 | Berichten | SystemMessages.EntityType + EntityId bepalen alleen de mogelijke vervolgcontext; openen van het systeembericht verwerkt het onderliggende domeinobject niet automatisch. | UC-GEN-MSG-003 | Relatie-uitnodigingen, tickets en privéthreads behouden hun eigen vervolgflows. |
| BR-GEN-MSG-012 | Berichten | De open-berichtweergave van een privéthread mag alleen berichten en thread-events uit dezelfde geautoriseerde thread tonen. | UC-GEN-MSG-003, UC-GEN-MSG-004 | Voorkomt dat threadcontexten of events van andere threads zichtbaar worden. |
| BR-GEN-MSG-013 | Berichten | Privéberichtantwoorden zijn alleen toegestaan binnen een actieve, beantwoordbare thread waarin de verzender nog een geldige participant- en relatiecontext heeft. | UC-GEN-MSG-004 | De backend controleert dit opnieuw op verzendmoment. |
| BR-GEN-MSG-014 | Berichten | Onderwerpwijzigingen binnen privéthreads worden als thread-event vastgelegd en niet als systeembericht. | UC-GEN-MSG-004 | Eventtype SubjectChanged; zichtbaar als threadinterne systeemregel. |
| BR-GEN-MSG-015 | Berichten | Een verzendactie voor een privébericht wordt transactioneel verwerkt. | UC-GEN-MSG-002, UC-GEN-MSG-004 | Onderwerpwijziging, thread-event, bericht, threadmetadata en readstate mogen geen gedeeltelijke mutatie achterlaten. |
| BR-GEN-MSG-016 | Berichten | Nieuwe privéberichten mogen alleen worden verzonden naar ontvangers binnen een geldige relatie-, vriendschaps- of deelnemerscontext. | UC-GEN-MSG-002 | De backend controleert dit opnieuw op verzendmoment. |
| BR-GEN-MSG-017 | Berichten | Nieuwe privéberichten actualiseren de ongelezenstatus van de ontvanger, terwijl de leerlingbadge tijdens een actieve oefenrun visueel verborgen blijft. | UC-GEN-MSG-002 | Alleen UI-zichtbaarheid wordt onderdrukt; readstate blijft intact. |
| BR-GEN-MSG-018 | Berichten | Gebruikersverwijdering van een privéthread is geen hard delete van berichtinhoud. | UC-GEN-MSG-005 | PrivateMessages blijven bestaan; de eigen participantcontext bepaalt de mailboxzichtbaarheid. |
| BR-GEN-MSG-019 | Berichten | Verwijderen van een privéthread vraagt altijd een expliciete bevestiging voordat de participantgebonden mutatie wordt uitgevoerd. | UC-GEN-MSG-005 | De bevestiging verloopt via POP-GEN-MSG-DELETE-CONFIRM. |
| BR-GEN-MSG-020 | Berichten | Het verwijderen van een privéthread uit de eigen mailbox genereert geen systeembericht naar andere deelnemers. | UC-GEN-MSG-005 | Andere deelnemers behouden hun eigen mailboxweergave en readstate. |
| BR-GEN-MSG-021 | Berichten | Wanneer een bericht, thread of mailboxitem niet bestaat, niet toegankelijk is of voor de gebruiker verwijderd is, toont het systeem een generieke niet-beschikbaarmelding zonder technische identifiers of detaildata prijs te geven. | UC-GEN-MSG-003, UC-GEN-MSG-004, UC-GEN-MSG-005 | De melding verloopt via POP-GEN-MSG-NOT-AVAILABLE wanneer een popup nodig is; inline foutstaten mogen dezelfde betekenis hanteren zonder tekstduplicatie. |
| BR-GEN-POP-001 | Popups | Voor niet-custom popups is de popup-registertabel de enige inhoudelijke bron voor titel, tekst, knopteksten, knopacties en inputvelden. | Popup-register, Popup-themes | Detailtabellen zijn alleen voor Variant=Custom. |
| BR-LLN-EXE-001 | Oefenen | Tijdens een actieve leerling-oefenrun worden afleidende tellerindicaties, badges, systeemnotificatie-overlays en meldingen-/berichtenterugkoppelingen tijdelijk verborgen of uitgesteld. | Leerling / oefenen | Onderliggende berichten, meldingen en notificaties blijven server-side bestaan en worden na verlaten of afronden opnieuw zichtbaar wanneer relevant. |
| BusinessRule-ID | Domein | Regel | Geldt voor | Bron / toelichting |
|---|---|---|---|---|
| BR-GEN-ACC-001 | Generiek | Account- en credentialflows blijven binnen de identity-providerverantwoordelijkheid voor zover daar bronhouderschap ligt. | UC-GEN-PROF-002 | Afgeleid uit generieke usecases. |
| BR-GEN-ACC-002 | Account | Wanneer externe authenticatie slaagt maar interne OefenHub-provisioning of initialisatie faalt, krijgt de gebruiker geen reguliere OefenHub-sessie en wordt de fout technisch gelogd zonder credentials. | UC-GEN-ACC-001 | Geen automatische gebruikersgerichte herstelactie; contactroute en beheeranalyse zijn leidend. |
| BR-GEN-NOT-001 | Systeemnotificaties | Systeemnotificaties mogen het laden van de frontpage niet blokkeren; de frontpage laadt eerst, notificatiecontrole volgt daarna. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-NOT-002 | Systeemnotificaties | Een systeemnotificatie is geen mailbox-systeembericht en gebruikt geen SystemMessages. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-NOT-003 | Systeemnotificaties | Een systeemnotificatie is geen popupregister-popup en wordt niet beheerd via PopupDetails. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-NOT-004 | Systeemnotificaties | Actieve systeemnotificaties worden bepaald op basis van UTC-start- en eindmoment, doelgroep en weergaveregel. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-NOT-005 | Systeemnotificaties | Bij meerdere gelijktijdig relevante notificaties wordt de oudste aangemaakte notificatie als eerste getoond. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-NOT-006 | Systeemnotificaties | OncePerBrowser wordt clientside afgedwongen via cookie of vergelijkbare browserwaarde; er is geen server-side gebruikersgebonden gezienlog. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-NOT-007 | Systeemnotificaties | Wijziging van een bestaande notificatie doorbreekt een bestaande OncePerBrowser-browserregistratie niet automatisch. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-NOT-008 | Systeemnotificaties | Een Always-notificatie mag na sluiten niet direct opnieuw verschijnen binnen dezelfde lopende notificatiereeks. | UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-001 | Profiel | Een gebruiker mag via de normale profielpagina uitsluitend het eigen profiel bekijken en beheren. | UC-GEN-PROF-001, UC-GEN-PROF-002, UC-GEN-PROF-003, UC-GEN-PROF-004, UC-GEN-PROF-005 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-002 | Profiel | OefenHub beheert applicatieprofielgegevens; identity-providercredentials worden niet in OefenHub verwerkt. | UC-GEN-PROF-001, UC-GEN-PROF-002, UC-GEN-PROF-004 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-003 | Profiel | Profielafbeeldingen zijn vooraf gedefinieerde avatars of fallbackweergaven; vrije upload is niet toegestaan. | UC-GEN-PROF-001 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-004 | Profiel | Actieve niveaucontext moet worden afgeleid uit toegestane gebruikers- en rolcontext. | UC-GEN-PROF-001, UC-GEN-PROF-002, UC-GEN-PROF-003 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-005 | Profiel | Gebruikers waarvoor niveaucontext verplicht is, moeten een geldige niveaucontext instellen voordat de normale context volledig beschikbaar is. | UC-GEN-PROF-003 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-006 | Profiel | Profielfoto’s zijn vooraf gedefinieerde profielafbeeldingen; vrije upload is niet toegestaan. | UC-GEN-PROF-004 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-007 | Profiel | Toegankelijkheidsinstellingen worden direct opgeslagen en toegepast. | UC-GEN-PROF-005, UC-GEN-PROF-006 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-008 | Profiel | Toegankelijkheidsinstellingen kunnen naar een technische cookie worden gespiegeld voor vóór-login toepassing. | UC-GEN-PROF-005, UC-GEN-PROF-006 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-009 | Profiel | De sitebrede toegankelijkheidsfeature bepaalt of pagina, bediening en cookie-effect actief zijn. | UC-GEN-PROF-005, UC-GEN-PROF-006 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-010 | Profiel | Algemene voorkeuren worden functioneel gescheiden van profielgegevens en toegankelijkheidsinstellingen. | UC-GEN-PROF-007 | Afgeleid uit generieke usecases. |
| BR-GEN-PROF-011 | Profiel | Voorkeuren veranderen geen autorisaties of zichtbare gegevensset, maar uitsluitend presentatiegedrag. | UC-GEN-PROF-007 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-001 | Meldingen | Iedere ingelogde gebruiker met toegang tot de normale applicatie mag een melding indienen wanneer de meldingenfunctionaliteit beschikbaar is. | UC-GEN-TIC-001 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-002 | Meldingen | Een nieuwe melding krijgt status New zolang er geen actieve beheerderkoppeling bestaat. | UC-GEN-TIC-001 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-003 | Meldingen | Technische context bij een melding wordt als snapshot opgeslagen en niet achteraf live herberekend. | UC-GEN-TIC-001 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-004 | Meldingen | Meldingmutaties moeten auditbaar zijn via TicketHistory. | UC-GEN-TIC-001 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-005 | Meldingen | Systeemberichten uit het meldingenproces verwijzen via EntityType = Ticket en EntityId. | UC-GEN-TIC-001 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-006 | Meldingen | Meldingcategorieën zijn gesloten functionele waarden en geen vrije gebruikersinvoer. | UC-GEN-TIC-001 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-007 | Meldingen | Een eindgebruiker ziet uitsluitend eigen meldingen. | UC-GEN-TIC-002, UC-GEN-TIC-003, UC-GEN-TIC-004, UC-GEN-TIC-005 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-008 | Meldingen | De gebruikersweergave van Meldingen gebruikt de tabbladen Open, Wacht op mij en Gesloten en geen Alles-tab. | UC-GEN-TIC-002 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-009 | Meldingen | De actie-indicatie voor Wacht op mij wordt afgeleid uit eigen meldingen met status WaitingForUser. | UC-GEN-TIC-002 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-010 | Meldingen | Gebruikersgerichte meldingstatussen mogen afgeleid zijn van processtatus, sluitregistratie en heropentermijn. | UC-GEN-TIC-002, UC-GEN-TIC-003 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-011 | Meldingen | Interne beheerinformatie wordt niet getoond in gebruikersgerichte meldingoverzichten. | UC-GEN-TIC-002, UC-GEN-TIC-003 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-012 | Meldingen | De gebruikersdetailpagina gebruikt de tabbladen Melding, Oplossing en Discussie. | UC-GEN-TIC-003 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-013 | Meldingen | Externe beheercommunicatie wordt gebruikersgericht als Beheerder weergegeven. | UC-GEN-TIC-003, UC-GEN-TIC-004 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-014 | Meldingen | Een systeemberichtverwijzing naar een ticket geeft geen objecttoegang zonder server-side controle. | UC-GEN-TIC-003 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-015 | Meldingen | Een gebruiker kan binnen een open melding uitsluitend extern reageren. | UC-GEN-TIC-004 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-016 | Meldingen | Een gebruikersreactie op WaitingForUser maakt de melding opnieuw behandelbaar. | UC-GEN-TIC-004 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-017 | Meldingen | Reguliere reacties op functioneel gesloten meldingen zijn niet toegestaan. | UC-GEN-TIC-004, UC-GEN-TIC-005 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-018 | Meldingen | Een gebruiker mag een eigen open melding zelf sluiten met verplichte reden. | UC-GEN-TIC-005 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-019 | Meldingen | Sluiten door gebruiker hergebruikt TicketClosures met resolutietype ClosedByUser. | UC-GEN-TIC-005 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-020 | Meldingen | De reden van sluiten door gebruiker wordt extern zichtbaar vastgelegd en niet als aparte sluitingstabel gemodelleerd. | UC-GEN-TIC-005 | Afgeleid uit generieke usecases. |
| BR-GEN-TIC-021 | Meldingen | Verlopen heropentermijnen worden periodiek en idempotent verwerkt via TickerQ, minimaal iedere 12 uur, en niet via afzonderlijke jobs per melding. | UC-GEN-TIC-016 | Vangt gemiste eerdere scheduleruitvoeringen op doordat telkens op actuele databasecriteria wordt gezocht. |
| BR-GEN-TIC-022 | Meldingen | Het verlopen van een heropentermijn maakt geen nieuwe sluitregistratie en verstuurt geen extra systeembericht. | UC-GEN-TIC-016 | De bestaande TicketClosures blijft formele bron; eventueel alleen compacte history. |
| BusinessRule-ID | Domein | Regel | Geldt voor | Bron / toelichting |
|---|---|---|---|---|
| BR-GEN-ACC-002 | Account | OefenHub koppelt een identity-providergebruiker aan een intern account via Users.ExternalId. | UC-GEN-ACC-001, UC-GEN-ACC-002 | ExternalId is server-side gevuld en niet via GUI wijzigbaar. |
| BR-GEN-ACC-003 | Account | Accountprovisioning is idempotent op ExternalId; dezelfde externe identiteit mag nooit meerdere interne OefenHub-accounts opleveren. | UC-GEN-ACC-001, UC-GEN-ACC-002 | Duplicaten blokkeren sessieopbouw en worden technisch gelogd. |
| BR-GEN-ACC-004 | Account | Een geldige identity-providerlogin geeft alleen toegang tot OefenHub wanneer het interne Users-record bestaat, actief is en naar een geldige applicatiecontext kan worden vertaald. | UC-GEN-ACC-002, UC-GEN-ACC-003 | Applicatieautorisatie blijft OefenHub-verantwoordelijkheid. |
| BR-GEN-ACC-005 | Account | Users.IsActive = false blokkeert reguliere OefenHub-toegang. | UC-GEN-ACC-001, UC-GEN-ACC-002, UC-GEN-ACC-004, UC-GEN-ACC-005 | Geldt ook bij geldige identity-providercontext. |
| BR-GEN-ACC-006 | Account | Bij succesvolle sessieverwerking voor een actief account wordt Users.LastSeenAtUtc bijgewerkt. | UC-GEN-ACC-002 | Geen formele audittrail. |
| BR-GEN-ACC-007 | Account | Voor ieder intern account moet een UserSettings-record beschikbaar zijn voordat reguliere gebruikersflows afhankelijk worden van instellingen. | UC-GEN-ACC-001, UC-GEN-ACC-002, UC-GEN-ACC-003 | Ontbrekende settings mogen veilig worden hersteld. |
| BR-GEN-ACC-008 | Account | Herstelinitialisatie van UserSettings mag geen rollen, relaties, autorisaties, berichten, meldingen, oefendata of niveauautorisaties wijzigen. | UC-GEN-ACC-003 | Beperkt tot toegestane defaults. |
| BR-GEN-ACC-009 | Account / Relaties | Pending relatie-uitnodigingen op e-mailadres mogen pas aan een gebruiker worden gekoppeld nadat een intern Users.Id bestaat. | UC-GEN-ACC-001 | Geldige pending uitnodigingen met genormaliseerd e-mailadres. |
| BR-GEN-ACC-010 | Account / Communicatie | Systeemberichten voor relatie-uitnodigingen mogen pas worden aangemaakt wanneer er een interne ontvanger bestaat. | UC-GEN-ACC-001 | SystemMessages.RecipientUserId vereist intern account. |
| BR-GEN-ACC-011 | Account | Reguliere login maakt geen relaties, uitnodigingen, systeemberichten, tickets, privéberichten, oefenruns of systeemnotificaties aan. | UC-GEN-ACC-002 | Provisioning is de enige accountlogin-route met uitnodigingskoppeling. |
| BR-GEN-ACC-012 | Account | Actieve frontendcontexten worden server-side bepaald op basis van rollen, instellingen en business rules. | UC-GEN-ACC-002, UC-GEN-ACC-003 | Clientstate en routeparameters zijn niet leidend. |
| BR-GEN-ACC-013 | Account | Een gebruiker zonder actieve rolcontext krijgt geen reguliere rolfrontpage en geen toegang tot rolgebonden domeinfunctionaliteit. | UC-GEN-ACC-003 | Beperkte context zonder rol. |
| BR-GEN-ACC-014 | Account | Ontbrekende verplichte profiel- of niveaucontext wordt via bestaande profielusecases afgehandeld en niet automatisch met aannames gevuld. | UC-GEN-ACC-002, UC-GEN-ACC-003 | Verplicht niveau blijft profielusecase. |
| BR-GEN-ACC-015 | Account | Systeemnotificaties worden pas na succesvolle frontpage- of contextweergave verwerkt en blokkeren accountlogin of contextbepaling niet. | UC-GEN-ACC-002, UC-GEN-ACC-003 | Verwerking via systeemnotificatie-usecases. |
| BR-GEN-ACC-016 | Account | Selfservice-accountverwijdering mag uitsluitend het eigen interne OefenHub-account raken. | UC-GEN-ACC-004 | Beheerderverwijdering is een aparte beheerflow. |
| BR-GEN-ACC-017 | Account | Accountverwijdering door een eindgebruiker leidt direct tot anonimisering en opruiming van afhankelijke toegang. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Geen eindgebruikers-tussenstatus “verwijderd maar nog niet geanonimiseerd”. |
| BR-GEN-ACC-018 | Account | OefenHub verwijdert of wijzigt het identity-provideraccount niet tijdens accountverwijdering of anonimisering. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Afbakening Keycloak / identity provider. |
| BR-GEN-ACC-019 | Account | Na anonimisering mag dezelfde ExternalId niet stilzwijgend opnieuw als regulier nieuw OefenHub-account worden geprovisioneerd. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Voorkomt omzeilen van verwijderde/inactieve accountstatus. |
| BR-GEN-ACC-020 | Account | Zichtbare persoonsgegevens van een geanonimiseerd account worden vervangen door vastgestelde systeemwaarden. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Inclusief Anoniem, # en anoniem.<code>@verwijderd.acc. |
| BR-GEN-ACC-021 | Account | De systeemwaarde # voor MiddleName is gereserveerd voor systeemgebruik en mag niet via gewone gebruikersinvoer worden opgeslagen. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Naamvalidatie en anonimisering. |
| BR-GEN-ACC-022 | Account / Relaties | Actieve relaties en openstaande uitnodigingen van of naar een geanonimiseerd account mogen geen toekomstige toegang of acceptatie meer opleveren. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Historie blijft behouden waar nodig. |
| BR-GEN-ACC-023 | Account / Oefenen | Open oefenruns van een verwijderd of geanonimiseerd account mogen niet meer hervatbaar zijn en tellen niet mee in normale geschiedenis- of statistiekweergaven. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Afgeronde geschiedenis kan onder geanonimiseerde identiteit blijven bestaan. |
| BR-GEN-ACC-024 | Account / Docentstructuur | Niveau-eigenaarschap van een verwijderende docent moet worden overgedragen aan een geldige collaborator of historisch/inactief worden gemaakt wanneer geen opvolger bestaat. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Geen onbepaald eigenaarschap. |
| BR-GEN-ACC-025 | Account | Accountverwijdering en anonimisering moeten technisch herleidbaar zijn via account lifecycle-logging en relevante domeinhistorie. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Zonder credentials of secrets. |
| BR-GEN-ACC-026 | Account | Falen van de verwijder- of anonimiseerflow mag niet leiden tot een half geanonimiseerd account dat nog reguliere toegang heeft. | UC-GEN-ACC-004, UC-GEN-ACC-005 | Transactioneel of gecontroleerde workflow. |
| BR-GEN-ACC-027 | Account | Logout beëindigt de lokale OefenHub-applicatiesessie, maar vereist geen aparte domeinsessietabel. | UC-GEN-ACC-006 | Sessiestate is technisch. |
| BR-GEN-ACC-028 | Account | Logout moet routeguard en server-side sessiecontrole opnieuw laten afdwingen voor beveiligde routes. | UC-GEN-ACC-006 | Browsergeschiedenis of oude clientstate mag geen domeindata tonen. |
| BR-GEN-ACC-029 | Account | Logout rondt een niet-afgeronde oefenrun niet af. | UC-GEN-ACC-006 | Oefenrun blijft alleen hervatbaar bij latere geldige context. |
| BR-GEN-ACC-030 | Account | Logout mag geen rollen, relaties, uitnodigingen, systeemberichten, privéberichten, tickets, oefenruns of systeemnotificaties aanmaken of inhoudelijk wijzigen. | UC-GEN-ACC-006 | Alleen sessie/realtime-context beëindigen. |
| BusinessRule-ID | Domein | Regel | Geldt voor | Bron / toelichting |
|---|---|---|---|---|
| BR-LLN-TOEG-001 | Leerling / Oefenaanbod | Een leerling ziet alleen categorieën en oefeningen die binnen de actieve niveaucontext server-side toegankelijk zijn. | UC-LLN-TOEG-001 t/m UC-LLN-TOEG-006 | Afgeleid uit leerlingusecases. |
| BR-LLN-TOEG-002 | Leerling / Oefenaanbod | Frontendzichtbaarheid van een categorie of oefening geeft nooit zelfstandig startrecht. | UC-LLN-TOEG-003 | Backendcontrole blijft verplicht. |
| BR-LLN-TOEG-003 | Leerling / Oefenaanbod | Intrekken van autorisatie blokkeert nieuw starten en hervatten binnen die context, maar herschrijft afgeronde geschiedenis niet. | UC-LLN-TOEG-004 | Historische resultaten blijven raadpleegbaar waar toegestaan. |
| BR-LLN-FP-001 | Leerling / Frontpage | De leerling-frontpage is een overzichts- en oriëntatiepagina en voert geen diepe beheer- of mutatieacties uit. | UC-LLN-FP-001 t/m UC-LLN-FP-005 | Frontpageblokken zijn afgeleide readmodels. |
| BR-LLN-FP-002 | Leerling / Frontpage | Populaire categorieën, recent geoefend en verder-oefenen worden berekend binnen de actieve niveaucontext. | UC-LLN-FP-003 t/m UC-LLN-FP-005 | Geen aparte frontpagebron. |
| BR-LLN-OEF-001 | Leerling / Oefenen | Een nieuwe oefening start direct een zelfstandige exercise run en opent de eerste vraag. | UC-LLN-OEF-003 | Geen apart configuratiescherm voor leerling. |
| BR-LLN-OEF-002 | Leerling / Oefenen | Na ieder bevestigd antwoord wordt voortgang server-side opgeslagen. | UC-LLN-OEF-004 | Nodig voor hervatten en live meekijken. |
| BR-LLN-OEF-003 | Leerling / Oefenen | Geen idee telt als fout en toont het juiste antwoord volgens de daarvoor geldende flow. | UC-LLN-OEF-006 | Waarschuwing en verborgen voorkeur centraal beheren. |
| BR-LLN-OEF-004 | Leerling / Oefenen | Onderbreken of logout rondt een oefening niet af. | UC-LLN-OEF-007, UC-GEN-ACC-006 | Niet-afgeronde run blijft niet als geschiedenisregel zichtbaar. |
| BR-LLN-RES-001 | Leerling / Resultaten | Resultaten en statistieken worden na afronding uit opgeslagen rungegevens gelezen. | UC-LLN-RES-001, UC-LLN-RES-002 | Herberekening uit payload is herstel/controle. |
| BR-LLN-RES-002 | Leerling / Resultaten | Een opnieuw gemaakte oefening is een nieuwe zelfstandige run en wijzigt de bronrun niet. | UC-LLN-RES-003 | Geldt ook bij gedeelde oefeningen. |
| BR-LLN-HIS-001 | Leerling / Geschiedenis | Geschiedenis toont alleen afgeronde runs binnen de relevante leerlingcontext. | UC-LLN-HIS-001 t/m UC-LLN-HIS-004 | Niet-afgeronde runs en testruns vallen buiten normale geschiedenis. |
| BR-LLN-DEL-001 | Leerling / Gedeelde oefeningen | Delen van oefeningen vereist een actieve vriendschapsrelatie en toegestane deelfunctionaliteit. | UC-LLN-DEL-001, UC-LLN-DEL-006 | Relatievorming blijft generiek relatiedomein. |
| BR-LLN-DEL-002 | Leerling / Gedeelde oefeningen | Een ontvangen gedeelde oefening wordt pas een exercise run wanneer de ontvanger start. | UC-LLN-DEL-003 | Shared record en run blijven gescheiden. |
| BR-LLN-DEL-003 | Leerling / Gedeelde oefeningen | Verwijderen van een ontvangen gedeelde oefening verwijdert geen afgeronde runs uit geschiedenis. | UC-LLN-DEL-005 | Ontvangergebonden zichtbaarheid. |
| BR-DOC-FP-001 | Docent / Frontpage | De docent-frontpage is een overzichts- en oriëntatiepagina en start geen contextafhankelijke mutatie zonder detailroute. | UC-DOC-FP-001 t/m UC-DOC-FP-005 | Frontpageblokken zijn readmodels. |
| BR-DOC-FP-002 | Docent / Frontpage | Gecombineerde docent/ouder-frontpages worden runtime samengesteld uit toegestane rolblokken. | UC-DOC-FP-005 | Geen aparte rolcombinatie-entiteit. |
| BR-DOC-AANB-001 | Docent / Oefenaanbod | Docent-oefenaanbod werkt vanuit één geselecteerd niveau. | UC-DOC-AANB-001, UC-DOC-AANB-002 | Context is leidend voor categorieën en oefeningen. |
| BR-DOC-AANB-002 | Docent / Niveaus | Een nieuw niveau krijgt de aanmakende docent als actuele eigenaar. | UC-DOC-AANB-003 | Eigenaarschap is noodzakelijk voor vervolgbeheer. |
| BR-DOC-AANB-003 | Docent / Categorieën | Docenten koppelen centrale categorieën aan niveaus; zij maken geen privé-categorie-identiteiten aan. | UC-DOC-AANB-006, UC-DOC-AANB-007 | Centrale categorie blijft bron. |
| BR-DOC-OEF-001 | Docent / Oefeningen | Een oefening verwijst naar precies één technische module en bewaart modulespecifieke configuratie generiek als payload. | UC-DOC-OEF-002 t/m UC-DOC-OEF-005 | Modulegrens blijft intact. |
| BR-DOC-OEF-002 | Docent / Oefeningen | Moduleconfiguratiepayloads bevatten waar nodig module- en schemaherleidbaarheid, zoals moduleKey en schemaVersion, binnen de payload zelf. | UC-DOC-OEF-004, UC-DOC-OEF-005 | Geen nieuwe databasekolom voor ConfigSchemaVersion zolang dit niet platformbreed querybaar hoeft te zijn. |
| BR-DOC-OEF-002 | Docent / Oefeningen | Alleen actieve oefeningen zijn beschikbaar voor normaal leerlinggebruik. | UC-DOC-OEF-006 | IsActive bepaalt Actief/In onderhoud. |
| BR-DOC-OEF-003 | Docent / Testen | Testoefeningen van docenten worden niet als permanente leerlingresultaten opgeslagen. | UC-DOC-OEF-008, UC-DOC-OEF-009 | Opruimen via cleanup. |
| BR-DOC-SAM-001 | Docent / Samenwerking | Collaboratorrechten gelden alleen binnen het gekoppelde niveau en geven geen leerling-, resultaat- of live-meekijktoegang. | UC-DOC-SAM-001 t/m UC-DOC-SAM-004 | Rechten strikt afbakenen. |
| BR-DOC-SAM-002 | Docent / Eigenaarschap | Eigenaarschap kan alleen worden overgedragen aan een actieve collaborator van hetzelfde niveau. | UC-DOC-SAM-005, UC-DOC-SAM-006 | Reden verplicht. |
| BR-DOC-LLN-001 | Docent / Leerlingen | Een docent ziet en beheert leerlingen alleen binnen de eigen docentrelatie en niveaucontext. | UC-DOC-LLN-001 t/m UC-DOC-LLN-008 | Geen inzage in andere docentcontexten. |
| BR-DOC-LLN-002 | Docent / Autorisaties | Niveauautorisaties toekennen of intrekken wijzigt toegang vooruit, maar niet historische resultaten. | UC-DOC-LLN-005, UC-DOC-LLN-006 | Communicatie via systeemberichten waar nodig. |
| BR-DOC-RES-001 | Docent / Resultaten | Een docent mag alleen resultaten zien binnen de door hem/haar geautoriseerde docentcontext. | UC-DOC-RES-001 t/m UC-DOC-RES-006 | Ouder/voogdcontext is ruimer en blijft apart. |
| BR-DOC-LIVE-001 | Docent / Live meekijken | Live meekijken is alleen toegestaan bij actieve oefenruns binnen de eigen docentcontext en niveauautorisatie. | UC-DOC-LIVE-001 t/m UC-DOC-LIVE-008 | Meekijken blijft read-only. |
| BR-DOC-LIVE-002 | Docent / Live meekijken | Live voortgang gebruikt server-side opgeslagen voortgang als bron en SignalR alleen als transport. | UC-DOC-LIVE-004 | Clientstate is niet bronhoudend. |
Invulregels
| Onderwerp | Regel |
|---|---|
| Eén regel per rij | Splits samengestelde regels op wanneer ze apart testbaar zijn. |
| Geen schermdetails | Business rules beschrijven domeingedrag, geen pixel- of layoutdetails. |
| Hergebruik | Verwijs vanuit usecases naar bestaande regels in plaats van ze te dupliceren. |
| Server-side leidend | Wanneer een business rule een toegangs-, relatie- of objectcontrole raakt, moet de bijbehorende usecase ook server-side controle benoemen. |
Beheerder- en ouder-/voogdcontexten
| BusinessRule-ID | Domein | Regel | Geldt voor | Bron / toelichting |
|---|---|---|---|---|
| BR-BEH-FP-001 | Beheerder-frontpage | De beheerder-frontpage is read-only en mag geen beheerdata wijzigen. | UC-BEH-FP-001 t/m UC-BEH-FP-005 | Mutaties starten via onderliggende beheerpagina’s. |
| BR-BEH-FP-002 | Beheerder-frontpage | Bij combinatierollen wordt de frontpage runtime samengesteld in de prioriteit Beheerder, Docent, Ouder/voogd. | UC-BEH-FP-005 | Er wordt geen persistent ontwerp per rolcombinatie opgeslagen. |
| BR-BEH-FP-003 | Beheerder-frontpage | Samenvattingswaarden moeten expliciet gedefinieerde readmodels gebruiken. | UC-BEH-FP-003 | Aantallen mogen niet voor meerdere interpretaties vatbaar zijn. |
| BR-BEH-SITE-001 | Site Instellingen | De Site Instellingen-hub is een navigatiehub en bevat zelf geen lange mutatieformulieren. | UC-BEH-SITE-001 t/m UC-BEH-SITE-003 | Onderliggende tegels openen domeinspecifieke beheerpagina’s. |
| BR-BEH-CONT-001 | Frontpagebeheer | Frontpagebeheer beheert tekstuele content, niet layout of vrije pagebuilder-structuur. | UC-BEH-FRONT-* | Layout en blokvolgorde blijven codegedreven. |
| BR-BEH-LINK-001 | Handige links | Een URL-record mag niet verwijderd worden zolang het in een footerplaatsing wordt gebruikt. | UC-BEH-LINKS-004 | Verwijderen is soft-delete of geblokkeerd afhankelijk van gebruik. |
| BR-BEH-LINK-002 | Handige links | Interne en externe URL’s moeten server-side valideerbaar zijn voordat opslag slaagt. | UC-BEH-LINKS-002, UC-BEH-LINKS-003 | Ongeldige URL’s mogen niet als bruikbaar record worden opgeslagen. |
| BR-BEH-POP-001 | Popupbeheer | Popupbeheer beheert alleen bestaande popuprecords; nieuwe popupkeys ontstaan via code en migratie. | UC-BEH-POP-* | Usecases verwijzen alleen naar PopupKey. |
| BR-BEH-SYSMSG-001 | Systeemberichtenbeheer | Systeemberichttemplates blijven verplichte systeemcommunicatie en krijgen geen GUI-actief/inactiefschakelaar. | UC-BEH-SYSMSG-* | Referentienaam is read-only. |
| BR-BEH-FEAT-001 | Features | Alleen expliciet togglebare sitefuncties worden als featuretoggle beheerd. | UC-BEH-FEAT-001, UC-BEH-FEAT-002 | Kernonderdelen worden niet als vrije toggle gemodelleerd. |
| BR-BEH-NOT-001 | Systeemnotificaties | Systeemnotificaties zijn geen mailbox-systeemberichten en geen popupregister-popups. | UC-BEH-FEAT-003 t/m UC-BEH-FEAT-008 | Zij hebben eigen inhoud, doelgroep, displayregel en tijdvenster. |
| BR-BEH-SET-001 | Systeeminstellingen | Systeeminstellingen mogen alleen bestaande sleutels wijzigen; nieuwe sleutels ontstaan via code/migratie. | UC-BEH-SET-* | Type en invoervorm worden server-side afgedwongen. |
| BR-BEH-CAT-001 | Categoriebeheer | Een centrale categorie mag pas worden gedeactiveerd wanneer geen actieve docentniveau- of oefenkoppelingen meer bestaan. | UC-BEH-CAT-004 | Anders moet eerst worden gemigreerd of losgekoppeld. |
| BR-BEH-CAT-002 | Categoriebeheer | Categoriemigratie herschrijft geen historische runs of gedeelde-oefening-snapshots. | UC-BEH-CAT-006 | Historische context blijft reconstructeerbaar. |
| BR-BEH-MOD-001 | Modulebeheer | Een technische module mag pas volledig worden uitgeschakeld wanneer geen actieve concrete oefeningen de module nog gebruiken. | UC-BEH-MOD-004 | Testzichtbaarheid is een aparte status. |
| BR-BEH-MOD-002 | Modulebeheer | Modulemigraties zijn volledig auditbaar en bewaren historische resultaten. | UC-BEH-MOD-007 t/m UC-BEH-MOD-009 | Bestaande runs blijven leesbaar. |
| BR-BEH-DOCSUP-001 | Docentondersteuning | Beheerder-docentondersteuning mag supportmatig corrigeren, maar dupliceert geen centraal categorie- of modulebeheer. | UC-BEH-DOCSUP-* | Selectie van één docentcontext is leidend. |
| BR-BEH-ACC-001 | Accountbeheer | OefenHub-accountbeheer beheert geen wachtwoorden, tokens of identity-providercredentials. | UC-BEH-ACC-* | Keycloak/identity provider blijft bronhouder. |
| BR-BEH-ACC-002 | Accountbeheer | Niet-publieke rollen mogen alleen via beheer worden toegekend of ingetrokken. | UC-BEH-ACC-003, UC-BEH-ACC-004 | Beheerder en TestDocent zijn niet publiek. |
| BR-OVG-001 | Ouder/voogd | Een ouder/voogd ziet alleen kinderen met een actieve ouder-/voogdrelatie. | UC-OVG-KIND-* | Relatie is de autorisatiebron. |
| BR-OVG-002 | Ouder/voogd | Een ouder/voogd mag resultaten van alle niveaus van gekoppelde kinderen bekijken. | UC-OVG-RES-* | Anders dan docentcontext, die niveaugebonden is. |
| BR-OVG-003 | Ouder/voogd | Een ouder/voogd kan geen oefeningen namens het kind starten, hervatten of afronden. | UC-OVG-RES-, UC-OVG-LIVE- | Ouder/voogd is raadplegend en meekijkend. |
| BR-OVG-004 | Ouder/voogd | Ouder-/voogd-live-meekijken is read-only en mag geen antwoord, score of voortgang wijzigen. | UC-OVG-LIVE-* | SignalR is transport, opgeslagen voortgang is bron. |
| BR-OVG-005 | Ouder/voogd / Resultaten | Resultaat-, geschiedenis-, detail- en PDF-acties herhalen server-side de actieve ouder-/voogdrelatiecontrole. | UC-OVG-RES-* | RunId, filters of oude routes zijn geen autorisatiebron. |
| BR-OVG-006 | Ouder/voogd / Resultaten | Lege resultaat-, geschiedenis- en filtertoestanden zijn geldige toestanden en worden niet als fout behandeld. | UC-OVG-RES-001 t/m UC-OVG-RES-003 | Geen afgeronde runs of lege filterresultaten tonen veilige lege staten. |
| BR-OVG-007 | Ouder/voogd / Resultaten | PDF-export binnen oudercontext is een tijdelijke exportresponse en maakt geen verplicht permanent documentrecord aan. | UC-OVG-RES-006 | De export gebruikt dezelfde historische runbron als resultaatdetail. |
| BR-OVG-008 | Ouder/voogd / Live | Het bepalen van livebeschikbaarheid maakt geen LiveViewAudit aan; audit ontstaat pas bij daadwerkelijke live-start. | UC-OVG-LIVE-002, UC-OVG-LIVE-003 | Overzicht en knopstatus zijn read-only readmodels. |
| BR-OVG-009 | Ouder/voogd / Live | Browse-modus en terugkeren naar live zijn lokale UI-state en geen domeinmutaties. | UC-OVG-LIVE-005, UC-OVG-LIVE-006 | De actuele vraag blijft server-side voortgang. |
| BR-OVG-010 | Ouder/voogd / Live | Beëindigen van live meekijken is idempotent en mag de oefenrun niet stoppen of afronden. | UC-OVG-LIVE-007, UC-OVG-LIVE-008 | Alleen LiveViewAudit.EndedAtUtc en realtime-subscription worden afgehandeld. |