nl-generic-functions 0.0.26

The Dutch Generic Functions for health data exchange: GF-Localization (NVI), GF-Consent (Mitz), GF-Addressing (LRZa) and GF-Authentication (Nuts), one feature per function
Documentation

nl-generic-functions

The Netherlands Generic Functions for health data exchange (the Nuts nl-generic-functions-ig, package fhir.nl.gf 0.3.0) in Rust: one crate for the implementation guide, with a feature per function. It is published from FerroPIX, the FerroHEALTH Master Patient Index, since identification and localization are a patient index's own functions in the Netherlands.

Feature Generic Function Service What the crate holds
nvi GF-Localization the national index (NVI) the Localization Service search: which care providers (by URA) hold data for a patient (by pseudonymised BSN), each request authenticated by the transport, a default header, or an authorizer the caller supplies that makes its headers, as a DPoP-bound token needs
mitz GF-Consent Mitz the closed authorization question ("gesloten autorisatievraag"): may a data holder make a patient's data of each category available to a data user, asked on the BSN and answered Permit or Deny
lrza GF-Addressing the national address book (LRZa) the URA of an NL-GF Organization, so a directory reader can join a localization custodian to its organisation
nuts-auth GF-Authentication the Nuts profile the access token request of Nuts RFC021: the authorization server metadata, the Presentation Definition for a scope, a JWT Verifiable Presentation of the holder's credentials signed with its did:web key, and a DPoP-bound token, proven through a prover the caller supplies; and the holder's DID document, built from its keys, with the path its did:web DID resolves to

The authorizer feature holds the trait a data user implements to give each request to a Generic Function its own headers, as the DPoP-bound token of GF-Authentication needs (the IG's GFI-005). It compiles no FHIR model, so a crate that only implements an authorizer builds none; nvi turns it on.

The identifier systems the functions share (the pseudonymised BSN and the URA) are in identification, compiled with nvi, lrza or mitz.

The NVI client never puts the pseudonym in an error, a Debug rendering or anything but the request to the service, and it follows a next link only on its own search endpoint. An authorizer is handed the request URL without its query, so the pseudonym never reaches it.

The Nuts client never puts a credential, the presentation, a key, a proof or the token in an error or a Debug rendering, and sends no credential before the authorization server's Presentation Definition says they answer it. The authorization server's issuer is an https URL, or plain http on a loopback host for a test, as the metadata module of ferrohealth-smart rules (RFC 8414 §2); its metadata is read from the RFC 8414 §3.1 location and must name that issuer exactly (§3.3).

The Mitz client follows the VZVZ Implementatiehandleiding Open en gesloten autorisatievraag 3.8.2: a SOAP 1.2 request carrying one XACML 3.0 XACMLAuthzDecisionQuery, over mutual TLS. Only Permit and Deny are decisions; Indeterminate, NotApplicable, a fault, a timeout and an answer that does not hold to the question are typed errors. The BSN travels only in the request to Mitz, and the client follows no redirect.

The crate depends on no application. The implementation guide is published at https://build.fhir.org/ig/nuts-foundation/nl-generic-functions-ig/.

Licence

Business Source License 1.1 (LICENSE): free for every non-production use and for non-commercial production use; a commercial licence for other production use; Apache License 2.0 four years after each version.