Skip to main content

8. Relaties

8.1 Schermafbeelding

oefenhub_generiek_06_relaties_v1_8.png

8.2 Scherm meta data

VeldWaarde
Scherm-IDSCH-GEN-08-01
SchermnaamRelaties
Doelgroep / onderdeelGeneriek
Bronbestandoefenhub_generiek_06_relaties_v1_8.html
MockupversieV1.8
Screenshotbestandoefenhub_generiek_06_relaties_v1_8.png
Processtap / contextIngelogde gebruiker opent vanuit het profielmenu de relatiepagina om eigen relaties en verstuurde relatie-uitnodigingen te bekijken en toegestane relatieacties uit te voeren.
DocumentatiestatusUitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification, database-informatie en aanvullende functionele correcties.
OpmerkingenHeader en footer vallen buiten het bereik van dit schermdocument. De zichtbare relatiepersonen, aantallen, initialen, datums en uitnodigingsregels zijn dynamische voorbeeldwaarden. Ouders/voogden moeten net als vrienden en docenten openklapbaar zijn om minimaal Actief sinds te tonen, ook wanneer de mockup dit visueel nog niet volledig toont.
Route / URL-patroonFunctionele route binnen profielcontext, bijvoorbeeld /profiel/relaties. De breadcrumb binnen de scherminhoud is Home > Profiel > Relaties.
Autorisatie / vereiste rol-contextIngelogde gebruiker. De zichtbare secties en acties worden server-side bepaald op basis van de actieve gebruiker, diens rolcontext, relatietypen, feature-instellingen en bestaande relaties of uitnodigingen.
Primair domeinobject / hoofdentiteitUserRelationships, RelationshipInvitations, RelationshipTypes, RelationshipEvents, Users en Roles.
Gerelateerde schermen / navigatie02_berichten_overzicht, 03_nieuw_privebericht, 10_profiel. Inkomende relatie-uitnodigingen worden via systeemberichten aangeboden en niet als apart inkomend overzicht op deze pagina verzameld.
Data-karakterGebruikergebonden overzichts- en mutatiepagina voor relaties; lijstregels, samenvattingsaantallen, uitnodigingsstatussen, datumwaarden, relatieacties en modaluitkomsten zijn dynamisch.

8.3 Functionele beschrijving

Het scherm Relaties is de centrale profielpagina voor het bekijken en beheren van relaties tussen de ingelogde gebruiker en andere OefenHub-gebruikers. De pagina bundelt meerdere relatietypen in één overzicht, maar ieder relatietype behoudt eigen business rules, autorisatie en gevolgen.

De pagina bestaat uit:

  • een breadcrumb Home > Profiel > Relaties;
  • een introductieblok met uitleg over vrienden, ouders/voogden, docenten en openstaande uitnodigingen;
  • een samenvattingsblok In één oogopslag;
  • een sectie Vrienden;
  • een sectie Ouders / voogden;
  • een sectie Docenten;
  • een sectie Openstaande uitnodigingen;
  • een sectie Goed om te weten;
  • modal/popupflows voor uitnodigen, intrekken, ontkoppelen en ontkoppelverzoeken.

Header, profielmenu, navigatiebalk en footer worden niet in dit schermdocument gespecificeerd.

8.3.1 Interpretatie van mockupwaarden

Alle zichtbare namen, initialen, aantallen, datums, niveaunamen, uitnodigingstypen en gedeelde-oefeningentotalen in de mockup zijn voorbeelddata. Voorbeelden zoals 3 actieve vrienden, 2 ouders/voogden, 2 docenten, 2 openstaande uitnodigingen, Luca van Rijn, Marieke Jansen, Groep 7 en Verzonden op 20 mrt 2026 worden dynamisch bepaald voor de ingelogde gebruiker.

De HTML-mockup toont de secties en hun beoogde gedrag. De aanvullende correcties in dit document zijn leidend waar de mockup onvolledig is: ouders/voogden zijn openklapbaar voor Actief sinds, de uitnodigknoppen openen een modal/popup, en iedere ontkoppelactie of ontkoppelverzoekactie opent eerst een bevestigingsmodal met de vraag Weet je het zeker?.

8.3.2 Relatietypen en zichtbaarheid

De pagina toont uitsluitend relaties en uitnodigingen die bij de ingelogde gebruiker horen. Een gebruiker mag via deze pagina geen relaties van andere gebruikers bekijken, ook niet wanneer er een familie-, docent- of vriendschapscontext bestaat.

De volgende functionele relatietypen zijn relevant:

  • Vriendschap: leerling-leerlingrelatie voor delen van oefeningen en privéberichten.
  • Ouder/voogd: relatie tussen leerling en ouder/voogd voor begeleiding, geschiedenis en live meekijken.
  • Docent: relatie tussen leerling en docent voor niveauautorisaties, oefentoegang en docentcontext.
  • Docent-docent en beheerder-beheerder bestaan in het relationele domein, maar zijn voor deze leerlinggerichte mockup niet als aparte secties zichtbaar.

De pagina mag per gebruiker en actieve rolcontext minder of andere secties tonen dan in de mockup. Voor een leerling zijn vrienden, ouders/voogden, docenten en verstuurde uitnodigingen relevant. Voor een gecombineerde gebruiker blijven relatietypen gescheiden per rolcontext; acties op één relatie mogen geen andere relatie tussen dezelfde natuurlijke personen wijzigen.

8.3.3 Introductie en samenvatting

Het introductieblok legt uit waarvoor de relatiepagina bedoeld is. Het blok In één oogopslag toont gebruikergebonden totalen voor actieve vrienden, ouders/voogden, docenten en openstaande door de gebruiker verstuurde uitnodigingen.

Deze aantallen zijn samenvattend en mogen niet uit de mockup worden overgenomen. Alleen actieve relaties tellen mee bij actieve relatieaantallen. Bij openstaande uitnodigingen tellen alleen uitnodigingen mee die door de huidige gebruiker zijn verstuurd, nog openstaand zijn en zichtbaar horen te blijven in het openstaande uitnodigingenoverzicht.

8.3.4 Vrienden

De sectie Vrienden toont actieve vriendschapsrelaties van de ingelogde leerling. Elke regel toont minimaal een displaynaam, initialen of avatarrepresentatie, de acties Bericht en Ontkoppel, en een openklapactie voor detailinformatie.

