Skip to main content

4. Open bericht

4.1 Schermafbeelding

oefenhub_generiek_03_open_bericht_v3_5.png

4.2 Scherm meta data

VeldWaarde
Scherm-IDSCH-GEN-04-01
SchermnaamBerichten — geopend bericht / privégesprek
Doelgroep / onderdeelGeneriek
Bronbestandoefenhub_generiek_03_open_bericht_v3_5.html
MockupversieV3.5
Screenshotbestandoefenhub_generiek_03_open_bericht_v3_5.png
Processtap / contextDe ingelogde gebruiker opent vanuit het berichtenoverzicht een systeembericht of privéthread. Systeemberichten tonen één ontvangen bericht; privéthreads tonen een gesprekstimeline met berichten en threadgebeurtenissen.
DocumentatiestatusUitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende documentatie.
OpmerkingenHeader, navigatiepillen, profielknop en footer vallen buiten dit schermdocument. De zichtbare waarden in de mockup, waaronder namen, tijden, onderwerp, berichtinhoud en het aantal eerdere berichten, zijn dynamische voorbeeldwaarden.
Route / URL-patroon/messages/system/{messageId} voor systeemberichten en /messages/thread/{threadId} voor privéthreads. Vanuit het overzicht kan eerst een /open-route worden gebruikt om readstate bij te werken en daarna naar deze detailroute te redirecten.
Autorisatie / vereiste rol-contextIngelogde gebruiker met toegang tot het betreffende privébericht of systeembericht. Voor privéberichten moet de gebruiker deelnemer zijn aan de thread en mag de thread voor deze gebruiker niet uit de mailbox zijn verwijderd.
Primair domeinobject / hoofdentiteitPrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages, PrivateMessageThreadEvents en, voor de systeemberichtvariant, SystemMessages.
Gerelateerde schermen / navigatie02_berichten_overzicht, 03_nieuw_privebericht, 05_beantwoord_bericht.
Data-karakterUitlees- en lichte mutatiepagina. Het openen van het bericht kan de gebruikergebonden leesstatus aanpassen. Berichtinhoud, threadcontext, threadevents, knoppen en disabled states worden dynamisch bepaald.

4.3 Functionele beschrijving

Het scherm Berichten — geopend bericht / privégesprek toont een geopend bericht binnen het centrale berichtensysteem van OefenHub. Voor systeemberichten blijft dit één ontvangen bericht met eventuele vervolgactie. Voor privéthreads wordt het scherm behandeld als gesprek: een vaste threadkop met threadicoon, onderwerp en menu, gevolgd door één chronologische timeline van oud naar nieuw.

De pagina is generiek, maar het getoonde bericht blijft altijd gebruikergebonden. Een gebruiker mag alleen berichten openen die voor die gebruiker zichtbaar zijn. Voor privéberichten betekent dit dat de gebruiker deelnemer moet zijn aan de betreffende thread. Voor systeemberichten betekent dit dat het systeembericht aan de ingelogde gebruiker gericht moet zijn.

4.3.1 Interpretatie van mockupwaarden

Alle zichtbare waarden in de mockup zijn voorbeeldwaarden. Namen zoals Sanne de Vries en Emma Jansen, het onderwerp Goed bezig met optellen, tijden zoals Vandaag · 12:08, berichtteksten en het aantal (3) bij Eerdere berichten mogen niet als vaste productiegegevens worden beschreven.

De waarden worden afgeleid uit de actuele gebruikercontext, berichtthread, berichtinhoud, deelnemers, leesstatus en threadevents. Datum- en tijdwaarden worden vanuit UTC-bronwaarden naar de lokale gebruikersweergave vertaald.

De algemene header, navigatiepillen, profielknop, logo, welkomsttekst en footer horen niet bij de functionele scope van dit schermdocument. Alleen de scherminhoud vanaf de breadcrumb en de berichtkaart wordt uitgewerkt.

Wanneer het openen van een bericht de leesstatus wijzigt, kan dat buiten dit scherm zichtbaar worden in de algemene berichtenteller. Die teller wordt functioneel bij het berichtenoverzicht en de generieke header-berichteningang beschreven, niet als afzonderlijk UI-element van dit scherm.

4.3.3 Systeemberichtkaart en privéthreadkop

Voor systeemberichten toont de berichtkaart de volledige inhoud van het geselecteerde bericht. De bovenste metaregel staat in een duidelijke titelbalk met type-aanduiding, afzender en ontvangstmoment. Systeemberichten hebben geen antwoordactie en zijn niet verwijderbaar door de gebruiker. Wanneer een systeembericht verwijst naar een onderliggend domeinobject, bepaalt de applicatie op basis van EntityType en EntityId welke vervolgroute of actie beschikbaar is.

