Building a Gemeente Integration Platform on Azure
Building a Gemeente Integration Platform on Azure

Understanding and Building Integration with Dutch Municipality using AIS

There are 342 municipalities in the Netherlands. Each one is legally independent and responsible for a wide range of public services — issuing birth certificates, handling building permits, managing social welfare payments, and maintaining subsurface infrastructure records. Yet despite this diversity, every gemeente operates within a tightly standardised national IT framework — shared base registries, common authentication infrastructure, sector-wide messaging protocols, and a national reference architecture.

The result is one of the most interesting integration challenges in European public IT: a highly standardised policy layer sitting on top of an extremely heterogeneous application landscape, actively being modernised under the Common Ground programme. A mid-sized municipality typically runs between 80 and 150 different IT applications, connected by a mixture of 20-year-old SOAP interfaces, modern ZGW REST APIs, Digikoppeling-certified government channels, and point-to-point integrations nobody quite wants to talk about.

This article maps out the full landscape — the standards, the architecture frameworks, the key design principles — and shows exactly how Azure Integration Services fits in, with four concrete, runnable scenarios.


The Dutch gemeente IT landscape

Every Dutch municipality, regardless of size, operates across four distinct layers of IT systems. Getting these layers clear is the prerequisite for any meaningful integration design.

Dutch municipality IT landscape — four layers CHAIN PARTNERS — ketenpartners UWV Belastingdienst DUO RDW SVB Zorgkantoor/CIZ Omgevingsdienst/Politie Data exchange via Digikoppeling, SUWI-net, sector chains MUNICIPAL OWN SYSTEMS — 80–150 applications per gemeente Zaaksysteem DMS / RMA E-formulieren Vergunningensysteem Sociaal domein Financieel / HRM GIS platform Klantcontactsysteem SHARED NATIONAL INFRASTRUCTURE — Logius / BZK DigiD eHerkenning Digikoppeling MijnOverheid / Berichtenbox PKIoverheid / DSO Operated centrally — all municipalities consume these services NATIONAL BASE REGISTRIES — authoritative source of truth BRP BAG BRK BGT HR / KvK WOZ BRO BRI / BRV / RNI 10 basisregistraties — citizens, addresses, land, companies, property, vehicles, income
Figure 1 — The four layers of the Dutch municipality IT landscape.

At the base are the 10 national base registries (basisregistraties) — the authoritative sources of truth for citizens (BRP), addresses (BAG), land (BRK), companies (HR/KvK), and more. These are operated centrally by BZK, Kadaster, and CBS, and all municipalities consume them via standardised APIs.

Above that sits the shared national infrastructure operated by Logius: DigiD and eHerkenning for citizen and business authentication, Digikoppeling for secure inter-government messaging, MijnOverheid Berichtenbox for official digital mail, and PKIoverheid certificates for mutual TLS.

The municipal own systems layer is where diversity lives. A zaaksysteem (case management), DMS, vergunningensysteem (permits), e-formulieren platform, social domain application, and financial system — all procured separately, often from different vendors, running different technology generations simultaneously.

Finally, chain partners (ketenpartners) — UWV, Belastingdienst, DUO, RDW, SVB, Zorgkantoor — all exchange structured data with the gemeente via sector-specific chains (SUWI, GBA, etc.) and Digikoppeling channels.


Reference architectures: NORA, GEMMA, and Common Ground

NORA — the national overarching framework

The Nederlandse Overheid Referentie Architectuur (NORA) is the national reference architecture for the entire Dutch government. It defines ten base principles and forty derived principles that apply to all public organisations under a “comply or explain” model — organisations must either apply the principles or formally justify why they do not. NORA is maintained by ICTU under the mandate of the Ministry of Interior (BZK). Its domain-specific “children” include GEMMA for municipalities, PETRA for provinces, WILMA for water boards, and RORA for national government.

GEMMA — the municipality reference architecture

