Skip to main content

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

oefenhub_generiek_04_beantwoord_bericht_v2_6.png

5.2 Scherm meta data

VeldWaarde
Scherm-IDSCH-GEN-05-01
SchermnaamBerichten — beantwoord bericht
Doelgroep / onderdeelGeneriek
Bronbestandoefenhub_generiek_04_beantwoord_bericht_v2_6.html
MockupversieV2.6
Screenshotbestandoefenhub_generiek_04_beantwoord_bericht_v2_6.png
Processtap / contextIngelogde gebruiker beantwoordt een bestaand privébericht binnen een privébericht-thread.
DocumentatiestatusUitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en ondersteunende database-informatie.
OpmerkingenHeader, 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-contextIngelogde gebruiker die deelnemer is van de betreffende privébericht-thread en deze thread in de eigen mailboxcontext mag beantwoorden.
Primair domeinobject / hoofdentiteitPrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages en PrivateMessageThreadEvents.
Gerelateerde schermen / navigatie02_berichten_overzicht, 03_nieuw_privebericht, 04_open_bericht.
Data-karakterMutatiepagina 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:

  1. controleren of de ingelogde gebruiker de thread mag beantwoorden;
  2. controleren of privéberichten sitebreed beschikbaar zijn;
  3. valideren van onderwerp en berichtinhoud;
  4. sanitizen van rich-text inhoud;
  5. indien nodig bijwerken van PrivateMessageThreads.Subject;
  6. indien nodig vastleggen van een PrivateMessageThreadEvents-record voor de onderwerpwijziging;
  7. aanmaken van een nieuw PrivateMessages-record;
  8. bijwerken van PrivateMessageThreads.LastMessageAtUtc;
  9. bijwerken van de leespositie van de verzendende deelnemer;
  10. markeren van de nieuwe activiteit als ongelezen voor andere relevante deelnemers;
  11. 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-IDTypeGUI-verwijzingOmschrijvingZichtbaar labelOpmerkingTechnische naam
SCH-GEN-05-01-N01ABreadcrumbNavigatiepad naar de gewone threadpagina met inline antwoordblok.Home > Berichten > Beantwoord berichtHeader en footer vallen buiten scope; breadcrumb hoort bij de pagina-inhoud.ReplyMessageBreadcrumb
SCH-GEN-05-01-S01SHoofdkaartInline replycontainer binnen de gewone threadpagina.Beantwoord berichtBevat compact berichtveld, toolbar, helpmodal en verzendactie.ReplyMessageShell
SCH-GEN-05-01-S02SPaginakopTitel en korte toelichting bij het beantwoorden.Beantwoord berichtRead-only schermtekst.ReplyMessageHeaderSection
SCH-GEN-05-01-F01FPaginakop — titelTitel van de pagina.Beantwoord berichtCodegedreven of via contentbeheer als dit later voor generieke pagina’s geldt.ReplyMessagePageTitle
SCH-GEN-05-01-F02FPaginakop — toelichtingBeschrijft 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-FORM01FORMAntwoordkaartFormulier voor het aanmaken van een nieuw privébericht binnen de bestaande thread.Bericht beantwoordenMutatieformulier; gegevens worden pas bij verzenden opgeslagen.ReplyMessageForm
SCH-GEN-05-01-F03FAntwoordkaart — onderwerpGeen apart onderwerpveld in de inline replycomposer.Niet zichtbaarNiet van toepassing; onderwerp staat in threadkop/Gespreksopties.ReplySubject
SCH-GEN-05-01-F04FAntwoordkaart — berichtEditorveld voor de inhoud van het antwoord.BerichtVerplicht; rich text wordt server-side gesanitized.ReplyBody
SCH-GEN-05-01-S03SToolbarGroepeert de beschikbare opmaakopties voor het berichtveld.OpmaakoptiesAlleen beperkte veilige opmaak.ReplyFormattingToolbar
SCH-GEN-05-01-B01BToolbarZet geselecteerde tekst vet.BOpmaakknop; geen eigen domeindata.ApplyBoldFormattingButton
SCH-GEN-05-01-B02BToolbarZet geselecteerde tekst cursief.IOpmaakknop; geen eigen domeindata.ApplyItalicFormattingButton
SCH-GEN-05-01-B03BToolbarOnderstreept geselecteerde tekst.UOpmaakknop; geen eigen domeindata.ApplyUnderlineFormattingButton
SCH-GEN-05-01-F05FToolbarSelectie voor toegestane tekstgrootte.TekstgrootteAlleen vooraf toegestane waarden.ReplyTextSizeSelect
SCH-GEN-05-01-B04BToolbarMaakt of wijzigt een opsommingslijst.• LijstOpmaakknop; resultaat wordt als veilige rich text opgeslagen.ApplyBulletListButton
SCH-GEN-05-01-B05BToolbarMaakt of wijzigt een genummerde lijst.1. LijstOpmaakknop; resultaat wordt als veilige rich text opgeslagen.ApplyNumberedListButton
SCH-GEN-05-01-A01AAntwoordkaart — actiesBreekt beantwoorden af zonder opslag.AnnulerenNiet-verzonden invoer wordt niet bewaard.CancelReplyAction
SCH-GEN-05-01-A02AAntwoordkaart — actiesVerzendt het antwoord binnen de bestaande thread.Verstuur berichtVoert server-side validatie, autorisatie en opslag uit.SendReplyAction
SCH-GEN-05-01-S04SThreadpaneelRead-only weergave van de bestaande conversatiethread als één timeline.ConversatiethreadStaat onder het antwoordformulier en volgt dezelfde oud-naar-nieuw weergave als de threaddetailpagina.ConversationThreadPanel
SCH-GEN-05-01-T01TThreadpaneel — lijstHerhalende lijst met threaditems.ThreaditemsBevat normale berichten en threadgebeurtenissen.ConversationThreadItemList
SCH-GEN-05-01-M01MThreadpaneel — systeemballonNeutrale 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-F06FThreadbericht — headerDatum/tijd en afzender van een normaal privébericht.<datum> · <tijd> (<afzender>)Dynamisch opgebouwd.ThreadMessageHeader
SCH-GEN-05-01-F07FThreadbericht — inhoudInhoud van een normaal privébericht.<berichtinhoud>Read-only; veilig gerenderd.ThreadMessageBody
SCH-GEN-05-01-M02MValidatie / foutmeldingToont functionele meldingen bij ongeldige invoer, geen toegang of verzendfouten.<melding>Alleen zichtbaar wanneer een melding relevant is.ReplyMessageFeedback

