Skip to main content

HL7 Interfacing

Medplum Bots enables highly customizable HL7 interfacing engine that can be used as an alternative to Mirth or Corepoint. Medplum allows developers to produce and consume HL7 feeds from legacy healthcare applications, such as EHRs, LIS, RIS/PACS, billing systems and more.


HL7 feeds are streams of electronic health data transmitted between healthcare systems using the legacy Health Level Seven (HL7) standards. These feeds facilitate the real-time exchange of clinical and administrative information, such as patient demographics, lab results, billing data, and treatment records. HL7 feeds are common event driven interfaces for healthcare related applications and are used for notifications and real-time data exchange.

HL7 interfaces are common in healthcare, and widely supported by legacy EHRs, RIS/PACS systems, lab instruments and more. Some common HL7 feeds include:

  • Admission, Discharge and Transfer feeds (ADT Feed)
  • Observation/Results (OBX Feed)
  • Scheduling Information Unsolicited (SIU feed)

Medplum makes consuming and publishing these feeds straightforward, in a cloud-native manner, with the bots listening for and producing HL7 messages. Below is an example of an HL7 message (in this case an ADT):

PID|||PATID1234^5^M11||JONES^WILLIAM^A^III||19610615|M-||C|1200 N ELM STREET^^GREENSBORO^NC^27401-1020|GL|(919)379-1212|(919)271-3434||S||PATID12345001^2^M10|123456789|987654^NC

It should be noted that HL7 should only be used when necessary. If a system has a FHIR or REST interface, those are preferable to HL7.

Use Cases

There are infinitely many use cases for consuming and publishing HL7 messages from legacy systems, but these are some of the most common.

  • Consuming Feeds
Use caseHL7 Message TypeDescription
Identity managementADTWhen a new message is received - check to see if the patient demographic exists and if not create a new record.
Diagnostics resultsORUWhen a new lab test result is completed, store the result in the datastore.
Schedule-driven workflowSIUWhen a new appointment is scheduled, prompt the patient to complete their onboarding.
  • Publishing Feeds
Use caseHL7 Message typeDescription
Discharge notificationADTWhen a patient is discharged trigger an event for others to consume
Diagnostic ordersORMPlace a lab test order
Schedule displaySIUPublish scheduling events so another organization can consume your schedule

An estimated 95% of healthcare institutions in the US support HL7 V2, but the implementations vary widely. Medplum provides guidance and documentation on how to do the basic consume and create workflows.

Connecting to Legacy Systems

The HL7 V2 messaging format was released in 1987, and notably predates HTTPS - which was released in 1994. It is not natively encrypted and cannot be sent over the open internet in a compliant manner. Medplum supports several methods of capturing HL7 at the edge securely as follows.

Medplum Agent

The Medplum agent can be installed on the local area network with an HL7 enabled device and used as a bi-directional bridge between applications. The agent can be used to enable organizations to connect to partners directly without a third party service.

File Based HL7 Integrations

Some organizations will enable HL7 messages dropped as files onto an SFTP server. The Medplum bot framework supports an SFTP client, using which you can connect to and acquire files from a site. Then, using the SDK you can parse the HL7 message files using the SDK. Bots can be run on cron to mimic the effect of an event-driven workflow.

HL7 Aggregators

There are several commercially available HL7 feed aggregators such as HealthJump, PointClickCare and many more, which can be connected, on-demand to a Medplum bot. These integrations will require contracting with a third party to enable connectivity.

Getting Started

To get started do the following.

  • Identify the HL7 feeds you would like to publish/consume
  • Identify what method you want to use to connect to the legacy application
  • Write the bot and create the subscriptions needed to set up your workflow

After all the primitives are in place, test your implementation and ensure that dataflow is as expected.