GEMMA (Gemeentelijke ModelArchitectuur), maintained by VNG Realisatie, is now about 20 years old and has recently been restructured into three main components: the GEMMA Basisarchitectuur (architecture principles, business architecture, information architecture), domain-specific thema-architecturen covering security & privacy, zaakgericht werken, and Common Ground, and supporting products including the GEMMA Standaardenlijst and Softwarecatalogus. GEMMA compliance is a standard requirement in municipal IT procurement through the GIBIT (Gemeentelijke Inkoop bij IT Toolbox) framework.

Common Ground — the modernisation vision

Launched around 2018 by Amsterdam, Rotterdam, Den Haag, Utrecht, and Eindhoven, Common Ground is both a movement and an information architecture. Its central insight: the traditional Dutch municipal IT model — where every application keeps its own copy of citizen data — creates thousands of redundant databases, data quality problems, vendor lock-in, and security risks.

The Common Ground shift in one sentence

Instead of every application keeping a copy of the citizen’s address, every application calls the BRP API at the moment it needs the address — data at source, fetched on demand.

The practical realisation is the ZGW APIs — a suite of modern REST APIs covering case management (Zaken API), documents (Documenten API), catalogs (Catalogi API), and notifications (Notificaties API). These are rapidly replacing the older StUF-ZDS SOAP interface for zaakgericht werken integrations.


The Common Ground 5-layer model

Common Ground’s technical architecture is described using a 5-layer model. This is the architectural lens through which every integration decision in a gemeente should be viewed. Layer 3 — the integration layer — is precisely where Azure Integration Services operates.

Common Ground 5-layer model with AIS at Layer 3 Layer 5 — Interaction Portals, apps, chatbots, KCC — citizen-facing interfaces · MijnGemeente portal, WhatsApp service, chatbots Layer 4 — Process Case management, permit systems, BPM engines · Open Zaak, Rx.Mission, zaakafhandelcomponent Layer 3 — Integration ← Azure Integration Services operates here Routing, transformation, orchestration, messaging, governance · APIM · Logic Apps · Service Bus · Event Grid · Functions Layer 2 — Data services Standardised API access to authoritative sources · ZGW APIs, Haal Centraal BRP/BAG APIs, DSO APIs Layer 1 — Data storage Authoritative data stores — base registries, zaakmagazijn, documentopslag · BRP, BAG, Open Zaak
Figure 2 — The Common Ground 5-layer model. Layer 3 is the AIS operating zone. Authoritative data never lives here.

Critical design constraint

In a Common Ground-compliant architecture, your Azure integration platform must never store authoritative data. It routes, transforms, orchestrates, and monitors — BRP data stays in the BRP, zaakdata stays in the zaaksysteem. Logic Apps workflows must use variables only for the duration of a single run.


Design principles every solution must satisfy

Dutch government IT operates under a layered compliance framework. Any integration solution for a gemeente must satisfy principles at three levels simultaneously: NORA (national), GEMMA (municipal), and Common Ground (information architecture).

NORA base principles (comply or explain)

PrincipleWhat it means for integration design
BP05 — Eenmalig inwinnen (ask once)Citizens provide data only once. Pre-fill forms from BRP and BAG via API. Never ask for what you can look up.
BP08 — Interoperability firstUse open standards: Digikoppeling, ZGW APIs, OAuth 2.0/OIDC. Avoid proprietary interfaces that cannot be replaced without rebuilding the integration.
BP09 — Privacy by designEvery flow touching personal data requires AVG-compliant audit logging, purpose limitation coding, and explicit retention policies in Log Analytics.
BP10 — Reliability (betrouwbaar)Durable messaging, dead-letter handling, and retry policies are compliance requirements — not optional engineering niceties.

GEMMA-specific principles

PrinciplePractical implication
G01 — Zaakgericht werkenAll trackable citizen work is structured as zaken. Any integration processing citizen requests must create or update a zaak via ZGW Zaken API.
G02 — Use base registriesBRP for citizens, BAG for addresses, HR for companies — always the authoritative source. Shadow copies of base registry data are an architectural anti-pattern.
G03 — Open over proprietaryForum Standaardisatie publishes mandatory and recommended standards lists. New procurement must prefer open standards and formally justify deviations.