5.5 Waardelagen

Element-IDGUI-verwijzingZichtbaar labelTechnische naamDatabronWaardebronDatatypeBewerkbaarValidatie / regel
SCH-GEN-05-01-N01BreadcrumbHome > Berichten > Beantwoord berichtReplyMessageBreadcrumbRouteconfiguratieAfgeleid uit huidige route en berichtenmoduleNavigation labelNeeGeen technische GUID’s zichtbaar tonen.
SCH-GEN-05-01-S01HoofdkaartBeantwoord berichtReplyMessageShellCodegedreven layout + geselecteerde threadcontextSamengesteld schermobjectCompositeNeeAlleen laden wanneer autorisatie op threadniveau slaagt.
SCH-GEN-05-01-F01Paginakop — titelBeantwoord berichtReplyMessagePageTitleCodegedreven schermlabel of contentblok indien beheerbaar gemaaktWeergavetekstStringNeeGeen functionele data-afhankelijkheid.
SCH-GEN-05-01-F02Paginakop — toelichtingStuur een antwoord binnen dezelfde conversatie.ReplyMessageIntroTextCodegedreven schermtekst of contentblok indien beheerbaar gemaaktWeergavetekstStringNeeTekst mag niet suggereren dat een nieuwe conversatie wordt gestart.
SCH-GEN-05-01-FORM01AntwoordkaartBericht beantwoordenReplyMessageFormPrivateMessageThreads, PrivateMessageThreadParticipants, SiteFeatureTogglesSamengesteld formulier voor bestaande threadForm stateJaAlleen beschikbaar voor actieve deelnemer binnen een beantwoordbare thread en wanneer PrivateMessagingEnabled actief is.
SCH-GEN-05-01-F03OnderwerpNiet zichtbaarReplySubjectPrivateMessageThreads.SubjectAlleen getoond in threadkop/GespreksoptiesStringNeeNiet bewerkbaar via reply; onderwerpwijziging loopt via Gespreksopties.
SCH-GEN-05-01-F04BerichtBerichtReplyBodyGebruikersinput, opslag in PrivateMessages.BodyUser inputSanitized rich text / stringJaVerplicht; na sanitizing moet inhoud overblijven; vrije HTML en actieve inhoud zijn niet toegestaan.
SCH-GEN-05-01-S03ToolbarOpmaakoptiesReplyFormattingToolbarEditorstateRuntime stateUI stateJaAlleen toegestane opmaakcommando’s tonen.
SCH-GEN-05-01-B01ToolbarBApplyBoldFormattingButtonEditorstateRuntime stateActionJaMag alleen veilige vetopmaak produceren.
SCH-GEN-05-01-B02ToolbarIApplyItalicFormattingButtonEditorstateRuntime stateActionJaMag alleen veilige cursieve opmaak produceren.
SCH-GEN-05-01-B03ToolbarUApplyUnderlineFormattingButtonEditorstateRuntime stateActionJaMag alleen veilige onderstreepte opmaak produceren.
SCH-GEN-05-01-F05ToolbarTekstgrootteReplyTextSizeSelectEditorconfiguratieRuntime state / toegestane waardenEnum/stringJaAlleen toegestane tekstgroottes; geen vrije CSS-waarde opslaan.
SCH-GEN-05-01-B04Toolbar• LijstApplyBulletListButtonEditorstateRuntime stateActionJaMag alleen veilige lijststructuur produceren.
SCH-GEN-05-01-B05Toolbar1. LijstApplyNumberedListButtonEditorstateRuntime stateActionJaMag alleen veilige genummerde lijststructuur produceren.
SCH-GEN-05-01-A01ActiesAnnulerenCancelReplyActionHuidige form stateUser actionActionJaBreekt af zonder opslag van bericht of onderwerpwijziging.
SCH-GEN-05-01-A02ActiesVerstuur berichtSendReplyActionPrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages, PrivateMessageThreadEvents, Users, SiteFeatureTogglesUser action met server-side opslagActionJaAlleen uitvoeren na autorisatie, validatie en sanitizing; verzending gebeurt binnen bestaande thread.
SCH-GEN-05-01-S04ThreadpaneelConversatiethreadConversationThreadPanelPrivateMessageThreads, PrivateMessages, PrivateMessageThreadEvents, UsersSamengestelde read-only threadtijdlijnCompositeNeeAlleen berichten en events uit de geautoriseerde thread tonen.
SCH-GEN-05-01-T01ThreadlijstThreaditemsConversationThreadItemListPrivateMessages.SentAtUtc, PrivateMessageThreadEvents.OccurredAtUtcBerekende tijdlijnCollectionNeeSortering oud naar nieuw binnen het geladen venster; events blijven binnen dezelfde threadtimeline.
SCH-GEN-05-01-M01Systeemballon<gebruiker> veranderde het onderwerp van <oud> naar <nieuw>ThreadEventSystemBubblePrivateMessageThreadEvents.EventType, ActorUserId, OldValue, NewValue, OccurredAtUtc, UsersDatabase + afgeleide displaytekstEvent displayNeeAlleen eventtypes tonen die de gebruiker binnen deze thread mag zien; renderbare waarden veilig verwerken.
SCH-GEN-05-01-F06Threadbericht — header<datum> · <tijd> (<afzender>)ThreadMessageHeaderPrivateMessages.SentAtUtc, PrivateMessages.SenderUserId, PrivateMessages.SendAsUserId, UsersDatabase + lokale tijdweergave + displaynaamString / DateTime displayNeeUTC-bronwaarden lokaal tonen; Jij tonen voor de ingelogde afzender.
SCH-GEN-05-01-F07Threadbericht — inhoud<berichtinhoud>ThreadMessageBodyPrivateMessages.Body, PrivateMessages.BodyFormatDatabasewaardeSanitized rich text / stringNeeAlleen gesanitized inhoud renderen; geen scripts of actieve inhoud uitvoeren.
SCH-GEN-05-01-M02Validatie / foutmelding<melding>ReplyMessageFeedbackServervalidatie, clientvalidatie en autorisatieresultaatRuntime stateMessageNeeMelding moet begrijpelijk zijn en mag geen technische identifiers of stacktraces tonen.
SCH-GEN-05-01-F08LeesstatusNiet zichtbaar als apart veldParticipantReadStatePrivateMessageThreadParticipants.LastReadMessageId, PrivateMessageThreadParticipants.LastReadAtUtc, PrivateMessages, PrivateMessageThreadEventsAfgeleid en bijgewerkt bij openen/tonenDateTime / GUIDNeeZichtbare threaditems mogen niet onterecht ongelezen blijven na openen van deze pagina.
SCH-GEN-05-01-F09FeaturestatusNiet zichtbaar bij actieve featurePrivateMessagingEnabledSiteFeatureToggles.FeatureKey = PrivateMessagingEnabled, SiteFeatureToggles.IsEnabledConfiguratiewaardeBooleanNeeBij 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.

SchermrequirementDektSchermcontext
REQ-SCH-GEN-05-01-01SRS-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-02SRS-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-03SRS-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-04SRS-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-05SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Geen apart onderwerpveld tonen in de inline replycomposer
REQ-SCH-GEN-05-01-06SRS-MSG-001
AC-MSG-001
Onderwerpwijziging alleen via Gespreksopties toestaan, niet via het replyblok
REQ-SCH-GEN-05-01-07SRS-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-08SRS-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-09SRS-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-10SRS-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-11SRS-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-12SRS-MSG-002
AC-MSG-002
De leespositie van de verzendende deelnemer bijwerken na succesvolle verzending
REQ-SCH-GEN-05-01-13SRS-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-14SRS-MSG-001
AC-MSG-001
Het veld Onderwerp verplicht zijn en mag maximaal 200 tekens bevatten
REQ-SCH-GEN-05-01-15SRS-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-16SRS-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-17SRS-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-18SRS-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-19SRS-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-20SRS-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-21SRS-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-22SRS-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-23SRS-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-24SRS-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-25SRS-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-26SRS-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-27SRS-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-28SRS-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-29SRS-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-30SRS-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-31SRS-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-32SRS-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-33SRS-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-34SRS-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-35SRS-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: