Skip to main content

Productvisie en scope

1.1 Doel

Dit hoofdstuk beschrijft de productvisie, doelgroep, functionele scope en expliciete scopegrenzen van OefenHub.

Het hoofdstuk is bedoeld als richtinggevend kader voor de rest van het Functioneel Ontwerp. De onderliggende FO-hoofdstukken werken de afzonderlijke domeinen verder uit.

Dit hoofdstuk legt daarom vooral vast:

  • waarvoor OefenHub bedoeld is;
  • voor wie OefenHub bedoeld is;
  • welke functionele domeinen binnen de eerste productscope vallen;
  • welke technische of organisatorische keuzes functioneel zichtbaar zijn;
  • welke onderwerpen bewust buiten scope blijven;
  • welke principes bij latere interpretatie van detailhoofdstukken leidend zijn.

Productvisie en scope vervangen geen usecases, schermdocumentatie, database-informatie of architectuurdocumentatie. Zij geven de functionele context waarin die bronnen gelezen moeten worden.

1.2 Bronpositie

Dit hoofdstuk gebruikt de volgende bronlagen.

BronlaagBetekenis voor dit hoofdstuk
FO-hoofdstukkenDomeinuitwerkingen die de productscope concretiseren per functioneel gebied.
UsecasesProcesbron voor wat gebruikers per rol daadwerkelijk kunnen doen.
Database-informatieBron voor domeinobjecten, readmodels, historiek, audit en opslaggrenzen.
OntwerpbronnenBron voor business rules, statusmodellen, autorisatiematrix, commandregister, eventregister en popupregister.
SchermdocumentatieBron voor zichtbare schermcontext, acties, waarden, lege toestanden en schermgrenzen.
ArchitectuurdocumentatieContextbron voor systeemgrens, externe systemen, containers en functionele architectuurimplicaties.
Oefenmodule-documentatieBron voor modulespecifieke configuratie, payloads en de grens tussen generieke engine en modulelogica.
MockupsOndersteunende visuele bron, niet leidend voor definitieve datawaarden of autorisatieregels.

Wanneer bronnen elkaar lijken te overlappen, geldt de bronhiërarchie uit Bronnen en afbakening.

1.3 Productvisie

OefenHub is een Nederlandstalige webapplicatie waarin kinderen van circa 7 tot en met 15 jaar schoolgerelateerde oefeningen kunnen maken, herhalen, hervatten, terugkijken en waar toegestaan delen.

De applicatie ondersteunt oefenen en begeleiden in een gecontroleerde context:

  • leerlingen oefenen binnen toegankelijke niveaus, categorieën en oefeningen;
  • docenten richten oefenaanbod in, autoriseren leerlingen en volgen voortgang binnen hun docentcontext;
  • ouders/voogden ondersteunen gekoppelde kinderen via read-only inzage, geschiedenis, resultaten en live meekijken;
  • beheerders beheren centrale inhoud, accounts, modules, instellingen, meldingen en supportcontexten;
  • TestDocenten kunnen testmodules en testgedrag gebruiken binnen een gecontroleerde context.

OefenHub is geen algemeen sociaal platform, geen vrij contentplatform en geen open leeromgeving waarin iedere gebruiker onbeperkt inhoud kan publiceren of raadplegen. De applicatie is ingericht rond gecontroleerde rolcontexten, relaties, niveauautorisaties, centrale categorieën, concrete oefeningconfiguraties en historische oefenruns.

1.4 Positionering

OefenHub positioneert zich functioneel als:

AspectPositionering
Primair productWebapplicatie voor oefenen, voortgang, resultaten en begeleiding.
Primaire gebruikerLeerling die oefeningen maakt binnen toegankelijke context.
Begeleidende gebruikersOuders/voogden en docenten met ieder eigen autorisatiegrenzen.
BeheerrolBeheerder voor centrale inrichting, ondersteuning, meldingen en systeembeheer.
InhoudsstructuurNiveaus, centrale categorieën, concrete oefeningen en technische oefenmodules.
ResultaatbronHistorische oefenruns met uniforme runvelden en modulespecifieke payloads.
CommunicatieSysteemberichten, privéberichtthreads, meldingen en systeemnotificaties als gescheiden domeinen.
TechnologiecontextNederlandstalige .NET / C# / Blazor webapplicatie met externe identity provider en relationele opslag.
ScopegrensGeen native mobiele app, geen publieke API voor externe clients en geen vrije pagebuilder.

1.5 Doelgroepen

OefenHub ondersteunt meerdere doelgroepen. Iedere doelgroep heeft een eigen functioneel doel en eigen grenzen.

