Monday, 1 March 2010

Acknowledgements in HL7V2.x

HL7V2.x messaging standard indicates that Acknowledgements (ACK’s) are messages sent by a receiving system to the sending system in response to a transaction from the sending application. In a setup where HL7 is implemented the sending system will assume that the message sent by it is not received till it receives an ACK from the receiver. So in summary Acknowledgements are used to confirm the receipt of the message. Acknowledgements are implemented at two levels transport level and application level. In this post we will have a look at both the options.

Transport Level Acknowledgements: Sending systems open a connection to send messages to the receiving messages, mostly through the interface engine which act as broker for communications between different systems in a healthcare setup. If a message is acknowledged on the same connection which is used to send a message they are termed as transport level acknowledgements.

The connections can be transient or persistent in nature. Transient connections are those where the connections are closed after an acknowledgement is received. Each time a message is sent a new connection is made. Persistent connections are those where the connections are kept open and messages are sent over the same connection in a sequence, in sense sending a next message over the same connection after an acknowledgement is received for the previous sent message. Persistent connections are generally configurable where the connections can be closed after a certain period of inactivity. There are different factors which determine the choice of connection. The factors include message throughput, latency, sequencing, fail over, high availability and general infrastructure of the organisation.

Transport Level Acknowledgements also indicate that the ownership of the message is passed to the receiving system after it has received a acknowledgment. The transport level acknowledgement also informs the transport and reception error.

If a message is received and accepted by the receiver then it sends a ACK and performs one of the following

•Validates and persists the message successfully, generating the functional response message with a value of AA (Application Accept) in MSA-1-acknowledgment code field.


•Send an error response, providing error information in functional segments to be included in the response message with a value of AE (Application Error) in MSA-1-acknowledgment code field.


•Fail to process (reject) the message for reasons unrelated to its content or format (system down, internal error, etc.). For most such problems it is likely that the receiving system will be able to accept the same message at a later time. The sending system must decide on an application-specific basis whether the message should be automatically sent again. The response message contains a value of AR (Application Reject) in MSA-1-acknowledgment code.

Application Level Acknowledgement: A sending system may require an application level acknowledgment from the receiving system if confirmation of successful processing is required. This can take the form of an HL7v2 ACK message (e.g. to indicate a successful processing of order it received) or a business response.

Generally the transport acknowledgment only confirms the receipt of messages but does not convey any confirmation of processing of the message. The need for these interfaces needs to be decided by the business processes. They are transmitted in the same way as any other message

In HL7 terminology the above two types of ACK's are termed as follows

•Original Mode Acknowledgement - a "Receive" ACK and majority of the ACKs used in HL7 communications; indicates that a message has been received but not necessarily processed yet

•Enhanced Mode Acknowledgement - an "Application" ACK that is a resultant status return rather than a communication response (i.e. query results, order response, etc.)


  1. I'd like to point out that the 'transport level acknowledgement' (a term used in the original post) is known as the 'accept acknowledgement' within HL7. It's a bit more than just 'transport acknowledgement' (i.e. achieving reliability at the transport layer), it's function is wider than that. It includes making a statement about things like message type (ah, yes, that's a message type I support) and the ID of the receiving application (check - that's me as a receiver in the message header).

    By the way: in an accept acknowledgement, MSA-1 SHALL contain either CA,CE or CR. In an application acknowledgement, it SHALL either contain AE,AR or AA.

    In general terms the application acknowledgement is always a business response, for it is about the semantics/meaning/interpretation of the original message received.

    By the way: HL7 version 3 uses the exact same terms (accept ack, application ack), and even has the same error codes, as HL7 v2. It may be helpful to study the v3 documentation in order to help understand the way this works in v2.

  2. Thanks for the corrections Rene.

    In response to your comment that "MSA-1 shall contain CA , CE or CR for accept acknowledgement and AE , AR or AA for Application acknowledgement" I wish to point out that due to inherent problems with generation of application acknowledgements in general most legacy healthcare systems(most existing systems) use only AE , AR and AA in HL7 ACKs generated at the transport level.Most of my info is what i gathered as implementer.

  3. very good explanation!

  4. Really... very useful information. Thanks