Netherlands - Zorginzage Implementation Guide
0.1.0 - ci-build
Netherlands - Zorginzage Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
This specification describes data exchanges that use the exchange pattern "pull" or the exchange pattern "indexed pull". See https://www.datavoorgezondheid.nl/documenten/2025/07/14/whitepaper-communicatiepatronen-vws.
In short this means that fetching data globally consists of the following steps:
This specification uses the following principles:
Healthcare organisations are identified using URA-number (UZI-Register Abonneenummer).
Rationale
Healthcare organisations use a HealthcareProviderRoleType attribute to express which type(s) of healthcare organisations they are.
Rationale
Vendor organisations are not identified by a business identifier. The parapraph Network Security descibes mTLS-based client and server authentication.
Rationale
The URA number of health organizations is authenticated using a X509credential based on a UZI-servercertificate.
Rationale
The HealthcareProviderRoleType attribute will be authenticated using a self issued HealthcareProviderRoleTypeCredential.
Rationale
The standard did:web-based Nuts-processes for access token requests and introspects, and jwt-based data requests are used. The exact specifications and sequences are described in volume 2b.
The parapraph Network Security descibes mTLS-based client and server authentication.
The identity of healthcare professionals is federated from data user organisation to data holder organisatin using a NutsEmployeeCredential.
Rationale
To exchange data between healthcare organisations that are not previously known to each other, it must be possible to discover addressing information within the healthcare network. Address information is data that describe an organisation's topology and the various ways an organisation can be reached. These can be physical, digital, or logical entities.
For all use cases, the starting point is finding the correct endpoints, for example, to request an access token or to send a task. The Nuts community uses their discovery service for this purpose.
A complete description of the Discovery Service can be found on the Nuts Wiki.
In terms of required credentials, we use three different types during the discovery process: an X509Credential, a DiscoveryRegistrationCredential and a HealthcareProviderRoleTypeCredential. These credentials are used when registering and requesting addressing information.
Searches can be performed by organisation URA, organisation type and use case.
Actiz is organisationally responsible for hosting the discovery service. One discovery service will be used for all specific applications-on-Nuts that are based on the generic application-on-Nuts Zorginzage.
The X509Credential is an organisation credential that is used to present the URA number.
This is an X509Credential in accordance with Nuts RFC023, signed with an UZI server certificate. It can be created, for example, with the go-didx509-toolkit or the Java library. It has been decided to include the chain closest to the leaf certificate as the issuer.
A self-signed HealthcareProviderRoleTypeCredential has to be presented when registering at the discovery service. This can be used by users of the Discovery Service to look up the HealthcareProviderRoleType of an organisation.
The DiscoveryRegistrationCredential is a temporary credential that communicates the information for making a new
registration in the discovery service.
This is a DiscoveryRegistrationCredential as explained on
the Nuts Wiki page about Service Discovery.
A field named fhirBaseURL has been added to the credentialSubject. This can be used by users of the Discovery Service
to know where the actual FHIR data can be retrieved.
A field named authorization_server_url has been added to the credentialSubject. This can be used by users of the
Discovery Service to look up the access token request endpoint.
Localisation is the process of finding out which organisations have data on a patient.
The generic function localisation is not yet available in production environments. This specification uses bsn broadcasting using the Nuts Discovery Service for indexed pull scenarios. This means that organisations that implement this specification perform bsn broadcasting and accept incoming bsn-based patient searches and matches.
This method is the only viable way to localise without external dependencies, however it requires an appropriate legal basis to be in place.
In practice the BSN broadcast is realised by searching for a patient record with an identifier.
```http request POST /fhir/Patient/_search Content-Type: application/x-www-form-urlencoded
identifier=http://fhir.nl/fhir/NamingSystem/bsn|618359710&_elements=id ```
_elements & identifier= query parameters when searching the patientThe aim is to replace localisation in the next version of this spec with either pseudonym broadcasting or the GF localisation. Always make sure to check the legal basis before broadcasting any BSN's.
For authorization, we prefer a fine-grained policy based access model over a role based model. Whether a requestor gets access to the data they are requesting depends on whether they pass the access-polices of the source (bronhouder).
To ensure everyone uses the same rulesets express policies in a domain specific language called Rego. The input for evaluating the policies is commonly agreed upon information model. A similar model has been described in the proposal for the generic function authorization.
See also: https://nuts-foundation.github.io/nl-generic-functions-ig/authorization.html
Note: Implementors are free to choose to not implement a Rego-interpreter as part of their authorization solution, as long as the implemented authorization solution follows the exact same rules as specified in the Rego-policy-file.
For policy evaluation the PDP functionality in the Nuts Knooppunt can be integrated with any policy enforcement point. Policies are version controlled in a Git repository controlled by the Nuts Foundation.
Policy are selected based on the use case scope provided by the Nuts node as part of the authentication process. A single name is used that connects the scope, Nuts policy and authentication policy.
The following guidelines should be taken into account when designing new policies.
For data requests in which explicit consent is not checked, one of the following is mandatory:
The treatment relation of the data holder organisation with the patient may be checked technically by the data holder organisation.
New use cases can be registered by providing a pull request to the nl-zorginzage-resources repository.
A complete use case contains:
Use cases are scoped to a version of this implementation guide and reviewed by Actiz.