Common Ground information architecture principles

  • Data bij de bron — Data stays at its authoritative source. Fetch on demand, never copy.
  • Ontkoppeling van processen en data — The process layer must not have direct database connections to data stores. All data access goes via Layer 2 APIs.
  • Open APIs als standaard — REST + JSON + OpenAPI specification. Legacy StUF/SOAP is being phased out; new integrations use ZGW APIs.
  • Autonomie van componenten — Every component must be replaceable without breaking the platform. Design integrations to API contracts, not to specific implementations.
  • Federatief gegevenslandschap — No central data warehouse. Data lives in authoritative sources and is composed at runtime — the natural fit for event-driven architecture.

Mandatory open standards (Forum Standaardisatie)

StandardDomainIntegration design implication
DigikoppelingSecure inter-government messagingAPIM must route WUS/ebMS traffic with PKIoverheid mutual TLS. Synchronous Bv03 acknowledgements required within strict time windows.
StUF (legacy)XML/SOAP data exchangeMost existing systems still speak StUF. Logic Apps translates StUF to ZGW REST for migration paths.
ZGW APIsModern case management RESTPrimary target for new integrations. All new zaaksysteem connections should use ZGW, not StUF.
OAuth 2.0 / OIDCAuthentication & authorisationDigiD and eHerkenning use OIDC. APIM inbound policies enforce token validation on every API call.
NL API Design RulesREST API designAll APIs exposed via APIM must follow Dutch API Design Rules: versioning, HAL, pagination, JSON.
AVG / GDPRData privacyAll flows touching BSN or personal data need audit logging, purpose limitation headers, and retention enforcement.

Where Azure Integration Services fits

Azure Integration Services is not one product — it is a suite of five services that together cover the full integration layer. The mapping onto the GEMMA/Common Ground model is precise and complete.

Azure Integration Services mapped to the gemeente integration layer LAYER 3 — AZURE INTEGRATION SERVICES PLATFORM Logic Apps Workflow orchestration Orchestrates flows across layers. StUF ↔ ZGW translation. 1,400+ connectors. Permit workflows Zaak creation flows SUWI chain handling API Management AI + API gateway Central API gateway. Digikoppeling routing. DigiD token validation. Rate limits / AVG logging AI semantic caching API catalog / GEMMA Service Bus Durable messaging Reliable chain partner message broker. Dead-letter handling. SUWI / BRP events Ordered, at-least-once System-to-system queue Event Grid Reactive eventing Pub/sub state-change events across systems. N consumer fan-out. Address change events Zaak status updates DSO decision events Functions Custom logic StUF XML parsing. BSN pseudonymise. Complex rules. StUF XML transform BSN pseudonymise Validation rules Layer 3 is a pure routing and orchestration layer — authoritative data never lives here
Figure 3 — Azure Integration Services mapped to the gemeente Layer 3 context.

Four hands-on scenarios

The following scenarios represent real integration challenges we deliver for Dutch municipalities. Each maps to a concrete GEMMA/Common Ground requirement, identifies the applicable standards, and shows the Azure architecture that implements it.

Scenario 1 — BRP address change: event-driven fan-out

A citizen reports a change of address (verhuizing). The change is registered in the BRP. All downstream systems — the zaaksysteem, DMS, social domain system, WOZ system — must be updated. The traditional approach (each system polling the BRP nightly) creates stale data, race conditions, and unnecessary load on the base registry.

Scenario 1 — BRP address change event-driven fan-out BRP address change signed webhook APIM cert validate + strip PII Service Bus brp.adreswijziging 4 subscriptions independent fan-out Logic App: Zaaksysteem PATCH betrokkene via ZGW API Logic App: DMS update via StUF-ZDS Logic App: Sociaal domein update via REST API Logic App: WOZ systeem update via SOAP Log Analytics (AVG audit) AVG rule BSN never in message headers — correlation ID only
Figure 4 — BRP address change fan-out. APIM strips PII to a correlation ID before publishing to Service Bus. Each downstream system has its own independent subscription.

BSN never in message payloads — APIM strips the citizen service number before forwarding to Service Bus, replacing it with a correlation ID. Each Logic App then calls the BRP Haal Centraal API directly with its own authorised token.

Independent subscriptions, not competing consumers — each downstream system is a separate Service Bus subscription. A failing zaaksysteem cannot starve the social domain system of updates.

Dead-letter alerting as a zaak — dead-lettered messages trigger a monitoring Logic App that creates a zaak of type INTEGRATIESTORING in the gemeente’s case management system, making failures visible without custom monitoring tooling.

Standards applied

GEMMA G02 (use base registries, no shadow copies) · NORA BP09 (privacy by design, BSN pseudonymisation at gateway) · NORA BP10 (durable messaging, dead-letter handling) · Common Ground: data bij de bron


Scenario 2 — Permit application: StUF-to-ZGW migration bridge

A citizen submits a building permit application via the DSO portal. The gemeente’s vergunningensysteem is a legacy system that only speaks StUF-ZDS SOAP. New systems in the same process chain — the notificatieplatform and the klantportaal — expect ZGW REST. The integration layer must translate between the two protocol worlds while ensuring the zaak is created, tracked, and visible to the citizen throughout.

Scenario 2 — StUF-to-ZGW bridge for permit applications DSO-LV REST / JSON APIM validate OAuth token add correlation ID Logic App 1. Create ZGW zaak first 2. Build StUF envelope 3. Call vergunning sys. 4. Handle Bv03 / Fo03 ZGW Zaken API zaak created + tracked Vergunningensysteem StUF-ZDS SOAP → Bv03/Fo03 Notificaties API citizen status update Azure Function: StUF XML build
Figure 5 — The StUF-to-ZGW bridge pattern. A single Logic App orchestrates both protocol worlds simultaneously.

Always create the ZGW zaak first — before calling the legacy system. If the legacy call fails, you have a zaak in status “intake ontvangen” with a logged failure. The citizen’s submission is never lost.

StUF stuurgegevens generation — the Logic App must construct valid StUF header values (zender, ontvanger, referentienummer, tijdstipBericht) so the legacy system can correlate the message back to the zaak UUID. An Azure Function handles the XML serialisation.

Bv03/Fo03 acknowledgement handling — StUF-ZDS uses a synchronous acknowledgement pattern. The Logic App handles both success (Bv03) and error (Fo03) responses and updates the zaak status accordingly.

Standards applied

GEMMA G01 (zaakgericht werken — zaak created first, always) · StUF standard (mandatory for legacy system compatibility) · ZGW Zaken API + Notificaties API · DSO-LV integration protocol


Scenario 3 — SUWI chain: Digikoppeling ebMS integration

A citizen’s income changes at UWV. The gemeente’s social services team must reassess WMO entitlements. UWV sends a structured notification via SUWI-net using Digikoppeling ebMS 2.0 — the mandatory secure messaging channel for inter-government data exchange in the Netherlands. The gemeente must receive this securely, strip personal data at the gateway, process it durably, and trigger a case review workflow.

Scenario 3 — Digikoppeling ebMS SUWI chain integration via APIM UWV SUWI-net ebMS 2.0 mTLS APIM GATEWAY Validate PKIoverheid cert (mTLS) mutual TLS handshake Strip WS-Security + SOAP to JSON validate ebMS stuurgegevens BSN to correlation ID pseudonymise at gateway boundary Return Bv03 sync ack to UWV async processing continues below Service Bus suwi.inkomen .wijziging Logic App fetch BRP income data create review zaak (ZGW) Teams adaptive card case worker notified Log Analytics / AVG
Figure 6 — Digikoppeling ebMS integration. APIM handles PKIoverheid cert validation and SOAP-to-JSON conversion. BSN is pseudonymised at the gateway boundary.

Bv03 synchronous within the gateway — Digikoppeling ebMS requires an acknowledgement within a strict time window. APIM returns the Bv03 immediately; the Logic App processes asynchronously via Service Bus.

BSN pseudonymisation at the boundary — once inside the internal platform, BSN is replaced with an internal correlation ID stored in Key Vault. Only the APIM gateway and the BRP lookup function ever see the raw BSN.

Logboek dataverwerkingen — every SUWI message generates an audit event to Log Analytics with the purpose code, timestamp, and processing step, satisfying the Dutch privacy legislation requirement for a verifiable data processing log.

Standards applied

Digikoppeling ebMS 2.0 (mandatory for SUWI chain) · PKIoverheid certificates (mutual TLS) · NORA BP09 (privacy by design, BSN pseudonymisation) · AVG logboek dataverwerkingen · ZGW Zaken API for review zaak creation


Scenario 4 — AI-assisted intake: intelligent zaak routing

A citizen submits a free-text message via the gemeentelijk contactformulier: “I have a problem with my neighbour’s tree overhanging my garden and causing water damage to my roof.” The gemeente needs to classify this as the right zaaktype, route it to the correct team, and create a zaak with the right catalogustype — automatically, at scale, and with full audit trail.

Scenario 4 — AI-assisted intake routing with APIM AI Gateway Contact- formulier DigiD + free text APIM AI Gateway Validate DigiD token Content safety check Strip PII from prompt Semantic cache lookup Token rate limit / cost control Logic App 1. Fetch BRP context 2. Classify via GPT-4o 3. Lookup catalogustype 4. Create ZGW zaak 5. Route to team Azure OpenAI (GPT-4o) ZGW Zaken API zaak + correct catalogustype BRP Haal Centraal citizen address prefill Teams adaptive card routed to correct afdeling Human-in-loop review if AI confidence < threshold Log Analytics AI decision audit trail
Figure 7 — AI-assisted intake routing. APIM acts as both security gateway and AI gateway with semantic caching, token limits, and content safety.

No personal data in the LLM prompt — APIM strips BSN, full name, and exact address before the message reaches Azure OpenAI. The model classifies based on the complaint text and anonymised context only.

Every AI decision gets an audit record — the zaaktype classification, confidence score, model version, and Logic App run ID are logged alongside the zaak UUID. When a citizen disputes the routing, the audit trail shows exactly what the model decided and when.

Semantic caching is economically justified — in a municipality of 100,000 inhabitants, roughly 30% of intake messages are variations of the same 5–10 core complaint types. Semantic caching in APIM achieves 40–60% hit rates on intake classification, reducing AI costs significantly.

Human-in-the-loop for edge cases — when the AI confidence score is below a configurable threshold, the Logic App routes to a Teams approval card where a KCC medewerker confirms the classification before the zaak is created.

Standards applied

GEMMA G01 (zaakgericht werken — ZGW Catalogi API for catalogustype lookup) · NORA BP09 (no PII in LLM, AI decision audit log) · APIM AI Gateway (content safety, semantic caching, token attribution) · Common Ground: zaak at source, not duplicated


What this means in practice

Dutch municipalities are in the middle of a generational IT transformation. Common Ground is moving them from siloed data copies and point-to-point SOAP integrations toward a federated, API-first, event-driven platform. Simultaneously, AI is beginning to enter the process layer — not as a novelty, but as a practical tool for intake routing, document classification, and policy lookup.

Azure Integration Services maps almost precisely onto this architectural moment. Logic Apps for orchestration across the five-layer model, APIM for API governance and AI gateway capabilities, Service Bus for the durable messaging that chain partner integration demands, and Event Grid for the reactive architectures that Common Ground’s “data at source” principle requires.

But the technology is only part of the story. Knowing that a SUWI ebMS message requires a Bv03 acknowledgement within 30 seconds, that a BSN must be pseudonymised at the gateway boundary before entering the internal platform, that a new zaaksysteem connection requires ZGW conformance testing and GIBIT-aligned procurement documentation — this is the domain knowledge that determines whether a project succeeds or stalls.

I have tried to combine deep Azure Integration Services expertise with hands-on knowledge of the Dutch municipal IT standards landscape. If you are a gemeente modernising your integration platform, a software vendor building Common Ground-compliant components, or a systems integrator navigating GEMMA compliance requirements — I would like to help.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *