Eric’s BizTalk 2004/2006 Blog

My BizTalk Experiences using Flat Files, InfoPath, BAM, BRE, BAS, HL7, HIPAA, WSS.

April 6, 2006

Understanding how BizTalk handles HL7 Acknowledgments

Filed under: BizTalk, HL7 — eric @ 9:14 pm

Inside of the Hl7 Configuration Explorer, the tab for Acknowledgments, most of the fields in there were foreign when I first started dealing with HL7, so below is a list of the values and what they mean.

Acknowedgment Type:

None
Select this if you do not want to configure any acknowledgements. This does not mean that it will turn off acknowledgments if the message comes in with MSH 15 with anything other than NE. In that case the pipeline will create an acknowledgment regardless.
Original
Select this option to override
MSH1 – Field Separator
MSH2 – Encoding Characters
MSH3 – Sender Identifiers
MSH5 – Receiver Identifiers
MSH8 – Security options only
Enhanced
Select this option to override all available acknowledgement options.   

AL
Select this option if you always want to send acknowledgements.
NE
Select this option if you never want to send acknowledgements.
SU
Select this option if you want to send acknowledgements after a successful transmission of a message.
ER
Select this option if you want to send acknowledgements only in the event of an error.

MSH1 – Field Separator
MSH2 – Encoding Characters
MSH3 – Sender Identifiers
MSH5 – Receiver Identifiers
MSH8 – Security options only

Deferred
Select this option to override
MSH1 – Field Separator
MSH2 – Encoding Characters
MSH3 – Sender Identifiers
MSH5 – Receiver Identifiers
MSH8 – Security options only
Static
Select this option to configure the On success and On failure acknowledgement options.

All of these entries that can be made in the Original, Enhanced, and Defferred Mode, if you do not place data in MSH3 and MSH5, it will automatically reverse them on the acknowledgment. 

There was two scenerios that I will discuss that I seem to find that are common.

  1. The interface is always requiring one acknowledgment, but that one acknowledgment needs to be either a NAck because of structural problems, or if there are no structural issues, then the Ack (or NAck) needs to then comes from BizTalk.
    • It was set up in the Acknowedgment tab to be running in Enhanced Mode
    • I set the MSH15 to be ER, so that if the pipeline came across parsing errors, and automatic NAck will be produced and sent back to the sending interface
    • In the Orchestration that consumed the message, the recieve shape had a filter of BTAHL7.ParseError==false so that it would not consume a unparsed message and interpret it incorrectly
    • At the conclusion of the Orchestration, I had three different Construct Shapes that created either an Ack (MSA1 AA), Warning Ack (MSA1 AR), and NAck (MSA1 AE) and sent it back to the sending interface.
  2. Another client had a system that required an acknowledgment with MSA1 as AA; any other code it would simply resend the message before sending the next message.
    • There was a flat file pipeline that consumed the original message, and sent it to an orchestration that created a multipart message that sent back a Positive Ack, then dropped the message for the ‘real’ parsing by the 2X pipeline dissassembler.
    • This second pass would then be consumed by the real work orchestration that would make a decision based on the BTAHL7.ParseError flag to send the original message and the subsequent NAck to a sharepoint site.
    • If there were no parse errors, then it would successfully process the messages. 

2 Comments

  1. What about systems that respond to an incoming order message (i.e. ORM) by acknowledging with an ORR message (i.e. General Order Response)? There’s almost zero discussion on this scenario in the Biztalk HL7 community.

    Comment by Tim — June 20, 2006 @ 2:28 pm

  2. Tim,
    You are right, actually, come to think of it, I am still trying to find the BizTalk HL7 communinity you are talking about!

    For this, there is definately a way to accomplish this within the Orchestration. Just off the top of my head, this is what I would imagine you would need to do.
    1. Create a one-way port in your orchestration. The request component would be the ORM, and would be the initializaion correllation set.
    2. Then there would be a parallel shape that would have the ACK message using the MSA control number as the following correllation set.
    3. The ORR message would also have the following correllation set to pick up the message.

    I have just comitted to working on this exact situation that you are talking about. If you have done something already, let me know, otherwise, I will blog about it in a month or two (when I have time).

    Eric

    Comment by eric — June 20, 2006 @ 2:53 pm

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.