8 Followers · 509 Posts

Health Level-7 or HL7 refers to a set of international standards for the transfer of clinical and administrative data between software applications used by various healthcare providers

Learn more

Question Martin Browne · Apr 24, 2025

Hi,

We're having an issue with some messages being sent to a downstream system from Healthshare.  Part of the free text in the NTE segment is displaying with special characters on the system front-end but is not present in the HL7 message that we send to them.  We are guessing that this is a result of some of the text being copied and pasted from something like MS Word. The '?' on their system is just representing an invalid character. 

Is anyone aware of a way to prevent this occurring? We are sending the messages using the 'cp1252' encoding.

Sent from us to system

What display

2
1 129
Question Gary M Lusso · Apr 18, 2025

I need a DTL to handle this.

Any ideas appreciated.

For all Prosthetics orders:
when ORC-1(Order Control) is "NW" (New Order), need to update OBR-18(Placer Field 1) based on PV1-2 (Patient Class) value.
assumption is that the selection logic is that all prosthetics orders with OBR-18 field is always blank.
Description :
If PV1-2 is I, insert I in OBR-18
If PV1-2 is O, insert O in OBR-18
If PV1-2 is E, insert O in OBR-18
If PV1-2 is P, insert O in OBR-18
If PV1-2 is R, insert O in OBR-18
If PV1-2 is B, insert O in OBR-18

2
0 192
Question Gary Lusso · Apr 22, 2025

New at DTL. I need some pointers on this DTL

For all Prosthetics orders:
when ORC-1(Order Control) is "NW" (New Order), need to update OBR-18(Placer Field 1) based on PV1-2 (Patient Class) value.
assumption is that the selection logic is that all prosthetics orders with OBR-18 field is always blank.
Description :
If PV1-2 is I, insert I in OBR-18
If PV1-2 is O, insert O in OBR-18
If PV1-2 is E, insert O in OBR-18
If PV1-2 is P, insert O in OBR-18
If PV1-2 is R, insert O in OBR-18
If PV1-2 is B, insert O in OBR-18

1
0 150
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 133
Question Nimisha Joseph · Apr 14, 2025

Hi everyone,

I'm working on a DTL that transforms an HL7 message (EnsLib.HL7.Message) to an XML document (EnsLib.EDI.XML.Document).

The target XML is based on a custom schema and has an element like:

<xs:element name="deceasedDateTime" type="xs:dateTime" nillable="true"/>

What I need is for the output to show:

<deceasedDateTime xsi:nil="true"/> when the source HL7 value is empty, for eg: 

<portalPatientUpdate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <deceasedDateTime xsi:nil="true" />
</portalPatientUpdate>

My questions:

  1. How can I correctly assign xsi:nil="true" in th
0
0 114
Question Gary M Lusso · Mar 27, 2025

My attempts to add CR/LF between segments

// Add CR/LF after "Total Cost:" if multiple "Item Number:" exist
            //$$$LOGINFO(tItemNumberCount_" "_tTotalCostSegment_"----cr/lf")
            If (tItemNumberCount > 1) && (tTotalCostSegment > 0) {
                Set tOBXSegment = pOutput.GetSegmentAt("ORCgrp(1).OBRuniongrp.OBXgrp("_tTotalCostSegment_").OBX", .tStatus)
                //$$$LOGINFO(tOBXSegment_"----"_"tOBXSegment from cr/lf")
                Set tOBXText = tOBXSegment.GetValueAt(5) //_"||||||\X0D\\X0A\" // Append escaped CR/LF representation
                //Do tOBXSegment.SetV

2
0 132
Article Chi Nguyen-Rettig · Mar 16, 2024 4m read

One of the pain points for maintaining HL7 interfaces is the need to run a reliable regression test upon deployment to new environments and after upgrades. The %UnitTest class allows unit tests to be created and packaged alongside interface code. Test data can also be maintained within the unit test class, allowing for quick and easily repeatable smoke-testing and regression testing.

##Resources:

UnitTest Results

1
1 498
Question Gary M Lusso · Mar 5, 2025

Sample with multiple Items;

MSH|^~\&|GMRC IF CONSULT|XXX^XXXXX^DNS|GMRC IF CONSULT|YYY^^DNS|20250123175341+0000|CRNR|ORM^O01^ORM_O01|Q5808332894T6790522104|T|2.3|||State|State|USA

PID|1||1013570973V041977^^^ICN^ID~1110106796^^^EDIPI^EDIPI||PROSTEST^EHR||19760902|M||||||||||129256619|678235672

ORC|NW|15207778763^XXX^GMRCIFR|||||^^^20250123175300+0000^^R||20250123175331+0000|XXX8051652^PCP1^Physician||XXX8051652^PCP1^Physician|||20250123175341+0000||YYY

OBR|1|15207778763^XXX^GMRCIFR||YYY^PROSTHETICS IFC^757Office1235||20250123175300+0000||||||||||XXX8051652^PCP1^Physician|||Implant Usage

15
0 274
Question Gary M Lusso · Apr 9, 2025

I need to add an extra blank OBX segment after a segment containing text, Total Cost:

I get the OBX segment but it is in incorrect location.

It should be after the line containing Total Cost:

It needs to contain:

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|

code:

    //Do pOutput.SetValueAt(tOBXText_"~~","ORCgrp(1).OBRuniongrp.OBXgrp("_i_").OBX:5","set") //
         If (tOBXText[ "Total Cost:") {
             Set tSegmentOBX = ##class(EnsLib.HL7.Segment).%New()
             Set tSegmentOBX.SegType = "2.3:OBX"
             Set tSC = tSegmentOBX.SetValueAt("OBX", 0, "set")
             Set tSC =

2
0 165
Question Scott Roth · Apr 9, 2025

I have a segment within a Group (grp) that needs to be validated that it is populated within the message. 

When you use a Foreach within a Business Rule how should you account for the counter in the group?

For example, Epic sends their MFN message in the following format.

MSH~MFI~[~{~MFE~STF~PRA~[~ZPR~]~[~ZLK~]~[~CER~]~[~ZMG~]~[~ZTF~]~[~ZGP~]~[~ZDD~]~}~]

so, the ZLK segment might not exist until the last MFEgrp that is in the message. I need to verify if there is an Employee ID associated with the Provider in the HL7 message before I run it through the translation.

1
0 122
Question Scott Roth · Apr 2, 2025

Trying to start investigating an error we are seeing with multiple of the same messages getting sent to the same vendor. We receive an HL7 message with an RTF embedded from our EMR, send it through a DTL to just update the Patient Class, and then send it onto the Operation which is TCP.

We are starting to see this error message...

ERROR <Ens>ErrBPTerminated: Terminating BP DocOutRptRouting3M360 # due to error: ERROR <Ens>ErrException: <INVALID OREF>zOutputToIOStream+6^EnsLib.HL7.Message.1 -- logged as '-' number - @''
> ERROR <Ens>ErrException: <INVALID OREF>zOutputToIOStream+6^EnsLib.HL7.M

4
0 129
Article Sanjib Pandey · Mar 3, 2025 5m read

Background:

This guideline provides an overview of how to design and implement a REST API interface for querying patient demographic data from an Electronic Patient Record (EPR) system using HealthConnect. The process involves sending a query request with the patient's identification number, retrieving the response from the EPR system, extracting the required patient demographic data from the HL7 message, and sending it as a JSON response to the supplier. The high-level process diagram is shown below (Screenshot 1).

5
2 346
Question Padmaja Konduru · Mar 29, 2025

We are receiving the report in text format and it has special characters like ', - like that in the text. Source system is using the UTF8 encoding format hence the text is showing as ' � ' . Is there a way to convert the utf8 to actual character in the DTL.

Thank you,

6
0 270
Question Colin Brough · Mar 25, 2025

Is there a generic process for "walking" the structure of a virtual document - eg an HL7 message (EnsLib.HL7.Message) or an XML document (EnsLib.EDI.XML.Document).

At least we'd want to be able to visit all "nodes" (HL7 fields or sub-fields, XML nodes) in the virtual document and be able to work out/generate the Property Path (so we could call "GetValueAt"). 

We can just about come up with something generic for HL7, since it only nests down to 4 levels within each segment, though we're using numeric Property Path's at that point rather than symbolic ones (MSH:1.3 etc).

Reading the documenta

7
0 152
Question Will · Mar 16, 2025

Hi,

My HL7 interface in production is outputting messages to a HL7 File Operation and a  EnsLib.HL7.Operation.HTTPOperation. There is no errors in the File Operation, but the HL7 HTTPOperation is giving ERROR #5911: Character Set 'iso-8859-4' not installed, unable to perform character set translation.  Both the HL7 File Operation and HL7 HTTP Operation are using latin1 for Default Char Encoding.

What is ERROR #5911 aboutIs something missing in the IRIS installation? 

Thank you.

W

5
0 123
Question Harshitha · Mar 11, 2025

Hello everyone,

I'm looking for a practical project guide to help me gain hands-on experience with InterSystems Ensemble HL7. Ideally, this guide would walk through building a small project — something that covers key concepts like message routing, transformations, and interoperability.

If there's a resource that also includes step-by-step instructions and perhaps even offers a certification upon completion, that would be perfect.

Any recommendations or guidance would be greatly appreciated. Thanks in advance! 😊

2
0 170
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")


It's working ok but when I include a realistic PDF in a FHIR Binary resource (contained in the Bundle) I get a MAXSTR


9
0 196
Job Denise Sommer · May 31, 2024

Dear community, we are building up a digital backbone for our 17 hospitals and looking for reinforcement within the team. Maybe this is something for you or someone you know?

👩‍💻 Are you an (#InterSystems) developer and would you like to join an intelligent, bright and internationally diverse team (mainly in Zurich, but also in South Africa and the Middle East)?
🤘 Are you keen to use your skills for clinically relevant use cases and to build a Group-wide value-creating platform?
😁 Are you up for mischief and humor in the workplace? 
📣 Are you willing to share frustration with us when things aren

1
0 378
Question André Suhnel · Jan 30, 2025

Hello,

I'm trying to add another segment to an HL7 MDM message. More specifically OBXgrp(1).OBX. The addition itself works,. When I look at the message in the trace, the segment with the content can be seen. However, it is not displayed as an OBX segment.

Build Map Status = 'ERROR <EnsEDI>ErrMapRequired: Missing required OBXgrp(1) element at segment 6'
'ERROR <EnsEDI>ErrMapSegUnrecog: Unrecognized Segment 6:'' found after segment 5 (TXA)'


// HL7-Nachricht klonenSet response = msg.%ConstructClone()

// OBX-Segment erstellenSet tSegmentOBX = ##class(EnsLib.HL7.Segment).%
2
0 175
Announcement Guillaume Rongier · Mar 16, 2022

Iris Healthtoolkit Service

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

gif sda pivot

9
1 1583
Question Colin Brough · Jan 10, 2025

We are using a DTL transformation to take HL7 and transform into custom XML. But the nodes in the resulting XML are appearing out of sequence - and therefore failing validation against the schema.

The XSD schema for the XML looks fine when imported into Ensemble: root node in the XSD looks like this:
And shows in Ensemble like this:

The transformation looks like this, and we can see the text from the trace elements at lines 5, 12 and 19 appear in the correct order in the event log:

HOWEVER, the resulting XML has the <allergies> nodes before the <patientNotes> nodes....:

Any ideas about

5
0 173
Question Colin Brough · Jan 13, 2025

We are using a DTL transformation to take HL7 and transform into custom XML (XML is a virtual document, held in an EnsLib.EDI.XML.Document object). The schema specifying the format of the XML says one element should occur no more than 24 times (maxOccurs="24" in the XSD schema). However, the transformation to produce one such element always produces 24 elements, all but the last one blank, when tested stand-alone. And when the sub-transform producing one element is incorporated into the full transformation to produce the whole XML object, it produces the wrong output.
Is this a bug in the Ensem

1
0 109
Question Yuhong Snyder · Jan 22, 2025

Hello,

I hope this is a simple ask..

basically I need to create local files daily at a certain time for example 11:30pm.

1. file name needs to be like  xxx__20250113.txt , the date part should be next day's timestamp with format YYYYMMDD, so I will write about 17 files like that with different names.

2. write a dummy hard coded word for example “Dummy Word” in the file.  the file eventually will be used by other operations to add hl7 message on top of this  in it with the live interface message. 

3. this needs to be done every night at 11:45pm

So how am I going to implement this?

     1

0
0 121
Question Yuhong Snyder · Jan 7, 2025

Hello,

is it possible to kill/suppress hl7 message in the DTL (data transformation).

in cloverleaf, it is common practice to check the value in message, for example pv1:7.9. if the value is certain word(assigning authority) then send the message over to destination, if it is not, kill the message

how would this be done in InterSystems ? does that need to be done in the rule instead? or can it be done in the data transformation? if it can be done in data transformation, how can it be done? 

Thanks

4
0 176
Announcement Jake Coulter · Jan 7, 2025

I've just stumbled across this post. I am an aspiring developer and one of my first few projects is a HL7 v2 message generator. It takes in a message template and then you can edit and create bulk messages from it. 

Simply choose which segment to edit, specify the field position and then you can add a CSV of values. test, test2 and so on. You can choose to download the messages or display them in your browser. It also provides a JSON file showing you which new values are grouped. Not sure of all the use cases but I built it for a bit of fun over a weekend! 

Unfortunately it doesn't have the

0
1 340
Discussion David Robson · Dec 24, 2024

Hi everyone,

I'm looking for a tool that can be used as a base to create an interface that allows a non-technical user to easily forward messages. 

The idea is that the user can find an already sent HL7 message and forward it by modifying specific fields of the message without needing any technical knowledge.

An example would be something similar to the Ensemble search engine, but with a less technical and much more intuitive approach and that only allows changing 1 or 2 fields. 

Is there a solution in the community or something that I can adapt for this purpose? Something like a React fro

0
0 203
Question Anthony Master · Dec 18, 2024

Very similar question posed here: https://community.intersystems.com/node/467496, but I am missing a piece of this:

How do I correctly call a EnsLib.HL7.MsgRouter.RoutingEngine class from the BPL?I can successfully call the BPL from the EnsLib.HL7.Service.TCPService, and I have the BPL created to delay then call the rule. And I set the context and the result location.

This rule is really basic just sending the HL7 content to a EnsLib.HL7.Operation.TCPOperation

The Visual Trace shows that the BPL is getting called, and the rule gets called after the delay, but the rule actions don't get

0
0 149