Ga naar hoofdinhoud

Procest: Architecture & Data Model

1. Overview

Procest is a case management (zaakgericht werken) app for Nextcloud, built as a thin client on OpenRegister. It manages cases, tasks, statuses, roles, results, and decisions. Cases are governed by configurable case types that control behavior: allowed statuses, required fields, processing deadlines, retention rules, and more.

Architecture Pattern

┌─────────────────────────────────────────────────┐
│ Procest Frontend (Vue 2 + Pinia) │
│ - Case list/detail views │
│ - Task management │
│ - Decision tracking │
│ - My Work (werkvoorraad) dashboard │
│ - Admin settings (case types, statuses, etc.) │
└──────────────┬──────────────────────────────────┘
│ REST API calls
┌──────────────▼──────────────────────────────────┐
│ OpenRegister API │
│ /api/objects/{register}/{schema}/{id} │
│ - CRUD operations │
│ - Search, pagination, filtering │
└──────────────┬──────────────────────────────────┘

┌──────────────▼──────────────────────────────────┐
│ OpenRegister Storage (PostgreSQL) │
│ - JSON object storage │
│ - Schema validation │
└─────────────────────────────────────────────────┘

Procest owns no database tables. All data is stored as OpenRegister objects, defined by schemas in a dedicated register.

2. Standards Research

2.1 Standards Evaluated

StandardTypeCoverageMaturityRelevance
CMMN 1.1International (OMG)Case plans, tasks, milestones, sentries, case file itemsMatureHIGH: designed for case management
BPMN 2.0International (OMG)Processes, tasks, gateways, eventsVery mature, widely adoptedHIGH: task/workflow modeling
DMN 1.xInternational (OMG)Decision tables, decision logicMature, growingMEDIUM: decision modeling
Schema.orgInternational (W3C)Action, Project, GovernmentService, RoleVery matureMEDIUM: semantic vocabulary
Dublin Core (ISO 15836)International15 metadata elements for documentsVery matureLOW: document metadata
ZGW APIs (VNG)Dutch govZaak, Status, Resultaat, Besluit, RolProduction, mandated NLHIGH: Dutch API interoperability
RGBZDutch govInformation model behind ZGWStable (v1.0)HIGH: field-level reference
ZGW Catalogi APIDutch govZaakType, StatusType, ResultaatType, RolType, etc.Production (v1.3.x)HIGH: case type system reference

2.2 Design Principle: International First

Data storage uses international standards. Dutch government standards are an API mapping layer.

This means:

  • Objects in OpenRegister are modeled after CMMN, schema.org, and BPMN concepts
  • When exposing a ZGW-compatible API, we map our international objects to ZGW field names
  • This makes Procest usable outside the Netherlands while remaining interoperable with Dutch systems

