1. You have an HL7 channel receiving over LLP and then sending over LLP
2. The destination ack timeout is set to 5000 ms.
3. A message (Message 1) is sent to the channel
4. Message 1 is forwarded to the destination
5. After 5000 ms the receiver has not yet replied
6. The channel, of course, timesout.
7. After another 10000 ms the receiver finally acks (Ack 1)
8. A different message (Message 2) is now sent to the channel (possible, especially if multiple senders are pointed at it)
9. Message 2 is forwarded to the destination
10. Without waiting for a reply, the Message 2 is marked as sent, and the channel log indicates that Ack 1 was acknowledged as and Ack for Message 2.
11. Coincidentally, the destination crashes without processing Message 2
12. The sender now believes Message 2 was processed, and the destination has no knowledge of its existence!!!!!
Ack 1 should be displosed of, and Message 2 should wait for its own ack. Where the message / ack format accomodates, the control ids should be compared for a match. For example, in HL7 2.x, ensure the ack's MSA.2 value matches the sent message's MSH.10 value.
Of course, longer wait times can reduce the risk.
Risk of not fixing:
Patient data can potentially be left unsent, but with the sender believing the opposite to be true.