The outbound HL7 V2 Collaboration, jcdHL7Outbound, contains Message Libraries for the HL7 Resource Adapter, JMS Data, HL7 ACK, JMS Journal, and JMS Error, as well as the Generic HL7 Event. The Collaboration works with its own internal code and the properties configuration files. The outbound Collaboration assumes that it is reading valid HL7 V2 messages, so the data flow that feeds this Collaboration must ensure this.
The following topics describe the business logic defined in the jcdHL7Outbound Collaboration:
The Collaboration is triggered by a JMS HL7 V2 message. The Collaboration then calls the HL7 User Collaboration Rule by executing the receive method. Receive is the entry point to the HL7 User Collaboration, with the following signature,
receive (input, otdHL7eWay_1, otdJMS_JOURNAL, otdJMS_ERROR, otdHL7_ACK_1, otdHL7_GENERIC_EVT_1) |
The incoming HL7 V2 message is then validated, making sure that the message structure is correct. Various fields of the message are also validated, such as Sending Facility, Version ID, and MSH.
If the message does not pass validation, an error occurs and the associated recourse action is applied. If the HL7 V2 message passes validation, the message moves on to processInitialHandshake() to receive a sequence number (if sequences numbering is enabled). The Collaboration takes the sequence number from the sequence numbering file and determines the next number to use. This number is then inserted into the HL7 V2 message.
Next, the message moves on to processMessage(), which calls the helper method, sendAndReceive(). The sendAndReceive method sends the HL7 message, waits for an HL7 ACK message, and processes the ACK or NAK. The validation also checks the message structure to see if the message is unmarshaled. If a valid ACK is not received, it continues to send the HL7 V2 message up to the configured number of retries, at which time an error occurs and the associated recourse action is taken. If a valid ACK is received, the message moves on to insertSequenceNumber().
If sequence numbering is enabled, the insertSequenceNumber method inserts the sequence number and calls sendHL7Message(). The sendHL7Message method sends the HL7 V2 message to the external using the HL7 adapter Message Library.
The Collaboration receives the HL7 ACK or NAK from the external system using receiveHL7AckNak(). If an exception occurs due to incomplete data and the adapter fails to read the data within the configured number of retries, the associated recourse action is taken. If the exception is due to no response, the associated recourse action is taken. If no exception occurs, the ACK or NAK message moves on to isAckMessage(), which validates the message to determine whether the message is an ACK or a NAK.
Next the validateAckNak method unmarshals the message to the ACK Message Library and validates the MSH/MSA data. It also calls other helper methods such as checkSendingReceivingApplication() and checkSendingReceivingFacility() to validate the ACK message.
If the message does not pass validation it is handled as a NAK, the associated recourse action is taken, and the message is archived in the error queue.
If the message is a NAK, the associated recourse action is taken, and the message is archived in the error queue, along with the NAK message, as a JMS property.
If the message is an ACK and passes validation, the message is sent on to the journalMessage method
If the ACK message passes validation, the HL7 V2 message and ACK message are sent to the JMS journal destination. If the message fails to journal, the associated recourse action is taken.
If sequence numbering is enabled, the processAckNakSequenceNumbering method calculates the next sequence number and stores the number in the sequence number file, calling updateSequenceNumberFile to persist the next sequence number.
In addition to the inbound and outbound HL7 V2 Collaborations, an outbound test Collaboration, jcdHL7OutboundTestDriver, is provided to test the HL7 V2 outbound and HL7 V2 outbound delayed ACK samples.
The jcdHL7OutboundTestDriver Collaboration simply picks up HL7 V2 messages from the File Adapter and sends the message to the JMS queue. This is used by the sample Projects to test the number of HL7 V2 messages processed per minute.