Skip to main content

Live meekijken

15.1 Doel

Live meekijken maakt het mogelijk dat bevoegde docenten en ouders/voogden een actieve oefenrun van een leerling of kind read-only volgen.

Live meekijken is begeleiding en toezicht op actuele voortgang.

Live meekijken is geen oefenfunctie, geen correctiefunctie, geen resultaatbewerking, geen beheerfunctie en geen communicatiekanaal.

De leerling blijft eigenaar van de lopende oefeninteractie.

De leerling-oefenflows blijven bronhouder voor:

  • starten van een oefenrun;
  • tonen van vragen aan de leerling;
  • beantwoorden van vragen;
  • markeren als Geen idee;
  • opslaan van voortgang;
  • onderbreken;
  • afronden;
  • berekenen van uniforme totalen en statistieken;
  • resultaat- en geschiedenisvorming.

Live meekijken leest deze voortgang alleen en toont die aan bevoegde meekijkers.

15.2 Domeinafbakening

OnderdeelBinnen scopeBuiten scope
Online-overzichtTonen welke leerlingen of kinderen online zijn en of zij een actieve oefenrun hebben.Relaties vormen, autorisaties beheren of oefeningen starten.
Beschikbaarheid live meekijkenServer-side bepalen of Kijk live mee beschikbaar is.Beschikbaarheid baseren op clientstate of oude knopstatus.
Live-meekijksessieBewuste start, read-only voortgang volgen, browsemodus, terug naar actuele vraag en beëindigen.Antwoorden geven, score wijzigen, run pauzeren, run afronden of oefening corrigeren.
Realtime updatesTransporteren van actuele voortgang naar bevoegde meekijkers.Realtime-kanaal gebruiken als bron van waarheid of autorisatiebron.
AuditVastleggen van daadwerkelijk gestarte live-meekijksessies in LiveViewAudit.Auditrecord maken bij alleen openen van online-overzicht of alleen beschikbaarheidsbepaling.
VerbindingsverliesReconnect proberen, opnieuw autoriseren en veilig beëindigen wanneer herstel faalt.Netwerkdiagnose buiten OefenHub of automatische ticketaanmaak.
Resultaten na afloopHoogstens veilige overgang naar afgeronde-resultaatcontext via bestaande resultaatflows.Live meekijken gebruiken als geschiedenis- of PDF-exportdomein.

Live meekijken is dus een raadpleeg- en sessiedomein bovenop bestaande run- en voortgangsdata.

Het domein introduceert geen tweede oefenrunbron en geen aparte live-voortgangstabel.

15.3 Bronpositie

BronlaagBetekenis voor live meekijken
FOBeschrijft de functionele samenhang, rolgrenzen, read-only regels, sessielifecycle en raakvlakken.
Usecases docentBeschrijven docent-onlineoverzicht, beschikbaarheid, start, volgen, browsen, terugkeren, beëindigen en reconnect.
Usecases ouder/voogdBeschrijven dezelfde livefunctionaliteit vanuit ouder-/voogdrelatie en kindcontext.
LeerlingusecasesBlijven bronhoudend voor oefenrun, antwoorden, voortgang, onderbreken en afronden.
SchermdocumentatieBeschrijft zichtbare velden, knoppen, lege toestanden en componentgedrag per rol.
Database-informatieBeschrijft ExerciseRuns, ExerciseRunProgress, LiveViewAudit, relatie- en autorisatiebronnen.
OntwerpbronnenBeschrijven autorisatie, business rules, popupkeys, events en commandgrenzen.
Realtime techniekTransporteert updates, maar bepaalt geen rechten en bewaart geen brondata.

Het FO dupliceert geen volledige usecasestromen of schermspecificaties.

Het FO legt vast welke domeingrenzen voor alle live-meekijkflows gelden.

15.4 Kernbegrippen

BegripBetekenis
MeekijkerDocent of ouder/voogd die een actieve run read-only volgt.
Geobserveerde leerling / kindDe gebruiker die de oefenrun uitvoert.
Actieve oefenrunNiet-afgeronde leerlingrun waarbij de leerling zich actueel in de oefencontext bevindt of recent live beschikbaar is.
Online-overzichtReadmodel per rolcontext met online/presence- en oefenstatus.
Live beschikbaarAfgeleide status die aangeeft dat Kijk live mee nu beschikbaar is.
Live-meekijksessieBewust gestarte sessie waarin een meekijker updates van één run volgt.
LiveViewAuditAuditrecord van een daadwerkelijk gestarte live-meekijksessie.
Live-modusUI-stand waarin de meekijker de actuele vraag volgt.
Browse-modusUI-stand waarin de meekijker tijdelijk een andere vraag bekijkt.
Realtime-kanaalSignalR of gelijkwaardige transportlaag voor updates.
Server-side voortgangOpgeslagen voortgang in run- en vraagvoortgangsbronnen.

15.5 Rollen en autorisatiegrenzen

Live meekijken kent per viewerrol een eigen autorisatiegrens.

ViewerAutorisatiegrensFunctionele betekenis
DocentActieve docentcontext, actieve docent-leerlingrelatie en relevante niveauautorisatie voor de actieve oefenrun.De docent mag alleen live meekijken met oefeningen die binnen de eigen onderwijscontext vallen.
Ouder/voogdActieve GuardianStudent-relatie met het kind.De ouder/voogd mag live meekijken met actieve oefeningen van gekoppelde kinderen, ongeacht welke docent de oefening heeft aangeboden.
BeheerderGeen live-meekijkrecht tijdens actieve leerlingoefeningen.De beheerder mag geschiedenis en audit analyseren waar toegestaan, maar niet live meekijken vanuit beheercontext.
LeerlingGeen meekijkerrol voor eigen of andermans run.De leerling voert de oefening uit en kan niet als liveviewer handelen.

Een zichtbare onlinekaart, liveknop, badge, route, RunId, ChildId, StudentId, browsergeschiedenis of clientcache is nooit autorisatiebewijs.

Iedere liveactie herhaalt de relevante server-side controle.

15.6 Docentcontext

Voor docenten geldt een smallere livegrens dan voor ouders/voogden.

Een docent mag alleen live meekijken wanneer minimaal geldt:

  • de gebruiker is ingelogd;
  • de gebruiker heeft een actieve docentrol;
  • de docentcontext is server-side bepaald;
  • er bestaat een actieve docent-leerlingrelatie met de leerling;
  • de leerlingrun valt binnen de onderwijscontext van de docent;
  • de docent heeft relevante niveauautorisatie of contexttoegang voor die oefening;
  • de run is een actieve leerlingrun en geen docenttestrun;
  • de live-meekijkfeature is beschikbaar;
  • de run is niet afgerond op het moment van live-start.

Een docent mag niet live meekijken met:

  • leerlingen zonder actieve docent-leerlingrelatie;
  • leerlingen die wel online zijn maar buiten de docentcontext vallen;
  • runs op niveaus die niet door deze docent zijn geautoriseerd;
  • runs uit een ouder-/voogdcontext;
  • runs die alleen via beheercontext zichtbaar zijn;
  • docenttestruns;
  • afgeronde geschiedenisruns.

Samenwerking als collaborator op een niveau geeft niet automatisch live-meekijkrecht op leerlingen van de eigenaar.

Voor live meekijken blijft een geldige docent-leerling- en niveaucontext vereist.

15.7 Ouder-/voogdcontext

Voor ouders/voogden is de actieve ouder-/voogdrelatie de autorisatiebron.

Een ouder/voogd mag live meekijken wanneer minimaal geldt:

  • de gebruiker is ingelogd;
  • de gebruiker heeft een actieve ouder-/voogdrol;
  • de ouder-/voogdcontext is server-side bepaald;
  • er bestaat een actieve GuardianStudent-relatie met het kind;
  • het kind heeft een actieve oefenrun;
  • de live-meekijkfeature is beschikbaar;
  • de run hoort bij het gekoppelde kind;
  • de run is niet afgerond op het moment van live-start.

Een ouder/voogd mag live meekijken bij alle actieve oefeningen van een gekoppeld kind.

Daarbij is niet bepalend:

  • welke docent de oefening heeft aangeboden;
  • welk niveau historisch is gekozen;
  • welke categorie of oefening door welke docent is beheerd;
  • of de ouder/voogd ook docent is.

Een gebruiker met zowel ouder-/voogdrol als docentrol krijgt binnen ouder-/voogdroutes geen impliciete docentinzage.

Een docentrelatie met hetzelfde kind vervangt binnen ouder-/voogdroutes geen ouder-/voogdrelatie.

15.8 Beheerdergrens

Beheerdercontext geeft geen live-meekijkrecht.

Een beheerder mag:

  • historische oefenruns analyseren waar beheerfunctionaliteit dat toestaat;
  • auditinformatie raadplegen waar toegestaan;
  • supportmatig contexten inspecteren via beheerflows;
  • technische of functionele problemen onderzoeken vanuit geschiedenis en logging.

Een beheerder mag niet:

  • live meekijken met een actieve leerlingrun;
  • vanuit beheercontext deelnemen aan een realtime liveweergave;
  • via beheerderondersteuning een liveviewer worden;
  • livevoortgang gebruiken als vrije supportmonitor;
  • beheerderrechten als bypass gebruiken voor docent- of ouder-/voogdliveacties.

Wanneer een gebruiker beheerder én docent of ouder/voogd is, gelden binnen de gekozen docent- of ouder-/voogdroute nog steeds de normale livegrenzen van die rol.

De beheerderrol verruimt die livegrenzen niet.

15.9 Online-overzicht

Het online-overzicht is per rolcontext een afgeleid readmodel.

Het online-overzicht is geen bron van waarheid.

15.9.1 Docent-onlineoverzicht

Het docent-onlineoverzicht toont alleen leerlingen die binnen de actieve docentcontext zichtbaar zijn.

Per zichtbare leerling kan het overzicht tonen:

  • naam of afgesproken naamweergave;
  • online-/presence-indicatie;
  • actieve oefencontext wanneer toegestaan;
  • niveau;
  • categorie;
  • oefening;
  • beschikbaarheid van Kijk live mee;
  • eventuele reden waarom live meekijken niet beschikbaar is.

Het docent-onlineoverzicht mag geen leerlingen tonen buiten de docentcontext.

Een leerling die online is maar een oefening buiten de docentcontext maakt, mag niet met die oefencontext zichtbaar worden.

15.9.2 Ouder-/voogd-onlineoverzicht

Het ouder-/voogd-onlineoverzicht toont alleen actief gekoppelde kinderen.

Per gekoppeld kind kan het overzicht tonen:

  • naam of ingestelde naamweergave;
  • online-/presence-indicatie;
  • of het kind met een oefening bezig is;
  • categorie en oefening waar dat binnen de ouder-/voogdcontext toegestaan is;
  • beschikbaarheid van Kijk live mee;
  • eventuele reden waarom live meekijken niet beschikbaar is.

Het ouder-/voogd-onlineoverzicht mag geen kinderen tonen zonder actieve ouder-/voogdrelatie.

15.9.3 Geen live-start door openen van overzicht

