Announcement
· Mar 16, 2022

HL7v2 to FHIR, it's easy !

Iris Healthtoolkit Service

Video

Easy to use HL7v2 to FHIR, CDA to FHIR, FHIR to HL7v2 as a Service.

The aim of this project is to provide an REST API that can convert easily various health formats.
Post the desire format in the REST body, get the answer in the new format.

Install

Clone this repository

git clone https://github.com/grongierisc/iris-healthtoolkit-service.git

Docker

docker-compose up --build -d

Usage

Api details

HL7 to FHIR

POST http://localhost:32783/api/hl7/fhir

Example

Input

Output

FHIR to HL7 ADT

POST http://localhost:32783/api/fhir/hl7/adt

Example

FHIR to HL7 ORU

POST http://localhost:32783/api/fhir/hl7/oru

FHIR to HL7 vxu

POST http://localhost:32783/api/fhir/hl7/vxu

CDA to FHIR

POST http://localhost:32783/api/cda/fhir

Example

FHIR repo

GET http://localhost:32783/api/fhir/metadata

Supported HL7 inbound format :

  • ADT_A01, ADT_A02, ADT_A03, ADT_A04, ADT_A05, ADT_A06, ADT_A07, ADT_A08, ADT_A09, ADT_A10, ADT_A11, ADT_A12, ADT_A13, ADT_A17, ADT_A18, ADT_A23, ADT_A25, ADT_A27, ADT_A28, ADT_A29, ADT_A30, ADT_A31, ADT_A34, ADT_A36, ADT_A39, ADT_A40, ADT_A41, ADT_A45, ADT_A47, ADT_A49, ADT_A50, ADT_A51, ADT_A60

  • BAR_P12

  • MDM_T02, MDM_T04, MDM_T08, MDM_T11

  • OMP_O09

  • ORM_O01

  • ORU_R01

  • PPR_PC1, PPR_PC2, PPR_PC3

  • RDE_O11

  • SIU_S12, SIU_S13, SIU_S14, SIU_S15, SIU_S16, SIU_S17, SIU_S26

  • VXU_V04

How it's working

This project works with the pivot diagram: SDA.

The SDA (Summary Document Architecture) is the InterSystems Clinical Data Format.

The SDA <-> FHIR correspondences can be consulted here, and those of the CDA -> SDA here.

gif sda pivot

Discussion (8)4
Log in or sign up to continue

Hi Guillaume,

I'm really interested in getting this working
I managed to install your production inside docker

However, I'm getting this error:

{
  "errors": [
    {
      "code": 5002,
      "domain": "%ObjectErrors",
      "error": "ERROR #5002: ObjectScript error: <PROPERTY DOES NOT EXIST>zhl7+10^HealthToolKit.REST.HL7.1 *QuickStreamId,Ens.StreamContainer",
      "id": "ObjectScriptError",
      "params": [
        "<PROPERTY DOES NOT EXIST>zhl7+10^HealthToolKit.REST.HL7.1 *QuickStreamId,Ens.StreamContainer"
      ]
    }
  ],
  "summary": "ERROR #5002: ObjectScript error: <PROPERTY DOES NOT EXIST>zhl7+10^HealthToolKit.REST.HL7.1 *QuickStreamId,Ens.StreamContainer"
}

I'm posting your swagger example into your IRIS production (REST interface):

http://192.168.2.11:32783/api/hl7/fhir

MSH|^~&||HEALTHSHARE|INTERSYSTEMS||201003090900||ADT^A01||P|2.5.1|
EVN|A01|201003090900|
PID|1||200000001^^^HEALTHSHARE^MR||CARTER^JANE||19381001|F||W|1 Memorial Drive^^CAMBRIDGE^MA^02142||617-225-3133|||M||||
PV1|1|O|||||PALR^FARRELL^SAM^^^^MD^^HEALTHSHARE|||HEALTHSHARE|||||||PALR^FARRELL^SAM^^^^MD^^HEALTHSHARE||HEALTHSHARE00003_201003091236|||||||||||||||||||||||||201003090900|201003090900
AL1|1||PENICILLIN^PENICILLIN|MODERATE|RASH|20030212
DG1|1|9|401.1^Hypertension^I9||20100309|F||||||||28||FARRELL^FARRELL^SAM^^^^MD^^HEALTHSHARE|||
DG1|2|9|250.4^Type 2 Diabetes Mellitus with renal comp^I9||20100309|F||||||||28||FARRELL^FARRELL^SAM^^^^MD^^HEALTHSHARE|||
IN1|1|PHP||ACME HEALTH PLAN|PO Box 22222^^Boston^MA^102142||(617)641-3500|||||||||CARTER^JANE|S|||||||||||||||||||XXXX00211|

Also, noticed these errors during installation:

Loading file /opt/irisapp/src/HealthToolKit/HS/FHIR/DTL/SDA3/vR4/LabOrder/DiagnosticReport.cls as udl
ERROR #16008: Unable to load text for 'HS.FHIR.DTL.SDA3.vR4.LabOrder.DiagnosticReport.cls'
  > ERROR #16000: Line:0 Offset:0 Error 'ERROR #5883: Item 'HS.FHIR.DTL.SDA3.vR4.LabOrder.DiagnosticReport' is mapped from a database that you do not have write permission on.'
Loading file /opt/irisapp/src/HealthToolKit/HS/FHIR/DTL/SDA3/vR4/OtherOrder/DiagnosticReport.cls as udl
ERROR #16008: Unable to load text for 'HS.FHIR.DTL.SDA3.vR4.OtherOrder.DiagnosticReport.cls'
  > ERROR #16000: Line:0 Offset:0 Error 'ERROR #5883: Item 'HS.FHIR.DTL.SDA3.vR4.OtherOrder.DiagnosticReport' is mapped from a database that you do not have write permission on.'
Loading file /opt/irisapp/src/HealthToolKit/HS/FHIR/DTL/SDA3/vR4/RadOrder/DiagnosticReport.cls as udl
ERROR #16008: Unable to load text for 'HS.FHIR.DTL.SDA3.vR4.RadOrder.DiagnosticReport.cls'
  > ERROR #16000: Line:0 Offset:0 Error 'ERROR #5883: Item 'HS.FHIR.DTL.SDA3.vR4.RadOrder.DiagnosticReport' is mapped from a database that you do not have write permission on.'
Loading file /opt/irisapp/src/HealthToolKit/HS/FHIR/DTL/Util/HC/SDA3/HC/FHIR/SDA3/Process.cls as udl
ERROR #16008: Unable to load text for 'HS.FHIR.DTL.Util.HC.FHIR.SDA3.Process.cls'
  > ERROR #16000: Line:0 Offset:0 Error 'ERROR #5883: Item 'HS.FHIR.DTL.Util.HC.FHIR.SDA3.Process' is mapped from a database that you do not have write permission on.'
Loading file /opt/irisapp/src/HealthToolKit/HS/FHIR/DTL/SDA3/vR4/Vaccination/Immunization.cls as udl
ERROR #16008: Unable to load text for 'HS.FHIR.DTL.SDA3.vR4.Vaccination.Immunization.cls'
  > ERROR #16000: Line:0 Offset:0 Error 'ERROR #5883: Item 'HS.FHIR.DTL.SDA3.vR4.Vaccination.Immunization' is mapped from a database that you do not have write permission on.'
Loading file /opt/irisapp/src/HealthToolKit/HS/FHIR/DTL/Util/HC/SDA3/HC/SDA3/FHIR/Process.cls as udl
ERROR #16008: Unable to load text for 'HS.FHIR.DTL.Util.HC.SDA3.FHIR.Process.cls'
  > ERROR #16000: Line:0 Offset:0 Error 'ERROR #5883: Item 'HS.FHIR.DTL.Util.HC.SDA3.FHIR.Process' is mapped from a database that you do not have write permission on.'

I've also attached the entire output that's generated suring the install

How do I access the management portal (what port is it listening on?)
If I wanted to take a look at the code in Studio - what's the _system password?
What version of IRIS do I need to get this running locally on my laptop?

All really good stuff!

Many Thanks,
-- Paul.

Hi Guillaume,

I've got the HEALTHTOOLKIT production running Guillaume - and its working great (thanks)
Could you please give me some advice on how to get the production to transform SDA to DSTU2?

I found this code:

/// FHIRMetadataSets returns a list where each display row is a FHIR metadata set Key,
/// plus " / ", plus FHIR metadata set Description.
ClassMethod FHIRMetadataSets(Output pCaption As %String, Output pTopResults, Output pResults, ByRef pParms As %String, pSearchKey As %String = "") As %Status
{
    Set tSC = $$$OK
    
    // This method returns the core FHIR package for each version that can be transformed to/from SDA.
    Set pResults(1) = "HL7v40 / FHIR R4 Core Specification"
    Set pResults(2) = "HL7v30 / FHIR STU3 Core Specification"
    
    Quit tSC
}

But, I have no idea what the FHIR package is for DSTU2 - and whether or not this is the class that needs changing?

Many Thanks,
-- Paul.

Hi, I have some problems, can someone help with this service?

Building iris
[+] Building 8.0s (11/14)                                                                                                                                                                                            docker:default
 => [internal] load build definition from dockerfile                                                                                                                                                                           0.0s
 => => transferring dockerfile: 988B                                                                                                                                                                                           0.0s
 => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 2)                                                                                                                                                 0.0s
 => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 25)                                                                                                                                                0.0s
 => [internal] load metadata for docker.io/intersystemsdc/irishealth-community:preview                                                                                                                                         1.1s
 => [internal] load .dockerignore                                                                                                                                                                                              0.0s
 => => transferring context: 57B                                                                                                                                                                                               0.0s
 => [builder 1/7] FROM docker.io/intersystemsdc/irishealth-community:preview@sha256:d8b99c0153fe5c99e7adbd2ec9121db1c567749a29f08935108f6e258bcd115c                                                                           0.0s
 => [final 2/3] ADD --chown=irisowner:irisowner https://github.com/grongierisc/iris-docker-multi-stage-script/releases/latest/download/copy-data.py /irisdev/app/copy-data.py                                                  1.1s
 => [internal] load build context                                                                                                                                                                                              0.0s
 => => transferring context: 7.30kB                                                                                                                                                                                            0.0s
 => CACHED [builder 2/7] WORKDIR /opt/irisapp                                                                                                                                                                                  0.0s
 => CACHED [builder 3/7] RUN chown irisowner:irisowner /opt/irisapp                                                                                                                                                            0.0s
 => [builder 4/7] COPY . .                                                                                                                                                                                                     0.1s
 => [builder 5/7] COPY iris.script /tmp/iris.script                                                                                                                                                                            0.0s
 => ERROR [builder 6/7] RUN iris start IRIS  && iris session IRIS < /tmp/iris.script  && iris stop IRIS quietly                                                                                                                6.7s
------
 > [builder 6/7] RUN iris start IRIS    && iris session IRIS < /tmp/iris.script         && iris stop IRIS quietly:
0.170 Using 'iris.cpf' configuration file
0.310 
0.368 Starting Control Process
0.368 Global buffer setting requires attention.  Auto-selected 25% of total memory.
0.368 Allocated 5029MB shared memory
0.368 3941MB global buffers, 394MB routine buffers
0.459 This copy of InterSystems IRIS has been licensed for use exclusively by:
0.459 InterSystems IRIS Community
0.459 Copyright (c) 1986-2024 by InterSystems Corporation
0.459 Any other use is a violation of your license agreement
6.668 
6.668 3 alert(s) during startup. See messages.log for details.
6.677 Starting IRIS
6.677 
6.678 /bin/sh: 1: cannot open /tmp/iris.script: Permission denied
------

 3 warnings found (use docker --debug to expand):
 - FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 2)
 - FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 25)
 - SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "IRIS_PASSWORD") (line 4)
dockerfile:17
--------------------
  16 |     # run iris and initial 
  17 | >>> RUN iris start IRIS \
  18 | >>>      && iris session IRIS < /tmp/iris.script \
  19 | >>>      && iris stop IRIS quietly
  20 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c iris start IRIS \t&& iris session IRIS < /tmp/iris.script \t&& iris stop IRIS quietly" did not complete successfully: exit code: 2
ERROR: Service 'iris' failed to build : Build failed