Example #1
0
        /// <summary>
        /// Creates an instance of a HL7 Message
        /// </summary>
        /// <param name="mesg"></param>
        public HL7Message(string mesg)
        {
            if (mesg.Length < 8)
            {
                throw new ArgumentException("Not a complete HL7 message");
            }
            var mesgHeader = mesg.Substring(0, 8);

            if (mesgHeader.Length < 8)
            {
                throw new ArgumentException("Not a valid HL7 message");
            }

            _segments = new HL7Element(mesg, '\r', ValidatedSeparators(mesgHeader), null);
        }
        /// <summary>
        /// Creates an instance of a HL7 Message
        /// </summary>
        /// <param name="mesg"></param>
        public HL7Message(string mesg)
        {
            if (mesg.Length < 8)
            {
                throw new ArgumentException("Not a complete HL7 message");
            }
            var mesgHeader = mesg.Substring(0, 8);

            if (mesgHeader.Length < 8)
            {
                throw new ArgumentException("Not a valid HL7 message");
            }
            var lineEndings = mesg.LineEnding();
            var separators  = ValidatedSeparators(mesgHeader);

            if (lineEndings.Length > 0)
            {
                separators = lineEndings[0] + separators.Substring(1);
            }

            _segments = new HL7Element(mesg, separators[0], separators, null);
        }
 public int SetField(int index, HL7Element value)
 {
     return(this.SetElement(value, index) - 1);
 }
 public HL7Segment(string data, char separator, string separators = Constants.Separators, HL7Element owner = null)
 {
     AddStringElements(data, separator, separators, owner);
 }
        /// <summary>
        /// Returns a specific field based on selection Criteria
        /// NOTE: Selection Criteria can be a string such as "MSH.1.16[2]" or an array of Selection Criteria Elements
        /// </summary>
        /// <param name="criteria"></param>
        /// <returns></returns>
        public HL7Element Element(SearchCriteria criteria)
        {
            var nullSegment = new HL7Element("", '|');

            // Locate required Segment
            if (criteria == null || criteria.Segment == null)
            {
                return(null);
            }
            var segmentElements = AllSegments(criteria.Segment);
            var targetRow       = (criteria.SegmentRepetition > 0) ? criteria.SegmentRepetition - 1 : 0;

            if (targetRow > segmentElements.Count - 1)
            {
                return(nullSegment);                                       // not found;
            }
            var result = segmentElements[targetRow];

            //Field
            // Does the position need a header Ajustment (Eg MSH,BHS, FSH)
            if (!criteria.Field.Enabled)
            {
                return(segmentElements[targetRow]);                          //wants only the full segment
            }
            var headerAdjustment = (Constants.HeaderTypes.Any(h => h.Equals(criteria.Segment))) ? 1 : 0;

            result = result[criteria.Field.Position - headerAdjustment];
            if (criteria.Field.Repetition == -1)
            {
                return(result);
            }
            if (criteria.Field.Repetition > result.Count)
            {
                return(nullSegment);
            }

            var rep = ((criteria.Field.Repetition < 2) ? 1 : criteria.Field.Repetition) - 1;

            if (rep < result.Count)
            {
                result = result[rep];
            }


            //Component
            if (!criteria.Component.Enabled || criteria.Component.Repetition == -1 ||
                (result.Count == 0 && criteria.Component.Position < 2))
            {
                return(result);
            }
            if (criteria.Component.Position > result.Count)
            {
                return(nullSegment);
            }
            result = result[criteria.Component.Position - 1];

            //SubComponent
            if (!criteria.Subcomponent.Enabled || criteria.Subcomponent.Repetition == -1 ||
                (criteria.Subcomponent.Position < 2 && result.Count == 0))
            {
                return(result);
            }
            if (criteria.Subcomponent.Position > 1 && criteria.Component.Position > result.Count)
            {
                return(nullSegment);
            }
            result = result[criteria.Subcomponent.Position - 1];

            return(result);
        }