Het openen van het online-overzicht:

  • start geen live-meekijksessie;
  • maakt geen LiveViewAudit-record;
  • wijzigt geen oefenrun;
  • wijzigt geen voortgang;
  • wijzigt geen relatie;
  • wijzigt geen niveauautorisatie;
  • maakt geen systeembericht;
  • maakt geen privébericht;
  • geeft geen persistent live-abonnement dat losstaat van een expliciete startactie.

15.10 Beschikbaarheid van live meekijken

De liveknopstatus wordt server-side afgeleid.

Beschikbaarheid is geen simpele online-check.

VoorwaardeDocentOuder/voogd
Actieve rolcontextVereistVereist
Actieve relatieDocent-leerlingrelatieGuardianStudent-relatie
Relevante autorisatieNiveau-/docentcontext vereistNiet docentafhankelijk; kindrelatie is leidend
Actieve runVereistVereist
Run niet afgerondVereistVereist
Featuretoggle live meekijkenVereistVereist
Realtime infrastructuur bruikbaarVereist voor startenVereist voor starten
Geen test-/beheercontextVereistVereist

De beschikbaarheidsbepaling levert een status en zo nodig een functionele reden op.

Voorbeelden van niet-beschikbaar:

  • leerling/kind is niet online;
  • leerling/kind is online maar oefent niet;
  • actieve run is net afgerond;
  • live-feature is sitebreed uitgeschakeld;
  • docentrelatie ontbreekt;
  • niveauautorisatie ontbreekt voor docent;
  • ouder-/voogdrelatie is beëindigd;
  • run hoort niet bij het geselecteerde kind;
  • sessie of rolcontext is verlopen;
  • realtime-kanaal kan niet worden gestart.

Beschikbaarheid wordt opnieuw bepaald bij:

  • openen van het online-overzicht;
  • selectie van een leerling of kind;
  • wijziging in presence;
  • start of einde van een leerlingrun;
  • intrekken van relatie of autorisatie;
  • wijzigen van featurebeschikbaarheid;
  • herladen of terugkeren naar de pagina;
  • expliciete live-start.

15.11 Starten van live meekijken

Een live-meekijksessie start pas na een bewuste actie van de meekijker.

De actie heet functioneel Kijk live mee of een vergelijkbare schermtekst volgens de schermdocumentatie.

Bij start voert OefenHub opnieuw alle actuele controles uit.

Een eerder actieve knopstatus is niet voldoende.

15.11.1 Startcontrole

Bij live-start controleert het systeem minimaal:

ControleRegel
SessieViewer is ingelogd en heeft een geldige server-side sessie.
RolcontextViewer handelt binnen Docent of Ouder/voogd.
RelatiecontextVereiste relatie is actief.
AutorisatieDocent heeft relevante niveau-/docentcontext; ouder/voogd heeft actieve kindrelatie.
RunRun bestaat, hoort bij de leerling/het kind en is actief.
AfrondingRun is niet afgerond.
FeatureLive meekijken is sitebreed beschikbaar.
RealtimeRealtime subscription kan veilig worden gestart.
PrivacyEr wordt geen runinhoud buiten de toegestane context vrijgegeven.

15.11.2 LiveViewAudit bij start

Bij succesvolle live-start wordt een LiveViewAudit-record aangemaakt.

Minimaal vast te leggen zijn:

VeldBetekenis
ViewerUserIdGebruiker die meekijkt.
ViewerRoleIdRolcontext van de meekijker.
ViewerRoleNameSnapshotSnapshot van de rolnaam, bijvoorbeeld Docent of Ouder/voogd.
ObservedUserIdLeerling/kind van wie de run wordt gevolgd.
ExerciseRunIdActieve run waarop wordt meegekeken.
StartedAtUtcStartmoment van de live-meekijksessie.
EndedAtUtcEindmoment zodra de sessie eindigt.
EndReason / afgeleide redenOptioneel of technisch: handmatig beëindigd, run-einde, disconnect, autorisatie vervallen of fout.

Het auditrecord ontstaat niet bij:

  • openen van online-overzicht;
  • alleen bepalen van beschikbaarheid;
  • hover of focus op liveknop;
  • mislukte start vóórdat de sessie daadwerkelijk begint;
  • client-side voorbereiding zonder succesvolle server-side start.

Wanneer realtime-start faalt nadat audit al is aangemaakt, wordt hetzelfde auditrecord idempotent beëindigd.

Er wordt geen tweede auditrecord aangemaakt voor dezelfde mislukte startpoging.

15.12 Bron van waarheid

De actuele liveweergave gebruikt server-side opgeslagen run- en voortgangsinformatie.

BronGebruik
ExerciseRunsHoofdrecord van de actieve run, runstatus, leerling, niveau, categorie, oefening en modulecontext.
ExerciseRunProgressOperationele voortgang per vraag voor live tonen, hervatten en actuele vraagstatus.
ModulepayloadModulespecifieke vraag- en antwoordinhoud binnen de runcontext.
Uniforme runveldenTotalen en voortgangswaarden die nodig zijn voor statusindicatie.
Online/presence-readmodelAfgeleide indicatie of leerling/kind online of recent actief is.
LiveViewAuditAudit van de meekijksessie, niet de bron van oefenvoortgang.
SignalR / realtime transportTransport van updates, niet de opslaglaag.

SignalR of een vergelijkbare realtime-oplossing bepaalt nooit:

  • of de viewer bevoegd is;
  • welke run zichtbaar mag zijn;
  • welke antwoorden bestaan;
  • of een vraag goed of fout is;
  • of een run afgerond is;
  • welke historie later zichtbaar is.

Bij herladen, reconnect of opnieuw openen wordt de actuele server-side toestand opnieuw bepaald.

15.13 Live-weergave

De live-weergave toont één actieve run binnen één geautoriseerde context.

