Skip to main content

DSO / Omgevingsloket Adapter

Overview

The DSO adapter integrates OpenConnector with the Digitaal Stelsel Omgevingswet (DSO) Landelijke Voorziening for receiving and processing vergunningaanvragen, meldingen, and informatieverzoeken from the Omgevingsloket. Required by Dutch VTH-related government tenders.

Endpoints

POST /api/dso/stam/verzoeken

Receives DSO-verzoek payloads from DSO-LV via the STAM koppelvlak.

Authentication: Public endpoint with webhook signature validation via X-DSO-Signature header.

Request body: JSON payload conforming to the STAM schema:

{
"verzoekId": "dso-12345",
"bronorganisatie": "00000001234567890000",
"type": "aanvraag",
"indieningsdatum": "2024-06-15",
"aanvrager": {
"bsn": "999993653",
"naam": "J. Jansen",
"adres": { "straatnaam": "Hoofdstraat", "huisnummer": "10", "postcode": "1234AB", "woonplaats": "Utrecht" },
"contactgegevens": { "email": "j.jansen@example.nl", "telefoon": "0612345678" }
},
"locatie": {
"bagAdres": { "postcode": "1234AB", "huisnummer": "10" },
"gmlGeometrie": "<gml:Point><gml:pos>52.370216 4.895168</gml:pos></gml:Point>"
},
"activiteiten": [
{ "code": "bouwen-01", "omschrijving": "Bouwen van een woning" }
],
"bouwkosten": 250000,
"bijlagen": [
{ "naam": "bouwtekening.pdf", "type": "tekening", "url": "https://dso-lv.nl/docs/abc123" }
]
}

Response (202 Accepted):

{
"verzoekId": "dso-12345",
"status": "ontvangen",
"message": "Verzoek ontvangen en wordt verwerkt"
}

Error responses:

  • 401 Unauthorized -- Invalid webhook signature
  • 400 Bad Request -- Payload validation errors with field-level details

Verzoek Types

TypeDescriptionZaak created
aanvraagVergunningaanvraagFull zaak with behandelproces
meldingMelding (notification)Simplified zaak, no besluit required
informatieverzoekRequest for informationLightweight zaak for advies
vooroverlegPre-application consultationLightweight zaak, no formal besluit

Activiteiten Mapping

DSO activiteiten (bouwen, milieu, kappen, etc.) are mapped to zaaktypen via a configurable mapping table stored in OpenRegister. The mapping supports:

  • One-to-one: One activiteit maps to one zaaktype
  • One-to-many: One activiteit generates multiple zaaktypen for different afdelingen
  • Samenloop: Multiple activiteiten in one verzoek can create deelzaken or a combined zaak

Validation

The parser validates:

  • Required fields (verzoekId, type, indieningsdatum, aanvrager, locatie, activiteiten)
  • BSN 11-proef validation
  • ISO 8601 date format
  • Enum values for type field

PKIoverheid Authentication

DSO-LV communication uses PKIoverheid certificates for mutual TLS. Certificates are configured via the Source entity's configuration field and managed through CallService's existing certificate handling.

Implementation

  • DSOController: lib/Controller/DSOController.php -- STAM endpoint
  • DSOParserService: lib/Service/DSOParserService.php -- Payload parsing and validation
  • Route: appinfo/routes.php -- POST /api/dso/stam/verzoeken
  • Tests: tests/Unit/Service/DSOParserServiceTest.php

Status

Foundational implementation complete (endpoint, parser, validator). The following features require external dependencies and are planned for future implementation:

  • Bijlagen download from DSO-LV (requires mTLS certificates)
  • Automatic zaak creation (requires Procest app)
  • Status push back to DSO-LV
  • DSO-SWF samenwerking
  • Activiteiten-mapping administration UI