In uitgeklapte toestand toont een vriendregel minimaal:

  • Actief sinds: het moment waarop de relatie actief werd;
  • Gedeelde oefeningen: het aantal gedeelde oefeningen binnen deze vriendschapscontext, voor zover dit functioneel voor de gebruiker beschikbaar is.

De actie Bericht start of opent een privéberichtcontext met deze relatie, mits privéberichten sitebreed beschikbaar zijn en de relatie nog actief is. De actie Ontkoppel opent altijd eerst een modal/popup met de vraag Weet je het zeker?. Pas na bevestiging wordt de vriendschap beëindigd. De andere gebruiker ontvangt hierover een systeembericht.

8.3.5 Ouders / voogden

De sectie Ouders / voogden toont actieve ouder-/voogdrelaties van de ingelogde leerling. Iedere regel moet openklapbaar zijn, ook wanneer de mockup dit nog niet visueel toont. In uitgeklapte toestand wordt minimaal Actief sinds getoond.

Voor een leerling is het beëindigen van een ouder-/voogdrelatie geen directe ontkoppeling. De actie wordt daarom gebruikersgericht als Ontkoppelverzoek gepresenteerd. Ook deze actie opent altijd eerst een modal/popup met de vraag Weet je het zeker?. Na bevestiging ontstaat een verzoek of relatiegebeurtenis richting de ouder/voogd; de relatie wordt pas beëindigd wanneer de bevoegde partij of de daarvoor geldende flow dit toestaat.

De actie Bericht is alleen beschikbaar wanneer privéberichten sitebreed beschikbaar zijn en de relatiecontext het sturen van privéberichten toestaat.

8.3.6 Docenten

De sectie Docenten toont actieve docentrelaties van de ingelogde leerling. De sectiekop toont dat alleen een docent de leerling kan uitnodigen voor een docentrelatie. Een leerling kan dus geen nieuwe docentrelatie starten vanuit deze pagina.

Docentregels zijn openklapbaar. In uitgeklapte toestand toont de regel minimaal de niveaucontext die deze docent aan de leerling heeft gekoppeld, bijvoorbeeld Niveau(s): Groep 7, Rekenen-plus. De zichtbare niveaunamen zijn dynamisch en mogen alleen de niveaus tonen die binnen de relatie en docentcontext voor deze gebruiker relevant zijn.

De actie Ontkoppelverzoek opent altijd eerst een modal/popup met de vraag Weet je het zeker?. Een leerling verbreekt een docentrelatie niet direct via deze pagina; de actie start een verzoek- of notificatieflow. Bij daadwerkelijke beëindiging van een docentrelatie vervallen de niveauautorisaties en daarmee de oefentoegang en resultaatinzage die uit die docentrelatie voortkwamen.

8.3.7 Openstaande uitnodigingen

De sectie Openstaande uitnodigingen toont uitsluitend door de huidige gebruiker verstuurde uitnodigingen die nog niet zijn geaccepteerd, afgewezen, verlopen of ingetrokken. Inkomende uitnodigingen worden via het berichtensysteem aangeboden en niet als aparte inkomende lijst op deze pagina getoond.

Per openstaande uitnodiging worden minimaal getoond:

  • displaynaam of e-mailadres van de beoogde ontvanger;
  • het type uitnodiging, bijvoorbeeld vriendschapsuitnodiging of ouder/voogd-uitnodiging;
  • verzenddatum;
  • duidelijke actie Bekijk details.

De actie Bekijk details opent een detailsmodal voor het verzonden verzoek en moet als duidelijke hyperlink herkenbaar zijn: normaal zonder underline, met font-weight 600 en underline/kleuraccent op hover. De detailsmodal gebruikt een compacte titel in de vorm Relatietype · ontvangerstype, bijvoorbeeld Vriendschapsuitnodiging · extern e-mailadres. Ontvanger en status staan alleen compact onder de titel; er worden geen grote infoblokken gebruikt. De tijdlijn krijgt de nadruk, toont datum/tijd, scheidingsteken en gebeurtenis op één regel en kan meerdere items in één oogopslag tonen. Voor externe e-mailadressen bevat de tijdlijn veilige maildeliveryinformatie. Gebruik bij succesvolle SMTP-submit de formulering E-mail aangeboden aan de mailserver; zeg niet dat de mail zeker is ontvangen. De detailsmodal moet als echte modal openen met backdrop/scroll-lock, zodat de pagina achter de modal niet meescrolt.

De acties Herinner en Intrekken staan functioneel onderaan deze detailsmodal wanneer het verzoek nog openstaat. Herinner is alleen uitvoerbaar wanneer de uitnodiging nog pending is en de beheerbare cooldown RelationshipInvitationReminderCooldownHours is verstreken. Zolang de cooldown loopt, blijft de knop disabled met tooltip/uitleg wanneer opnieuw herinneren kan. Voor bestaande OefenHub-gebruikers levert herinneren een nieuw systeembericht of notificatie-event op. Voor een nog niet geregistreerde ontvanger levert herinneren een nieuwe externe uitnodigingsmail en dus een nieuwe MailSendAttempts-registratie met Purpose = Reminder op, zolang de uitnodiging nog geldig is.

De actie Intrekken is destructief, wordt rood/destructief vormgegeven en opent altijd eerst een bevestigingsmodal voordat de uitnodiging niet meer accepteerbaar wordt gemaakt. Intrekken wordt auditbaar vastgelegd in RelationshipEvents, zet de uitnodiging op ingetrokken en de uitnodiging mag daarna niet meer als openstaande uitnodiging verschijnen.

8.3.8 Uitnodigen van vriend of ouder/voogd

De knoppen + Nodig vriend uit en + Nodig ouder/voogd uit openen een modal/popup waarin de gebruiker een e-mailadres invoert. De gekozen knop bepaalt het relatietype:

  • + Nodig vriend uit maakt een vriendschapsuitnodiging aan;
  • + Nodig ouder/voogd uit maakt een ouder-/voogd-uitnodiging aan.

Het systeem valideert server-side minimaal:

  • het e-mailadres heeft een geldig formaat;
  • de gebruiker mag dit relatietype vanuit de huidige rolcontext initiëren;
  • er bestaat nog geen actieve relatie met exact dezelfde relatietype- en rolcontextcombinatie;
  • er bestaat nog geen openstaande identieke uitnodiging;
  • de feature of relatievorm is beschikbaar voor de gebruiker.