2.3 Key Findings

  1. CMMN 1.1 (Case Management Model and Notation) is the only international standard specifically designed for case management. It defines cases, tasks, milestones, case file items, and sentries (event-condition guards). It uses a declarative model: specify what is allowed, not the exact flow.

  2. BPMN 2.0 is the dominant process standard. Camunda deprecated native CMMN support in favor of implementing CMMN patterns via BPMN, citing readability. We follow this pragmatic approach.

  3. ZGW/RGBZ defines the complete Dutch government case model (Zaak, Status, Resultaat, Besluit, Rol). It is production-ready and mandated for municipalities. We map to it, not build on it.

  4. ZGW Catalogi API defines ZaakType as a comprehensive case type system controlling: allowed statuses, result types with archival rules, role types, custom properties, required documents, processing deadlines, confidentiality defaults, and publication rules. This is the most complete case type reference available.

  5. Schema.org provides Action (with actionStatus, agent, result), Project, and Role: useful as semantic annotations but not domain-specific enough for case management.

  6. Nextcloud provides built-in Calendar (CalDAV), activity tracking, and file management that we reuse where possible. Deck was evaluated but is not suitable (no PHP API, model doesn't fit).

3. Data Model Decisions

3.1 Standards Hierarchy

LayerStandardPurpose
Primary (storage)CMMN 1.1 concepts + schema.org vocabularyInternational data model
SemanticSchema.org JSON-LDType annotations for linked data
API mappingZGW/RGBZ field namesDutch government interoperability
Type system referenceZGW Catalogi API (ZaakType)Case type behavioral controls
Nextcloud nativeCalendar, Contacts, Files, ActivityReuse where possible

3.2 Entity Definitions

Case Type

A case type is a configurable definition that controls the behavior of cases: which statuses are allowed, which roles can be assigned, what properties are required, processing deadlines, and more. This is the international equivalent of ZGW's ZaakType.

AspectDecisionRationale
CMMN conceptCaseDefinition / CasePlanModel templateCMMN separates case definition from case instance
ZGW equivalentZaakType (Catalogi API 1.3.x)Full behavioral case type: our primary reference
VersioningCase types have validity periods and draft/published statusFrom ZGW: concept, validFrom, validUntil

Core properties:

PropertyTypeCMMN / Schema.orgZGW MappingRequired
titlestringschema:namezaaktype_omschrijvingYes
descriptionstringschema:descriptiontoelichtingNo
identifierstringschema:identifieridentificatieAuto
purposestring:doelYes
triggerstring:aanleidingYes
subjectstring:onderwerpYes
initiatorActionstring:handeling_initiatorYes
handlerActionstring:handeling_behandelaarYes
originenum: internal, external:indicatie_intern_of_externYes
processingDeadlineduration (ISO 8601)CMMN TimerEventListenerdoorlooptijd_behandelingYes
serviceTargetduration (ISO 8601):servicenorm_behandelingNo
suspensionAllowedboolean:opschorting_en_aanhouding_mogelijkYes
extensionAllowedboolean:verlenging_mogelijkYes
extensionPeriodduration (ISO 8601):verlengingstermijnConditional
confidentialityenum:vertrouwelijkheidaanduidingYes
publicationRequiredboolean:publicatie_indicatieYes
publicationTextstring:publicatietekstNo
responsibleUnitstring:verantwoordelijkeYes
referenceProcessstring:referentieproces_naamNo
isDraftboolean:conceptNo (default: true)
validFromdate:datum_begin_geldigheidYes
validUntildate:datum_einde_geldigheidNo
keywordsstring[]:trefwoordenNo
subCaseTypesreference[]CMMN CaseTaskdeelzaaktypenNo

Confidentiality levels (from ZGW, internationally applicable):

LevelZGW DutchDescription
publicopenbaarPublicly accessible
restrictedbeperkt_openbaarRestricted public access
internalinternInternal use only
case_sensitivezaakvertrouwelijkCase-confidential
confidentialvertrouwelijkConfidential
highly_confidentialconfidentieelHighly confidential
secretgeheimSecret
top_secretzeer_geheimTop secret

Status Type

A configurable status definition linked to a case type. Controls which lifecycle phases a case can go through.

AspectDecisionRationale
CMMN conceptMilestone + PlanItem statesMilestones mark case progression
Schema.org typeschema:ActionStatusTypeStandard status enumeration
ZGW equivalentStatusType (Catalogi API)Per-case-type status definitions

Core properties:

PropertyTypeSourceZGW MappingRequired
namestringschema:namestatustype_omschrijvingYes
descriptionstringschema:descriptiontoelichtingNo
caseTypereferenceParent case typezaaktypeYes
orderinteger (1–9999)CMMN Milestone sequencestatustypevolgnummerYes
isFinalbooleanCMMN terminal state(last in order)No (default: false)
targetDurationduration:doorlooptijdNo
notifyInitiatorboolean:informerenNo (default: false)
notificationTextstring:statustekstNo

Result Type

A configurable result definition linked to a case type. Controls which outcomes are possible and how they affect archival.

AspectDecisionRationale
CMMN conceptCase outcomeCase completion result type
ZGW equivalentResultaatType (Catalogi API)Result type with archival rules

Core properties:

PropertyTypeSourceZGW MappingRequired
namestringschema:nameomschrijvingYes
descriptionstringschema:descriptiontoelichtingNo
caseTypereferenceParent case typezaaktypeYes
archiveActionenum: retain, destroy:archiefnominatieNo
retentionPeriodduration (ISO 8601):archiefactietermijnNo
retentionDateSourceenum:afleidingswijzeNo

Retention date source values (from ZGW, internationally applicable):

ValueZGW DutchDescription
case_completedafgehandeldCase completion date
decision_effectiveingangsdatum_besluitDecision effective date
decision_expiryvervaldatum_besluitDecision expiry date
fixed_periodtermijnCase completion + fixed period
related_casegerelateerde_zaakRelated case completion
parent_casehoofdzaakParent case completion
custom_propertyeigenschapValue of a case property
custom_dateander_datumkenmerkManually determined date

Role Type

A configurable role definition linked to a case type. Controls which participant roles can be assigned.

AspectDecisionRationale
Schema.org typeschema:RoleStandard role qualification
ZGW equivalentRolType (Catalogi API)Per-case-type role definitions

Core properties:

PropertyTypeSourceZGW MappingRequired
namestringschema:roleNameomschrijvingYes
caseTypereferenceParent case typezaaktypeYes
genericRoleenum:omschrijvingGeneriekYes

Standard generic roles (from ZGW, internationally applicable):

RoleZGW DutchDescription
initiatorInitiatorStarted the case
handlerBehandelaarProcesses the case
advisorAdviseurProvides advice
decision_makerBeslisserMakes decisions
stakeholderBelanghebbendeHas interest in outcome
coordinatorZaakcoördinatorCoordinates the case
contactKlantcontacterContact person
co_initiatorMede-initiatorCo-initiator

Property Definition

A configurable custom field definition linked to a case type. Controls which additional data fields cases of this type must capture.

AspectDecisionRationale
Schema.org typeschema:PropertyValueSpecificationDefines expected property values
ZGW equivalentEigenschap (Catalogi API)Case-type-specific custom properties

Core properties:

PropertyTypeSourceZGW MappingRequired
namestringschema:nameeigenschapnaamYes
definitionstringschema:descriptiondefinitieYes
caseTypereferenceParent case typezaaktypeYes
formatenum: text, number, date, datetime:formaatYes
maxLengthinteger:lengteNo
allowedValuesstring[]:waardenverzamelingNo
requiredAtStatusreferenceStatus at which this must be filledstatustypeNo

Document Type

A configurable document type definition linked to a case type. Controls which document types are expected.

AspectDecisionRationale
Schema.org typeschema:DigitalDocumentDocument type definition
ZGW equivalentInformatieObjectType + ZaakTypeInformatieObjectTypeDocument type requirements

Core properties:

PropertyTypeSourceZGW MappingRequired
namestringschema:nameomschrijvingYes
categorystring:informatieobjectcategorieYes
caseTypereferenceParent case typezaaktype (via through table)Yes
directionenum: incoming, internal, outgoing:richtingYes
orderinteger:volgnummerYes
confidentialityenum:vertrouwelijkheidaanduidingNo
requiredAtStatusreferenceStatus requiring this documentstatustypeNo

Decision Type

A configurable decision type definition linked to a case type.

AspectDecisionRationale
Schema.org typeschema:ChooseAction definitionDecision type specification
ZGW equivalentBesluitType (Catalogi API)Administrative decision types

Core properties:

PropertyTypeSourceZGW MappingRequired
namestringschema:nameomschrijvingYes
descriptionstringschema:descriptiontoelichtingNo
categorystring:besluitcategorieNo
objectionPeriodduration (ISO 8601):reactietermijnNo
publicationRequiredboolean:publicatie_indicatieYes
publicationPeriodduration (ISO 8601):publicatietermijnNo

Case (Zaak)

A case is a coherent body of work with a defined lifecycle, initiation, and result. Cases are governed by a case type.

AspectDecisionRationale
CMMN conceptCasePlanModel / Case instanceCMMN's core concept: a case with a plan
Schema.org typeschema:Project"An enterprise planned to achieve a particular aim"
ZGW mappingZaakDirect mapping for Dutch API compatibility

Core properties (international → ZGW mapping):

PropertyTypeCMMN/Schema.org SourceZGW MappingRequired
titlestringschema:nameomschrijvingYes
descriptionstringschema:descriptiontoelichtingNo
identifierstringschema:identifieridentificatieAuto
caseTypereferenceCMMN CaseDefinitionzaaktypeYes
statusreferenceCMMN PlanItem lifecyclestatus (URL ref)Yes
resultreferenceCMMN case outcomeresultaat (URL ref)No
startDatedateschema:startDatestartdatumYes
endDatedateschema:endDateeinddatumNo
plannedEndDatedate:einddatumGeplandNo
deadlinedate:uiterlijkeEinddatumAfdoeningAuto (from caseType)
confidentialityenum:vertrouwelijkheidaanduidingNo (default from caseType)
assigneestringCMMN HumanTask.assignee:No
priorityenumschema:priority:No
parentCasereferenceCMMN CaseTask (sub-case)hoofdzaakNo
relatedCasesarray:relevanteAndereZakenNo
geometryGeoJSONschema:geozaakgeometrieNo

Case type behavioral controls on cases:

  • deadline is auto-calculated: startDate + caseType.processingDeadline
  • confidentiality defaults from caseType.confidentiality
  • Only status types linked to the case type are allowed
  • Only role types linked to the case type are allowed
  • Property definitions linked to the case type must be satisfied before reaching required statuses
  • Document types linked to the case type define which documents are expected

Task

A work item within a case.

AspectDecisionRationale
CMMN conceptHumanTaskCMMN's primary task type
Schema.org typeschema:ActionWith actionStatus for lifecycle

Core properties:

PropertyTypeCMMN/Schema.org SourceRequired
titlestringschema:nameYes
descriptionstringschema:descriptionNo
statusenumCMMN PlanItem states: available, active, completed, terminatedYes
assigneestringCMMN assigneeNo
casereferenceCMMN parent caseYes
dueDatedatetimeschema:endTimeNo
priorityenumschema:priorityNo
completedDatedatetimeschema:endTimeNo

Task status values (from CMMN PlanItem lifecycle):

StatusCMMN StateDescription
availableAvailableTask can be started
activeActiveTask is being worked on
completedCompletedTask finished successfully
terminatedTerminatedTask stopped before completion
disabledDisabledTask not applicable

Role (Rol)

The relationship between a person/organization and a case.

Core properties:

PropertyTypeSchema.org SourceZGW MappingRequired
namestringschema:roleNameomschrijvingYes
descriptionstringschema:descriptionroltoelichtingNo
roleTypereference:omschrijvingGeneriek (via RoleType)Yes
casereference:zaakYes
participantstring (user UID or contact ref)schema:agentbetrokkeneYes

Result (Resultaat)

The outcome of a case.

Core properties:

PropertyTypeSourceRequired
namestringschema:nameYes
descriptionstringschema:descriptionNo
casereferenceParent caseYes
resultTypereferenceResultType definitionYes

Decision (Besluit)

A formal decision made on a case.

Core properties:

PropertyTypeSchema.org SourceZGW MappingRequired
titlestringschema:name:Yes
descriptionstringschema:descriptiontoelichtingNo
casereference:zaakNo
decisionTypereference:besluittypeNo
decidedBystringschema:agent:No
decidedAtdatetimeschema:endTimedatumNo
effectiveDatedateschema:startTimeingangsdatumNo
expiryDatedateschema:endTimevervaldatumNo

3.3 Case Type System Overview

The case type system forms a hierarchy where the CaseType is the central configuration entity controlling all related type definitions:

CaseType
├── StatusType[] : Allowed lifecycle phases (ordered)
├── ResultType[] : Allowed outcomes (with archival rules)
├── RoleType[] : Allowed participant roles
├── PropertyDefinition[]: Required custom data fields
├── DocumentType[] : Required document types
├── DecisionType[] : Allowed decision types
└── subCaseTypes[] : Allowed sub-case types

Behavioral controls:

ControlHowZGW Reference
Allowed statusesStatusTypes linked to CaseType; ordered by orderStatusType → ZaakType FK
Status transitionsOnly sequential progression through ordered statusesstatustypevolgnummer sequence
Required fields per statusPropertyDefinition with requiredAtStatus referenceEigenschap → StatusType FK
Required documents per statusDocumentType with requiredAtStatus referenceZaakTypeInformatieObjectType → StatusType FK
Processing deadlineAuto-calculated: case.startDate + caseType.processingDeadlinedoorlooptijd_behandeling
Suspension/extensionControlled by suspensionAllowed and extensionAllowedopschorting_en_aanhouding_mogelijk, verlenging_mogelijk
Confidentiality defaultCases inherit caseType.confidentialityvertrouwelijkheidaanduiding
Archival per resultResultType defines archival action and retention periodarchiefnominatie, archiefactietermijn
Draft/published lifecycleCaseType has isDraft; draft types cannot create casesconcept
Validity windowCaseType has validFrom / validUntildatum_begin_geldigheid, datum_einde_geldigheid

3.4 My Work (Werkvoorraad)

A cross-entity workload view showing all items assigned to the current user. No new entity is needed: this is a frontend aggregation pattern.

How it works:

  • Query cases with assignee == currentUser and non-final status
  • Query tasks with assignee == currentUser and status available or active
  • Optionally include leads and requests from Pipelinq (assignedTo == currentUser)
  • Merge, sort by priority then due date, display as unified card list

Required fields for My Work (already present on Case, Task, and Pipelinq entities):

FieldCaseTaskPipelinq LeadPipelinq Request
assignee / assignedToYesYesYesYes
priorityYesYesYesYes
deadline / dueDateYesYesYes:
statusYesYes(via stage)Yes
Entity type label"Case""Task""Lead""Request"

3.5 Relationship to Pipelinq

Procest receives cases from Pipelinq through the request-to-case (verzoek-to-zaak) flow:

Pipelinq (CRM)                    Procest (Case Management)
┌──────────────┐ ┌──────────────┐
│ Client │ │ Case │
│ Contact │──── Request ────>│ Task │
│ Lead │ (verzoek) │ Status │
│ Pipeline │ │ Role │
└──────────────┘ │ Result │
│ Decision │
│ CaseType │
└──────────────┘

When a Pipelinq Request is converted to a Case:

  • The requesting client is linked as a Role (type: initiator) on the case
  • The request description becomes the case description
  • The request category informs the case type selection
  • The case type determines initial status, deadline, and required fields

3.6 Admin Settings

Procest exposes a Nextcloud admin settings panel for case type configuration and general app settings. Configuration objects are stored in OpenRegister.

Configurable by admin:

SettingTypeDescription
Case type managementCRUDCreate, edit, publish, version case types
Status type managementCRUDCreate, edit, reorder status types per case type
Result type managementCRUDDefine result types with archival rules per case type
Role type managementCRUDDefine allowed roles per case type
Property definitionsCRUDDefine custom fields per case type
Document type definitionsCRUDDefine required document types per case type
Decision type managementCRUDDefine decision types
Confidentiality levelsDisplayCustomize visibility of confidentiality options
Default case typeSelectionWhich case type is used by default

3.7 Nextcloud Integration Strategy

Principle: reuse Nextcloud native objects where possible, reference by ID, don't duplicate.

OpenRegister objects store case-specific fields plus foreign keys (vCard UID, calendar event UID, file ID, user UID, Talk token) pointing to Nextcloud native entities.

REUSE from Nextcloud

FeatureOCP InterfaceWhat to ReuseHow
CalendarOCP\Calendar\IManagerCase deadlines, task due dates, hearing datesCreate VEVENT for deadlines, VTODO for tasks. Reference by event UID. Expose case deadlines via ICalendarProvider.
ContactsOCP\Contacts\IManagerCase participants (initiator, stakeholder)Reference persons by vCard UID. Search via IManager::search().
UsersOCP\IUserManagerCase handlers, coordinators, assigneesReference by user UID. Use for authentication and authorization.
FilesOCP\Files\IRootFolderCase documents, evidence, attachmentsReference by Nextcloud file ID. Resolve via IRootFolder->getById().
ActivityOCP\Activity\IManagerCase audit trail / activity timelinePublish events ("Case opened", "Status changed", "Decision made"). Implement IProvider.
TalkOCP\Talk\IBrokerPer-case discussion threadsCreate conversation per case. Store token in OpenRegister.
CommentsOCP\Comments\ICommentsManagerNotes on cases, tasks, decisionsAttach comments using objectType + objectId.
System TagsOCP\SystemTag\ISystemTagObjectMapperCategorize and cross-reference case documentsTag files with case references.

NOT reusing Deck

Deck was evaluated but is not suitable for case task management:

  • No PHP-level OCP interfaces (REST API only)
  • Board/Stack/Card model doesn't map well to case lifecycle
  • Case tasks need parent-case references, CMMN lifecycle states, and role-based assignment
  • Decision: Build case tasks in OpenRegister, optionally sync to CalDAV VTODO for native task integration

BUILD in OpenRegister (case-specific)

WhatWhy Not Reuse
Case typesDomain-specific behavioral configuration with no Nextcloud equivalent
Status/Result/Role/Decision/Document/Property typesCase-type-specific definitions controlling case behavior
CasesDomain-specific lifecycle, type system, confidentiality, archival rules
TasksCMMN lifecycle states, parent-case binding, role-based assignment
RolesCase-specific role assignments (initiator, handler, advisor, decision maker)
ResultsCase outcome classification, archival regime
DecisionsFormal decisions with effective/expiry dates, decision type

Key OCP Interfaces

// Calendar - create task deadlines
$calendarManager = \OCP\Server::get(\OCP\Calendar\IManager::class);
$builder = $calendarManager->createEventBuilder(); // NC 31+
$builder->setSummary('Deadline: Case #456')->setStartDate($deadline);

// Contacts - look up case participants
$contactsManager = \OCP\Server::get(\OCP\Contacts\IManager::class);
$results = $contactsManager->search($name, ['FN', 'EMAIL']);

// Activity - publish case events (audit trail)
$activityManager = \OCP\Server::get(\OCP\Activity\IManager::class);
$event = $activityManager->generateEvent();
$event->setApp('procest')->setType('case_status_change')
->setSubject('Case status changed to {status}', ['status' => $newStatus])
->setObject('case', $caseId, $caseTitle);
$activityManager->publish($event);

// Files - resolve case documents
$rootFolder = \OCP\Server::get(\OCP\Files\IRootFolder::class);
$files = $rootFolder->getById($documentId);

// Talk - per-case discussion
$broker = \OCP\Server::get(\OCP\Talk\IBroker::class);
$conversation = $broker->createConversation('Case: ' . $caseTitle, $participantIds);

4. OpenRegister Configuration

Register

FieldValue
Nameprocest
Slugprocest
DescriptionCase management register

Schema Definitions

Schemas MUST be defined in lib/Settings/procest_register.json using OpenAPI 3.0.0 format, following the pattern used by opencatalogi and softwarecatalog.

Schemas:

  • caseType: Case type definition (CMMN CaseDefinition)
  • statusType: Status type per case type (CMMN Milestone)
  • resultType: Result type per case type (with archival rules)
  • roleType: Role type per case type (schema:Role)
  • propertyDefinition: Custom field definition (schema:PropertyValueSpecification)
  • documentType: Document type requirement (schema:DigitalDocument)
  • decisionType: Decision type definition (schema:ChooseAction)
  • case: Case instance (schema:Project)
  • task: Task within a case (schema:Action)
  • role: Role assignment on a case (schema:Role instance)
  • result: Case outcome (schema:Action.result)
  • decision: Formal decision (schema:ChooseAction instance)

The configuration is imported via ConfigurationService::importFromApp() in the repair step.

5. ZGW API Mapping Layer

When Procest exposes a ZGW-compatible API (future work), the mapping is:

Procest ObjectZGW ResourceZGW API
CaseTypeZaakTypeCatalogi API 1.3.x
StatusTypeStatusTypeCatalogi API
ResultTypeResultaatTypeCatalogi API
RoleTypeRolTypeCatalogi API
PropertyDefinitionEigenschapCatalogi API
DocumentTypeInformatieObjectTypeCatalogi API
DecisionTypeBesluitTypeCatalogi API
CaseZaakZaken API 1.5.x
(status instance)StatusZaken API
ResultResultaatZaken API
RoleRolZaken API
DecisionBesluitBesluiten API 1.0.x

Field-level mappings are documented per entity in section 3.2 above.

6. Open Research Questions

  1. Nextcloud Deck reuse: RESOLVED: Deck is not suitable. No PHP API, model doesn't fit case lifecycle.

  2. Case type system: RESOLVED: Case types are a core feature with full behavioral controls, modeled after ZGW ZaakType but using international terminology.

  3. CMMN runtime: Should Procest implement CMMN runtime semantics (sentries, entry/exit criteria) or keep the simpler status-based lifecycle? Current decision: start with ordered status progression, add CMMN features as needed.

  4. Archival: ZGW has detailed archival rules. The case type system now includes result-based archival configuration (archiveAction, retentionPeriod, retentionDateSource). Runtime archival enforcement is deferred until compliance requirements emerge.

  5. DMN for decisions: Should Procest support DMN decision tables for automated decision logic? This is ambitious but aligns with the OMG "Triple Crown" (BPMN + CMMN + DMN). Deferred.

  6. Case type versioning: ZGW supports versioning of case types (new versions when modifications are made). Should Procest implement version chains? Current decision: validFrom/validUntil for validity windows, explicit versioning deferred.

  7. Cross-app My Work: Should the My Work view in Procest also show Pipelinq leads/requests? Requires cross-app API calls or a shared dashboard widget.

7. References

Primary Standards (International)

Schema.org Types Used

Dutch Standards (API Mapping Layer)

Industry References