Each different domain, covered by HL7 v2 standard, has a set of message definitions which support message exchanges for a particular domain. Most of the message definitions for a domain share certain segments. Many of the segments are optional and perhaps not used in a particular messaging environment.
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.
It is common for integrating specialists, if the tooling which they use permits, to develop one or few generalised message structures which can be used to represent more than one distinct message from a domain they work with. These are typically called canonical models. The overriding purpose is to standardise the message payload being passed around between integration components, enabling reuse and reducing complexity. The Canonical Message model (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, standardizing as much as possible, payload structure within the integration domain.
The article, whose full text is available at https://blogs.czapski.id.au/wp-content/uploads/2012/09/SOASuiteHCI_ch5_CanonicalMessage_v0.1.0.pdf, works through the mechanics of deriving a Canonical Message Model for the series of articles on SOA Suite for healthcare integration using the “Oracle SOA Suite for healthcare integration” tooling. It contains an abridged version of the article “Healthcare Enterprise – IT Architecture Building Blocks – Canonical Message Model for a HL7 Enterprise”, available at https://blogs.czapski.id.au/2010/10/healthcare-enterprise-%e2%80%93-it-architecture-building-blocks-canonical-message-model-for-a-hl7-enterprise, but adds new material related to testing the canonical structure against sample data and modifying the structure to accommodate data idiosyncrasies.
To develop HL7 v2 messaging solutions which use the SOA Suite for healthcare integration one needs a working development and deployment environment.
This article provides references to components which must be obtained and installed to get a working environment in preparation for development of solutions presented in possible future articles.
This article and the remaining articles assume a development environment based in Microsoft Windows XP 64-bit. Nothing, except the instructions for downloading Windows-specific components and screenshots of Windows-specific non-SOA Suite tools, prevents you from developing on any of the other supported platforms. Convers my Windows-specific instructions to your platform-specific instructions as needed.
The full text of this article is available as “SOA Suite for healthcare integration Series – Overview of the Development Environment” at https://blogs.czapski.id.au/wp-content/uploads/2012/08/SOASuiteHCI_ch2_Dev_Environ_v0.1.0.pdf.
In my past articles I presented, amongst other things, HL7 v2 messaging solutions using the Oracle SOA Suite 11g R1 B2B HL7 infrastructure. At the beginning of the calendar year 2012 Oracle released a new incarnation if its HL7 messaging capability under the name of the “SOA Suite for healthcare integration”. This capability builds on the SOA Suite B2B HL7, adding design, configurator, monitoring and management user interface capabilities which greatly simplify the task of creating HL7 v2 messaging solutions and enhance management and operational reporting.
The new and changed functionality is significant enough for me to consider writing a series of articles on the topic. The series is intended to walk the reader through the tasks of creating specific HL7 v2 messaging solutions using the SOA Suite for healthcare integration.
At this point in time I expect to produce articles on the following topics, in the order given:
- Overview of the Development Environment – this article
- A Very Brief Overview of HL7 v2 Messaging
- A Very Brief Overview of the SOA Suite for healthcare integration
- Creating a Canonical Message Model – https://blogs.czapski.id.au/2012/09/soa-suite-for-healthcare-integration-series-creating-a-canonical-hl7-v2-message-model
- HL7 v2 Inbound to File – https://blogs.czapski.id.au/2012/11/soa-suite-for-healthcare-integration-series-hl7-v2-inbound-to-file-solution
- Constructing file name from message content and messaging properties – https://blogs.czapski.id.au/2012/11/soa-suite-for-healthcare-integration-series-hl7-v2-inbound-to-file-solution
- HL7 v2 Inbound to HL7 v2 Outbound Pass-through – https://blogs.czapski.id.au/2012/12/soa-suite-for-healthcare-integration-series-hl7-v2-inbound-cmm-to-outbound-pass-through-solution
- Transformation and Routing using XSL and Mediator – https://blogs.czapski.id.au/2012/12/soa-suite-for-healthcare-integration-series-routing-and-transformation-using-xsl-solution
- Adding Data Map for pass-through code translation – https://blogs.czapski.id.au/2013/01/soa-suite-for-healthcare-integration-series-domain-value-map-dvm-on-the-fly-code-mapping
- Automating Exception Message Handling – https://blogs.czapski.id.au/2013/01/soa-suite-for-healthcare-integration-series-exception-handling-processing-endpoint-errors
- Externalise, “Repair” and Resubmit “broken” messages – https://blogs.czapski.id.au/2013/01/soa-suite-for-healthcare-integration-series-externalise-repair-and-resubmit-broken-messages
- Implementing an A19 Query Processor – https://blogs.czapski.id.au/2013/01/soa-suite-for-healthcare-integration-series-implement-an-a19-query-processor
- Send, Receive and Translate HL7 messages using B2B Web Services
- Other Key Features
- HL7 v2 solution using JMS “the Java CAPS way” – https://blogs.czapski.id.au/2013/02/soa-suite-for-healthcare-integration-series-hl7-v2-solution-using-jms-the-java-caps-way (this article was propmpted by correspondence with Steve L)
It will take some time to produce these articles and the list may change.
I am interested in hearing from people about other topics they might like to see covered. I will consider suggestions though I am not promising that I will act upon them.
In the following sections I am briefly elaborating on what I expect each topic to cover, and presenting a solution schematic where a solution will be developed.
The article is availabe as “SOA Suite for healthcare integration Series – Series Overview” at https://blogs.czapski.id.au/wp-content/uploads/2012/08/SOASuiteHCI_ch1_Introduction_v0.1.0.pdf.
Recently I had an occasion to work on an integration project which required the Rhapsody 4.01-based integration solution to receive messages from a WebLogic-based JMS Topic. Product documentation and Internet searches did not offer assistance in terms of how the Rhapsody JMS Adapter needs to be configured to support this. While there are a number of articles which discuss the topic of configuring JMS Client to interact with WebLogic JMS Server, none of the solutions described in these articles worked for me. A degree of experimentation and creative adaptation resulted in a working configuration. This article discusses this solution for the benefit of these who will be faced with this problem and for my own benefit if I need to do this again in the future.
The article can be found at https://blogs.czapski.id.au/wp-content/uploads/2011/12/Rhapsody_4.01_and_WebLogicJMS_10.3_v1.0.0.pdf
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 https://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.
WebLogic Server does not include a convenient tool to browse JMS destinations. Freely downloadable QBrowser version 2 tool, with some configuration, can be used to provide easy to use functionality to work with WebLogic JMS destinations. This article discusses how QBrowsers should be configured to work with the JMS destinations managed through the WebLogic Server 11g (10.3), which was the current version at the time this article was written.
The complete article is available at https://blogs.czapski.id.au/wp-content/uploads/2011/05/QBrowser_for_WebLogicJMS_10.3.pdf
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 – https://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 https://blogs.czapski.id.au/wp-content/uploads/2011/04/09_SOASuite11gR1PS3_HL7_A19_Processor_v1.0.0.pdf
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: https://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7Listener.pdf
CMDHL7Sender – man page: https://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7Sender.pdf
CMDHL7Proxy – man page: https://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7Proxy.pdf
Deprecated Distribution: https://blogs.czapski.id.au/wp-content/uploads/2010/12/CMDHL7_v0.5.zip
Current Distribution: https://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/