Voor privéthreads toont de pagina bovenaan geen los Ontvangen bericht meer. In plaats daarvan staat bovenaan een sticky threadkop met:

  • het stabiele threadicoon en de threadkleur;
  • het actuele onderwerp;
  • een subtiele type-/laatste-activiteitregel;
  • een drie-puntjesknop voor Gespreksopties;
  • in sticky-state een subtiele link ← Terug naar berichten.

De threadkop toont niet nog eens groot Privégesprek boven het onderwerp; het onderwerp is de primaire kop. Statusmeldingen na acties staan sticky onder de threadkop, met vaste niet-transparante fout-/succesachtergrond zodat zij zichtbaar blijven wanneer de gebruiker onderaan het gesprek zit.

Het menu Gespreksopties opent een modal met nu minimaal Onderwerp aanpassen en Gesprek verlaten. Later kunnen deelnemers toevoegen en threadafbeelding/icoon aanpassen op dezelfde UX-plek aansluiten. Een onderwerpwijziging wordt als PrivateMessageThreadEvents.EventType = SubjectChanged vastgelegd en niet als gewoon privébericht. Wanneer er geen andere actieve deelnemer meer is, wordt onderwerp aanpassen in de modal disabled getoond met een kindvriendelijke uitleg en zonder opslaanknoppen.

Bij het openen van een privéthread wordt eerst bepaald of er nieuwe activiteit voor de ingelogde participant was. Daarna wordt de threadactiviteit voor deze deelnemer als gelezen beschouwd. Deze mutatie mag uitsluitend plaatsvinden binnen de participantregel van de ingelogde gebruiker en mag geen leesstatus van andere deelnemers aanpassen.

4.3.4 Acties

De actie Terug naar berichten brengt de gebruiker terug naar het berichtenoverzicht. De bestaande zoek- of filtercontext hoeft niet verplicht behouden te blijven, tenzij dat als algemene navigatieregel voor het berichtenoverzicht wordt vastgelegd.

Beantwoorden gebeurt op de threaddetailpagina zelf via een compact inline blok Bericht onderaan de timeline. Er is geen aparte gebruikersflow meer waarin een gebruiker normaal naar een zelfstandige replypagina hoeft te gaan. De replyroute mag hoogstens als technische fallback bestaan en redirectt terug naar de normale threadpagina.

De actie Gesprek verlaten staat onder Gespreksopties en verwijdert het privégesprek alleen uit de eigen zichtbare mailboxweergave van de gebruiker. Dit is een gebruikergebonden mailboxhandeling via de participantlaag en geen fysieke verwijdering van de thread of berichten voor andere deelnemers. De eerste geldige verlaat-/verwijderactie schrijft een compact thread-event, zodat achterblijvende deelnemers zien wie het gesprek heeft verlaten. Als iemand alleen overblijft, wordt beantwoorden en onderwerp wijzigen geblokkeerd met vriendelijke uitleg. Voor systeemberichten is verwijderen niet toegestaan; de verwijderactie wordt dan niet getoond.

4.3.5 Privéthreadtimeline

Privéthreads tonen één timeline van oud naar nieuw binnen het geladen venster. De timeline bevat gewone privéberichten en threadgebeurtenissen in dezelfde tijdlijn. De gebruiker leest het gesprek van boven naar beneden, maar de pagina springt automatisch naar het relevante punt:

  • naar de marker Nieuwe berichten wanneer er voor de ingelogde participant nieuwe activiteit was;
  • naar #latest wanneer er geen nieuwe activiteit was.

Berichten worden als compacte berichtballonnen getoond. Eigen berichten staan rechts; berichten van andere deelnemers staan links. Iedere participant gebruikt een threadspecifieke accentkleur zodat toekomstige groepsgesprekken herkenbaar blijven. De avatar staat in de berichtballon en maakt deel uit van de threadweergave. De titelregel van een berichtballon volgt het patroon <datum> · <tijd> (<naam>/Jij).

Boven de timeline kan een compacte marker Nieuwe berichten of Eerdere berichten staan. Dit is een visuele navigatiehulp, geen apart inhoudelijk hoofdblok. Als er geen zichtbare threaditems zijn, toont de pagina een compacte lege staat zonder technische identifiers.

4.3.6 Eerdere berichten laden

Wanneer een gesprek meer historie heeft dan het initiële venster, toont de pagina bovenaan de timeline een duidelijke knop Eerdere berichten laden. Deze knop heeft een herkenbare OefenHub-buttonstijl maar blijft subtiel, omdat hij ondersteunend is aan het gesprek.

Bij klikken wordt zonder volledige page refresh een beveiligde POST uitgevoerd naar de oudere-timeline-route. De request bevat een hidden, opaque cursor. Die cursor is niet leesbaar of betekenisvol voor de gebruiker en bevat geen aanpasbare pagina-, datum- of bericht-id. Conceptueel verwijst de cursor naar de oudste al geladen positie binnen deze thread voor deze gebruiker.

De server controleert bij iedere klik opnieuw de ingelogde gebruiker, de thread, de cursorcontext, de participantstatus en de batchlimieten. Als de cursor ontbreekt, gemanipuleerd is of niet bij deze gebruiker/thread hoort, toont de pagina een veilige foutmelding zonder extra inhoud te laden.

De nieuw opgehaalde oudere items worden bovenaan de bestaande timeline toegevoegd. De client bewaart en corrigeert de scrollpositie, zodat de gebruiker visueel op dezelfde plek in het gesprek blijft.

4.3.7 Threadgebeurtenissen binnen de thread

Binnen de threadcontext mogen systeemachtige tussenregels voorkomen. Deze regels zijn geen losse systeemberichten in de mailbox en ook geen gewone privéberichten. Zij zijn threadgebeurtenissen binnen dezelfde privéconversatie.

De mockup toont hiervan een voorbeeld: een deelnemer heeft het onderwerp gewijzigd van Lekker bezig naar Goed bezig met optellen. Functioneel wordt dit vastgelegd als een record in PrivateMessageThreadEvents, bijvoorbeeld met eventtype SubjectChanged, actor, oud onderwerp, nieuw onderwerp en tijdstip.

Threadgebeurtenissen worden als neutrale systeemballon tussen de gewone berichtballonnen getoond. Alleen relevante onderdelen, zoals de actor en oude/nieuwe onderwerpwaarde, mogen visueel nadruk krijgen. Wanneer een threadevent renderbare tekst bevat, moet de inhoud server-side veilig worden opgebouwd, gesanitized en geëncodeerd voordat deze wordt getoond.

Threadgebeurtenissen maken onderdeel uit van de threadtijdlijn. Een nieuw threadevent na de laatst bekende leespositie kan daarom bijdragen aan de ongelezenstatus van de thread, ook wanneer er geen nieuw handmatig privébericht is geplaatst. In de UI worden threadgebeurtenissen compact, gecentreerd en duidelijk anders gekleurd getoond, zonder avatar en zonder titelbalk.

4.3.8 Autorisatie en server-side controle

Alle toegang tot deze pagina moet server-side worden gecontroleerd. Frontend-zichtbaarheid of het verbergen van knoppen is geen beveiliging.

Voor privéberichten gelden minimaal de volgende controles:

  • de ingelogde gebruiker heeft een participantregel bij de betreffende PrivateMessageThreads.Id;
  • de thread is niet voor deze gebruiker verwijderd via de participantlaag;
  • het geopende bericht hoort bij dezelfde thread;
  • weergegeven berichten en threadevents horen bij dezelfde thread;
  • leesstatus en verwijderstatus worden alleen voor de participantregel van de ingelogde gebruiker aangepast;
  • beantwoorden is alleen toegestaan wanneer de gebruiker nog actief aan de thread mag deelnemen.

Voor systeemberichten gelden minimaal de volgende controles:

  • SystemMessages.RecipientUserId is gelijk aan de ingelogde gebruiker;
  • eventuele EntityType en EntityId verwijzen naar een toegestaan vervolgdomein;
  • de actuele gebruiker heeft ook rechten op de vervolgactie of detailweergave waarnaar het systeembericht verwijst.

4.3.9 Foutstaten en disabled states

Wanneer het bericht of de thread niet bestaat, niet zichtbaar is voor de gebruiker of inmiddels uit de eigen mailbox is verwijderd, toont het systeem een nette fout- of niet-beschikbaarmelding. De pagina mag in dat geval geen technische id's, stacktraces of interne databasenaamgeving tonen.

Wanneer beantwoorden niet mogelijk is, bijvoorbeeld omdat de gebruiker geen actieve deelnemer meer is of omdat de thread functioneel gesloten is, wordt de antwoordactie verborgen of disabled weergegeven met een begrijpelijke toelichting.

