This project illustrate the usage of certain IPF components to build an IHE document registry using a FHIR R4 server as back-end for data persistence.
Target goal is a blueprint project to see how IPF components can be used to build a spring-boot application.
- Spring-boot is used as base framework with IPF's spring-boot starter's
- The usage of Apache Camel API's was reduced to a minimum. Message Exchange's use the pojo processing feature of camel
- Implementation try to stay as simple as possible to allow a blueprint (Design Principles DRY and KISS)
- Mapping of XDS to FHIR R4 and vice versa is aligned on IHE MHD
- ITI-42 to register documents to the registry
(default endpoint: http://localhost:8081/services/registry/iti42) - ITI-18 to query documents from the registry
(default endpoint: http://localhost:8081/services/registry/iti18) - ITI-62 to remove document metadata from the registry
(default endpoint: http://localhost:8081/services/registry/iti62) - ITI-8 to receive a patient-identity-feed and make sure the patient exists
(default endpoint: MLLP Port 2575)
This XDS registry requires a full featured FHIR R4 server. The following were tested so far:
- Firely Server
- HAPI FHIR (Smile CDR) *
- Microsoft FHIR Server *
* Because ":identifier" modifier search is not yet supported by these (HAPI + MS) FHIR Server, ITI-62 and FindDocumentsByReferenceId are known to be not working
Build (requires Maven 3.9 and Java 21)
mvn clean install
A small integration test illustrate a XDS roundtrip with the official HAPI test server.
Run integration tests against hapi fhir server:
mvn failsafe:integration-test -Pit-tests
The CI build push the container to dockerhub. To pull the latest image an e.g. configure the public firely FHIR server, run:
docker run -it -p8081:8081 registry.hub.docker.com/thopap/xds-registry-to-fhir -e FHIR_SERVER_BASE=https://server.fire.ly
Start application with maven runner:
mvn clean spring-boot:run -Pboot
The application is not yet intended as a production ready application.
- Security concerns are not yet covered (e.g. https, mllps, SAML, audit, ...)