Minimaal zichtbaar kunnen zijn:

  • leerling- of kindnaam volgens toegestane naamweergave;
  • categorie;
  • oefening;
  • niveau waar toegestaan;
  • voortgang, bijvoorbeeld vraagnummer en totaal;
  • actuele vraagcontext;
  • status van beantwoorde vragen;
  • indicatie goed/fout/geen idee waar al opgeslagen en toegestaan;
  • vragenlijst of vraagnavigatie;
  • live-/browsemodusindicator;
  • actie om terug te keren naar actuele vraag;
  • actie om de meekijksessie te beëindigen.

De exacte schermweergave volgt de schermdocumentatie.

Het FO legt vast dat alle zichtbare informatie uit geautoriseerde server-side context komt.

15.14 Read-only gedrag

Live meekijken is volledig read-only.

De meekijker kan wel:

  • actuele vraag zien;
  • voortgang zien;
  • beantwoorde vragen raadplegen voor zover toegestaan;
  • door vragen bladeren;
  • terugkeren naar de actuele livevraag;
  • de eigen sessie beëindigen;
  • bij verbindingsverlies herstel laten proberen;
  • na veilig einde terugkeren naar online-overzicht of een toegestane context.

De meekijker kan niet:

  • antwoord invullen;
  • antwoord wijzigen;
  • antwoord wissen;
  • vraag als Geen idee markeren;
  • score corrigeren;
  • vraagstatus wijzigen;
  • vraag overslaan namens de leerling;
  • run pauzeren;
  • run onderbreken;
  • run afronden;
  • resultaat herberekenen;
  • oefeningconfiguratie wijzigen;
  • modulepayload wijzigen;
  • feedback naar de run schrijven;
  • relatie of autorisatie wijzigen vanuit liveweergave;
  • privébericht of ticket automatisch laten ontstaan door alleen live te kijken.

Wanneer de UI per ongeluk een mutatieactie zichtbaar zou maken, blijft de server-side laag verplicht die mutatie te blokkeren.

15.15 Live voortgang volgen

Na succesvolle start ontvangt de meekijker voortgangsupdates zolang:

  • de viewer geautoriseerd blijft;
  • de run actief blijft;
  • de realtimeverbinding functioneert of hersteld kan worden;
  • de live-feature beschikbaar blijft of volgens bestaande sessieregel door mag lopen;
  • de applicatiecontext geldig blijft.

Wanneer de leerling een antwoord bevestigt, gebeurt functioneel het volgende:

  1. De leerlingflow verwerkt het antwoord.
  2. De server slaat voortgang op.
  3. Uniforme run- en voortgangswaarden worden waar nodig bijgewerkt.
  4. Het realtime-kanaal publiceert een update naar bevoegde liveviewers.
  5. De liveweergave verwerkt de update read-only.

De liveweergave mag nooit de primaire plaats zijn waar antwoordverwerking plaatsvindt.

De liveweergave mag ook niet proberen voortgang uit clientstate van de leerlingbrowser te reconstrueren.

15.16 Browse-modus

Browse-modus is een lokale weergavestand van de meekijker.

De meekijker kan tijdelijk een andere vraag binnen dezelfde run bekijken.

Dat kan gaan om:

  • een eerder beantwoorde vraag;
  • de actuele vraag;
  • een toekomstige vraag die al in de run bestaat maar nog niet beantwoord is.

Voor browse-modus gelden de volgende regels.

RegelBetekenis
Zelfde autorisatieBladeren door vragen vereist dezelfde autorisatie als live volgen.
Geen runmutatieDe browsepositie wordt niet op de run opgeslagen.
Geen antwoordmutatieBekijken corrigeert geen antwoord en markeert niets.
Geen onverwacht overschrijvenNieuwe live updates mogen de browsepositie niet automatisch vervangen.
Live-indicator blijft zichtbaarDe viewer moet kunnen zien dat de leerling intussen verdergaat.
Terugkeeractie beschikbaarWanneer de viewer niet op de actuele livevraag staat, is terugkeren mogelijk.
Toekomstige vragen beperktNiet-bestaande antwoorden of voortgang worden niet getoond.

Browse-modus is presentatiestate.

Browse-modus is geen persistente domeinstatus.

15.17 Terugkeren naar actuele livevraag

Vanuit browse-modus kan de meekijker terugkeren naar de actuele livevraag.

Deze actie:

  • bepaalt opnieuw de actuele vraagpositie uit server-side voortgang;
  • zet de weergave terug naar live-modus;
  • behoudt het realtime-abonnement;
  • veroorzaakt geen runmutatie;
  • schrijft geen voortgang;
  • corrigeert geen score;
  • maakt geen nieuw auditrecord.

Wanneer de run intussen is afgerond of verlaten, wordt niet teruggekeerd naar een oude livevraag.

In dat geval volgt de sessie-eindeafhandeling.

15.18 Gelijktijdige meekijkers

Meerdere bevoegde meekijkers mogen gelijktijdig dezelfde actieve run volgen.

Voorbeelden:

  • een docent en een ouder/voogd kijken tegelijk mee;
  • twee ouders/voogden met actieve ouder-/voogdrelatie kijken tegelijk mee;
  • meerdere docenten kijken alleen mee wanneer ieder afzonderlijk binnen de eigen docentcontext geautoriseerd is.

Voor elke daadwerkelijke live-meekijksessie wordt een eigen auditrecord vastgelegd.

De aanwezigheid van één bevoegde meekijker autoriseert geen andere meekijker.

Een beëindiging door de ene meekijker beëindigt niet automatisch de sessie van andere bevoegde meekijkers.

Einde van de leerlingrun beëindigt functioneel wel de livebeschikbaarheid voor alle liveviewers.

15.19 Leerlingcommunicatie over meekijken