DoelgroepFunctioneel doelBelangrijkste scopegrenzen
LeerlingOefeningen maken, voortgang bewaren, resultaten bekijken, geschiedenis raadplegen en afgeronde oefeningen delen waar toegestaan.Kan geen docent-, ouder-/voogd- of beheerderrol combineren; kan eigen oefenresultaten niet verwijderen; ziet alleen toegankelijke oefencontext.
Ouder/voogdGekoppelde kinderen ondersteunen, resultaten en geschiedenis raadplegen, PDF downloaden en live meekijken.Read-only; kan geen oefening namens een kind starten, beantwoorden, corrigeren, afronden, opnieuw maken of delen.
DocentNiveaus, categorieën en oefeningen beheren, leerlingen autoriseren, resultaten binnen eigen docentcontext bekijken en live meekijken.Ziet alleen leerlingen en resultaten binnen geldige docentcontext; testresultaten worden niet als leerlinggeschiedenis behandeld.
BeheerderAccounts, rollen, centrale categorieën, modules, content, instellingen, meldingen, templates en supportcontexten beheren.Beheerdercontext is geen vrije bypass op eindgebruikersfunctionaliteit; beheerder kan niet live meekijken tijdens actieve leerlingruns.
TestDocentTestmodules en modulegedrag gebruiken binnen gecontroleerde docent-/testcontext.Niet-publieke rol; testgebruik veroorzaakt geen reguliere leerlinggeschiedenis of permanente resultaatstatistiek.

1.6 Primaire gebruiksdoelen

De productscope wordt functioneel gedreven door een aantal primaire gebruiksdoelen.

GebruikdoelBetekenis
OefenenLeerlingen kunnen een toegankelijke oefening starten, beantwoorden, onderbreken, hervatten en afronden.
Voortgang bewarenOefenvoortgang wordt server-side opgeslagen zodat onderbreken, hervatten en live meekijken mogelijk zijn.
Resultaten tonenAfgeronde runs leveren samenvatting, vraagdetails, statistieken, geschiedenis en PDF-export op.
BegeleidenOuders/voogden en docenten kunnen voortgang en resultaten binnen hun eigen context raadplegen.
Oefenaanbod beherenDocenten beheren niveaus, categorieën, oefeningen en modulespecifieke configuratie binnen hun docentcontext.
Toegang sturenDocenten autoriseren leerlingen voor niveaus en oefeningen; relaties bepalen aanvullende contexten.
SamenwerkenDocenten kunnen via collaborators samenwerken aan niveau-inhoud zonder automatisch leerlingresultaten te delen.
CommunicerenSysteemberichten, privéberichten, meldingen en systeemnotificaties ondersteunen functionele communicatie.
OndersteunenBeheerders behandelen meldingen, ondersteunen docenten, beheren centrale inhoud en corrigeren instellingen.
Historie behoudenResultaten, gedeelde oefeningen, audit en history blijven reconstrueerbaar bij latere wijzigingen.

1.7 Functionele hoofdscope

De eerste functionele hoofdscope bestaat uit de volgende domeinen.

DomeinBinnen scope
Account, profiel en voorkeurenInterne applicatiecontext, profielgegevens, avatar uit vaste set, toegankelijkheid en voorkeuren.
Rollen, context en autorisatieRoltoekenning, actieve context, combinatierollen, niet-publieke rollen en server-side autorisatie.
ApplicatieschilHeader, footer, navigatie, profielmenu, badges en anti-afleidingsgedrag tijdens oefenen.
FrontpagesRead-only oriëntatieschermen per context met contentblokken, tellers en systeemnotificaties na load.
RelatiebeheerVriendschappen, docent-leerlingrelaties, ouder-/voogdrelaties, docent-docentrelaties en AdminAdmin-context.
OefencatalogusNiveaus, centrale categorieën, niveau-categorie-koppelingen, concrete oefeningen en moduleconfiguratie.
OefenrunsStarten, hervatten, beantwoorden, voortgang, afronden, resultaten, geschiedenis en opnieuw maken.
Gedeelde oefeningenDelen van afgeronde runs met vrienden, ontvangen shared-records en zelfstandige ontvangersruns.
DocentfunctionaliteitOefenaanbod, leerlingen, niveauautorisaties, resultaten, testen, collaborators en eigenaarschap.
Ouder-/voogdfunctionaliteitKinderenoverzicht, kindinformatie, resultaten, geschiedenis, PDF en live meekijken read-only.
BeheerderfunctionaliteitAccounts, rollen, categorieën, modules, content, meldingen, templates, features, instellingen en support.
Berichten en communicatieSysteemberichten, privéberichtthreads, readstates, badges en SignalR-signalen.
MeldingenIndienen, opvolgen, behandelen, oplossen, sluiten, heropenen en doorzetten naar docent.
Live meekijkenRead-only realtime volgen van actieve oefenvoortgang door bevoegde docent of ouder/voogd.
PDF-exportTijdelijke resultaat-PDF vanuit historische runcontext.
ContentbeheerBeheerbare tekst binnen vaste contentblokken, vaste publieke pagina’s en footercontexten.
Popups/templates/features/notificatiesBeheerbare feedback, systeemberichttemplates, featuretoggles en systeemnotificaties binnen vaste grenzen.
OefenmodulesTechnische modulekoppeling, configuratiepayloads, runpayloads, testzichtbaarheid en migraties.

1.8 Niet-doelen van het product

OefenHub is in deze scope nadrukkelijk niet bedoeld als:

