-
Notifications
You must be signed in to change notification settings - Fork 1
Connect HAPI FHIR JPA Server (1.1)
HAPI FHIR JPA Server supports REST hook subscriptions with and without payloads.
The DHIS2 FHIR Adapter receives a notification from the HAPI FHIR JPA Server that may include optionally the created or updated FHIR resource. If the created or updated FHIR resource is not included the Adapter may poll for created or updated FHIR resources of the notified FHIR resource type (optionally by a configurable filtered).
Import must have been enabled in the configuration file of the DHIS2 FHIR Adapter. The snippet below contains the relevant settings.
spring:
# Settings of the Artemis message queueing system. For a non-clustered
# installation the embedded client can be used where the data is stored
# on the local file system.
artemis:
# Settings for the embedded client, that can be used for a non-clustered
# installation.
embedded:
# Specifies of the embedded client should be enabled. If the adapter
# runs in a clustered environment the embedded client must not be enabled
# and host, port, username and password for the Artemis broker must be
# specified.
enabled: true
management:
health:
jms:
# JMS health check can be enabled when Artemis queue is available.
enabled: false
dhis2.fhir-adapter:
# Specifies if the automatic import of FHIR resources to DHIS2 is enabled.
import-enabled: true
Important Note: Before doing this configuration the initial setup for the mapping of the FHIR Patient to the DHIS 2 Tracked Entity Type Person should have been completed.
curl -XPUT -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/systems/ff842c76-a529-4563-972d-216b887a3573 -d '{
"name": "Sierra Leone Patient ID",
"code": "SL_PATIENT_ID",
"systemUri": "http://example.sl/patients",
"fhirDisplayName": "Sierra Leone Patient ID"
}'
curl -XPUT -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/systems/c4e9ac6a-cc8f-4c73-aab6-0fa6775c0ca3 -d '{
"name": "Sierra Leone Organization ID",
"code": "SL_ORGANIZATION_ID",
"systemUri": "http://example.sl/organizations",
"fhirDisplayName": "Sierra Leone Organization ID"
}'
curl -XPUT -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/systems/2dd51309-3319-40d2-9a1f-be2a102df4a7 -d '{
"name": "Sierra Leone Location ID",
"code": "SL_LOCATION_ID",
"systemUri": "http://example.sl/locations",
"fhirDisplayName": "Sierra Leone Location ID"
}'
The FHIR Endpoint contains the basic authentication of the FHIR Server. This example contains username dhis2
and password dhis2_1
. The adapter endpoint contains the authorization header that must be sent by the FHIR Server (specified header in FHIR Subscription). If the FHIR Server uses FHIR version R4, the FHIR version below must be changed from DSTU3 to R4.
The encoding of username and password to a basic authorization header can be done for example on the following web site (no security critical data should be entered there): https://www.blitter.se/utils/basic-authentication-header-generator/
curl -XPUT -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/fhirClients/73cd99c5-0ca8-42ad-a53b-1891fccce08f -d '{
"name": "FHIR Server",
"code": "FHIR_SERVER",
"description": "HAPI FHIR JPA Server.",
"fhirVersion": "DSTU3",
"dhisEndpoint": {
"authenticationMethod": "BASIC",
"username": "admin",
"password": "district"
},
"fhirEndpoint": {
"baseUrl": "http://localhost:8082/hapi-fhir-jpaserver-example/baseDstu3",
"useRemote": true,
"headers": [
{
"name": "Authorization",
"value": "Basic ZGhpczI6ZGhpczJfMQ==",
"secure": true
}
]
},
"adapterEndpoint": {
"baseUrl": "http://localhost:8081",
"authorizationHeader": "Bearer jhsj832jDShf8ehShdu7ejhDhsilwmdsgs",
"subscriptionType": "REST_HOOK_WITH_JSON_PAYLOAD"
}
}'
curl -XPUT -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/fhirClientResources/667bfa41-867c-4796-86b6-eb9f9ed4dc94 -d '{
"fhirResourceType": "PATIENT",
"fhirClient": "http://localhost:8081/api/fhirClients/73cd99c5-0ca8-42ad-a53b-1891fccce08f"
}'
curl -XPUT -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/fhirClientResources/b32b4098-f8e1-426a-8dad-c5c4d8e0fab6 -d '{
"fhirResourceType": "OBSERVATION",
"fhirClient": "http://localhost:8081/api/fhirClients/73cd99c5-0ca8-42ad-a53b-1891fccce08f"
}'
curl -XPOST -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/fhirClientSystems -d '{
"fhirResourceType": "ORGANIZATION",
"fhirClient": "http://localhost:8081/api/fhirClients/73cd99c5-0ca8-42ad-a53b-1891fccce08f",
"system": "http://localhost:8081/api/systems/c4e9ac6a-cc8f-4c73-aab6-0fa6775c0ca3"
}'
curl -XPOST -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/fhirClientSystems -d '{
"fhirResourceType": "LOCATION",
"fhirClient": "http://localhost:8081/api/fhirClients/73cd99c5-0ca8-42ad-a53b-1891fccce08f",
"system": "http://localhost:8081/api/systems/2dd51309-3319-40d2-9a1f-be2a102df4a7"
}'
curl -XPOST -u admin:district -H 'Content-Type: application/json' http://localhost:8081/api/fhirClientSystems -d '{
"fhirResourceType": "PATIENT",
"fhirClient": "http://localhost:8081/api/fhirClients/73cd99c5-0ca8-42ad-a53b-1891fccce08f",
"system": "http://localhost:8081/api/systems/ff842c76-a529-4563-972d-216b887a3573"
}'
The FHIR Server must use the FHIR version as specified when creating the FHIR client of the Adapter.
For each FHIR client resource that has been configured on the Adapter a corresponding subscription on the FHIR Server can be created. The last parts of the Adapter endpoint URL of the FHIR subscription must be the ID of the FHIR client followed by the ID of the FHIR client resource. Since the setup above contains two FHIR client resources, two subscriptions can be created on the FHIR Server. The headers must contain the authorization header that is defined in the corresponding FHIR client configuration of the Adapter.
curl -XPOST http://localhost:8082/hapi-fhir-jpaserver-example/baseDstu3/Subscription -i -H 'Content-Type: application/json' -d \
'{
"resourceType": "Subscription",
"criteria": "Patient?",
"channel": {
"type": "rest-hook",
"endpoint": "http://localhost:8081/remote-fhir-rest-hook/73cd99c5-0ca8-42ad-a53b-1891fccce08f/667bfa41-867c-4796-86b6-eb9f9ed4dc94",
"header": "Authorization: Bearer jhsj832jDShf8ehShdu7ejhDhsilwmdsgs",
"payload": "application/fhir+json"
},
"status": "requested"
}'
curl -XPOST http://localhost:8082/hapi-fhir-jpaserver-example/baseDstu3/Subscription -i -H 'Content-Type: application/json' -d \
'{
"resourceType": "Subscription",
"criteria": "Observation?",
"channel": {
"type": "rest-hook",
"endpoint": "http://localhost:8081/remote-fhir-rest-hook/73cd99c5-0ca8-42ad-a53b-1891fccce08f/b32b4098-f8e1-426a-8dad-c5c4d8e0fab6",
"header": "Authorization: Bearer jhsj832jDShf8ehShdu7ejhDhsilwmdsgs",
"payload": "application/fhir+json"
},
"status": "requested"
}'
Create FHIR Organization for Connaught Hospital in Sierra Leone demo database.
curl -XPOST -i -H "Content-Type: application/fhir+json" http://localhost:8082/hapi-fhir-jpaserver-example/baseDstu3/Organization/cf510c0f-8b9e-4ba4-aa6f-82c777a1b0e2 -d \
'{
"resourceType": "Organization",
"identifier": [
{
"system": "http://example.sl/organizations",
"value": "OU_278320"
}
],
"name": "Connaught Hospital"
}'
Create a FHIR Patient that is managed by Connaught Hospital.
curl -XPOST -i -H "Content-Type: application/fhir+json" http://localhost:8082/hapi-fhir-jpaserver-example/baseDstu3/Patient -d \
'{
"resourceType": "Patient",
"identifier": [
{
"system": "http://example.sl/patients",
"value": "1383891882"
}
],
"name": [
{
"family": "West",
"given": [
"Joe",
"Alan",
"Scott"
]
}
],
"gender": "male",
"birthDate": "2019-02-02",
"address": [
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/geolocation",
"extension": [
{
"url": "latitude",
"valueDecimal": 8.4665341
},
{
"url": "longitude",
"valueDecimal": -13.262743
}
]
}
],
"line": [
"Water Road 675",
"Apartment 62"
],
"city": "Freetown",
"country": "Sierra Leone"
}
],
"managingOrganization": {
"reference": "Organization/cf510c0f-8b9e-4ba4-aa6f-82c777a1b0e2"
}
}'
After creating the two FHIR resources on the FHIR Server there should exist the DHIS 2 Tracked Entity that refers to the FHIR patient above.
Copyright (c) 2004-2019, University of Oslo. All rights reserved.
- Default FHIR Patient to DHIS 2 Tracked Entity Instance Mapping
- FHIR Administrative Gender to DHIS 2 Code Set Code
- Initial Setup
- Excel Import of Mappings
- FHIR REST Interfaces
- Connect a new FHIR Server
- Constants
- Coding Systems
- Configure FHIR Resources
- Export and Import
- Limitations
- REST API for Administration and Mapping
- Javascript API for Rules and Transformations to DHIS 2
- Javascript API for Rules and Transformations from DHIS 2
- Connect HAPI FHIR JPA Server
- Connect Jembi HEARTH FHIR Server
- Direct FHIR Import from OpenMRS
- Default FHIR Patient to DHIS 2 Tracked Entity Instance Mapping
- FHIR Administrative Gender to DHIS 2 Code Set Code
- Create Tracker Program with Vital Sign
- Add SNOMED CT Code for Vital Sign
- Export Organizations and Locations to FHIR Server
- Export Patients to FHIR Server
- Handle custom Tracked Entity Instance with no Attributes
- Mapping of Organizations