Wanneer het e-mailadres hoort bij een bestaande OefenHub-gebruiker, wordt een RelationshipInvitations-record aangemaakt met ToUserId gevuld en status Pending. De ontvanger krijgt de uitnodiging via het berichtensysteem of een gelijkwaardige notificatie en moet de uitnodiging accepteren voordat de relatie actief wordt.

Wanneer het e-mailadres nog niet bekend is in OefenHub, toont de modal een duidelijke melding dat het e-mailadres niet in OefenHub is gevonden en dat de gebruiker het adres moet controleren. Als het e-mailadres ongewijzigd blijft, wordt de actie Nodig uit voor OefenHub beschikbaar. Daarbij wordt een informatieve tekst getoond dat de naam van de uitnodigende gebruiker wordt gedeeld in de e-mail aan de uit te nodigen persoon, omdat de uitnodiging namens die gebruiker wordt verstuurd.

Na bevestiging van Nodig uit voor OefenHub wordt een openstaande relatie-uitnodiging vastgelegd op basis van ToEmail, zonder ToUserId. De uitnodiging blijft gedurende 7 dagen bruikbaar voor registratiekoppeling. Wanneer iemand zich binnen die termijn registreert met hetzelfde e-mailadres, koppelt het systeem de openstaande uitnodiging aan het nieuw aangemaakte account en biedt de relatie-uitnodiging direct ter acceptatie aan. De relatie zelf wordt pas actief na acceptatie door de ontvanger.

8.3.9 Ontkoppelen en bevestigingsmodal

Iedere actie waarmee een relatie wordt beëindigd of een ontkoppelverzoek wordt gestart, opent eerst een modal/popup met de vraag Weet je het zeker?. Dit geldt voor:

  • Ontkoppel bij vrienden;
  • Ontkoppelverzoek bij ouders/voogden;
  • Ontkoppelverzoek bij docenten;
  • vergelijkbare ontkoppelacties die voor andere rolcontexten op dezelfde pagina beschikbaar worden gemaakt.

De modal toont kort de gevolgen van de actie. Bij directe ontkoppeling wordt duidelijk gemaakt dat de relatie en bijbehorende rechten vervallen na bevestiging. Bij ontkoppelverzoeken wordt duidelijk gemaakt dat er eerst een verzoek naar de andere partij of bevoegde partij gaat.

8.3.10 Leegstaten, foutstaten en disabled states

Wanneer een sectie geen items bevat, toont de pagina een korte lege staat die uitlegt wat de gebruiker kan doen. Voor vrienden en ouders/voogden mag de uitnodigknop zichtbaar blijven wanneer de gebruiker dit relatietype mag starten. Voor docenten toont de lege staat dat alleen docenten de leerling kunnen uitnodigen.

Acties worden disabled of verborgen wanneer de gebruiker ze niet mag uitvoeren. Frontend-zichtbaarheid is daarbij geen beveiliging; alle acties worden server-side opnieuw gecontroleerd. Voorbeelden:

  • + Nodig vriend uit is niet beschikbaar wanneer vriendschappen voor de leerling niet zijn toegestaan;
  • Bericht is niet beschikbaar wanneer privéberichten sitebreed uitstaan of de relatie geen geldig communicatiekanaal vormt;
  • Ontkoppel of Ontkoppelverzoek is niet uitvoerbaar wanneer de relatie niet actief is;
  • Herinner is niet uitvoerbaar wanneer de uitnodiging verlopen, ingetrokken, geaccepteerd of afgewezen is;
  • Herinner is tijdelijk disabled wanneer de cooldown sinds de initiële uitnodiging of laatste herinnering nog loopt; de tooltip/uitleg vermeldt wanneer opnieuw herinneren kan;
  • Intrekken is niet uitvoerbaar wanneer de uitnodiging niet meer openstaand is.

8.4 UI-elementen en velddefinities