Niet-doelAfbakening
Vrij sociaal netwerkVriendschappen ondersteunen gedeelde oefeningen en beperkte communicatie, maar geen algemene social-feed of profielnetwerk.
Vrij contentplatformDocenten configureren oefeningen binnen ondersteunde modules; gebruikers kunnen geen willekeurige contentvormen publiceren.
PagebuilderBeheerders beheren tekst en links binnen vaste structuren, niet de volledige layout of componentstructuur.
Volwaardig LMSOefenHub richt zich op oefenen, voortgang en begeleiding; planning, roosters, cijfersystemen of formele curriculumadministratie vallen buiten scope.
Open API-platformEr worden geen publieke API-endpoints voor externe clients of native apps ontworpen.
Identity-providerKeycloak of een gelijkwaardige externe identity provider blijft bronhouder voor authenticatie en credentials.
DocumentmanagementsysteemPDF’s worden tijdelijk gegenereerd vanuit historische runcontext; OefenHub beheert geen generieke documentbibliotheek.
Juridisch workflowplatformPrivacy- en contactteksten kunnen beheerbaar zijn, maar juridische acceptatieflows vallen niet automatisch binnen contentbeheer.

1.9 Platformscope

OefenHub is primair bedoeld voor tablet en desktop via een responsive webinterface. Smartphonegebruik is geen ondersteund primair gebruiksscenario. Wanneer schermgrootte of apparaatcontext onvoldoende geschikt is voor normaal leerling-, ouder/voogd-, docent- of beheerdergebruik, mag de applicatie een duidelijke Nederlandstalige melding tonen en verwijzen naar gebruik op tablet of desktop.

Binnen scope:

  • Nederlandstalige webapplicatie;
  • tablet- en desktopgebruik;
  • responsive layout;
  • browsergebaseerde interactie;
  • server-side context- en autorisatiecontrole;
  • realtime UI-updates waar functioneel nodig;
  • tijdelijke PDF-downloads;
  • externe identity-providerflow;
  • mailafhandeling via externe mailvoorziening.

Buiten scope:

  • native mobiele app;
  • publieke API voor externe clients;
  • offline-first gebruik;
  • aparte mobiele backend;
  • app-store distributie;
  • meertalige gebruikersinterface;
  • pixel-perfect beschrijving van alle responsive breekpunten in het FO.

Responsive gedrag wordt functioneel beschreven waar het zichtbaar relevant is, maar pixelperfecte CSS-uitwerking hoort niet in dit FO.

1.10 Taal- en naamgevingsscope

De gebruikersinterface van OefenHub is Nederlandstalig.

Voor de functionele scope betekent dit:

  • zichtbare labels, meldingen, pagina’s en toelichtingen zijn Nederlandstalig;
  • functionele rollen hebben Nederlandstalige gebruikerslabels;
  • technische sleutelwaarden, databasevelden, classes, enums en backendnamen mogen Engelstalig zijn;
  • het FO gebruikt waar nodig technische Engelstalige termen wanneer die als bronnaam of modelnaam fungeren.

Meertaligheid valt buiten de huidige scope. Nieuwe taalkeuzes, vertaalbeheer, localization-resources of meertalige contentvarianten zijn dus geen impliciet onderdeel van contentbeheer.

1.11 Architectuurscope

OefenHub wordt functioneel gezien als één centraal softwaresysteem met een webapplicatie en eigen database.

ArchitectuuronderdeelFunctionele betekenis
OefenHub WebappPrimaire gebruikersinterface en applicatielaag voor businesslogica, autorisatie, realtime gedrag, jobs en PDF-generatie.
OefenHub DatabaseOpslag voor domeindata, configuratie, historie, auditrecords, operationele voortgang en readmodelbronnen.
KeycloakExterne identity provider voor authenticatie, registratie, sessies en credential-lifecycle.
MailvoorzieningExterne afhandeling voor verificaties, uitnodigingen en notificatiegerelateerde e-mailprocessen.
SignalR of gelijkwaardige realtime techniekTransport voor live updates, badges en live meekijken; geen bron van waarheid.
TickerQ of gelijkwaardige schedulerPeriodieke verwerking voor cleanup, testruns, verlopen heropentermijnen en vergelijkbare taken.
QuestPDF of gelijkwaardige PDF-generatorTijdelijke PDF-generatie vanuit historische resultaatcontext.

De functionele architectuurcontext staat verder uitgewerkt in Functionele architectuurcontext.

1.12 Externe identity-providergrens

Authenticatie, registratie, wachtwoorden, credentialstatus, sessies en credential lifecycle zijn geen OefenHub-domeinfunctionaliteit.

Voor OefenHub geldt:

  • OefenHub valideert geen wachtwoorden;
  • OefenHub slaat geen wachtwoorden, tokens, secrets of identity-providerinterne sessiedata op als domeindata;
  • OefenHub gebruikt de identity-provideruitkomst alleen als startpunt voor interne accountcontext;
  • een geslaagde externe login geeft pas OefenHub-toegang na interne account-, status-, rol- en contextcontrole;
  • e-mailadres als authenticatiegegeven blijft aan de identity-providergrens gebonden;
  • OefenHub beheert aanvullend applicatieprofiel, rollen, instellingen en domeintoegang.

Wanneer interne provisioning of contextbepaling na een geslaagde externe login faalt, ontstaat geen reguliere OefenHub-sessie.

1.13 Rol- en contextscope

Rollen bepalen niet alleen zichtbare navigatie, maar ook de functionele context waarin acties worden uitgevoerd.

Belangrijke scopeprincipes:

  • de rol Leerling is niet combineerbaar met ouder/voogd, docent, beheerder of TestDocent;
  • ouder/voogd, docent en beheerder mogen gecombineerd voorkomen;
  • TestDocent is een niet-publieke rol;
  • beheerder en TestDocent worden niet via publieke selfservice toegekend;
  • actieve context wordt server-side bepaald;
  • zichtbare UI is nooit autorisatiebewijs;
  • iedere route, mutatie, detailweergave, export en liveactie voert opnieuw contextcontrole uit.