Live meekijken kan richting leerling functioneel zichtbaar of teruggekoppeld worden volgens de communicatie- en notificatieregels.

Daarbij gelden deze grenzen:

  • live meekijken maakt geen vrije chat aan;
  • live meekijken start geen privéberichtthread;
  • live meekijken opent geen ticket;
  • eventuele systeemcommunicatie is informatief;
  • tijdens een actieve oefenrun mag de leerling niet opdringerig worden afgeleid;
  • de anti-afleidingsregel uit de leerling-oefencontext blijft gelden.

Wanneer de leerling niet direct een melding ziet omdat de oefening actief is, mag de informatie later via de daarvoor bedoelde communicatievorm zichtbaar worden.

Popupteksten en template-inhoud worden niet in dit FO-hoofdstuk gedupliceerd.

15.20 Sessie beëindigen

Een live-meekijksessie kan eindigen door:

  • bewuste actie van de meekijker;
  • navigeren uit de liveweergave;
  • logout;
  • verlopen sessie;
  • verbindingsverlies zonder herstel;
  • vervallen autorisatie;
  • beëindigen of afronden van de leerlingrun;
  • technische fout;
  • feature- of contextwijziging waardoor liveweergave niet veilig kan doorgaan.

Bij beëindiging geldt:

  • de realtime-subscription wordt beëindigd;
  • de liveweergave wordt niet langer als actief gepresenteerd;
  • LiveViewAudit.EndedAtUtc wordt gevuld wanneer nog leeg;
  • beëindigen is idempotent;
  • de leerlingrun blijft ongewijzigd;
  • andere bevoegde liveviewers blijven actief tenzij hun eigen sessie ook eindigt;
  • de viewer keert terug naar een veilige context.

Idempotent betekent dat herhaald beëindigen van dezelfde sessie geen dubbele eindrecords of foutieve status veroorzaakt.

15.21 Run-einde tijdens live meekijken

Wanneer de leerling de oefening afrondt terwijl iemand live meekijkt:

  • verwerkt de leerlingflow de afronding;
  • worden statistieken en resultaten volgens de leerlingrunregels opgeslagen;
  • realtime geeft door dat de livecontext eindigt;
  • de liveweergave toont een veilige einde-indicatie;
  • het auditrecord wordt afgesloten;
  • de meekijker krijgt geen mutatierecht op het resultaat.

Een eventuele route naar resultaat- of geschiedenisweergave is een aparte vervolgflow.

Die vervolgflow gebruikt de normale resultaat- en autorisatiegrenzen.

15.22 Onderbreken door leerling

Wanneer de leerling de oefening onderbreekt door navigeren, logout, verbindingsverlies of verlaten van de oefencontext:

  • de leerlingflow bepaalt of de run niet-afgerond blijft;
  • voortgang blijft server-side opgeslagen;
  • liveweergave wordt veilig beëindigd of toont dat de leerling niet meer actief oefent;
  • LiveViewAudit wordt waar nodig afgesloten;
  • de meekijker kan de leerlingrun niet alsnog afronden;
  • de meekijker kan de onderbreking niet ongedaan maken.

Niet-afgeronde runs verschijnen niet als afgeronde geschiedenisregel.

Live meekijken verandert dat niet.

15.23 Verbindingsverlies en reconnect

Bij verbindingsverlies probeert de applicatie gecontroleerd te herstellen.

Functioneel uitgangspunt:

  • realtime verbindingsverlies wordt gedetecteerd;
  • de frontend toont een herstelstand of technische verbindingsstatus;
  • maximaal vijf herverbindingspogingen worden uitgevoerd;
  • na herstel controleert de backend opnieuw sessie, rolcontext, autorisatie en actuele runstatus;
  • de liveweergave synchroniseert opnieuw met server-side voortgang;
  • wanneer herstel faalt, wordt de liveweergave veilig beëindigd;
  • LiveViewAudit.EndedAtUtc wordt gevuld wanneer de sessie functioneel eindigt.

Reconnect geeft geen recht op toegang wanneer de autorisatie intussen is vervallen.

Reconnect gebruikt geen oude voortgangsdata uit de browser als bron.

Reconnect veroorzaakt geen antwoordherhaling, scorewijziging of runmutatie.

15.24 Featuretoggle live meekijken

Live meekijken is afhankelijk van een sitebrede featurebeschikbaarheid.

Wanneer live meekijken sitebreed is uitgeschakeld:

  • online-overzichten kunnen nog bestaan wanneer die zelfstandig functioneel zijn;
  • liveacties worden niet beschikbaar gemaakt;
  • bestaande auditrecords blijven bestaan;
  • historische runs blijven bestaan;
  • resultaten en geschiedenis blijven volgens eigen regels beschikbaar;
  • er wordt geen run- of relatiehistorie verwijderd.

Wanneer de feature tijdens een bestaande sessie wijzigt, moet OefenHub veilig bepalen of de sessie beëindigd wordt of niet verder mag starten.

De featuretoggle zelf wordt beheerd in het beheer-/featuresdomein en niet in live meekijken.

15.25 Popups en feedback

Live meekijken gebruikt popupkeys en veilige feedback voor fout- en blokkadesituaties.

Voorbeelden van feedbackmomenten:

  • live niet beschikbaar;
  • toegang geweigerd;
  • startfout;
  • sessie beëindigd;
  • verbinding verbroken;
  • reconnect mislukt;
  • run net afgerond;
  • relatie of autorisatie vervallen.

Voor ouder-/voogdflows worden POP-OVG-LIVE-* keys gebruikt waar de bronnen die benoemen.

Voor docentflows worden docentgerichte live-popupkeys of generieke routeguard-/componentafhandeling gebruikt volgens popupregister en schermdocumentatie.

