ACK Management Framework
0.1.9 - ci-build

ACK Management Framework, published by FO. This guide is not an authorized publication; it is the continuous build for version 0.1.9 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/frankoemig/ack-ig/ and changes regularly. See the Directory of published versions

Interaction

Overview

This page describes different options how sender and receiver may interact. The primary difference is with or without gateways that forward messages.


ACKs without Gateways

In a scenario w/o gateways a direct interaction between sender and recipient occurs.

Simple Request with Transport ACKs

The easiest use case is to have an interaction between two actors - sender and recipient. A request is sent and responded with a transport acknowledgement. It releases the sender from repeating the transmission, and it does not tell anything about the processing results on receive side.

Request with Ack without GatewaysRequest with Ack without GatewaysOriginating SystemReceiving SystemOriginating SystemOriginating SystemReceiving SystemReceiving SystemRequestAccept Ack

Simple Request with Application ACKs

The other simple option is to communicate with applicatin acknowledgements. The receiver informs the sender about the processing results.

Request/Response without Ack without GatewaysRequest/Response without Ack without GatewaysOriginating SystemReceiving SystemOriginating SystemOriginating SystemReceiving SystemReceiving SystemRequestApplication Response

Simple Request with Transport and Application ACKs

The third simple option is the combination of both: transport and application acknowledgement: The receiver first informs about the receipt of the message thus releasing the sender from repeating. Afterwards, the receiver returns the processing result which in return is responded by the sender with a transport acknowledgement.

Request/Response with Ack without GatewaysRequest/Response with Ack without GatewaysOriginating SystemReceiving SystemOriginating SystemReceiving SystemOriginating SystemOriginating SystemReceiving SystemReceiving SystemOriginating SystemReceiving SystemRequestAccept AckApplication ResponseAccept Ack

ACKs with Gateways

In a lot of circumstances, gateways are included to forward the message. In such a case the sender does not directly communicate with the intended recipient but using one or more gateways that take care of the messages and forwards them the next recipient until they reach the final destination.

Forwarded Request with Transport ACK

In the simplest use case, each gateway accepts the received message and responds with a transport acknowledgement, before it forwards the message to the next recipient. Each sender has to evaluate the response whether he has to resubmit the message:

Request with Transport ACK and GatewaysRequest with Transport ACK and GatewaysOriginating SystemGateway 1Gateway nReceiving SystemTriggerOriginating SystemGateway 1Gateway nReceiving SystemTriggerTriggerOriginating SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemReceiving SystemOriginating SystemGateway 1Gateway nReceiving SystemRequestAccept Ack 1check for resubmissionRequestAccept Ack 2check for resubmissionRequestAccept Ack 3check for resubmission

Because only the transmission is checked not further duties arise.

Forwarded Request with Application ACK

In case an application acknowledgement is necessary, the last recipient will start with the sending back the response:

Request+Response without Transport ACK with GatewaysRequest+Response without Transport ACK with GatewaysOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemTriggerOriginating SystemGateway 1Gateway nReceiving SystemTriggerTriggerOriginating SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemReceiving SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemRequestRequestRequestApplication ResponseApplication ResponseApplication Response

An application ACK introduces some responsibilities. Therefore, it is reasonable to assume that the recipient has to take care whether a response has been received:

Request+Response without Transport ACK with Gateways (2)Request+Response without Transport ACK with Gateways (2)Originating SystemGateway 1Gateway nReceiving SystemTriggerOriginating SystemGateway 1Gateway nReceiving SystemTriggerTriggerOriginating SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemReceiving SystemOriginating SystemGateway 1Gateway nReceiving SystemRequestRequestRequestApplication ResponseApplication ResponseApplication Responsesignal responsesomehow if needed

Forwarded Request with Transport and Application ACK

The same, but in this case also transport ACKs are returned:

Request/Response with Ack and GatewaysRequest/Response with Ack and GatewaysOriginating SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemTriggerOriginating SystemGateway 1Gateway nReceiving SystemTriggerTriggerOriginating SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemReceiving SystemOriginating SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemRequestAccept Ack 1RequestAccept Ack 2RequestAccept Ack 3Application ResponseAccept Ack 4Application ResponseAccept Ack 5Application ResponseAccept Ack 6

Application ACKs introduces again some duties about controlling the overall processing:

Request/Response with Ack and GatewaysRequest/Response with Ack and GatewaysOriginating SystemOriginating SystemOriginating SystemGateway 1Gateway 1Gateway 1Gateway 1Gateway nGateway nGateway nReceiving SystemReceiving SystemTriggerOriginating SystemGateway 1Gateway nReceiving SystemTriggerTriggerOriginating SystemOriginating SystemGateway 1Gateway 1Gateway nGateway nReceiving SystemReceiving SystemOriginating SystemOriginating SystemOriginating SystemGateway 1Gateway 1Gateway 1Gateway 1Gateway nGateway nGateway nReceiving SystemReceiving SystemRequestAccept Ack 1check for resubmissionRequestAccept Ack 2check for resubmissionRequestAccept Ack 3check for resubmissionApplication ResponseAccept Ack 4check for resubmissionApplication ResponseAccept Ack 5check for resubmissionApplication ResponseAccept Ack 6check for resubmissionsignal responsesomehow if needed

Service Request with Intermediary

????? to be explained …

Request/Response with Ack without GatewaysRequest/Response with Ack without GatewaysOrder PlacerOrder PlacerOrder FillerOrder PlacerIntermediaryOrder FillerOrder PlacerOrder PlacerIntermediaryIntermediaryOrder FillerOrder FillerOrder PlacerOrder PlacerOrder FillerTaskApplication ResponseAccept Ack

Asynchronuous Protocol

Some may not know, but HL7 v2 is an asynchronous protocol. Therefore, messages need not be responded immediately. Also, the response order may vary or deviate from the sent messages:

Request with asynchropnous ACKs

Requests are normally sent in the order they occur. (The correct order is important due to internal states.) However, the response may be sent in arbitrary orders. The following is just one possible example:

Several Requests with deferred ACKs (async)Several Requests with deferred ACKs (async)Originating SystemReceiving SystemOriginating SystemOriginating SystemReceiving SystemReceiving SystemRequest 1Request 2Request 3Request 4Accept Ack for Request 3Request 5Accept Ack for Request 4Accept Ack for Request 1Accept Ack for Request 5Accept Ack for Request 2

The correlation between initiating and response message is done via the message identifier which is sent in the message header.


Use Case with Communication Server

The purpose of a communication server is to distribute a single message to different recipients.

Single Request with Comserver

In this example, we will distribute a single request to multiple recipients.

The communication server takes the message, and prepares and returns a response that releases the sender from resending the message.

In a next step, the comserver will update the message for each recipient depending on his indivudal needs:

One Broadcast Message to different RecipientsOne Broadcast Message to different RecipientsOriginating SystemComserverComserverComserverComserverComserverReceiving System 1Receiving System 2Receiving System 3Originating SystemComserverReceiving System 1Receiving System 2Receiving System 3Originating SystemOriginating SystemComserverComserverReceiving System 1Receiving System 1Receiving System 2Receiving System 2Receiving System 3Receiving System 3Originating SystemComserverComserverComserverComserverComserverReceiving System 1Receiving System 2Receiving System 3Requestcreate ACKAccept Ackmodify for recipient 1modified RequestAccept Ackmodify for recipient 2modified RequestAccept Ackmodify for recipient 3modified RequestAccept Ack

This scenario does not cover application acknowledgements from individual recipients and how they are transmitted back.

Question: What to do if some recipients reject the message?