Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions docs/features/README.md → docs/Features/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Procest Feature Overview
# Procest: Feature Overview

Procest is a Nextcloud case management app (zaaksysteem) for Dutch municipalities, covering general case handling (zaakgericht werken), VTH permits/supervision/enforcement, objection and appeal workflows, B&W decision-making, and workflow automation. All data is stored in OpenRegister Procest owns no database tables.
Procest is a Nextcloud case management app (zaaksysteem) for Dutch municipalities, covering general case handling (zaakgericht werken), VTH permits/supervision/enforcement, objection and appeal workflows, B&W decision-making, and workflow automation. All data is stored in OpenRegister: Procest owns no database tables.

## Standards Compliance

Expand All @@ -20,13 +20,13 @@ Procest is a Nextcloud case management app (zaaksysteem) for Dutch municipalitie
| ZGW Besluiten API (BRC) | [zaakgerichtwerken.nl](https://zaakgerichtwerken.nl) | Implemented |
| ZGW Autorisaties API (AC) | [zaakgerichtwerken.nl](https://zaakgerichtwerken.nl) | Implemented |
| ZGW Notificaties API (NRC) | [zaakgerichtwerken.nl](https://zaakgerichtwerken.nl) | Implemented |
| TEC BPM RFP Template Process Modeling | Sections 1.1–1.11 | Partial |
| TEC BPM RFP Template Security Management | Sections 2.1–2.5 | Partial |
| TEC BPM RFP Template Workflow Portal | Sections 5.1–5.6 | Partial |
| TEC BPM RFP Template Monitoring & Management | Sections 6.1–6.6 | Partial |
| TEC BPM RFP Template: Process Modeling | Sections 1.1–1.11 | Partial |
| TEC BPM RFP Template: Security Management | Sections 2.1–2.5 | Partial |
| TEC BPM RFP Template: Workflow Portal | Sections 5.1–5.6 | Partial |
| TEC BPM RFP Template: Monitoring & Management | Sections 6.1–6.6 | Partial |
| CMMN 1.1 (OMG) | Case Plan Model, HumanTask, Milestone | Partial |
| Forum Standaardisatie REST-API Design Rules | [forumstandaardisatie.nl](https://forumstandaardisatie.nl/open-standaarden/rest-api-design-rules) | Implemented |
| Forum Standaardisatie NL GOV CloudEvents | [forumstandaardisatie.nl](https://forumstandaardisatie.nl/open-standaarden/nl-gov-cloudevents) | Planned |
| Forum Standaardisatie: REST-API Design Rules | [forumstandaardisatie.nl](https://forumstandaardisatie.nl/open-standaarden/rest-api-design-rules) | Implemented |
| Forum Standaardisatie: NL GOV CloudEvents | [forumstandaardisatie.nl](https://forumstandaardisatie.nl/open-standaarden/nl-gov-cloudevents) | Planned |
| Awb (Algemene wet bestuursrecht) | Processing deadlines, bezwaar/beroep | Implemented |
| Woo (Wet open overheid) | 4-week response mandate, redaction | Planned |
| DSO Omgevingsloket | VTH permit intake integration | Planned |
Expand All @@ -47,7 +47,7 @@ Procest is a Nextcloud case management app (zaaksysteem) for Dutch municipalitie
| Werkvoorraad | Team-level queue of unassigned cases available for claiming | TEC BPM 5.1, GEMMA Zaakafhandel | Planned | [werkvoorraad.md](werkvoorraad.md) |
| Administration | Nextcloud admin panel for schema configuration, ZGW mapping, and seed data import | Nextcloud OCP | Implemented | [administration.md](administration.md) |
| Admin Settings | Configuration page for register/schema UUID mappings and version information | Nextcloud OCP | Implemented | [admin-settings.md](admin-settings.md) |
| OpenRegister Integration | All data stored as OpenRegister objects Procest owns no database tables | OpenRegister API | Implemented | [openregister-integration.md](openregister-integration.md) |
| OpenRegister Integration | All data stored as OpenRegister objects: Procest owns no database tables | OpenRegister API | Implemented | [openregister-integration.md](openregister-integration.md) |
| Base Register Seed Data | Pre-configured case types (Bezwaar, Vergunning, Melding, VTH) imported on install | GEMMA | Implemented | [base-register-seed-data.md](base-register-seed-data.md) |
| Workflow Engine | Zero-code visual workflow builder with status nodes, guards, and automatic actions | TEC BPM 1.1–1.6, BPMN 2.0 | Implemented | [workflow-engine-enhancement.md](workflow-engine-enhancement.md) |
| VTH Module | Permits, supervision, and enforcement case types and domain schemas | GEMMA VTH, DSO Omgevingsloket | Partial | [vth-module.md](vth-module.md) |
Expand All @@ -61,7 +61,7 @@ Procest is a Nextcloud case management app (zaaksysteem) for Dutch municipalitie
| Case Dashboard View | Comprehensive case detail page with status timeline, panels, tasks, documents, and audit trail | CMMN, ZGW | Implemented | [case-dashboard-view.md](case-dashboard-view.md) |
| GIS Integration | Map view for cases, location picker, PDOK/WMS/WFS overlay, and secure GIS proxy | BAG, BRK, PDOK | Implemented | [gis-integration.md](gis-integration.md) |
| Milestone Tracking | Key progress checkpoints per case with target dates, overdue alerts, and visual timeline | CMMN Milestone, TEC BPM 6.3 | Planned | [milestone-tracking.md](milestone-tracking.md) |
| ZGW APIs | Full ZGW API suite: ZRC, ZTC, DRC, BRC, AC, NRC VNG Newman test suite compliance | ZGW 1.x, VNG | Implemented | [zgw-apis.md](zgw-apis.md) |
| ZGW APIs | Full ZGW API suite: ZRC, ZTC, DRC, BRC, AC, NRC: VNG Newman test suite compliance | ZGW 1.x, VNG | Implemented | [zgw-apis.md](zgw-apis.md) |
| Zaak Intake Flow | Structured intake form with case type selection, auto-numbering, and deadline calculation | ZGW ZRC, DSO | Planned | [zaak-intake-flow.md](zaak-intake-flow.md) |
| Complaint Management | AWB-compliant klachtenprocedure with hearings, deadlines, and ombudsman escalation | Awb Hoofdstuk 9, GEMMA | Planned | [complaint-management.md](complaint-management.md) |
| Consultation Management | Public participation (inspraak) with response collection and nota van beantwoording | Omgevingswet, Awb | Planned | [consultation-management.md](consultation-management.md) |
Expand Down
6 changes: 6 additions & 0 deletions docs/Features/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"label": "Features",
"position": 3,
"collapsible": true,
"collapsed": true
}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ One case type can be marked as the default, pre-selected when creating new cases

Transition a case type from draft to published state, making it available for case creation. Validates completeness before publishing.

### Planned (V1) Admin Tabs
### Planned (V1): Admin Tabs

Additional case type configuration tabs:

Expand All @@ -47,23 +47,23 @@ Additional case type configuration tabs:

### OpenRegister Integration (MVP)

Procest owns no database tables all data is stored as OpenRegister objects in the `procest` register with 12 schemas:
Procest owns no database tables: all data is stored as OpenRegister objects in the `procest` register with 12 schemas:

**Configuration schemas (admin-managed):**
- `caseType` Case behavior configuration
- `statusType` Allowed statuses per case type
- `resultType` Outcome types with archival rules
- `roleType` Participant role definitions
- `propertyDefinition` Custom field definitions
- `documentType` Required document types
- `decisionType` Decision type definitions
- `caseType`: Case behavior configuration
- `statusType`: Allowed statuses per case type
- `resultType`: Outcome types with archival rules
- `roleType`: Participant role definitions
- `propertyDefinition`: Custom field definitions
- `documentType`: Required document types
- `decisionType`: Decision type definitions

**Instance schemas (user-created):**
- `case` Case records
- `task` Task work items
- `role` Participant assignments
- `result` Case outcomes
- `decision` Formal decisions
- `case`: Case records
- `task`: Task work items
- `role`: Participant assignments
- `result`: Case outcomes
- `decision`: Formal decisions

### Auto-Configuration on Install (MVP)

Expand Down
23 changes: 23 additions & 0 deletions docs/Features/app-scaffold.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# App Scaffold

Procest application foundation: Nextcloud PHP app boilerplate, Webpack/Vue 2 build system, OpenRegister integration wiring, and initial register configuration.

## Overview

The app scaffold establishes the technical foundation for the Procest Nextcloud app:

- **PHP app skeleton**: AppInfo, Application class, DI container wiring
- **Vue 2 frontend**: Webpack build, Pinia state management, Vue Router
- **OpenRegister wiring**: `ConfigurationService::importFromApp()` repair step, `procest_register.json` with 12 initial schemas
- **Object store pattern**: Pinia stores per entity type, OpenRegister API calls from frontend
- **Nextcloud integration**: Admin panel settings, navigation, sidebar

## Archive Changes

This feature consolidates:
- `create-procest-app`: initial app registration and boilerplate
- `procest-app-scaffold`: build system, Webpack/Vue setup
- `procest-object-store`: Pinia store foundation per entity
- `procest-case-management`: core case CRUD scaffolding

See [administration.md](administration.md) and [case-management.md](case-management.md) for functional details.
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@

## Overview

Implements the B&W (Board & Aldermen College van Burgemeester en Wethouders) decision-making workflow for Dutch municipal case management. Provides a structured parafering (initialling/sign-off) chain for proposals (`voorstellen`) that require formal decision-making.
Implements the B&W (Board & Aldermen: College van Burgemeester en Wethouders) decision-making workflow for Dutch municipal case management. Provides a structured parafering (initialling/sign-off) chain for proposals (`voorstellen`) that require formal decision-making.

## Architecture

### Backend

- **New schemas** in `lib/Settings/procest_register.json`:
- `voorstel` the proposal document awaiting B&W decision
- `parafeerroute` a named sign-off chain with ordered steps
- `parafeeractie` an individual action taken by a paraferent
- `voorstel`: the proposal document awaiting B&W decision
- `parafeerroute`: a named sign-off chain with ordered steps
- `parafeeractie`: an individual action taken by a paraferent

- **New service:** `lib/Service/ParaferingNotificationService.php`
- Sends Nextcloud notifications for workflow events:
- `notifyStepActivated` notify the actor when their step becomes active
- `notifyVoorstelReturned` notify the steller when a proposal is returned
- `notifyParaferingReminder` send overdue reminders
- `notifyStepActivated`: notify the actor when their step becomes active
- `notifyVoorstelReturned`: notify the steller when a proposal is returned
- `notifyParaferingReminder`: send overdue reminders

- **Updated:** `lib/Service/SettingsService.php`
- New config keys: `voorstel_schema`, `parafeerroute_schema`, `parafeeractie_schema`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Implements AWB-compliant (Algemene wet bestuursrecht) bezwaar (objection) and be
- `IRepairStep` executed during app installation or upgrade
- Delegates to `SeedDataService::seedBezwaarBeroepData()`
- Skips if OpenRegister is not available (`SettingsService::isOpenRegisterAvailable`)
- Exceptions are caught and logged never propagated
- Exceptions are caught and logged: never propagated

**`lib/Settings/bezwaar_seed_data.json`**
- Pre-defined case types: `bezwaar` and `beroep`
Expand All @@ -47,5 +47,5 @@ Implements AWB-compliant (Algemene wet bestuursrecht) bezwaar (objection) and be
## Testing

Unit tests are in:
- `tests/Unit/Service/SeedDataServiceTest.php` ObjectService unavailable → failure, missing config → failure, happy path summary structure, idempotency (existing → skipped), seed data file integrity
- `tests/Unit/Repair/SeedBezwaarBeroepDataTest.php` getName, skip when OpenRegister unavailable, call seed service, info output on success, exception handling
- `tests/Unit/Service/SeedDataServiceTest.php`: ObjectService unavailable → failure, missing config → failure, happy path summary structure, idempotency (existing → skipped), seed data file integrity
- `tests/Unit/Repair/SeedBezwaarBeroepDataTest.php`: getName, skip when OpenRegister unavailable, call seed service, info output on success, exception handling
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

## Overview

Adds hierarchical case support (deelzaken) enabling a parent case to spawn child cases for parallel departmental processing. For example, an Omgevingsvergunning parent case can spawn separate sub-cases for building assessment, environmental impact, and fire safety each with their own lifecycle, assignees, and deadlines.
Adds hierarchical case support (deelzaken) enabling a parent case to spawn child cases for parallel departmental processing. For example, an Omgevingsvergunning parent case can spawn separate sub-cases for building assessment, environmental impact, and fire safety: each with their own lifecycle, assignees, and deadlines.

## Capabilities

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ Adds a dedicated Doorlooptijd (processing time) analytics view to the Procest da

## Features

- **SLA compliance rate widget** Percentage of cases completed within their `processingDeadline`, broken down by case type
- **Processing time distribution chart** Histogram of actual vs. allowed processing days per case type
- **Trend line chart** Monthly SLA compliance rate over the last 12 months (ApexCharts)
- **At-risk cases panel** Open cases where remaining time is less than 25% of the allowed processing deadline
- **Average processing time table** Per-case-type performance table with SLA target comparison
- **Dashboard KPI card** Summary SLA compliance card added to the main dashboard KPI row
- **SLA compliance rate widget**: Percentage of cases completed within their `processingDeadline`, broken down by case type
- **Processing time distribution chart**: Histogram of actual vs. allowed processing days per case type
- **Trend line chart**: Monthly SLA compliance rate over the last 12 months (ApexCharts)
- **At-risk cases panel**: Open cases where remaining time is less than 25% of the allowed processing deadline
- **Average processing time table**: Per-case-type performance table with SLA target comparison
- **Dashboard KPI card**: Summary SLA compliance card added to the main dashboard KPI row

## Data Sources

All data derived from existing case fields no schema changes required:
All data derived from existing case fields: no schema changes required:
- `case.startDate`, `case.endDate`, `case.deadline`, `case.plannedEndDate`, `case.status`, `case.caseType`
- `caseType.processingDeadline`
- `statusType.isFinal`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ Two new PHP classes handle secure GIS data proxying:
- XML-to-JSON conversion via SimpleXML

**`lib/Controller/GisProxyController`**
- `proxy()` endpoint forwards WMS/WFS requests, returns `JSONResponse`
- `capabilities()` endpoint fetches and parses GetCapabilities from a service URL
- `proxy()` endpoint: forwards WMS/WFS requests, returns `JSONResponse`
- `capabilities()` endpoint: fetches and parses GetCapabilities from a service URL
- Error codes: 400 (missing URL), 403 (URL blocked), 429 (rate limited), 502 (upstream error)

**`lib/Service/SettingsService`** new config keys: `map_layer_schema`
**`lib/Service/SettingsService`**: new config keys: `map_layer_schema`

### Frontend

Expand All @@ -44,5 +44,5 @@ All external GIS requests are proxied through Nextcloud to avoid CORS issues and
## Testing

Unit tests are in:
- `tests/Unit/Service/GisProxyServiceTest.php` URL allowlist validation, cache hit returns, rate limiting
- `tests/Unit/Controller/GisProxyControllerTest.php` HTTP status codes for success/403/429/502, missing URL → 400
- `tests/Unit/Service/GisProxyServiceTest.php`: URL allowlist validation, cache hit returns, rate limiting
- `tests/Unit/Controller/GisProxyControllerTest.php`: HTTP status codes for success/403/429/502, missing URL → 400
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

## Overview

Configures the Procest workflow engine for VTH (Vergunningen, Toezicht, Handhaving Permits, Supervision, Enforcement), adding domain-specific schemas, seed data, LHS matrix support, and UI panels for Dutch environmental compliance workflows.
Configures the Procest workflow engine for VTH (Vergunningen, Toezicht, Handhaving: Permits, Supervision, Enforcement), adding domain-specific schemas, seed data, LHS matrix support, and UI panels for Dutch environmental compliance workflows.

## Architecture

Expand All @@ -21,15 +21,15 @@ Configures the Procest workflow engine for VTH (Vergunningen, Toezicht, Handhavi
| `adviesAanvraag` | Advice request to internal/external advisors |

**New config keys** in `SettingsService`:
- `inspectie_checklist_schema` UUID of inspectieChecklist schema
- `inspectie_rapport_schema` UUID of inspectieRapport schema
- `handhavingsactie_schema` UUID of handhavingsactie schema
- `advies_aanvraag_schema` UUID of adviesAanvraag schema
- `lhsMatrix` JSON string of the 4×4 Landelijke Handhavingsstrategie matrix
- `inspectie_checklist_schema`: UUID of inspectieChecklist schema
- `inspectie_rapport_schema`: UUID of inspectieRapport schema
- `handhavingsactie_schema`: UUID of handhavingsactie schema
- `advies_aanvraag_schema`: UUID of adviesAanvraag schema
- `lhsMatrix`: JSON string of the 4×4 Landelijke Handhavingsstrategie matrix

**Seed data:**
- `lib/Settings/vth_seed_data.json` 6 VTH case types (Omgevingsvergunning Regulier/Uitgebreid, Sloopmelding, Toezichtzaak Bouw/Milieu, Handhavingszaak)
- `lib/Settings/vth-templates/` 6 JSON template files, one per case type
- `lib/Settings/vth_seed_data.json`: 6 VTH case types (Omgevingsvergunning Regulier/Uitgebreid, Sloopmelding, Toezichtzaak Bouw/Milieu, Handhavingszaak)
- `lib/Settings/vth-templates/`: 6 JSON template files, one per case type

### LHS Matrix

Expand All @@ -45,5 +45,5 @@ The Landelijke Handhavingsstrategie (LHS) provides a standard 4×4 enforcement r
## Testing

Unit tests are in:
- `tests/Unit/Service/VthSettingsServiceTest.php` VTH config keys in getSettings(), updateSettings() persists VTH keys, lhsMatrix readable, core keys not overridden
- `tests/Unit/Settings/VthSchemaTest.php` all 4 VTH schemas registered, vth-templates dir exists, template files are valid JSON, expected files present, vth_seed_data.json valid
- `tests/Unit/Service/VthSettingsServiceTest.php`: VTH config keys in getSettings(), updateSettings() persists VTH keys, lhsMatrix readable, core keys not overridden
- `tests/Unit/Settings/VthSchemaTest.php`: all 4 VTH schemas registered, vth-templates dir exists, template files are valid JSON, expected files present, vth_seed_data.json valid
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ Adds a zero-code visual workflow builder that allows administrators to define pr
- Pan/zoom via CSS transform

- **Configuration Panels:**
- `StepConfigPanel.vue` checklist editor, guard configuration
- `TransitionConfigPanel.vue` action configuration per transition
- `StepConfigPanel.vue`: checklist editor, guard configuration
- `TransitionConfigPanel.vue`: action configuration per transition

- **Case Detail Integration:** `WorkflowTransitions.vue` shows available transitions filtered by role/guards
- **Case Detail Integration:** `WorkflowTransitions.vue`: shows available transitions filtered by role/guards

## Guards

Expand Down
File renamed without changes.
Loading
Loading