Skip to main content

UC-LLN-RES-004 — Resultaat als PDF downloaden

1. Kerngegevens

VeldWaarde
Usecase-IDUC-LLN-RES-004
NaamResultaat als PDF downloaden
DomeinLeerling / Resultaten, statistieken, geschiedenis en PDF-export
Primaire actorLeerling
Secundaire actor(en)OefenHub frontend, OefenHub backend, PDF-service, QuestPDF, database, technische oefenmodule
RolcontextIngelogde leerling die een afgerond resultaat bekijkt of een afgeronde run vanuit geschiedenis opent.
Betrokken schermenResultaatpopup, resultaatdetail vanuit geschiedenis, downloadactie.
Gerelateerde usecasesUC-LLN-RES-001 — Resultaat na afronding bekijken; UC-LLN-RES-002 — Resultaatstatistieken bekijken; UC-LLN-HIS-003 — Resultaatdetail vanuit geschiedenis openen
Primaire entiteitenExerciseRuns, vraag- en antwoordpayload, opgeslagen statistiekvelden
Secundaire entiteiten / eventsHistorische runcontext, PDF-service, module-exportrepresentatie
Gerelateerde popupsNiet van toepassing
PopupregisterNiet van toepassing
MoSCoWShould

2. Omschrijving

Deze usecase beschrijft hoe een leerling het resultaat van een afgeronde oefening als PDF downloadt. De PDF bevat functioneel dezelfde inhoud als de resultaatweergave: samenvatting, vraag- en antwoordtabel, juiste antwoorden, resultaat per vraag, eventuele Geen idee-markeringen, duplicaatmelding wanneer relevant en statistieken.

De PDF-export gebruikt de historisch opgeslagen runcontext en vraag-/antwoorddata zoals die golden ten tijde van genereren, afronden of delen. Latere wijzigingen in naamgeving, configuratie of module-instellingen mogen de historische PDF-inhoud niet stilzwijgend herschrijven. De export gebruikt de opgeslagen resultaatbron, niet actuele live configuratie.

Voor PDF-generatie wordt QuestPDF als beoogde techniek gebruikt. De PDF moet correct omgaan met tabellen, pagina-einden, herhaalde headers, vervolgtekst en footer/paginanummering. De bestandsnaam wordt opgebouwd uit datum/tijd, OefenHub, resultaat, categorie en oefening, waarbij ongeldige tekens worden opgeschoond.

DRY-afbakening: de resultaatinhoud zelf is bronhoudend beschreven in UC-LLN-RES-001 en UC-LLN-RES-002. Deze usecase beschrijft de exportactie, technische PDF-samenstelling, bestandsnaam en downloadafhandeling.

3. Scope

Deze usecase omvat wel:

  • tonen of beschikbaar maken van de actie Download als PDF
  • autoriseren van PDF-export voor de afgeronde run
  • ophalen van dezelfde resultaatbron als de resultaatweergave
  • samenstellen van PDF-inhoud met samenvatting, resultatentabel en statistieken
  • omgaan met meerregelige vragen en antwoorden
  • herhalen van tabelheaders op vervolgpagina's
  • voorkomen dat tabelrijen over pagina's worden gesplitst
  • toevoegen van expliciete vervolgtekst bij voortgezette tabellen
  • toevoegen van consistente footer met paginanummering en exportdatum
  • opschonen van bestandsnaam
  • starten van bestandsdownload
  • veilige foutafhandeling bij exportproblemen

Deze usecase omvat niet:

  • afronden van de oefening
  • wijzigen van resultaatdata
  • opnieuw maken van de oefening
  • delen met vrienden
  • opslaan van PDF-bestanden als blijvend domeinrecord
  • genereren van rapportages over meerdere runs
  • beheerexports of bulkexports
  • herstel van beschadigde runpayload
  • technische implementatie van QuestPDF-componenten op codeklasse-niveau

4. Pre-condities

IDVoorwaarde
PRE-001De leerling is ingelogd of heeft een geldige downloadcontext.
PRE-002De exercise run bestaat.
PRE-003De exercise run is afgerond.
PRE-004De leerling mag het resultaat bekijken en exporteren.
PRE-005De resultaatbron bevat samenvatting, vraagdetails en statistieken.
PRE-006De PDF-service is beschikbaar.
PRE-007De technische module kan waar nodig een veilige exportrepresentatie leveren voor modulespecifieke inhoud.
PRE-008De backend kan een bestandsresponse teruggeven aan de browser.

5. Post-condities

IDResultaat
POST-001De leerling ontvangt een PDF-download van het resultaat.
POST-002De PDF is opgebouwd uit historisch opgeslagen runcontext.
POST-003De PDF bevat dezelfde inhoudelijke resultaatgegevens als de resultaatweergave.
POST-004De PDF heeft een opgeschoonde bestandsnaam.
POST-005Er is geen resultaatdata gewijzigd.
POST-006Bij mislukte export ontstaat geen gedeeltelijke domeinmutatie.
POST-007Er is geen blijvend PDF-domeinrecord aangemaakt.

6. Trigger

De usecase start wanneer de leerling in de resultaatweergave of in een resultaatdetail vanuit geschiedenis kiest voor Download als PDF.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1LeerlingResultaatpopup of resultaatdetailBekijkt een afgerond resultaat.PDF-actie wordt bepaald.UC-LLN-RES-001.
2OefenHub backendResultaatserviceControleert of PDF-export beschikbaar is.Actie wordt getoond wanneer toegestaan.Afgeronde run.
3OefenHub frontendResultaatactiesToont Download als PDF.Leerling kan export starten.Alleen bij afgeronde run.
4LeerlingResultaatactiesKiest Download als PDF.Frontend vraagt PDF aan.Runcontext.
5OefenHub backendRouteguardControleert sessie en autorisatie.Alleen toegestane leerling gaat door.Eigen resultaat of geldige context.
6OefenHub backendResultaatserviceControleert dat de run bestaat en afgerond is.Niet-resultaatwaardige runs worden geblokkeerd.CompletedAtUtc.
7OefenHub backendResultaatserviceLaadt samenvattingsgegevens.PDF-samenvatting kan worden opgebouwd.Naam, datum, totalen.
8OefenHub backendResultaatserviceLaadt vraag- en antwoorddetails.Resultatentabel kan worden opgebouwd.Historische vraagdata.
9OefenHub backendResultaatserviceLaadt statistiekgegevens.Statistiekensectie kan worden opgebouwd.UC-LLN-RES-002.
10OefenHub backendResultaatserviceLaadt context voor categorie, oefening en duplicaatmelding.PDF kan subtitel en duplicaatcontext tonen.Historische context.
11OefenHub backendModule/exporthelperVraagt module-specifieke exportrepresentatie waar nodig.Complexe notatie kan veilig worden weergegeven.Bijvoorbeeld breuken of machten.
12OefenHub backendPDF-serviceBouwt PDF-document op.Samenvatting, tabel en statistieken worden geplaatst.QuestPDF.
13OefenHub backendPDF-servicePast pagina-einden, herhaalde headers en vervolgtekst toe.Lange tabellen blijven leesbaar.Tabelregels niet splitsen.
14OefenHub backendPDF-serviceVoegt footer toe.Elke pagina heeft consistente footer.OefenHub, pagina X van Y, exportdatum.
15OefenHub backendBestandsnaamserviceGenereert en schoont bestandsnaam op.Bestandsnaam is veilig voor download.Datum + categorie + oefening.
16OefenHub backendDownloadresponseRetourneert PDF-bestand.Browser start download.application/pdf.
17OefenHub frontendBrowserOntvangt download.Leerling kan PDF openen of bewaren.Browsergedrag.
18OefenHub backendDownloadafhandelingSluit de request af na het aanbieden van de download.Geen domeinmutatie.Geen PDF-domeinrecord.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0012Run is niet afgerondPDF-actie wordt niet getoond.Niet van toepassingGeen
ALT-0025Sessie is verlopenRouteguard verwijst naar login.RouteguardafhandelingGeen
ALT-0035Leerling mag resultaat niet zienExport wordt geweigerd.Toegang geweigerdGeen
ALT-0046Run bestaat nietExport wordt geblokkeerd.Niet-beschikbaarmeldingGeen
ALT-0057Samenvattingsdata ontbreektExport faalt veilig.ComponentmeldingGeen
ALT-0068Vraagdetails ontbreken of zijn corruptExport faalt veilig of toont alleen verantwoord beschikbare inhoud volgens technische keuze.ComponentmeldingGeen
ALT-0079Statistieken ontbrekenExport toont veilige niet-beschikbaarafhandeling of faalt volgens exportregel.ComponentmeldingGeen
ALT-00811Module-exportrepresentatie faaltSysteem gebruikt veilige generieke representatie waar mogelijk of faalt veilig.ComponentmeldingGeen
ALT-00912PDF-service faaltGeen download; fout wordt veilig teruggekoppeld.ComponentmeldingGeen
ALT-01013Tabel past niet op één paginaPDF-service gebruikt pagina-einden en herhaalde headers.Niet van toepassingGeen
ALT-01115Bestandsnaam bevat ongeldige tekensOngeldige tekens worden opgeschoond.Niet van toepassingGeen
ALT-01216Browserdownload wordt onderbrokenDomeindata blijft ongewijzigd; gebruiker kan opnieuw proberen.BrowserafhandelingGeen
ALT-01318Logging faaltExport blijft functioneel als PDF succesvol is gegenereerd.Niet van toepassingGeen domeinmutatie
ALT-0144Leerling vraagt PDF vanuit geschiedenisDezelfde exportregels gelden op basis van historische runcontext.Niet van toepassingGeen

