0 Followers · 498 Posts

Fast Healthcare Interoperability Resources (FHIR, pronounced "fire") is a draft standard describing data formats and elements (known as "resources") and an application programming interface (API) for exchanging electronic health records

Official site

InterSystems staff + admins Hide everywhere
Hidden post for admin
Article Kunal Pandey · May 12, 2025 1m read

Introducing Smart Clinical Sidechick — the intelligent, no-drama partner your EHR wishes it could be. She reads FHIR data in real time, interprets lab results without ghosting, and explains clinical alerts like she actually cares. Built with GPT-4 brains and YAML sass, she’s not here to replace your main EHR—just to make it look bad. Tired of irrelevant alerts and cryptic warnings? Sidechick serves up real, explainable insights, not vague “elevated risk” vibes. And when your backend crashes, she doesn’t panic—she self-heals. Secure, responsive, and (unlike your last vendor) emotionally

0
1 139
Article Keren Skubach · May 5, 2025 4m read

An extension “extends” or enhances a FHIR resource or a data element in a custom way. The extension can be added to the root of a resource, such as “Patient.ethnicity” in US Core profile, and they can be added to individual elements such as HumanName, Address or Identifier.

Did you know that you can also add an extension to a primitive data type?

Primitives usually store a single item and are the most basic element in FHIR. For example: "Keren", false, 1234, 12/08/2024 etc.

For example, the patient resources might look like this:

1
1 260
Article Evgeny Shvarov · Apr 13, 2025 2m read

Hi developers!

This will be a very short article as in April 2025 with Lovable and other Prompt-to-UI tools it becomes possible to build the frontend with prompting. Even to the folks like me who is not familiar with modern UI techics at all.

Well, I know at least the words javascript, typescript and ReactJS, so in this very short article we will be building the ReactJS UI to InterSystems FHIR server with Lovable.ai.

Let's go!

2
1 154
Question Rushi Chandel · Apr 14, 2025

Hello Developers,

I have MacBook Pro M3 and I'm new to the IRIS for Health setup / installation with all pre-requisite / requirements so someone could please help me with detailed instructions on how to setup IRIS for Health (HL7 & FHIR) from scratch along with SQL Server? I have Windows 11 installed in parallel desktop if that's required and complete installation / setup is not possible on MacBook.

Thank you in advance.

Rushi

3
0 106
Article Patrick Jamieson · Apr 15, 2025 6m read

I know that people who are completely new to VS Code, Git, Docker, FHIR, and other tools can sometimes struggle with setting up the environment. So I decided to write an article that walks through the entire setup process step by step to make it easier to get started.

I’d really appreciate it if you could leave a comment at the end - let me know if the instructions were clear, if anything was missing, or if there’s anything else you'd find helpful.

The setup includes:

✅ VS Code – Code editor
✅ Git – Version control system
✅ Docker – Runs an instance of IRIS for Health Community
✅ VS Code REST Client Extension – For running FHIR API queries
✅ Python – For writing FHIR-based scripts
✅ Jupyter Notebooks – For AI and FHIR assignments

Before you begin: Ensure you have administrator privileges on your system.

In addition to reading the guide, you can also follow the steps in the videos:

For Windows

2
2 335
Announcement Anastasia Dyubaylo · Mar 25, 2025

Hi Community,

Check out this new video that shows how to build the UI for InterSystems FHIR server from scratch using AI with no previous frontend experience:

📺 Building and Deploying React Frontend for the InterSystems FHIR server in 20 minutes with Lovable AI

🗣 Presenter: @Evgeny Shvarov, Senior Manager of Developer and Startup Programs, InterSystems

1
2 130
Article Yuri Marx · Mar 10, 2025 5m read

The FHIR standard establishes a powerful but flexible data model that can smoothly adapt to the complexities of operational healthcare data management. This flexibility comes at the cost of a data model with many tables and relationships, even for simple data such as the patient's record of telephone numbers, addresses, and emails. It would easily require querying 4 different tables. However, FHIR SQL Builder eliminates this problem, allowing you to create visual projections (mappings) in web wizards. It lets you consolidate data from 4 or more tables into just 1 and gives you the advantage of

