예제 #1
0
        public static MessageType getMessageType(HL7Message message, string hl7Input)
        {
            if (hl7Input == BLANK)
            {
                throw new ArgumentException(ERROR_NO_MESSAGE_TYPE);
            }

            Dictionary <string, MessageType> messageTypeDictionary = new Dictionary <string, MessageType>()
            {
                { MESSAGE_TYPE_ADT, MessageType.ADT },
                { MESSAGE_TYPE_ORM, MessageType.ORM },
                { MESSAGE_TYPE_ORU, MessageType.ORU },
                { MESSAGE_TYPE_SIU, MessageType.SIU },
                { MESSAGE_TYPE_UNK, MessageType.UNKNOWN }
            };

            // get the message type based on the configuration value
            MessageType result;

            messageTypeDictionary.TryGetValue(HL7MessageUtility.getValueByPosition(message,
                                                                                   SegmentType.MSH,
                                                                                   MESSAGE_TYPE_POSITION),
                                              out result);

            // based on the configuration file, we'll return the message type
            return(result);
        }
예제 #2
0
        private static string getHL7ValueSEL(HL7Message message,
                                             List <MessageGroupInstance> messageGroupInstances,
                                             List <MessageGroup> messageGroups,
                                             WebservicePropertySet wsProperty
                                             )
        {
            // get the ms groups
            List <MessageGroup> msGroups
                = ConfigurationUtility.GetIncomingWebserviceMessageGroup(wsProperty, messageGroups);

            // get segment string type
            MessageGroupInstance messageGroupInstance
                = messageGroupInstances.Find(i => i.id == msGroups[ZERO].messageGroupInstanceId);

            // get the message position for this specific column
            List <Configuration> configMessagePoisition
                = ConfigurationDAO.GetMessagePosition(messageGroupInstance);

            // get the coordinates for the message item
            string messageCoordinates = HL7MessageUtility.getItemCoordinates(configMessagePoisition);

            // get segment string type
            string segmentType = configMessagePoisition[ZERO_ELEMENT].segmentType.name;

            // get the value for the database inside of the value position
            string hl7Value = HL7MessageUtility.getValueByPosition(
                message,
                HL7MessageUtility.getSegmentType(segmentType),
                messageCoordinates);

            return(hl7Value);
        }
예제 #3
0
        private static string getReportText(HL7Message hl7Message)
        {
            string         html       = BLANK;
            string         obxData    = BLANK;
            List <Segment> segments   = new List <Segment>();
            List <String>  reportText = new List <String>();

            // only return obx segment types
            segments = hl7Message.segments.FindAll(s => s.fields[ZERO_ELEMENT].value == SEGMENT_TYPE_OBX);

            // for each of those obx segments, process report
            segments.ForEach(delegate(Segment segment)
            {
                // get the segment type
                string segmentType = segment.fields[ZERO_ELEMENT].value;

                try
                {
                    obxData = segment.fields[REPORT_TEXT_ELEMENT].value;
                    reportText.Add(obxData);
                }
                catch (Exception ex)
                {
                    // get the message control id to notify user of error
                    string messageControlId = HL7MessageUtility.getValueByPosition(hl7Message,
                                                                                   SegmentType.MSH,
                                                                                   MESSAGE_HEADER_CONTROL_ID);
                    // make a note about it
                    obxData = "Report Segment Cutoff, please resend report, message control id:" + messageControlId;

                    // log error
                    ErrorLogger.LogError(ex, "getReportText(HL7Message hl7Message)", obxData);

                    // add report text
                    reportText.Add(obxData);
                }
            });

            html += REPORT_HTML_HEADER;
            html += String.Join(HTML_LINE_BREAK, reportText.ToArray());
            html += REPORT_HTML_FOOTER;

            return(html);
        }
