MedMij FHIR Implementation Guide GP Patient Data
Work in progress - See official publication here.
- 1 Introduction
- 2 Actors involved
- 3 Boundaries and Relationships
- 4 List of invocations
- 5 Interactions, operations, search parameters
- 6 List of profiles
- 7 Release notes
The input document "Richtlijn online inzage in het H-EPD door patiënt" (Dutch) described online access of GP data by patients. The use case evolves around a GP specific Patient Data that consists of 10 sections plus the patient and the healthcare provider (GP). These sections correspond to the "HIS referentiemodel Publieksversie 2016" (Dutch). HIS referentiemodel is the GP information system reference model (GP-IS-RM).
Some but not all sections in the GP Patient Data correspond to Health and Care Information Models (HCIMs (English) or zibs (Dutch)). A joint initiative project between Nictiz and the Dutch GP association NHG is underway to analyse the relationship between the GP-IS-RM and the HCIMs and propose updates where needed. This analysis will not yield results before 2019. This specification thus predates the analysis, and will updated accordingly moving forward.
This page will elaborate further on the HL7 FHIR details needed to exchange the GP Patient Data information using FHIR.
Note: This implementation guide builds on the general guidelines described in the use case overarching principles.
2 Actors involved
|Persons||Systems||FHIR Capability Statements|
|Patient||The user of a personal healthcare environment.||PHR||Personal health record||CapabilityStatement: Client||GP Patient Data client requirements|
|Healthcare professional||The user of a XIS||XIS||Healthcare information system||CapabilityStatement: Server||GP Patient Data server requirements|
3 Boundaries and Relationships
The GP Patient Data use case has similarities and differences with other use cases such as the BgZ, Medication Process, Vital Signs and Lab Results. These use cases use much of the same HCIM based FHIR profiles for exchanging information. Wherever possible every attempt is made to re-use the profiles as used in the BgZ. The GP Patient Data also has a few unique profiles compared to the aforementioned use cases. A second thing to note is that while the selection criteria of certain sections like lab do not match, this does not affect the response profiles. For example it is irrelevant for the response profile lab if you request the 'latest lab result' or 'every result since date X'.
4 List of invocations
This FHIR implementation guide assumes that the PHR system is able to make a connection to the right XIS that contains the patient's information. It does not provide information on finding the right XIS nor does it provide information about security. Moreover, each transaction is performed in the context of a specific authenticated patient, for whose context (token) has been established using the authentication mechanisms described in the 'Afsprakenstelsel'. Each XIS Gateway is required to perform filtering based on the patient associated with the context for the request, so only the records associated with the authenticated patient are returned. For this reason, search parameters should not be included for patient identification.
4.1 Client - PHR
The PHR system requests the GP Patient Data using individual search interactions. The search interaction searches the current resources based on some filter criteria. The interactions are performed by an HTTP GET or command as shown:
The table below shows in the first four columns the GP Patient Data sections, the GP-IS-RM sections / HCIMs that constitute those sections and the specific content of the GP Patient Data. The last column shows the FHIR search queries to obtain the GP Patient Data information. These queries are based on profiles listed in this section. As noted in the introduction, the associated HCIMs are ahead of a separate joint initiative project that aims to analyse and harmonize this further.
|Bijlage 1 Richtlijn Online inzage in het H-EPD door patiënt|
|#||GP Patient Data Section||HCIM EN||Content||Search URL|
|1||General Practitioner/Practice||HealthProfessional v3.1 (2017)
HealthcareProvider v3.1 (2017)
|The GP or GP practice that originates the patient data.|
Note: a separate query for General Practitioner/Practice is not required as this data is attached in context to the Patient resource.
|2||Patient||Patient v3.1 (2017)||De patient data of the patient the data is for. Note that retrieving patient data separately may not be supported by GP systems in some circumstances. Patient data will however be part of the other responses in that case.|
Note: a separate query for Patient may not be necessary for clients or supported by servers as this data is attached in context to every other (clinical) resource.
|3||Episodes||A health concern like a complaint of illness, that may change in nature as diagnoses are made and/or the illness develops.|
A server MAY implement inclusion of associated Flag resources indicating that the GP has added an attention value to this episode. The reference from the Flag to the EpisodeOfCare is handled though
|4||Episodes with alert flag||Episodes may have an associated alert signaling extra attention to the episode is requested. The alert flag may stay active even if after closing the episode, if the user deems it important to stay aware.|
|5||Open and closed episodes||Episodes may be open (currently active) or closed (no longer active).|
|6||Treatment||Procedure on the patient targeting the patients health situation. E.g. operative and (severe) procedures like radiation or chemotherapy.||TODO: No HCIM. GP systems do not yet export this info.|
|7||Prophylaxis en precaution||Prophylaxis and precaution contain precautionary measures required for or to prevent certain medical conditions. See NHG Tabel 56||TODO: No HCIM. GP systems do not yet export this info. Unclear if it'll be anything beyond the Table 56 code (id, time, author, text?)|
|8||Current medication||MedicationAgreement v1.0 (2017)||MedicationAgreement
The prescriber proposed use of medication that the patient agrees with. The agreement may signal starting, repeating, updating or stopping the medication. The list of MedicationAgreements is also known as the list of medication the patient is currently using. Note that "currently" means that the period of use is still active. This is conveyed in the MedicationRequest extension
|9||Medication intolerance||AllergyIntolerance v3.1 (2017)||A medication intolerance concerns the intolerance of a patient for a specific drug, substance or substance group, that needs to be taken into account when prescribing, dispensing or administering medication.|
|10||Correspondence||Incoming: an incoming letter about a patient, recorded as such in the patients medical record.
Outbound: a letter created by a healthcare professional for a third party healthcare professional.
|TODO: No HCIM. GP systems do not yet export this info. For PDF(/A) based correspondence it is possible to turn to the relevant information standard for that type of data.|
|11||Diagnostic and lab results||LaboratoryTestResult v4.0 (2017)||A lab test is an objectifiable diagnostic procedure. The result is the outcome of the procedure. Lab tests include vital signs like blood pressure, weight and lab results like ferro in blood.
Note that GP (lab) results are normally coded using NHG Tabel 45. While some of these codes might be convertible to LOINC or SNOMED CT, this is not expected at present. Bridging code systems between primary and secondary care is part of a larger national discussion
Note that the date parameter is optional and needs calculation, e.g. current-date() - 14 months. The business rules in the guide lines determine the maximum range for the returned results. If the date parameter is omitted, the maximum range is assumed
|BloodPressure v3.1 (2017)|
|BodyHeight v3.1 (2017)|
|BodyTemperature v3.1 (2017)|
|BodyWeight v3.1 (2017)|
|GeneralMeasurement v3.0 (2017)|
|HeartRate v3.1 (2017)|
|12||E- and P-journal entries of the SOAP (EN) or SOEP (NL) structure - recorded after introduction of online access||Information from an encounter, recorded in free text using the SOAP structure. The acronym SOAP stands for Subjective, Objective, Assessment and Plan. The E entry contains the consultation conclusion and the P entry contains potential next steps.
Note that the profile for SOAP entries is yet to be created and the code system value is preliminary
|13||Encounters||Encounter v3.1(2017)||Encounters are expected to have at least an identifier, a type, a date possibly with start/end times, a responsible GP, and potentially an alternative performer such as an out-of-hour-services colleague (Dutch: waarnemer or triagist). Other things that could be recorded against an Encounter, such as the appointment, people escorting the patient (relatives, translator, neighbor) are not normally communicated.
Minimum expectation for returned Encounters is that this query should yield Encounters being referred to from other parts of the information standard.
- See Search URLs and search parameters for the interpretation of these search URLs
4.2 Server - XIS
The returned data to the PHR should conform to the profiles listed in #List_of_profiles.
4.3 Custom search parameters
The custom search parameter Medications-periodofuse searches on the FHIR datatype Period in the PeriodOfUse extension, which is added to profiles on MedicationRequest and MedicationDispense. Clients use date parameter searches as described by the FHIR specification. Servers are expected to take the MedicationUse-Duration extension into account when processing a client's search. This means that either a Period.start + Period.end or Period.start + Duration is used to determine the search results.
To illustrate the expected behavior: if a Period.start and a Duration are known, but not the Period, the Duration should be added to the Period.start date to calculate Period.end. The calculated Period.end date is then used to determine the search results.
In order to allow the client to be confident about what search parameters were used as criteria by the server, the server SHALL return the parameters that were actually used to process the search. Applications processing search results SHALL check these returned values where necessary. For example, if the server did not support some of the filters specified in the search, a client might manually apply those filters to the retrieved result set, display a warning message to the user or take some other action.
In the case of a RESTful search, these parameters are encoded in the self link in the bundle that is returned:
<link> <relation value="self"/> <url value="http://example.org/Patient?identifier=[Patient-ID]/> </link>
Link to the relevant FHIR specification: http://hl7.org/fhir/STU3/http.html#search
4.3.1 Handling errors
If the search fails (cannot be executed, not that there are no matches), the return value is a status code 4xx or 5xx with an OperationOutcome. An HTTP status code of 403 signifies that the server refused to perform the search, while other 4xx and 5xx codes signify that some sort of error has occurred. The HTTP status code 404 is returned if a XIS did not implement an endpoint used in a request by a PHR. When the search fails, a server SHOULD return an OperationOutcome detailing the cause of the failure. For example, in case of a not implemented FHIR endpoint, the OperationOutcome would state that the resource type is not supported. Note: an empty search result is not a failure.
Common HTTP Status codes returned on FHIR-related errors (in addition to normal HTTP errors related to security, header and content type negotiation issues):
- 400 Bad Request - search could not be processed or failed basic FHIR validation rules
- 401 Not Authorized - authorization is required for the interaction that was attempted
- 404 Not Found - resource type not supported, or not a FHIR end-point
In some cases, parameters may cause an error. For instance:
- A parameter may refer to a non-existent resource e.g.
GET [base]/Observation?subject=101, where "101" does not exist
- A parameter may refer to an unknown code e.g.
GET [base]/Observation?code=loinc|1234-1, where the LOINC code "1234-1" is not known to the server
- A parameter may refer to a time that is out of scope e.g.
GET [base]/Condition?onset=le1995, where the system only has data going back to 2001
- A parameter may use an illegal or unacceptable modifier e.g.
GET [base]/Condition?onset:text=1995, where the modifier cannot be processed by the server
- A date time parameter may have incorrect format e.g.
- A parameter may be unknown or unsupported
Where the content of the parameter is syntactically incorrect, servers SHOULD return an error. However, where the issue is a logical condition (e.g. unknown subject or code), the server SHOULD process the search, including processing the parameter - with the result of returning an empty search set, since the parameter cannot be satisfied.
In such cases, the search process MAY include an OperationOutcome in the search set that contains additional hints and warnings about the search process. This is included in the search results as an entry with search mode = outcome. Clients can use this information to improve future searches.
Link to relevant FHIR specification: http://hl7.org/fhir/STU3/search.html#errors
5 Interactions, operations, search parameters
The following logical interactions are needed for the GP Patient Data use case:
There are no operations required to support this use case
5.3 Search parameters
The following search parameter types and search result parameters need to be supported for this use case.
Search parameter types:
Search result parameters:
* This SearchParameter searches on the FHIR DataType Period in the PeriodOfUse extension, which is added to profiles on MedicationRequest and MedicationDispense resources. Clients use date parameter searches as described by the FHIR specification. Servers are expected to take the MedicationUse-Duration extension into account when processing a client's search. This means that either a Period.start + Period.end or Period.start + Duration is used to determine the search results. To illustrate the expected behavior: if a Period.start and a Duration is known, but not the Period, the Duration should be added to the Period.start date to calculate the Period.end. The calculated Period.end date is then used to determine the search results.
6 List of profiles
The profiles represent their entire respective HCIM, to make them applicable in a broader context than the exchange of GP Patient Data or a MedMij context. An example for reuse of existing profiles are those of the patient administration resources and vital signs.
MedMij uses the FHIR Packaging mechanism. This conveniently bundles all profiles, terminology, example material and other conformance resources you need into a single archive, which can be downloaded or installed using the appropriate FHIR tooling. This version of the information standard uses the following packages:
Note: packages use Semantic Versioning. Other versions can be used at will as long as they have the same major.minor number or a minor number higher than the stated version.
|Bijlage 1 Richtlijn Online inzage in het H-EPD door patiënt|
|Section||Zib NL||HCIM EN||FHIR Resource||URL Profile|
|11||LaboratoriumUitslag||LaboratoryTestResult||Observation||http://nictiz.nl/fhir/StructureDefinition/gp-DiagnosticResult (NHG Table 45 codes of type D)|
http://nictiz.nl/fhir/StructureDefinition/gp-LaboratoryResult (NHG Table 45 codes of type L)
6.1 Referencing encounters and episodes
During early testing of the published information standard, an omission was found. Any journal entry or other activity, and in some cases medication agreement and diagnostic results is associated with an encounter (Encounter resource in FHIR), but an additional association with one or more episodes (EpisodeOfCare in FHIR) is also normal GP practice. However, it is not possible to do this natively in the currently used FHIR version STU3: many resources define the element
.context (Encounter | EpisodeOfCare), but restricts its cardinality to 0..1, meaning that a resource can be connected to either an Encounter or EpisodeOfCare resource, but not both.
The recommendation is to use
.context for associating the Encounter, not the EpisodeOfCare. This approach aligns with the changes in FHIR version R4, where the
.context element is replaced by
.encounter to support just a reference to an Encounter resource. EpisodeOfCare resource can be referenced through a new extension published in the spring of 2021 (package 2.1.1): http://nictiz.nl/fhir/StructureDefinition/extension-context-nl-core-episodeofcare.
Compatibility note: systems that went in production before this new extension was published will not be able to interpret it, unless they update for it. These systems will ignore the extension and read - as specified - the
.context which is normally claimed by a reference to Encounter. Updated and newer systems may now anticipate episode associations on journal entries, diagnostic results, medication agreements and potential other encounter activities, as applicable. For more details, please see issue MM-1521.
7 Release notes
Release notes can be found on the functional design page.