9. Business rules

IDRegel
BR-001PDF-export is alleen beschikbaar voor afgeronde exercise runs.
BR-002PDF-export gebruikt dezelfde inhoudelijke resultaatbron als de resultaatweergave.
BR-003De PDF gebruikt het afrondmoment als leidende datum in de samenvatting.
BR-004Een afzonderlijk startmoment hoeft niet in de samenvatting getoond te worden wanneer totale doorlooptijd zichtbaar is.
BR-005De PDF bevat de volledige opgave, ook wanneer tekst moet afbreken.
BR-006Gegeven antwoorden en juiste antwoorden mogen over meerdere regels afbreken.
BR-007De PDF mag tekst niet inkorten om tabellen compacter te maken.
BR-008Een tabelrij mag niet over twee pagina's worden gesplitst.
BR-009De resultaattabel moet op vervolgpagina's opnieuw kolomheaders tonen.
BR-010Vervolgpagina's moeten expliciet herkenbaar maken dat de tabel wordt voortgezet.
BR-011Volledige inhoudsblokken worden waar mogelijk als geheel doorgeschoven wanneer splitsen onwenselijk is.
BR-012De footer is op alle pagina's identiek opgebouwd.
BR-013De footer bevat minimaal OefenHub, pagina-aanduiding en exportdatum.
BR-014De bestandsnaam wordt opgeschoond voor ongeldige tekens en genormaliseerde spaties.
BR-015Categorie- en oefeningnaamdelen in de bestandsnaam worden begrensd volgens centrale exportregel.
BR-016Modulespecifieke notatie mag via een module-exporthelper veilig worden weergegeven.
BR-017PDF-export wijzigt geen resultaatdata.
BR-018PDF-export maakt geen nieuwe exercise run aan.
BR-019PDF-export moet ook vanuit geschiedenis beschikbaar zijn.
BR-020De export gebruikt historische runcontext en niet actuele live configuratie.