Het FO dupliceert geen popupteksten, knopteksten, inputlabels of themakeuzes.

Autorisatiefouten mogen geen leerlingnaam, kindnaam, runinhoud, antwoorddata, tokens of technische payload lekken wanneer toegang ontbreekt.

15.26 Privacy en gegevensminimalisatie

Live meekijken toont alleen informatie die nodig is voor begeleiding binnen de geldige context.

Voor docenten betekent dit:

  • alleen leerlingen binnen de eigen docentcontext;
  • alleen runs binnen de geautoriseerde onderwijscontext;
  • geen resultaten of livecontext van andere docenten zonder aparte geldige autorisatie;
  • geen ouder-/voogdcontext via docentroute.

Voor ouders/voogden betekent dit:

  • alleen actief gekoppelde kinderen;
  • geen kinderen buiten actieve ouder-/voogdrelatie;
  • geen docent- of beheerdersinformatie;
  • geen leerlinggegevens buiten de gekoppelde kindcontext.

Voor beide rollen geldt:

  • routeparameters mogen toegang niet verruimen;
  • realtime group membership moet server-side geautoriseerd worden;
  • clientcache mag geen oude liveweergave blijven tonen na autorisatieverlies;
  • foutmeldingen zijn veilig en minimaal;
  • auditgegevens zijn niet automatisch zichtbaar voor eindgebruikers.

15.27 Audit en historie

LiveViewAudit registreert daadwerkelijke live-meekijksessies.

De auditlaag ondersteunt:

  • reconstructie dat live meekijken heeft plaatsgevonden;
  • zicht op viewer, rolcontext, geobserveerde leerling/kind en run;
  • start- en eindmoment;
  • onderscheid tussen docent- en ouder-/voogdcontext;
  • analyse van sessie-einde door normaal einde, run-einde, disconnect of fout waar technisch vastgelegd.

LiveViewAudit is geen:

  • bron voor oefenvoortgang;
  • readmodel voor actuele vraag;
  • mailboxbericht;
  • ticket;
  • resultaatrecord;
  • toestemming voor toekomstige toegang;
  • statusmachine voor de leerlingrun.

Auditrecords worden niet aangepast door normale resultaatweergave, geschiedenis of PDF-export.

15.28 Tellers en readmodels

Live-gerelateerde tellers zijn afgeleide waarden.

WaardeDefinitieBron / grens
Online leerlingLeerling binnen docentcontext met actuele of recente presence.Presence/readmodel plus docentcontext.
Online kindActief gekoppeld kind met actuele of recente presence.Presence/readmodel plus ouder-/voogdrelatie.
Actieve oefenrunNiet-afgeronde run waarbij leerling/kind actueel oefent.ExerciseRuns en voortgang/context.
Live beschikbaarRolcontext, relatie/autorisatie, feature en actieve run zijn geldig.Server-side beschikbaarheidsbepaling.
Open live sessieLiveViewAudit met startmoment en zonder eindmoment.Audit, niet oefenbron.
Beëindigde live sessieLiveViewAudit met gevuld eindmoment.Audit.
Browse-modusViewer bekijkt niet-actuele vraag binnen liveweergave.Presentatiestate, niet persistent.
Live-modusViewer volgt actuele vraag.Presentatiestate plus server-side voortgang.

Tellers mogen alleen opgebouwd worden uit data die de gebruiker binnen de betreffende rolcontext mag zien.

Testdata, docenttestruns en beheercontext mogen niet als reguliere leerling-liveactiviteit worden getoond.

15.29 Relatie tot leerling-oefenrun

Live meekijken is afhankelijk van de leerling-oefenrun, maar wijzigt die niet.

LeerlingrunLive meekijken
Start runLive kan pas beschikbaar worden nadat een actieve run bestaat.
Toon vraagLive kan actuele vraagcontext tonen.
Bevestig antwoordLive ontvangt na server-side opslag een update.
Geen ideeLive toont opgeslagen status waar toegestaan.
Onderbreek runLive eindigt of toont dat run niet meer actief is.
Rond run afLive eindigt; resultaatflow neemt over.
Hervat runLive kan opnieuw beschikbaar worden wanneer leerling actief oefent.

De leerlingflow blijft altijd leidend.

Live meekijken mag nooit proberen leerlinggedrag te sturen door mutaties in de run.

15.30 Relatie tot resultaten en geschiedenis

Live meekijken toont actuele voortgang van een niet-afgeronde run.

Resultaten en geschiedenis tonen afgeronde runs.

ContextKenmerk
Live meekijkenActieve of net eindigende run, realtime voortgang, read-only sessie.
ResultaatweergaveAfgeronde run, opgeslagen totalen en statistieken.
GeschiedenisLijst of detail van afgeronde runs binnen geautoriseerde context.
PDF-exportTijdelijke export van historische afgeronde resultaatcontext.

Wanneer een run wordt afgerond tijdens live meekijken, ontstaat niet automatisch een PDF of geschiedenisexport.

Een viewer die resultaatdetails wil bekijken, gebruikt de bestaande resultaat-/geschiedenisflow en wordt opnieuw geautoriseerd.

15.31 Relatie tot berichten en systeemnotificaties

Live meekijken kan raakvlakken hebben met systeemcommunicatie, maar is geen communicatiedomein.

CommunicatievormRelatie met live meekijken
Mailbox-systeemberichtKan informatief gebruikt worden als een domeinflow dat vereist.
PrivéberichtWordt niet aangemaakt door live meekijken.
Thread-eventWordt niet aangemaakt door live meekijken.
SysteemnotificatieWordt niet boven actieve leerlingoefening getoond als afleidende overlay.
PopupfeedbackGebruikt voor livefouten of blokkades via popupregisterkeys.
Realtime updateTransporteert livevoortgang, maar is geen mailboxcommunicatie.