2
3 284
Announcement Anastasia Dyubaylo · Mar 12, 2025

Hey Community,

We're excited to invite you to the next InterSystems UKI Tech Talk webinar: 

👉 Cloud Health: FHIR Server

Join this webinar to dive into the world of HealthShare Health Connect Cloud with our upcoming session on Cloud Health: FHIR Server.

⏱ Date & Time: Thursday, March 20, 2025 2:30 PM GMT

👨‍🏫 Speaker: @Regilo Regilio Guedes de Souza, Director of Cloud Delivery, InterSystems

2025 Tech Talk Social Tile 20 березня (чернетка).png

0
0 82
Article Evgeny Shvarov · Mar 11, 2025 1m read

Hi colleagues!

Often, while developing a frontend app or any other communication vs REST API, it is worth having a Swagger UI - a test UI for the REST API that follows Open API 2.0 spec. Usually, it is quite a handful as it lets have quick manual tests vs REST API and its responses and the data inside.

Recently I've introduced the Swagger support to the InterSystems IRIS FHIR template for FHIR R4 API:

How to get it working.

0
2 228
Question Dmitrii Baranov · Nov 2, 2024

I'm experimenting with FHIR bulk data load using NDJSONs, so far the import is running smoothly, but when I'm trying to perform a request of kind /Patient or /Procedure I'm getting back the following error:

{
    "resourceType": "OperationOutcome",
    "issue": [
        {
            "severity": "error",
            "code": "too-costly",
            "diagnostics": "<HSFHIRErr>SearchTooCostly",
            "details": {
                "text": "Search selects more than maximum allowed number of results (1000)."
            }
        }
    ]
}

Is this a limitiation of IRIS for Health community edition or what?

2
0 187
Article Rahul Singhal · Mar 1, 2025 6m read

Introduction

To achieve optimized AI performance, robust explainability, adaptability, and efficiency in healthcare solutions, InterSystems IRIS serves as the core foundation for a project within the x-rAI multi-agentic framework. This article provides an in-depth look at how InterSystems IRIS empowers the development of a real-time health data analytics platform, enabling advanced analytics and actionable insights. The solution leverages the strengths of InterSystems IRIS, including dynamic SQL, native vector search capabilities, distributed caching (ECP), and FHIR interoperability. This innovative approach directly aligns with the contest themes of "Using Dynamic SQL & Embedded SQL," "GenAI, Vector Search," and "FHIR, EHR," showcasing a practical application of InterSystems IRIS in a critical healthcare context.

System Architecture

The Health Agent in x-rAI is built on a modular architecture that integrates multiple components:

Data Ingestion Layer: Fetches real-time health data from wearable devices using the Terra API.

Data Storage Layer: Utilizes InterSystems IRIS for storing and managing structured health data.

Analytics Engine: Leverages InterSystems IRIS's vector search capabilities for similarity analysis and insights generation.

Caching Layer: Implements distributed caching via InterSystems IRIS Enterprise Cache Protocol (ECP) to enhance scalability.

Interoperability Layer: Uses FHIR standards to integrate with external healthcare systems like EHRs.

Below is a high-level architecture diagram:

[Wearable Devices] --> [Terra API] --> [Data Ingestion] --> [InterSystems IRIS] --> [Analytics Engine]
                                                          ------[Caching Layer]------
                                                          ----[FHIR Integration]-----

Technical Implementation

1. Real-Time Data Integration Using Dynamic SQL

The Health Agent ingests real-time health metrics (e.g., heart rate, steps, sleep hours) from wearable devices via the Terra API. This data is stored in InterSystems IRIS using dynamic SQL for flexibility in query generation.

Dynamic SQL Implementation

Dynamic SQL allows the system to adaptively construct queries based on incoming data structures.

def index_health_data_to_iris(data):
    conn = iris_connect()
    if conn is None:
        raise ConnectionError("Failed to connect to InterSystems IRIS.")
    try:
        with conn.cursor() as cursor:
            query = """
                INSERT INTO HealthData (user_id, heart_rate, steps, sleep_hours)
                VALUES (?, ?, ?, ?)
            """
            cursor.execute(query, (
                data['user_id'],
                data['heart_rate'],
                data['steps'],
                data['sleep_hours']
            ))
            conn.commit()
            print("Data successfully indexed into IRIS.")
    except Exception as e:
        print(f"Error indexing health data: {e}")
    finally:
        conn.close()

Benefits of Dynamic SQL

Enables flexible query construction based on incoming data schemas.

Reduces development overhead by avoiding hardcoded queries.

Supports seamless integration of new health metrics without modifying the database schema.

2. Advanced Analytics with Vector Search

InterSystems IRIS’s native vector datatype and similarity functions were utilized to perform vector search on health data. This allowed the system to identify historical records similar to a user’s current health metrics.

Vector Search Workflow

Convert health metrics (e.g., heart rate, steps, sleep hours) into a vector representation.

Store vectors in a dedicated column in the HealthData table.

Perform similarity searches using VECTOR_SIMILARITY().

SQL Query for Vector Search

SELECT TOP 3 user_id, heart_rate, steps, sleep_hours,
       VECTOR_SIMILARITY(vec_data, ?) AS similarity
FROM HealthData
ORDER BY similarity DESC;

Python Integration

def iris_vector_search(query_vector):
    conn = iris_connect()
    if conn is None:
        raise ConnectionError("Failed to connect to InterSystems IRIS.")
    try:
        with conn.cursor() as cursor:
            query_vector_str = ",".join(map(str, query_vector))
            sql = """
                SELECT TOP 3 user_id, heart_rate, steps, sleep_hours,
                       VECTOR_SIMILARITY(vec_data, ?) AS similarity
                FROM HealthData
                ORDER BY similarity DESC;
            """
            cursor.execute(sql, (query_vector_str,))
            results = cursor.fetchall()
            return results
    except Exception as e:
        print(f"Error performing vector search: {e}")
        return []
    finally:
        conn.close()

Benefits of Vector Search

Enables personalized recommendations by identifying historical patterns.

Enhances explainability by linking current metrics to similar past cases.

Optimized for high-speed analytics through SIMD (Single Instruction Multiple Data) operations.

3. Distributed Caching for Scalability

To handle increasing volumes of health data efficiently, the Health Agent leverages InterSystems IRIS’s Enterprise Cache Protocol (ECP). This distributed caching mechanism reduces latency and enhances scalability.

Key Features of ECP

Local caching on application servers minimizes central database queries.

Automatic synchronization ensures consistency across all cache nodes.

Horizontal scaling enables dynamic addition of application servers.

Caching Workflow

Frequently accessed health records are cached locally on application servers.

Subsequent queries for the same records are served directly from the cache.

Updates to cached records trigger automatic synchronization with the central database.

Benefits of Caching

Reduces query response times by serving requests from local caches.

Improves system scalability by distributing workload across multiple nodes.

Minimizes infrastructure costs by reducing central server load.

4. FHIR Integration for Interoperability

InterSystems IRIS’s support for FHIR (Fast Healthcare Interoperability Resources) ensured seamless integration with external healthcare systems like EHRs.

FHIR Workflow Wearable device data is transformed into FHIR-compatible resources (e.g., Observation, Patient).

These resources are stored in InterSystems IRIS and made accessible via RESTful APIs.

External systems can query or update these resources using standard FHIR endpoints.

Benefits of FHIR Integration

Ensures compliance with healthcare interoperability standards.

Facilitates secure exchange of health data between systems.

Enables integration with existing healthcare workflows and applications.

Explainable AI Through Real-Time Insights

By combining InterSystems IRIS’s analytics capabilities with x-rAI’s multi-agentic reasoning framework, the Health Agent generates actionable and explainable insights. For example:

"User 123 had similar metrics (Heart Rate: 70 bpm; Steps: 9,800; Sleep: 7 hrs). Based on historical trends, maintaining your current activity levels is recommended."

This transparency builds trust in AI-driven healthcare applications by providing clear reasoning behind recommendations.

Conclusion The integration of InterSystems IRIS into x-rAI’s Health Agent showcases its potential as a robust platform for building intelligent and explainable AI systems in healthcare. By leveraging features like dynamic SQL, vector search, distributed caching, and FHIR interoperability, this project delivers real-time insights that are both actionable and transparent—paving the way for more reliable AI applications in critical domains like healthcare.

1
3 157
Question Kevin Mayfield · Feb 20, 2025

I'm working on FHIR project and using this code to convert an incoming request to FHIR 

Method OnRequest(request As HS.FHIRServer.Interop.Request, Output response As HS.FHIRServer.Interop.Response) As %Status

{

    #dim tSC As %Status = $$$OK

    Try {

        // Process incoming request

        set stream = ##class(HS.SDA3.QuickStream).%OpenId(request.QuickStreamId)

        set bundle = ##class(HS.FHIR.DTL.vR4.Model.Resource.Bundle).FromJSON(stream,"vR4")

9
0 153
Article Yuri Marx · Feb 13, 2025 4m read

FHIR repositories, applications and servers typically serve clinical data in small quantities, whether to return data about a patient, their medications, vaccines, allergies, among other information. However, it is common for a large amount of data in FHIR/JSON format to be requested to be used to load into Data Lakes, identifying study cohorts, population health, or transferring data from one EHR to another. To meet these business scenarios that require large extractions and loads of data, it is recommended to use the FHIR Bulk Data Access feature provided by HL7 institution.

0
5 400
Question Ali Chaib · Feb 7, 2025

I have a scenario where I send a GET request to a broker and receive a FHIR response. When I attempted to use the built-in InterSystems functions to convert this FHIR response into SDA, the transformation failed—likely because it is not a standard FHIR request.

How should I handle this situation? Is there a recommended approach to processing FHIR responses in this context?

3
0 123
Question Ali Chaib · Feb 7, 2025

I understand that InterSystems provides functions to facilitate transactions between FHIR and HL7 via the SDA segment. My question is:

  • Does this transformation only work when InterSystems receives FHIR requests and converts them into HL7, or does it also support responses?
  • Specifically, if our operation sends a GET request to a broker and receives a FHIR response, does InterSystems support transforming this response into an SDA segment automatically?
  • Or should we manually parse and modify the response to handle it according to our needs?
3
0 106
Question Prasanth Annamreddy · Mar 23, 2024

Hi,

I found an issue while fetching records from FHIR DB, I am getting below error thou FHIR repository have the records with the corresponding id

{

    "resourceType": "OperationOutcome",

    "issue": [

        {

            "severity": "error",

            "code": "not-found",

            "diagnostics": "<HSFHIRErr>ResourceNotFound",

            "details": {

                "text": "No resource with type 'Appointment' and id '21'"

            }

        }

    ]

}

5
0 202
Article Daryl Flaming · Jan 31, 2025 9m read

My main goal of this article was to prove the use of InterSystems IRIS for Health for REST FHIR interoperability between multiple applications. In this use case, some initiating application makes a REST call to IRIS for Health (which is merely a passthrough for REST calls) to retrieve FHIR data from an Oracle Health R4 FHIR repository. Ideally, it simplifies the syntax for calling the Oracle Health APIs. 

0
2 310
Announcement Guillaume Rongier · Mar 16, 2022

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

MSH|^~\&||^^NPI|||20211105165829+0000||ADT^A01|66053,61109.396628|P|2.5.1|||AL|AL|||||PH_SS-Ack^SS Sender^2.16.840.1.114222.4.10.3^ISO
EVN||202111051658|||||^^NPI
PID|1||060a6bd5-5146-4b08-a916-009858997bd3^^^https://github.com/synthetichealth/synthea^~060a6bd5-5146-4b08-a916-009858997bd3^^^http://hospital.smarthealthit.org^MR~999-97-4582^^^&^SS~S99986284^^^&^DL~X84330364X^^^&^PPN||Masson^Livia^^^Mrs.^^||19920820|F|Simon^Livia^^||615 Avenue Lemaire^^Lyon^Auvergne-Rhone-Alpes^63000||^PRN^PH^^^555^286|||||||||||||||||||||
PV1|1|O||424441002|||||||||||||||1^^^&&^VN|||||||||||||||||||||||||200812312325|20090101044004
PV2|||72892002^Grossesse normale^SCT
OBX|1||8302-2^Taille du corps^LN||20101014002504^^|cm^^UCUM|||||F|||20101014
OBX|2||72514-3^Gravite de la douleur - 0-10 evaluation numerique verbale [Score] - Signaleee^LN||20101014002504^^|{score}^^UCUM|||||F|||20101014
OBX|3||29463-7^Poids corporel^LN||20101014002504^^|kg^^UCUM|||||F|||20101014
OBX|4||39156-5^Indice de masse corporelle^LN||20101014002504^^|kg/m2^^UCUM|||||F|||20101014
OBX|5||72166-2^Statut du tabagisme^LN||20171026002504^Ancien fumeur^SCT^^^^^^Ancien fumeur||||||F|||20171026

Output

{
"resourceType": "Bundle",
"type": "transaction",
"entry": [
  {
    "request": {
      "method": "POST",
      "url": "Organization"
    },
    "fullUrl": "urn:uuid:347a0c88-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Organization",
      "identifier": [
        {
          "value": "https://github.com/synthetichealth/synthea"
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Organization"
    },
    "fullUrl": "urn:uuid:34d03d1a-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Organization",
      "identifier": [
        {
          "value": "http://hospital.smarthealthit.org"
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Patient"
    },
    "fullUrl": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Patient",
      "address": [
        {
          "city": "Lyon",
          "line": [
            "615 Avenue Lemaire"
          ],
          "postalCode": "63000",
          "state": "Auvergne-Rhone-Alpes"
        }
      ],
      "birthDate": "1992-08-20",
      "gender": "female",
      "identifier": [
        {
          "assigner": {
            "reference": "urn:uuid:347a0c88-e7fa-11ec-9601-0242ac1a0002"
          },
          "system": "https://github.com/synthetichealth/synthea",
          "value": "060a6bd5-5146-4b08-a916-009858997bd3"
        },
        {
          "assigner": {
            "reference": "urn:uuid:34d03d1a-e7fa-11ec-9601-0242ac1a0002"
          },
          "system": "http://hospital.smarthealthit.org",
          "type": {
            "coding": [
              {
                "code": "MR",
                "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
              }
            ],
            "text": "MRN"
          },
          "value": "060a6bd5-5146-4b08-a916-009858997bd3"
        },
        {
          "extension": [
            {
              "url": "http://intersystems.com/fhir/extn/sda3/lib/patient-number-i-s-o-assigning-authority",
              "valueString": "&"
            }
          ],
          "type": {
            "coding": [
              {
                "code": "SS"
              }
            ],
            "text": "SS"
          },
          "value": "999-97-4582"
        },
        {
          "extension": [
            {
              "url": "http://intersystems.com/fhir/extn/sda3/lib/patient-number-i-s-o-assigning-authority",
              "valueString": "&"
            }
          ],
          "type": {
            "coding": [
              {
                "code": "DL",
                "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
              }
            ],
            "text": "DL"
          },
          "value": "S99986284"
        },
        {
          "extension": [
            {
              "url": "http://intersystems.com/fhir/extn/sda3/lib/patient-number-i-s-o-assigning-authority",
              "valueString": "&"
            }
          ],
          "type": {
            "coding": [
              {
                "code": "PPN",
                "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
              }
            ],
            "text": "PPN"
          },
          "value": "X84330364X"
        }
      ],
      "name": [
        {
          "family": "Simon",
          "given": [
            "Livia"
          ],
          "text": "Livia Simon"
        },
        {
          "family": "Masson",
          "given": [
            "Livia"
          ],
          "prefix": [
            "Mrs."
          ],
          "text": "Mrs. Livia Masson",
          "use": "official"
        }
      ],
      "telecom": [
        {
          "system": "phone",
          "use": "home",
          "value": "(555) 286"
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Encounter"
    },
    "fullUrl": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Encounter",
      "class": {
        "code": "AMB",
        "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/encounter-encounter-type",
          "valueString": "O"
        },
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/encounter-entered-on",
          "valueDateTime": "2008-12-31T23:25:00+00:00"
        },
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/encounter-to-time",
          "valueDateTime": "2009-01-01T04:40:04+00:00"
        }
      ],
      "identifier": [
        {
          "type": {
            "text": "EncounterNumber"
          },
          "use": "official",
          "value": "1"
        }
      ],
      "period": {
        "start": "2008-12-31T23:25:00+00:00"
      },
      "reasonCode": [
        {
          "coding": [
            {
              "code": "72892002",
              "display": "Grossesse normale",
              "system": "http://snomed.info/sct"
            }
          ]
        }
      ],
      "status": "unknown",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "type": [
        {
          "coding": [
            {
              "code": "424441002"
            }
          ]
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3a13745e-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "code": {
        "coding": [
          {
            "code": "72166-2",
            "display": "Statut du tabagisme",
            "system": "http://loinc.org"
          }
        ]
      },
      "effectiveDateTime": "2017-10-26T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        },
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-observation-coded-value",
          "valueCodeableConcept": {
            "coding": [
              {
                "code": "20171026002504",
                "display": "Ancien fumeur",
                "system": "http://snomed.info/sct"
              }
            ],
            "text": "Ancien fumeur"
          }
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueString": "Ancien fumeur"
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3b6212fc-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "category": [
        {
          "coding": [
            {
              "code": "vital-signs",
              "display": "Vital Signs",
              "system": "http://terminology.hl7.org/CodeSystem/observation-category"
            }
          ],
          "text": "Vital Signs"
        }
      ],
      "code": {
        "coding": [
          {
            "code": "8302-2",
            "display": "Taille du corps",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "cm",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3c8aba30-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "code": {
        "coding": [
          {
            "code": "72514-3",
            "display": "Gravite de la douleur - 0-10 evaluation numerique verbale [Score] - Signaleee",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "{score}",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3de455d0-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "category": [
        {
          "coding": [
            {
              "code": "vital-signs",
              "display": "Vital Signs",
              "system": "http://terminology.hl7.org/CodeSystem/observation-category"
            }
          ],
          "text": "Vital Signs"
        }
      ],
      "code": {
        "coding": [
          {
            "code": "29463-7",
            "display": "Poids corporel",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "kg",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3f501418-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "code": {
        "coding": [
          {
            "code": "39156-5",
            "display": "Indice de masse corporelle",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "kg/m2",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  }
]
}

FHIR to HL7 ADT

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

Example

{
"resourceType": "Bundle",
"type": "transaction",
"entry": [
  {
    "request": {
      "method": "POST",
      "url": "Organization"
    },
    "fullUrl": "urn:uuid:347a0c88-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Organization",
      "identifier": [
        {
          "value": "https://github.com/synthetichealth/synthea"
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Organization"
    },
    "fullUrl": "urn:uuid:34d03d1a-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Organization",
      "identifier": [
        {
          "value": "http://hospital.smarthealthit.org"
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Patient"
    },
    "fullUrl": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Patient",
      "address": [
        {
          "city": "Lyon",
          "line": [
            "615 Avenue Lemaire"
          ],
          "postalCode": "63000",
          "state": "Auvergne-Rhone-Alpes"
        }
      ],
      "birthDate": "1992-08-20",
      "gender": "female",
      "identifier": [
        {
          "assigner": {
            "reference": "urn:uuid:347a0c88-e7fa-11ec-9601-0242ac1a0002"
          },
          "system": "https://github.com/synthetichealth/synthea",
          "value": "060a6bd5-5146-4b08-a916-009858997bd3"
        },
        {
          "assigner": {
            "reference": "urn:uuid:34d03d1a-e7fa-11ec-9601-0242ac1a0002"
          },
          "system": "http://hospital.smarthealthit.org",
          "type": {
            "coding": [
              {
                "code": "MR",
                "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
              }
            ],
            "text": "MRN"
          },
          "value": "060a6bd5-5146-4b08-a916-009858997bd3"
        },
        {
          "extension": [
            {
              "url": "http://intersystems.com/fhir/extn/sda3/lib/patient-number-i-s-o-assigning-authority",
              "valueString": "&"
            }
          ],
          "type": {
            "coding": [
              {
                "code": "SS"
              }
            ],
            "text": "SS"
          },
          "value": "999-97-4582"
        },
        {
          "extension": [
            {
              "url": "http://intersystems.com/fhir/extn/sda3/lib/patient-number-i-s-o-assigning-authority",
              "valueString": "&"
            }
          ],
          "type": {
            "coding": [
              {
                "code": "DL",
                "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
              }
            ],
            "text": "DL"
          },
          "value": "S99986284"
        },
        {
          "extension": [
            {
              "url": "http://intersystems.com/fhir/extn/sda3/lib/patient-number-i-s-o-assigning-authority",
              "valueString": "&"
            }
          ],
          "type": {
            "coding": [
              {
                "code": "PPN",
                "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
              }
            ],
            "text": "PPN"
          },
          "value": "X84330364X"
        }
      ],
      "name": [
        {
          "family": "Simon",
          "given": [
            "Livia"
          ],
          "text": "Livia Simon"
        },
        {
          "family": "Masson",
          "given": [
            "Livia"
          ],
          "prefix": [
            "Mrs."
          ],
          "text": "Mrs. Livia Masson",
          "use": "official"
        }
      ],
      "telecom": [
        {
          "system": "phone",
          "use": "home",
          "value": "(555) 286"
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Encounter"
    },
    "fullUrl": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Encounter",
      "class": {
        "code": "AMB",
        "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/encounter-encounter-type",
          "valueString": "O"
        },
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/encounter-entered-on",
          "valueDateTime": "2008-12-31T23:25:00+00:00"
        },
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/encounter-to-time",
          "valueDateTime": "2009-01-01T04:40:04+00:00"
        }
      ],
      "identifier": [
        {
          "type": {
            "text": "EncounterNumber"
          },
          "use": "official",
          "value": "1"
        }
      ],
      "period": {
        "start": "2008-12-31T23:25:00+00:00"
      },
      "reasonCode": [
        {
          "coding": [
            {
              "code": "72892002",
              "display": "Grossesse normale",
              "system": "http://snomed.info/sct"
            }
          ]
        }
      ],
      "status": "unknown",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "type": [
        {
          "coding": [
            {
              "code": "424441002"
            }
          ]
        }
      ]
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3a13745e-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "code": {
        "coding": [
          {
            "code": "72166-2",
            "display": "Statut du tabagisme",
            "system": "http://loinc.org"
          }
        ]
      },
      "effectiveDateTime": "2017-10-26T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        },
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-observation-coded-value",
          "valueCodeableConcept": {
            "coding": [
              {
                "code": "20171026002504",
                "display": "Ancien fumeur",
                "system": "http://snomed.info/sct"
              }
            ],
            "text": "Ancien fumeur"
          }
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueString": "Ancien fumeur"
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3b6212fc-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "category": [
        {
          "coding": [
            {
              "code": "vital-signs",
              "display": "Vital Signs",
              "system": "http://terminology.hl7.org/CodeSystem/observation-category"
            }
          ],
          "text": "Vital Signs"
        }
      ],
      "code": {
        "coding": [
          {
            "code": "8302-2",
            "display": "Taille du corps",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "cm",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3c8aba30-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "code": {
        "coding": [
          {
            "code": "72514-3",
            "display": "Gravite de la douleur - 0-10 evaluation numerique verbale [Score] - Signaleee",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "{score}",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3de455d0-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "category": [
        {
          "coding": [
            {
              "code": "vital-signs",
              "display": "Vital Signs",
              "system": "http://terminology.hl7.org/CodeSystem/observation-category"
            }
          ],
          "text": "Vital Signs"
        }
      ],
      "code": {
        "coding": [
          {
            "code": "29463-7",
            "display": "Poids corporel",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "kg",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  },
  {
    "request": {
      "method": "POST",
      "url": "Observation"
    },
    "fullUrl": "urn:uuid:3f501418-e7fa-11ec-9601-0242ac1a0002",
    "resource": {
      "resourceType": "Observation",
      "code": {
        "coding": [
          {
            "code": "39156-5",
            "display": "Indice de masse corporelle",
            "system": "http://loinc.org"
          }
        ],
        "extension": [
          {
            "url": "http://intersystems.com/fhir/extn/sda3/lib/code-table-detail-observation-observation-value-units",
            "valueCodeableConcept": {
              "coding": [
                {
                  "code": "kg/m2",
                  "system": "http://unitsofmeasure.org"
                }
              ]
            }
          }
        ]
      },
      "effectiveDateTime": "2010-10-14T00:00:00+00:00",
      "encounter": {
        "reference": "urn:uuid:38cf2d40-e7fa-11ec-9601-0242ac1a0002"
      },
      "extension": [
        {
          "url": "http://intersystems.com/fhir/extn/sda3/lib/observation-encounter-number",
          "valueString": "1"
        }
      ],
      "status": "final",
      "subject": {
        "reference": "urn:uuid:36dd6e2a-e7fa-11ec-9601-0242ac1a0002"
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "code": "20101014002504"
          }
        ]
      }
    }
  }
]
}
Output
MSH|^~\&||^^NPI|||20220609134903+0000||^|66269,49743.388133779|P|2.5.1|||AL|AL|||||PH_SS-Ack^SS Sender^2.16.840.1.114222.4.10.3^ISO
EVN||202206091349|||||^^NPI
PID|1||060a6bd5-5146-4b08-a916-009858997bd3^^^https://github.com/s&&ISO^~060a6bd5-5146-4b08-a916-009858997bd3^^^http://hospital.smar&&ISO^MR~999-97-4582^^^&^SS~S99986284^^^&^DL~X84330364X^^^&^PPN||Masson^Livia^^^Mrs.^^||19920820|F|Simon^Livia^^||615 Avenue Lemaire^^^^||^PRN^PH^^^555^286|||||||||||||||||||||
PV1|1|O||424441002|||||||||||||||1^^^&&^VN|||||||||||||||||||||||||200812312325|
PV2|||72892002^Grossesse normale^SCT
OBX|1||72166-2^Statut du tabagisme^LN||^^||||||F|||20171026
OBX|2||8302-2^Taille du corps^LN||^^||||||F|||20101014
OBX|3||72514-3^Gravite de la douleur - 0-10 evaluation numerique verbale [Score] - Signaleee^LN||^^||||||F|||20101014
OBX|4||29463-7^Poids corporel^LN||^^||||||F|||20101014
OBX|5||39156-5^Indice de masse corporelle^LN||^^||||||F|||20101014

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

9
1 1509
Question Ali Chaib · Jan 9, 2025

Everytime I try to send a POST FHIR bundle I'm getting the following response: 404 Not Found. I'm not really sure why, although it works fine with a GET!

This is an example: 

 Response:

It might be something related to request path but not really sure.

And this is the HTTP service I'm using 

I tried this with Postman and it's working as expected

Am I missing something ? 

1
0 124