10. Datavalidatie

Veld / objectValidatie
ExerciseRunIdMoet bestaan en afgerond zijn.
InzagecontextMoet PDF-export toestaan.
SamenvattingsveldenMoeten beschikbaar en consistent zijn.
VraagdetailsMoeten veilig renderbaar zijn.
Juiste antwoordenMoeten beschikbaar zijn uit historische runcontext.
StatistiekveldenMoeten beschikbaar zijn of veilig als niet-beschikbaar worden behandeld.
ExportrepresentatieMag geen actieve of onveilige inhoud bevatten.
BestandsnaamdatumGebaseerd op exportmoment of voorgeschreven datumcomponent.
CategorienaamdeelOngeldige tekens verwijderen en lengte begrenzen.
OefeningnaamdeelOngeldige tekens verwijderen en lengte begrenzen.
PDF-responseMoet als PDF-bestand worden teruggegeven.
Pagina-indelingMag tabelrijen niet inhoudelijk splitsen.

11. Datamutaties en events

StapTypeEntiteit / gegevensbronMutatie
7ReadExerciseRunsSamenvatting wordt gelezen.
8ReadVraag- en antwoordpayloadResultatentabeldata wordt gelezen.
9ReadStatistiekveldenStatistieken worden gelezen.
10ReadHistorische contextCategorie-, oefening- en duplicaatcontext wordt gelezen.
12GeneratePDF-documentTijdelijke PDF-stream wordt opgebouwd.
15GenerateBestandsnaamVeilige downloadnaam wordt opgebouwd.
16ResponsePDF-downloadPDF wordt aan browser aangeboden.

PDF-export maakt geen blijvend PDF-domeinrecord aan en registreert geen functioneel domeinevent. Technische foutlogging is implementatieondersteunend en geen brongegeven van deze usecase.

12. Geen datamutaties

EntiteitReden
ExerciseRunsPDF-export leest resultaatdata en wijzigt de run niet.
ExerciseRunProgressVraagvoortgang blijft ongewijzigd.
VraagpayloadPayload wordt niet herschreven voor PDF.
UsersAccountgegevens blijven ongewijzigd.
UserSettingsVoorkeuren blijven ongewijzigd.
ExercisesOefeningconfiguratie wordt niet gewijzigd.
ExerciseModulesModulemetadata wordt niet gewijzigd.
SystemMessagesEr wordt geen systeembericht aangemaakt.
PrivateMessageThreadsEr wordt geen privébericht aangemaakt.
TicketsEr wordt geen melding aangemaakt.
Permanente PDF-tabelEr wordt geen blijvend PDF-domeinrecord aangemaakt.
Nieuwe runOpnieuw maken gebeurt in UC-LLN-RES-003.

13. State diagram

Niet van toepassing als persistent statusobject. PDF-export is een tijdelijke exportactie die geen runstatus, resultaatstatus of blijvend PDF-domeinrecord wijzigt.

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

16.1 PDF downloaden

16.2 PDF-export faalt veilig

17. Popupverwijzingen

PopupKeyMomentDoel
Niet van toepassingPDF-downloadExport gebruikt geen domeinspecifieke popupregister-popup.

18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification

DoeldocumentAfleiding
Functioneel OntwerpFunctioneel Ontwerp beschrijft geschiedenis, filters, resultaatdetail, statistieken, opnieuw maken en PDF-download vanuit leerlingcontext.
Technisch OntwerpTechnisch Ontwerp: oefenruns en resultaten, PDF-export, readmodels en tellers, frontend-resultaatweergave en privacy/retentie beschrijft de technische afbakening, server-side brondata, autorisatie en UI-compositie voor deze usecase. PDF-export beschrijft QuestPDF, bestandsnaamopbouw, paginering en tijdelijke exportbestanden.
Software Requirements SpecificationSoftware Requirements Specification bevat centrale eisen en acceptatiecriteria voor resultaten, geschiedenis, statistieken, PDF-export en autorisatie op historische data.
Database-informatieDatabase-informatie blijft bron voor runresultaten, voortgangsrecords, snapshots en exportbrondata; normale PDF-downloads introduceren geen permanente PDF-tabel.
OntwerpbronnenOntwerpbronnen bevatten aanvullende businessregels voor resultaatweergave, geschiedenis, statistieken en exportrepresentatie.

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-afleidingDektUsecasecontext
REQ-UC-LLN-RES-004-001SRS-LRN-006
SRS-PDF-001
AC-LRN-006
AC-PDF-001
Een afgerond resultaat als PDF kunnen downloaden
REQ-UC-LLN-RES-004-002SRS-AUTH-001
SRS-LRN-009
SRS-PDF-003
AC-AUTH-001
AC-LRN-009
AC-PDF-003
PDF-export server-side autoriseren
REQ-UC-LLN-RES-004-003SRS-LRN-006
SRS-PDF-001
AC-LRN-006
AC-PDF-001
De PDF baseren op dezelfde resultaatbron als de resultaatweergave
REQ-UC-LLN-RES-004-004SRS-RDM-001
SRS-RDM-002
SRS-RDM-006
SRS-LRN-009
SRS-PDF-001
AC-RDM-001
AC-RDM-002
AC-RDM-006
AC-LRN-009
AC-PDF-001
De PDF kunnen genereren met samenvatting, resultatentabel en statistieken
REQ-UC-LLN-RES-004-005SRS-LRN-003
SRS-PDF-001
AC-LRN-003
AC-PDF-001
Volledige vragen en antwoorden in de PDF tonen zonder inhoudelijke inkorting
REQ-UC-LLN-RES-004-006SRS-RDM-001
SRS-LRN-009
AC-RDM-001
AC-LRN-009
Tabelheaders herhalen op vervolgpagina's
REQ-UC-LLN-RES-004-007SRS-RDM-001
SRS-LRN-009
AC-RDM-001
AC-LRN-009
Tabelrijen niet over twee pagina's splitsen
REQ-UC-LLN-RES-004-008SRS-RDM-001
SRS-RDM-006
SRS-LRN-006
AC-RDM-001
AC-RDM-006
AC-LRN-006
Vervolgpagina's van de resultaattabel herkenbaar maken
REQ-UC-LLN-RES-004-009SRS-RDM-001
SRS-LRN-009
SRS-CNT-002
AC-RDM-001
AC-LRN-009
AC-CNT-002
Een consistente footer tonen met OefenHub, paginanummering en exportdatum
REQ-UC-LLN-RES-004-010SRS-LRN-009
SRS-PDF-001
AC-LRN-009
AC-PDF-001
De PDF-bestandsnaam opschonen en normaliseren
REQ-UC-LLN-RES-004-011SRS-LRN-009
SRS-MOD-003
SRS-NFR-SEC-001
AC-LRN-009
AC-MOD-003
AC-NFR-SEC-001
Modulespecifieke notatie veilig kunnen exporteren via generieke of moduleondersteunde representatie
REQ-UC-LLN-RES-004-012SRS-LRN-010
SRS-PDF-001
SRS-NFR-AUD-001
AC-LRN-010
AC-PDF-001
AC-NFR-AUD-001
PDF-download ook vanuit geschiedenis kunnen aanbieden
REQ-UC-LLN-RES-004-013SRS-LRN-006
SRS-PDF-001
AC-LRN-006
AC-PDF-001
Bij PDF-export geen resultaatdata wijzigen
REQ-UC-LLN-RES-004-014SRS-LRN-009
SRS-SHR-001
SRS-NFR-SEC-001
AC-LRN-009
AC-SHR-001
AC-NFR-SEC-001
Exportfouten veilig terugkoppelen zonder gedeeltelijke domeinmutatie