示例#1
0
        /// <summary>
        /// Validate - Validate the required fields for the given object
        ///            make this call after the hl7 segment string has been set
        /// </summary>
        /// <param name="seg">NTE object</param>
        /// <returns>list<SegmentError></returns>
        private List <SegmentError> Validate(NTE seg, HL7Encoding _encode)
        {
            const string        fnName    = "Validate";
            List <SegmentError> segErrors = new List <SegmentError>();

            try
            {
                foreach (var rqFld in seg.RequiredFields)
                {
                    if (rqFld.IsRequired)
                    {
                        Object obj = GetField(_encode, seg.SegmentMsg, rqFld.FieldIdx);
                        if (string.IsNullOrEmpty((string)obj))
                        {
                            segErrors.Add(new SegmentError(rqFld.HL7Segment, rqFld.FieldName, string.Format("{0}:{1} - field {2} Value is required cannot be null", modName, fnName, rqFld.FieldName)));
                            break;                              // leave
                        }
                        switch (rqFld.FieldType.ToLower())
                        {
                        case "int":
                            bool bAns = int.TryParse(((string)obj), out int nValue);
                            if (!bAns)
                            {
                                segErrors.Add(new SegmentError(rqFld.HL7Segment, rqFld.FieldName, string.Format("{0}:{1} - field {2} type is 'int' value is required cannot be null", modName, fnName, rqFld.FieldName)));
                            }
                            break;

                        case "string":
                            string sTmp = (string)obj;
                            // check if string is greate than fieldLength
                            if (sTmp.Length > rqFld.FieldLength)
                            {
                                segErrors.Add(new SegmentError(rqFld.HL7Segment, rqFld.FieldName, string.Format("{0}:{1} - field {2} type is 'string' value is greater than max size {3}", modName, fnName, rqFld.FieldName, rqFld.FieldLength)));
                            }
                            if (rqFld.FieldName.Equals(MshElements.MessageType.ToString()) && "MSH".Equals(seg.SegmentMsg))
                            {
                                // split the string ORM^O01.   Validate ORM is first field
                                if (!"ORM^O01".Equals(sTmp))
                                {
                                    segErrors.Add(new SegmentError(rqFld.HL7Segment, rqFld.FieldName, string.Format("{0}:{1} - Message type must be ORM^O01 : (" + (string)obj + ")", modName, fnName)));
                                }
                            }
                            break;

                        case "date":
                            // the field is a date field but is a string in the HL7 message
                            switch (((string)obj).Length)
                            {
                            case 8:
                            case 12:
                            case 14:
                                // good
                                break;

                            default:
                                segErrors.Add(new SegmentError(rqFld.HL7Segment, rqFld.FieldName, string.Format("{0}:{1} - field {2} type is 'date' value out of range YYYYMMDD, YYYYMMDDHHMM, YYYYMMDDHHMMSS", modName, fnName, rqFld.FieldName)));
                                break;
                            }
                            break;

                        default:
                            segErrors.Add(new SegmentError(rqFld.HL7Segment, rqFld.FieldName, string.Format("{0}:{1} - FieldType ({2}) is undefined", modName, fnName, rqFld.FieldType.ToLower())));
                            break;
                        }
                    }
                }
            }
            catch (Exception exp)
            {
                string sTmp = string.Format("{0}:{1} - EXCEPTION ({2})", modName, fnName, exp);
                segErrors.Add(new SegmentError(seg.Segment, "N/A", sTmp));
            }
            return(segErrors);
        }
示例#2
0
 ///<summary>
 ///Removes the given NTE
 ///</summary>
 public void RemoveNTE(NTE toRemove)
 {
     this.RemoveStructure("NTE", toRemove);
 }
示例#3
0
        public NTE GetNTE(HL7Encoding _encode, string line)
        {
            const string        fnName   = "GetNTE";
            List <SegmentError> segError = null;
            NTE nte  = new NTE();
            int nIdx = 0;

            try
            {
                nte.SegmentMsg = line;
                nte.Segment    = "NTE";
                segError       = Validate(nte, _encode);

                foreach (int i in Enum.GetValues(typeof(NteElements)))
                {
                    nIdx = i;
                    object obj = GetElement(_encode, line, i);
                    if (obj == null)
                    {
                        // check if this a required field
                        string        sTmp1 = ((Gt1Elements)i).ToString();
                        RequiredField rqFld = nte.RequiredFields.Find(x => x.FieldName.Equals(sTmp1));
                        if (rqFld != null && rqFld.IsRequired)
                        {
                            nte.Errors.Add(string.Format("{0}:{1} - WARNING Element ({2}) not found in segment, at field {3}", modName, fnName, ((NteElements)i).ToString(), i));
                        }
                        continue;
                    }
                    switch ((NteElements)i)
                    {
                    case NteElements.Segment:
                        nte.Segment = (string)obj;
                        break;

                    case NteElements.SeqId:
                        if (!string.IsNullOrEmpty((string)obj))
                        {
                            nte.SeqId = int.Parse((string)obj);
                        }
                        break;

                    case NteElements.Source:
                        if (!string.IsNullOrEmpty((string)obj))
                        {
                            nte.Source = (string)obj;
                        }
                        break;

                    case NteElements.Comment:
                        if (!string.IsNullOrEmpty((string)obj))
                        {
                            nte.Comment = (string)obj;
                        }
                        break;

                    default:
                        nte.Errors.Add(string.Format("{0}:{1} - Error element ({2}) not found", modName, fnName, ((NteElements)i).ToString()));
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                string sErr = string.Format("Exception:{0}:{1} - ({2}) {3}", modName, fnName, ((NteElements)nIdx).ToString(), ex);
                nte.Errors.Add(sErr);
                Console.WriteLine(sErr);
            }
            return(nte);
        }