De gedetailleerde rol- en contextregels staan in Rollen, context en autorisatie.

1.14 Leerlinggerichte scope

Voor leerlingen ligt de kernscope bij oefenen.

Binnen scope voor leerlingen:

  • toegankelijke categorieën en oefeningen bekijken;
  • oefeningstartpagina openen;
  • nieuwe run starten;
  • niet-afgeronde run hervatten;
  • vragen beantwoorden;
  • waar toegestaan Geen idee gebruiken;
  • resultaat na afronding bekijken;
  • geschiedenis raadplegen;
  • resultaat-PDF downloaden;
  • afgeronde oefening opnieuw maken;
  • oefening delen met vrienden wanneer toegestaan;
  • ontvangen gedeelde oefeningen starten of verwijderen uit eigen overzicht;
  • eigen berichten, systeemberichten en meldingen gebruiken.

Buiten scope voor leerlingen:

  • eigen oefengeschiedenis verwijderen;
  • docent- of ouder-/voogdcontext combineren;
  • oefeningen namens anderen maken;
  • oefeningconfiguratie wijzigen;
  • centrale categorieën beheren;
  • live meekijkers inhoudelijk sturen;
  • beheer- of supportdata raadplegen.

Tijdens actieve oefening heeft anti-afleidingsgedrag prioriteit: badges, meldingsterugkoppelingen en systeemnotificatie-overlays worden visueel uitgesteld zonder dat onderliggende data verloren gaat.

1.15 Ouder-/voogdgerichte scope

Voor ouders/voogden ligt de kernscope bij read-only ondersteuning.

Binnen scope:

  • gekoppelde kinderen bekijken;
  • kindinformatie raadplegen;
  • resultaten en geschiedenis van gekoppelde kinderen bekijken;
  • filters toepassen binnen toegestane kinddataset;
  • resultaatdetails raadplegen;
  • PDF downloaden vanuit geautoriseerde historische runcontext;
  • online status en livebeschikbaarheid bekijken;
  • live meekijken read-only;
  • eigen ouder-/voogdrelatie beëindigen waar toegestaan.

Buiten scope:

  • oefening namens kind starten;
  • oefening namens kind beantwoorden;
  • oefening namens kind hervatten of afronden;
  • antwoorden corrigeren;
  • resultaten verwijderen of herschrijven;
  • docentautorisaties aanpassen;
  • docentcontext impliciet gebruiken binnen ouder-/voogdroutes.

De actieve ouder-/voogdrelatie is een voortdurende autorisatievoorwaarde voor alle ouder-/voogdacties.

1.16 Docentgerichte scope

Voor docenten ligt de kernscope bij oefenaanbod, leerlingtoegang en begeleiding.

Binnen scope:

  • docent-frontpage bekijken;
  • oefenaanbod openen;
  • niveaus beheren binnen eigen eigenaar- of collaboratorcontext;
  • centrale categorieën koppelen aan niveaus;
  • nieuwe centrale categorie voorstellen of aanmaken via ondersteunde flow;
  • concrete oefeningen aanmaken, configureren, bewerken en activeren;
  • technische module selecteren voor een oefening;
  • oefeningen testen zonder reguliere leerlinggeschiedenis;
  • leerlingen binnen docentcontext bekijken;
  • niveauautorisaties toekennen of intrekken;
  • resultaten binnen eigen docentcontext bekijken;
  • resultaat-PDF downloaden binnen eigen docentcontext;
  • online leerlingen bekijken;
  • live meekijken read-only;
  • collaborators beheren waar toegestaan;
  • eigenaarschap overdragen volgens domeinregels.

Buiten scope:

  • resultaten van leerlingen buiten eigen docentcontext raadplegen;
  • ouder-/voogdinzage impliciet gebruiken;
  • centrale categorie-identiteit vrij wijzigen zodra gedeeld gebruik bestaat;
  • technische modulecode wijzigen;
  • testresultaten als gewone leerlingresultaten opslaan;
  • live meekijken buiten geldige relatie- en autorisatiecontext.

1.17 Beheerdersscope

Voor beheerders ligt de kernscope bij centrale inrichting, ondersteuning, audit en correctie.

Binnen scope:

  • beheerder-frontpage raadplegen;
  • accounts en rollen beheren;
  • niet-publieke rollen toekennen of intrekken;
  • accounts uitschakelen, heractiveren of anonimiseren;
  • centrale categorieën beheren en migreren;
  • modules beheren, testzichtbaarheid wijzigen en modulemigraties uitvoeren;
  • contentblokken, vaste pagina’s en footerinhoud beheren;
  • popups, templates, features, systeemnotificaties en instellingen beheren;
  • meldingen behandelen;
  • docentondersteuning uitvoeren binnen expliciete supportcontext;
  • beheerlogging en history raadplegen.

Buiten scope:

  • beheerdercontext gebruiken als vrije bypass op eindgebruikersfunctionaliteit;
  • live meekijken tijdens actieve leerlingruns;
  • wachtwoorden of credentials beheren;
  • identity-providerinterne sessies beheren;
  • willekeurig eindgebruikersresultaten wijzigen;
  • historische runs herschrijven door categorie- of modulebeheer;
  • vrije pagina-layouts, componenten of routes bouwen via beheer.

Beheerderacties blijven server-side geautoriseerd, gescopeerd en auditbaar.

1.18 Oefeninhoud en catalogusscope

Oefeninhoud is hiërarchisch en functioneel opgebouwd.

LaagBetekenis
NiveauOnderwijscontext zoals groep, klas, leerjaar of vergelijkbare oefencontext, met eigenaar en eventueel collaborators.
Centrale categorieGedeelde semantische categorie met centrale naam, kleur en icoon.
Niveau-categorie-koppelingKoppeling tussen niveau en centrale categorie, inclusief volgorde en afgeleide zichtbaarheid.
Concrete oefeningDoor docent ingerichte oefening binnen niveau en categorie, gekoppeld aan precies één technische module.
Technische moduleCodecomponent die configuratie, generatie, antwoordcontrole en moduleweergave levert.
OefenrunUnieke uitvoering van een concrete oefening door een gebruiker.

Binnen scope:

  • centrale categorie-identiteit;
  • docentniveaus;
  • open en privé niveaucontext;
  • concrete oefeningconfiguratie;
  • modulepayloads;
  • docenttesten;
  • historische runcontext;
  • categorie- en modulemigratie met audit.

Buiten scope:

  • onbeperkte vrije oefentypen zonder module;
  • docentbeheer van technische modulecode;
  • automatische inhoudelijke proof van backwards compatibility;
  • herschrijven van historische runs bij actuele hernoeming of migratie.

1.19 Resultaat-, geschiedenis- en exportscope

Resultaten en geschiedenis zijn gebaseerd op historische oefenruns.

Binnen scope:

  • resultaat na afronding;
  • geschiedenis per oefening en brede geschiedenis;
  • resultaatdetail met vraag- en antwoordinformatie;
  • uniforme statistieken;
  • duplicaat- en opnieuw-maakcontext;
  • PDF-export vanuit historische runcontext;
  • docent- en ouder-/voogdinzage binnen eigen autorisatiegrens.

Belangrijke grenzen:

  • niet-afgeronde runs zijn geen afgeronde geschiedenisregels;
  • test runs van docenten tellen niet als gewone leerlingresultaten;
  • PDF-download maakt geen permanent PDF-domeinrecord aan;
  • resultaatweergave en export wijzigen geen run;
  • actuele naamgeving of latere configuratiewijzigingen herschrijven historische resultaatcontext niet.

1.20 Communicatie- en notificatiescope

OefenHub ondersteunt meerdere communicatievormen die gescheiden blijven.

CommunicatievormScope
SysteemberichtenGebruikergebonden systeemcommunicatie met eventuele domeinverwijzing.
PrivéberichtthreadsRelatie- of systeemcontextgebonden privécommunicatie.
Thread-eventsSysteemachtige gebeurtenissen binnen een privéthread.
MeldingenTicketdomein voor problemen, fouten, wijzigingsverzoeken en opvolging.
SysteemnotificatiesPlanbare overlays na frontpageload voor doelgroepgerichte mededelingen.
PopupfeedbackActie-, fout- en bevestigingsfeedback via popupkeys.
Realtime signalenTransport voor badges, mailboxupdates en live meekijken.

Deze communicatievormen mogen in de UI samen zichtbaar zijn, maar blijven verschillende domeinen met eigen brondata, lifecycle en autorisatie.

Buiten scope:

  • vrije chat met beheerders buiten meldingcontext;
  • vrije HTML of actieve inhoud in berichten;
  • generieke bijlagen voor privéberichten binnen de initiële scope;
  • systeemnotificaties gebruiken als vervanging voor verplichte mailbox-systeemberichten;
  • popupteksten dupliceren in usecases of FO-hoofdstukken waar popupregister leidend is.

1.21 Content- en vaste-paginascope

Contentbeheer maakt tekstuele inhoud beheerbaar zonder de applicatie in een pagebuilder te veranderen.

Binnen scope:

  • frontpagecontent binnen vaste blokken;
  • vaste publieke pagina’s zoals Over OefenHub, Privacybeleid en Contact;
  • footerinhoud;
  • URL-records;
  • footersecties;
  • footerlinktoewijzingen;
  • wijzigingsgeschiedenis;
  • cacheverversing na opslaan.

Buiten scope:

  • nieuwe routes via contentbeheer;
  • vrije componentplaatsing;
  • layout- of CSS-beheer;
  • nieuwe vaste pagina’s via GUI;
  • formulierlogica aanpassen;
  • systeemnotificaties, popups, templates of featuregedrag nabootsen met contentblokken.

1.22 Meldingen- en supportscope

Het meldingenproces ondersteunt eindgebruikers en beheerders bij problemen, inhoudelijke fouten, wijzigingsverzoeken en overige situaties.

Binnen scope:

  • melding indienen;
  • eigen meldingen bekijken;
  • reageren;
  • eigen melding sluiten;
  • oplossing accepteren;
  • melding heropenen binnen termijn;
  • beheerderoverzicht;
  • interne en externe discussie;
  • oplossen en sluiten;
  • heropenen door beheer;
  • doorzetten naar docent;
  • technische snapshot;
  • compacte history.

