Skip to main content

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-IDDomeinRegelGeldt voorBron / toelichting
BR-GEN-SEC-001AutorisatieFrontend-zichtbaarheid is nooit voldoende beveiliging; de backend controleert de relevante rol-, relatie- of objectcontext.Alle afgeschermde actiesAlgemene OefenHub-regel.
BR-GEN-REL-001RelatiesDe relatiepagina toont actieve relaties en openstaande verstuurde uitnodigingen die voor de huidige gebruiker zichtbaar horen te zijn.UC-GEN-REL-001Inkomende uitnodigingen worden niet als aparte lijst op de relatiepagina aangeboden.
BR-GEN-REL-002RelatiesInkomende relatie-uitnodigingen worden via systeemberichten aangeboden.UC-GEN-REL-001, UC-GEN-REL-005Dit is de enige leidende ingang voor het accepteren of afwijzen van een relatie-uitnodiging.
BR-GEN-REL-003RelatiesEen relatie-uitnodiging activeert nooit direct een relatie; acceptatie door de ontvanger blijft verplicht.UC-GEN-REL-002, UC-GEN-REL-003, UC-GEN-REL-005Voorkomt dat uitnodigen en relatievorming functioneel door elkaar lopen.
BR-GEN-REL-004RelatiesEen vrienduitnodiging mag alleen vanuit een actieve leerlingcontext worden gestart.UC-GEN-REL-002Een vriendschap is functioneel een relatie tussen twee leerlingrolcontexten.
BR-GEN-REL-005RelatiesEen ouder-/voogduitnodiging mag alleen vanuit een actieve leerlingcontext worden gestart.UC-GEN-REL-003De zichtbare rol is Ouder/voogd; de technische rolcontext is Guardian.
BR-GEN-REL-006RelatiesEr mag geen nieuwe relatie-uitnodiging worden aangemaakt wanneer al een actieve identieke relatie bestaat.UC-GEN-REL-002, UC-GEN-REL-003Server-side duplicaatcontrole verplicht.
BR-GEN-REL-007RelatiesEr mag geen nieuwe relatie-uitnodiging worden aangemaakt wanneer al een openstaande identieke of kruislings conflicterende uitnodiging bestaat.UC-GEN-REL-002, UC-GEN-REL-003Kruislings uitnodigen tussen dezelfde gebruikers en rolcontexten mag geen dubbele pending uitnodigingen opleveren.
BR-GEN-REL-008RelatiesEen 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-003Ondersteunt transparantie richting uitnodiger en ontvanger.
BR-GEN-REL-009RelatiesEen 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-005Na de geldigheidsduur mag de uitnodiging niet meer accepteerbaar zijn.
BR-GEN-REL-010RelatiesNa 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-005Edgecase voor externe uitnodigingen.
BR-GEN-REL-011RelatiesAccepteren van een relatie-uitnodiging gebeurt direct, tenzij de gebruiker eerst bewust een ontbrekende doelrol moet kiezen of activeren.UC-GEN-REL-005Er is geen algemene acceptatiebevestigingspopup.
BR-GEN-REL-012RelatiesAfwijzen van een relatie-uitnodiging vraagt altijd een bevestigingspopup.UC-GEN-REL-005Voorkomt onbedoeld definitief afwijzen.
BR-GEN-REL-013RelatiesBij acceptatie of afwijzing van een relatie-uitnodiging wordt de uitnodiger via een systeembericht of gelijkwaardige notificatie geïnformeerd.UC-GEN-REL-005Geldt voor vriend- en ouder/voogduitnodigingen.
BR-GEN-REL-014RelatiesAfgehandelde uitnodigingen verdwijnen uit openstaande overzichten; reconstructie loopt via historie/audit.UC-GEN-REL-001, UC-GEN-REL-005Er is geen aparte UI voor afgehandelde uitnodigingen.
BR-GEN-REL-015RelatiesElke ontkoppelactie en elk ontkoppelverzoek opent altijd eerst een bevestigingsmodal.UC-GEN-REL-004Geldt voor alle relatietypen waarvoor de actie beschikbaar is.
BR-GEN-REL-016RelatiesHandmatig ontkoppelen is een soft-deactivatie; relaties worden niet hard verwijderd.UC-GEN-REL-004UserRelationships.IsActive = false, aangevuld met audit/event.
BR-GEN-REL-017RelatiesOntkoppelen mag alleen door een betrokken partij in een geldige rolcontext of door een expliciet geautoriseerde beheerflow.UC-GEN-REL-004Backendcontrole is leidend.
BR-GEN-REL-018RelatiesSommige relatietypen kunnen directe ontkoppeling blokkeren en alleen een ontkoppelverzoek toestaan.UC-GEN-REL-004Wordt per relatietype/rolcontext bepaald.
BR-GEN-REL-019RelatiesOntkoppelen beëindigt toekomstige relatieafhankelijke toegang, maar herschrijft geen historische berichten, oefenruns of auditrecords.UC-GEN-REL-004Historische gegevens blijven herleidbaar.
BR-GEN-REL-020RelatiesOefenHub is geen sociaal platform; vriendschapsrelaties zijn functioneel bedoeld voor toegestane communicatie en delen binnen OefenHub.UC-GEN-REL-002Beperkt interpretatie van vriendschap tot functionele applicatiecontext.
BR-GEN-MSG-001BerichtenHet berichtenoverzicht toont alleen systeemberichten en privéberichtthreads die bij de ingelogde gebruiker horen.UC-GEN-MSG-001Server-side objectfiltering is verplicht.
BR-GEN-MSG-002BerichtenSysteemberichten zijn niet verwijderbaar door gebruikers.UC-GEN-MSG-001De verwijderactie is disabled en backend weigert gemanipuleerde requests.
BR-GEN-MSG-003BerichtenVerwijderen 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-005Wordt vastgelegd via de participant-/mailboxlaag.
BR-GEN-MSG-004BerichtenGelezen- en ongelezenstatus wordt gebruikergebonden bepaald.UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-004Voor systeemberichten via ReadAtUtc, voor privéthreads via participant-readstate.
BR-GEN-MSG-005BerichtenHeaderbadge en samenvattingskaart Ongelezen gebruiken dezelfde server-side ongelezenlogica.UC-GEN-MSG-001, UC-GEN-MSG-002Voor leerlingen kan alleen de badge tijdelijk verborgen zijn tijdens een actieve oefenrun.
BR-GEN-MSG-006BerichtenBerichtpreviews 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-004Voorkomt rendering van actieve inhoud.
BR-GEN-MSG-007BerichtenDe bewaartermijn voor privéberichten wordt uit systeeminstellingen afgeleid en mag niet als mockupwaarde worden hardcoded.UC-GEN-MSG-001Systeemberichten vallen niet onder deze privéberichtenretentie.
BR-GEN-MSG-008BerichtenZoek-, filter- en pagineringsacties mogen de geautoriseerde mailboxdataset nooit verruimen.UC-GEN-MSG-001Filters werken altijd binnen de eigen gebruikercontext.
BR-GEN-MSG-009BerichtenThread-events binnen privéberichtthreads kunnen bijdragen aan de ongelezenstatus van een thread.UC-GEN-MSG-001, UC-GEN-MSG-003, UC-GEN-MSG-004Thread-events zijn geen losse systeemberichten en geen gewone privéberichten.
BR-GEN-MSG-010BerichtenHet openen van een systeembericht of privéthread geldt als leesactie voor de ingelogde gebruiker.UC-GEN-MSG-003Alleen de eigen systeem- of participantreadstate wordt aangepast.
BR-GEN-MSG-011BerichtenSystemMessages.EntityType + EntityId bepalen alleen de mogelijke vervolgcontext; openen van het systeembericht verwerkt het onderliggende domeinobject niet automatisch.UC-GEN-MSG-003Relatie-uitnodigingen, tickets en privéthreads behouden hun eigen vervolgflows.
BR-GEN-MSG-012BerichtenDe open-berichtweergave van een privéthread mag alleen berichten en thread-events uit dezelfde geautoriseerde thread tonen.UC-GEN-MSG-003, UC-GEN-MSG-004Voorkomt dat threadcontexten of events van andere threads zichtbaar worden.
BR-GEN-MSG-013BerichtenPrivéberichtantwoorden zijn alleen toegestaan binnen een actieve, beantwoordbare thread waarin de verzender nog een geldige participant- en relatiecontext heeft.UC-GEN-MSG-004De backend controleert dit opnieuw op verzendmoment.
BR-GEN-MSG-014BerichtenOnderwerpwijzigingen binnen privéthreads worden als thread-event vastgelegd en niet als systeembericht.UC-GEN-MSG-004Eventtype SubjectChanged; zichtbaar als threadinterne systeemregel.
BR-GEN-MSG-015BerichtenEen verzendactie voor een privébericht wordt transactioneel verwerkt.UC-GEN-MSG-002, UC-GEN-MSG-004Onderwerpwijziging, thread-event, bericht, threadmetadata en readstate mogen geen gedeeltelijke mutatie achterlaten.
BR-GEN-MSG-016BerichtenNieuwe privéberichten mogen alleen worden verzonden naar ontvangers binnen een geldige relatie-, vriendschaps- of deelnemerscontext.UC-GEN-MSG-002De backend controleert dit opnieuw op verzendmoment.
BR-GEN-MSG-017BerichtenNieuwe privéberichten actualiseren de ongelezenstatus van de ontvanger, terwijl de leerlingbadge tijdens een actieve oefenrun visueel verborgen blijft.UC-GEN-MSG-002Alleen UI-zichtbaarheid wordt onderdrukt; readstate blijft intact.
BR-GEN-MSG-018BerichtenGebruikersverwijdering van een privéthread is geen hard delete van berichtinhoud.UC-GEN-MSG-005PrivateMessages blijven bestaan; de eigen participantcontext bepaalt de mailboxzichtbaarheid.
BR-GEN-MSG-019BerichtenVerwijderen van een privéthread vraagt altijd een expliciete bevestiging voordat de participantgebonden mutatie wordt uitgevoerd.UC-GEN-MSG-005De bevestiging verloopt via POP-GEN-MSG-DELETE-CONFIRM.
BR-GEN-MSG-020BerichtenHet verwijderen van een privéthread uit de eigen mailbox genereert geen systeembericht naar andere deelnemers.UC-GEN-MSG-005Andere deelnemers behouden hun eigen mailboxweergave en readstate.
BR-GEN-MSG-021BerichtenWanneer 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-005De melding verloopt via POP-GEN-MSG-NOT-AVAILABLE wanneer een popup nodig is; inline foutstaten mogen dezelfde betekenis hanteren zonder tekstduplicatie.
BR-GEN-POP-001PopupsVoor niet-custom popups is de popup-registertabel de enige inhoudelijke bron voor titel, tekst, knopteksten, knopacties en inputvelden.Popup-register, Popup-themesDetailtabellen zijn alleen voor Variant=Custom.
BR-LLN-EXE-001OefenenTijdens een actieve leerling-oefenrun worden afleidende tellerindicaties, badges, systeemnotificatie-overlays en meldingen-/berichtenterugkoppelingen tijdelijk verborgen of uitgesteld.Leerling / oefenenOnderliggende berichten, meldingen en notificaties blijven server-side bestaan en worden na verlaten of afronden opnieuw zichtbaar wanneer relevant.
BusinessRule-IDDomeinRegelGeldt voorBron / toelichting
BR-GEN-ACC-001GeneriekAccount- en credentialflows blijven binnen de identity-providerverantwoordelijkheid voor zover daar bronhouderschap ligt.UC-GEN-PROF-002Afgeleid uit generieke usecases.
BR-GEN-ACC-002AccountWanneer 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-001Geen automatische gebruikersgerichte herstelactie; contactroute en beheeranalyse zijn leidend.
BR-GEN-NOT-001SysteemnotificatiesSysteemnotificaties 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-003Afgeleid uit generieke usecases.
BR-GEN-NOT-002SysteemnotificatiesEen systeemnotificatie is geen mailbox-systeembericht en gebruikt geen SystemMessages.UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003Afgeleid uit generieke usecases.
BR-GEN-NOT-003SysteemnotificatiesEen systeemnotificatie is geen popupregister-popup en wordt niet beheerd via PopupDetails.UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003Afgeleid uit generieke usecases.
BR-GEN-NOT-004SysteemnotificatiesActieve systeemnotificaties worden bepaald op basis van UTC-start- en eindmoment, doelgroep en weergaveregel.UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003Afgeleid uit generieke usecases.
BR-GEN-NOT-005SysteemnotificatiesBij meerdere gelijktijdig relevante notificaties wordt de oudste aangemaakte notificatie als eerste getoond.UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003Afgeleid uit generieke usecases.
BR-GEN-NOT-006SysteemnotificatiesOncePerBrowser 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-003Afgeleid uit generieke usecases.
BR-GEN-NOT-007SysteemnotificatiesWijziging van een bestaande notificatie doorbreekt een bestaande OncePerBrowser-browserregistratie niet automatisch.UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003Afgeleid uit generieke usecases.
BR-GEN-NOT-008SysteemnotificatiesEen Always-notificatie mag na sluiten niet direct opnieuw verschijnen binnen dezelfde lopende notificatiereeks.UC-GEN-NOT-001, UC-GEN-NOT-002, UC-GEN-NOT-003Afgeleid uit generieke usecases.
BR-GEN-PROF-001ProfielEen 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-005Afgeleid uit generieke usecases.
BR-GEN-PROF-002ProfielOefenHub beheert applicatieprofielgegevens; identity-providercredentials worden niet in OefenHub verwerkt.UC-GEN-PROF-001, UC-GEN-PROF-002, UC-GEN-PROF-004Afgeleid uit generieke usecases.
BR-GEN-PROF-003ProfielProfielafbeeldingen zijn vooraf gedefinieerde avatars of fallbackweergaven; vrije upload is niet toegestaan.UC-GEN-PROF-001Afgeleid uit generieke usecases.
BR-GEN-PROF-004ProfielActieve niveaucontext moet worden afgeleid uit toegestane gebruikers- en rolcontext.UC-GEN-PROF-001, UC-GEN-PROF-002, UC-GEN-PROF-003Afgeleid uit generieke usecases.
BR-GEN-PROF-005ProfielGebruikers waarvoor niveaucontext verplicht is, moeten een geldige niveaucontext instellen voordat de normale context volledig beschikbaar is.UC-GEN-PROF-003Afgeleid uit generieke usecases.
BR-GEN-PROF-006ProfielProfielfoto’s zijn vooraf gedefinieerde profielafbeeldingen; vrije upload is niet toegestaan.UC-GEN-PROF-004Afgeleid uit generieke usecases.
BR-GEN-PROF-007ProfielToegankelijkheidsinstellingen worden direct opgeslagen en toegepast.UC-GEN-PROF-005, UC-GEN-PROF-006Afgeleid uit generieke usecases.
BR-GEN-PROF-008ProfielToegankelijkheidsinstellingen kunnen naar een technische cookie worden gespiegeld voor vóór-login toepassing.UC-GEN-PROF-005, UC-GEN-PROF-006Afgeleid uit generieke usecases.
BR-GEN-PROF-009ProfielDe sitebrede toegankelijkheidsfeature bepaalt of pagina, bediening en cookie-effect actief zijn.UC-GEN-PROF-005, UC-GEN-PROF-006Afgeleid uit generieke usecases.
BR-GEN-PROF-010ProfielAlgemene voorkeuren worden functioneel gescheiden van profielgegevens en toegankelijkheidsinstellingen.UC-GEN-PROF-007Afgeleid uit generieke usecases.
BR-GEN-PROF-011ProfielVoorkeuren veranderen geen autorisaties of zichtbare gegevensset, maar uitsluitend presentatiegedrag.UC-GEN-PROF-007Afgeleid uit generieke usecases.
BR-GEN-TIC-001MeldingenIedere ingelogde gebruiker met toegang tot de normale applicatie mag een melding indienen wanneer de meldingenfunctionaliteit beschikbaar is.UC-GEN-TIC-001Afgeleid uit generieke usecases.
BR-GEN-TIC-002MeldingenEen nieuwe melding krijgt status New zolang er geen actieve beheerderkoppeling bestaat.UC-GEN-TIC-001Afgeleid uit generieke usecases.
BR-GEN-TIC-003MeldingenTechnische context bij een melding wordt als snapshot opgeslagen en niet achteraf live herberekend.UC-GEN-TIC-001Afgeleid uit generieke usecases.
BR-GEN-TIC-004MeldingenMeldingmutaties moeten auditbaar zijn via TicketHistory.UC-GEN-TIC-001Afgeleid uit generieke usecases.
BR-GEN-TIC-005MeldingenSysteemberichten uit het meldingenproces verwijzen via EntityType = Ticket en EntityId.UC-GEN-TIC-001Afgeleid uit generieke usecases.
BR-GEN-TIC-006MeldingenMeldingcategorieën zijn gesloten functionele waarden en geen vrije gebruikersinvoer.UC-GEN-TIC-001Afgeleid uit generieke usecases.
BR-GEN-TIC-007MeldingenEen eindgebruiker ziet uitsluitend eigen meldingen.UC-GEN-TIC-002, UC-GEN-TIC-003, UC-GEN-TIC-004, UC-GEN-TIC-005Afgeleid uit generieke usecases.
BR-GEN-TIC-008MeldingenDe gebruikersweergave van Meldingen gebruikt de tabbladen Open, Wacht op mij en Gesloten en geen Alles-tab.UC-GEN-TIC-002Afgeleid uit generieke usecases.
BR-GEN-TIC-009MeldingenDe actie-indicatie voor Wacht op mij wordt afgeleid uit eigen meldingen met status WaitingForUser.UC-GEN-TIC-002Afgeleid uit generieke usecases.
BR-GEN-TIC-010MeldingenGebruikersgerichte meldingstatussen mogen afgeleid zijn van processtatus, sluitregistratie en heropentermijn.UC-GEN-TIC-002, UC-GEN-TIC-003Afgeleid uit generieke usecases.
BR-GEN-TIC-011MeldingenInterne beheerinformatie wordt niet getoond in gebruikersgerichte meldingoverzichten.UC-GEN-TIC-002, UC-GEN-TIC-003Afgeleid uit generieke usecases.
BR-GEN-TIC-012MeldingenDe gebruikersdetailpagina gebruikt de tabbladen Melding, Oplossing en Discussie.UC-GEN-TIC-003Afgeleid uit generieke usecases.
BR-GEN-TIC-013MeldingenExterne beheercommunicatie wordt gebruikersgericht als Beheerder weergegeven.UC-GEN-TIC-003, UC-GEN-TIC-004Afgeleid uit generieke usecases.
BR-GEN-TIC-014MeldingenEen systeemberichtverwijzing naar een ticket geeft geen objecttoegang zonder server-side controle.UC-GEN-TIC-003Afgeleid uit generieke usecases.
BR-GEN-TIC-015MeldingenEen gebruiker kan binnen een open melding uitsluitend extern reageren.UC-GEN-TIC-004Afgeleid uit generieke usecases.
BR-GEN-TIC-016MeldingenEen gebruikersreactie op WaitingForUser maakt de melding opnieuw behandelbaar.UC-GEN-TIC-004Afgeleid uit generieke usecases.
BR-GEN-TIC-017MeldingenReguliere reacties op functioneel gesloten meldingen zijn niet toegestaan.UC-GEN-TIC-004, UC-GEN-TIC-005Afgeleid uit generieke usecases.
BR-GEN-TIC-018MeldingenEen gebruiker mag een eigen open melding zelf sluiten met verplichte reden.UC-GEN-TIC-005Afgeleid uit generieke usecases.
BR-GEN-TIC-019MeldingenSluiten door gebruiker hergebruikt TicketClosures met resolutietype ClosedByUser.UC-GEN-TIC-005Afgeleid uit generieke usecases.
BR-GEN-TIC-020MeldingenDe reden van sluiten door gebruiker wordt extern zichtbaar vastgelegd en niet als aparte sluitingstabel gemodelleerd.UC-GEN-TIC-005Afgeleid uit generieke usecases.
BR-GEN-TIC-021MeldingenVerlopen heropentermijnen worden periodiek en idempotent verwerkt via TickerQ, minimaal iedere 12 uur, en niet via afzonderlijke jobs per melding.UC-GEN-TIC-016Vangt gemiste eerdere scheduleruitvoeringen op doordat telkens op actuele databasecriteria wordt gezocht.
BR-GEN-TIC-022MeldingenHet verlopen van een heropentermijn maakt geen nieuwe sluitregistratie en verstuurt geen extra systeembericht.UC-GEN-TIC-016De bestaande TicketClosures blijft formele bron; eventueel alleen compacte history.
BusinessRule-IDDomeinRegelGeldt voorBron / toelichting
BR-GEN-ACC-002AccountOefenHub koppelt een identity-providergebruiker aan een intern account via Users.ExternalId.UC-GEN-ACC-001, UC-GEN-ACC-002ExternalId is server-side gevuld en niet via GUI wijzigbaar.
BR-GEN-ACC-003AccountAccountprovisioning is idempotent op ExternalId; dezelfde externe identiteit mag nooit meerdere interne OefenHub-accounts opleveren.UC-GEN-ACC-001, UC-GEN-ACC-002Duplicaten blokkeren sessieopbouw en worden technisch gelogd.
BR-GEN-ACC-004AccountEen 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-003Applicatieautorisatie blijft OefenHub-verantwoordelijkheid.
BR-GEN-ACC-005AccountUsers.IsActive = false blokkeert reguliere OefenHub-toegang.UC-GEN-ACC-001, UC-GEN-ACC-002, UC-GEN-ACC-004, UC-GEN-ACC-005Geldt ook bij geldige identity-providercontext.
BR-GEN-ACC-006AccountBij succesvolle sessieverwerking voor een actief account wordt Users.LastSeenAtUtc bijgewerkt.UC-GEN-ACC-002Geen formele audittrail.
BR-GEN-ACC-007AccountVoor 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-003Ontbrekende settings mogen veilig worden hersteld.
BR-GEN-ACC-008AccountHerstelinitialisatie van UserSettings mag geen rollen, relaties, autorisaties, berichten, meldingen, oefendata of niveauautorisaties wijzigen.UC-GEN-ACC-003Beperkt tot toegestane defaults.
BR-GEN-ACC-009Account / RelatiesPending relatie-uitnodigingen op e-mailadres mogen pas aan een gebruiker worden gekoppeld nadat een intern Users.Id bestaat.UC-GEN-ACC-001Geldige pending uitnodigingen met genormaliseerd e-mailadres.
BR-GEN-ACC-010Account / CommunicatieSysteemberichten voor relatie-uitnodigingen mogen pas worden aangemaakt wanneer er een interne ontvanger bestaat.UC-GEN-ACC-001SystemMessages.RecipientUserId vereist intern account.
BR-GEN-ACC-011AccountReguliere login maakt geen relaties, uitnodigingen, systeemberichten, tickets, privéberichten, oefenruns of systeemnotificaties aan.UC-GEN-ACC-002Provisioning is de enige accountlogin-route met uitnodigingskoppeling.
BR-GEN-ACC-012AccountActieve frontendcontexten worden server-side bepaald op basis van rollen, instellingen en business rules.UC-GEN-ACC-002, UC-GEN-ACC-003Clientstate en routeparameters zijn niet leidend.
BR-GEN-ACC-013AccountEen gebruiker zonder actieve rolcontext krijgt geen reguliere rolfrontpage en geen toegang tot rolgebonden domeinfunctionaliteit.UC-GEN-ACC-003Beperkte context zonder rol.
BR-GEN-ACC-014AccountOntbrekende verplichte profiel- of niveaucontext wordt via bestaande profielusecases afgehandeld en niet automatisch met aannames gevuld.UC-GEN-ACC-002, UC-GEN-ACC-003Verplicht niveau blijft profielusecase.
BR-GEN-ACC-015AccountSysteemnotificaties worden pas na succesvolle frontpage- of contextweergave verwerkt en blokkeren accountlogin of contextbepaling niet.UC-GEN-ACC-002, UC-GEN-ACC-003Verwerking via systeemnotificatie-usecases.
BR-GEN-ACC-016AccountSelfservice-accountverwijdering mag uitsluitend het eigen interne OefenHub-account raken.UC-GEN-ACC-004Beheerderverwijdering is een aparte beheerflow.
BR-GEN-ACC-017AccountAccountverwijdering door een eindgebruiker leidt direct tot anonimisering en opruiming van afhankelijke toegang.UC-GEN-ACC-004, UC-GEN-ACC-005Geen eindgebruikers-tussenstatus “verwijderd maar nog niet geanonimiseerd”.
BR-GEN-ACC-018AccountOefenHub verwijdert of wijzigt het identity-provideraccount niet tijdens accountverwijdering of anonimisering.UC-GEN-ACC-004, UC-GEN-ACC-005Afbakening Keycloak / identity provider.
BR-GEN-ACC-019AccountNa anonimisering mag dezelfde ExternalId niet stilzwijgend opnieuw als regulier nieuw OefenHub-account worden geprovisioneerd.UC-GEN-ACC-004, UC-GEN-ACC-005Voorkomt omzeilen van verwijderde/inactieve accountstatus.
BR-GEN-ACC-020AccountZichtbare persoonsgegevens van een geanonimiseerd account worden vervangen door vastgestelde systeemwaarden.UC-GEN-ACC-004, UC-GEN-ACC-005Inclusief Anoniem, # en anoniem.<code>@verwijderd.acc.
BR-GEN-ACC-021AccountDe systeemwaarde # voor MiddleName is gereserveerd voor systeemgebruik en mag niet via gewone gebruikersinvoer worden opgeslagen.UC-GEN-ACC-004, UC-GEN-ACC-005Naamvalidatie en anonimisering.
BR-GEN-ACC-022Account / RelatiesActieve 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-005Historie blijft behouden waar nodig.
BR-GEN-ACC-023Account / OefenenOpen 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-005Afgeronde geschiedenis kan onder geanonimiseerde identiteit blijven bestaan.
BR-GEN-ACC-024Account / DocentstructuurNiveau-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-005Geen onbepaald eigenaarschap.
BR-GEN-ACC-025AccountAccountverwijdering en anonimisering moeten technisch herleidbaar zijn via account lifecycle-logging en relevante domeinhistorie.UC-GEN-ACC-004, UC-GEN-ACC-005Zonder credentials of secrets.
BR-GEN-ACC-026AccountFalen 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-005Transactioneel of gecontroleerde workflow.
BR-GEN-ACC-027AccountLogout beëindigt de lokale OefenHub-applicatiesessie, maar vereist geen aparte domeinsessietabel.UC-GEN-ACC-006Sessiestate is technisch.
BR-GEN-ACC-028AccountLogout moet routeguard en server-side sessiecontrole opnieuw laten afdwingen voor beveiligde routes.UC-GEN-ACC-006Browsergeschiedenis of oude clientstate mag geen domeindata tonen.
BR-GEN-ACC-029AccountLogout rondt een niet-afgeronde oefenrun niet af.UC-GEN-ACC-006Oefenrun blijft alleen hervatbaar bij latere geldige context.
BR-GEN-ACC-030AccountLogout mag geen rollen, relaties, uitnodigingen, systeemberichten, privéberichten, tickets, oefenruns of systeemnotificaties aanmaken of inhoudelijk wijzigen.UC-GEN-ACC-006Alleen sessie/realtime-context beëindigen.
BusinessRule-IDDomeinRegelGeldt voorBron / toelichting
BR-LLN-TOEG-001Leerling / OefenaanbodEen 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-006Afgeleid uit leerlingusecases.
BR-LLN-TOEG-002Leerling / OefenaanbodFrontendzichtbaarheid van een categorie of oefening geeft nooit zelfstandig startrecht.UC-LLN-TOEG-003Backendcontrole blijft verplicht.
BR-LLN-TOEG-003Leerling / OefenaanbodIntrekken van autorisatie blokkeert nieuw starten en hervatten binnen die context, maar herschrijft afgeronde geschiedenis niet.UC-LLN-TOEG-004Historische resultaten blijven raadpleegbaar waar toegestaan.
BR-LLN-FP-001Leerling / FrontpageDe 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-005Frontpageblokken zijn afgeleide readmodels.
BR-LLN-FP-002Leerling / FrontpagePopulaire categorieën, recent geoefend en verder-oefenen worden berekend binnen de actieve niveaucontext.UC-LLN-FP-003 t/m UC-LLN-FP-005Geen aparte frontpagebron.
BR-LLN-OEF-001Leerling / OefenenEen nieuwe oefening start direct een zelfstandige exercise run en opent de eerste vraag.UC-LLN-OEF-003Geen apart configuratiescherm voor leerling.
BR-LLN-OEF-002Leerling / OefenenNa ieder bevestigd antwoord wordt voortgang server-side opgeslagen.UC-LLN-OEF-004Nodig voor hervatten en live meekijken.
BR-LLN-OEF-003Leerling / OefenenGeen idee telt als fout en toont het juiste antwoord volgens de daarvoor geldende flow.UC-LLN-OEF-006Waarschuwing en verborgen voorkeur centraal beheren.
BR-LLN-OEF-004Leerling / OefenenOnderbreken of logout rondt een oefening niet af.UC-LLN-OEF-007, UC-GEN-ACC-006Niet-afgeronde run blijft niet als geschiedenisregel zichtbaar.
BR-LLN-RES-001Leerling / ResultatenResultaten en statistieken worden na afronding uit opgeslagen rungegevens gelezen.UC-LLN-RES-001, UC-LLN-RES-002Herberekening uit payload is herstel/controle.
BR-LLN-RES-002Leerling / ResultatenEen opnieuw gemaakte oefening is een nieuwe zelfstandige run en wijzigt de bronrun niet.UC-LLN-RES-003Geldt ook bij gedeelde oefeningen.
BR-LLN-HIS-001Leerling / GeschiedenisGeschiedenis toont alleen afgeronde runs binnen de relevante leerlingcontext.UC-LLN-HIS-001 t/m UC-LLN-HIS-004Niet-afgeronde runs en testruns vallen buiten normale geschiedenis.
BR-LLN-DEL-001Leerling / Gedeelde oefeningenDelen van oefeningen vereist een actieve vriendschapsrelatie en toegestane deelfunctionaliteit.UC-LLN-DEL-001, UC-LLN-DEL-006Relatievorming blijft generiek relatiedomein.
BR-LLN-DEL-002Leerling / Gedeelde oefeningenEen ontvangen gedeelde oefening wordt pas een exercise run wanneer de ontvanger start.UC-LLN-DEL-003Shared record en run blijven gescheiden.
BR-LLN-DEL-003Leerling / Gedeelde oefeningenVerwijderen van een ontvangen gedeelde oefening verwijdert geen afgeronde runs uit geschiedenis.UC-LLN-DEL-005Ontvangergebonden zichtbaarheid.
BR-DOC-FP-001Docent / FrontpageDe docent-frontpage is een overzichts- en oriëntatiepagina en start geen contextafhankelijke mutatie zonder detailroute.UC-DOC-FP-001 t/m UC-DOC-FP-005Frontpageblokken zijn readmodels.
BR-DOC-FP-002Docent / FrontpageGecombineerde docent/ouder-frontpages worden runtime samengesteld uit toegestane rolblokken.UC-DOC-FP-005Geen aparte rolcombinatie-entiteit.
BR-DOC-AANB-001Docent / OefenaanbodDocent-oefenaanbod werkt vanuit één geselecteerd niveau.UC-DOC-AANB-001, UC-DOC-AANB-002Context is leidend voor categorieën en oefeningen.
BR-DOC-AANB-002Docent / NiveausEen nieuw niveau krijgt de aanmakende docent als actuele eigenaar.UC-DOC-AANB-003Eigenaarschap is noodzakelijk voor vervolgbeheer.
BR-DOC-AANB-003Docent / CategorieënDocenten koppelen centrale categorieën aan niveaus; zij maken geen privé-categorie-identiteiten aan.UC-DOC-AANB-006, UC-DOC-AANB-007Centrale categorie blijft bron.
BR-DOC-OEF-001Docent / OefeningenEen oefening verwijst naar precies één technische module en bewaart modulespecifieke configuratie generiek als payload.UC-DOC-OEF-002 t/m UC-DOC-OEF-005Modulegrens blijft intact.
BR-DOC-OEF-002Docent / OefeningenModuleconfiguratiepayloads bevatten waar nodig module- en schemaherleidbaarheid, zoals moduleKey en schemaVersion, binnen de payload zelf.UC-DOC-OEF-004, UC-DOC-OEF-005Geen nieuwe databasekolom voor ConfigSchemaVersion zolang dit niet platformbreed querybaar hoeft te zijn.
BR-DOC-OEF-002Docent / OefeningenAlleen actieve oefeningen zijn beschikbaar voor normaal leerlinggebruik.UC-DOC-OEF-006IsActive bepaalt Actief/In onderhoud.
BR-DOC-OEF-003Docent / TestenTestoefeningen van docenten worden niet als permanente leerlingresultaten opgeslagen.UC-DOC-OEF-008, UC-DOC-OEF-009Opruimen via cleanup.
BR-DOC-SAM-001Docent / SamenwerkingCollaboratorrechten gelden alleen binnen het gekoppelde niveau en geven geen leerling-, resultaat- of live-meekijktoegang.UC-DOC-SAM-001 t/m UC-DOC-SAM-004Rechten strikt afbakenen.
BR-DOC-SAM-002Docent / EigenaarschapEigenaarschap kan alleen worden overgedragen aan een actieve collaborator van hetzelfde niveau.UC-DOC-SAM-005, UC-DOC-SAM-006Reden verplicht.
BR-DOC-LLN-001Docent / LeerlingenEen docent ziet en beheert leerlingen alleen binnen de eigen docentrelatie en niveaucontext.UC-DOC-LLN-001 t/m UC-DOC-LLN-008Geen inzage in andere docentcontexten.
BR-DOC-LLN-002Docent / AutorisatiesNiveauautorisaties toekennen of intrekken wijzigt toegang vooruit, maar niet historische resultaten.UC-DOC-LLN-005, UC-DOC-LLN-006Communicatie via systeemberichten waar nodig.
BR-DOC-RES-001Docent / ResultatenEen docent mag alleen resultaten zien binnen de door hem/haar geautoriseerde docentcontext.UC-DOC-RES-001 t/m UC-DOC-RES-006Ouder/voogdcontext is ruimer en blijft apart.
BR-DOC-LIVE-001Docent / Live meekijkenLive meekijken is alleen toegestaan bij actieve oefenruns binnen de eigen docentcontext en niveauautorisatie.UC-DOC-LIVE-001 t/m UC-DOC-LIVE-008Meekijken blijft read-only.
BR-DOC-LIVE-002Docent / Live meekijkenLive voortgang gebruikt server-side opgeslagen voortgang als bron en SignalR alleen als transport.UC-DOC-LIVE-004Clientstate is niet bronhoudend.