Element-IDTypeGUI-verwijzingOmschrijvingZichtbaar labelOpmerkingTechnische naam
SCH-GEN-08-01-S01SHoofdinhoudHoofdcontainer voor de relatiepagina.RelatiesHeader en footer vallen buiten scope.RelationshipsPageShell
SCH-GEN-08-01-A01ABreadcrumbNavigatiepad binnen profielcontext.Home > Profiel > RelatiesRead-only navigatiecontext.RelationshipsBreadcrumb
SCH-GEN-08-01-S02SIntroblokUitleg over de relatiepagina en de betekenis van de relatiecategorieën.RelatiesBevat titel, toelichting en drie informatieve subblokken.RelationshipsIntroSection
SCH-GEN-08-01-F01FIntroblok — titelTitel van de pagina.RelatiesRead-only schermtitel.RelationshipsPageTitle
SCH-GEN-08-01-F02FIntroblok — toelichtingToelichting op vrienden, ouders/voogden, docenten en uitnodigingen.Bekijk hier met wie je binnen OefenHub verbonden bent.Tekst beschrijft functie, niet de actuele dataset.RelationshipsIntroText
SCH-GEN-08-01-S03SIntroblok — metaInformatieve blokken over vrienden, ouders/voogden en docenten.Vrienden / Ouders/voogden / DocentenGeen telling; alleen uitleg.RelationshipCategoryInfoCards
SCH-GEN-08-01-S04SRechterblokSamenvatting met aantallen per relatietype en uitnodigingen.In één oogopslagResponsief inklapbaar in de mockup.RelationshipsSummaryCard
SCH-GEN-08-01-F03FSamenvattingAantal actieve vriendschapsrelaties.Actieve vriendenDynamisch en gebruikergebonden.ActiveFriendCount
SCH-GEN-08-01-F04FSamenvattingAantal actieve ouder-/voogdrelaties.Ouders/voogdenDynamisch en gebruikergebonden.ActiveGuardianCount
SCH-GEN-08-01-F05FSamenvattingAantal actieve docentrelaties.DocentenDynamisch en gebruikergebonden.ActiveTeacherCount
SCH-GEN-08-01-F06FSamenvattingAantal openstaande door gebruiker verstuurde uitnodigingen.Openstaande uitnodigingenTelt geen inkomende uitnodigingen.PendingSentInvitationCount
SCH-GEN-08-01-S05SSectie VriendenLijst met actieve vrienden.VriendenLeerling-leerlingrelaties.FriendsSection
SCH-GEN-08-01-B01BSectie VriendenOpent uitnodigmodal voor vriendschapsuitnodiging.+ Nodig vriend uitAlleen beschikbaar wanneer vriendschappen voor gebruiker zijn toegestaan.InviteFriendButton
SCH-GEN-08-01-T01TVriendenlijstHerhalende regel voor één actieve vriend.<vriend>Regel is openklapbaar.FriendRelationshipItem
SCH-GEN-08-01-F07FVriendregelNaam van de vriend.<naam vriend>Dynamische displaynaam.FriendDisplayName
SCH-GEN-08-01-A02AVriendregelOpent of start privébericht met vriend.BerichtAlleen bij actieve relatie en toegestane privéberichten.MessageFriendAction
SCH-GEN-08-01-A03AVriendregelOpent bevestigingsmodal voor directe ontkoppeling.OntkoppelVraagt altijd eerst bevestiging.UnlinkFriendAction
SCH-GEN-08-01-A04AVriendregelKlapt detailinformatie van een vriend open of dicht.Toon meer / Toon minderToont onder meer actief-sinds en gedeelde oefeningen.ToggleFriendDetailsAction
SCH-GEN-08-01-F08FVrienddetailDatum waarop de vriendschap actief werd.Actief sindsUTC-bron lokaal tonen.FriendActiveSinceDisplay
SCH-GEN-08-01-F09FVrienddetailAantal gedeelde oefeningen binnen vriendschapscontext.Gedeelde oefeningenDynamisch afgeleid uit gedeelde-oefeningendomein.SharedExerciseCountWithFriend
SCH-GEN-08-01-S06SSectie Ouders / voogdenLijst met actieve ouder-/voogdrelaties.Ouders / voogdenRegels moeten openklapbaar zijn voor actief-sinds.GuardiansSection
SCH-GEN-08-01-B02BSectie Ouders / voogdenOpent uitnodigmodal voor ouder-/voogd-uitnodiging.+ Nodig ouder/voogd uitBeschikbaar wanneer gebruiker deze relatievorm mag initiëren.InviteGuardianButton
SCH-GEN-08-01-T02TOuder-/voogdlijstHerhalende regel voor één ouder/voogd.<ouder/voogd>Moet openklapbaar zijn, ook wanneer mockup dit niet toont.GuardianRelationshipItem
SCH-GEN-08-01-F10FOuder-/voogdregelNaam van ouder/voogd.<naam ouder/voogd>Dynamische displaynaam.GuardianDisplayName
SCH-GEN-08-01-A05AOuder-/voogdregelOpent of start privébericht met ouder/voogd.BerichtAlleen bij actieve relatie en toegestane privéberichten.MessageGuardianAction
SCH-GEN-08-01-A06AOuder-/voogdregelOpent bevestigingsmodal voor ontkoppelverzoek.OntkoppelverzoekLeerling voert geen directe ontkoppeling uit.RequestGuardianUnlinkAction
SCH-GEN-08-01-A07AOuder-/voogdregelKlapt detailinformatie van ouder/voogd open of dicht.Toon meer / Toon minderToont minimaal actief-sinds.ToggleGuardianDetailsAction
SCH-GEN-08-01-F11FOuder-/voogddetailDatum waarop de relatie actief werd.Actief sindsAanvulling op de mockup; verplicht detailveld.GuardianActiveSinceDisplay
SCH-GEN-08-01-S07SSectie DocentenLijst met actieve docentrelaties.DocentenLeerling kan geen docent uitnodigen.TeachersSection
SCH-GEN-08-01-M01MSectie DocentenInformeert dat alleen docenten kunnen uitnodigen.Alleen docent kan uitnodigenTooltip in mockup.TeacherInviteRestrictedMessage
SCH-GEN-08-01-T03TDocentenlijstHerhalende regel voor één actieve docentrelatie.<docent>Regel is openklapbaar.TeacherRelationshipItem
SCH-GEN-08-01-F12FDocentregelNaam van de docent.<naam docent>Dynamische displaynaam.TeacherDisplayName
SCH-GEN-08-01-A08ADocentregelOpent of start privébericht met docent.BerichtAlleen bij geldige relatie en toegestane privéberichten.MessageTeacherAction
SCH-GEN-08-01-A09ADocentregelOpent bevestigingsmodal voor ontkoppelverzoek.OntkoppelverzoekBeëindiging trekt niveauautorisaties in zodra deze wordt uitgevoerd.RequestTeacherUnlinkAction
SCH-GEN-08-01-A10ADocentregelKlapt docentdetails open of dicht.Toon meer / Toon minderToont niveaucontext.ToggleTeacherDetailsAction
SCH-GEN-08-01-F13FDocentdetailNiveaus die via deze docentrelatie relevant zijn.Niveau(s)Alleen eigen docentcontext tonen.TeacherAuthorizedLevelsDisplay
SCH-GEN-08-01-S08SSectie Openstaande uitnodigingenOverzicht van door gebruiker verstuurde openstaande uitnodigingen.Openstaande uitnodigingenInkomende uitnodigingen staan in berichten.PendingInvitationsSection
SCH-GEN-08-01-F14FSectiekop Openstaande uitnodigingenTeller voor openstaande uitnodigingen.<aantal> in afwachtingDynamisch op basis van verstuurde pending uitnodigingen.PendingInvitationBadge
SCH-GEN-08-01-T04TUitnodigingenlijstHerhalende regel voor één openstaande uitnodiging.<uitnodiging>Bevat type en verzenddatum.PendingInvitationItem
SCH-GEN-08-01-F15FUitnodigingregelNaam of e-mailadres van ontvanger.<naam of e-mailadres>Bij externe uitnodiging kan alleen e-mailadres beschikbaar zijn.InvitationTargetDisplay
SCH-GEN-08-01-F16FUitnodigingregelUitnodigingstype en verzenddatum.<type> · Verzonden op <datum>Dynamische waarden.InvitationMetaDisplay
SCH-GEN-08-01-A11AUitnodigingregelVerstuur herinnering voor openstaande uitnodiging.HerinnerAlleen bij openstaande uitnodiging.RemindInvitationAction
SCH-GEN-08-01-A12AUitnodigingregelOpent bevestigingsmodal voor intrekken.IntrekkenNa bevestiging niet meer accepteerbaar.WithdrawInvitationAction
SCH-GEN-08-01-S09SGoed om te wetenInformatieve regels over relaties, docentuitnodigingen en ontkoppelen.Goed om te wetenAlleen informatief.RelationshipInfoSection
SCH-GEN-08-01-MOD01MODUitnodigmodalModal voor het invoeren van e-mailadres en verzenden van een relatie-uitnodiging.Nodig uitWordt geopend vanuit vriend- of ouder/voogdknop.RelationshipInvitationModal
SCH-GEN-08-01-F17FUitnodigmodalE-mailadres van de uit te nodigen persoon.E-mailadresUser input.InvitationEmailInput
SCH-GEN-08-01-M02MUitnodigmodalMelding wanneer e-mailadres niet bekend is in OefenHub.Controleer het e-mailadresGeeft toegang tot externe OefenHub-uitnodiging wanneer adres ongewijzigd blijft.UnknownEmailInvitationMessage
SCH-GEN-08-01-B03BUitnodigmodalVerstuur relatie-uitnodiging naar bestaande gebruiker.Verstuur uitnodigingAlleen actief bij geldig e-mailadres en toegestane relatieflow.SendRelationshipInvitationButton
SCH-GEN-08-01-B04BUitnodigmodalVerstuur OefenHub-uitnodiging naar nog niet geregistreerd e-mailadres.Nodig uit voor OefenHubInformeert dat naam van uitnodiger wordt gedeeld in e-mail.InviteExternalUserButton
SCH-GEN-08-01-B05BUitnodigmodalSluit de modal zonder uitnodiging te versturen.AnnulerenWijzigt geen data.CancelInvitationModalButton
SCH-GEN-08-01-MOD02MODOntkoppelmodalBevestigingsmodal voor ontkoppelen of ontkoppelverzoek.Weet je het zeker?Altijd tonen vóór relatiebeëindiging of verzoek.RelationshipUnlinkConfirmModal
SCH-GEN-08-01-B06BOntkoppelmodalBevestigt ontkoppelen of ontkoppelverzoek.Ja, doorgaanExacte tekst mag per relatietype verduidelijkt worden.ConfirmRelationshipUnlinkButton
SCH-GEN-08-01-B07BOntkoppelmodalAnnuleert ontkoppelen of ontkoppelverzoek.AnnulerenWijzigt geen data.CancelRelationshipUnlinkButton
SCH-GEN-08-01-MOD03MODIntrekmodalBevestigingsmodal voor intrekken van openstaande uitnodiging.Weet je het zeker?Uitnodiging wordt na bevestiging niet meer accepteerbaar.WithdrawInvitationConfirmModal

