Skip to content

Latest commit

 

History

2,430 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Dossiq logo

Dossiq

Case management for Nextcloud — configurable workflows, deadlines, and formal decisions

Latest release License Code quality Documentation


Dossiq brings structured case management (zaakgericht werken) natively into Nextcloud. Define case types with custom status lifecycles, track progress and deadlines, assign roles, and record formal decisions — all within a clean, intuitive interface that integrates naturally with the rest of your Nextcloud workspace.

It pairs with Pipelinq to form a complete intake-to-resolution workflow: Pipelinq handles the customer-facing CRM side, Dossiq handles the internal case processing.

Requires: OpenRegister — all data is stored as OpenRegister objects (no own database tables).

Screenshots

Dashboard with KPI cards and case overview Case list and detail view Admin case type management
Dashboard Cases Admin — Case Types

Features

Case Types

  • Configurable Workflows — Define case types with allowed statuses, deadline durations, required documents, and custom properties
  • Status Lifecycle — Design the exact sequence of statuses a case must pass through
  • Default Values — Set default confidentiality level, assigned roles, and SLA targets per case type
  • Admin Panel — Manage all case types from a dedicated admin settings view

Case Management

  • Case Lifecycle — Full CRUD with status transitions, validation rules, and audit trail
  • Status Timeline — Visual progress indicator showing all lifecycle phases and current position
  • Automatic Deadlines — Deadlines calculated from case type duration with live countdown (days remaining / overdue alerts)
  • Quick Status Changes — Change status directly from the case list without opening the full detail view

Tasks & Decisions

  • Task Assignment — Create and assign tasks to team members with BPMN-style lifecycle (available → active → completed)
  • Formal Decisions — Record official decisions (besluiten) with outcomes, motivation, and effective dates
  • Document Checklists — Track required documents at each status stage with upload verification
  • Participant Roles — Assign the right people to the right roles: handler, advisor, decision-maker

Work Management

  • My Work Dashboard — Personal overview of all assigned cases, pending tasks, and overdue items
  • KPI Cards — At-a-glance counts of open cases, overdue deadlines, pending tasks, and recent activity
  • Activity Timeline — Complete history of every change made to a case, with timestamps and responsible party

Integrations

  • Unified Search — Cases and tasks appear in Nextcloud's global search, provided centrally via OpenRegister (dossiq ships no own search provider)
  • Pipelinq Bridge — Receive requests handed off from Pipelinq CRM as new cases, via OpenRegister's semantic object handoff (dossiq implements the ns#Case kind; requests map onto cases with navigable provenance)
  • Sub-cases — Break complex cases into parent-child hierarchies for structured processing

Architecture

graph TD
    A[Vue 2 Frontend] -->|REST API| B[OpenRegister API]
    B --> C[(PostgreSQL JSON store)]
    A --> D[Nextcloud Activity]
    A --> E[Nextcloud Search]
    F[Pipelinq] -->|request handoff| A
Loading

Data Model

Object Description CMMN 1.1 ZGW Mapping
Case Formal process with lifecycle CasePlanModel Zaak
Case Type Configurable case template CaseDefinition ZaakType
Task Work item within a case HumanTask
Status Lifecycle phase Milestone Status
Role Participant relationship Rol
Result Case outcome Resultaat
Decision Formal decision Besluit

Data standard: CMMN 1.1 (OMG Case Management Model and Notation) with Schema.org mapping and ZGW API compatibility.

Directory Structure

dossiq/
├── appinfo/           # Nextcloud app manifest, routes, navigation
├── lib/               # PHP backend — controllers, services
├── src/               # Vue 2 frontend — components, Pinia stores, views
│   ├── components/    # Reusable UI components
│   ├── store/         # Pinia stores per entity (cases, caseTypes, tasks…)
│   └── views/         # Route-level views
├── docs/
│   ├── Features/      # Per-feature documentation
│   └── Technical/     # Architecture and development guides
├── img/               # App icons and screenshots
├── l10n/              # Translations (en, nl)
└── docusaurus/        # Product documentation site (conduction.nl)

KCC-werkplek Integration

The kcc-werkplek-zaaksysteem-bridge capability surfaces real-time zaaksysteem context inside the pipelinq KCC-werkplek. Pipelinq owns the contact-center UI; Dossiq exposes a read/write API plus background jobs.

Schemas (modular lib/Settings/register.d/40-kcc-werkplek.json, ADR-037 — the monolith is never edited): contactmoment, kccQuickAction, belplan, specialistBeschikbaarheid, doorverbinding, klantSentiment. A burger is a Nextcloud contact entity resolved through OCP\Contacts\IManager; no bespoke person/customer schema is introduced.

Services: ContactMomentService (log contacts, append immutable case activity), BurgerIdentificationService (DigiD pseudonymisation + weighted identificatievragen scoring), CaseVoorbladService (open zaken + history + suggested topic), BelplanRoutingService (vaardigheid match + wachtrij-overflow), QuickActionService (status / nieuwe zaak / klacht / bel-terug), DoorverbindingService (immutable context snapshot + accept/reject), SentimentService (Dutch trigger-word + escalatie scoring).

Controllers / routes (under /api/ and /api/kcc/): ContactMomentController, BelplanController (belplan CRUD is admin-gated), SpecialistBeschikbaarheidController (read-only).

Background jobs: SentimentAnalysisJob (every 10 min, scores transcriptions), SpecialistBeschikbaarheidRefreshJob (every 30 s, ages out stale availability).

Setting Default Purpose
identification_method both digid / bsn_questions / both
identification_score_threshold 0.8 minimum identificatievragen score to link a burger
sentiment_polling_interval 5 seconds
specialist_availability_polling_interval 30 seconds (drives the refresh job staleness window)
max_zaken_voorblad 10 open zaken shown on the voorblad
max_contactmomenten_history 5 recent contactmomenten shown
sentiment_trigger_words JSON list Dutch escalation trigger words

Troubleshootingspecialist-beschikbaarheid API unreachable? The refresh job logs a warning and keeps the existing (stale) cache; routing keeps using the last known availability, and stale records are marked afwezig after specialist_availability_polling_interval × 4 so calls are never routed to a silent specialist.

Requirements

Dependency Version
Nextcloud 28 – 34
PHP 8.3+
OpenRegister latest

Installation

From the Nextcloud App Store

  1. Go to Apps in your Nextcloud instance
  2. Search for Dossiq
  3. Click Download and enable

OpenRegister must be installed first. Install OpenRegister →

From Source

cd /var/www/html/custom_apps
git clone https://github.com/ConductionNL/dossiq.git
cd dossiq
npm install
npm run build
php occ app:enable dossiq

Development

Start the environment

docker compose -f openregister/docker-compose.yml up -d

Frontend development

cd dossiq
npm install
npm run dev        # Watch mode
npm run build      # Production build

Code quality

# PHP — unified strict gate (runs in CI on every PR)
composer check:strict   # lint + phpcs + phpmd + psalm + phpstan + tests

# Individual tools
composer phpcs          # Check coding standards
composer cs:fix         # Auto-fix issues
composer phpmd          # Mess detection (no baseline — must pass clean)
composer phpstan        # Static analysis (level 5)
composer psalm          # Static analysis
composer phpmetrics     # HTML metrics report

# Frontend
npm run lint            # ESLint
npm run stylelint       # CSS linting

composer check:strict is the unified quality gate; the equivalent gates are enforced on every PR by .github/workflows/code-quality.yml (the shared ConductionNL/.github quality pipeline). PHPMD and PHPStan both run with no baseline — every violation is fixed at source, so the gate's green is bought entirely by the code and not by a suppression file. The only PHPStan suppressions are the documented ignoreErrors patterns in phpstan.neon covering stub gaps in nextcloud/ocp (server-internal \OC classes, other apps' OCA\ namespaces, Guzzle, Doctrine DBAL), each with a written justification. Do not reintroduce phpstan-baseline.neon.

Tech Stack

Layer Technology
Frontend Vue 2.7, Pinia, @nextcloud/vue
Build Webpack 5, @nextcloud/webpack-vue-config
Backend PHP 8.3+, Nextcloud App Framework
Data OpenRegister (PostgreSQL JSON objects)
UX @conduction/nextcloud-vue
Quality PHPCS, PHPMD, phpmetrics, ESLint, Stylelint

Documentation

Full documentation is available at conduction.nl

Page Description
Features Complete feature specification
Architecture Technical architecture and design decisions
Development Developer setup and contribution guide

Standards & Compliance

  • Data standard: CMMN 1.1 (OMG Case Management specification)
  • Process standards: BPMN 2.0 for task lifecycles (DMN: roadmap — no DMN engine ships today)
  • Dutch interoperability: ZGW APIs (Zaken, Besluiten, Catalogi), RGBZ information model
  • Accessibility: WCAG AA (Dutch government requirement)
  • Authorization: RBAC via OpenRegister
  • Audit trail: Full change history on all objects
  • Localization: English and Dutch

Related Apps

  • Pipelinq — CRM intake; hands off requests to Dossiq as new cases
  • OpenRegister — Object storage layer (required dependency)
  • OpenCatalogi — Application catalogue

Support

For support, contact us at support@conduction.nl.

For a Service Level Agreement (SLA), contact sales@conduction.nl.

License

This project is licensed under the EUPL-1.2.

Dependency license policy

All dependencies (PHP and JavaScript) are automatically checked against an approved license allowlist during CI. The following SPDX license families are approved for use in dependencies:

  • Permissive: MIT, ISC, BSD-2-Clause, BSD-3-Clause, 0BSD, Apache-2.0, Unlicense, CC0-1.0, CC-BY-3.0, CC-BY-4.0, Zlib, BlueOak-1.0.0, Artistic-2.0, BSL-1.0
  • Copyleft (EUPL-compatible): LGPL-2.0/2.1/3.0, GPL-2.0/3.0, AGPL-3.0, EUPL-1.1/1.2, MPL-2.0
  • Font licenses: OFL-1.0, OFL-1.1

Dependencies with licenses not on this list will fail CI unless explicitly approved in .license-overrides.json with a documented justification.

Authors

Built by Conduction — open-source software for Dutch government and public sector organizations.

About

Case management Nextcloud app — thin client on OpenRegister

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages