5. Beantwoord bericht
5.0 Actuele status na Batch 6
De oorspronkelijke mockup voor Beantwoord bericht blijft een visuele bron voor de editor, toolbar en gesprekcontext, maar de actuele Batch 6-UX gebruikt geen zelfstandige replypagina meer als normale gebruikersflow. Beantwoorden gebeurt inline onderaan de privéthreaddetailpagina (/messages/thread/{threadId}), direct onder de chronologische timeline.
De route /messages/thread/{threadId}/reply mag technisch blijven bestaan als fallback voor oude links of race-situaties, maar mag geen volwaardige reply-GUI meer tonen. Zij redirectt naar de normale threadpagina met #latest en gebruikt daar de inline composer en dezelfde statusmeldinglogica.
De inline composer bevat standaard alleen het berichtveld, een compacte toolbar en een ?-knop met uitleg over veilige opmaak, lijsten, Enter/Shift+Enter, HTML/JavaScript-blokkade en emoji's. Het onderwerp wordt niet meer in het replyblok aangepast; onderwerp wijzigen gebeurt via Gespreksopties in de sticky threadkop.
5.1 Schermafbeelding

5.2 Scherm meta data
| Veld | Waarde |
|---|---|
| Scherm-ID | SCH-GEN-05-01 |
| Schermnaam | Berichten — beantwoord bericht |
| Doelgroep / onderdeel | Generiek |
| Bronbestand | oefenhub_generiek_04_beantwoord_bericht_v2_6.html |
| Mockupversie | V2.6 |
| Screenshotbestand | oefenhub_generiek_04_beantwoord_bericht_v2_6.png |
| Processtap / context | Ingelogde gebruiker beantwoordt een bestaand privébericht binnen een privébericht-thread. |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende database-informatie. |
| Opmerkingen | Header, categorienavigatie, profielknop en footer in de screenshot vallen buiten scope van dit schermdocument. Zichtbare namen, tijden, onderwerpteksten en berichtinhoud zijn dynamische voorbeeldwaarden. |
| Route / URL-patroon | /berichten/{threadId}/beantwoorden |
| Autorisatie / vereiste rol-context | Ingelogde gebruiker die deelnemer is van de betreffende privébericht-thread en deze thread in de eigen mailboxcontext mag beantwoorden. |
| Primair domeinobject / hoofdentiteit | PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages en PrivateMessageThreadEvents. |
| Gerelateerde schermen / navigatie | 02_berichten_overzicht, 03_nieuw_privebericht, 04_open_bericht. |
| Data-karakter | Mutatiepagina voor het toevoegen van een antwoordbericht, gecombineerd met een read-only weergave van de bestaande threadtijdlijn. |
5.3 Functionele beschrijving
Het scherm Berichten — beantwoord bericht ondersteunt het beantwoorden van een bestaand privébericht binnen dezelfde conversatie. De gebruiker ziet bovenaan het antwoordformulier en daaronder de bestaande thread, zodat tijdens het schrijven van een antwoord de context van het gesprek zichtbaar blijft.
De pagina is alleen bedoeld voor privébericht-threads. Systeemberichten gebruiken wel een vergelijkbare leesweergave in Open bericht, maar kennen geen reguliere antwoordactie. Een antwoord wordt opgeslagen als nieuw record binnen PrivateMessages en blijft onderdeel van de bestaande PrivateMessageThreads-context.
De pagina bestaat uit:
- breadcrumb Home > Berichten > Beantwoord bericht;
- titel en korte toelichting;
- antwoordformulier met onderwerp, berichteditor en acties;
- rich-text toolbar met beperkte opmaakopties;
- actie Annuleren;
- actie Verstuur bericht;
- read-only threadweergave met eerdere berichten;
- read-only threadgebeurtenissen, zoals een onderwerpwijziging.
5.3.1 Scope van dit schermdocument
Dit schermdocument beschrijft de inhoudelijke replycomponent op de privéthreaddetailpagina. De globale header, categorienavigatie, profielknop en footer vallen buiten scope. De zichtbare berichtbadge in de header wordt functioneel beschreven bij het berichtenoverzicht, niet op deze component.
5.3.2 Interpretatie van mockupwaarden
Alle zichtbare waarden in de mockup zijn dynamisch. Voorbeelden zoals Emma, Sanne de Vries, Goed bezig met optellen, Vandaag · 12:08 en de getoonde berichtteksten zijn representatieve mockupwaarden en geen vaste productiegegevens.
De echte waarden worden per thread opgebouwd uit:
- de ingelogde gebruiker;
- de geselecteerde privébericht-thread;
- de deelnemers aan die thread;
- de laatst bekende threadmetadata;
- de opgeslagen privéberichten;
- de opgeslagen threadgebeurtenissen;
- lokale datum- en tijdweergave op basis van UTC-bronwaarden.
5.3.3 Antwoordformulier
Het inline antwoordblok staat onderaan de threadweergave. Het formulier bevat alleen het veld Bericht, een compacte toolbar en een ?-helpactie. Het onderwerp wordt via Gespreksopties beheerd.
Het inline replyblok bevat geen onderwerpveld meer. Het actuele onderwerp staat in de sticky threadkop en kan alleen via Gespreksopties worden aangepast wanneer de gebruiker nog met minimaal één andere actieve deelnemer in het gesprek zit. Een onderwerpwijziging wordt als SubjectChanged-threadevent vastgelegd en niet als los systeembericht of gewoon privébericht.
Het veld Bericht bevat de tekst van het nieuwe antwoord. De gebruiker kan beperkte opmaak toepassen via de toolbar. Ondersteunde opmaak is functioneel beperkt tot vet, cursief, onderstreept, tekstgrootte, opsommingslijst en genummerde lijst. Vrije HTML, JavaScript, scripts, inline eventhandlers en vergelijkbare actieve inhoud zijn niet toegestaan. De invoer wordt server-side gesanitized voordat opslag of rendering plaatsvindt.
Het antwoord wordt pas opgeslagen wanneer de gebruiker Verstuur bericht kiest. Niet-verzonden antwoorden worden binnen deze schermflow niet tussentijds opgeslagen.
5.3.4 Actie Annuleren
De actie Annuleren of het verlaten van het veld breekt het beantwoorden af zonder een nieuw privébericht op te slaan. Niet-verzonden berichtinhoud wordt niet duurzaam bewaard.
5.3.5 Actie Verstuur bericht
De actie Verstuur bericht voert server-side de volledige verzendmutatie uit. Minimaal gebeurt daarbij het volgende:
- controleren of de ingelogde gebruiker de thread mag beantwoorden;
- controleren of privéberichten sitebreed beschikbaar zijn;
- valideren van onderwerp en berichtinhoud;
- sanitizen van rich-text inhoud;
- indien nodig bijwerken van
PrivateMessageThreads.Subject; - indien nodig vastleggen van een
PrivateMessageThreadEvents-record voor de onderwerpwijziging; - aanmaken van een nieuw
PrivateMessages-record; - bijwerken van
PrivateMessageThreads.LastMessageAtUtc; - bijwerken van de leespositie van de verzendende deelnemer;
- markeren van de nieuwe activiteit als ongelezen voor andere relevante deelnemers;
- beschikbaar maken van de update voor realtime verwerking, waar ondersteund.
De verzendactie mag niet uitsluitend op frontendvalidatie vertrouwen. De backend controleert autorisatie, threadstatus, participantstatus en invoer opnieuw.
5.3.6 Bestaande thread onder het antwoordformulier
Onder het antwoordformulier staat de bestaande thread van de conversatie. De threadweergave is read-only en geeft de gebruiker context tijdens het beantwoorden.
De thread toont normale privéberichten als berichtballonnen. Berichten van de andere deelnemer worden visueel anders gepositioneerd dan berichten van de ingelogde gebruiker. De zichtbare labels zoals Jij en de namen van andere deelnemers zijn afgeleide displaywaarden en worden opgebouwd vanuit de deelnemers- en gebruikerscontext.
De thread wordt gesorteerd van oud naar nieuw binnen het geladen venster. Het antwoordformulier staat onderaan de gewone threaddetailpagina, onder de nieuwste zichtbare activiteit. De gebruiker leest dus eerst het gesprek en typt daarna onderaan een reactie.
5.3.7 Threadgebeurtenissen
Binnen de thread kunnen systeemachtige regels voorkomen, bijvoorbeeld wanneer het onderwerp is gewijzigd of wanneer een deelnemer de thread heeft verlaten. Deze regels worden opgeslagen in PrivateMessageThreadEvents.
Een threadgebeurtenis:
- hoort functioneel bij de privébericht-thread;
- is geen
SystemMessages-record; - is geen
PrivateMessages-record; - wordt weergegeven als neutrale systeemballon tussen de gewone berichten, met een eigen visueel onderscheid ten opzichte van linker- en rechterberichtballonnen;
- telt mee in de threadtijdlijn;
- kan bijdragen aan de ongelezenstatus van de thread wanneer de gebeurtenis na de laatst gelezen positie van een deelnemer plaatsvindt.
In de mockup is dit zichtbaar als een neutrale regel waarin wordt getoond dat een gebruiker het onderwerp heeft gewijzigd van Lekker bezig naar Goed bezig met optellen. De waarden in die regel komen uit PrivateMessageThreadEvents.ActorUserId, OldValue, NewValue en OccurredAtUtc. Wanneer de gebeurtenis logisch samenhangt met een nieuw bericht of een onderwerpwijziging bij een antwoord, staat de systeemballon in de threadtijdlijn zodanig dat de context vóór het bijbehorende bericht zichtbaar blijft. Wanneer de gebeurtenis logisch samenhangt met een nieuw bericht of een onderwerpwijziging bij een antwoord, staat de systeemballon in de threadtijdlijn zodanig dat de context vóór het bijbehorende bericht zichtbaar blijft.
5.3.8 Leesstatus
Het openen van de gewone threadpagina toont de bestaande threadcontext. De gebruiker heeft daarmee de zichtbare threaditems gelezen. De leespositie van de ingelogde deelnemer moet daarom zodanig worden bijgewerkt dat getoonde privéberichten en threadgebeurtenissen niet onterecht ongelezen blijven.
Voor normale privéberichten gebruikt de participantlaag minimaal LastReadMessageId en LastReadAtUtc. Voor threadgebeurtenissen is LastReadAtUtc relevant omdat gebeurtenissen geen PrivateMessages.Id hebben.
5.3.9 Autorisatie en beveiliging
De gebruiker mag deze pagina alleen openen en gebruiken wanneer server-side is vastgesteld dat:
- de gebruiker is ingelogd;
- de gebruiker deelnemer is van de betreffende
PrivateMessageThreads-record; - de participantregel van de gebruiker niet uit de eigen mailboxcontext verwijderd is;
- de thread functioneel nog beantwoordbaar is;
- de privéberichtenfunctionaliteit sitebreed beschikbaar is;
- de verzendactie past binnen de geldende relatie-, deelnemer- en mailboxregels.
Frontend-zichtbaarheid is geen beveiliging. Ook wanneer iemand een route of thread-id handmatig probeert te openen, moet de backend controleren of de gebruiker deelnemer is en de thread mag beantwoorden.
5.3.10 Leegstaten, foutstaten en disabled states
Relevante toestanden:
- Bericht ontbreekt: verzenden wordt geblokkeerd en het berichtveld krijgt een validatiemelding.
- Berichtinhoud ontbreekt: verzenden wordt geblokkeerd en het berichtveld krijgt een validatiemelding.
- Alleen ongeldige of lege opmaak: na sanitizing moet inhoud overblijven; anders geldt het bericht als leeg.
- Privéberichten uitgeschakeld: het antwoordformulier wordt niet bruikbaar gemaakt en de gebruiker krijgt een functionele melding.
- Thread niet toegankelijk: de pagina toont geen threadinhoud en geeft een toegangs- of niet-beschikbaarmelding.
- Thread niet meer beantwoordbaar: verzenden is uitgeschakeld of wordt server-side geweigerd.
- Gelijktijdige onderwerpwijziging: de server valideert tegen de actuele threadstatus en voorkomt dat een oudere schermstaat onbedoeld de actuele onderwerpwaarde overschrijft.
- Verzendfout: het bericht blijft zichtbaar in het invoerveld zodat de gebruiker opnieuw kan proberen na een foutmelding.
5.4 UI-elementen en velddefinities
| Element-ID | Type | GUI-verwijzing | Omschrijving | Zichtbaar label | Opmerking | Technische naam |
|---|---|---|---|---|---|---|
| SCH-GEN-05-01-N01 | A | Breadcrumb | Navigatiepad naar de gewone threadpagina met inline antwoordblok. | Home > Berichten > Beantwoord bericht | Header en footer vallen buiten scope; breadcrumb hoort bij de pagina-inhoud. | ReplyMessageBreadcrumb |
| SCH-GEN-05-01-S01 | S | Hoofdkaart | Inline replycontainer binnen de gewone threadpagina. | Beantwoord bericht | Bevat compact berichtveld, toolbar, helpmodal en verzendactie. | ReplyMessageShell |
| SCH-GEN-05-01-S02 | S | Paginakop | Titel en korte toelichting bij het beantwoorden. | Beantwoord bericht | Read-only schermtekst. | ReplyMessageHeaderSection |
| SCH-GEN-05-01-F01 | F | Paginakop — titel | Titel van de pagina. | Beantwoord bericht | Codegedreven of via contentbeheer als dit later voor generieke pagina’s geldt. | ReplyMessagePageTitle |
| SCH-GEN-05-01-F02 | F | Paginakop — toelichting | Beschrijft dat een antwoord binnen dezelfde conversatie wordt verstuurd. | Stuur een antwoord binnen dezelfde conversatie. Het antwoordveld staat bovenaan en de bestaande thread blijft daaronder zichtbaar. | Read-only begeleidende tekst. | ReplyMessageIntroText |
| SCH-GEN-05-01-FORM01 | FORM | Antwoordkaart | Formulier voor het aanmaken van een nieuw privébericht binnen de bestaande thread. | Bericht beantwoorden | Mutatieformulier; gegevens worden pas bij verzenden opgeslagen. | ReplyMessageForm |
| SCH-GEN-05-01-F03 | F | Antwoordkaart — onderwerp | Geen apart onderwerpveld in de inline replycomposer. | Niet zichtbaar | Niet van toepassing; onderwerp staat in threadkop/Gespreksopties. | ReplySubject |
| SCH-GEN-05-01-F04 | F | Antwoordkaart — bericht | Editorveld voor de inhoud van het antwoord. | Bericht | Verplicht; rich text wordt server-side gesanitized. | ReplyBody |
| SCH-GEN-05-01-S03 | S | Toolbar | Groepeert de beschikbare opmaakopties voor het berichtveld. | Opmaakopties | Alleen beperkte veilige opmaak. | ReplyFormattingToolbar |
| SCH-GEN-05-01-B01 | B | Toolbar | Zet geselecteerde tekst vet. | B | Opmaakknop; geen eigen domeindata. | ApplyBoldFormattingButton |
| SCH-GEN-05-01-B02 | B | Toolbar | Zet geselecteerde tekst cursief. | I | Opmaakknop; geen eigen domeindata. | ApplyItalicFormattingButton |
| SCH-GEN-05-01-B03 | B | Toolbar | Onderstreept geselecteerde tekst. | U | Opmaakknop; geen eigen domeindata. | ApplyUnderlineFormattingButton |
| SCH-GEN-05-01-F05 | F | Toolbar | Selectie voor toegestane tekstgrootte. | Tekstgrootte | Alleen vooraf toegestane waarden. | ReplyTextSizeSelect |
| SCH-GEN-05-01-B04 | B | Toolbar | Maakt of wijzigt een opsommingslijst. | • Lijst | Opmaakknop; resultaat wordt als veilige rich text opgeslagen. | ApplyBulletListButton |
| SCH-GEN-05-01-B05 | B | Toolbar | Maakt of wijzigt een genummerde lijst. | 1. Lijst | Opmaakknop; resultaat wordt als veilige rich text opgeslagen. | ApplyNumberedListButton |
| SCH-GEN-05-01-A01 | A | Antwoordkaart — acties | Breekt beantwoorden af zonder opslag. | Annuleren | Niet-verzonden invoer wordt niet bewaard. | CancelReplyAction |
| SCH-GEN-05-01-A02 | A | Antwoordkaart — acties | Verzendt het antwoord binnen de bestaande thread. | Verstuur bericht | Voert server-side validatie, autorisatie en opslag uit. | SendReplyAction |
| SCH-GEN-05-01-S04 | S | Threadpaneel | Read-only weergave van de bestaande conversatiethread als één timeline. | Conversatiethread | Staat onder het antwoordformulier en volgt dezelfde oud-naar-nieuw weergave als de threaddetailpagina. | ConversationThreadPanel |
| SCH-GEN-05-01-T01 | T | Threadpaneel — lijst | Herhalende lijst met threaditems. | Threaditems | Bevat normale berichten en threadgebeurtenissen. | ConversationThreadItemList |
| SCH-GEN-05-01-M01 | M | Threadpaneel — systeemballon | Neutrale weergave van een threadgebeurtenis. | <gebruiker> veranderde het onderwerp van <oud> naar <nieuw> | Geen los systeembericht en geen normaal privébericht; visueel onderscheidbaar van gewone berichtballonnen. | ThreadEventSystemBubble |
| SCH-GEN-05-01-F06 | F | Threadbericht — header | Datum/tijd en afzender van een normaal privébericht. | <datum> · <tijd> (<afzender>) | Dynamisch opgebouwd. | ThreadMessageHeader |
| SCH-GEN-05-01-F07 | F | Threadbericht — inhoud | Inhoud van een normaal privébericht. | <berichtinhoud> | Read-only; veilig gerenderd. | ThreadMessageBody |
| SCH-GEN-05-01-M02 | M | Validatie / foutmelding | Toont functionele meldingen bij ongeldige invoer, geen toegang of verzendfouten. | <melding> | Alleen zichtbaar wanneer een melding relevant is. | ReplyMessageFeedback |
5.5 Waardelagen
| Element-ID | GUI-verwijzing | Zichtbaar label | Technische naam | Databron | Waardebron | Datatype | Bewerkbaar | Validatie / regel |
|---|---|---|---|---|---|---|---|---|
| SCH-GEN-05-01-N01 | Breadcrumb | Home > Berichten > Beantwoord bericht | ReplyMessageBreadcrumb | Routeconfiguratie | Afgeleid uit huidige route en berichtenmodule | Navigation label | Nee | Geen technische GUID’s zichtbaar tonen. |
| SCH-GEN-05-01-S01 | Hoofdkaart | Beantwoord bericht | ReplyMessageShell | Codegedreven layout + geselecteerde threadcontext | Samengesteld schermobject | Composite | Nee | Alleen laden wanneer autorisatie op threadniveau slaagt. |
| SCH-GEN-05-01-F01 | Paginakop — titel | Beantwoord bericht | ReplyMessagePageTitle | Codegedreven schermlabel of contentblok indien beheerbaar gemaakt | Weergavetekst | String | Nee | Geen functionele data-afhankelijkheid. |
| SCH-GEN-05-01-F02 | Paginakop — toelichting | Stuur een antwoord binnen dezelfde conversatie. | ReplyMessageIntroText | Codegedreven schermtekst of contentblok indien beheerbaar gemaakt | Weergavetekst | String | Nee | Tekst mag niet suggereren dat een nieuwe conversatie wordt gestart. |
| SCH-GEN-05-01-FORM01 | Antwoordkaart | Bericht beantwoorden | ReplyMessageForm | PrivateMessageThreads, PrivateMessageThreadParticipants, SiteFeatureToggles | Samengesteld formulier voor bestaande thread | Form state | Ja | Alleen beschikbaar voor actieve deelnemer binnen een beantwoordbare thread en wanneer PrivateMessagingEnabled actief is. |
| SCH-GEN-05-01-F03 | Onderwerp | Niet zichtbaar | ReplySubject | PrivateMessageThreads.Subject | Alleen getoond in threadkop/Gespreksopties | String | Nee | Niet bewerkbaar via reply; onderwerpwijziging loopt via Gespreksopties. |
| SCH-GEN-05-01-F04 | Bericht | Bericht | ReplyBody | Gebruikersinput, opslag in PrivateMessages.Body | User input | Sanitized rich text / string | Ja | Verplicht; na sanitizing moet inhoud overblijven; vrije HTML en actieve inhoud zijn niet toegestaan. |
| SCH-GEN-05-01-S03 | Toolbar | Opmaakopties | ReplyFormattingToolbar | Editorstate | Runtime state | UI state | Ja | Alleen toegestane opmaakcommando’s tonen. |
| SCH-GEN-05-01-B01 | Toolbar | B | ApplyBoldFormattingButton | Editorstate | Runtime state | Action | Ja | Mag alleen veilige vetopmaak produceren. |
| SCH-GEN-05-01-B02 | Toolbar | I | ApplyItalicFormattingButton | Editorstate | Runtime state | Action | Ja | Mag alleen veilige cursieve opmaak produceren. |
| SCH-GEN-05-01-B03 | Toolbar | U | ApplyUnderlineFormattingButton | Editorstate | Runtime state | Action | Ja | Mag alleen veilige onderstreepte opmaak produceren. |
| SCH-GEN-05-01-F05 | Toolbar | Tekstgrootte | ReplyTextSizeSelect | Editorconfiguratie | Runtime state / toegestane waarden | Enum/string | Ja | Alleen toegestane tekstgroottes; geen vrije CSS-waarde opslaan. |
| SCH-GEN-05-01-B04 | Toolbar | • Lijst | ApplyBulletListButton | Editorstate | Runtime state | Action | Ja | Mag alleen veilige lijststructuur produceren. |
| SCH-GEN-05-01-B05 | Toolbar | 1. Lijst | ApplyNumberedListButton | Editorstate | Runtime state | Action | Ja | Mag alleen veilige genummerde lijststructuur produceren. |
| SCH-GEN-05-01-A01 | Acties | Annuleren | CancelReplyAction | Huidige form state | User action | Action | Ja | Breekt af zonder opslag van bericht of onderwerpwijziging. |
| SCH-GEN-05-01-A02 | Acties | Verstuur bericht | SendReplyAction | PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages, PrivateMessageThreadEvents, Users, SiteFeatureToggles | User action met server-side opslag | Action | Ja | Alleen uitvoeren na autorisatie, validatie en sanitizing; verzending gebeurt binnen bestaande thread. |
| SCH-GEN-05-01-S04 | Threadpaneel | Conversatiethread | ConversationThreadPanel | PrivateMessageThreads, PrivateMessages, PrivateMessageThreadEvents, Users | Samengestelde read-only threadtijdlijn | Composite | Nee | Alleen berichten en events uit de geautoriseerde thread tonen. |
| SCH-GEN-05-01-T01 | Threadlijst | Threaditems | ConversationThreadItemList | PrivateMessages.SentAtUtc, PrivateMessageThreadEvents.OccurredAtUtc | Berekende tijdlijn | Collection | Nee | Sortering oud naar nieuw binnen het geladen venster; events blijven binnen dezelfde threadtimeline. |
| SCH-GEN-05-01-M01 | Systeemballon | <gebruiker> veranderde het onderwerp van <oud> naar <nieuw> | ThreadEventSystemBubble | PrivateMessageThreadEvents.EventType, ActorUserId, OldValue, NewValue, OccurredAtUtc, Users | Database + afgeleide displaytekst | Event display | Nee | Alleen eventtypes tonen die de gebruiker binnen deze thread mag zien; renderbare waarden veilig verwerken. |
| SCH-GEN-05-01-F06 | Threadbericht — header | <datum> · <tijd> (<afzender>) | ThreadMessageHeader | PrivateMessages.SentAtUtc, PrivateMessages.SenderUserId, PrivateMessages.SendAsUserId, Users | Database + lokale tijdweergave + displaynaam | String / DateTime display | Nee | UTC-bronwaarden lokaal tonen; Jij tonen voor de ingelogde afzender. |
| SCH-GEN-05-01-F07 | Threadbericht — inhoud | <berichtinhoud> | ThreadMessageBody | PrivateMessages.Body, PrivateMessages.BodyFormat | Databasewaarde | Sanitized rich text / string | Nee | Alleen gesanitized inhoud renderen; geen scripts of actieve inhoud uitvoeren. |
| SCH-GEN-05-01-M02 | Validatie / foutmelding | <melding> | ReplyMessageFeedback | Servervalidatie, clientvalidatie en autorisatieresultaat | Runtime state | Message | Nee | Melding moet begrijpelijk zijn en mag geen technische identifiers of stacktraces tonen. |
| SCH-GEN-05-01-F08 | Leesstatus | Niet zichtbaar als apart veld | ParticipantReadState | PrivateMessageThreadParticipants.LastReadMessageId, PrivateMessageThreadParticipants.LastReadAtUtc, PrivateMessages, PrivateMessageThreadEvents | Afgeleid en bijgewerkt bij openen/tonen | DateTime / GUID | Nee | Zichtbare threaditems mogen niet onterecht ongelezen blijven na openen van deze pagina. |
| SCH-GEN-05-01-F09 | Featurestatus | Niet zichtbaar bij actieve feature | PrivateMessagingEnabled | SiteFeatureToggles.FeatureKey = PrivateMessagingEnabled, SiteFeatureToggles.IsEnabled | Configuratiewaarde | Boolean | Nee | Bij uitgeschakelde feature geen antwoord laten verzenden. |
5.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.
| Schermrequirement | Dekt | Schermcontext |
|---|---|---|
REQ-SCH-GEN-05-01-01 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Een ingelogde gebruiker een bestaande privébericht-thread kunnen laten beantwoorden via de inline composer op de threaddetailpagina |
REQ-SCH-GEN-05-01-02 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Het systeem mag de inline composer uitsluitend tonen wanneer de ingelogde gebruiker deelnemer is van de betreffende privébericht-thread en er minimaal één andere actieve deelnemer is |
REQ-SCH-GEN-05-01-03 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Server-side controleren of de participantregel van de gebruiker beantwoordbaar is en niet uit de eigen mailboxcontext verwijderd is |
REQ-SCH-GEN-05-01-04 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | De verzendactie blokkeren wanneer de privéberichtenfunctionaliteit sitebreed is uitgeschakeld |
REQ-SCH-GEN-05-01-05 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Geen apart onderwerpveld tonen in de inline replycomposer |
REQ-SCH-GEN-05-01-06 | SRS-MSG-001 AC-MSG-001 | Onderwerpwijziging alleen via Gespreksopties toestaan, niet via het replyblok |
REQ-SCH-GEN-05-01-07 | SRS-MSG-002 SRS-MSG-003 AC-MSG-002 AC-MSG-003 | Wanneer het onderwerp bij verzenden wijzigt, het systeem het actuele threadonderwerp bijwerken en een PrivateMessageThreadEvents-record met eventtype SubjectChanged vastleggen |
REQ-SCH-GEN-05-01-08 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Een onderwerpwijziging binnen een privéthread geen als los systeembericht en niet als normaal privébericht worden opgeslagen |
REQ-SCH-GEN-05-01-09 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Het antwoord opslaan als nieuw PrivateMessages-record binnen de bestaande PrivateMessageThreads-context |
REQ-SCH-GEN-05-01-10 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Bij verzending PrivateMessages.ThreadId, SenderUserId, SentAtUtc, Body en BodyFormat correct vullen |
REQ-SCH-GEN-05-01-11 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | PrivateMessageThreads.LastMessageAtUtc bijwerken wanneer een normaal privébericht wordt verzonden |
REQ-SCH-GEN-05-01-12 | SRS-MSG-002 AC-MSG-002 | De leespositie van de verzendende deelnemer bijwerken na succesvolle verzending |
REQ-SCH-GEN-05-01-13 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Nieuwe antwoorden en relevante threadgebeurtenissen als ongelezen activiteit kunnen laten meetellen voor andere deelnemers |
REQ-SCH-GEN-05-01-14 | SRS-MSG-001 AC-MSG-001 | Het veld Onderwerp verplicht zijn en mag maximaal 200 tekens bevatten |
REQ-SCH-GEN-05-01-15 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Het veld Bericht verplicht zijn en mag na server-side sanitizing niet leeg zijn |
REQ-SCH-GEN-05-01-16 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Rich-text invoer server-side sanitizen voordat deze wordt opgeslagen of gerenderd |
REQ-SCH-GEN-05-01-17 | SRS-MSG-001 AC-MSG-001 | Het systeem mag vrije HTML, JavaScript, scripts, inline eventhandlers of vergelijkbare actieve inhoud niet opslaan of renderen als uitvoerbare inhoud |
REQ-SCH-GEN-05-01-18 | SRS-MSG-001 AC-MSG-001 | Minimaal de opmaakopties vet, cursief, onderstreept, tekstgrootte, opsommingslijst en genummerde lijst ondersteunen wanneer rich-text opmaak beschikbaar is |
REQ-SCH-GEN-05-01-19 | SRS-MSG-001 AC-MSG-001 | De actie Annuleren het beantwoorden afbreken zonder nieuw bericht, zonder onderwerpwijziging en zonder tussentijdse opslag van niet-verzonden invoer |
REQ-SCH-GEN-05-01-20 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | De actie Verstuur bericht autorisatie, featurestatus, participantstatus, invoervalidatie en sanitizing server-side uitvoeren voordat gegevens worden opgeslagen |
REQ-SCH-GEN-05-01-21 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Onder het antwoordformulier de bestaande threadcontext read-only tonen |
REQ-SCH-GEN-05-01-22 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | De threadweergave normale privéberichten en threadgebeurtenissen in één tijdlijn kunnen tonen |
REQ-SCH-GEN-05-01-23 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | De threadweergave threaditems van oud naar nieuw tonen binnen het geladen venster |
REQ-SCH-GEN-05-01-24 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Berichten van de ingelogde gebruiker visueel kunnen onderscheiden van berichten van andere deelnemers |
REQ-SCH-GEN-05-01-25 | SRS-AUTH-004 SRS-MSG-001 AC-AUTH-004 AC-MSG-001 | Voor de ingelogde afzender een begrijpelijke displaywaarde zoals Jij kunnen tonen zonder technische identifiers zichtbaar te maken |
REQ-SCH-GEN-05-01-26 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Threadgebeurtenissen zoals onderwerpwijzigingen als neutrale, visueel onderscheidbare systeemballon binnen de thread tonen |
REQ-SCH-GEN-05-01-27 | SRS-NFR-AUD-001 SRS-MSG-001 AC-NFR-AUD-001 AC-MSG-001 | Bij een threadgebeurtenis minimaal actor, eventtype, tijdstip en relevante oude en nieuwe waarde kunnen gebruiken voor de displaytekst |
REQ-SCH-GEN-05-01-28 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Renderbare waarden uit threadgebeurtenissen veilig verwerken voordat deze zichtbaar worden in de thread |
REQ-SCH-GEN-05-01-29 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Het openen van de threadpagina de leespositie van de ingelogde deelnemer bijwerken voor de zichtbare threadcontext |
REQ-SCH-GEN-05-01-30 | SRS-AUTH-004 SRS-MSG-001 AC-AUTH-004 AC-MSG-001 | De pagina mag geen technische identifiers zoals ThreadId, PrivateMessageId, EventId of GUID’s zichtbaar tonen |
REQ-SCH-GEN-05-01-31 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Een begrijpelijke melding tonen wanneer de thread niet toegankelijk, niet beantwoordbaar of niet meer beschikbaar is |
REQ-SCH-GEN-05-01-32 | SRS-MSG-002 AC-MSG-002 | Bij een verzendfout het systeem de ingevoerde berichttekst in het formulier behouden zodat de gebruiker opnieuw kan verzenden |
REQ-SCH-GEN-05-01-33 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Gelijktijdige wijzigingen aan het threadonderwerp server-side controleren zodat een oudere schermstaat het actuele onderwerp niet onbedoeld overschrijft |
REQ-SCH-GEN-05-01-34 | SRS-MSG-001 SRS-MSG-003 AC-MSG-001 AC-MSG-003 | Datum- en tijdwaarden in berichten en threadgebeurtenissen vanuit UTC-bronwaarden lokaal en consistent voor de gebruiker worden weergegeven |
REQ-SCH-GEN-05-01-35 | SRS-AUTH-001 SRS-MSG-001 AC-AUTH-001 AC-MSG-001 | Zichtbare namen, onderwerpen, berichtinhoud, datums, tijden en threadgebeurtenissen dynamisch uit de geautoriseerde threadcontext worden opgebouwd |
5.7 Technische koppeling
Voor technische uitwerking zijn vooral relevant:
- 05 Autorisatie, policies en server-side contextcontrole voor het controleren of de gebruiker deelnemer is aan de thread voordat antwoorden worden geladen of opgeslagen.
- 13 Berichten, systeemberichten, notificaties en privéberichten voor antwoordopslag, threadactiviteit, leesstatus en deelnemerszichtbaarheid.
- 17 Readmodels, tellers, badges, caching en materialisatie voor tellerbijwerking na antwoord- en leesmutaties.
- 20 Security, infrastructuur, secrets en omgevingen voor veilige verwerking van berichttekst en bescherming tegen actieve content.
- 24 Frontend, Blazor, routing, state en componentopbouw voor antwoordformulier, disabled states, foutmeldingen en terugnavigatie.