Invulregels

OnderwerpRegel
Eén regel per rijSplits samengestelde regels op wanneer ze apart testbaar zijn.
Geen schermdetailsBusiness rules beschrijven domeingedrag, geen pixel- of layoutdetails.
HergebruikVerwijs vanuit usecases naar bestaande regels in plaats van ze te dupliceren.
Server-side leidendWanneer een business rule een toegangs-, relatie- of objectcontrole raakt, moet de bijbehorende usecase ook server-side controle benoemen.

Beheerder- en ouder-/voogdcontexten

BusinessRule-IDDomeinRegelGeldt voorBron / toelichting
BR-BEH-FP-001Beheerder-frontpageDe beheerder-frontpage is read-only en mag geen beheerdata wijzigen.UC-BEH-FP-001 t/m UC-BEH-FP-005Mutaties starten via onderliggende beheerpagina’s.
BR-BEH-FP-002Beheerder-frontpageBij combinatierollen wordt de frontpage runtime samengesteld in de prioriteit Beheerder, Docent, Ouder/voogd.UC-BEH-FP-005Er wordt geen persistent ontwerp per rolcombinatie opgeslagen.
BR-BEH-FP-003Beheerder-frontpageSamenvattingswaarden moeten expliciet gedefinieerde readmodels gebruiken.UC-BEH-FP-003Aantallen mogen niet voor meerdere interpretaties vatbaar zijn.
BR-BEH-SITE-001Site InstellingenDe Site Instellingen-hub is een navigatiehub en bevat zelf geen lange mutatieformulieren.UC-BEH-SITE-001 t/m UC-BEH-SITE-003Onderliggende tegels openen domeinspecifieke beheerpagina’s.
BR-BEH-CONT-001FrontpagebeheerFrontpagebeheer beheert tekstuele content, niet layout of vrije pagebuilder-structuur.UC-BEH-FRONT-*Layout en blokvolgorde blijven codegedreven.
BR-BEH-LINK-001Handige linksEen URL-record mag niet verwijderd worden zolang het in een footerplaatsing wordt gebruikt.UC-BEH-LINKS-004Verwijderen is soft-delete of geblokkeerd afhankelijk van gebruik.
BR-BEH-LINK-002Handige linksInterne en externe URL’s moeten server-side valideerbaar zijn voordat opslag slaagt.UC-BEH-LINKS-002, UC-BEH-LINKS-003Ongeldige URL’s mogen niet als bruikbaar record worden opgeslagen.
BR-BEH-POP-001PopupbeheerPopupbeheer beheert alleen bestaande popuprecords; nieuwe popupkeys ontstaan via code en migratie.UC-BEH-POP-*Usecases verwijzen alleen naar PopupKey.
BR-BEH-SYSMSG-001SysteemberichtenbeheerSysteemberichttemplates blijven verplichte systeemcommunicatie en krijgen geen GUI-actief/inactiefschakelaar.UC-BEH-SYSMSG-*Referentienaam is read-only.
BR-BEH-FEAT-001FeaturesAlleen expliciet togglebare sitefuncties worden als featuretoggle beheerd.UC-BEH-FEAT-001, UC-BEH-FEAT-002Kernonderdelen worden niet als vrije toggle gemodelleerd.
BR-BEH-NOT-001SysteemnotificatiesSysteemnotificaties zijn geen mailbox-systeemberichten en geen popupregister-popups.UC-BEH-FEAT-003 t/m UC-BEH-FEAT-008Zij hebben eigen inhoud, doelgroep, displayregel en tijdvenster.
BR-BEH-SET-001SysteeminstellingenSysteeminstellingen mogen alleen bestaande sleutels wijzigen; nieuwe sleutels ontstaan via code/migratie.UC-BEH-SET-*Type en invoervorm worden server-side afgedwongen.
BR-BEH-CAT-001CategoriebeheerEen centrale categorie mag pas worden gedeactiveerd wanneer geen actieve docentniveau- of oefenkoppelingen meer bestaan.UC-BEH-CAT-004Anders moet eerst worden gemigreerd of losgekoppeld.
BR-BEH-CAT-002CategoriebeheerCategoriemigratie herschrijft geen historische runs of gedeelde-oefening-snapshots.UC-BEH-CAT-006Historische context blijft reconstructeerbaar.
BR-BEH-MOD-001ModulebeheerEen technische module mag pas volledig worden uitgeschakeld wanneer geen actieve concrete oefeningen de module nog gebruiken.UC-BEH-MOD-004Testzichtbaarheid is een aparte status.
BR-BEH-MOD-002ModulebeheerModulemigraties zijn volledig auditbaar en bewaren historische resultaten.UC-BEH-MOD-007 t/m UC-BEH-MOD-009Bestaande runs blijven leesbaar.
BR-BEH-DOCSUP-001DocentondersteuningBeheerder-docentondersteuning mag supportmatig corrigeren, maar dupliceert geen centraal categorie- of modulebeheer.UC-BEH-DOCSUP-*Selectie van één docentcontext is leidend.
BR-BEH-ACC-001AccountbeheerOefenHub-accountbeheer beheert geen wachtwoorden, tokens of identity-providercredentials.UC-BEH-ACC-*Keycloak/identity provider blijft bronhouder.
BR-BEH-ACC-002AccountbeheerNiet-publieke rollen mogen alleen via beheer worden toegekend of ingetrokken.UC-BEH-ACC-003, UC-BEH-ACC-004Beheerder en TestDocent zijn niet publiek.
BR-OVG-001Ouder/voogdEen ouder/voogd ziet alleen kinderen met een actieve ouder-/voogdrelatie.UC-OVG-KIND-*Relatie is de autorisatiebron.
BR-OVG-002Ouder/voogdEen ouder/voogd mag resultaten van alle niveaus van gekoppelde kinderen bekijken.UC-OVG-RES-*Anders dan docentcontext, die niveaugebonden is.
BR-OVG-003Ouder/voogdEen 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-004Ouder/voogdOuder-/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-005Ouder/voogd / ResultatenResultaat-, 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-006Ouder/voogd / ResultatenLege resultaat-, geschiedenis- en filtertoestanden zijn geldige toestanden en worden niet als fout behandeld.UC-OVG-RES-001 t/m UC-OVG-RES-003Geen afgeronde runs of lege filterresultaten tonen veilige lege staten.
BR-OVG-007Ouder/voogd / ResultatenPDF-export binnen oudercontext is een tijdelijke exportresponse en maakt geen verplicht permanent documentrecord aan.UC-OVG-RES-006De export gebruikt dezelfde historische runbron als resultaatdetail.
BR-OVG-008Ouder/voogd / LiveHet bepalen van livebeschikbaarheid maakt geen LiveViewAudit aan; audit ontstaat pas bij daadwerkelijke live-start.UC-OVG-LIVE-002, UC-OVG-LIVE-003Overzicht en knopstatus zijn read-only readmodels.
BR-OVG-009Ouder/voogd / LiveBrowse-modus en terugkeren naar live zijn lokale UI-state en geen domeinmutaties.UC-OVG-LIVE-005, UC-OVG-LIVE-006De actuele vraag blijft server-side voortgang.
BR-OVG-010Ouder/voogd / LiveBeëindigen van live meekijken is idempotent en mag de oefenrun niet stoppen of afronden.UC-OVG-LIVE-007, UC-OVG-LIVE-008Alleen LiveViewAudit.EndedAtUtc en realtime-subscription worden afgehandeld.