Skip to main content

2. Berichten overzicht

2.1 Schermafbeelding

oefenhub_generiek_01_berichten_overzicht_v3_3.png

2.2 Scherm meta data

VeldWaarde
Scherm-IDSCH-GEN-02-01
SchermnaamBerichten — overzicht
Doelgroep / onderdeelGeneriek
Bronbestandoefenhub_generiek_01_berichten_overzicht_v3_3.html
MockupversieV3.3
Screenshotbestandoefenhub_generiek_01_berichten_overzicht_v3_3.png
Processtap / contextIngelogde gebruiker opent het centrale berichtenoverzicht vanuit het berichtenicoon in de header of vanuit een berichtenroute.
DocumentatiestatusUitgewerkt op basis van HTML-mockup, PNG-screenshot, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification en databasedocumentatie.
OpmerkingenDit scherm bevat uitsluitend het berichtenicoon met ongelezenbadge uit de header, omdat deze teller functioneel samenhangt met het berichtenoverzicht. Andere headeronderdelen, het profielmenu en de footer vallen buiten dit schermdocument. Alle zichtbare namen, datums, snippets, aantallen en berichtteksten in de mockup zijn dynamische voorbeeldwaarden.
Route / URL-patroon/messages. Vanuit het overzicht kunnen items via /messages/system/{messageId}/open of /messages/thread/{threadId}/open openen, waarna de applicatie de readstate bijwerkt en naar de detailroute navigeert.
Autorisatie / vereiste rol-contextIngelogde gebruiker. De gebruiker ziet uitsluitend eigen systeemberichten en privébericht-threads waarin de gebruiker deelnemer is en die niet voor deze gebruiker uit de mailbox zijn verwijderd.
Primair domeinobject / hoofdentiteitSystemMessages, PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages en gebruikergebonden lees-/mailboxstatus.
Gerelateerde schermen / navigatie03_nieuw_privebericht, 04_open_bericht, 05_beantwoord_bericht.
Data-karakterUitlees-, filter- en lichte statusmutatiepagina; lijstregels, aantallen, previewteksten, het ongelezenaantal en de bewaartermijn zijn dynamisch of configureerbaar.

2.3 Functionele beschrijving

2.3.0 Privéthreadregels en preview

Voor privéthreads toont het overzicht één regel per thread. Het label wordt dynamisch afgeleid uit het aantal zichtbare actieve deelnemers: Privégesprek bij twee deelnemers en Groepsgesprek bij meer dan twee deelnemers. Het label is dus geen vaste threadtypekolom.

De threadregel toont het stabiele threadicoon en de threadkleur die bij het aanmaken van de thread zijn gekozen. De preview is user-scoped: bij ongelezen activiteit toont de preview het eerste nieuwe bericht of threadevent voor de ingelogde gebruiker; zonder nieuwe activiteit toont de preview de laatste zichtbare activiteit.

Het scherm Berichten — overzicht is de centrale mailboxpagina binnen OefenHub. De pagina toont systeemberichten en privéberichten in één gecombineerd overzicht, zodat de gebruiker op één plek systeemmeldingen, relatie-uitnodigingen, voortgangsmeldingen, privégesprekken en andere relevante communicatie kan terugvinden.

De pagina bestaat uit:

  • het berichtenicoon uit de header met badge voor het aantal ongelezen berichten;
  • een breadcrumb Home > Berichten;
  • een introductieblok met titel Berichten en korte toelichting;
  • de actie Nieuw privébericht;
  • een zoek- en filterbalk;
  • een gecombineerde berichtenlijst;
  • contextacties per berichtregel;
  • paginering met configureerbare paginagroottes;
  • een rechterkolom met dynamische samenvattingskaarten.

2.3.1 Interpretatie van mockupwaarden

Alle zichtbare berichtregels, afzenders, datums, tijden, onderwerpen, tekstfragmenten en aantallen in de mockup zijn voorbeelddata. Zij tonen hoe de pagina zich gedraagt, maar zijn geen vaste productiegegevens.

Voorbeelden zoals 3 ongelezen berichten, 12 systeemberichten, 8 privéberichten, 1–5 van 20 berichten en 3 mnd mogen dus niet hardcoded worden. De aantallen worden dynamisch berekend voor de ingelogde gebruiker en de bewaartermijn komt uit een sitebrede systeeminstelling.

2.3.2 Berichtenicoon en ongelezenbadge

Van de header valt uitsluitend het berichtenicoon met ongelezenbadge binnen de scope van dit schermdocument. Andere headeronderdelen, het profielmenu, rol-/navigatieknoppen en de footer worden in dit schermdocument niet functioneel beschreven.

Het berichtenicoon opent het berichtenoverzicht. Wanneer er geen ongelezen berichten of ongelezen privéthread-gebeurtenissen zijn, blijft het berichtenicoon zichtbaar zonder badge. Wanneer het ongelezenaantal groter is dan nul, toont het icoon een rode badge met het actuele aantal ongelezen items voor de ingelogde gebruiker.

