UC-GEN-TIC-016 — Verlopen heropentermijnen periodiek verwerken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-GEN-TIC-016 |
| Naam | Verlopen heropentermijnen periodiek verwerken |
| Domein | Meldingen |
| Primaire actor | Systeem / TickerQ |
| Secundaire actor(en) | Meldingenservice, database, audit/historylaag |
| Rolcontext | Geen gebruikersrol; periodieke systeemverwerking binnen de backend. |
| Betrokken schermen | Geen zelfstandig scherm; de uitkomst is zichtbaar via bestaande meldingoverzichten en meldingdetails. |
| Gerelateerde usecases | UC-GEN-TIC-013 — Melding oplossen of sluiten; UC-GEN-TIC-006 — Oplossing accepteren; UC-GEN-TIC-007 — Melding heropenen door gebruiker; UC-GEN-TIC-014 — Melding heropenen door beheerder |
| Primaire entiteiten | Tickets, TicketClosures, TicketHistory |
| Secundaire entiteiten / events | TicketReopenRequests, TickerQ-schedulerlogging, TicketReopenDeadlineExpired |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must have |
2. Omschrijving
Deze usecase beschrijft de periodieke backendverwerking waarmee OefenHub gesloten meldingen controleert waarvan de actuele heropentermijn is verlopen. Er wordt bewust geen losse TickerQ-taak per melding aangemaakt op het moment van oplossen of sluiten. In plaats daarvan draait een periodieke TickerQ-job minimaal iedere 12 uur en zoekt deze op basis van actuele databasecriteria welke meldingen definitief als gesloten beschouwd moeten worden.
Deze verwerking is een vangnet voor normale tijdsverloopafhandeling én voor gemiste eerdere scheduleruitvoeringen. Wanneer een jobrun faalt, niet gestart is of een melding tijdelijk overslaat door een race condition, wordt dezelfde melding bij een volgende run opnieuw gevonden zolang zij nog aan de criteria voldoet.
3. Scope
Deze usecase beschrijft:
- het periodiek starten van de TickerQ-verwerking;
- het selecteren van tickets met
Status = Closeden een actuele sluitregistratie waarvanReopenDeadlineUtc <= nowUtc; - het uitsluiten van sluitingen die al door de gebruiker zijn geaccepteerd, later zijn heropend of niet meer de actuele sluitcontext vormen;
- het idempotent verwerken van verlopen heropentermijnen;
- het vastleggen van compacte history wanneer de overgang naar gebruikersgericht Gesloten administratief herleidbaar moet zijn;
- het loggen van technische fouten zonder gebruikersflow te blokkeren.
Deze usecase beschrijft niet:
- het oplossen of sluiten door een beheerder;
- het accepteren van een oplossing door de gebruiker;
- het heropenen door gebruiker of beheerder;
- het aanmaken van een nieuwe sluitregistratie;
- het versturen van extra systeemberichten bij alleen het verlopen van de heropentermijn.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De TickerQ-scheduler is beschikbaar voor periodieke backendtaken. |
| PRE-002 | De meldingenfunctionaliteit en ticketdatatabellen zijn beschikbaar. |
| PRE-003 | Er bestaat een configureerbaar interval voor deze verwerking; functioneel uitgangspunt is minimaal iedere 12 uur. |
| PRE-004 | De verwerking kan het actuele UTC-moment server-side bepalen. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Meldingen waarvan de actuele heropentermijn verlopen is, worden niet langer gebruikersgericht als Opgelost behandeld. |
| POST-002 | Waar auditbaar nodig is, is een compacte TicketHistory-regel vastgelegd dat de heropentermijn is verlopen en de melding definitief gesloten is. |
| POST-003 | Er is geen nieuw TicketClosures-record aangemaakt. |
| POST-004 | Er is geen systeembericht of privébericht aangemaakt door alleen het verlopen van de heropentermijn. |
| POST-005 | Fouten in één ticketverwerking blokkeren niet de volledige jobrun; technische fouten worden gelogd. |
6. Trigger
De usecase start wanneer de periodieke TickerQ-job voor verlopen ticket-heropentermijnen wordt uitgevoerd. Functioneel draait deze verwerking minimaal iedere 12 uur.
7. Normale processtroom
| Stap | Actor | Component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | TickerQ | Scheduler | Start periodieke verwerking. | Meldingenservice krijgt een verwerkingstrigger met nowUtc. | Minimaal iedere 12 uur. |
| 2 | Systeem | Meldingenservice | Selecteert kandidaatmeldingen. | Alleen Closed tickets met actuele sluitregistratie en ReopenDeadlineUtc <= nowUtc worden geselecteerd. | Databasecriteria zijn leidend. |
| 3 | Systeem | Meldingenservice | Controleert per kandidaat de actuele sluitcontext. | Tickets die al geaccepteerd, heropend of opnieuw gesloten zijn met latere context worden overgeslagen. | Idempotente controle. |
| 4 | Systeem | Meldingenservice | Bepaalt de gebruikersgerichte status. | De melding wordt voor gewone gebruikers als Gesloten behandeld. | Geen aparte backendstatus nodig. |
| 5 | Systeem | Database | Legt waar nodig compacte history vast. | Er ontstaat maximaal één betekenisvolle historyregel voor deze verlopen actuele sluiting. | Dubbele history wordt voorkomen. |
| 6 | Systeem | Schedulerlogging | Rondt verwerking af. | Jobresultaat en eventuele fouten zijn technisch herleidbaar. | Geen gebruikerspopup. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | De scheduler draait later dan gepland. | De verwerking gebruikt actuele databasecriteria en pakt verlopen meldingen alsnog op. | Niet van toepassing. | Alleen mutaties voor nog relevante kandidaten. |
| ALT-002 | 2 | Er zijn geen verlopen heropentermijnen. | De job eindigt zonder ticketmutatie. | Niet van toepassing. | Geen. |
| ALT-003 | 3 | De melding is intussen door de gebruiker of beheerder heropend. | De kandidaat wordt overgeslagen. | Niet van toepassing. | Geen. |
| ALT-004 | 3 | De oplossing is al geaccepteerd. | De kandidaat wordt overgeslagen omdat de melding al gebruikersgericht gesloten is. | Niet van toepassing. | Geen nieuwe mutatie. |
| ALT-005 | 5 | History voor deze verlopen sluiting bestaat al. | De verwerking maakt geen dubbele historyregel aan. | Niet van toepassing. | Geen dubbele mutatie. |
| ALT-006 | 5 | Verwerking van één melding faalt technisch. | Fout wordt gelogd; de job kan andere kandidaten verwerken en dezelfde melding komt bij een latere run opnieuw in aanmerking. | Niet van toepassing. | Geen gedeeltelijke mutatie voor de gefaalde kandidaat. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Er wordt geen afzonderlijke schedulerjob per ticket aangemaakt voor de heropentermijn. |
| BR-002 | De periodieke verwerking draait minimaal iedere 12 uur. |
| BR-003 | Selectie gebeurt op actuele databasecriteria en niet op eerder ingeplande tickettaken. |
| BR-004 | De verwerking is idempotent en moet gemiste eerdere scheduleruitvoeringen kunnen opvangen. |
| BR-005 | Verlopen van de heropentermijn maakt geen nieuwe sluitregistratie aan. |
| BR-006 | Verlopen van de heropentermijn verstuurt geen extra systeembericht aan de melder. |
| BR-007 | De gebruikersgerichte status Gesloten blijft afgeleid uit ticketstatus, actuele sluitregistratie, acceptatie en heropentermijn. |
| BR-008 | Technische fouten in de job worden gelogd zonder reguliere gebruikersflows te blokkeren. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
Tickets.Status | Alleen Closed komt in aanmerking. |
| Actuele sluitregistratie | Moet de meest recente relevante sluiting van het ticket zijn. |
ReopenDeadlineUtc | Moet kleiner dan of gelijk zijn aan het actuele server-side UTC-moment. |
AcceptedAtUtc | Wanneer gevuld, is de gebruikersgerichte sluiting al definitief en is geen extra verwerking nodig. |
| Latere heropening | Een latere TicketReopenRequests-registratie of statuswijziging maakt de kandidaat ongeldig. |
| History-idempotentie | Dubbele historyregels voor dezelfde verlopen actuele sluiting worden voorkomen. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 5 | Create / idempotent | TicketHistory | Compacte historyregel dat de actuele heropentermijn is verlopen en de melding definitief gesloten is, wanneer deze nog niet bestaat. |
| 5 | Event | TicketReopenDeadlineExpired | Domeinevent of technische eventregistratie voor verlopen heropentermijn. |
| 6 | Log | Schedulerlogging | Jobuitvoering, aantallen en technische fouten worden vastgelegd. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
TicketClosures | De bestaande sluitregistratie blijft de formele bron; er wordt geen tweede sluiting aangemaakt. |
Tickets.Status | De backendstatus is al Closed; Opgelost en Gesloten zijn gebruikersgerichte afleidingen. |
SystemMessages | Het verlopen van de heropentermijn stuurt geen extra bericht. |
PrivateMessages | Er wordt geen privébericht aangemaakt. |
TicketDiscussionMessages | Het verlopen van de termijn is geen inhoudelijke discussie. |
13. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft dat verlopen heropentermijnen niet via losse jobs per melding worden afgehandeld, maar via een periodieke backendverwerking. |
| Technisch Ontwerp | Technisch Ontwerp: meldingen, tickets en beheerafhandeling, communicatie, background jobs en logging en foutafhandeling beschrijven de technische uitwerking. Beschrijft de TickerQ-job uit als periodieke idempotente verwerking op basis van databasecriteria, met minimaal 12-uursinterval. |
| Technisch Ontwerp | Technisch Ontwerp: meldingen, tickets en beheerafhandeling, communicatie, background jobs en logging en foutafhandeling beschrijven de technische uitwerking. Beschrijft dat gemiste scheduleruitvoeringen door dezelfde criteria bij latere runs worden opgevangen. |
| Software Requirements Specification | Neem eisen op voor periodieke verwerking, idempotentie, geen extra sluitrecord, geen extra gebruikercommunicatie en technische logging. |
| Database-informatie | TicketClosures.ReopenDeadlineUtc, TicketClosures.AcceptedAtUtc, ticketstatus en TicketHistory moeten de periodieke verwerking ondersteunen. |
19. SRS-trace
Deze usecase bevat geen normatieve requirementtekst. De centrale eis en acceptatiecriteria staan in de SRS; onderstaande tabel koppelt de usecase-afleiding alleen aan centrale SRS-*- en AC-*-items.
| Usecase-afleiding | Dekt | Usecasecontext |
|---|---|---|
REQ-UC-GEN-TIC-016-001 | SRS-TIC-004 SRS-ARCH-004 AC-TIC-004 AC-ARCH-004 | Verlopen ticket-heropentermijnen via een periodieke TickerQ-verwerking afhandelen en niet via afzonderlijke jobs per melding |
REQ-UC-GEN-TIC-016-002 | SRS-TIC-008 SRS-ARCH-004 AC-TIC-008 AC-ARCH-004 | De periodieke verwerking moet minimaal iedere 12 uur gesloten meldingen controleren waarvan de actuele ReopenDeadlineUtc is verstreken |
REQ-UC-GEN-TIC-016-003 | SRS-TIC-008 SRS-ARCH-004 AC-TIC-008 AC-ARCH-004 | De periodieke verwerking moet idempotent zijn en gemiste eerdere scheduleruitvoeringen kunnen opvangen |
REQ-UC-GEN-TIC-016-004 | SRS-TIC-001 SRS-ARCH-004 AC-TIC-001 AC-ARCH-004 | De periodieke verwerking mag geen nieuw TicketClosures-record aanmaken |
REQ-UC-GEN-TIC-016-005 | SRS-MSG-007 SRS-TIC-001 SRS-ARCH-004 AC-MSG-007 AC-TIC-001 AC-ARCH-004 | De periodieke verwerking mag geen extra systeembericht of privébericht aanmaken door alleen het verlopen van de heropentermijn |
REQ-UC-GEN-TIC-016-006 | SRS-TIC-008 SRS-NFR-AUD-001 SRS-ARCH-004 AC-TIC-008 AC-NFR-AUD-001 AC-ARCH-004 | De periodieke verwerking moet waar nodig een compacte, niet-duplicerende TicketHistory-regel kunnen vastleggen |
REQ-UC-GEN-TIC-016-007 | SRS-TIC-003 SRS-NFR-LOG-001 SRS-ARCH-004 AC-TIC-003 AC-NFR-LOG-001 AC-ARCH-004 | De periodieke verwerking moet technische fouten loggen en één gefaalde melding niet als blokkade voor alle andere kandidaten behandelen |