S-10b · Diploma upload via ACL Documenten API + self-service portal #103

Closed
opened 2026-07-20 07:35:17 +00:00 by not · 2 comments
Contributor

Split from #11 (S-10 was too large for one slice per CLAUDE.md §13). This is the document-upload vertical; it builds on the WachtOpDocumenten task introduced by #102 (S-10a) — a successful upload completes that task (documents-in-time branch).

Outcome: the self-service portal supports diploma upload. The document is stored in the ZGW Documenten (DRC) API and related to the zaak. Per §8.1 all document calls go through the ACL — no other service constructs ZGW URLs.

In scope

  • ACL: new Documenten gateway (create enkelvoudiginformatieobject + relate via zaakinformatieobjecten) + ACL API endpoint. ADR for fronting the Documenten API through the ACL (new ZGW boundary, §8.1/§14).
  • Infra: seed an informatieobjecttype in infra/openzaak/seed_catalogus.py + Documenten API autorisaties.
  • Domain: an upload use case that (via the ACL) stores the document and completes WachtOpDocumenten.
  • BFF: authenticated POST /self-service/registrations/{id}/documents (multipart) forwarding to the domain; .Produces<>() so services/bff/openapi.json stays complete; regenerate libs/api-client.
  • Portal: first real form/file-input in the self-service app (NL DS / Utrecht components, WCAG 2.1 AA + axe); SECURE_API_ROUTES already covers /self-service/.
  • Verify: BDD upload-completes-wait-task; Playwright e2e upload journey.

Depends on: #102 (S-10a).

Definition of Done

  • A linked Gitea issue exists (this one).
  • Failing test written and committed first.
  • Implementation makes the test pass.
  • Refactor commit follows if structure improved.
  • Conventional Commit messages referencing this issue (refs #NN).
  • All Gitea Actions CI jobs green: lint, unit, integration, mutation (ratchet), e2e, container build + push, compose-up smoke test.
  • docker compose up from a fresh clone reaches green health checks within 3 minutes.
  • Docs touched if behaviour, contracts, or operations changed.
  • ADR added in docs/architecture/ if a non-obvious decision was made.
  • Demo note appended to docs/demo-script.md if the slice is user-visible.
  • This issue closed by the merging PR (closes #NN).
Split from #11 (S-10 was too large for one slice per CLAUDE.md §13). This is the **document-upload vertical**; it builds on the `WachtOpDocumenten` task introduced by #102 (S-10a) — a successful upload completes that task (documents-in-time branch). **Outcome:** the self-service portal supports **diploma upload**. The document is stored in the ZGW **Documenten (DRC) API** and related to the zaak. Per §8.1 **all** document calls go through the ACL — no other service constructs ZGW URLs. **In scope** - ACL: new Documenten gateway (create `enkelvoudiginformatieobject` + relate via `zaakinformatieobjecten`) + ACL API endpoint. ADR for fronting the Documenten API through the ACL (new ZGW boundary, §8.1/§14). - Infra: seed an `informatieobjecttype` in `infra/openzaak/seed_catalogus.py` + Documenten API autorisaties. - Domain: an upload use case that (via the ACL) stores the document and completes `WachtOpDocumenten`. - BFF: authenticated `POST /self-service/registrations/{id}/documents` (multipart) forwarding to the domain; `.Produces<>()` so `services/bff/openapi.json` stays complete; regenerate `libs/api-client`. - Portal: first real form/file-input in the self-service app (NL DS / Utrecht components, WCAG 2.1 AA + axe); `SECURE_API_ROUTES` already covers `/self-service/`. - Verify: BDD upload-completes-wait-task; Playwright e2e upload journey. **Depends on:** #102 (S-10a). ## Definition of Done - [ ] A linked Gitea issue exists (this one). - [ ] Failing test written and committed first. - [ ] Implementation makes the test pass. - [ ] Refactor commit follows if structure improved. - [ ] Conventional Commit messages referencing this issue (`refs #NN`). - [ ] All Gitea Actions CI jobs green: lint, unit, integration, mutation (ratchet), e2e, container build + push, compose-up smoke test. - [ ] `docker compose up` from a fresh clone reaches green health checks within 3 minutes. - [ ] Docs touched if behaviour, contracts, or operations changed. - [ ] ADR added in `docs/architecture/` if a non-obvious decision was made. - [ ] Demo note appended to `docs/demo-script.md` if the slice is user-visible. - [ ] This issue closed by the merging PR (`closes #NN`).
not added this to the Iteration 2 — Flow Completeness milestone 2026-07-20 07:35:17 +00:00
not added the type:slicearea:aclarea:portal-self-servicearea:infraarea:bff labels 2026-07-20 07:35:39 +00:00
Author
Contributor

Narrowed by the S-10a revision: the self-service "Documenten aanleveren" action, its BFF/domain path, and the WachtOpDocumenten completion already exist (S-10a, #102). S-10b is now purely the real ZGW storage: turn the action into a file upload, store it as an enkelvoudiginformatieobject in the Documenten (DRC) API via the ACL, relate it to the zaak, and set the zaak to a cancellation status on timeout expiry (the S-10a/S-10b boundary noted in ADR-0017).

Narrowed by the S-10a revision: the self-service **"Documenten aanleveren"** action, its BFF/domain path, and the WachtOpDocumenten completion already exist (S-10a, #102). S-10b is now purely the **real ZGW storage**: turn the action into a file upload, store it as an `enkelvoudiginformatieobject` in the Documenten (DRC) API via the ACL, relate it to the zaak, and set the zaak to a cancellation status on timeout expiry (the S-10a/S-10b boundary noted in ADR-0017).
Author
Contributor

Scope confirmed: S-10b is the diploma-upload vertical (ACL Documenten gateway + informatieobjecttype seed + domain-stores-via-ACL + BFF multipart + portal file input + integration/e2e). ADR proposal #107. The zaak-close-on-expiry item ADR-0017 had deferred here is carved to #106 (S-10c) to keep this PR reviewable (§13).

Scope confirmed: S-10b is the **diploma-upload vertical** (ACL Documenten gateway + informatieobjecttype seed + domain-stores-via-ACL + BFF multipart + portal file input + integration/e2e). ADR proposal #107. The zaak-close-on-expiry item ADR-0017 had deferred here is carved to #106 (S-10c) to keep this PR reviewable (§13).
not closed this issue 2026-07-21 12:15:35 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eho/register-referentie#103