Een nieuw (systeem)formulier toevoegen — alles in één map¶
Een formulier-proces is een feature-bundle: één map waarin álles staat wat bij dat formulier hoort. Een developer voegt één map toe; de deploys van beide stacks (zgw = Open Forms/Open Zaak, portal = Operaton/Laravel) pakken er automatisch hun deel uit.
portal/development/features/<naam>/
├── manifest.json # de lijm: namen, proces-key, zaaktype, OF-slug
├── objecttype.json # datacontract (Objects-API) → zgw
├── formulier.py # Open Forms-formulier + bevestigingsmail → zgw
└── <naam>.bpmn # het proces (Operaton) → portal
Eén bron van waarheid. De bundle is de enige plek waar deze bestanden staan. De zgw-stack leest de map via
FEATURES_DIR(default: de portal-repo naast de zgw-repo, instelbaar inzgw/.env).
Wat hoort er níét in de bundle¶
| Onderdeel | Waar | Waarom |
|---|---|---|
Gedeelde subprocessen (zaak-aanmaken, zaak-status-zetten, …) |
development/subprocessen/ |
herbruikt door meerdere features |
| External-task handlers | development/handlers/<Domein>/ (eigen) of portal app/ExternalTasks (platform) |
PHP-classes (PSR-4 autoloading); auto-discovery is recursief — zie external-tasks.md |
| Zaaktype-bootstrap | development/zaaktypen/bootstrap-<naam>-zaaktype.sh |
zaakgericht-werken-logica (Open Zaak) |
De manifest.json¶
{
"naam": "Autorisatieverzoek",
"objecttypeNaam": "Autorisatieverzoek",
"procesKey": "autorisatieverzoek",
"zaaktypeIdentificatie": "Autorisatieverzoek",
"ofSlug": "autorisatieverzoek",
"bestanden": { "objecttype": "objecttype.json", "formulier": "formulier.py", "bpmn": "autorisatieverzoek.bpmn" }
}
| Veld | Gebruikt door | Betekenis |
|---|---|---|
objecttypeNaam |
seeder | matcht name in objecttype.json; UUID wordt per omgeving opgezocht |
procesKey |
seeder | = de proces-id in de BPMN = Operaton process-key |
zaaktypeIdentificatie |
seeder | het zaaktype dat het proces aanmaakt |
naam |
seeder | weergavenaam van de dossierdefinitie |
De vier bestanden¶
objecttype.json— het datacontract. StandaardadditionalProperties: false, dus élk veld dat het formulier wegschrijft moet erin staan — ooktype,kenmerk,of_referentie,pdf(enbijlagenbij bijlagen). BevatenvVar(bv.OBJECTTYPE_<NAAM>_UUID) waarin de bootstrap de UUID schrijft.formulier.py— de Open Forms-definitie: componenten (showInEmailvoor de bevestigingsmail-samenvatting), de registratie-mapping (elk veld → objecttype- property, inclusiefpublic_reference → of_referentieenpdf_url → pdf), en de bevestigingsmail. GebruikOBJECTTYPE_UUID/OBJECTTYPE_VERSIONuit env (niet hardcoden — die geeft de deploy mee).<naam>.bpmn— het proces. De proces-id=procesKeyuit het manifest. Service-tasks krijgen eencamunda:topic(handler indevelopment/handlers/(of een config-worker)).manifest.json— zie hierboven.
Versie staat niet in
.env. De bootstrap publiceert automatisch een nieuwe objecttype-versie bij een schemawijziging; welke versie het formulier gebruikt, bepaalt de deploy just-in-time (zgw/scripts/objecttype-version.sh→ hoogste gepubliceerde versie).
Klaar? Committen en een PR openen¶
Je werk zit op één plek: de map development/features/<naam>/ in portal (plus
evt. een zaaktype-script in zgw). Commit, push en open een PR.
Live brengen = serverbeheerder
Het uitrollen gebeurt niet door de developer (geen terminaltoegang). Na het mergen rolt de serverbeheerder het uit — zie Een formulier/proces live brengen.
Wat gebeurt er bij een inzending?¶
inzending → OF schrijft object → Objects-API-notificatie
→ portal-webhook → dossierdefinitie gevonden → proces gestart → zaak + workers
Checklist (developer)¶
- [ ] Map
development/features/<naam>/metmanifest.json,objecttype.json,formulier.py,<naam>.bpmn. - [ ] In
objecttype.json:additionalProperties:false+ álle weggeschreven velden +envVar. - [ ] In de BPMN: proces-
id==procesKeyuit het manifest; elkecamunda:topicheeft een handler indevelopment/handlers/(of een config-worker). - [ ] Zaaktype-script aangemaakt (
development/zaaktypen/bootstrap-<naam>-zaaktype.sh) en inbootstrap.shgewired (bij een nieuw zaaktype). - [ ] Gecommit + PR geopend. (Uitrollen + verificatie doet de serverbeheerder.)
Zie ook¶
docs/external-tasks.md— workers/handlers.- E-mail — uitgaande mail (bevestigings-/notificatiemails).
zgw/docs/formulieren-tips.md— de Open Forms-/modeler-kant.