Tijdens een actieve oefenrun blijft de anti-afleidingsregel voor leerlingen gelden.

Badges, meldingenterugkoppelingen en systeemnotificatie-overlays mogen worden uitgesteld.

15.32 Relatie tot beheerderondersteuning

Beheerderondersteuning mag bestaande contexten supportmatig inspecteren of corrigeren via beheerflows.

Dit betekent niet dat een beheerder live mag meekijken.

Wanneer beheer een docentcontext corrigeert, kan dat toekomstige docentbeschikbaarheid beïnvloeden.

Maar:

  • beheer start geen liveviewer;
  • beheer neemt geen docent- of ouder-/voogdsessie over;
  • beheer gebruikt geen livecontext als vrije monitor;
  • beheer kan liveaudit alleen raadplegen waar beheerfunctionaliteit dat toestaat;
  • beheer mag historische runs analyseren via geschiedenis- of supportflows.

15.33 Autorisatie- en veiligheidsregels

Voor live meekijken gelden minimaal de volgende regels.

IDRegel
LIVE-AUTH-001Iedere liveactie gebruikt server-side sessie- en rolcontext.
LIVE-AUTH-002Een liveknop in de UI is geen autorisatiebewijs.
LIVE-AUTH-003Docenten worden begrensd door docentcontext, relatie en niveauautorisatie.
LIVE-AUTH-004Ouders/voogden worden begrensd door actieve ouder-/voogdrelatie.
LIVE-AUTH-005Beheerders mogen niet live meekijken vanuit beheercontext.
LIVE-AUTH-006Realtime group membership wordt pas na autorisatie toegekend.
LIVE-AUTH-007Reconnect herhaalt autorisatie en runstatuscontrole.
LIVE-AUTH-008Clientstate, routeparameters en browsergeschiedenis mogen toegang niet verruimen.
LIVE-AUTH-009Liveweergave mag geen mutaties op run, voortgang, antwoorden of resultaten uitvoeren.
LIVE-AUTH-010Foutafhandeling toont geen gevoelige inhoud bij ontbrekende toegang.

15.34 Datamutaties

Live meekijken kent zeer beperkte functionele mutaties.

MomentEntiteitMutatie
Succesvolle startLiveViewAuditRecord aanmaken met startmoment en context.
BeëindigingLiveViewAuditEindmoment vullen wanneer nog leeg.
Technische realtimeRealtime subscriptionNiet-persistente verbinding openen of sluiten.
ReconnectRealtime stateTechnische verbinding herstellen of beëindigen.

Live meekijken muteert niet:

  • ExerciseRuns;
  • ExerciseRunProgress;
  • modulepayloads;
  • antwoorden;
  • scores;
  • statistieken;
  • resultaten;
  • geschiedenis;
  • PDF-exportdata;
  • relaties;
  • niveauautorisaties;
  • gebruikersprofielen;
  • privéberichtthreads;
  • tickets;
  • contentblokken;
  • systeemnotificaties;
  • featuretoggles.

15.35 Events en realtime signalen

Live meekijken kan functionele of technische events gebruiken.

Voorbeelden:

Event / signaalBetekenis
LiveViewStartedLive-meekijksessie is succesvol gestart.
LiveProgressUpdatedNieuwe voortgang is beschikbaar voor bevoegde liveviewers.
LiveViewEndedLive-meekijksessie is beëindigd.
LiveConnectionLostRealtimeverbinding is weggevallen.
LiveReconnectFailedHerstel is niet gelukt binnen de retrygrens.
RunCompletedLeerlingrun is afgerond; livecontext eindigt.
RunInterruptedLeerling heeft oefencontext verlaten; livecontext wordt veilig afgehandeld.

De exacte eventnamen kunnen in ontwerpbronnen of TO worden geconsolideerd.

Functioneel blijft gelden dat events geen brondata vervangen.

15.36 Lege toestanden

Lege toestanden zijn normale toestanden wanneer de gebruiker wel toegang heeft tot de pagina of context, maar er geen livebare data is.

Voorbeelden:

  • docent heeft geen gekoppelde leerlingen;
  • docent heeft gekoppelde leerlingen maar niemand is online;
  • docent heeft online leerlingen maar niemand oefent;
  • docent ziet een leerling online maar de actieve run valt buiten de docentcontext;
  • ouder/voogd heeft geen gekoppelde kinderen;
  • ouder/voogd heeft gekoppelde kinderen maar niemand is online;
  • gekoppeld kind is online maar oefent niet;
  • live-feature is uitgeschakeld;
  • realtime-status is tijdelijk onbekend;
  • een net actieve run is inmiddels afgerond.

Een lege toestand:

  • is geen autorisatiefout;
  • veroorzaakt geen auditrecord;
  • toont geen technische details;
  • mag uitleg of een passende vervolgstap tonen;
  • mag geen verborgen leerling- of kinddata lekken.

15.37 Fouttoestanden

Fouttoestanden ontstaan wanneer live meekijken niet veilig kan worden opgebouwd, voortgezet of hersteld.

Voorbeelden:

  • sessie verlopen;
  • rolcontext ontbreekt;
  • docentcontext ongeldig;
  • ouder-/voogdrelatie beëindigd;
  • docent-leerlingrelatie beëindigd;
  • niveauautorisatie ingetrokken;
  • run bestaat niet;
  • run hoort niet bij geselecteerde leerling of kind;
  • run is afgerond;
  • run is geen reguliere leerlingrun;
  • live-feature is uitgeschakeld;
  • realtime-subscription mislukt;
  • reconnect faalt na maximaal vijf pogingen;
  • auditrecord kan niet consistent worden aangemaakt of beëindigd;
  • routeparameter is gemanipuleerd;
  • vraagnummer in browsemodus bestaat niet;
  • popupkey of foutafhandeling ontbreekt;
  • server-side voortgang kan niet veilig worden geladen.

