Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }