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
| Onderdeel | Binnen scope | Buiten scope |
|---|---|---|
| Online-overzicht | Tonen welke leerlingen of kinderen online zijn en of zij een actieve oefenrun hebben. | Relaties vormen, autorisaties beheren of oefeningen starten. |
| Beschikbaarheid live meekijken | Server-side bepalen of Kijk live mee beschikbaar is. | Beschikbaarheid baseren op clientstate of oude knopstatus. |
| Live-meekijksessie | Bewuste 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 updates | Transporteren van actuele voortgang naar bevoegde meekijkers. | Realtime-kanaal gebruiken als bron van waarheid of autorisatiebron. |
| Audit | Vastleggen van daadwerkelijk gestarte live-meekijksessies in LiveViewAudit. | Auditrecord maken bij alleen openen van online-overzicht of alleen beschikbaarheidsbepaling. |
| Verbindingsverlies | Reconnect proberen, opnieuw autoriseren en veilig beëindigen wanneer herstel faalt. | Netwerkdiagnose buiten OefenHub of automatische ticketaanmaak. |
| Resultaten na afloop | Hoogstens 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
| Bronlaag | Betekenis voor live meekijken |
|---|---|
| FO | Beschrijft de functionele samenhang, rolgrenzen, read-only regels, sessielifecycle en raakvlakken. |
| Usecases docent | Beschrijven docent-onlineoverzicht, beschikbaarheid, start, volgen, browsen, terugkeren, beëindigen en reconnect. |
| Usecases ouder/voogd | Beschrijven dezelfde livefunctionaliteit vanuit ouder-/voogdrelatie en kindcontext. |
| Leerlingusecases | Blijven bronhoudend voor oefenrun, antwoorden, voortgang, onderbreken en afronden. |
| Schermdocumentatie | Beschrijft zichtbare velden, knoppen, lege toestanden en componentgedrag per rol. |
| Database-informatie | Beschrijft ExerciseRuns, ExerciseRunProgress, LiveViewAudit, relatie- en autorisatiebronnen. |
| Ontwerpbronnen | Beschrijven autorisatie, business rules, popupkeys, events en commandgrenzen. |
| Realtime techniek | Transporteert 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
| Begrip | Betekenis |
|---|---|
| Meekijker | Docent of ouder/voogd die een actieve run read-only volgt. |
| Geobserveerde leerling / kind | De gebruiker die de oefenrun uitvoert. |
| Actieve oefenrun | Niet-afgeronde leerlingrun waarbij de leerling zich actueel in de oefencontext bevindt of recent live beschikbaar is. |
| Online-overzicht | Readmodel per rolcontext met online/presence- en oefenstatus. |
| Live beschikbaar | Afgeleide status die aangeeft dat Kijk live mee nu beschikbaar is. |
| Live-meekijksessie | Bewust gestarte sessie waarin een meekijker updates van één run volgt. |
LiveViewAudit | Auditrecord van een daadwerkelijk gestarte live-meekijksessie. |
| Live-modus | UI-stand waarin de meekijker de actuele vraag volgt. |
| Browse-modus | UI-stand waarin de meekijker tijdelijk een andere vraag bekijkt. |
| Realtime-kanaal | SignalR of gelijkwaardige transportlaag voor updates. |
| Server-side voortgang | Opgeslagen voortgang in run- en vraagvoortgangsbronnen. |
15.5 Rollen en autorisatiegrenzen
Live meekijken kent per viewerrol een eigen autorisatiegrens.
| Viewer | Autorisatiegrens | Functionele betekenis |
|---|---|---|
| Docent | Actieve 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/voogd | Actieve GuardianStudent-relatie met het kind. | De ouder/voogd mag live meekijken met actieve oefeningen van gekoppelde kinderen, ongeacht welke docent de oefening heeft aangeboden. |
| Beheerder | Geen live-meekijkrecht tijdens actieve leerlingoefeningen. | De beheerder mag geschiedenis en audit analyseren waar toegestaan, maar niet live meekijken vanuit beheercontext. |
| Leerling | Geen 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.
| Voorwaarde | Docent | Ouder/voogd |
|---|---|---|
| Actieve rolcontext | Vereist | Vereist |
| Actieve relatie | Docent-leerlingrelatie | GuardianStudent-relatie |
| Relevante autorisatie | Niveau-/docentcontext vereist | Niet docentafhankelijk; kindrelatie is leidend |
| Actieve run | Vereist | Vereist |
| Run niet afgerond | Vereist | Vereist |
| Featuretoggle live meekijken | Vereist | Vereist |
| Realtime infrastructuur bruikbaar | Vereist voor starten | Vereist voor starten |
| Geen test-/beheercontext | Vereist | Vereist |
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:
| Controle | Regel |
|---|---|
| Sessie | Viewer is ingelogd en heeft een geldige server-side sessie. |
| Rolcontext | Viewer handelt binnen Docent of Ouder/voogd. |
| Relatiecontext | Vereiste relatie is actief. |
| Autorisatie | Docent heeft relevante niveau-/docentcontext; ouder/voogd heeft actieve kindrelatie. |
| Run | Run bestaat, hoort bij de leerling/het kind en is actief. |
| Afronding | Run is niet afgerond. |
| Feature | Live meekijken is sitebreed beschikbaar. |
| Realtime | Realtime subscription kan veilig worden gestart. |
| Privacy | Er 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:
| Veld | Betekenis |
|---|---|
| ViewerUserId | Gebruiker die meekijkt. |
| ViewerRoleId | Rolcontext van de meekijker. |
| ViewerRoleNameSnapshot | Snapshot van de rolnaam, bijvoorbeeld Docent of Ouder/voogd. |
| ObservedUserId | Leerling/kind van wie de run wordt gevolgd. |
| ExerciseRunId | Actieve run waarop wordt meegekeken. |
| StartedAtUtc | Startmoment van de live-meekijksessie. |
| EndedAtUtc | Eindmoment zodra de sessie eindigt. |
| EndReason / afgeleide reden | Optioneel 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.
| Bron | Gebruik |
|---|---|
ExerciseRuns | Hoofdrecord van de actieve run, runstatus, leerling, niveau, categorie, oefening en modulecontext. |
ExerciseRunProgress | Operationele voortgang per vraag voor live tonen, hervatten en actuele vraagstatus. |
| Modulepayload | Modulespecifieke vraag- en antwoordinhoud binnen de runcontext. |
| Uniforme runvelden | Totalen en voortgangswaarden die nodig zijn voor statusindicatie. |
| Online/presence-readmodel | Afgeleide indicatie of leerling/kind online of recent actief is. |
LiveViewAudit | Audit van de meekijksessie, niet de bron van oefenvoortgang. |
| SignalR / realtime transport | Transport 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 ideemarkeren; - 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:
- De leerlingflow verwerkt het antwoord.
- De server slaat voortgang op.
- Uniforme run- en voortgangswaarden worden waar nodig bijgewerkt.
- Het realtime-kanaal publiceert een update naar bevoegde liveviewers.
- 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.
| Regel | Betekenis |
|---|---|
| Zelfde autorisatie | Bladeren door vragen vereist dezelfde autorisatie als live volgen. |
| Geen runmutatie | De browsepositie wordt niet op de run opgeslagen. |
| Geen antwoordmutatie | Bekijken corrigeert geen antwoord en markeert niets. |
| Geen onverwacht overschrijven | Nieuwe live updates mogen de browsepositie niet automatisch vervangen. |
| Live-indicator blijft zichtbaar | De viewer moet kunnen zien dat de leerling intussen verdergaat. |
| Terugkeeractie beschikbaar | Wanneer de viewer niet op de actuele livevraag staat, is terugkeren mogelijk. |
| Toekomstige vragen beperkt | Niet-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.EndedAtUtcwordt 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;
LiveViewAuditwordt 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.EndedAtUtcwordt 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.
| Waarde | Definitie | Bron / grens |
|---|---|---|
| Online leerling | Leerling binnen docentcontext met actuele of recente presence. | Presence/readmodel plus docentcontext. |
| Online kind | Actief gekoppeld kind met actuele of recente presence. | Presence/readmodel plus ouder-/voogdrelatie. |
| Actieve oefenrun | Niet-afgeronde run waarbij leerling/kind actueel oefent. | ExerciseRuns en voortgang/context. |
| Live beschikbaar | Rolcontext, relatie/autorisatie, feature en actieve run zijn geldig. | Server-side beschikbaarheidsbepaling. |
| Open live sessie | LiveViewAudit met startmoment en zonder eindmoment. | Audit, niet oefenbron. |
| Beëindigde live sessie | LiveViewAudit met gevuld eindmoment. | Audit. |
| Browse-modus | Viewer bekijkt niet-actuele vraag binnen liveweergave. | Presentatiestate, niet persistent. |
| Live-modus | Viewer 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.
| Leerlingrun | Live meekijken |
|---|---|
| Start run | Live kan pas beschikbaar worden nadat een actieve run bestaat. |
| Toon vraag | Live kan actuele vraagcontext tonen. |
| Bevestig antwoord | Live ontvangt na server-side opslag een update. |
| Geen idee | Live toont opgeslagen status waar toegestaan. |
| Onderbreek run | Live eindigt of toont dat run niet meer actief is. |
| Rond run af | Live eindigt; resultaatflow neemt over. |
| Hervat run | Live 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.
| Context | Kenmerk |
|---|---|
| Live meekijken | Actieve of net eindigende run, realtime voortgang, read-only sessie. |
| Resultaatweergave | Afgeronde run, opgeslagen totalen en statistieken. |
| Geschiedenis | Lijst of detail van afgeronde runs binnen geautoriseerde context. |
| PDF-export | Tijdelijke 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.
| Communicatievorm | Relatie met live meekijken |
|---|---|
| Mailbox-systeembericht | Kan informatief gebruikt worden als een domeinflow dat vereist. |
| Privébericht | Wordt niet aangemaakt door live meekijken. |
| Thread-event | Wordt niet aangemaakt door live meekijken. |
| Systeemnotificatie | Wordt niet boven actieve leerlingoefening getoond als afleidende overlay. |
| Popupfeedback | Gebruikt voor livefouten of blokkades via popupregisterkeys. |
| Realtime update | Transporteert 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.
| ID | Regel |
|---|---|
| LIVE-AUTH-001 | Iedere liveactie gebruikt server-side sessie- en rolcontext. |
| LIVE-AUTH-002 | Een liveknop in de UI is geen autorisatiebewijs. |
| LIVE-AUTH-003 | Docenten worden begrensd door docentcontext, relatie en niveauautorisatie. |
| LIVE-AUTH-004 | Ouders/voogden worden begrensd door actieve ouder-/voogdrelatie. |
| LIVE-AUTH-005 | Beheerders mogen niet live meekijken vanuit beheercontext. |
| LIVE-AUTH-006 | Realtime group membership wordt pas na autorisatie toegekend. |
| LIVE-AUTH-007 | Reconnect herhaalt autorisatie en runstatuscontrole. |
| LIVE-AUTH-008 | Clientstate, routeparameters en browsergeschiedenis mogen toegang niet verruimen. |
| LIVE-AUTH-009 | Liveweergave mag geen mutaties op run, voortgang, antwoorden of resultaten uitvoeren. |
| LIVE-AUTH-010 | Foutafhandeling toont geen gevoelige inhoud bij ontbrekende toegang. |
15.34 Datamutaties
Live meekijken kent zeer beperkte functionele mutaties.
| Moment | Entiteit | Mutatie |
|---|---|---|
| Succesvolle start | LiveViewAudit | Record aanmaken met startmoment en context. |
| Beëindiging | LiveViewAudit | Eindmoment vullen wanneer nog leeg. |
| Technische realtime | Realtime subscription | Niet-persistente verbinding openen of sluiten. |
| Reconnect | Realtime state | Technische 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 / signaal | Betekenis |
|---|---|
LiveViewStarted | Live-meekijksessie is succesvol gestart. |
LiveProgressUpdated | Nieuwe voortgang is beschikbaar voor bevoegde liveviewers. |
LiveViewEnded | Live-meekijksessie is beëindigd. |
LiveConnectionLost | Realtimeverbinding is weggevallen. |
LiveReconnectFailed | Herstel is niet gelukt binnen de retrygrens. |
RunCompleted | Leerlingrun is afgerond; livecontext eindigt. |
RunInterrupted | Leerling 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;
LiveViewAuditidempotent afsluiten wanneer sessie functioneel eindigt;- gebruiker terugbrengen naar een veilige context.
15.38 Relatie tot andere FO-hoofdstukken
| Hoofdstuk | Relatie |
|---|---|
| Rollen, context en autorisatie | Bepaalt rolcontexten, combinatierollen en server-side autorisatie. |
| Applicatieschil, header, footer en navigatie | Bepaalt navigatie naar Online en anti-afleidingsgedrag rondom actieve oefeningen. |
| Relatiebeheer | Bepaalt docent-leerlingrelaties en ouder-/voogdrelaties als autorisatiebronnen. |
| Leerling: oefenen, voortgang en resultaten | Bronhouder voor run-lifecycle, voortgang, onderbreken en afronden. |
| Docentfunctionaliteit | Beschrijft docentcontext, leerlingen, autorisaties en docent-onlineingang. |
| Ouder-/voogdfunctionaliteit | Beschrijft ouder-/voogdcontext, kinderenoverzicht en read-only grenzen. |
| Berichten, communicatie en notificaties | Beschrijft systeemcommunicatie, badges, realtime en anti-afleiding. |
| Popups, templates, features en systeemnotificaties | Beschrijft live-featuretoggle, popupkeys en systeemnotificatiegrenzen. |
| PDF-export en resultaatpresentatie | Beschrijft resultaatweergave na afronding; live meekijken is geen PDF-domein. |
| Schermlaag en UX-specificaties | Beschrijft read-only schermgedrag, lege toestanden en UX-bronpositie. |
| Oefenmodules en modulepayloads | Beschrijft modulespecifieke payloads die live read-only weergegeven kunnen worden. |
15.39 Gerelateerde bronverwijzingen
| Bron | Link |
|---|---|
| Technisch Ontwerp — live meekijken | Realtime live meekijken met SignalR |
| Technisch Ontwerp — oefenruns en voortgang | Oefenruns, voortgang, resultaten, statistieken en PDF-brondata |
| Technisch Ontwerp — communicatie | Berichten, systeemberichten, notificaties en privéthreads |
| Usecases — docent online en live meekijken | Docent — online en live meekijken |
| UC-DOC-LIVE-001 — Online leerlingenoverzicht bekijken | Online leerlingenoverzicht bekijken |
| UC-DOC-LIVE-002 — Live-meekijken beschikbaarheid bepalen | Live-meekijken beschikbaarheid bepalen |
| UC-DOC-LIVE-003 — Live-meekijksessie starten | Live-meekijksessie starten |
| UC-DOC-LIVE-004 — Live voortgang van leerling volgen | Live voortgang van leerling volgen |
| UC-DOC-LIVE-005 — Door vragen bladeren tijdens live meekijken | Door vragen bladeren tijdens live meekijken |
| UC-DOC-LIVE-006 — Terugkeren naar actuele live vraag | Terugkeren naar actuele live vraag |
| UC-DOC-LIVE-007 — Live-meekijksessie beëindigen | Live-meekijksessie beëindigen |
| UC-DOC-LIVE-008 — Live verbinding verbroken afhandelen | Live verbinding verbroken afhandelen |
| Usecases — ouder/voogd online en live meekijken | Ouder/voogd — online en live meekijken |
| UC-OVG-LIVE-001 — Online kinderenoverzicht bekijken | Online kinderenoverzicht bekijken |
| UC-OVG-LIVE-002 — Live meekijken-beschikbaarheid bepalen | Live meekijken-beschikbaarheid bepalen |
| UC-OVG-LIVE-003 — Live meekijksessie starten | Live meekijksessie starten |
| UC-OVG-LIVE-004 — Live voortgang van kind volgen | Live voortgang van kind volgen |
| UC-OVG-LIVE-005 — Door vragen bladeren tijdens live meekijken | Door vragen bladeren tijdens live meekijken |
| UC-OVG-LIVE-006 — Terugkeren naar actuele live vraag | Terugkeren naar actuele live vraag |
| UC-OVG-LIVE-007 — Live meekijksessie beëindigen | Live meekijksessie beëindigen |
| UC-OVG-LIVE-008 — Live verbinding verbroken afhandelen | Live verbinding verbroken afhandelen |
| Schermdocumentatie — docent online-overzicht | Docent online-overzicht |
| Schermdocumentatie — docent live meekijken | Docent live meekijken |
| Schermdocumentatie — ouder/voogd online | Ouder/voogd online |
| Database-informatie — relatiebeheer | Relatiebeheer |
| Database-informatie — docentstructuur en leerlingtoegang | Docentstructuur en leerlingtoegang |
| Database-informatie — oefenruns, delen en voortgang | Oefenruns, delen en voortgang |
| Database-informatie — audit, historie en technische uitgangspunten | Audit, historie en technische uitgangspunten |
| Ontwerpbron — autorisatiematrix | Autorisatiematrix |
| Ontwerpbron — business rules | Business rules |
| Ontwerpbron — command-register | Command-register |
| Ontwerpbron — event-register | Event-register |
| Ontwerpbron — popup-register | Popup-register |
| FO — leerling oefenen, voortgang en resultaten | Leerling: oefenen, voortgang en resultaten |
| FO — docentfunctionaliteit | Docentfunctionaliteit |
| FO — ouder-/voogdfunctionaliteit | Ouder-/voogdfunctionaliteit |
| FO — berichten, communicatie en notificaties | Berichten, communicatie en notificaties |
| FO — popups, templates, features en systeemnotificaties | Popups, templates, features en systeemnotificaties |