Wanneer een nieuw ongelezen bericht of een nieuwe ongelezen threadgebeurtenis voor de gebruiker ontstaat, wordt het ongelezenaantal opnieuw bepaald. Was het vorige aantal nul, dan wordt de badge zichtbaar met de nieuwe waarde. Was er al een badge zichtbaar, dan wordt de waarde verhoogd of opnieuw weergegeven op basis van de actuele server-side ongelezenlogica. Voor privéthreads kan één zichtbare threadregel meerdere ongelezen berichten of threadgebeurtenissen vertegenwoordigen; de teller mag daarom niet uitsluitend worden afgeleid uit het aantal zichtbare lijstregels.

De badgewaarde moet dezelfde ongelezenlogica gebruiken als de samenvattingskaart Ongelezen, tenzij een bewuste caching- of timingreden tijdelijk verschil verklaart.

Wanneer een ongelezen item vanuit het overzicht wordt geopend, mag de applicatie de readstate eerst bijwerken en daarna de detailpagina tonen. Daardoor hoort de headerbadge na de detailnavigatie direct dezelfde tellerstand te gebruiken. Nieuwe mailboxitems die ontstaan terwijl de gebruiker op een andere pagina blijft, kunnen later via realtime invalidatie zichtbaar worden; zonder die invalidatie wordt de actuele teller bij navigatie, openen of refresh opnieuw bepaald.

Voor de rolcontext Leerling geldt aanvullend dat de ongelezenbadge tijdens een actieve oefenrun visueel verborgen wordt om afleiding tijdens het oefenen te voorkomen. Dit verbergen geldt alleen voor de badge/teller, niet voor de onderliggende ongelezenstatus. Nieuwe berichten, systeemberichten en threadgebeurtenissen blijven server-side normaal geregistreerd. Zodra de leerling de run afrondt, of een lopende run onderbreekt door naar een andere pagina te navigeren, wordt het actuele ongelezenaantal opnieuw bepaald en wordt de badge opnieuw getoond wanneer de waarde groter is dan nul.

2.3.3 Berichtenlijst

De berichtenlijst combineert twee berichtsoorten:

  1. Systeemberichten
    Systeemberichten worden door OefenHub aangemaakt voor functionele gebeurtenissen zoals relatie-uitnodigingen, wijzigingen, meldingen of doorverwijzingen naar een onderliggend domeinobject. Zij hebben een ontvanger, type, titel, body, aanmaakmoment, leesmoment en eventueel een EntityType + EntityId-verwijzing naar een vervolgobject. Systeemberichten zijn niet verwijderbaar door de gebruiker.

  2. Privéberichten
    Privéberichten zijn onderdeel van een privébericht-thread. Het overzicht toont niet elk individueel bericht los, maar een mailboxregel per zichtbare thread/deelnemercontext, met afzender, onderwerp, laatste relevante bericht- of threadactiviteit, previewtekst en leesstatus. Verwijderen van een privébericht/thread uit het overzicht is gebruikergebonden en verwijdert de thread of berichten niet voor andere deelnemers.

De lijst wordt standaard aflopend gesorteerd op meest recente bericht- of threadactiviteit. Ongelezen berichten worden visueel sterker weergegeven dan gelezen berichten. Een berichtregel is als geheel klikbaar en opent de detailweergave van het bericht of de thread. De preview of het tekstfragment in een berichtregel wordt compact op één regel weergegeven. Wanneer de beschikbare ruimte onvoldoende is, wordt de preview visueel afgekapt met een ellipsis of gelijkwaardige afbreekindicatie; de volledige inhoud blijft alleen in de detail- of threadweergave zichtbaar. De preview of het tekstfragment in een berichtregel wordt compact op één regel weergegeven. Wanneer de beschikbare ruimte onvoldoende is, wordt de preview visueel afgekapt met een ellipsis of gelijkwaardige afbreekindicatie; de volledige inhoud blijft alleen in de detail- of threadweergave zichtbaar.

2.3.4 Zoeken en filteren

Het zoekveld zoekt binnen de actieve filterselectie. De zoekactie ondersteunt minimaal zoeken op:

  • afzender;
  • onderwerp;
  • tekstfragment / preview;
  • relevante tekst binnen een privébericht-thread waar functioneel ondersteund.

De typefilters zijn:

  • Alles;
  • Systeem;
  • Privé.

De statusfilters zijn:

  • Alle statussen;
  • Ongelezen.

Filters mogen gecombineerd worden. Bij openen van de pagina zijn Alles en Alle statussen actief.

2.3.5 Acties per berichtregel

Per berichtregel zijn rechtsboven contextacties beschikbaar. Actie-iconen staan op titelhoogte, hebben een toegankelijk label en tooltip, en laten rechts ruimte voor latere extra acties zoals verwijderen van privéthreads.

  • bij ongelezen berichten: Markeer als gelezen;
  • bij gelezen berichten: Markeer als ongelezen;
  • bij privéberichten: Gesprek verlaten zodra UC-GEN-MSG-005 wordt gebouwd;
  • bij systeemberichten: geen werkende verwijderactie.

Het openen van een bericht telt als leesactie. Binnen dit overzicht mag een leesstatuswijziging wel direct via de lijstactie plaatsvinden, zonder eerst de detailpagina te openen. Een succesvolle leesstatusactie is een verwachte actie en toont geen blijvende succesmelding; bij falen toont de pagina wel veilige feedback.

2.3.6 Samenvattingskaarten

De rechterkolom toont informatieve samenvattingskaarten:

  • Ongelezen: totaal aantal ongelezen berichten voor de ingelogde gebruiker, eventueel uitgesplitst in systeemberichten en privéberichten;
  • Systeemberichten: totaal aantal zichtbare systeemberichten;
  • Privéberichten: totaal aantal zichtbare privébericht-threads of mailboxitems;
  • Bewaartermijn: configureerbare bewaartermijn voor privéberichten.

Deze samenvattingen zijn dynamisch en gebruikergebonden. Zij hoeven niet per se door de actuele zoekterm of filterchips beperkt te worden; functioneel zijn dit overzichtsindicatoren voor de mailbox van de gebruiker. Als later gekozen wordt dat deze waarden wel filterafhankelijk moeten worden, moet die keuze expliciet en consequent voor alle kaarten worden vastgelegd.

2.3.7 Bewaartermijn

De bewaartermijnkaart toont een beheerbare systeeminstelling, bijvoorbeeld 3 mnd als weergave van PrivateMessageRetentionDays. Functioneel geldt dat privéberichten een bewaartermijn hebben en systeemberichten in de eerste versie geen functionele retentiegrens kennen, omdat systeemberichten ook als logging richting de gebruiker fungeren.

De waarde op dit scherm is dus geen hardcoded label. De waarde wordt afgeleid uit SystemSettings en vertaald naar een begrijpelijke tekst in de gebruikersinterface.

2.3.8 Responsief gedrag

Bij voldoende schermbreedte staan de samenvattingskaarten rechts van de berichtenlijst. Bij smallere schermen verplaatsen zij onder de lijst en paginering. De berichtenlijst en paginering blijven leidend. Filterknoppen blijven compact op tekstbreedte en de zoekplaceholder mag verkorten van Zoek op afzender, onderwerp of tekstfragment naar Zoeken.

2.4 UI-elementen en velddefinities

Element-IDTypeGUI-verwijzingOmschrijvingZichtbaar labelOpmerkingTechnische naam
SCH-GEN-02-01-H01ButtonHeader — berichtenicoonEnvelop-icoon waarmee de gebruiker het berichtenoverzicht opent.BerichtenAlleen dit headeronderdeel valt binnen scope van dit schermdocument; overige headeronderdelen blijven buiten beschouwing.MessagesHeaderEntryButton
SCH-GEN-02-01-F01Field / badgeHeader — berichtenicoonBadge met het aantal ongelezen berichten, systeemberichten of privéthread-gebeurtenissen voor de ingelogde gebruiker.<aantal ongelezen>Zichtbaar wanneer het aantal groter is dan 0, behalve wanneer een leerling actief in een oefenrun zit.UnreadMessagesHeaderBadge
SCH-GEN-02-01-F16Field / stateHeader — berichtenicoonRol- en runafhankelijke zichtbaarheid van de ongelezenbadge.<badge zichtbaar/verborgen>Voor leerlingen wordt de badge tijdens een actieve oefenrun verborgen en na afronden of onderbreken opnieuw bepaald.MessageBadgeVisibilityState
SCH-GEN-02-01-S01SectionHoofdkaartHoofdcontainer van het berichtenoverzicht.BerichtenBevat intro, acties, filters, lijst, paginering en samenvattingen.MessagesOverviewShell
SCH-GEN-02-01-N01NavigationBreadcrumbBreadcrumb voor de berichtenpagina.Home > BerichtenRead-only navigatiecontext.MessagesBreadcrumb
SCH-GEN-02-01-S02SectionIntroblokTitel en korte uitleg van de berichtenpagina.BerichtenTekst kan later eventueel via contentbeheer worden gestuurd, maar de schermstructuur blijft codegedreven.MessagesIntroSection
SCH-GEN-02-01-F02FieldIntroblok — titelTitel van de pagina.BerichtenRead-only weergavetekst.MessagesPageTitle
SCH-GEN-02-01-F03FieldIntroblok — toelichtingKorte uitleg over systeemberichten, privéberichten en filters.Bekijk hier je systeemberichten en privéberichten.Read-only begeleidende tekst.MessagesIntroText
SCH-GEN-02-01-B01ButtonIntroblok rechtsStart de flow voor het maken van een nieuw privébericht.Nieuw privéberichtAlleen bruikbaar wanneer privéberichten functioneel/sitebreed beschikbaar zijn en de gebruiker minimaal één toegestane ontvanger heeft.CreatePrivateMessageButton
SCH-GEN-02-01-S03SectionZoek- en filterbalkGroepeert zoekveld, typefilter en statusfilter.Berichten zoeken en filterenFiltert de berichtenlijst.MessagesSearchAndFilterSection
SCH-GEN-02-01-F04FieldZoekveldVrij tekstveld voor zoeken binnen berichten.Zoek op afzender, onderwerp of tekstfragmentPlaceholder mag responsief verkorten naar Zoeken.MessageSearchText
SCH-GEN-02-01-FILTER01Filter groupTypefilterFiltert op berichttype.Alles / Systeem / PrivéStandaard Alles.MessageTypeFilter
SCH-GEN-02-01-FILTER02Filter groupStatusfilterFiltert op leesstatus.Alle statussen / OngelezenStandaard Alle statussen.MessageStatusFilter
SCH-GEN-02-01-S04SectionBerichtenlijstLijst met systeemberichten en privébericht-threads die zichtbaar zijn voor de gebruiker.BerichtenoverzichtDynamisch geladen, gefilterd en gepagineerd.MessagesListSection
SCH-GEN-02-01-T01List / tableBerichtregelsHerhalende lijstregel voor één systeembericht of één privébericht-thread/mailboxitem.<berichtregel>Geen vaste tekst; volledig dynamisch.MessageListItem
SCH-GEN-02-01-F05FieldBerichtregel — typeVisuele tag voor berichttype.Systeem / PrivéAfgeleid uit bronobject.MessageTypeTag
SCH-GEN-02-01-F06FieldBerichtregel — afzenderAfzenderweergave van het bericht of de thread.Systeem / <naam afzender>Bij systeembericht Systeem; bij privébericht de relevante afzender of threadweergave.MessageSenderDisplayName
SCH-GEN-02-01-F07FieldBerichtregel — datum/tijdDatum en tijd van bericht of laatste relevante activiteit.<datum> · <tijd>Lokaal weergegeven op basis van UTC-bronwaarde.MessageDisplayDateTime
SCH-GEN-02-01-F08FieldBerichtregel — onderwerpOnderwerp of titel van bericht/thread.<onderwerp>Dynamische titel.MessageSubject
SCH-GEN-02-01-F09FieldBerichtregel — tekstfragmentEénregelige preview van body of threadinhoud.<tekstfragment>Afkappen met ellipsis bij onvoldoende ruimte.MessageSnippet
SCH-GEN-02-01-A01ActionBerichtregelOpent het geselecteerde bericht of de geselecteerde privébericht-thread.Open berichtVolledige regel is aanklikbaar.OpenMessageAction
SCH-GEN-02-01-A02ActionBerichtregel — actieMarkeert ongelezen bericht als gelezen.Markeer als gelezenAlleen bij ongelezen berichten.MarkMessageAsReadAction
SCH-GEN-02-01-A03ActionBerichtregel — actieMarkeert gelezen bericht als ongelezen.Markeer als ongelezenAlleen bij gelezen berichten.MarkMessageAsUnreadAction
SCH-GEN-02-01-A04ActionBerichtregel — actieLaat de gebruiker het privégesprek verlaten en uit de eigen mailboxweergave verwijderen.Gesprek verlatenAlleen actief voor privéberichten; gebruikergebonden soft delete.DeletePrivateMessageThreadAction
SCH-GEN-02-01-M01Message / disabled actionBerichtregel — systeembericht verwijderenUitgeschakelde verwijderactie voor systeemberichten met tooltip.Een systeembericht kan niet verwijderd wordenSysteemberichten blijven niet-verwijderbaar.SystemMessageDeleteDisabledMessage
SCH-GEN-02-01-S05SectionPagineringPaginering onder de berichtenlijst.Toon aantal berichtenToont page size, reeks en navigatie.MessagesPaginationSection
SCH-GEN-02-01-F10FieldPaginering — aantalKeuzelijst voor aantal berichten per pagina.5 / 10 / 15Standaardwaarde volgt functionele keuze of persoonlijke voorkeur.MessagesPageSize
SCH-GEN-02-01-F11FieldPaginering — reeksToont huidige zichtbare reeks en totaal.<eerste>–<laatste> van <totaal> berichtenDynamisch op basis van filterresultaat.MessagesPaginationRange
SCH-GEN-02-01-A05Action groupPaginering — navigatieVorige/volgende en paginanummers.‹ 1 2 3 4 ›Alleen bruikbaar waar pagina bestaat.MessagesPaginationNavigation
SCH-GEN-02-01-S06SectionRechterkolomInformatieve samenvattingskaarten bij het berichtenoverzicht.BerichteninformatieVerplaatst responsief onder lijst/paginering.MessagesSummarySection
SCH-GEN-02-01-F12FieldSamenvatting — ongelezenAantal ongelezen berichten voor de ingelogde gebruiker.OngelezenDynamische teller.UnreadMessagesCount
SCH-GEN-02-01-F13FieldSamenvatting — systeemberichtenAantal zichtbare systeemberichten voor de ingelogde gebruiker.SysteemberichtenDynamische teller.SystemMessagesCount
SCH-GEN-02-01-F14FieldSamenvatting — privéberichtenAantal zichtbare privébericht-threads/mailboxitems voor de ingelogde gebruiker.PrivéberichtenDynamische teller.PrivateMessagesCount
SCH-GEN-02-01-F15FieldSamenvatting — bewaartermijnConfigureerbare bewaartermijn van privéberichten.BewaartermijnAfgeleid uit systeeminstelling, niet hardcoded.PrivateMessageRetentionDisplay

2.5 Waardelagen

Element-IDGUI-verwijzingZichtbaar labelTechnische naamDatabronWaardebronDatatypeBewerkbaarValidatie / regel
SCH-GEN-02-01-H01Header — berichtenicoonBerichtenMessagesHeaderEntryButtonGenerieke headercomponent + ingelogde gebruikerscontextRoute naar berichtenoverzichtAction / navigationNeeAlleen het berichtenicoon valt binnen scope van dit schermdocument; overige headeronderdelen blijven buiten beschouwing.
SCH-GEN-02-01-F01Header — badge<aantal ongelezen>UnreadMessagesHeaderBadgeSystemMessages.ReadAtUtc, PrivateMessageThreadParticipants.LastReadMessageId, PrivateMessageThreadParticipants.LastReadAtUtc, PrivateMessages, PrivateMessageThreadEventsBerekend aantal ongelezen systeemberichten, privéberichten en privéthreadgebeurtenissen voor de ingelogde gebruikerIntegerNeeBadge tonen wanneer waarde > 0; geen badge bij 0; bij nieuw ongelezen item van 0 naar >0 badge tonen en bij bestaande badge de actuele tellerwaarde bijwerken.
SCH-GEN-02-01-F16Header — badgezichtbaarheid<badge zichtbaar/verborgen>MessageBadgeVisibilityStateActieve rolcontext, ExerciseRuns, runtime oefenrunstatus en ongelezenberichtstatusRuntime state + database-afleidingBoolean/display stateNeeVoor leerlingen tijdens een actieve oefenrun de badge visueel verbergen; ongelezenstatus blijft server-side bewaard; na afronden of navigeren naar een andere pagina opnieuw bepalen en tonen wanneer waarde > 0.
SCH-GEN-02-01-S01HoofdkaartBerichtenMessagesOverviewShellCodegedreven layout + berichtenservicesSamengesteld schermobjectCompositeNeeGeen data van andere gebruikers tonen.
SCH-GEN-02-01-N01BreadcrumbHome > BerichtenMessagesBreadcrumbRouteconfiguratieAfgeleid uit huidige routeNavigation labelNeeGeen technische URL of ID tonen.
SCH-GEN-02-01-F02Introblok — titelBerichtenMessagesPageTitleCodegedreven schermlabel of ContentBlocks indien later beheerbaar gemaaktWeergavetekstStringNeeGeen functionele data-afhankelijkheid.
SCH-GEN-02-01-F03Introblok — toelichtingBekijk hier je systeemberichten en privéberichten.MessagesIntroTextCodegedreven schermtekst of ContentBlocks indien later beheerbaar gemaaktWeergavetekstStringNeeTekst mag niet suggereren dat systeemberichten verwijderbaar zijn.
SCH-GEN-02-01-B01Introblok rechtsNieuw privéberichtCreatePrivateMessageButtonSiteFeatureToggles.FeatureKey = PrivateMessagingEnabled, relaties/vriendschappen van gebruikerActie beschikbaar indien privéberichten aan toegestane ontvangers mogelijk zijnActionJaBij klikken route naar nieuw privébericht; privébericht mag alleen naar gekoppelde gebruikers of vrienden.
SCH-GEN-02-01-F04ZoekveldZoek op afzender, onderwerp of tekstfragmentMessageSearchTextGebruikersinputUser input voor lijstfilterStringJaZoeken werkt binnen actieve filters; invoer veilig behandelen en niet als HTML renderen.
SCH-GEN-02-01-FILTER01TypefilterAlles / Systeem / PrivéMessageTypeFilterGebruikersselectieUser input voor lijstfilterEnumJaAlleen toegestane waarden All, System, Private; standaard All.
SCH-GEN-02-01-FILTER02StatusfilterAlle statussen / OngelezenMessageStatusFilterGebruikersselectieUser input voor lijstfilterEnumJaAlleen toegestane waarden All, Unread; standaard All.
SCH-GEN-02-01-T01Berichtregels<berichtregel>MessageListItemSystemMessages + PrivateMessageThreads + PrivateMessageThreadParticipants + PrivateMessages + UsersSamengestelde lijst van zichtbare mailboxitemsCollectionNeeAlleen eigen systeemberichten en eigen deelnemerthreads zonder DeletedAtUtc tonen.
SCH-GEN-02-01-F05Berichtregel — typeSysteem / PrivéMessageTypeTagBronobject (SystemMessages of private thread mailboxitem)Afgeleid typeEnum/stringNeeMoet overeenkomen met filtertype.
SCH-GEN-02-01-F06Berichtregel — afzenderSysteem / <naam afzender>MessageSenderDisplayNameSystemMessages.CreatedBySystemComponent, PrivateMessages.SenderUserId, PrivateMessages.SendAsUserId, UsersAfgeleid displaylabelStringNeeBij systeembericht Systeem; bij namens-verzending afwijkende weergave ondersteunen.
SCH-GEN-02-01-F07Berichtregel — datum/tijd<datum> · <tijd>MessageDisplayDateTimeSystemMessages.CreatedAtUtc, PrivateMessageThreads.LastMessageAtUtc, PrivateMessages.SentAtUtcAfgeleid en lokaal geformatteerd tijdstipDateTime displayNeeUTC-bronwaarden lokaal tonen.
SCH-GEN-02-01-F08Berichtregel — onderwerp<onderwerp>MessageSubjectSystemMessages.Title, PrivateMessageThreads.SubjectDatabasewaardeStringNeeOnderwerp veilig encoden; geen vrije HTML renderen.
SCH-GEN-02-01-F09Berichtregel — tekstfragment<tekstfragment>MessageSnippetSystemMessages.Body, laatste relevante PrivateMessages.Body of threadpreviewAfgeleid tekstfragmentStringNeePreview éénregelig tonen en afkappen; rich text eerst sanitizen/strippen voor preview.
SCH-GEN-02-01-A01BerichtregelOpen berichtOpenMessageActionGeselecteerd SystemMessages.Id of PrivateMessageThreads.Id binnen eigen autorisatiecontextUser actionActionJaOpenen markeert bericht/thread functioneel als gelezen voor de gebruiker.
SCH-GEN-02-01-A02Berichtregel — actieMarkeer als gelezenMarkMessageAsReadActionSystemMessages.ReadAtUtc of PrivateMessageThreadParticipants.LastReadMessageId / LastReadAtUtcMutatie van leesstatusActionJaAlleen toegestaan voor eigen ongelezen items.
SCH-GEN-02-01-A03Berichtregel — actieMarkeer als ongelezenMarkMessageAsUnreadActionSystemMessages.ReadAtUtc of PrivateMessageThreadParticipants.LastReadMessageId / LastReadAtUtcMutatie van leesstatusActionJaAlleen toegestaan voor eigen gelezen items; privéthreadstatus per deelnemer wijzigen.
SCH-GEN-02-01-A04Berichtregel — actieGesprek verlatenDeletePrivateMessageThreadActionPrivateMessageThreadParticipants.DeletedAtUtcUser input / soft delete per deelnemerActionJaAlleen voor privéberichten; verwijdert niet voor andere deelnemers.
SCH-GEN-02-01-M01Berichtregel — systeembericht verwijderenEen systeembericht kan niet verwijderd wordenSystemMessageDeleteDisabledMessageType = SystemAfgeleide disabled-stateBoolean/displayNeeSysteemberichten nooit verwijderbaar maken.
SCH-GEN-02-01-F10Paginering — aantal5 / 10 / 15MessagesPageSizeGebruikersselectie, eventueel gebruikersvoorkeurUser input voor pagingIntegerJaAlleen toegestane waarden 5, 10, 15.
SCH-GEN-02-01-F11Paginering — reeks<eerste>–<laatste> van <totaal> berichtenMessagesPaginationRangeGefilterde berichtqueryBerekendStringNeeTotaal is dynamisch binnen actieve zoek/filtercontext.
SCH-GEN-02-01-A05Paginering — navigatie‹ 1 2 3 4 ›MessagesPaginationNavigationGefilterde berichtquery + huidige paginaBerekendAction groupJaVorige/volgende disabled wanneer geen pagina beschikbaar is.
SCH-GEN-02-01-F12Samenvatting — ongelezenOngelezenUnreadMessagesCountSystemMessages.ReadAtUtc, PrivateMessageThreadParticipants, PrivateMessages, PrivateMessageThreadEventsBerekend aantal ongelezen berichten en threadgebeurtenissenIntegerNeeMoet gebruikergebonden zijn en dezelfde ongelezenlogica gebruiken als de headerbadge; voor leerlingen kan alleen de headerbadge tijdelijk verborgen zijn tijdens een actieve oefenrun.
SCH-GEN-02-01-F13Samenvatting — systeemberichtenSysteemberichtenSystemMessagesCountSystemMessages.RecipientUserIdBerekend totaal zichtbare systeemberichtenIntegerNeeAlleen berichten van ingelogde gebruiker tellen mee.
SCH-GEN-02-01-F14Samenvatting — privéberichtenPrivéberichtenPrivateMessagesCountPrivateMessageThreads + PrivateMessageThreadParticipants.UserId + DeletedAtUtcBerekend totaal zichtbare privébericht-mailboxitemsIntegerNeeVerwijderde participantthreads tellen niet mee in zichtbare mailbox.
SCH-GEN-02-01-F15Samenvatting — bewaartermijnBewaartermijnPrivateMessageRetentionDisplaySystemSettings.SettingKey = PrivateMessageRetentionDays, SystemSettings.ValueIntConfiguratiewaarde, geformatteerd als gebruikerslabelString/integer displayNeeWaarde mag niet hardcoded worden; cache moet na wijziging worden ververst.

