(v3) Developer Guide MO VZVZ
Table of Contents
- 1 Table of Contents
- 2 Version
- 2.1 Changelog
- 2.1.1 Version 0.0.1
- 2.1 Changelog
- 3 Introduction
- 3.1 Purpose
- 3.2 Scope
- 3.3 Intended audience
- 3.4 References
- 3.4.1 Glossary
- 4 Product Overview
- 5 Related documents
- 6 Architecture
- 6.1 Context
- 6.2 Context diagram
- 6.3 Flow chart
- 6.3.1 Algemene workflow uitwisseling
- 6.3.1.1 Opvragen medicatiegegevens
- 6.3.1.1.1 Workflow
- 6.3.1.1.2 Interacties
- 6.3.1.1.3 Berichten
- 6.3.1.2 Sturen en afhandelen medicatievoorschrift
- 6.3.1.3 Sturen en afhandelen medicatiegegevens
- 6.3.1.1 Opvragen medicatiegegevens
- 6.3.1 Algemene workflow uitwisseling
- 6.4 Use cases
- 6.4.1 Which use cases should I support
- 6.4.2 Individual use cases
- 6.4.2.1 MP-MGR MP-MGB proxy-facade
- 6.4.2.2 MP-MGR MP-MGB FHIR includes
- 6.4.2.3 Patient identifier not part of argument but part of context
- 6.4.2.4 MP-VOS + LAB-LRS
- 6.4.2.5 Security
- 6.4.2.6 HTTP-Headers
- 6.4.2.7 AoF FHIR Search parameter support for generic query using get-aorta-data
- 6.4.3 Provenance Resources in FHIR response bundles
- 6.5 Sequence diagrams
- 6.6 Class diagrams
- 7 Available APIs
- 8 Security
- 9 Configuration
- 10 Common Issues/Known Issues
- 11 Contact information
Changelog
Version 0.0.1
First draft
Introduction
Purpose
The purpose of this document is to support the implementation of the Healthcare Application Medicatieoverdracht on the AORTA-LSP infrastructure.
Scope
This document gives a technical overview of the Healthcare Application with references to other documents with further information. It is intended as a landing page that refers to other locations with further information.
This document contains
the system architecture to indicate how this Healthcare Application relates to other products
information on the available APIs
relevant policies and governance that must be adhered to to be able to use this Healthcare Application
information regarding the configuration of the Healthcare Application, such as connection details for the test and acceptance environments
an overview of common and known issues
contact information
Intended audience
This document is intended for developers, product owners and architects of XIS-system development and integration.
References
Glossary
Term (English) | (Dutch) | Definition |
---|---|---|
Medication agreement | Medicatieafspraak | 'Medicatieafspraak / Medication agreement/ is the prescriber’s proposal for medication use with which the patient agrees. An agreement to discontinue medication is also an MA. |
Variable dosing regimen | Wisselend doseerschema | 'Wisselend doseerschema / Variable dosing regimen' contains the dosing instruction as composed by an (external) prescriber. In the WDS the element 'instructions for use' from the MA is further specified. The WDS can be modified without changing the MA. |
Dispense request | Verstrekkingsverzoek | 'Verstrekkingsverzoek / Dispense request' is the request from a prescriber to a pharmacist to supply the patient with one or more medicinal products in support of the current MA(s) |
Administration agreement | Toedieningsafspraak | 'Toedieningsafspraak / Administration agreement' contains the instructions for medication use (or administration) from the pharmacist to the patient (or his representative or administrator), adding to the MA. |
Medication dispense | Medicatieverstrekking | 'Medicatieverstrekking / Medication dispense' is the provision of a supply of medicinal product to the patient or his administrator or representative. |
Medication administration | Medicatietoediening | 'Medicatietoediening / Medication administration' is the registration of individual administrations of the medicinal product to the patient by the person who administers them (such as a nurse or the patient himself) in relation to the agreements made. |
Medication use | Medicatiegebruik | 'Medicatiegebruik / Medication use' is a statement about historical, current or intended use of a medicinal product. |
Proposal medication agreement | Voorstel medicatieafspraak | 'Voorstel medicatieafspraak / Proposal medication agreement' is a recommendation or request from the pharmacist, prescriber or the administrator to the prescriber of the MA about the medication agreed upon. The recommendation request may include evaluating, discontinuing, starting or modifying medication. |
Reply proposal medication agreement | Antwoord voorstel medicatieafspraak | 'Antwoord voorstel medicatieafspraak / Reply proposal medication agreement' is a reply from the prescriber to the VMA. |
Proposal dispense request | Voorstel verstrekkingsverzoek | 'Voorstel verstrekkingsverzoek / Proposal dispense request' is a proposal from the pharmacist to the prescriber to approve one or more MVE(s) in support of the current MA(s). This is comparable with the current situation of submitting the authorisation form or combined prescription or submitting a repeat prescription for signing. The patient may also submit a VVV to the prescriber. |
Reply proposal dispense request | Antwoord voorstel verstrekkingsverzoek | 'Antwoord voorstel verstrekkingsverzoek / Reply proposal dispense request' is a reply from the prescriber to the VVV. |
Clinical Information Model (CIM) | zorginformatiebouwsteen (ZIB) | See Clinical Building Block (CBB) |
Clinical Building Block (CBB) | zorginformatiebouwsteen (ZIB) | Related data elements are grouped together in a Clinical Information Model (CIM) |
Therapeutic and logistical building blocks | Therapeutische en logistieke bouwstenen | The model is designed in such a way that therapeutic building blocks and logistical building blocks are separated from each other. |
Pharmaceutical treatment | Medicamenteuze behandeling | 'Pharmaceutical treatment' is a technical concept in the information standard. Its purpose is:
|
Product Overview
Requirements (Programma van eisen)
The list of requirements for the healthcare application addressed in this Developer Guide can be found here:
Use cases (functional use cases)
The use cases were refined in cooperation with Nictiz. For the Healthcare Application Medicatieoverdracht the following use cases are relevant and can be found on the Nictiz website or in the PSA which is developed internally.
Functioneel Ontwerp Medicatieproces 9 versie 3.0.0-beta.4 - informatiestandaarden
Functional Design Medication Process 9 version 3.0.0-beta.4 English version - informatiestandaarden
Related documents
This section contains a list of all the links from other sections of this document as well as links to other relevant documents.
See (v3) Documentatieoverzicht.
The overview lists:
Requirements
Functional Designs
Technical Designs
Standards and Regulations
Architecture
Context
Vision:
The Medication Transfer program works on good, complete electronic transfer of medication data. For an up-to-date and complete medication overview for every healthcare provider and every patient. A basic set of medication data has been agreed in the Guideline for Transfer of Medication Data in the Chain. These basic data must be available to every healthcare provider who prescribes, provides or administers. Three information standards enable the registration and exchange of this basic set. These are the information standards Medication Process, Lab values for medication and CiO (Contraindications and hypersensitivities). The healthcare-wide implementation of the guideline and the associated information standards takes place within the Medication Transfer program. New agreements and procedures make network and chain care possible; the information standards included in software packages make digital data exchange possible.
Objectives:
The Medication process program aims first to take away existing obstacles in the medication process, while taking into account current legislation and the possibility of obtaining tangible results in the foreseeable future.
Architecture:
The Healthcare Application Medicatieoverdracht consists of various parts:
business layer architecture by Nictiz
Information standards
functional requirements
information models
application layer architecture by VZVZ
application requirements
information models for data exchange on AORTA-LSP infrastructure
infrastructure integration specifications with centralized application services
This application layer architecture is related to the higher business layer architecture as formulated in (v3) Architectuur.
Terminology:
AORTA 8 - Subscribe and notify
The terms; subscribe and notify need to be used instead of the legacy terms; signal, event and register.
In the AORTA v3 architecture the legacy terms are still present.
Context diagram
This architecture is performed within a larger framework. See Nictiz page on Interoperabiliteit. This application mainly addresses Application and IT-infrastructure.
Flow chart
Algemene workflow uitwisseling
Onderstaande stappen zullen altijd uitgevoerd worden, ongeacht de inhoudelijke berichten. Voor het overzicht wordt de algemene workflow hier beschreven en wordt bij de inhoudelijke workflows alleen de stappen en berichten genoemd die aanvullend zijn op deze algemene workflow.
Opvragen medicatiegegevens
Workflow
vrager stelt generieke query / $get-aorta-data
LSP splitst in losse bouwsteen queries
zo nodig transformatie
antwoorden zo nodig getransformeerd
(getransformeerde) antwoorden worden gebundeld aangeleverd aan vrager
Interacties
lijst met interacties die bevraagd kunnen worden/ ontvangen kunnen worden
Berichten
Sturen en afhandelen medicatievoorschrift
Workflow
bron stuurt voorschrift-bericht naar ontvanger
ontvanger stuurt ontvangstbevestiging terug
ontvanger stuurt afhandeling-voorschrift-bericht naar bron
bron stuurt ontvangstbevestiging terug
Berichten
FHIR profiles:
Voorbeelden: https://simplifier.net/medicationprocess/~resources?category=Example
Sturen en afhandelen medicatiegegevens
Workflow
bron stuurt medicatiegegevens-bericht naar ontvanger
ontvanger stuurt ontvangstbevestiging terug
Berichten
Use cases
This section covers all available use cases as defined by Nictiz and the changes to the specfications as required by this Healthcare Application.
Which use cases should I support
The Healthcare Application Medicatieoverdracht is very large and covers all use cases for every type of EHR system that participates. The list below indicates which use cases should be supported by each type of system. This allows vendors to drill down to only support the relevant use cases.
The roles and use-cases are summarized by Nictiz and the Program in Verzamelbestand met functionele, technische en infrastructurele documentatie Medicatieproces 9 t.b.v. Kickstart - informatiestandaarden.
(v3) Usecases & Processen contains additional business analysis by VZVZ.
Verzamelbestand VZVZ applicatie interfaces richting AORTA
Hier volgt een uitgebreide toelichting op het Verzamelbestand informatiestandaarden.
Dit uitgebreide verzamelbestand bevat informatie over:
VZVZ AoF BGx-Systeemrol (platformgeneriek voor FHIR)
VZVZ AORTA FHIR Systeemrol (specifiek voor zorgtoepassingen binnen FHIR)
VZVZ AORTA v3 Applicatiesysteemrol (specifiek voor zorgtoepassingen binnen v3)
Deze uitleg biedt ondersteuning bij de implementatie van de vereisten voor elke benodigde rol.
Individual use cases
MP-MGR MP-MGB proxy-facade
AORTA acts as proxy-facade towards the source systems. The calls from a MP-MGR are distributed towards MP-MGB servers and the responses are aggregated as bundled response.
We hanteren een generieke query (in FHIR in de vorm van een $get-aorta-data operation) voor vragende systemen, die door AORTA wordt omgezet naar FHIR searches (minus BSN) naar bronsystemen.
MP-MGR MP-MGB FHIR includes
AORTA ensures that all relevant data is requested in a minimum number of requests. This avoids unnecessary round-trips, and ensures sufficient data retrieval to allow for the BTD to transform data between exchange formats.
These includes result in explicitely broadend FHIR searches with _include and _include:iterate parameters towards MP-MGB.
Patient identifier not part of argument but part of context
Patient identifier is not intended to be mentioned in the query parameters. This would impose a security risk.
Om security redenen nemen wij het BSN niet op in de URL van FHIR searches. Het is onderdeel van het token dat wordt meegestuurd (dat dus niet alleen autorisatiehulpmiddel is maar ook gegevensdrager).
The patient indentifier needs to be communicated via the access-token.
This design-pattern is used for incoming as well as outgoing traffic on AORTA-LSP.
AORTA-LSP does NOT support patient identification with the use of search parameters.
As mentioned in FHIR Implementation Guide Medication Process 9 version 3.0.0-beta.4 - informatiestandaarden
Within AORTA, each transaction is performed in the context of a specific patient, whose context might has been established using the authentication mechanisms. Patient is part of the token exchange.
Het BSN van de betreffende patient is opgenomen in het access_token.
HTTP argument patient.identifier is NOT supported like
GET [base]/MedicationRequest?
patient.identifier=http://fhir.nl/fhir/NamingSystem/bsn%7C111222333
MP-VOS + LAB-LRS
Sturen verzoek tot medicatieverstrekking van medicatie of verwerking van wijziging in medicatieafspraak.
VZVZ implementeert lab Observations als open-world extension boven op nictiz.fhir.nl.r4.medicationprocess9 | mp MedicationPrescription Bundle - SIMPLIFIER.NET.
Security
Wij hebben een security requirement en daarom is het nodig om een access token te verkrijgen dat meegestuurd wordt naar bronsystemen. Dit verandert niets aan de FHIR-search, maar wel de HTTP call.
HTTP-Headers
Daarnaast zijn er nog een aantal HTTP-headers die we gebruiken, zoals Content-Type (formaat FHIR-content), AORTA-ID (tracing/logging van interacties/ketens) en AORTA-Version (versie infrastructuur).
Zoals request-id, initial-request-id, etc.
AoF FHIR Search parameter support for generic query using get-aorta-data
MP9 search parameter | Description | FHIR search parameter | Nictiz | VZVA (AoF) |
---|---|---|---|---|
PatientIdentificationNumber | Search on patient. |
|
| NOT supported on argument line is part of context |
Identification | Search on identifier. |
| GET [base]/MedicationRequest?identifier=http://example.nl/fhir/NamingSystem/MedicationRequest|999922448 | Supported via GET [base] Use Cases Resource Broker v3-in $get-aorta-data? &instance-identifier=<http://example.nl/fhir/NamingSystem/MedicationRequest|<id> |
Identification | Search on the pharmaceutical treatment identifier. Note: retrieval of all medication resources belonging to one pharmaceutical treatment requires to search on all medication resource types. |
| GET [base]/MedicationRequest?pharmaceutical-treatment-identifier=http://example.nl/fhir/NamingSystem/pharmaceuticaltreatment|1247848 | Supported via GET [base] Use Cases Resource Broker v3-in $get-aorta-data? &therapy-identifier=<http://example.nl/fhir/NamingSystem/pharmaceuticaltreatment|<id> |
Type | Search on type of medication building block. |
| Retrieves all MedicationRequest resources that represent the building block MedicationAgreement. GET [base]/MedicationRequest?category=http://snomed.info/sct|33633005 Retrieves all MedicationRequest resources that represent the building block DispenseRequest. Retrieves all MedicationRequest resources that represent the building block VariableDosingRegimen.
| Supported via GET [base] as &category=http://snomed.info/sct|<category> |
Retrieves all MedicationDispense resources that represent the building block MedicationDispense. Retrieves all MedicationDispense resources that represent the building block AdministrationAgreement. | Supported | |||
Retrieves all MedicationStatement resources that represent the building block MedicationUse2. | Supported | |||
Retrieves all MedicationAdministration resources that represent the building block MedicationAdministration2. | Supported | |||
MedicationCode | Search on medication code. |
|
| NOT SUPPORTED? |
PeriodOfUse | Search on the MedicationAgreement, VariableDosingRegimen, AdministrationAgreement and MedicationUse2 building blocks that are related to medication that was used, is used or will be used during the indicated period. Whenever a search is done on the MedicationAgreement, VariableDosingRegimen or AdministrationAgreement building blocks it is required to also include the latest stopped building blocks of that kind within each pharmaceutical treatment, even if these have a period of use outside the PeriodOfUse that is being searched on. |
|
| Supported via effective-time as GebruiksPeriode GET [base] |
DispensePeriod | Returns all medication dispenses within the specified time period. |
|
| Supported via effective-time as VerstrekkingsPeriode GET [base] |
AdministrationPeriod | Returns all medication administrations within the specified time period. |
|
| Supported via effective-time as ToedieningsPeriode GET [base] |
- | The client may request that the server returns resources related to the search results, in order to reduce the overall network delay of repeated retrievals of related resources. Supporting the include of the Patient and Medication resources referenced by building blocks is required. Others (Organization, Location, PractitionerRole, Practitioner, RelatedPerson, Observation) are optional. However: all resources referenced per literal reference SHALL be resolvable per the Nictiz IG. |
|
| Not Supported via arguments! Includes are implicit and automatically added by VZVZ based on agreements with Nictiz. |
Provenance Resources in FHIR response bundles
Also see (v3) Architectuur for the functional description of Provenance.
During pull and push exchange, the AORTA-LSP as exchange system adds FHIR Provenance Resources into the bundles to indicate the source systems.
Logic in AORTA:
Per bundle only one specific Provenance-object is added per source systeem
Per bundle one specific Provenance-object is shared between all resources of the source
In the Provenance object each resource in the searchset bundle is referenced:
fullUrl, if the fullUrl is a logical id (urn:uuid)
resource.id , if the fullUrl contains an absolute Url
Is the source returns a OperationOutcome, and it is not a part of the searchset, than a resource object is created with a logical id, which is referenced from the Provenance-Object
During aggregation of the sources, per source, a Provenance object is maintainted and expanded with the new target.reference(s).
After aggregation the Provenance object(en) are added to the consolidated bundle.
The Provenance objects are also included with regular FHIR search responses, not only during the get-aorta-data operation.
The same logic is being reused.
The Provenance contains the AORTA-app-id and URA to identify the source system.
Note: AORTA-LSP currently does not add user-friendly-name displaynames.
This element is NOT filled:
Profile Element Provenance.contained.Device.deviceName of profile vzvz.fhir.nl-vzvz-core | NLVZVZDevice - SIMPLIFIER.NET
Bundle Element /Bundle/entry/resource/Provenance/contained/Device[@id='#nl-vzvz-Device-contained']/deviceName/name as in example vzvz.fhir.aof | aorta-provenance-example-bundle - SIMPLIFIER.NET
The current focus is on reliability and efficiency over additional functionality.
The receiving party may use the Zorg-AB to obtain a user-friendly-name displayname.
Sequence diagrams
See DECOR informatie voor project: Medicatieproces (mp-) for Business Layer scenarios
See DECOR informatie voor project: Medicatieproces op LSP (mp-vzvz-) Medicatieproces op het LSP versie 1.5 en is gebaseerd op MP9 3.0.0-beta.4 HTML for Application Layer scenarios
See https://aorta-on-fhir.scrollhelp.site/aorta-on-fhir-specificaties/latest/sequence-diagrammen for AORTA-on-FHIR platform integrations.
See https://vzvz.atlassian.net/wiki/spaces/ZM/pages/1285750978
Class diagrams
Zie https://vzvz.atlassian.net/wiki/spaces/ZM/pages/1285947678
Zie ook (v3) Architectuur
Available APIs
The Healthcare Application Medicatieoverdracht spans a hybrid situation in which messages can be exchanged in both HL7 v3 and HL7 FHIR. The AORTA infrastructure uses a Transformation Service to transform one type into another so systems only supporting a specific format can still exchange information.
To make this transformation possible without losing valuable information some restrictions to the FHIR implementation are required:
ALWAYS make sure the resource instance has a valid business identifier
do NOT use absolute FHIR references, they cannot be converted to an HL7 v3 reference
ALWAYS add the necessary resources in a bundle, the LSP gateway cannot fetch the additional resources and incomplete bundles (i.e. with referenced resources that are not present in the bundle) can not be transformed.
TODO onderstaande tekst moet gecontroleerd worden (klopt alles en hoe is dit uitgewerkt in de PvE’s e.d.) en zo nodig hierboven herschreven/aangevuld worden.
Omschrijving: Hoe kunnen we tussen medicatiebouwstenen refereren in FHIR in een ecosysteem waarin ook geconverteerd moet worden van en naar HL7v3?
In HL7v3 kunnen absolute FHIR referenties niet overgebracht worden en bestaat een referentie uit een business identifier.
Bij het converteren van FHIR naar HL7v3 moet de business identifier dus achterhaald kunnen worden, anders verlies je de relatie.
Het verliezen van de relatie is niet acceptabel in verband met de afleidingsregels.
Op het LSP worden géén REST-calls gedaan om (FHIR-)referenties te kunnen resolven en dus een business identifier te achterhalen bij een absolute of relatieve FHIR URL.
Referenties kunnen ook gaan naar een bouwsteen die ‘van’ iemand anders is (een andere zorgaanbieder).
Bij een LSP-query mogen andermans bouwstenen niet opgeleverd worden. Hoe kan je dan (bij het antwoord op een query) een referentie resolven die in een FHIR bouwsteen een relatieve URL heeft naar je eigen server zonder een extra REST-call te doen naar die FHIR server?
Is het eventueel gewenst om URL’s naar ándere FHIR servers (bij andere zorgaanbieders) in jouw FHIR-bericht op te nemen?
Hoe weet je of een andere zorgaanbieder een échte FHIR-server heeft waar deze URL’s resolvable zijn, of wellicht alleen een façade?
In gesprek met Lauri R en Jelmer vd M kwamen we tot de voorzichtige conclusie dat - zo lang we te maken hebben met conversies van/naar HL7v3 - referenties tussen medicatiebouwstenen ook in FHIR altijd via business identifier zouden moeten gaan. Klopt die conclusie?
src: https://nictiz.atlassian.net/browse/MP-1596
See DECOR informatie voor project: Medicatieproces op LSP (mp-vzvz-) Medicatieproces op het LSP versie 1.5 en is gebaseerd op MP9 3.0.0-beta.4 XML for HL7 v3 SOAP interactions
See FHIR Implementation Guide Medication Process 9 version 3.0.0-beta.4 - informatiestandaarden for FHIR integration.
V3 messages and packages
FHIR profiles and packages
The FHIR profiles used in this Healthcare Application can be found on Simplifier.
Project/package | Description |
---|---|
The profiles and examples related to MO | |
AoF | link naar de scrollhelp pagina met alle AORTA-profielen |
Examples
API specification
AORTA specifications: see all the links combined in the AoF Releases as ‘AoF Release’ with label “AoF.2024.1” (Functionaliteit die nodig is voor de kickstart MO).
The various calls on the various API’s adhere to naming conventions by Nictiz and VZVZ.
These are the naming conventions in Dutch:
Security
Identification and Authorization Management
See requirements in (v3) Programma van Eisen.
Encryption
See requirements in (v3) Programma van Eisen.
Authentication
Zie Autorisatierichtlijn Medicatieveiligheid | AORTA-LSP.
See requirements in (v3) Programma van Eisen.
See (v3) Architectuur; Actors
Configuration
Common Issues/Known Issues
Contact information
Person | Role/Type of questions | Contact |
---|---|---|
Bart Molenaar | Product Manager | - |
VZVZ Testteam |
| |
VZVZ Architects |
|