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
13 changes: 13 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
cooldown:
default-days: 1
include:
- "*"
exclude:
- "@conduction/*"
5 changes: 5 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Supply-chain hardening: reject any npm package published less than
# 24h ago. Compromised first-party-Conduction packages are excluded via
# Dependabot cooldown (.github/dependabot.yml); for fresh @conduction/*
# releases, override per-install with `npm install --min-release-age=0`.
min-release-age=1
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ const config = createConfig({
(colorMode + navbar + footer). Custom prism + mermaid theme
overrides land alongside. */
themeConfig: {
image: 'img/og-openconnector.png',
prism: {
theme: {
plain: {
Expand Down
File renamed without changes.
4 changes: 3 additions & 1 deletion docusaurus/package.json → docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"postbuild": "validate-ai-baseline",
"validate:ai-baseline": "validate-ai-baseline",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
Expand All @@ -15,7 +17,7 @@
"ci": "npm ci --legacy-peer-deps && npm run build"
},
"dependencies": {
"@conduction/docusaurus-preset": "^2.6.1",
"@conduction/docusaurus-preset": "^3.5.0",
"@docusaurus/core": "^3.10.0",
"@docusaurus/preset-classic": "^3.10.0",
"@docusaurus/theme-mermaid": "^3.10.0",
Expand Down
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
Binary file added docs/static/img/og-openconnector.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions docs/static/llms.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# OpenConnector

> OpenConnector is an open-source data-synchronization app for the Nextcloud workspace.

OpenConnector is an open-source data-synchronization app for the Nextcloud workspace. It connects APIs, databases, file systems, and external services to OpenRegister, transforms payloads through configurable mappings, and schedules automated sync jobs with event and webhook triggers. It also exposes endpoints, consumers, and business rules, so government teams can build integrations without a separate ESB. Released under EUPL-1.2 and maintained by Conduction since 2019.

## Docs

- [Documentation](https://openconnector.conduction.nl/docs/intro): main entry, including tutorials, user guide, and admin guide.
- [API reference](https://openconnector.conduction.nl/api): OpenAPI documentation.

## Optional

- [Install](https://www.conduction.nl/install): self-host on your Nextcloud instance.
- [Source code](https://github.com/ConductionNL/openconnector): repository and issue tracker.
- [App page](https://www.conduction.nl/apps/openconnector): product positioning on conduction.nl.

## Contact

- Email: info@conduction.nl
- Web: https://www.conduction.nl
- GitHub: https://github.com/ConductionNL
- Conduction B.V. · KvK 76741850 · Lauriergracht 14h, Amsterdam, Netherlands
41 changes: 0 additions & 41 deletions docusaurus/README.md

This file was deleted.

92 changes: 32 additions & 60 deletions openspec/changes/dso-omgevingsloket/tasks.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
# Tasks: dso-omgevingsloket

> Sub-bullets describe the work per task. Each top-level checkbox is the unit Hydra tracks; flip when the whole task (implementation + tests) is done. ADR-032 cap respected (≤20).

## Task 1: STAM Endpoint Registration (REQ-DSO-001)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-001`
- **files**: `lib/Controller/DSOController.php`, `appinfo/routes.php`
- **acceptance_criteria**:
- GIVEN DSO adapter endpoint registered WHEN DSO-LV pushes verzoek THEN HTTP 202 returned with verzoekId
- GIVEN invalid webhook signature WHEN request arrives THEN HTTP 401 returned
- GIVEN malformed payload WHEN schema validation fails THEN HTTP 400 with field-level errors
- [ ] Implement DSOController with STAM endpoint
- [ ] Register route at /api/dso/stam/verzoeken
- [ ] Add webhook signature validation
- [ ] Add schema validation
- [ ] Test
- Implement DSOController with STAM endpoint, route registration, webhook signature + schema validation, tests
- [ ] Task complete

## Task 2: Verzoek Payload Parsing (REQ-DSO-004)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-004`
Expand All @@ -20,142 +19,115 @@
- GIVEN verzoek with aanvrager, locatie, activiteiten WHEN parser runs THEN structured data extracted
- GIVEN GML geometrie WHEN parser runs THEN GeoJSON conversion produced
- GIVEN version mismatch WHEN parsing THEN auto-detection attempted with warning
- [ ] Implement DSOParserService
- [ ] Add BSN/KVK extraction
- [ ] Add locatie/BAG parsing
- [ ] Add activiteiten parsing
- [ ] Add GML to GeoJSON conversion
- [ ] Test
- Implement DSOParserService (BSN/KVK extraction, locatie/BAG parsing, activiteiten parsing, GML→GeoJSON), tests
- [ ] Task complete

## Task 3: Verzoek Schema Validation (REQ-DSO-006)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-006`
- **files**: `lib/Service/DSOParserService.php`
- **acceptance_criteria**:
- GIVEN missing required fields WHEN validation runs THEN descriptive errors returned
- GIVEN invalid BSN (11-proef fails) WHEN validation runs THEN BSN error returned
- [ ] Implement STAM schema validation
- [ ] Add BSN 11-proef validation
- [ ] Add date format validation
- [ ] Test
- Implement STAM schema validation + BSN 11-proef + date format validation, tests
- [ ] Task complete

## Task 4: Melding and Informatieverzoek Reception (REQ-DSO-002, REQ-DSO-003)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-002`, `#req-dso-003`
- **files**: `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN melding received WHEN processed THEN zaak created with "Melding" zaaktype
- GIVEN vooroverleg received WHEN processed THEN lightweight zaak created
- [ ] Implement melding handling
- [ ] Implement informatieverzoek handling
- [ ] Implement vooroverleg handling
- [ ] Test
- Implement melding, informatieverzoek, vooroverleg handling, tests
- [ ] Task complete

## Task 5: Bijlagen Download and Storage (REQ-DSO-005)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-005`
- **files**: `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN verzoek with bijlagen WHEN processed THEN files downloaded and stored in Nextcloud Files
- GIVEN download failure WHEN retries exhausted THEN warning flagged on zaak
- [ ] Implement bijlagen download with mTLS
- [ ] Add retry with exponential backoff
- [ ] Add file size limit check
- [ ] Add folder structure creation
- [ ] Test
- Implement bijlagen download with mTLS + retry with exponential backoff + file size limit + folder structure, tests
- [ ] Task complete

## Task 6: Activiteiten-to-Zaaktype Mapping (REQ-DSO-010)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-010`
- **files**: `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN mapping table configured WHEN verzoek has activiteit THEN correct zaaktype used
- GIVEN empty mapping table WHEN admin loads defaults THEN 25+ mappings seeded
- [ ] Implement mapping table lookup
- [ ] Add default mapping seed
- [ ] Test
- Implement mapping table lookup + default mapping seed, tests
- [ ] Task complete

## Task 7: Samenloop Handling (REQ-DSO-011)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-011`
- **files**: `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN multiple activiteiten with deelzaken strategy WHEN processed THEN hoofdzaak + deelzaken created
- GIVEN gecombineerd strategy WHEN processed THEN single combined zaak created
- [ ] Implement deelzaken strategy
- [ ] Implement gecombineerd strategy
- [ ] Test
- Implement deelzaken + gecombineerd strategies, tests
- [ ] Task complete

## Task 8: Unmapped Activiteit Fallback (REQ-DSO-013)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-013`
- **files**: `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN unmapped activiteit WHEN processed THEN triage zaak created with notification
- [ ] Implement fallback zaaktype creation
- [ ] Add notification to triage user
- [ ] Test
- Implement fallback zaaktype creation + triage-user notification, tests
- [ ] Task complete

## Task 9: Automatic Zaak Creation (REQ-DSO-020)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-020`
- **files**: `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN valid verzoek parsed WHEN zaak creation runs THEN zaak has all mapped fields
- GIVEN zaak created WHEN complete THEN EventService dispatches event for n8n
- [ ] Implement zaak creation via OpenRegister
- [ ] Add event dispatch
- [ ] Test
- Implement zaak creation via OpenRegister + event dispatch, tests
- [ ] Task complete

## Task 10: DSO-SWF Samenwerking (REQ-DSO-030)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-030`
- **files**: `lib/Service/DSOSamenwerkingService.php`
- **acceptance_criteria**:
- GIVEN zaak requires advies WHEN behandelaar marks for samenwerking THEN adviesverzoek sent via DSO-SWF
- GIVEN advies received WHEN processed THEN stored and behandelaar notified
- [ ] Implement adviesverzoek sending
- [ ] Implement advies reception
- [ ] Test
- Implement adviesverzoek sending + advies reception, tests
- [ ] Task complete

## Task 11: Status Push to DSO-LV (REQ-DSO-040)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-040`
- **files**: `lib/Service/DSOStatusService.php`
- **acceptance_criteria**:
- GIVEN zaak status changes WHEN DSO-originated zaak THEN status pushed to DSO-LV
- GIVEN push fails WHEN retries exhausted THEN manual-retry task created
- [ ] Implement status mapping
- [ ] Implement outbound push with retry
- [ ] Test
- Implement status mapping + outbound push with retry, tests
- [ ] Task complete

## Task 12: PKIoverheid Certificate Authentication (REQ-DSO-050)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-050`
- **files**: `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN PKIoverheid certificate configured WHEN outbound call made THEN mTLS used
- GIVEN certificate expiring in 30 days WHEN health check runs THEN warning notification sent
- [ ] Implement certificate validation
- [ ] Add expiry monitoring
- [ ] Test
- Implement certificate validation + expiry monitoring, tests
- [ ] Task complete

## Task 13: Source Registration (REQ-DSO-060)
- **spec_ref**: `specs/dso-omgevingsloket/spec.md#req-dso-060`
- **files**: `lib/Db/Source.php`, `lib/Service/DSOAdapterService.php`
- **acceptance_criteria**:
- GIVEN new source type "dso" WHEN configured THEN DSO-specific fields stored
- GIVEN DSO source WHEN test connection clicked THEN STAM probe validates connectivity
- [ ] Add "dso" source type
- [ ] Implement test connection
- [ ] Test
- Add "dso" source type + implement test connection (STAM probe), tests
- [ ] Task complete

## Task 14: Unit Tests
- **spec_ref**: ADR-009
- **files**: `tests/Unit/Service/DSOParserServiceTest.php`, `tests/Unit/Controller/DSOControllerTest.php`
- [ ] Write parser tests (BSN validation, payload extraction, GML conversion)
- [ ] Write controller tests (endpoint responses, validation errors)
- [ ] Write adapter service tests (mapping, samenloop, fallback)
- Parser tests (BSN validation, payload extraction, GML conversion); controller tests (endpoint responses, validation errors); adapter service tests (mapping, samenloop, fallback)
- [ ] Task complete

## Task 15: API Documentation
- **spec_ref**: ADR-010
- **files**: `docs/features/dso-omgevingsloket.md`
- [ ] Write endpoint documentation
- [ ] Write configuration guide
- [ ] Write mapping administration guide

## Verification
- [ ] All tasks checked off
- [ ] Unit tests pass
- [ ] Integration with DSO-LV test environment verified
- [ ] Activiteiten mapping works end-to-end
- Endpoint documentation, configuration guide, mapping administration guide
- [ ] Task complete
Loading
Loading