Wanneer verwijderen niet is toegestaan, zoals bij systeemberichten, wordt de verwijderactie verborgen of disabled weergegeven. Bij een disabled weergave moet de gebruiker kunnen begrijpen waarom verwijderen niet mogelijk is.

4.4 UI-elementen en velddefinities

Element-IDTypeGUI-verwijzingOmschrijvingZichtbaar labelOpmerkingTechnische naam
SCH-GEN-04-01-S01SHoofdkaartContainer voor systeemberichtdetail of privégesprektimeline.Geopend bericht / PrivégesprekHeader en footer vallen buiten scope.OpenMessageShell
SCH-GEN-04-01-N01ABreadcrumbNavigatiepad naar de berichtencontext.Home > Berichten > BerichtAlleen functionele pagina-navigatie binnen de content.OpenMessageBreadcrumb
SCH-GEN-04-01-S02SIntroblokTitel en toelichting boven de detailweergave.Geopend bericht / PrivégesprekVoor privéthreads beschrijft de tekst het gesprek en niet een los ontvangen bericht.OpenMessageIntroSection
SCH-GEN-04-01-F01FIntroblok — titelTitel van de pagina.Ontvangen bericht of PrivégesprekRead-only weergavetekst afhankelijk van itemtype.OpenMessagePageTitle
SCH-GEN-04-01-F02FIntroblok — toelichtingKorte uitleg over het geopende bericht en de threadcontext.Bekijk een ontvangen privébericht. Onder het huidige bericht staan de eerdere berichten uit dezelfde conversatie.Weergavetekst is codegedreven of contentgedreven afhankelijk van latere beheerkeuze.OpenMessageIntroText
SCH-GEN-04-01-S03SBerichtkaartHoofdkaart met metadata, onderwerp, inhoud en acties van het geopende bericht.BerichtToont privéberichtvariant of systeemberichtvariant.OpenMessageCard
SCH-GEN-04-01-F03FBerichtmetadata — typeType-aanduiding van het geopende bericht.PrivéBij systeembericht wordt het type als systeemvariant weergegeven.OpenMessageTypeTag
SCH-GEN-04-01-F04FBerichtmetadata — afzenderNaam of systeemweergave van de afzender.Van: <naam afzender>Bij namens-verzending moet afwijkende afzenderweergave ondersteund worden.OpenMessageSenderDisplayName
SCH-GEN-04-01-F05FBerichtmetadata — ontvangerNaam van de ontvanger of relevante deelnemersweergave.Aan: <naam ontvanger>Dynamisch op basis van deelnemers en berichtcontext.OpenMessageRecipientDisplayName
SCH-GEN-04-01-F06FBerichtmetadata — ontvangstmomentDatum en tijd waarop het bericht is ontvangen of verzonden.Ontvangen: <datum> · <tijd>UTC-bronwaarde lokaal weergeven.OpenMessageReceivedAtDisplay
SCH-GEN-04-01-F07FBerichtinhoud — onderwerpOnderwerp van de thread of titel van het bericht.<onderwerp>Dynamisch, veilig geëncodeerd.OpenMessageSubject
SCH-GEN-04-01-F08FBerichtinhoud — bodyVolledige berichtinhoud.<berichtinhoud>Rich text alleen renderen nadat deze veilig gesanitized is.OpenMessageBody
SCH-GEN-04-01-B01BBerichtactiesLaat de gebruiker het privégesprek verlaten en uit de eigen mailboxweergave verwijderen.Gesprek verlatenAlleen actief voor privéberichten waar gebruiker deelnemer is; niet voor systeemberichten.DeletePrivateMessageAction
SCH-GEN-04-01-B02BBerichtactiesNavigeert terug naar het berichtenoverzicht.Terug naar berichtenKeert terug naar de centrale mailbox.BackToMessagesButton
SCH-GEN-04-01-B03BBerichtactiesVerplaatst de focus naar de inline replycomposer onderaan deze thread.BeantwoordenAlleen beschikbaar voor beantwoordbare privéthreads.ReplyToMessageButton
SCH-GEN-04-01-M01MBerichtacties — disabled stateToelichting wanneer verwijderen niet is toegestaan.Verwijderen niet mogelijkVan toepassing bij systeemberichten of niet-verwijderbare contexten.DeleteMessageDisabledMessage
SCH-GEN-04-01-S04SPrivéthreadtimelineEén chronologische gesprekstimeline met zichtbare berichten en threadevents.Nieuwe berichten / Laatste bericht / Eerdere berichtenAlleen voor privéthreads; markerlabels zijn navigatiehulp binnen dezelfde timeline.MessageThreadTimelineSection
SCH-GEN-04-01-F09FTimeline-markerMarker voor nieuwe activiteit of oudere zichtbare context.Nieuwe berichten / Eerdere berichten (<aantal>)Marker wordt afgeleid uit participant-readstate en zichtbaar timelinevenster.ThreadTimelineMarker
SCH-GEN-04-01-T01TThreadcontext — lijstTijdlijn met berichten en threadevents uit dezelfde thread.<threadtijdlijn>Sorteert volgens threadweergave; bevat alleen data uit dezelfde thread.MessageThreadTimeline
SCH-GEN-04-01-M02MThreadcontext — threadeventNeutrale systeemballon voor een threadgebeurtenis.<actor> veranderde het onderwerp van <oud> naar <nieuw>Geen los systeembericht en geen gewoon privébericht; gebruikt een neutrale, van gewone berichtballonnen onderscheidbare weergave en staat in de tijdlijn bij de context waarop de gebeurtenis betrekking heeft.ThreadEventSystemBubble
SCH-GEN-04-01-M03MThreadcontext — bericht van anderBerichtballon voor een bericht van een andere deelnemer.<datum> · <tijd> (<naam>)Links uitgelijnd in de mockup.ThreadMessageBubbleOther
SCH-GEN-04-01-M04MThreadcontext — eigen berichtBerichtballon voor een bericht van de ingelogde gebruiker.<datum> · <tijd> (Jij)Rechts uitgelijnd in de mockup.ThreadMessageBubbleSelf
SCH-GEN-04-01-M05MFoutstaatMelding wanneer het bericht niet beschikbaar of niet geautoriseerd is.Bericht niet beschikbaarGeen technische identifiers tonen.OpenMessageUnavailableMessage

4.5 Waardelagen

Element-IDGUI-verwijzingZichtbaar labelTechnische naamDatabronWaardebronDatatypeBewerkbaarValidatie / regel
SCH-GEN-04-01-S01HoofdkaartGeopend bericht / PrivégesprekOpenMessageShellRoutecontext, ingelogde gebruiker, PrivateMessageThreadParticipants of SystemMessagesSamengesteld schermobjectCompositeNeeAlleen tonen wanneer de gebruiker rechten heeft op het bericht of de thread.
SCH-GEN-04-01-N01BreadcrumbHome > Berichten > BerichtOpenMessageBreadcrumbRouteconfiguratieAfgeleid uit huidige routeNavigation labelNeeGeen technische bericht- of thread-id tonen.
SCH-GEN-04-01-F01Introblok — titelOntvangen bericht / PrivégesprekOpenMessagePageTitleCodegedreven schermtekst of contentblok indien later beheerbaar gemaaktWeergavetekstStringNeeMoet passen bij itemtype: systeembericht of privéthread.
SCH-GEN-04-01-F02Introblok — toelichtingBekijk een ontvangen privébericht. Onder het huidige bericht staan de eerdere berichten uit dezelfde conversatie.OpenMessageIntroTextCodegedreven schermtekst of contentblok indien later beheerbaar gemaaktWeergavetekstStringNeeTekst mag niet suggereren dat systeemberichten beantwoordbaar of verwijderbaar zijn.
SCH-GEN-04-01-F03Berichtmetadata — typePrivéOpenMessageTypeTagPrivateMessages binnen PrivateMessageThreads, of SystemMessages.Type bij systeemberichtvariantAfgeleid typeEnum/stringNeeType moet overeenkomen met het geopende bronobject.
SCH-GEN-04-01-F04Berichtmetadata — afzenderVan: <naam afzender>OpenMessageSenderDisplayNamePrivateMessages.SenderUserId, PrivateMessages.SendAsUserId, Users, of SystemMessages.CreatedBySystemComponentDatabasewaarde en afgeleide displaynaamStringNeeAlleen namen tonen die binnen de berichtcontext toegestaan zijn; namens-weergave ondersteunen.
SCH-GEN-04-01-F05Berichtmetadata — ontvangerAan: <naam ontvanger>OpenMessageRecipientDisplayNamePrivateMessageThreadParticipants.UserId, Users, of SystemMessages.RecipientUserIdDatabasewaarde en afgeleide displaynaamStringNeeDe ingelogde gebruiker moet ontvanger of threaddeelnemer zijn.
SCH-GEN-04-01-F06Berichtmetadata — ontvangstmomentOntvangen: <datum> · <tijd>OpenMessageReceivedAtDisplayPrivateMessages.SentAtUtc, SystemMessages.CreatedAtUtcUTC-bronwaarde lokaal geformatteerdDateTime displayNeeDatum/tijd consistent lokaal weergeven.
SCH-GEN-04-01-F07Berichtinhoud — onderwerp<onderwerp>OpenMessageSubjectPrivateMessageThreads.Subject, SystemMessages.TitleDatabasewaardeStringNeeOnderwerp veilig encoden; geen actieve HTML renderen.
SCH-GEN-04-01-F08Berichtinhoud — body<berichtinhoud>OpenMessageBodyPrivateMessages.Body, PrivateMessages.BodyFormat, SystemMessages.BodyDatabasewaardeSanitized text/htmlNeeRich text alleen tonen na server-side sanitizing en veilige encoding.
SCH-GEN-04-01-B01BerichtactiesGesprek verlatenDeletePrivateMessageActionPrivateMessageThreadParticipants.DeletedAtUtcUser action / participantmutatieActionJaAlleen privéthread voor eigen participantregel soft-deleten; andere deelnemers behouden zichtbaarheid.
SCH-GEN-04-01-B02BerichtactiesTerug naar berichtenBackToMessagesButtonRouteconfiguratieNavigatieactieActionJaTerug naar berichtenoverzicht zonder autorisatiecontext te lekken.
SCH-GEN-04-01-B03BerichtactiesBeantwoordenReplyToMessageButtonPrivateMessageThreadParticipants, PrivateMessageThreadsActie beschikbaar op basis van deelnemerstatus en threadstatusActionJaAlleen tonen of activeren bij beantwoordbare privéthreads.
SCH-GEN-04-01-M01Berichtacties — disabled stateVerwijderen niet mogelijkDeleteMessageDisabledMessageBronobjecttype en autorisatiestatusAfgeleide disabled-stateBoolean/displayNeeSysteemberichten mogen niet verwijderbaar worden gemaakt.
SCH-GEN-04-01-S04PrivéthreadtimelineNieuwe berichten / Laatste bericht / Eerdere berichtenMessageThreadTimelineSectionPrivateMessageThreads, PrivateMessages, PrivateMessageThreadEvents, PrivateMessageThreadParticipantsSamengestelde threadtimelineCompositeNeeAlleen data uit dezelfde thread tonen; windowed laden rond #new of #latest.
SCH-GEN-04-01-F09Timeline-markerNieuwe berichten / Eerdere berichten (<aantal>)ThreadTimelineMarkerParticipant-readstate en zichtbaar timelinevensterBerekendString / IntegerNeeMarker dynamisch bepalen; #new en #latest zijn echte pagina-ankers.
SCH-GEN-04-01-T01Threadcontext — lijst<threadtijdlijn>MessageThreadTimelinePrivateMessages + PrivateMessageThreadEvents binnen dezelfde threadSamengestelde collectieCollectionNeeSorteer volgens functionele threadweergave; geen berichten uit andere threads tonen.
SCH-GEN-04-01-M02Threadcontext — threadevent<actor> veranderde het onderwerp van <oud> naar <nieuw>ThreadEventSystemBubblePrivateMessageThreadEvents.EventType, ActorUserId, OldValue, NewValue, OccurredAtUtc, UsersDatabasewaarde en afgeleide rendertekstEvent displayNeeEvent is geen SystemMessages-record en geen PrivateMessages-record; tekst veilig opbouwen en sanitizen.
SCH-GEN-04-01-M03Threadcontext — bericht van ander<datum> · <tijd> (<naam>)ThreadMessageBubbleOtherPrivateMessages.SenderUserId, PrivateMessages.SentAtUtc, PrivateMessages.Body, UsersDatabasewaarde en afgeleide displaynaamSanitized text/htmlNeeAlleen zichtbaar wanneer bericht bij dezelfde thread hoort en gebruiker participant is.
SCH-GEN-04-01-M04Threadcontext — eigen bericht<datum> · <tijd> (Jij)ThreadMessageBubbleSelfPrivateMessages.SenderUserId, PrivateMessages.SentAtUtc, PrivateMessages.BodyDatabasewaarde en ingelogde gebruikerscontextSanitized text/htmlNeeAlleen als eigen bericht weergeven wanneer SenderUserId overeenkomt met ingelogde gebruiker of volgens namens-regel functioneel zo getoond moet worden.
SCH-GEN-04-01-M05FoutstaatBericht niet beschikbaarOpenMessageUnavailableMessageAutorisatieservice, berichtservice en routecontextAfgeleide foutstaatMessageNeeGeen GUID's, thread-id's, databasefouten of stacktraces tonen.
SCH-GEN-04-01-A01Leesstatus bij openenGeen zichtbaar labelMarkThreadReadOnOpenActionPrivateMessageThreadParticipants.LastReadMessageId, PrivateMessageThreadParticipants.LastReadAtUtc, SystemMessages.ReadAtUtcRuntime mutatie bij openenActionJaAlleen eigen leesstatus muteren; andere deelnemers niet beïnvloeden.