Buiten scope:

  • automatische samenvoeging van dubbele meldingen;
  • vrij helpdeskchatkanaal buiten meldingcontext;
  • bijlagen binnen de initiële scope;
  • zoeken in compacte history als eerste zoekscope;
  • generieke doorstuurfunctie voor gewone eindgebruikers.

1.23 Beheerbare versus codegedreven onderdelen

OefenHub maakt expliciet onderscheid tussen beheerbare inhoud en codegedreven structuur.

OnderdeelBeheerbaarCodegedreven / buiten gewone beheeractie
ContentblokkenTitel, tekst, label waar ondersteund.Layout, componenttype, volgorde, renderlocatie.
Vaste pagina’sTekstuele blokinhoud.Routes, formulierlogica, nieuwe pagina’s.
FooterTekst, secties, linktoewijzingen binnen toegestane context.Kolomstructuur, responsive volgorde, nieuwe contexten.
PopupsBestaande beheerbare tekstvelden.Popupkeys, technische acties, custom renderers.
SysteemberichttemplatesOnderwerp en tekst van bestaande templates.Nieuwe technische referenties of routering.
FeaturesBestaande togglewaarden.Nieuwe featurekeys zonder code/migratie.
SysteeminstellingenWaarde van bestaande instellingen.Nieuwe sleutelsets of vrije runtimevariabelen.
SysteemnotificatiesDoelgroep, tekst, planning en weergaveregel.Mailboxberichten of popupregistergedrag.
OefenmodulesMetadata, actiefstatus, testzichtbaarheid en migratieacties.Modulecode en modulespecifieke interne logica.

1.24 Gegevens- en bron-van-waarheidprincipes

De productscope rust op enkele vaste gegevensprincipes.

PrincipeBetekenis
Server-side autorisatieClientstate, zichtbare UI, routeparameters en browsergeschiedenis verruimen toegang nooit.
Historische reconstructieResultaten, PDF’s, gedeelde oefeningen en audit gebruiken historische context waar relevant.
Readmodels zijn afgeleidTellers, badges, frontpageblokken en overzichten vervangen de brondata niet.
Runs zijn bron voor resultatenExerciseRuns en voortgangspayloads blijven leidend voor resultaat, geschiedenis, PDF en live meekijken.
Relaties begrenzen toegangVriendschap, docentrelatie en ouder-/voogdrelatie bepalen toegestane communicatie, resultaatinzage en livecontext.
Audit voor beheerimpactBeheeracties met domeinimpact worden herleidbaar vastgelegd.
Geen dataverlies door UI-uitstelAnti-afleiding of realtime-uitstel mag onderliggende berichten, readstates of voortgang niet verliezen.
Geen onnodige nieuwe kolommenFO-aanscherping introduceert geen extra databasevelden wanneer bestaande payloadvelden of brondata volstaan.

1.25 Privacy- en veiligheidsprincipes

OefenHub verwerkt leerling-, ouder-/voogd-, docent- en beheercontexten. Privacy- en veiligheidsgrenzen zijn daarom productscope, niet alleen technische randvoorwaarde.

Voor de productscope geldt:

  • toegang wordt per actie server-side gecontroleerd;
  • foutmeldingen lekken geen technische payloads, tokens, stacktraces of gevoelige inhoud;
  • resultaatdetails worden alleen getoond binnen geldige rol-, relatie- en objectcontext;
  • ouder-/voogdinzage is read-only;
  • docentinzage is beperkt tot eigen docentcontext;
  • beheerderinzage is functioneel begrensd en auditbaar;
  • accountanonimisering behoudt noodzakelijke historische reconstructie zonder actuele persoonsgegevens zichtbaar te houden;
  • vrije upload van profielfoto’s of leerlingbestanden valt buiten scope;
  • gebruikersafbeeldingen komen uit een vooraf gedefinieerde set.

1.26 Featuretoggles en beschikbaarheid

Sommige functionaliteit kan sitebreed of contextueel beschikbaar of niet beschikbaar zijn.

Featuretoggles kunnen de beschikbaarheid beïnvloeden van onder meer:

  • registratie;
  • inloggen;
  • vriendschappen;
  • privéberichten;
  • live meekijken;
  • oefeningen delen;
  • testoefeningen;
  • meldingen;
  • toegankelijkheid.

Featuretoggles verwijderen geen bestaande domeindata. Zij bepalen alleen of nieuwe acties of zichtbare functies beschikbaar zijn binnen de geldende context.

Voorbeelden:

  • uitschakelen van privéberichten verwijdert geen bestaande threads;
  • uitschakelen van meldingen verwijdert geen bestaande tickets;
  • uitschakelen van delen verwijdert geen bestaande gedeelde oefeningen;
  • uitschakelen van live meekijken verwijdert geen auditrecords;
  • uitschakelen van toegankelijkheid verwijdert geen opgeslagen voorkeuren.

1.27 Initiële scope-afbakening

De initiële scope richt zich op een brede maar begrensde webapplicatie.

Binnen de initiële scope vallen de kernflows rond:

  • accountcontext;
  • rollen en autorisatie;
  • oefencatalogus;
  • oefenruns;
  • resultaten;
  • geschiedenis;
  • PDF-export;
  • delen;
  • relaties;
  • berichten;
  • meldingen;
  • live meekijken;
  • contentbeheer;
  • beheerderondersteuning;
  • modulebeheer.

