Initial Release
Example of using InterSystems IRIS or HealthShare Health Connect interoperability features for FHIR. Scenarios where forwarding requests and handling responses are required.
Main setup components are:
Build image
docker-compose build
Run container
docker-compose up -d
Modify your hosts file to resolve webserver
hostname to 127.0.0.1
127.0.0.1 webserver
You can find your hosts file in:
O.S. | File |
---|---|
MacOS | /private/etc/hosts |
Windows | c:\Windows\System32\Drivers\etc\hosts |
Access IRIS instance using superuser
/ SYS
:
https://webserver/iris/csp/sys/UtilHome.csp
Open a WebTerminal session.
zn "HSLIB"
do ##class(HS.Util.Installer.Foundation).Install("FHIRINTEROP")
zn "FHIRINTEROP"
do $SYSTEM.OBJ.LoadDir("/app/src/", "ck", .errorlog, 1)
Create a FHIR server in InterSystems IRIS. You will be using this as an external FHIR server.
zn "HSLIB"
do ##class(HS.Util.Installer.Foundation).Install("FHIRREPO")
Create FHIR server in Health > FHIRREPO > FHIR Configuration > Server Configuration as:
/csp/healthshare/fhirrepo/fhir/r4
hl7.fhir.r4.core@4.0.1
zn "FHIRINTEROP"
do ##class(interop.util.Auth).CreateOAuth2Server()
Go to System Administration > Security > OAuth 2.0 > Client > Create Server Description
https://webserver/iris/oauth2
ssl
Go to System Administration > Security > OAuth 2.0 > Client > Client Configurations > Create Client Configuration:
fhirserver-resserver
fhirserver oauth resource server
Resource server
ssl
client-app
client-app
Confidential
ssl
yes
webserver
iris
Client credentials
zn "FHIRINTEROP"
do ##class(interop.util.Auth).CreateOAuth2IssuerServiceRegistry()
Health > FHIRREPO > FHIR Configuration > Server Configuration > Edit FHIR Server endpoint:
fhirserver-resserver
client-confidential-symmetric,client-confidential-asymmetric
Load some simple sample FHIR data into repo.
zn "FHIRREPO"
set sc = ##class(HS.FHIRServer.Tools.DataLoader).SubmitResourceFiles("/app/install/simple-fhir-data/","FHIRServer","/csp/healthshare/fhirrepo/fhir/r4")
Scenario where you need to build or manipulate some FHIR request and send it to an external FHIR server.
Interoperability > FHIRINTEROP > Configure > Credentials > New
FHIRRepoBasic
superuser
SYS
In FHIRINTEROP
namespace, go to Health > Service Registry and create a new service:
external-fhirserver-basic
HTTP
ssl
webserver
FHIRRepoBasic
/iris/csp/healthshare/fhirrepo/fhir/r4
In FHIRINTEROP
namespace, go to Health > Service Registry and create a new service:
external-fhirserver-oauth
HTTP
ssl
webserver
/iris/csp/healthshare/fhirrepo/fhir/r4
Have a look at the interop.Production production:
interop.bs.FHIRFileService
- Business Service that reads a file and creates a HS.FHIRServer.Interop.Request
message.interop.bp.FileToFHIRService
- Business Process that prepare HS.FHIRServer.Interop.Request
from service before sending to external FHIR server.HS.FHIRServer.Interop.HTTPOperation
- built-in Business Operation that sends a FHIR request to an external FHIR server.Run some tests:
data/patient.json
into data/fhir-input
to process a sample file in your production.Scenario in which you need to receive FHIR requests and send them to an external server.
For example, in case you need to forward a FHIR request to an external server you can use simple FHIR Interoperability Adapter in InterSystems IRIS or HealthShare Health Connect.
You can find more information in FHIR Interoperability Adapter.
Let’s say that you need to forward FHIR requests to a FHIR server, including OAuth token:
You need to install the FHIR interoperability adapter before using it in a namespace.
During the adapter installation it will create:
InteropService
and InteropOperation
in your production.Install the adapter:
zn "FHIRINTEROP"
set status = ##class(HS.FHIRServer.Installer).InteropAdapterConfig("/myendpoint/r4")
Update your production as needed
Change InteropService
Target Config Name so it will send messages to FHIRServer Operation OAuth
which sends messages to external FHIR server.
Test your service using iris-fhir-interop.postman_collection.json Postman collection FHIR Interop (OAuth)
As a variation from the last scenario, let’s say that you need to send FHIR requests to a FHIR service, but you need to make handling on the requests or response:
In FHIRINTEROP
namespace, go to Health > Service Registry and create a new service:
external-simple-service
HTTP
localhost
/csp/external/ServiceRequest
Change InteropService
target so it will send requests to interop.bp.SimpleServiceFHIRHandler
.
Now, test your service using iris-fhir-interop.postman_collection.json Postman collection FHIR Interop (Simple Service)