Building > Interoperability > Configuring
Guide to setting up forms and outbound push for interoperability
The components and reference information for interoperability used in CHT Interoperability project are:
The structure of documents in the CHT database reflects the configuration of the system, and therefore, does not map directly to a FHIR message format. To achieve interoperability, the CHT uses a middleware to convert the CHT data structure into a standardized form so the other systems can read it. Below is the standard data workflow:
graph LR cht[CHT] mediator_a([Mediator]) mediator_b([Mediator]) openhim[OpenHIM] cht -- Outbound pushfa:fa-arrow-right --- mediator_a cht -- API requestfa:fa-arrow-left --- mediator_b mediator_a -- Requestfa:fa-arrow-right --- openhim mediator_b -- Channelfa:fa-arrow-left --- openhim
CHT Interoperability uses OpenHIM as the middleware component with Mediators to do the conversion. Outbound Push is configured to make a request to the middleware when relevant documents are created or modified in the CHT. A Mediator then creates a FHIR resource which is then routed to OpenHIM. OpenHIM routes the resource to any other configured systems.
Conversely, to bring data into the CHT, OpenHIM is configured to route the updated resource to the Mediator, which then calls the relevant CHT APIs to update the document in the CHT database. This will then be replicated to users’ devices as per usual.
See more information on the CHT interoperability page.
docker
Postman
or similar tool for API testing.git clone https://github.com/medic/cht-interoperability
).In the cht-interoperability folder, run ./startup.sh init
to start up the docker containers on the first run or after calling ./startup.sh destroy
. Use ./startup.sh up
for subsequent runs after calling init
without calling destroy
.
Visit the OpenHIM Admin Console at http://localhost:9000 and login with the following credentials: email - interop@openhim.org
and password - interop-password
. The default User username for OpenHIM is interop@openhim.org
and password is interop-password
. The default Client username is interop-client
and password is interop-password
.
Once logged in, visit http://localhost:9000/#!/mediators and select the mediator named ‘CHT Mediator’.
Select the green +
button to the right of the default channel to add the mediator.
You can test the CHT mediator by running:
curl -X GET http://localhost:5001/mediator -H "Authorization: Basic $(echo -n interop-client:interop-password | base64)"
You should get as a response similar to this:
{
"status": "success",
"osuptime": 74012.24,
"processuptime": 56940.700039383
}
If everything is successful, when visiting http://localhost:9000/#!/clients you should see this:
For testing other mediators, replace the URL (http://localhost:5001/mediator) with the appropriate values for the specific mediator you are testing. For example if using the OpenMRS mediator, you can test it by running:
curl -X GET localhost:5001/mediator/openmrs/sync -H "Authorization: Basic $(echo -n interop-client:interop-password | base64)"
The following steps apply when running CHT via the Docker setup provided in the cht-interoperability repository:
admin
/password
.interop-client
using these instructions. For the role you can select Data entry
and Analytics
roles. Please note that you can use any username you prefer but you would have to update the config with the new username. You can do that by editing the cht-config/app_settings.json
file and updating the username
value in the outbound
object e.g. on this line.interop-client
user’s password to the database using the instructions here. Change the values mykey
and my pass
to openhim1
and your user’s password respectively. An example of the curl request is below:curl -X PUT -H "Content-Type: text/plain" http://admin:password@localhost:5988/api/v1/credentials/openhim1 -d 'interop-password'
The following steps apply when running CHT locally in development mode and when making configuration changes locally:
interop-client
using these instructions. For the role you can select Data entry
and Analytics
roles. Please note that you can use any username you prefer but you would have to update the config with the new username. You can do that by editing the cht-config/app_settings.json
file and updating the username
value in the outbound
object e.g. on this line.interop-client
user’s password to the database using the instructions here. Change the values mykey
and my pass
to openhim1
and your user’s password respectively. An example of the curls request is below:curl -X PUT -H "Content-Type: text/plain" http://medic:password@localhost:5988/api/v1/credentials/openhim1 -d 'interop-password'
./startup.sh up-dev
to upload the changes to docker compose.cht-config
directory by running cd cht-config
.npm install
to install the dependencies..env
under /mediator
folder, copy over the contents of /mediator/.env.template
and update the CHT_USERNAME
and CHT_PASSWORD
values with the admin credentials of your CHT instance.CHT_URL
value in the .env
file with the new URL.cht --local
to compile and upload the app settings configuration to your local CHT instance.Patient
and to access a URL like https://*****.my.local-ip.co/#/contacts/patientUUID/report/interop_follow_up
. This should retrieve correctly the follow up form.http://localhost:5984/_utils/#database/medic/settings
../startup.sh down
to stop the instances../startup.sh up
. You do not need to run init
again like you did in the initial install above../startup.sh destroy
. You will have to subsequently run ./startup.sh init
if you wish to start the containers.Users encountering:
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:5000 -> 0.0.0.0:0: listen tcp 0.0.0.0:5000: bind: address already in use
when running ./startup.sh init
need to update ports to available values in the /docker/docker-compose.yml
file, under the ports
verb.
curl
requestIf the mediator curl
request fails, visit http://localhost:9000/#!/clients and click on the icon the red arrow points to in the image below.
npm test
Users encountering the error below when running npm test
:
Preset ts-jest is invalid: The “id” argument must be of type string. Received null TypeError [ERR_INVALID_ARG_TYPE]: The “id” argument must be of type string. Received null
need to run npm i --save-dev ts-jest
before running npm test
.
npm install
Users encountering the error when running npm install
:
npm ERR! code EACCES npm ERR! syscall unlink npm ERR! path /Users/phil/interoperability/cht-config/node_modules/.package-lock.json
need to run npm install
as root user.
Guide to setting up forms and outbound push for interoperability
Guide to testing the Loss to Follow-Up (LTFU) reference workflow
Exchange patient-level data with systems based on the OpenMRS platform
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.