Skip to main content

Zaak Afhandel App Features

Deprecation notice: The Zaak Afhandel App is no longer actively developed. Its functionality has been superseded by Procest (process and case management) and Pipelinq (CRM and pipeline management). This documentation is preserved for reference.

Zaak Afhandel App (ZAA) brings structured case handling (zaakafhandeling) into Nextcloud using Dutch government ZGW (Zaakgericht Werken) terminology and patterns. Case workers manage incoming cases from intake through resolution: assign tasks, exchange messages, log customer interactions, record decisions, and track every status transition — all from within Nextcloud.

Feature Index

FeatureDescription
Case ManagementFull ZGW-aligned case lifecycle from intake to closure
Task ManagementWork items assigned to staff or customers
Customer and Staff ManagementCitizen and employee records linked to cases
Contact MomentsLog all customer interactions per case
DocumentsAttach and manage case-related files
Decisions and ResultsRecord formal decisions and case outcomes
Dashboard and Work QueuePersonal work queue with case overview
SearchFull-text search across cases, tasks, and customers
NotificationsActivity stream integration for case events

Case Management

Cases (zaken) are the central record in ZAA. Each case follows a defined lifecycle from intake through formal closure.

Case Lifecycle

StatusDescription
IntakeCase received, not yet assigned
In behandelingAssigned and actively being handled
Wacht op informatieWaiting for information from citizen or external party
AfgerondFormally closed with a result
IngetrokkenWithdrawn by the citizen

Case Types (ZaakTypen)

Case types (zaaktypen) define workflow templates for categories of cases:

  • Workflow configuration and allowed status transitions
  • Required custom metadata fields (eigenschappen)
  • Default roles and responsibilities
  • Document type requirements

Case Properties (Eigenschappen)

Custom metadata fields per case type allow organisations to capture domain-specific information beyond the standard ZGW fields. Eigenschappen are typed (string, date, number, boolean) and can be required or optional.

Roles (Rollen)

Typed relationships between parties and a case:

Role TypeDescription
BehandelaarPrimary case handler
AdviseurAdvising party
InitiatorParty that initiated the case (often the citizen)
BelanghebbendeInterested party
MedeaanvragerCo-applicant
BeslisserDecision maker
KlantcontacterCustomer contact person

Controller: lib/Controller/RollenController.php Service: lib/Service/ZGWLogicService.php

ZGW Data Standard

All case data conforms to the ZGW (Zaakgericht Werken) standard defined by VNG-Realisatie:

  • Cases map to the ZGW Zaken API data model
  • Case types map to ZGW ZaakType definitions
  • Roles, results, and decisions follow ZGW terminology
  • The app can proxy ZGW API calls to an external Zaken API instance

Task Management

Tasks (taken) are work items that can be assigned to a staff member or customer as part of case handling:

  • Title, description, and due date
  • Assignment to a Nextcloud user or external party
  • Status tracking (open, in progress, completed, overdue)
  • Link to a parent case
  • Priority levels

The Taken widget on the Nextcloud Dashboard shows the current user's open tasks at a glance.

Controller: lib/Controller/TakenController.php View: src/views/taken/

Customer and Staff Management

Customers (Klanten)

Citizens and organisations involved in cases are registered as klanten:

  • BSN (for individuals) or KVK number (for organisations)
  • Name, address, contact details
  • Full interaction history across all cases
  • Link to the OpenKlant API for federated customer data

Controller: lib/Controller/KlantenController.php

Staff (Medewerkers)

Employees who handle or advise on cases:

  • Nextcloud user account linkage
  • Department and role information
  • Active case and task load
  • Availability status

Controller: lib/Controller/MedewerkersController.php

Contact Moments

Every customer interaction is logged as a contactmoment:

  • Interaction type (call, email, walk-in, appointment, web form)
  • Date, time, and duration
  • Participants (staff member and customer)
  • Summary and outcome notes
  • Link to the case and any resulting tasks or decisions

The complete interaction history per customer or case is available in a chronological timeline view.

Controller: lib/Controller/ContactMomentenController.php View: src/views/contactMomenten/

Documents

Case-related files are managed through the documenten feature:

  • Attach files from Nextcloud Files or upload directly
  • Document type classification
  • Version tracking
  • Link to an external DRC (Documentregistratiecomponent) via ZGW API

Documents are accessible from the case detail view and from the Documents section.

Controller: lib/Controller/DocumentenController.php View: src/views/documenten/

Decisions and Results

Decisions (Besluiten)

Formal case decisions are recorded and linked to the case:

  • Decision type and reference
  • Date issued and effective date
  • Responsible decision maker (role)
  • Link to supporting documents
  • Beroepstermijn (appeal period)

Controller: lib/Controller/BesluitenController.php

Results (Resultaten)

The final outcome of a case (resultaat) is recorded at case closure:

  • Result type from a configured result type list
  • Toelichting (explanation)
  • Archive classification (archiveringsaanduiding, bewaartermijn)

Controller: lib/Controller/ResultatenController.php

Dashboard and Work Queue

The Dashboard view is the primary entry point for case workers. It shows:

  • Personal work queue: open cases assigned to the current user
  • Open tasks with due dates
  • Recent contact moments
  • Quick-access buttons for creating new cases and tasks

Nextcloud Dashboard Widgets

ZAA registers multiple widgets in the Nextcloud Dashboard:

WidgetDescription
ZakenOpen cases assigned to the current user
TakenOpen tasks assigned to the current user
OpenZakenAll open cases (for managers)
ContactMomentenRecent customer interactions
OrganisatiesActive organisations
PersonenKey contacts

View: src/views/dashboard/

Full-text search across cases, customers, tasks, and contact moments. Supports:

  • Keyword search across all text fields
  • Faceted filtering by case type, status, assigned user, and date range
  • Optional Elasticsearch backend for large datasets

Controller: lib/Controller/ObjectsController.php View: src/views/search/

Notifications

ZAA integrates with the Nextcloud Activity system. Case lifecycle events generate notifications:

  • Case assigned to you
  • New message on your case
  • Task approaching due date
  • Status changed on a case you are following
  • New decision on a case

Event listeners: lib/EventListener/

Architecture

Backend

LayerDescription
ControllersREST API controllers per entity type (Zaken, Taken, Klanten, etc.)
ServicesBusiness logic: ZGWLogicService, CallService, ObjectService
ZGW ProxyCallService proxies ZGW API calls to external Zaken API instances

Frontend

LayerDescription
ViewsRoute-level Vue 2 components per entity type
StoresPinia stores per entity with CRUD operations
EntitiesZod-validated entity classes for type safety
ModalsCRUD modals for create/edit operations
WidgetsNextcloud Dashboard widget entry points

Standards and Compliance

StandardRole
ZGW Zaken API (VNG-Realisatie)Primary data model and API design
GEMMA Zaakgericht WerkenArchitectural reference
WCAG AAAccessibility requirement
EUPL-1.2License

Data Model

EntityDutch TermDescription
CaseZaakCentral case record
Case TypeZaakTypeWorkflow template for a class of cases
TaskTaakWork item linked to a case
CustomerKlantCitizen or organisation in a case
StaffMedewerkerEmployee handling the case
RoleRolTyped relationship between party and case
Contact MomentContactmomentLogged customer interaction
MessageBerichtMessage within a case
DecisionBesluitFormal case decision
DocumentDocumentFile attached to a case
ResultResultaatCase outcome at closure
Case PropertyEigenschapCustom metadata field on a case
StatusStatusCurrent lifecycle status of a case