Onderwerpen die niet automatisch binnen de initiële scope vallen:

  • native mobiele app;
  • publieke externe API;
  • meertaligheid;
  • vrije bestandsbijlagen;
  • vrije contentupload;
  • uitgebreide LMS-functionaliteit;
  • automatische module-backwards-compatibilitybewijzen;
  • formele juridische akkoordworkflow;
  • volledige SRS-traceability per requirementregel;
  • technische implementatieplanning.

1.28 Scopegrenzen per aangrenzend documenttype

DocumenttypeWat hoort daar primair thuis
FOFunctionele samenhang, domeingrenzen, rolgedrag, bron-van-waarheid, scope en gebruikersgedrag.
UsecasesProcesverloop, actoractie, alternatieve flows, foutflows en acceptatiecriteria per handeling.
SchermdocumentatieZichtbare schermonderdelen, acties, lege toestanden, labels, waardelagen en schermspecifiek gedrag.
Database-informatieDomeinobjecten, tabellen, relaties, opslaggrenzen, readmodels, history en auditobjecten.
OntwerpbronnenBusiness rules, autorisatiematrix, commandregister, eventregister, popupregister en statusmodellen.
ArchitectuurSysteemgrens, containers, componenten, technische context en interne bouwblokken.
SRSTestbare requirements en traceerbaarheid op requirementniveau.
MockupsVisuele interpretatie en layoutondersteuning, niet de definitieve functionele waarheid.

1.29 Binnen scope versus buiten scope

OnderwerpBinnen scopeBuiten scope
WebapplicatieNederlandstalige responsive webapp.Native mobiele app.
APIInterne servercommunicatie voor webappgedrag waar functioneel zichtbaar.Publieke API voor externe clients.
AuthenticatieExterne identity-providerflow en interne applicatiecontext.Eigen wachtwoordvalidatie of credentialbeheer.
RollenLeerling, ouder/voogd, docent, beheerder en TestDocent.Vrije rolcreatie door eindgebruikers.
OefenenStarten, hervatten, antwoorden, afronden en resultaat.Oefenen namens een andere gebruiker.
OefenmodulesModulekoppeling, configuratiepayloads, testbaarheid en beheermetadata.Modulecodebeheer via GUI.
ResultatenHistorische runcontext, statistieken, geschiedenis en PDF.Resultaten herschrijven via resultaatweergave.
DelenAfgeronde oefeningen delen met vrienden waar toegestaan.Publiek publiceren van oefenruns.
BerichtenSysteemberichten en privéthreads binnen relatiecontext.Vrije open chat of social feed.
MeldingenTicketflow voor opvolging en beheerbehandeling.Helpdeskchat buiten meldingcontext.
ContentVaste contentblokken en footerlinks.Pagebuilder of routebeheer.
BeheerCentrale inrichting, support en audit.Vrije bypass op eindgebruikersdata.
PDFTijdelijke resultaatdownload.Permanent documentarchief.
RealtimeBadges, live meekijken en readmodelupdates.Realtime als bron van waarheid.

1.30 Open scope-aandachtspunten

Dit hoofdstuk introduceert geen nieuwe open punten, maar verwijst naar het centrale hoofdstuk Open punten en buiten scope.

Voor de productvisie en scope zijn met name de volgende bestaande aandachtspunten relevant:

OnderwerpScopebetekenis
TellerdefinitiesTellers moeten per frontpage en overzicht definitief blijven aansluiten op brondata, statusfilters en contextfilters.
ContactformulierTekstuele contactpagina valt onder contentbeheer; formuliergedrag vraagt aparte functionele specificatie wanneer verder uitgewerkt.
Module-renderhulpenComplexe notatie kan per module een export- of renderrepresentatie vragen.
PopuptekstenPopupkeys zijn leidend; definitieve teksten en knoplabels horen in popupregister/beheer.
PlaceholderlijstenTemplate- en popupplaceholders moeten per domein consistent blijven.
Gedeelde-oefening-systeemberichtlinkDe definitieve verwijzingsroute voor gedeelde oefeningen in systeemberichten moet documentatiebreed consistent zijn.

1.31 Lege toestanden binnen productscope

Lege toestanden zijn normaal en vormen niet automatisch een fout.

Voorbeelden:

  • gebruiker heeft nog geen rolcontext;
  • leerling heeft geen toegankelijke oefeningen;
  • leerling heeft geen geschiedenis;
  • leerling heeft geen vrienden om mee te delen;
  • docent heeft nog geen leerlingen;
  • docent heeft nog geen niveaus;
  • ouder/voogd heeft nog geen gekoppelde kinderen;
  • beheerder heeft geen recente beheerwijzigingen;
  • mailbox bevat geen berichten;
  • meldingenoverzicht bevat geen meldingen;
  • systeemnotificatiebeheer bevat geen actieve notificaties;
  • contentbeheer bevat nog geen ingevulde optionele contentblokken.

Een lege toestand mag uitleg en veilige vervolgactie bieden, maar mag geen autorisatie- of technische details lekken.

1.32 Fouttoestanden binnen productscope

Fouttoestanden moeten veilig worden afgehandeld.

