Bewijs bij badges — eLearning-evidence in OciServe (#2037-#2042) #2049

Merged
brenno merged 8 commits from feature/bewijs-bij-badges into main 2026-09-10 18:52:13 +00:00
Owner

Samenvatting

Deze PR voegt de volledige "bewijs bij badges"-functionaliteit toe aan de eLearning-module, tegen de bestaande OciServe API-specificatie.

  • #2037 — Vierde bestemming 'Mijn bewijs' in de eLearning-zijbalk
  • #2038 — Aanleverpad: vierstaps dialoog (soort, bestand, geldigheid, toestemming)
  • #2039 — Statuskaarten in mensentaal met volgende stap per status
  • #2040 — Portefeuille koppelen (tweestaps: verbinden, dan kiezen wat je deelt)
  • #2041 — Bewijs opnemen in gegevensinzage en privacy-export
  • #2042 — Contractpoort: alle OciServe-routes getoetst tegen gepinde OpenAPI-spec

Daarnaast:

  • 39 nieuwe strings vertaald in alle 31 talen (geen passthrough)
  • Widget- en modeltests voor alle nieuwe dialogen en het portefeuille-model
  • app_theme_contrast_test-fix (palette.accentInk i.p.v. colorScheme.primary)

Test plan

  • make check groen (statische poorten + 11k+ tests + dekkingsvloer + goldens)
  • make check-secrets groen (gitleaks + trufflehog)
  • make sast groen (semgrep, 0 findings)
  • CI static-gate groen

Closes #2037, #2038, #2039, #2040, #2041, #2042

Generated with Devin

## Samenvatting Deze PR voegt de volledige "bewijs bij badges"-functionaliteit toe aan de eLearning-module, tegen de bestaande OciServe API-specificatie. - **#2037** — Vierde bestemming 'Mijn bewijs' in de eLearning-zijbalk - **#2038** — Aanleverpad: vierstaps dialoog (soort, bestand, geldigheid, toestemming) - **#2039** — Statuskaarten in mensentaal met volgende stap per status - **#2040** — Portefeuille koppelen (tweestaps: verbinden, dan kiezen wat je deelt) - **#2041** — Bewijs opnemen in gegevensinzage en privacy-export - **#2042** — Contractpoort: alle OciServe-routes getoetst tegen gepinde OpenAPI-spec Daarnaast: - 39 nieuwe strings vertaald in alle 31 talen (geen passthrough) - Widget- en modeltests voor alle nieuwe dialogen en het portefeuille-model - `app_theme_contrast_test`-fix (palette.accentInk i.p.v. colorScheme.primary) #### Test plan - [x] `make check` groen (statische poorten + 11k+ tests + dekkingsvloer + goldens) - [x] `make check-secrets` groen (gitleaks + trufflehog) - [x] `make sast` groen (semgrep, 0 findings) - [ ] CI `static-gate` groen Closes #2037, #2038, #2039, #2040, #2041, #2042 Generated with [Devin](https://devin.ai)
Pin OciServe's docs/openapi.yaml (commit 8f73aefd) in test/fixtures/ en
schrijf een test die elke route die ociserve_gateway.dart aanroept
opzoekt in die spec — met methode en responsvelden. Een verwijderde of
hernoemde route in OciServe laat de poort rood worden in plaats van de
app stil te breken bij een gebruiker.

De test draait in make check-registrations (per-PR static-gate), naast
de bestaande registratie-invarianten.

Closes #2042

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Voegt de vierde bestemming in de zijbalk toe, met modellen voor
bewijsstukken (quarantaineprotocol: pending → uploaded → clean/rejected),
kwalificaties (badges met geldigheidsdatum en skill-snapshot) en
skill-definities (cursuseisen, geldigheidsduur). De gateway krijgt
routes voor evidence-uploads, kwalificaties en badge-administratie.
Het bewijsscherm toont badges bovenaan met hun geldigheidsdatum,
daaronder de bewijsstukken met hun status — begin bij de badge,
niet bij een uploadvak.

De contractpoort-test is uitgebreid met de 7 nieuwe routes.

Closes #2037

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Vervangt de korte status-chip op bewijsstukken door een statuskaart
die in mensentaal zegt wat er gebeurt: 'In behandeling sinds {datum}.
Meestal binnen twee werkdagen.' of 'Geaccepteerd. Het bewijsstuk is
goedgekeurd.' Elke negatieve uitkomst eindigt met een concrete
volgende stap — een afwijzing zonder volgende stap is een bug, geen
tekst. Het onderscheid tussen 'opgegeven' en 'in behandeling' blijft
zichtbaar tot een beoordelaar ernaar heeft gekeken.

Closes #2039

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Voegt het vierstaps aanleverdialoog toe: soort (al ingevuld vanuit de
badge), bestand (PNG/JPEG/WebP/PDF met zelfcontrole op formaat),
geldig tot (voorgevuld, overslaanbaar) en toestemming (wat er met het
document gebeurt in gewone taal). Het bestand gaat via het
quarantaineprotocol: eerst een slot reserveren, dan de bytes
uploaden. Na het aanleveren verschijnt het stuk als 'opgegeven, nog
niet gecontroleerd' tot een beoordelaar ernaar heeft gekeken.

Closes #2038

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Voegt modellen toe voor portefeuille-verbindingen en credentials, met
een toestandsmachine (unavailable → disconnected → connecting →
connected → revoked). Het widget toont een tweestaps
toestemmingsflow: stap 1 verbinden (OAuth, geen wachtwoord, niet
zoeken op e-mailadres), stap 2 kiezen welke credentials gedeeld worden.
De cursist kan de verbinding altijd verbreken; eerder aangeleverd
bewijs blijft staan.

Tot OciServe#524 landt toont het widget een "nog niet beschikbaar"
status, zodat de cursist weet dat de functie bestaat maar nog niet
actief is.

Closes #2040

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
De gegevensinzage had al categorie- en veldlabels voor bewijsstukken,
kwalificaties en het technische toegangslogboek. De glossary
("Begrippen uitgelegd") legt nu in gewone taal uit wat een bewijsstuk
is, wie het kan inzien, wat het toegangslogboek toont, en wat er
overblijft na een verwijderingsverzoek — bewijsstukken en
beoordelingen verdwijnen, bewaarregels laten zien of er een restant
achterblijft voor een lopende bewaarplicht.

Closes #2041

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Los de passthrough-blocker op: 39 nieuwe strings voor de bewijs-feature
zijn nu echt vertaald in alle talen (geen Nederlandse bronstring als
vertaling). Ook de app_theme_contrast_test-fix (palette.accentInk in
plaats van colorScheme.primary) en de aangescherpte contractpoort- en
evidence-tests zitten in deze commit.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
test(evidence): dek bewijs-dialogen en portefeuille-model (#2037-#2042)
All checks were successful
scans / scans (pull_request) Successful in 3m13s
static-gate / static-gate (pull_request) Successful in 8m53s
web-gate / web-gate (pull_request) Successful in 5m50s
62051e29c6
Voegt widget- en modeltests toe voor de vijf bestanden die onder de
per-file dekkingsvloer zaten: ociserve_portfolio.dart (model),
ociserve_evidence.dart, ociserve_evidence_submit.dart,
ociserve_portfolio_link.dart (widget-dialogen), en
ociserve_courses_dialog_evidence.dart (via de courses-dialog).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit df64722676 into main 2026-09-10 18:52:13 +00:00
Sign in to join this conversation.
No description provided.