RIP R2.2 VO Bundle¶
The R2.2 bundle is the second Regular Infrastructure Projects (RIP) process bundle shipped for the Province of Flevoland. It covers the voorlopig ontwerp (preliminary design) phase, picking up exactly where the R2.1 bundle's "Fase 1 voltooid โ R2.2" end event leaves off.
It lives at examples/organizations/flevoland/rip-phase-22/ and is deployed to Operaton in a single multipart request from the BPMN Modeler's Deploy modal, the same way every other bundle is.
The process was derived from R2_2 - VO.pdf (rev. 21-11-2024), one of the Flevoland phase specifications kept under examples/organizations/flevoland/rip-phases-left/.
Process flow¶
RipR22Process has four lanes and nine user tasks.
| Lane | Responsible for |
|---|---|
| Projectleider | Overall progress and the client-requirements feedback loop |
| Ontwerper | The design itself โ concept VO through definitive VO |
| RIP-team, Aandrager, Adviseur | Investigations, requirements gathering and review |
| Omgevingsmanager | Cables and pipelines, and the framework permit |
| Task id | Name |
|---|---|
Task_UitvoerenConditionerendeOnderzoeken |
Uitvoeren conditionerende onderzoeken |
Task_VerzamelenKlanteisen |
Verzamelen klanteisen |
Task_InventariserenKabelsLeidingen |
Inventariseren kabels en leidingen |
Task_AanvragenRaamvergunning |
Aanvragen raamvergunning |
Task_OpstellenConceptVO |
Opstellen concept VO |
Task_BesprekenConceptVO |
Bespreken concept VO |
Task_BesprekenKlanteisenKL |
Bespreken klanteisen en kabels en leidingen |
Task_TerugkoppelenKlanteisen |
Terugkoppelen klanteisen |
Task_OpstellenDefinitiefVO |
Opstellen definitief VO |
The join gateway takes all five branches¶
All five branches of the opening parallel split rejoin the join gateway. The source PDF does not draw it that way. It shows Inventariseren kabels en leidingen and Aanvragen raamvergunning leaving the pool into CO1 and JU3.5 and never coming back โ which, read as control flow, deadlocks at the join, because a parallel join waits for every incoming branch.
Those two hand-offs are modelled as textAnnotations instead. A callActivity would have been the faithful alternative, but CO1 and JU3.5 do not exist as fixtures, so it would dangle at deploy time and fail the manifest's calledElement test. Both are referenced by several phases and belong in a shared bundle of their own.
A deviation from the specification, on purpose
This is the one place where the bundle deliberately does not mirror the drawing. The annotation records the hand-off without asserting a flow that would not execute.
Bundle contents¶
Fifteen files deploy together: one BPMN, nine forms and five document templates.
Forms¶
One per user task, bound with camunda:formRef. Field types stay inside the eight the R2.1 bundle already uses โ text, textarea, textfield, checkbox, datetime, select, radio, button โ because nothing beyond those is exercised against this Camunda 7.21 stack.
| Form | Task |
|---|---|
rip-conditionerende-onderzoeken.form |
Uitvoeren conditionerende onderzoeken |
rip-verzamelen-klanteisen.form |
Verzamelen klanteisen |
rip-inventariseren-kabels-leidingen.form |
Inventariseren kabels en leidingen |
rip-aanvragen-raamvergunning.form |
Aanvragen raamvergunning |
rip-concept-vo.form |
Opstellen concept VO |
rip-bespreken-concept-vo.form |
Bespreken concept VO |
rip-bespreken-klanteisen-kl.form |
Bespreken klanteisen en kabels en leidingen |
rip-terugkoppelen-klanteisen.form |
Terugkoppelen klanteisen |
rip-definitief-vo.form |
Opstellen definitief VO |
Two modelling decisions are worth knowing:
- The specification's conditional "LCC-raming (indien variantenafweging)" is a checkbox plus a reference field on
rip-concept-vo.formrather than an artifact of its own, since it exists only when a variant trade-off actually happened. klicMeldingReferentieis collected only onrip-inventariseren-kabels-leidingen.form. The concept-VO task reads the same information but does not also write it โ two forms writing one process variable would mean whichever task completes last silently wins.
Document templates¶
One per green "Format โฆ" box in the specification. A Format there and a .document here are the same thing: a template with bindings. The blue outputs drawn beside them are instances of these templates rather than artifacts of their own.
| Template | Attached to |
|---|---|
rip-kes.document |
Task_VerzamelenKlanteisen |
rip-ontwerptoelichting.document |
Task_OpstellenConceptVO |
rip-bevindingenformulier.document |
Task_BesprekenConceptVO |
rip-hoeveelheidsbepaling.document |
Task_OpstellenDefinitiefVO |
rip-objectenboom.document |
Task_OpstellenConceptVO |
Zone keys are signOff and contactInformation, camelCase, from the start โ unlike R2.1's templates, which shipped with signoff and contactInfo, keys DocumentZones never declares, leaving their signature blocks silently unrendered until v2026.08.4 repaired them.
One task, two templates
Task_OpstellenConceptVO produces both the Ontwerptoelichting and the
Objectenboom, and carries both:
ronl:documentRef="rip-ontwerptoelichting,rip-objectenboom". The attribute
holds a comma-separated list, so the Modeler badge on that task reads
2 documents, and the Deploy modal includes both templates in the
bundle. See BPMN Modeler โ Document template linking.
Deploying the bundle¶
Deployment is identical to any other bundle โ see Deploying the bundle on the R2.1 page. Open RipR22Process.bpmn in the BPMN Modeler and click Deploy; all fifteen resources go through the LDE backend to Operaton as one deployment.
The mirrored copy¶
The R2.2 bundle files exist twice in this repository, and its BPMN a third time downstream:
| Path | Role |
|---|---|
examples/organizations/flevoland/rip-phase-22/ |
the authored source |
e2e-fixtures/flevoland/ |
the mirror that is imported and deployed for end-to-end testing |
ronl-business-api packages/backend/src/rip-swimlane/__fixtures__/ |
parser fixtures for the RONL Business API's swimlane derivation (BPMN only) |
Two checks keep the copies in step:
- The parity test (
packages/backend/src/example-fixture-parity.test.ts) asserts that every file in a mirrored bundle is byte-identical to its twin ine2e-fixtures/. A bundle opts in by adding an entry topackages/backend/src/__fixtures__/mirrored-bundles.json; R2.1, R2.2 and the Heusden swimlane bundle (heusden/swimlanes-for-rba) do, and so do three Heusden DMNs (RONL_Heusden_Heusdenpas.dmn,RONL_SVB_Leeftijden.dmn,RONL_SZW_Bijstand.dmn), listed by name because they sit beside files that are not part of the fixture bundle. npm run check-rip-bpmn(scripts/check-rip-bpmn-copies.mjs) covers the BPMNs of all RIP phases. It compares eache2e-fixtures/copy byte for byte with its source, and checks every authoring BPMN against the sha256 fingerprints inrip-bpmn-fingerprints.json, a file committed identically in both repositories so the RONL Business API can enforce the same thing in its own CI. After an intended edit,node scripts/check-rip-bpmn-copies.mjs --writeregenerates the fingerprints, refreshes thee2e-fixtures/copies, and names the command that refreshes the RONL Business API's fixtures. The pre-push hook runs this check, and so does the requiredauditjob of the supply-chain workflow (zizmor.yml), so nothing reachesaccormainaround it.
The same fingerprint file also covers two models outside the RIP ladder that the RONL Business API keeps as parser fixtures because they declare their own phases: GedelegeerdBesluitProcess.bpmn and ManagementCapacityClaimProcess.bpmn (DECLARED_PHASE_MODELS in the script). They have no e2e-fixtures/ copy; the check compares only their fingerprints.
A pull request that changes only bundle files still runs the backend suite: the acceptance backend workflow's (azure-backend-acc.yml) path filter and its changes pattern include examples/, e2e-fixtures/ and packages/frontend/public/examples/, so the parity, fixture and bundle tests run whenever the files they check change. Edit both copies together, and run npm run check-rip-bpmn before pushing.
Related¶
- RIP R2.1 Bundle โ the phase this one follows
- BPMN Modeler โ the Deploy modal and the
ronl:*attributes - Document Composer โ how
.documenttemplates and their zones work - Testing โ the fixture and parity suites
- Besluitvorming onder gedelegeerde bevoegdheid โ the delegated-decision bundle, which pairs a document with a signature