Voorbeelden:

  • interne accountcontext kan na identity-providerlogin niet worden opgebouwd;
  • rolcontext ontbreekt of is ongeldig;
  • routeparameter verwijst naar niet-toegankelijk object;
  • relatiecontext is beëindigd;
  • niveauautorisatie is ingetrokken;
  • oefening is in onderhoud gezet;
  • module is niet meer beschikbaar;
  • run is niet afgerond terwijl resultaatdetail wordt gevraagd;
  • PDF-export faalt;
  • realtime verbinding valt weg;
  • feature is uitgeschakeld;
  • content- of templatevalidatie faalt;
  • beheeractie mist geldige beheercontext.

Bij fouttoestanden geldt:

  • geen gedeeltelijke data buiten autorisatie tonen;
  • geen technische stacktraces, tokens of secrets tonen;
  • geen clientstate vertrouwen;
  • geen stille datamutatie uitvoeren;
  • veilige terugkeer naar een toegankelijke context waar mogelijk;
  • audit of securitylogging toepassen waar relevant.

1.33 Relatie tot andere FO-hoofdstukken

HoofdstukRelatie
Bronnen en afbakeningBepaalt bronhiërarchie, interpretatieregels en wat het FO wel/niet beschrijft.
Rollen, context en autorisatieWerkt rolcombinaties, contextbepaling en autorisatiegrenzen uit.
Applicatieschil, header, footer en navigatieWerkt de webapplicatieschil en responsive navigatie uit.
Frontpages en overzichtsschermenWerkt de read-only oriëntatieschermen, tellers en contextfrontpages uit.
Account, profiel en voorkeurenWerkt interne accountcontext, profiel, voorkeuren, toegankelijkheid en anonimisering uit.
RelatiebeheerWerkt vriendschappen, ouder-/voogdrelaties, docentrelaties en docent-docentrelaties uit.
Oefencatalogus, niveaus, categorieën en oefeningenWerkt de inhoudsstructuur en catalogusgrenzen uit.
Leerling: oefenen, voortgang en resultatenWerkt de kern van leerlingruns en resultaatgedrag uit.
Gedeelde oefeningenWerkt delen, ontvangen, shared-records en ontvangersruns uit.
DocentfunctionaliteitWerkt oefenaanbod, leerlingen, autorisaties, resultaten en samenwerking uit.
Ouder-/voogdfunctionaliteitWerkt read-only ouder-/voogdinzage, kinderen, resultaten en live meekijken uit.
BeheerderfunctionaliteitWerkt centrale beheer- en supportscope uit.
Berichten, communicatie en notificatiesWerkt mailbox, privéberichten, readstates, badges en systeemnotificaties uit.
Meldingen en ticketafhandelingWerkt ticket- en meldingenscope uit.
Live meekijkenWerkt read-only realtime meekijken uit.
Contentbeheer, vaste pagina’s en footerWerkt contentbeheer zonder pagebuilder uit.
Popups, templates, features en systeemnotificatiesWerkt beheerbare feedback, toggles, templates en notificaties uit.
PDF-export en resultaatpresentatieWerkt resultaatweergave en PDF-export uit.
Functionele beslisregels en uitgangspuntenBundelt domeinoverstijgende regels en beslisprincipes.
Open punten en buiten scopeHoudt resterende open punten en expliciete buiten-scopeonderwerpen bij.
Schermlaag en UX-specificatiesWerkt schermlaagprincipes, UX-regels en bronpositie uit.
Oefenmodules en modulepayloadsWerkt modulecontract, payloadlagen en schema-evolutie uit.
Functionele architectuurcontextVerbindt functionele scope met systeemgrens, containers en architectuurimplicaties.

1.34 Gerelateerde bronverwijzingen

BronLink
Technisch Ontwerp — scope en uitgangspuntenIntro, scope en uitgangspunten
Technisch Ontwerp — architectuuroverzichtArchitectuuroverzicht en solution-opbouw
Technisch Ontwerp — rolflowsRollenflows technisch
FO — bronnen en afbakeningBronnen en afbakening
FO — rollen, context en autorisatieRollen, context en autorisatie
FO — frontpages en overzichtsschermenFrontpages en overzichtsschermen
FO — oefencatalogusOefencatalogus, niveaus, categorieën en oefeningen
FO — leerling oefenen, voortgang en resultatenLeerling: oefenen, voortgang en resultaten
FO — docentfunctionaliteitDocentfunctionaliteit
FO — ouder-/voogdfunctionaliteitOuder-/voogdfunctionaliteit
FO — beheerderfunctionaliteitBeheerderfunctionaliteit
FO — open punten en buiten scopeOpen punten en buiten scope
FO — functionele architectuurcontextFunctionele architectuurcontext
Usecases — startpuntUsecases
Database-informatie — introDatabase-informatie
Ontwerpbron — business rulesBusiness rules
Ontwerpbron — autorisatiematrixAutorisatiematrix
Ontwerpbron — statusmodellenStatusmodellen
Ontwerpbron — command-registerCommand-register
Ontwerpbron — event-registerEvent-register
Ontwerpbron — popup-registerPopup-register
Architectuur — system contextC4 niveau 1 — system context
Architectuur — container diagramC4 niveau 2 — container diagram
Architectuur — component diagramC4 niveau 3 — component diagram
Oefenmodules — introOefenmodules
Schermdocumentatie — introSchermdocumentatie