Monday, November 17, 2008

HL7Kit - a new HL7 Software

HL7Kit is a continuation of the HL7Sender that was released almost a month ago. This package is a subset of our upcoming HL7 Interface Development Suite and Integration Services carrying the same name (with optional Pro/Enterprise edition).
The current package can be downloaded from our web site and includes two applications for validating, editing, sending, receiving and processing HL7 v2.x messages.

The first application, HL7Sender, is an improved version with message editing area featuring Synchronized Structure and Content views of the HL7 Message and a save as XML option (from File/Save As menu item) for creating comprehensive and very useful representation of HL7 v2.x messages as HL7 XML. Clicking a node on the left panel tree view highlights the corresponding text in the right panel text box and vice versa. HL7Sender is currently a freeware.

The second application, HL7Reciever, is a powerful brand new application for receiving, validating and processing HL7 messages over TCP/IP connections. HL7Reciver runs a network listener and waits for incoming connections. When a message is received it can be saved automatically either as HL7 or as XML file (or both). In addition, you can configure HL7Reciever to start a new process and pass the saved message as a parameter (by default, the message is saved in XML format and opened using internet explorer). The behavior of HL7Reciver is controlled by no less than 6 Checkboxes! But don’t worry, it is rather straight forward and the tooltips explains it all. HL7Reciever can save logs to text files and has an event log as well that can be used for monitoring and auditing (Vista users, when running HL7Reciver for the first time, run it as administrator so it can create the event log).
As you can read, HL7Reciever is a very handy tool with lots of useful options. This package includes a 30 days fully functional free trial version that requires online registration. The licensed software is currently sold online for $150 USD. For purchase please follow this link.

One last note about the message structure. Check this post for a short explanation of how to modify the message structure definition files. Note also that the XML hierarchical structure is defined by this configuration. The field names in the XML are defined in the segment definition file and can be modified as well.

As already mentioned above, HL7Kit is a subset of HL7 Integration Suite that is coming very soon. Check this blog for updates or reigster for the feed to get updates on this product, how to use it and more.

Editing the message rules used by HL7Kit

The message rules configuration file msgRules.251 is using a similar notation to the one used in the HL7 Standard documentation.
Every line in the file represents one message definition.
The first element is the event type.
When the event type is followed by a semicolon and another event type that means that the structure of the message is defined by the event type on the left is identical to the one with event type on the right. In the example above ADT^A03 is defined to have an identical structure as ADT^A02.
When the event type is followed by a colon, a list of segment names and special grouping characters follow.
The special grouping characters are:

Elements that are not special characters or a valid segment names are regarded as aliases. Aliases are used to group segments into entities. For example, in the ADT^A01 an alias called ‘patient’ is defined. Note that the alias name comes AFTER the segments group.

Thursday, November 6, 2008

Regsitering RZDCX on Vista

To register RZDCX on vista:
run cmd as administrator
cd to the directory where you unpacjed rzdcx.dll
regsvr32 rzdcx.dll

If you are using Vista x64, register the x64 version of rzdcx.

Tuesday, October 28, 2008

Free HL7 Message Sender Utility

As part of our ongoing development, we create all kind of utilities and test applications. Sometimes the story ends here. But occasionally we find some of the development by products worthwhile and decide to spend some more effort and remove the 'by'.
HL7Sender is a utility for sending HL7 messages through the network. It is rather simple, single form application with very few features. It can read, write, validate and send HL7 messages.
The upper part of the form shows the message in a rich text control where it can be edited. Be careful with these edits. Every HL7 segment starts in a new line. The best way to edit the message is simply to cut and paste segments from other messages (you can open multiple instances of the program) or fill text between two | signs (field separator).
At the lower part of the form there are a few text fields where the user can set the MLP network protocol elements, the TCP/IP protocol attributes (destination host name or IP address, port number and timeouts) and disable or enable ACK’s.
HL7Sender uses Igor Chernizer’s HL7ImEx HL7 parser and the two message structure text configuration files (segDefs and msgRules) are located in the installation folder and can be edited manually if necessary. The user can duplicate these files with different suffixes in order to use multiple ‘flavors’ of the HL7 version. The flavor’s suffix can be set in the ‘Message configuration version’ text box (don’t forget the dot ‘.’).
HL7Sender is currently free and can be downloaded from

Saturday, September 13, 2008

Building the sample applications using Visual Studio 2005

RZDCX Sample Applications include Visual Studio 2008 (Version 9) project files.
To build a sample application using Visual Studio 2005 or older versions, create an empty project and add the source files to it. In the project file set the 'use precompiled headers' option to false or add the "#include stdafx.h" instruction to the source file.
Most of the samples consist of exactly one source file so this should not be very complicated.

Wednesday, September 3, 2008

RZDCX Release

RZDCX Release is now available for download. This release introduces major improvements and bug fixes.

Following are some highlights of the major improvements in this release.

DICOM Server Applications are usually required to handled multiple concurrent associations. Release includes Multi-Threaded sample applications both in C# and in C++.

At first glance the multi-threading model that we chose might look a bit strange because the application event loop is actually handled in the worker thread (See for example MultithreadedServerExample AssocHandler DoWork). This paradigm was chosen because of some limitations that COM and .NET interop enforce with MTA's.

Error Handling
Release of RZDCX provides detailed log descriptions using the COM Error Handling framework.
When adding the error handling framework, we tried to provide the most accurate error text that can be presented to the user. Since RZDCX exposes a very High Level Programming API, every API call encapsulates many DICOM primitives and therefore we had to choose the correct message to show.
The error text is aimed to provide good diagnostics information. This means for example that if a file failed to send then the error will be of the send failure even if there were also problems in the association release command.
In C++ Use the _com_error::Description() method to get the error message.
In C# use the System.Runtime.InteropServices.COMException Message property to the error message.

Backwords Competibility of release
In release the dictionary method LookupTagByName was part of the Requester class (DCXREQ). In release we've added a new Dictionary class (DCXDIC) that handles the task of tag names and numbers look-ups.

Migration to Visual Studio 2008
Release was built using Visual Studio 2008. The DLL however is statically linked (what makes it a bit big) so there should not be any dependency problems.

Bug Fixes
Ticket 20: RZDCX MovePatient negotiates wrong SOP Class
Negotiates Study Root Move but tries to move on Patient Root.

Ticket 22: DCXACC Creates temporary file even if user provided a name
The call to the user callback should be before creating the temporary file and not after. Otherwise if the user provides a name, two files are created: the temp one and the user one and the temp one is left empty.

Monday, June 9, 2008

RZDCX Release

RZDCX Release was released on 26th May 2008. A fully functional evaluation copy with full source code examples and documentation can be downloaded from
Although this is the first time that the toolkit is available for download from the Internet, RZDCX is not a new product. We have been using RZDCX internally on our projects for more then a year now.