2.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-02-01-01SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Voor iedere ingelogde gebruiker een centraal berichtenoverzicht kunnen tonen met systeemberichten en privéberichten in één gecombineerde mailboxweergave
REQ-SCH-GEN-02-01-02SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
In de header een berichtenicoon tonen dat toegang geeft tot het berichtenoverzicht; overige headeronderdelen vallen buiten dit schermdocument
REQ-SCH-GEN-02-01-03SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Bij het berichtenicoon een badge tonen wanneer het actuele ongelezenaantal voor de ingelogde gebruiker groter is dan nul
REQ-SCH-GEN-02-01-04SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Wanneer een nieuw ongelezen bericht of een nieuwe ongelezen threadgebeurtenis ontstaat, het systeem het ongelezenaantal opnieuw bepalen; bij overgang van 0 naar een positieve waarde de badge verschijnen en bij een bestaande badge de tellerwaarde worden bijgewerkt
REQ-SCH-GEN-02-01-05SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
De headerbadge en de samenvattingswaarde Ongelezen dezelfde gebruikergebonden ongelezenlogica gebruiken
REQ-SCH-GEN-02-01-06SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Voor de rolcontext Leerling het systeem de ongelezenbadge bij het berichtenicoon visueel verbergen zodra een actieve oefenrun wordt gestart
REQ-SCH-GEN-02-01-07SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
Het tijdelijk verbergen van de ongelezenbadge tijdens een actieve leerling-oefenrun mag de onderliggende ongelezenstatus, berichtopslag of SignalR-/notificatieverwerking niet wijzigen
REQ-SCH-GEN-02-01-08SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
Na afronden van de oefenrun of na onderbreken door naar een andere pagina te navigeren het systeem het actuele ongelezenaantal opnieuw bepalen en de badge opnieuw tonen wanneer de waarde groter is dan nul
REQ-SCH-GEN-02-01-09SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Het berichtenoverzicht mag uitsluitend systeemberichten tonen waarvan RecipientUserId gelijk is aan de ingelogde gebruiker
REQ-SCH-GEN-02-01-10SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
Het berichtenoverzicht mag uitsluitend privébericht-threads tonen waarin de ingelogde gebruiker deelnemer is en waarvoor de participantregel niet uit de eigen mailbox is verwijderd
REQ-SCH-GEN-02-01-11SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Systeemberichten en privéberichten visueel als afzonderlijke typen herkenbaar maken met de labels Systeem en Privé
REQ-SCH-GEN-02-01-12SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Berichten standaard sorteren op meest recente systeemberichtdatum of privéthreadactiviteit
REQ-SCH-GEN-02-01-13SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
Ongelezen berichten visueel onderscheidbaar zijn van gelezen berichten
REQ-SCH-GEN-02-01-14SRS-MSG-002
SRS-MSG-003
AC-MSG-002
AC-MSG-003
De gebruiker vanuit het overzicht een nieuw privébericht kunnen starten wanneer privéberichten beschikbaar zijn en er minimaal één toegestane ontvanger bestaat
REQ-SCH-GEN-02-01-15SRS-AUTH-001
SRS-MSG-002
AC-AUTH-001
AC-MSG-002
De actie Nieuw privébericht mag alleen berichten laten sturen naar gekoppelde gebruikers of vrienden die volgens de geldende relatie- en rolcontext benaderbaar zijn
REQ-SCH-GEN-02-01-16SRS-MSG-001
AC-MSG-001
Zoeken ondersteunen op afzender, onderwerp en tekstfragment binnen de actieve filterselectie
REQ-SCH-GEN-02-01-17SRS-MSG-001
AC-MSG-001
Het zoekveld responsief een uitgebreide placeholder of compacte placeholder kunnen tonen zonder de zoekfunctie inhoudelijk te wijzigen
REQ-SCH-GEN-02-01-18SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Een typefilter ondersteunen met minimaal de waarden Alles, Systeem en Privé
REQ-SCH-GEN-02-01-19SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
Een statusfilter ondersteunen met minimaal de waarden Alle statussen en Ongelezen
REQ-SCH-GEN-02-01-20SRS-MSG-001
AC-MSG-001
Typefilter, statusfilter en zoekterm gecombineerd kunnen worden en de berichtenlijst alleen items tonen die aan alle actieve criteria voldoen
REQ-SCH-GEN-02-01-21SRS-MSG-001
AC-MSG-001
Bij openen van het berichtenoverzicht de filters standaard op Alles en Alle statussen staan
REQ-SCH-GEN-02-01-22SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Een berichtregel als geheel aanklikbaar zijn en de bijbehorende berichtdetailpagina of privéthread openen
REQ-SCH-GEN-02-01-23SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Het openen van een bericht of thread de gebruikergebonden leesstatus bijwerken zodat het item daarna als gelezen geldt
REQ-SCH-GEN-02-01-24SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
De gebruiker een ongelezen item vanuit de lijst direct als gelezen kunnen markeren
REQ-SCH-GEN-02-01-25SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
De gebruiker een gelezen item vanuit de lijst direct als ongelezen kunnen markeren
REQ-SCH-GEN-02-01-26SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
De gebruiker een privébericht-thread uit de eigen mailbox kunnen verwijderen zonder dat de thread of berichten voor andere deelnemers worden verwijderd
REQ-SCH-GEN-02-01-27SRS-MSG-001
SRS-MSG-007
AC-MSG-001
AC-MSG-007
Systeemberichten geen door de gebruiker verwijderd worden; de verwijderactie daarom disabled zijn met een begrijpelijke tooltip
REQ-SCH-GEN-02-01-28SRS-MSG-001
AC-MSG-001
Per berichtregel minimaal type, afzender, datum/tijd, onderwerp en tekstfragment tonen
REQ-SCH-GEN-02-01-29SRS-MSG-001
AC-MSG-001
Tekstfragmenten veilig worden opgebouwd uit gesanitized of veilig geëncodeerde berichtinhoud en mogen geen actieve HTML of JavaScript renderen
REQ-SCH-GEN-02-01-30SRS-MSG-001
AC-MSG-001
Datum- en tijdwaarden uit UTC-bronnen lokaal en consistent voor de gebruiker worden weergegeven
REQ-SCH-GEN-02-01-31SRS-MSG-001
AC-MSG-001
Het berichtenoverzicht paginering ondersteunen met de keuzewaarden 5, 10 en 15 berichten per pagina
REQ-SCH-GEN-02-01-32SRS-RDM-007
SRS-RDM-008
SRS-RDM-002
SRS-RDM-001
SRS-MSG-001
AC-RDM-007
AC-RDM-008
AC-RDM-002
AC-RDM-001
AC-MSG-001
De paginering de actuele reeks, het totaal aantal gefilterde berichten, vorige/volgende navigatie en afzonderlijke paginanummers tonen
REQ-SCH-GEN-02-01-33SRS-AUTH-001
SRS-MSG-001
AC-AUTH-001
AC-MSG-001
De samenvattingskaart Ongelezen het totaal aantal ongelezen mailboxitems van de ingelogde gebruiker tonen en mag mockupwaarden niet hardcoded gebruiken
REQ-SCH-GEN-02-01-34SRS-RDM-007
SRS-RDM-002
SRS-RDM-001
SRS-AUTH-001
SRS-MSG-001
AC-RDM-007
AC-RDM-002
AC-RDM-001
AC-AUTH-001
AC-MSG-001
De samenvattingskaart Systeemberichten het totaal aantal zichtbare systeemberichten van de ingelogde gebruiker tonen
REQ-SCH-GEN-02-01-35SRS-RDM-007
SRS-RDM-002
SRS-RDM-001
SRS-AUTH-001
SRS-MSG-001
AC-RDM-007
AC-RDM-002
AC-RDM-001
AC-AUTH-001
AC-MSG-001
De samenvattingskaart Privéberichten het totaal aantal zichtbare privébericht-mailboxitems van de ingelogde gebruiker tonen
REQ-SCH-GEN-02-01-36SRS-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 samenvattingskaart Bewaartermijn de bewaartermijn van privéberichten uit SystemSettings.PrivateMessageRetentionDays afleiden en niet als vaste tekst opslaan
REQ-SCH-GEN-02-01-37SRS-NFR-PRV-001
SRS-MSG-001
AC-NFR-PRV-001
AC-MSG-001
Systeemberichten buiten de privéberichtenretentie vallen en mogen in de eerste versie geen gebruikerbediende verwijder- of retentieactie krijgen
REQ-SCH-GEN-02-01-38SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Bij privéberichten de lees- en verwijderstatus per deelnemer worden bepaald via de participantlaag en niet globaal op threadniveau alleen
REQ-SCH-GEN-02-01-39SRS-MSG-001
SRS-MSG-003
AC-MSG-001
AC-MSG-003
Thread-events die na de laatst gelezen positie plaatsvinden, kunnen bijdragen aan de ongelezenstatus van een privéthread
REQ-SCH-GEN-02-01-40SRS-MSG-001
AC-MSG-001
Een lege staat tonen wanneer de actieve zoek- en filterselectie geen berichten oplevert
REQ-SCH-GEN-02-01-41SRS-AUTH-004
SRS-MSG-001
AC-AUTH-004
AC-MSG-001
Het systeem mag technische identifiers zoals GUID’s, thread-id’s, message-id’s of entity-id’s niet zichtbaar tonen in het berichtenoverzicht
REQ-SCH-GEN-02-01-42SRS-RDM-007
SRS-RDM-008
SRS-RDM-002
SRS-RDM-001
SRS-MSG-001
AC-RDM-007
AC-RDM-008
AC-RDM-002
AC-RDM-001
AC-MSG-001
Bij voldoende schermbreedte samenvattingskaarten rechts van de berichtenlijst kunnen staan; bij smallere schermen zij onder de berichtenlijst en paginering verplaatsen zonder de lijst te overlappen
REQ-SCH-GEN-02-01-43SRS-MSG-001
SRS-MSG-006
AC-MSG-001
AC-MSG-006
Zichtbare aantallen, datums, berichtteksten, previews, badges en filters dynamisch uit de actuele gebruikercontext, berichtenstatus en configuratie worden opgebouwd
REQ-SCH-GEN-02-01-44SRS-MSG-001
AC-MSG-001
De berichtpreview in het overzicht op één regel tonen en bij onvoldoende ruimte visueel afkappen met ellipsis of gelijkwaardige afbreekindicatie, zonder volledige berichtinhoud in de lijstregel te tonen

2.7 Technische koppeling

Voor technische uitwerking zijn vooral relevant: