UC-OVG-RES-006 — Resultaat als PDF downloaden binnen oudercontext
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-OVG-RES-006 |
| Naam | Resultaat als PDF downloaden binnen oudercontext |
| Domein | Ouder/voogd / Resultaten en geschiedenis |
| Primaire actor | Ouder/voogd |
| Secundaire actor(en) | Frontend, backend, database, PDF-exportservice |
| Rolcontext | Actieve ouder-/voogdcontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Resultaatdetail, PDF-download |
| Gerelateerde usecases | UC-OVG-RES-004, UC-OVG-RES-005, UC-LLN-RES-004, UC-DOC-RES-005 |
| Primaire entiteiten | ExerciseRuns, ExerciseRunProgress, UserRelationships, PdfExportService |
| Secundaire entiteiten / events | GuardianPdfExportRequested, PdfExportGenerated |
| Gerelateerde popups | POP-OVG-PDF-EXPORT-ERROR, POP-OVG-RESULT-ACCESS-DENIED |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een ouder/voogd een PDF-export van een afgeronde run van een gekoppeld kind downloadt. De PDF gebruikt dezelfde historische runcontext en inhoud als de resultaatdetailweergave.
PDF-export is een raadpleegactie met exportbestand als output. De export mag geen resultaten herberekenen vanuit clientstate en mag geen oefenrun wijzigen.
Uitgangspunten
- PDF-export is alleen beschikbaar voor geautoriseerde afgeronde runs.
- De export gebruikt historische runcontext.
- QuestPDF is de beoogde techniek voor PDF-generatie.
- De inhoud sluit aan op resultaatdetail en statistieken.
- Export veroorzaakt geen domeinmutatie in de run.
3. Scope
Deze usecase beschrijft:
- starten van PDF-export vanuit resultaatdetail;
- herhalen van autorisatiecontrole;
- samenstellen van exportmodel uit historische rungegevens;
- genereren van PDF-bestand met resultaatinhoud;
- teruggeven van veilige bestandsnaam.
Deze usecase beschrijft niet:
- bulkexport van alle resultaten;
- e-mailen van PDF;
- resultaatcorrectie;
- opslaan van export als permanent documentrecord.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Leerling / Resultaten | De historische run, statistiekvelden en PDF-bron blijven dezelfde bron als in het leerlingdomein; de ouder-/voogdweergave voegt alleen autorisatie en selectie op oudercontext toe. |
| Docent / Resultaten | Docentresultaten blijven beperkt tot de eigen docentcontext; ouder/voogd mag juist alle niveaus van het gekoppelde kind zien. |
| Generiek / Relaties | Relatievorming, uitnodigingen en algemene relatie-lifecycle blijven buiten deze resultaatusecases. |
| Database / Readmodels | Tellers, filters en overzichten zijn afgeleide readmodels boven bestaande relatie-, niveau-, oefening- en rungegevens. |
4. Pre-condities
| 001 | Er is een afgeronde run geopend. | | 002 | De run hoort bij een actief gekoppeld kind. | | 003 | De PDF-service is beschikbaar. | | 004 | Historische run- en vraaggegevens zijn leesbaar. |
5. Post-condities
| 001 | De ouder/voogd ontvangt een PDF of veilige foutmelding. | | 002 | Rungegevens blijven ongewijzigd. | | 003 | De exportresponse bevat geen gegevens buiten de geautoriseerde run. | | 004 | Bestandsnaam is veilig opgebouwd. |
6. Trigger
De ouder/voogd kiest Download als PDF op het resultaatdetail.
7. Normale processtroom
| Stap | Actor / component | Actie | Resultaat | Data / controle |
|---|---|---|---|---|
| 1 | Ouder/voogd | Kiest Download als PDF | Frontend vraagt export aan | RunId |
| 2 | Backend | Valideert ouder-/voogdrelatie en run | Export is toegestaan | UserRelationships |
| 3 | Backend | Stelt exportmodel samen | Historische inhoud wordt verzameld | ExerciseRuns + progress |
| 4 | PDF-exportservice | Genereert PDF | PDF bevat resultaatdetail en statistieken | QuestPDF |
| 5 | Backend | Bepaalt bestandsnaam | Veilige naam wordt gebruikt | Datum/categorie/oefening |
| 6 | Frontend | Start download | Ouder/voogd ontvangt bestand | PDF response |
7.1 Scherm- en routegedrag
- De resultatenroutes worden altijd opnieuw server-side geautoriseerd.
- De ouder-/voogdweergave toont read-only informatie over gekoppelde kinderen.
- De pagina gebruikt functionele namen en context, geen technische identifiers als herkenningsmiddel.
- Oude filters, routeparameters of browserstate mogen geen toegang afdwingen.
8. Alternatieve en exceptionele processtromen
| 001 | Run is niet meer geautoriseerd: export wordt geweigerd. | | 002 | PDF-service faalt: foutmelding via PopupKey en veilige technische foutafhandeling. | | 003 | Historische module-rendering is beperkt beschikbaar: generieke veilige representatie wordt gebruikt. | | 004 | Bestandsnaam bevat ongeldige tekens: naamdelen worden opgeschoond. | | 005 | Run is niet afgerond: exportactie is niet beschikbaar of wordt server-side geweigerd. |
8.1 Afhandeling van verouderde of ongeldige clientstate
- De backend herhaalt autorisatie bij iedere raadpleeg-, filter-, export- of liveactie.
- Oude routeparameters, browserselecties en clientcache worden genegeerd wanneer de actuele server-side context geen toegang geeft.
- De frontend mag het scherm herstellen door het actuele readmodel opnieuw op te vragen.
9. Business rules
| 001 | PDF-export gebruikt dezelfde historische runcontext als schermweergave. | | 002 | PDF-export is alleen toegestaan voor actief gekoppelde kinderen. | | 003 | De export mag geen nieuwe run of resultaatmutatie aanmaken. | | 004 | Ongeldige tekens in bestandsnamen worden opgeschoond. | | 005 | Technische exportfouten worden veilig afgehandeld zonder gevoelige gegevens te lekken. |
9.1 Readmodel- en tellerdefinities
| Waarde | Definitie | Uitsluitingen / grenzen |
|---|---|---|
| Exportmodel | Samenvatting, vraagdetails en statistieken van de run. | Geen clientstate. |
| Bestandsnaam | Gebaseerd op datum, OefenHub, categorie en oefening. | Ongeldige tekens opgeschoond. |
| PDF-inhoud | Zelfde inhoud als resultaatdetail voor oudercontext. | Geen extra beheerinformatie. |
| Exportstatus | Download of foutafhandeling. | Geen domeinstatus op run. |
9.2 Autorisatie- en privacygrenzen
- De zichtbare dataset wordt altijd server-side beperkt tot actieve ouder-/voogdrelaties.
- Een gebruiker met gecombineerde rollen krijgt binnen deze routes geen impliciete docent- of beheerderinzage.
- Resultaat- en livegegevens van niet-gekoppelde kinderen worden nooit gedeeltelijk getoond.
10. Datavalidatie
| 001 | RunId moet bestaan en geautoriseerd zijn. | | 002 | Run moet afgerond zijn. | | 003 | PDF-exportservice moet beschikbaar zijn. | | 004 | Exportmodel mag alleen gegevens van de gekozen run bevatten. | | 005 | Bestandsnaam moet veilig zijn voor download. |
11. Datamutaties en events
| 001 | Geen domeinmutaties. |
| 002 | GuardianPdfExportRequested en PdfExportGenerated beschrijven de exportafhandeling, niet een wijziging aan de run. |
| 003 | De PDF wordt als tijdelijke response geleverd. |
12. Geen datamutaties
| 001 | ExerciseRuns worden niet gewijzigd. | | 002 | Progresspayload wordt niet herschreven. | | 003 | Er ontstaat geen verplicht permanent documentrecord. | | 004 | Geen systeembericht of privébericht wordt aangemaakt. |
13. State diagram
Niet van toepassing. PDF-export is een tijdelijke exportresponse en wijzigt geen persistent statusobject.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik |
|---|---|
| POP-OVG-PDF-EXPORT-ERROR | Wordt gebruikt wanneer PDF-export veilig niet kan worden afgerond. |
| POP-OVG-RESULT-ACCESS-DENIED | Wordt gebruikt wanneer actuele autorisatie voor de export ontbreekt. |
Popupteksten, knopteksten, inputlabels en themakeuzes worden niet in deze usecase gedupliceerd. Het popupregister en de popupthemes blijven bronhoudend.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| 001 | PDF-export moet ook vanuit ouder-/voogdgeschiedenis beschikbaar zijn. | | 002 | De export gebruikt dezelfde historische runcontext als de detailweergave. | | 003 | PDF-generatie gebruikt de generieke exportregels en QuestPDF-richting. |
18.1 Impact voor database-informatie en ontwerpbronnen
| 001 | Autorisatiematrix moet ouder-/voogdraadpleging onderscheiden van docentraadpleging. | | 002 | Usecase-scherm-matrix moet de betrokken ouder-/voogdschermen koppelen aan deze usecase. | | 003 | Usecase-requirement-matrix moet de requirements uit hoofdstuk 19 opnemen. | | 004 | Readmodeldefinities voor ouder-/voogdresultaten moeten alle niveaus van het gekoppelde kind omvatten. |
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.
Er zijn voor deze usecase geen aparte requirement-afleidingen vastgelegd. De procesbeschrijving blijft broncontext voor de SRS-traceability.