Bij fouttoestanden geldt:

  • geen gedeeltelijke runinhoud buiten autorisatie tonen;
  • geen technische stacktrace tonen;
  • geen tokens, IDs of payloads lekken;
  • liveweergave veilig beëindigen wanneer voortzetten niet verantwoord is;
  • LiveViewAudit idempotent afsluiten wanneer sessie functioneel eindigt;
  • gebruiker terugbrengen naar een veilige context.

15.38 Relatie tot andere FO-hoofdstukken

HoofdstukRelatie
Rollen, context en autorisatieBepaalt rolcontexten, combinatierollen en server-side autorisatie.
Applicatieschil, header, footer en navigatieBepaalt navigatie naar Online en anti-afleidingsgedrag rondom actieve oefeningen.
RelatiebeheerBepaalt docent-leerlingrelaties en ouder-/voogdrelaties als autorisatiebronnen.
Leerling: oefenen, voortgang en resultatenBronhouder voor run-lifecycle, voortgang, onderbreken en afronden.
DocentfunctionaliteitBeschrijft docentcontext, leerlingen, autorisaties en docent-onlineingang.
Ouder-/voogdfunctionaliteitBeschrijft ouder-/voogdcontext, kinderenoverzicht en read-only grenzen.
Berichten, communicatie en notificatiesBeschrijft systeemcommunicatie, badges, realtime en anti-afleiding.
Popups, templates, features en systeemnotificatiesBeschrijft live-featuretoggle, popupkeys en systeemnotificatiegrenzen.
PDF-export en resultaatpresentatieBeschrijft resultaatweergave na afronding; live meekijken is geen PDF-domein.
Schermlaag en UX-specificatiesBeschrijft read-only schermgedrag, lege toestanden en UX-bronpositie.
Oefenmodules en modulepayloadsBeschrijft modulespecifieke payloads die live read-only weergegeven kunnen worden.

15.39 Gerelateerde bronverwijzingen

BronLink
Technisch Ontwerp — live meekijkenRealtime live meekijken met SignalR
Technisch Ontwerp — oefenruns en voortgangOefenruns, voortgang, resultaten, statistieken en PDF-brondata
Technisch Ontwerp — communicatieBerichten, systeemberichten, notificaties en privéthreads
Usecases — docent online en live meekijkenDocent — online en live meekijken
UC-DOC-LIVE-001 — Online leerlingenoverzicht bekijkenOnline leerlingenoverzicht bekijken
UC-DOC-LIVE-002 — Live-meekijken beschikbaarheid bepalenLive-meekijken beschikbaarheid bepalen
UC-DOC-LIVE-003 — Live-meekijksessie startenLive-meekijksessie starten
UC-DOC-LIVE-004 — Live voortgang van leerling volgenLive voortgang van leerling volgen
UC-DOC-LIVE-005 — Door vragen bladeren tijdens live meekijkenDoor vragen bladeren tijdens live meekijken
UC-DOC-LIVE-006 — Terugkeren naar actuele live vraagTerugkeren naar actuele live vraag
UC-DOC-LIVE-007 — Live-meekijksessie beëindigenLive-meekijksessie beëindigen
UC-DOC-LIVE-008 — Live verbinding verbroken afhandelenLive verbinding verbroken afhandelen
Usecases — ouder/voogd online en live meekijkenOuder/voogd — online en live meekijken
UC-OVG-LIVE-001 — Online kinderenoverzicht bekijkenOnline kinderenoverzicht bekijken
UC-OVG-LIVE-002 — Live meekijken-beschikbaarheid bepalenLive meekijken-beschikbaarheid bepalen
UC-OVG-LIVE-003 — Live meekijksessie startenLive meekijksessie starten
UC-OVG-LIVE-004 — Live voortgang van kind volgenLive voortgang van kind volgen
UC-OVG-LIVE-005 — Door vragen bladeren tijdens live meekijkenDoor vragen bladeren tijdens live meekijken
UC-OVG-LIVE-006 — Terugkeren naar actuele live vraagTerugkeren naar actuele live vraag
UC-OVG-LIVE-007 — Live meekijksessie beëindigenLive meekijksessie beëindigen
UC-OVG-LIVE-008 — Live verbinding verbroken afhandelenLive verbinding verbroken afhandelen
Schermdocumentatie — docent online-overzichtDocent online-overzicht
Schermdocumentatie — docent live meekijkenDocent live meekijken
Schermdocumentatie — ouder/voogd onlineOuder/voogd online
Database-informatie — relatiebeheerRelatiebeheer
Database-informatie — docentstructuur en leerlingtoegangDocentstructuur en leerlingtoegang
Database-informatie — oefenruns, delen en voortgangOefenruns, delen en voortgang
Database-informatie — audit, historie en technische uitgangspuntenAudit, historie en technische uitgangspunten
Ontwerpbron — autorisatiematrixAutorisatiematrix
Ontwerpbron — business rulesBusiness rules
Ontwerpbron — command-registerCommand-register
Ontwerpbron — event-registerEvent-register
Ontwerpbron — popup-registerPopup-register
FO — leerling oefenen, voortgang en resultatenLeerling: oefenen, voortgang en resultaten
FO — docentfunctionaliteitDocentfunctionaliteit
FO — ouder-/voogdfunctionaliteitOuder-/voogdfunctionaliteit
FO — berichten, communicatie en notificatiesBerichten, communicatie en notificaties
FO — popups, templates, features en systeemnotificatiesPopups, templates, features en systeemnotificaties