public void testMSH() { var __msh = new MSH(@"MSH |^ ~\&| ADT1 | MCM | LABADT | MCM | 198808181126 | SECURITY | ADT ^ A01 | MSG00001 | P | 2.4"); var __ack = new ACK(__msh); Console.WriteLine("ACK: {0}", __ack.__ack_string); var __nak = new NAK(__msh, "AF"); Console.WriteLine("NAK: {0}", __nak.__nak_string); __msh = new MSH(@"MSH|^~\&|FrameworkLTC|DELPHI|100|MAYQ|20110802115657||RDE^O11^RDE_O11|36652|P|2.5||||||ASCII|||"); __ack = new ACK(__msh); Console.WriteLine("ACK: {0}", __ack.__ack_string); __nak = new NAK(__msh, "AF"); Console.WriteLine("NAK: {0}", __nak.__nak_string); __msh = new MSH(@"MSH|^~\&|FrameworkLTC|DELPHI|100|MAYQ|20110802115657||RDE ^O11^ RDE_O11|36652|P|2.5||||||ASCII|||"); __ack = new ACK(__msh); Console.WriteLine("ACK: {0}", __ack.__ack_string); __nak = new NAK(__msh, "AF"); Console.WriteLine("NAK: {0}", __nak.__nak_string); }
public void __parse_message(string __data) { HL7Event7MessageArgs __args = new HL7Event7MessageArgs(); string[] __segments; MSH __resp = null; string __response = string.Empty; if (!__data.Contains("\x0B") && !__data.Contains("\x1C")) { // Not our data return; } try { // Clean delivery marks __data = __data.Remove(__data.IndexOf('\v'), 1); __data = __data.Remove(__data.IndexOf('\x1C'), 1); __segments = __data.Split('\r'); __resp = new MSH(__segments[0]); __ui_args.__msh_in = __segments[0]; switch (__resp.Get("MSH.3").ToLower()) { case "frameworkltc": __args.__sa = SendingApplication.FrameworkLTE; break; case "epic": __args.__sa = SendingApplication.Epic; break; default: __args.__sa = SendingApplication.Unknown; break; } // __rx_systype should default to AutoDiscover so we can simultaniously take input from disperate systems. In the // case where systems don't self-identify the value will be specific and screw up if some other system // trys to send anything. Catch it here and deal with it if (__rxsys_type != SendingApplication.AutoDiscover && __args.__sa != __rxsys_type) { if (__args.__sa == SendingApplication.Unknown) { __args.__sa = __rxsys_type; } } } catch { string __error_code = "AR"; __resp = new MSH(@"MSH |^ ~\&|" + __organization + " | " + __processor + "| MALFORMED MESSAGE | BAD MESSAGE | " + DateTime.Now.ToString("yyyyMMddhhmm") + "| 637300 | UNKNOWN | 2 | T | 276 |||||| UNICODE UTF-8 |||||"); NAK __out = new NAK(__resp, __error_code, __organization, __processor); __response = __out.__nak_string; __ui_args.__event_message = "Fatal: Malormed Message"; __ui_args.__msh_out = __out.__clean_nak_string; __logger.Error("HL7 NAK: {0} Failed Messasge: {1}", __response, __data); __write_message_to_endpoint(__response); UpdateErrorUI(this, __ui_args); throw new Exception("FATAL: Malformed Message"); } try { // Figure out what kind of message it is switch (__resp.Get("MSH.9.3")) { case "RDE_O11": case "RDE_011": __ui_args.__event_message = "RDE_011 Message Event"; __args.__raw_data = __data; __args.timestamp = DateTime.Now; RDE_O11MessageEventReceived(this, __args); break; case "OMP_O09": case "OMP_009": case "OMP_OO9": case "OMP_0O9": __ui_args.__event_message = "OMP_O09 Message Event"; __args.__raw_data = __data; __args.timestamp = DateTime.Now; OMP_O09MessageEventReceived(this, __args); break; case "RDS_O13": case "RDS_013": __ui_args.__event_message = "RDS_013 Message Event"; __args.__raw_data = __data; __args.timestamp = DateTime.Now; RDS_O13MessageEventReceived(this, __args); break; case "ADT_A01": case "ADT_AO1": __ui_args.__event_message = "ADT_A01 Message Event"; __args.timestamp = DateTime.Now; __args.__raw_data = __data; ADT_A01MessageEventReceived(this, __args); break; case "ADT_A06": case "ADT_AO6": __ui_args.__event_message = "ADT_A06 Message Event"; __args.timestamp = DateTime.Now; __args.__raw_data = __data; ADT_A01MessageEventReceived(this, __args); break; case "ADT_A08": case "ADT_AO8": __ui_args.__event_message = "ADT_A08 Message Event"; __args.timestamp = DateTime.Now; __args.__raw_data = __data; ADT_A01MessageEventReceived(this, __args); break; case "ADT_A12": __ui_args.__event_message = "ADT_A12 Message Event"; __args.timestamp = DateTime.Now; __args.__raw_data = __data; ADT_A12MessageEventReceived(this, __args); break; default: throw new HL7Exception(201, __resp.Get("MSH.9.3") + " - Unhandled Message Type"); break; } ACK __out = new ACK(__resp, __organization, __processor); __response = __out.__ack_string; __ui_args.__msh_out = __out.__clean_ack_string; __logger.Debug("HL7 ACK: {0}", __response); UpdateEventUI(this, __ui_args); } catch (HL7Exception ex) { string __error_code = "AP"; // Parse the message, look for REJECTED if (ex.Message.Contains("REJECTED")) { __error_code = "AR"; } NAK __out = new NAK(__resp, __error_code, __organization, __processor, ex.Message); __response = __out.__nak_string; __ui_args.__msh_out = __out.__clean_nak_string; __ui_args.__event_message = ex.Message; __logger.Error("HL7 NAK: {0}", __response); __logger.Error("Failed Messasge: {0} Failed Reason: {1}", __data, ex.Message); UpdateErrorUI(this, __ui_args); } catch (Exception ex) { NAK __out = new NAK(__resp, "AP", __organization, __processor, "Unknown Processing Error " + ex.Message); __response = __out.__nak_string; __ui_args.__msh_out = "UnKnown Processing Error"; __ui_args.__event_message = ex.Message; UpdateErrorUI(this, __ui_args); } __write_message_to_endpoint(__response); }