8.5 Waardelagen

Element-IDGUI-verwijzingZichtbaar labelTechnische naamDatabronWaardebronDatatypeBewerkbaarValidatie / regel
SCH-GEN-08-01-S01HoofdinhoudRelatiesRelationshipsPageShellUsers, actuele sessie, rolcontextRuntime contextCompositeNeeAlleen toegankelijk voor ingelogde gebruikers.
SCH-GEN-08-01-A01BreadcrumbHome > Profiel > RelatiesRelationshipsBreadcrumbRouteconfiguratieAfgeleid uit routeNavigation labelNeeHeadernavigatie valt buiten scope.
SCH-GEN-08-01-F01Introblok — titelRelatiesRelationshipsPageTitleCodegedreven schermlabel of contentblok indien beheerbaar gemaaktWeergavetekstStringNeeGeen gebruikersdata.
SCH-GEN-08-01-F02Introblok — toelichtingBekijk hier met wie je binnen OefenHub verbonden bent.RelationshipsIntroTextCodegedreven schermtekst of contentblok indien beheerbaar gemaaktWeergavetekstStringNeeTekst mag rechten niet ruimer voorstellen dan de autorisatieregels.
SCH-GEN-08-01-F03SamenvattingActieve vriendenActiveFriendCountUserRelationships, RelationshipTypes.Code = FriendshipBerekend aantal actieve relaties voor huidige gebruikerIntegerNeeAlleen IsActive = true en huidige gebruiker als relatiepartij tellen.
SCH-GEN-08-01-F04SamenvattingOuders/voogdenActiveGuardianCountUserRelationships, RelationshipTypes.Code = GuardianStudentBerekend aantal actieve relaties voor huidige gebruikerIntegerNeeAlleen actieve ouder-/voogdrelaties van huidige gebruiker tellen.
SCH-GEN-08-01-F05SamenvattingDocentenActiveTeacherCountUserRelationships, RelationshipTypes.Code = TeacherStudentBerekend aantal actieve relaties voor huidige gebruikerIntegerNeeAlleen actieve docentrelaties van huidige gebruiker tellen.
SCH-GEN-08-01-F06SamenvattingOpenstaande uitnodigingenPendingSentInvitationCountRelationshipInvitations, RelationshipEventsBerekend aantal openstaande verstuurde uitnodigingenIntegerNeeAlleen uitnodigingen met huidige gebruiker als FromUserId, openstaande status en zichtbaarheid in openstaand overzicht.
SCH-GEN-08-01-B01Vrienden+ Nodig vriend uitInviteFriendButtonRelationshipTypes, rolcontext, feature-instellingenActiebeschikbaarheidActionJaAlleen tonen/activeren als de gebruiker vriendschappen mag initiëren en vriendschappen beschikbaar zijn.
SCH-GEN-08-01-T01Vriendenlijst<vriend>FriendRelationshipItemUserRelationships, Users, Roles, RelationshipTypesDatabaseCollectionNeeAlleen actieve vriendschappen van huidige gebruiker.
SCH-GEN-08-01-F07Vriendregel<naam vriend>FriendDisplayNameUsersDatabasewaardeStringNeeNaam veilig encoden; geen e-mail tonen tenzij functioneel bedoeld.
SCH-GEN-08-01-A02VriendregelBerichtMessageFriendActionUserRelationships, privéberichtfeature, berichtendomeinUser actionActionJaAlleen bij actieve relatie en toegestane privéberichten; server-side relatie opnieuw controleren.
SCH-GEN-08-01-A03VriendregelOntkoppelUnlinkFriendActionUserRelationships, RelationshipEvents, SystemMessagesUser action na bevestigingActionJaEerst bevestigingsmodal tonen; na bevestiging relatie deactiveren en andere partij informeren.
SCH-GEN-08-01-F08VrienddetailActief sindsFriendActiveSinceDisplayUserRelationships.AcceptedAtUtc of UserRelationships.InitiatedAtUtc volgens relatieflowAfgeleid/lokaal geformatteerdDate displayNeeUTC-bron lokaal tonen.
SCH-GEN-08-01-F09VrienddetailGedeelde oefeningenSharedExerciseCountWithFriendGedeelde-oefeningendomein, relatiecontextBerekendIntegerNeeAlleen gegevens tonen die binnen deze vriendschapsrelatie en gebruikercontext horen.
SCH-GEN-08-01-B02Ouders/voogden+ Nodig ouder/voogd uitInviteGuardianButtonRelationshipTypes, rolcontextActiebeschikbaarheidActionJaAlleen beschikbaar wanneer huidige gebruiker deze relatievorm mag initiëren.
SCH-GEN-08-01-T02Ouder-/voogdlijst<ouder/voogd>GuardianRelationshipItemUserRelationships, Users, Roles, RelationshipTypesDatabaseCollectionNeeAlleen actieve ouder-/voogdrelaties van huidige gebruiker.
SCH-GEN-08-01-F10Ouder-/voogdregel<naam ouder/voogd>GuardianDisplayNameUsersDatabasewaardeStringNeeNaam veilig encoden.
SCH-GEN-08-01-A05Ouder-/voogdregelBerichtMessageGuardianActionUserRelationships, privéberichtfeature, berichtendomeinUser actionActionJaServer-side relatie en berichtrechten controleren.
SCH-GEN-08-01-A06Ouder-/voogdregelOntkoppelverzoekRequestGuardianUnlinkActionUserRelationships, RelationshipEvents, SystemMessagesUser action na bevestigingActionJaEerst bevestigingsmodal tonen; leerling start verzoek, geen directe ontkoppeling.
SCH-GEN-08-01-F11Ouder-/voogddetailActief sindsGuardianActiveSinceDisplayUserRelationships.AcceptedAtUtc of UserRelationships.InitiatedAtUtc volgens relatieflowAfgeleid/lokaal geformatteerdDate displayNeeVerplicht detailveld in opengeklapte ouder-/voogdregel.
SCH-GEN-08-01-M01DocentsectieAlleen docent kan uitnodigenTeacherInviteRestrictedMessageRelatiebusinessruleAfgeleide UI-meldingStringNeeLeerling mag geen docentrelatie initiëren.
SCH-GEN-08-01-T03Docentenlijst<docent>TeacherRelationshipItemUserRelationships, Users, TeacherStudentLevelAccess, rollenDatabase en afgeleide niveaucontextCollectionNeeAlleen actieve docentrelaties van huidige leerling.
SCH-GEN-08-01-F12Docentregel<naam docent>TeacherDisplayNameUsersDatabasewaardeStringNeeGeen gegevens van andere docentrelaties buiten deze relatie tonen.
SCH-GEN-08-01-A08DocentregelBerichtMessageTeacherActionUserRelationships, privéberichtfeature, berichtendomeinUser actionActionJaServer-side relatie en berichtrechten controleren.
SCH-GEN-08-01-A09DocentregelOntkoppelverzoekRequestTeacherUnlinkActionUserRelationships, RelationshipEvents, SystemMessages, TeacherStudentLevelAccessUser action na bevestigingActionJaEerst bevestigingsmodal tonen; beëindiging trekt bij daadwerkelijke verwerking niveauautorisaties in.
SCH-GEN-08-01-F13DocentdetailNiveau(s)TeacherAuthorizedLevelsDisplayTeacherStudentLevelAccess, niveaudomeinAfgeleid uit docent-leerlingcontextString/listNeeAlleen niveaus tonen die door deze docentrelatie relevant zijn.
SCH-GEN-08-01-T04Uitnodigingenlijst<uitnodiging>PendingInvitationItemRelationshipInvitations, RelationshipTypes, UsersDatabaseCollectionNeeAlleen door huidige gebruiker verstuurde openstaande uitnodigingen tonen.
SCH-GEN-08-01-F15Uitnodigingregel<naam of e-mailadres>InvitationTargetDisplayRelationshipInvitations.ToUserId, RelationshipInvitations.ToEmail, UsersDatabasewaarde / afgeleid displayStringNeeBij onbekende gebruiker e-mailadres alleen tonen voor eigen verstuurde uitnodiging.
SCH-GEN-08-01-F16Uitnodigingregel<type> · Verzonden op <datum>InvitationMetaDisplayRelationshipInvitations.RelationshipTypeId, CreatedAtUtcDatabasewaarde / lokaal geformatteerdString/date displayNeeUTC-bron lokaal tonen.
SCH-GEN-08-01-A11UitnodigingregelHerinnerRemindInvitationActionRelationshipInvitations, SystemMessages, externe e-mailservice indien ToUserId leeg isUser actionActionJaAlleen bij nog openstaande uitnodiging; misbruikbeperking en status server-side controleren.
SCH-GEN-08-01-A12UitnodigingregelIntrekkenWithdrawInvitationActionRelationshipInvitations, RelationshipEvents, SystemMessagesUser action na bevestigingActionJaEerst bevestigingsmodal tonen; uitnodiging daarna niet meer accepteerbaar maken.
SCH-GEN-08-01-F17UitnodigmodalE-mailadresInvitationEmailInputGebruikersinputUser inputEmail stringJaVerplicht; geldig e-mailadres; normaliseren voor vergelijking; geen onveilige logging van e-mailadres.
SCH-GEN-08-01-M02UitnodigmodalControleer het e-mailadresUnknownEmailInvitationMessageUsers.ExternalId/e-mailkoppeling via accountdomein, RelationshipInvitations.ToEmailAfgeleide fout-/infostaatMessageNeeTonen wanneer geen OefenHub-account bij e-mailadres is gevonden.
SCH-GEN-08-01-B03UitnodigmodalVerstuur uitnodigingSendRelationshipInvitationButtonRelationshipInvitations, RelationshipEvents, SystemMessagesUser actionActionJaAlleen voor bestaande gebruiker of geldig gekozen relatietype; dubbele actieve relatie of dubbele openstaande uitnodiging blokkeren.
SCH-GEN-08-01-B04UitnodigmodalNodig uit voor OefenHubInviteExternalUserButtonRelationshipInvitations.ToEmail, externe e-mailservice, registratieflowUser actionActionJaAlleen actief nadat onbekend e-mailadres is bevestigd; naam van uitnodiger wordt in e-mail gedeeld; uitnodiging 7 dagen koppelbaar aan registratie.
SCH-GEN-08-01-MOD02OntkoppelmodalWeet je het zeker?RelationshipUnlinkConfirmModalGeselecteerde relatie en relatietypeRuntime stateModalJaAltijd tonen vóór directe ontkoppeling of ontkoppelverzoek.
SCH-GEN-08-01-MOD03IntrekmodalWeet je het zeker?WithdrawInvitationConfirmModalGeselecteerde uitnodigingRuntime stateModalJaAltijd tonen vóór intrekken van uitnodiging.

