feat(behandel): behandel-portal — werkbak + beoordeling (closes #13) #87
Reference in New Issue
Block a user
Delete Branch "feat/13-behandel-portal"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
Finishes S-12 · Behandel-portal — werkbak + beoordeling. The backend sub-slices (S-12a/b/c-1/c-2) were merged, but the slice's stated outcome — a behandel portal with medewerker login, a werkbak, and decide — had no frontend. This adds it.
libs/auth:MedewerkerAuthService+provideMedewerkerAuth(Keycloakmedewerkerrealm), aroles/hasRolesurface on the sharedAuthService, and a realm-roles protocol mapper so the SPA can readbehandelaar/teamleadfrom the token. The BFF remains the security boundary (ADR-0013).apps/behandel: a new Nx Angular app mirroring self-service — medewerker OIDC login and a werkbak page listing registrations awaiting beoordeling (GET /behandel/werkbak) with per-row Goedkeuren/Afwijzen actions (POST /behandel/registrations/{id}/decide) that refresh the list. NL DS/Utrecht, standalone + signals.:8142, depends on Keycloak); added to the smokeWAIT_SVCS+ CI log dump;frontend-decisions.mdanddemo-script.mdupdated.Closes #13
Definition of Done
refs #13).docker compose upfrom a fresh clone reaches green health checks within 3 minutes. (behandel image + container verified locally; full stack gated in CI.)docs/demo-script.md.Notes for reviewers
medewerkerconfig + SPA fallback.WerkbakItemcontract has no citizen name (werkbak shows the BSN) — adding one is a BFF+domain contract change; and the domain's temporary adminapproveendpoint is now unused by the e2e and could be removed.Scaffold apps/behandel (mirrors self-service): medewerker-realm OIDC login, the werkbak page listing registrations awaiting beoordeling (GET /behandel/werkbak) with goedkeuren/afwijzen actions (POST /behandel/registrations/{id}/decide) that refresh the list, plus Dockerfile and same-origin nginx reverse proxy for /behandel/ (ADR-0013; S-12). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>The happy path clicked Goedkeuren and immediately navigated to the openbaar register, which cancelled the in-flight POST /behandel/registrations/{id}/decide (nginx 499) — the decision never reached the domain, so the registration stayed INGEDIEND and the final INGESCHREVEN assertion failed. Wait for the decide response (204) before navigating away. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>