4.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-04-01-01SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Een geopend privébericht als zelfstandige pagina tonen binnen de ingelogde berichtencontext
REQ-SCH-GEN-04-01-02SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Het systeem mag een privébericht alleen tonen wanneer de ingelogde gebruiker deelnemer is aan de betreffende privébericht-thread
REQ-SCH-GEN-04-01-03SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Het systeem mag een privébericht-thread niet tonen wanneer de thread voor de ingelogde gebruiker uit de eigen mailbox is verwijderd
REQ-SCH-GEN-04-01-04SRS-MSG-002
SRS-MSG-003
AC-MSG-002
AC-MSG-003
Bij een geopend privébericht minimaal type, afzender, ontvanger, ontvangstmoment, onderwerp en volledige berichtinhoud tonen
REQ-SCH-GEN-04-01-05SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Zichtbare namen, tijden, onderwerpen en berichtinhoud dynamisch uit de bericht- en threadcontext afleiden en mag mockupwaarden niet hardcoded gebruiken
REQ-SCH-GEN-04-01-06SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Het openen van een privébericht de leespositie van de ingelogde deelnemer bijwerken zonder leesstatus van andere deelnemers te wijzigen
REQ-SCH-GEN-04-01-07SRS-MSG-002
SRS-MSG-007
AC-MSG-002
AC-MSG-007
Het openen van een systeembericht uitsluitend SystemMessages.ReadAtUtc van het betreffende systeembericht voor de ingelogde ontvanger bijwerken
REQ-SCH-GEN-04-01-08SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Berichtinhoud met rich text alleen gerenderd tonen nadat de inhoud server-side is gesanitized en veilig geëncodeerd
REQ-SCH-GEN-04-01-09SRS-AUTH-004
SRS-MSG-001
AC-AUTH-004
AC-MSG-001
Het systeem mag in het geopende bericht geen technische identifiers zoals GUID's, message-id's, thread-id's of entity-id's zichtbaar tonen
REQ-SCH-GEN-04-01-10SRS-MSG-001
AC-MSG-001
De actie Terug naar berichten de gebruiker terugbrengen naar het centrale berichtenoverzicht
REQ-SCH-GEN-04-01-11SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
De actie Beantwoorden alleen beschikbaar zijn voor privéthreads waarin de gebruiker actief mag deelnemen en waarop functioneel nog gereageerd mag worden
REQ-SCH-GEN-04-01-12SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
De actie Beantwoorden het scherm Beantwoord bericht openen met de juiste threadcontext
REQ-SCH-GEN-04-01-13SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
De actie Gesprek verlaten bij privéberichten uitsluitend de zichtbaarheid voor de eigen participantregel verwijderen en mag de thread of berichten niet voor andere deelnemers verwijderen
REQ-SCH-GEN-04-01-14SRS-MSG-001
SRS-MSG-007
AC-MSG-001
AC-MSG-007
Systeemberichten geen door de gebruiker worden verwijderd en mogen daarom geen actieve verwijderactie krijgen
REQ-SCH-GEN-04-01-15SRS-MSG-001
SRS-MSG-007
AC-MSG-001
AC-MSG-007
Voor een systeembericht dezelfde leesweergave kunnen worden gebruikt, maar zonder antwoordactie en zonder actieve verwijderactie
REQ-SCH-GEN-04-01-16SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Wanneer een systeembericht een EntityType en EntityId bevat, het systeem de vervolgactie uitsluitend op basis van toegestane domeinverwijzing en actuele autorisatie bepalen
REQ-SCH-GEN-04-01-17SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Onder het geopende privébericht het systeem, indien aanwezig, de zichtbare threadcontext van dezelfde conversatie kunnen tonen
REQ-SCH-GEN-04-01-18SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
De threadcontext mag uitsluitend berichten en threadevents tonen die bij dezelfde privébericht-thread horen
REQ-SCH-GEN-04-01-19SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
De threadcontext berichten als compacte berichtballonnen kunnen weergeven met onderscheid tussen berichten van de ingelogde gebruiker en berichten van andere deelnemers
REQ-SCH-GEN-04-01-20SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
De privéthreadtimeline van oud naar nieuw kunnen tonen binnen het geladen venster
REQ-SCH-GEN-04-01-21SRS-RDM-007
SRS-RDM-002
SRS-RDM-001
SRS-MSG-001
SRS-MSG-003
AC-RDM-007
AC-RDM-002
AC-RDM-001
AC-MSG-001
AC-MSG-003
De marker Nieuwe berichten of Eerdere berichten dynamisch bepalen vanuit participant-readstate en timelinevenster
REQ-SCH-GEN-04-01-22SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Threadgebeurtenissen geen als gewone privéberichten worden geteld, tenzij later expliciet een afwijkende telregel wordt vastgesteld
REQ-SCH-GEN-04-01-23SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Threadgebeurtenissen zoals onderwerpwijziging, deelnemer toegevoegd en deelnemer verlaten als neutrale systeemballon binnen de thread kunnen tonen, met visueel onderscheid ten opzichte van gewone linker- en rechterberichtballonnen, met visueel onderscheid ten opzichte van gewone linker- en rechterberichtballonnen
REQ-SCH-GEN-04-01-24SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Threadgebeurtenissen binnen een privéthread geen worden opgeslagen of behandeld als losse mailbox-systeemberichten
REQ-SCH-GEN-04-01-25SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Threadgebeurtenissen binnen een privéthread geen worden opgeslagen of behandeld als gewone privéberichten
REQ-SCH-GEN-04-01-26SRS-NFR-AUD-001
SRS-MSG-001
AC-NFR-AUD-001
AC-MSG-001
Bij een onderwerpwijziging de threadgebeurtenis minimaal de actor, oude waarde, nieuwe waarde en het gebeurtenismoment kunnen tonen
REQ-SCH-GEN-04-01-27SRS-NFR-AUD-001
SRS-MSG-001
AC-NFR-AUD-001
AC-MSG-001
Alleen relevante onderdelen van een threadgebeurtenis, zoals actor en oude of nieuwe onderwerpwaarde, mogen visueel nadruk krijgen
REQ-SCH-GEN-04-01-28SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Renderbare tekst binnen threadgebeurtenissen server-side veilig worden opgebouwd, gesanitized en consistent gerenderd
REQ-SCH-GEN-04-01-29SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Nieuwe threadgebeurtenissen na de laatst bekende leespositie kunnen bijdragen aan de ongelezenstatus van de thread
REQ-SCH-GEN-04-01-30SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Wanneer er geen zichtbare privéthreaditems zijn, een compacte lege staat tonen zonder technische details
REQ-SCH-GEN-04-01-31SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Toegang tot bericht, thread, threadberichten, threadevents, antwoordactie, verwijderactie en vervolgactie server-side worden gecontroleerd
REQ-SCH-GEN-04-01-32SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Wanneer het bericht niet bestaat of de gebruiker geen toegang heeft, het systeem een nette niet-beschikbaarmelding tonen zonder technische foutdetails
REQ-SCH-GEN-04-01-33SRS-MSG-001
AC-MSG-001
Datum- en tijdwaarden uit UTC-bronwaarden lokaal en consistent worden weergegeven
REQ-SCH-GEN-04-01-34SRS-MSG-001
AC-MSG-001
Header, algemene navigatie, profielknop en footer geen als functionele UI-elementen van dit schermdocument worden beschouwd

4.3.1 Relatie-uitnodiging als berichtactie

Wanneer een systeembericht naar een relatie-uitnodiging verwijst, staat het actieblok binnen de witte berichtkaart onder de berichttekst. Openstaande uitnodigingen tonen alleen de relevante beslissingacties. Is de uitnodiging al behandeld, ingetrokken of verlopen, dan verdwijnen de acceptatie- en weigerknoppen en toont het blok een duidelijke statusmelding zoals Deze uitnodiging is al behandeld of Deze uitnodiging is verlopen.

Het detail toont geen technische statusregel zoals Status: Openstaand, geen ontvangerregel en geen extra relatietypebadge wanneer de context al uit de berichttekst en actiekaart blijkt.

De helptekst bij een relatie-uitnodiging is relatietype-afhankelijk en kindvriendelijk. Voor vriendschap ligt de nadruk op oefeningen delen en privéberichten; andere relatietypen gebruiken hun eigen veilige uitleg.

4.7 Technische koppeling

Voor technische uitwerking zijn vooral relevant: