-
Notifications
You must be signed in to change notification settings - Fork 14
HAPI FHIR Server Validation
The HAPI FHIR server is used to process the FHIR resources and bundles. Follow steps 1 and 2 to get up and running validation.
Requires maven:
- Apache Install Page
- Mac OS X:
brew install maven
- Ubuntu:
sudo apt-get install maven
cd ~/git/
git clone git@github.com:kind-lab/hapi-fhir-jpaserver-starter.git@mimic-package
cd hapi-fhir-jpaserver-starter
createdb hapi_r4
# (optional): edit src/main/resources/application.yaml to match your psql username/password
mvn jetty:run
-
Clone HAPI: Git clone the fork of the hapi-fhir-jpaserver-starter
- Switch to the
mimic-package
branch. This branch configures the connection to the mimic fhir package and the HAPI backend to postgres
- Switch to the
-
HAPI backend: Create the Postgres database for HAPI fhir to use. Run
CREATE DATABASE hapi_r4
from the psql terminal. -
Launch HAPI: Now start the HAPI server by running
mvn jetty:run
from the terminal at the top level of the hapi-fhir-jpaserver-starter repo- The startup will take 5-10 minutes the first time
-
Load terminology: Post terminology onto the server. The HAPI fhir server does not fully load the terminology from the mimic package, so we need to post them. Using the post_terminology script, post all the MIMIC CodeSystems and Valuesets
- Before running the script, clone mimic-profiles. This is the source of all the MIMIC terminology (NOTE we should debate putting the all the terminology into the mimic-fhir package, but it's nice to have just one source)
- The
post_terminology
script relies on you having the mimic-profiles repo locally. You will need to update the path to mimic-profiles inpost_terminology
. - The HAPI server does not automatically expand the posted terminology. There is a background operation that will run and expand them. Typically after 5 minutes after posting this will start.
There is a test folder for all the validation tests we have created for mimic-fhir. To run the tests there are two steps
- Create conda environment with the environment.yaml
- Run pytest in the tests folder. Ensure that the HAPI fhir server is running when you launch this!
Add reference implementation guides:
- Update the src/main/resources/application.yaml, add desired implementation guide:
- Example yaml update for implementation guide:
hapi:
fhir:
implementationguides:
us-core:
name: hl7.fhir.us.core
version: 4.0.0
Simplifier only allows one package with their free account, so as we expand FHIR work it would become a limitation. (Payed account is around ~$3000 a year) The alternative is to generate the package using SUSHI and then storing the package in Github
- Generate package.tgz with SUSHI
- Follow the guide from FSH School
- In short run the two scripts
_updatePublisher.sh
and_genonce.sh
inside your SUSHI project - package.tgz is generated to the output folder
- Upload package.tgz to your Github repository
- Update the src/main/resources/application.yaml, add reference to Github implementation guide:
- copy the url from your Github repo for the package download
hapi:
fhir:
implementationguides:
test-package:
url: https://github.com/kind-lab/test-package/raw/main/test-pacakge-0.1.0.tgz
name: test-package
version: 0.1.0
The two most common issues in the validation process are SQL script issues and FHIR package connection issues.
The steps to validate and fix a SQL script issue are:
- Validate resource json against PNC package
- If issue found, update the resource script with fixes
- Recreate resource table (run sql script)
- Regenerate resource json (run create_fhir_json.sql)
- Drop new json into validation folder
- Repeat steps 1-5 until no issues
The steps to validate and fix a FHIR package issue are:
- Validate resource json against PNC package
- If issue found, update package (ie add valueset)
- Regenerate package using sushi (can follow fsh tutorial)
- Upload new package to [fhir-packages] repo
- Update application.yaml in HAPI FHIR to reference new package URL
- Restart HAPI FHIR server
- Repeat steps 1-6 until no issues
Default HAPI FHIR will use a H2 database stored in a local file in the project. To set up a postgres DB:
- Create new DB in postgres called 'hapi_r4'
- Update pom.xml dependency
- Default is h2, update the
- GroupId -> org.postgresql
- ArtifactId -> postgresql
- Default is h2, update the
- Update the application.yaml by removing H2 references and including:
spring:
datasource:
url: 'jdbc:postgresql://localhost:5432/hapi_r4'
username: postgres
password: postgres
driverClassName: org.postgresql.Driver
- Run
mvn jetty:run
and it will initialize the postgres DB- First run after setting up postgres DB will be longer ( ~15 min)
- Second run will be fairly quick (<5 min)
- HAPI FHIR DB stores packages, valuesets, codesystems and resources
- Useful tables https://hapifhir.io/hapi-fhir/docs/server_jpa/schema.html
- Hfj_forced_id: If a resource is added with a user defined ID, it will be referenced here
- Gives you the internal resource_pid to find it in other tables
- Hfj_resource: Where every resource is stored
- All the resource content is hashed with SHA-256
- Has date of last updated
- Hfj_res_ver: Contains text from the resources, encoded
- Use res_id to find a specific resource
- The resource is serialied using FHIR JSON encoding and then compressed into a byte stream using GZIP compression. (so not readable in postgres, must be decoded in Java pipe)
- Hfj_res_link: Links from a resource to other resources
- Hfj_forced_id: If a resource is added with a user defined ID, it will be referenced here