예제 #4
0
        private static string getReportText(HL7Message hl7Message, bool noAddendum)
        {
            // the random chance someone overrides then puts false instead of true
            if (!noAddendum)
            {
                // do static function w/o override
                return(getReportText(hl7Message));
            }

            // signal the end of capturing text
            bool endOfReport = false;

            string html          = BLANK;
            string obxData       = BLANK;
            string obxReportType = BLANK;
            string obxIteration  = BLANK;

            List <Segment> segments   = new List <Segment>();
            List <String>  reportText = new List <String>();

            // only return obx segment types
            segments = hl7Message.segments.FindAll(s => s.fields[ZERO_ELEMENT].value == SEGMENT_TYPE_OBX);

            // for each of those obx segments, process report
            segments.ForEach(delegate(Segment segment)
            {
                // get the segment type
                string segmentType = segment.fields[ZERO_ELEMENT].value;

                try
                {
                    obxData       = segment.fields[REPORT_TEXT_ELEMENT].value;
                    obxReportType = segment.fields[REPORT_TYPE_ELEMENT].value;
                    obxIteration  = segment.fields[REPORT_ITERATION_ELEMENT].value;

                    // if we find addendum pattern, we then stop
                    if (obxReportType == ADDENDUM && obxIteration != ORIGINAL_REPORT_ITERATION)
                    {
                        endOfReport = true;
                    }

                    if (!endOfReport)
                    {
                        reportText.Add(obxData);
                    }
                }
                catch (Exception ex)
                {
                    // get the message control id to notify user of error
                    string messageControlId = HL7MessageUtility.getValueByPosition(hl7Message,
                                                                                   SegmentType.MSH,
                                                                                   MESSAGE_HEADER_CONTROL_ID);
                    // make a note about it
                    obxData = "Report Segment Cutoff, please resend report, message control id:" + messageControlId;

                    // log error
                    ErrorLogger.LogError(ex, "getReportText(HL7Message hl7Message)", obxData);

                    // add report text
                    reportText.Add(obxData);
                }
            });

            html += REPORT_HTML_HEADER;
            html += String.Join(HTML_LINE_BREAK, reportText.ToArray());
            html += REPORT_HTML_FOOTER;

            return(html);
        }
예제 #5
0
        public static string getAddendumReportText(HL7Message hl7Message, WSShieldsApps.Report report, int addendumId)
        {
            bool           readAddendumText = false;
            string         html             = BLANK;
            string         obxData          = BLANK;
            int            addendumPosition = ZERO;
            List <Segment> segments         = new List <Segment>();
            List <String>  reportText       = new List <String>();

            // only return obx segment types
            segments = hl7Message.segments.FindAll(s => s.fields[ZERO_ELEMENT].value == SEGMENT_TYPE_OBX);

            // for each of those obx segments, process report
            segments.ForEach(delegate(Segment segment)
            {
                try
                {
                    obxData          = segment.fields[REPORT_TEXT_ELEMENT].value;
                    addendumPosition = Convert.ToInt32(segment.fields[REPORT_ITERATION_ELEMENT].value);

                    if (Regex.IsMatch(obxData, ADDENDUM_PATTERN_MATCH_BEGIN))
                    {
                        if (addendumPosition == addendumId)
                        {
                            // override the addendum report obx date
                            var addendumObservationDate = segment.fields[REPORT_OBX_DTTM].components[FIRST_ELEMENT].value;
                            // set the obx date
                            report.ObservationDate = hl7DateToRealDateTime(addendumObservationDate);
                            // update the addendum text flag to true
                            readAddendumText = true;
                        }
                    }
                    else if (Regex.IsMatch(obxData, ADDENDUM_PATTERN_MATCH_END))
                    {
                        readAddendumText = false;

                        // still add the end text
                        reportText.Add(obxData);
                    }

                    // if we read, we add to the list of text
                    if (readAddendumText)
                    {
                        reportText.Add(obxData);
                    }
                }
                catch (Exception ex)
                {
                    // get the message control id to notify user of error
                    string messageControlId = HL7MessageUtility.getValueByPosition(hl7Message,
                                                                                   SegmentType.MSH,
                                                                                   MESSAGE_HEADER_CONTROL_ID);
                    // make a note about it
                    obxData = "Report Segment Cutoff, please resend report, message control id:" + messageControlId;

                    // log error
                    ErrorLogger.LogError(ex, "getAddendumReportText(HL7Message hl7Message)", obxData);

                    // add report text
                    reportText.Add(obxData);
                }
            });

            html += REPORT_HTML_HEADER;
            html += String.Join(HTML_LINE_BREAK, reportText.ToArray());
            html += REPORT_HTML_FOOTER;

            return(html);
        }