8.6 Schermtrace naar SRS en acceptatiecriteria

De onderstaande tabel legt per schermrequirement de koppeling naar het centrale schermrequirements-trace-register, SRS-requirements en acceptatiecriteria vast. De normatieve requirementtekst staat in de SRS; dit schermdocument beschrijft alleen de lokale schermcontext.

Deze tabel bevat alleen schermtraceability. De normatieve requirementtekst en acceptatiecriteria staan centraal in de SRS.

SchermrequirementDektSchermcontext
REQ-SCH-GEN-08-01-01SRS-AUTH-001
SRS-REL-001
AC-AUTH-001
AC-REL-001
De relatiepagina tonen voor ingelogde gebruikers binnen de profielcontext
REQ-SCH-GEN-08-01-02SRS-REL-001
AC-REL-001
Header en footer geen als functionele onderdelen van dit schermdocument worden beschouwd
REQ-SCH-GEN-08-01-03SRS-AUTH-001
SRS-REL-001
AC-AUTH-001
AC-REL-001
Uitsluitend relaties tonen waarin de ingelogde gebruiker zelf partij is
REQ-SCH-GEN-08-01-04SRS-REL-001
AC-REL-001
Relaties onderscheiden per relatietype en rol-context-combinatie, zodat meerdere inhoudelijk verschillende relaties tussen dezelfde natuurlijke personen mogelijk blijven
REQ-SCH-GEN-08-01-05SRS-RDM-007
SRS-RDM-002
SRS-RDM-001
SRS-REL-001
AC-RDM-007
AC-RDM-002
AC-RDM-001
AC-REL-001
Een samenvatting tonen met dynamische aantallen voor actieve vrienden, ouders/voogden, docenten en openstaande door de gebruiker verstuurde uitnodigingen
REQ-SCH-GEN-08-01-06SRS-RDM-007
SRS-RDM-002
SRS-RDM-001
SRS-REL-001
AC-RDM-007
AC-RDM-002
AC-RDM-001
AC-REL-001
Samenvattingsaantallen mogen uitsluitend worden opgebouwd uit actuele gebruikergebonden relatie- en uitnodigingsdata en mogen mockupwaarden niet hardcoded gebruiken
REQ-SCH-GEN-08-01-07SRS-REL-003
AC-REL-003
De sectie Vrienden actieve vriendschapsrelaties tonen met minimaal naam, berichtactie, ontkoppelactie en openklapbare detailinformatie
REQ-SCH-GEN-08-01-08SRS-REL-001
AC-REL-001
Een vriendregel in uitgeklapte toestand minimaal Actief sinds en Gedeelde oefeningen tonen
REQ-SCH-GEN-08-01-09SRS-AUTH-001
SRS-REL-001
AC-AUTH-001
AC-REL-001
De actie Bericht mag alleen uitvoerbaar zijn wanneer de relatie actief is, privéberichten beschikbaar zijn en de server-side autorisatie bevestigt dat de gebruiker deze relatie mag berichten
REQ-SCH-GEN-08-01-10SRS-REL-003
AC-REL-003
De actie Ontkoppel altijd eerst een bevestigingsmodal/popup openen met de vraag Weet je het zeker?
REQ-SCH-GEN-08-01-11SRS-NFR-AUD-001
SRS-REL-003
AC-NFR-AUD-001
AC-REL-003
Na bevestigde directe ontkoppeling het systeem de relatie deactiveren, de actie auditbaar vastleggen en de andere partij informeren via een systeembericht of gelijkwaardige notificatie
REQ-SCH-GEN-08-01-12SRS-REL-001
AC-REL-001
De sectie Ouders / voogden actieve ouder-/voogdrelaties tonen en iedere ouder-/voogdregel openklapbaar zijn
REQ-SCH-GEN-08-01-13SRS-REL-001
AC-REL-001
Een ouder-/voogdregel in uitgeklapte toestand minimaal Actief sinds tonen
REQ-SCH-GEN-08-01-14SRS-REL-003
AC-REL-003
Een leerling mag een ouder-/voogdrelatie niet direct verbreken vanuit deze pagina; de actie als ontkoppelverzoek worden verwerkt volgens de relatiebusinessrules
REQ-SCH-GEN-08-01-15SRS-REL-003
AC-REL-003
De actie Ontkoppelverzoek altijd eerst een bevestigingsmodal/popup openen met de vraag Weet je het zeker?
REQ-SCH-GEN-08-01-16SRS-REL-001
AC-REL-001
De sectie Docenten actieve docentrelaties tonen en duidelijk maken dat alleen docenten een docentrelatie met de leerling kunnen initiëren
REQ-SCH-GEN-08-01-17SRS-REL-001
AC-REL-001
Een leerling mag vanuit deze pagina geen docent uitnodigen
REQ-SCH-GEN-08-01-18SRS-REL-001
AC-REL-001
Een docentregel openklapbaar zijn en in uitgeklapte toestand de relevante niveaucontext van die docentrelatie tonen
REQ-SCH-GEN-08-01-19SRS-REL-003
AC-REL-003
Een leerling mag een docentrelatie niet direct verbreken vanuit deze pagina; de actie als ontkoppelverzoek worden verwerkt volgens de relatiebusinessrules
REQ-SCH-GEN-08-01-20SRS-AUTH-001
SRS-REL-003
AC-AUTH-001
AC-REL-003
Bij daadwerkelijke beëindiging van een docentrelatie de uit die relatie voortkomende niveauautorisaties worden ingetrokken
REQ-SCH-GEN-08-01-21SRS-REL-001
AC-REL-001
De sectie Openstaande uitnodigingen uitsluitend door de huidige gebruiker verstuurde openstaande uitnodigingen tonen
REQ-SCH-GEN-08-01-22SRS-REL-001
AC-REL-001
Inkomende relatie-uitnodigingen via het berichtensysteem worden aangeboden en geen als inkomende lijst op deze pagina worden verzameld
REQ-SCH-GEN-08-01-23SRS-REL-001
AC-REL-001
Per openstaande uitnodiging het systeem minimaal ontvangerweergave, relatietype, verzenddatum en de acties Herinner en Intrekken tonen
REQ-SCH-GEN-08-01-24SRS-REL-001
SRS-REL-012
AC-REL-001
AC-REL-012
De actie Herinner mag alleen uitvoerbaar zijn voor uitnodigingen die nog openstaand zijn en waarvan de reminder-cooldown is verstreken
REQ-SCH-GEN-08-01-25SRS-REL-001
SRS-REL-002
AC-REL-001
AC-REL-002
De actie Intrekken altijd eerst een bevestigingsmodal/popup openen en de uitnodiging na bevestiging niet meer accepteerbaar maken
REQ-SCH-GEN-08-01-26SRS-REL-001
AC-REL-001
De knoppen + Nodig vriend uit en + Nodig ouder/voogd uit een modal/popup openen waarin de gebruiker een e-mailadres invoert
REQ-SCH-GEN-08-01-27SRS-REL-001
AC-REL-001
Het relatietype van een uitnodiging afleiden uit de knop waarmee de modal is geopend
REQ-SCH-GEN-08-01-28SRS-AUTH-001
SRS-REL-001
AC-AUTH-001
AC-REL-001
E-mailinvoer server-side valideren op formaat, toegestane relatieflow, bestaande actieve relatie en bestaande openstaande identieke uitnodiging
REQ-SCH-GEN-08-01-29SRS-REL-001
AC-REL-001
Wanneer het e-mailadres bij een bestaande OefenHub-gebruiker hoort, het systeem een openstaande relatie-uitnodiging aanmaken met een gevulde doelgebruiker en de ontvanger informeren
REQ-SCH-GEN-08-01-30SRS-REL-001
AC-REL-001
Wanneer het e-mailadres niet bij een bestaande OefenHub-gebruiker hoort, het systeem de gebruiker vragen het e-mailadres te controleren
REQ-SCH-GEN-08-01-31SRS-REL-001
AC-REL-001
Wanneer een onbekend e-mailadres ongewijzigd wordt bevestigd, de actie Nodig uit voor OefenHub beschikbaar zijn
REQ-SCH-GEN-08-01-32SRS-REL-001
AC-REL-001
Bij Nodig uit voor OefenHub het systeem vooraf tonen dat de naam van de uitnodigende gebruiker in de e-mail aan de uit te nodigen persoon wordt gedeeld
REQ-SCH-GEN-08-01-33SRS-REL-001
AC-REL-001
Een externe OefenHub-uitnodiging als relatie-uitnodiging worden vastgelegd op e-mailadres, zonder doelgebruiker zolang de ontvanger nog niet geregistreerd is
REQ-SCH-GEN-08-01-34SRS-REL-001
SRS-REL-002
AC-REL-001
AC-REL-002
Wanneer iemand zich binnen 7 dagen registreert met het e-mailadres van een openstaande externe relatie-uitnodiging, het systeem de uitnodiging koppelen aan het nieuwe account en ter acceptatie aanbieden
REQ-SCH-GEN-08-01-35SRS-REL-001
SRS-REL-002
AC-REL-001
AC-REL-002
Een relatie mag pas actief worden nadat de ontvangende partij de relatie-uitnodiging heeft geaccepteerd
REQ-SCH-GEN-08-01-36SRS-AUTH-001
SRS-REL-001
AC-AUTH-001
AC-REL-001
Kruislings uitnodigen, dubbele openstaande uitnodigingen en uitnodigen terwijl al een identieke actieve relatie bestaat server-side blokkeren met een duidelijke gebruikersmelding
REQ-SCH-GEN-08-01-37SRS-NFR-AUD-001
SRS-REL-003
AC-NFR-AUD-001
AC-REL-003
Relatie-uitnodigingen, herinneringen, intrekkingen, acceptaties, afwijzingen, verlopen uitnodigingen en ontkoppelacties auditbaar vastleggen in het relatiedomein
REQ-SCH-GEN-08-01-38SRS-AUTH-004
SRS-REL-001
AC-AUTH-004
AC-REL-001
Het systeem mag technische identifiers zoals GUID’s, relatie-id’s of uitnodiging-id’s niet zichtbaar tonen in de relatiepagina
REQ-SCH-GEN-08-01-39SRS-REL-001
AC-REL-001
Lege staten tonen voor relatietypen of uitnodigingslijsten zonder records
REQ-SCH-GEN-08-01-40SRS-RDM-007
SRS-RDM-002
SRS-RDM-001
SRS-REL-001
AC-RDM-007
AC-RDM-002
AC-RDM-001
AC-REL-001
Zichtbare relatiegegevens, datumwaarden, aantallen, initialen, namen en statussen dynamisch worden opgebouwd uit de actuele gebruikercontext en relatiedata

8.7 Technische koppeling

Voor technische uitwerking zijn vooral relevant:

8.x Uitnodiging-aware onboarding

De reguliere relatiepagina blijft de plek voor afgeronde onboarding en later ontvangen/verzonden relatiecontexten. Voor nieuwe gebruikers met geclaimde externe uitnodigingen geldt eerst een verplichte onboardingweergave voordat de normale relatiepagina beschikbaar wordt.

Belangrijke UI-regels:

  • rolkeuze toont informatief hoeveel uitnodigingen klaarstaan en welke typen dit zijn;
  • uitnodigingen die niet passen bij de gekozen rol worden server-side afgesloten en niet als normale openstaande uitnodigingen getoond;
  • compatibele uitnodigingen worden daarna op een verplichte onboardingpagina getoond met accepteren/weigeren;
  • pas na verwerking van alle verplichte onboardinguitnodigingen wordt normale navigatie en de reguliere relatiepagina beschikbaar.