May 28

I notice that people used to the eGate/Java CAPS way of doing things, when looking at migrating to the SOA Suite for HL7 messaging, are trying to reproduce the pattern “HL7v2Adapter?JMS Queue”. This is not necessary when using SOA Suite but can be done if one insists. This article walks through the process of implementing this pattern using Oracle SOA Suite 11g R1 PS3.

The process will follow these steps:
1. Obtain and configure the QBrowser tool for JMS browsing
2. Obtain and configure the HL7 Sender tool
3. Create two WebLogic JMS Queues to be used in the solution
4. Create and deploy a HL7 v2 Inbound Trading Partnership Agreement
5. Submit HL7 v2 messages and inspect them in the corresponding JMS Queue
6. Repeat steps 4 and 5 for another inbound stream

The cmplete article, which can be found at http://blogs.czapski.id.au/wp-content/uploads/2011/05/SOASuite_HL7v2_Inbound_to_JMS.pdf, will demonstrate that Oracle SOA Suite B2B HL7 infrastructure can be configured to receive message streams over multiple inbound MLLP channels and deliver each stream to a distinct JMS destination, much as eGate and Java CAPS solutions used to do.

Apr 08

The Oracle SOA Suite 11g R1 B2B functionality can be used for HL7 v2.x delimited messaging, both inbound and outbound. I have a series of articles which provide step-by-step instructions for developing HL7 v2.x delimited messaging solutions for processing inbound and outbound messages, with varying ACK patterns – http://blogs.czapski.id.au/?s=hl7+soa+suite.

This article discusses how an A19 Query processing solution can be implemented using the SOA Suite 11g R1 PS3.
We have a client sending a HL7 v2.3.1 A19 QRY request, asking for demographic details for a patient specified by an ID. The HL7 v2.3.1 A19 ADR response will carry a PID segment with basic demographics. The client identifies itself with MSH-3 (Application ID) of “A19QRY” and MSH-4 (Facility ID) of “CLI1″. The query processor is identified by the client with MSH-5 (Application ID) of “A19ADR” and MSH-6 (Facility ID) of “GWYQ”.

The complete article is to be found at http://blogs.czapski.id.au/wp-content/uploads/2011/04/09_SOASuite11gR1PS3_HL7_A19_Processor_v1.0.0.pdf

 

 

Dec 29

New release, v0.7, is available – see link below for downloadable archive. Throughput masurements were added. Manpages were updated.

I spend considerable time working with HL7. In the past I used SeeBeyond ICAN and Sun Java CAPS products, and OpenESB with HL7 Binding Component,  to rapidly create MLLP senders and receivers for the HL7 solutions I was building and testing. I also tried, at various times, 7 Scan, Interface Explorer and more recently HL7 Browser. For the blog articles I am writing on HL7 I need simple tooling that allows me to send HL7 v2 delimited messages from a file to a MLLP listener and receive acknowledgements, receive HL7 messages from a sender and retrun acknowledgements, and recently to combine multiple sender message streams into a single stream, with correct acknowledgement handling. The tooling has to be free for me to distribute with the projects and the articles and to use in my day job as well.

Not finding anything that would fit the bill, and that would work reliably enough, I developed my own tools.

I embellished the basic sender a bit so I could send multiple messages, one after the other, from a file, delay between successive sends, generate MSH-10, replace MSH-3-1, MSH-4-1, MSH-5-1 and MSH-6-1, and increase timeout for acknowledgements.

The tools are all old fashioned command line tools – no graphical user interface.

CMDHL7Listener – man page: http://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7Listener.pdf

CMDHL7Sender - man page: http://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7Sender.pdf

CMDHL7Proxy – man page: http://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7Proxy.pdf

Deprecated Distribution: http://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7_v0.5.zip

Current Distribution: http://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7_v0.7.zip

Release 0.5 and 0.7 are free to use by anyone for any purpose and will stay that way. There may not be future releases :-)
I used HAPI 1.0.1 libraries for HL7 processing – http://hl7api.sourceforge.net/

Oct 23

In any but the simplest of HL7 messaging environments there will be multiple sources and multiple destinations of HL7 messages. It is very unlikely that all, or even a majority of these, will use exactly the same HL7 message structures in terms of versions, optional/mandatory segments, extension Z segments, and so on. A sensible approach to dealing with these kinds of issues, and a key component of the HL7 Enterprise Architecture, is the so called Canonical (or Common) Message Model (CMM). The CMM works hand-in-glove with the enterprise architecture in which transformation to/from the CMM is performed at the edges of the integration domain. This article discusses major considerations and works through the mechanics of deriving a Canonical Message Model for a fictitious Healthcare Enterprise and implementing it using the Oracle SOA Suite 11g HL7 tooling as an example. The article will also discuss and illustrate a mechanism for injecting arbitrary metadata into the canonical message, generated by the B2B Document Editor, in such a way that it is ignored by the Edge-dwelling B2B infrastructure but is significant to the SOA infrastructure.

The text of the article is available at http://blogs.czapski.id.au/wp-content/uploads/2010/10/HB01_OSS11g_HL7CannonicalMessageModel_v1.0.1.pdf

Aug 31

In this article I discuss and illustrate a “SOA-less” solution in which the Oracle SOA Suite 11g R2 B2B receives a stream of different HL7 v2 delimited messages types (A01 and A03) using a single inbound adapter. The messages are converted into their “equivalent” HL7 v2 XML messages. I say “SOA-less” because all the work is done entirely within the B2B part of the SOA Suite – no OSB or SOA Composites are involved.

This article demonstrates one way in which different message types can be accepted through one inbound adapter.

The complete text of the article is availabloe at http://blogs.czapski.id.au/wp-content/uploads/2010/08/07_Oracle_SOA_Suite_B2B_Receiving_Stream_of_Multiple_HL7_v2_Message_Types_v1.0.2.pdf.

Aug 30

In this article I discuss and illustrate a “SOA-less” solution which uses the Oracle SOA Suite 11g R2 B2B functionality to convert HL7 v2 delimited messages into their equivalent HL7 v2 XML messages. I say “SOA-less” because all the work is done entirely within the B2B part of the SOA Suite – no OSB or SOA Composites are involved.

The article text is available at http://blogs.czapski.id.au/wp-content/uploads/2010/08/06_Oracle_SOA_Suite_B2B_Quick_HL7v2_Delimited_to_HL7v2_XML_Conversion_v1.0.0.pdf

Jun 27

This article is a follow on to the “Oracle SOA Suite 11g HL7 Inbound Example – Functional ACK Addendum” article and the “Oracle SOA Suite 11g HL7 Inbound – Customized HL7 Message Structure and Data Validation” article.  In these articles the B2B infrastructure was configured to return the “Functional ACK” when it validated each message. The ACK was a positive or a negative ACK depending on whether the message passed validation. The ACK was generated by the B2B Layer before the message was passed on to the SOA Layer.

In this article I expand on the previous posts by configuring the B2B Layer to pass the message to the SOA Layer and pass the Functional ACK, generated by the SOA Layer on to the requester. To process a message and produce the ACK we will build and deploy a new SOA Composite.

The text of the article is to be found at http://blogs.czapski.id.au/wp-content/uploads/2010/06/05_Oracle_SOA_Suite_HL7_inbound_example_BackEnd_ACK_Addendum_v0.1.0.pdf.

Jun 26

Messages we used in previous articles dealing with HL7 Inbound (Oracle SOA Suite 11g HL7 Inbound Example – Functional ACK Addendum, Oracle SOA Suite 11g HL7 Inbound Example) were not strictly speaking valid according to the default HL7 V2 ADT A01 message specification produced by the Oracle B2b Document Editor. Both the message structure was not quite right and the data was not quite right. To allow such messages in, we disabled Validation property in the B2B Trading Partnership Agreement.

In this article we will alalyze the data and  create a customized HL7 v2 ADT A01 structure which will allow us to successfully validate incoming messages. We will then modify the document definition and Partnership Agreements to use this custom structure and validate messages as they come in.

The customization discussed in this article only scratches the surface of what is possible with the Oracle B2B Document Editor.

The complete text of the article is available at http://blogs.czapski.id.au/wp-content/uploads/2010/06/04_Oracle_SOA_Suite_HL7_inbound_Customising_Message_Structure_v0.1.1.pdf

Tagged with:
Jun 25

In this article I develop and exercise a simple Oracle SOA Suite 11g B2B infrastructure-based HL7 v2 Sender (outbound) project for an ADT A01 message and use Message tracker to view messages.

This article complements previous articles in the series, Oracle SOA Suite 11g HL7 Inbound Example and Oracle SOA Suite 11g HL7 Inbound Example – Functional ACK Addendum.

The text of the article, 03_Oracle_SOA_Suite_HL7_outbound_example_v0.1.0.pdf, is available at http://blogs.czapski.id.au/wp-content/uploads/2010/06/03_Oracle_SOA_Suite_HL7_outbound_example_v0.1.0.pdf

Tagged with:
Jul 02

“Progress” notwithstanding, Healthcare environments still extensively use the HL7 v2.x Delimited messages for conveyance of patient and patient-related information between applications. The GlassFish ESB provides support for HL7 v2.x messaging in the form of the HL7 Encoder, which allows conversion between HL7 v2 Delimited and HL7 v2 XML message formats, and in the form of the HL7 Binding Component, which allow connectivity between the GlassFish ESB-based healthcare solutions and healthcare applications that support HL7 over TCP connectivity.

In this document I will walk through the process of generating HL7 v2.3.1 delimited messages from pipe-delimited records containing patient information, sending and receiving HL7 v2.3.1 delimited messages using the HL7 Binding Component, parsing HL7 v2.3.1 delimited messages and writing HL7 v2 delimited messages to a file. To create and process HL7 messages I show how create a custom ADT A04 XML Schema and a custom “any HL7 v2 message” XML Schema. This gives me an opportunity to use the File Binding Component (File BC), the HL7 BC, the HL7 Encoder, the Custom Encoder and the BPEL Service Engine (BPEL SE). This also gives me an opportunity to demonstrate a HL7 v2.3.1 delimited message sender solution and to demonstrate a HL7 v2.3.1 delimited message receiver solution. At the end of the process we will have a file containing HL7 v2 delimited ADT A04 messages, which we will use in related writeups.

Here is the document: 02_PatientSvc_MakeHL7v2DelimDataFromCustomDelimRecords_0.4.pdf

Here is the companion archive containing input files, the output file and the projects: 02_PatientSvc_MakeHL7v2DelimDataFromCustomDelimRecords_data.zip

The writeup document has been updated and version changed to 0.4.

preload preload preload