예제 #1
0
        void parse(RdfSegment rdfSeg, string rawSeg)
        {
            string[] flds = StringUtils.split(rawSeg, EncodingChars.FieldSeparator);

            if (flds.Length != rdfSeg.Columns.Length + 1)
            {
                throw new Exception("Invalid RDT segment: incorrect number of columns");
            }

            if (flds[0] != "RDT")
            {
                throw new Exception("Invalid RDT segment: incorrect header");
            }

            columns = new RdtColumn[rdfSeg.Columns.Length];
            for (int i = 0; i < rdfSeg.Columns.Length; i++)
            {
                string[] columnValues = getColumnValues(flds[i + 1]);
                if (columnValues == null || columnValues.Length == 0)
                {
                    columns[i] = new RdtColumn(rdfSeg.Columns[i].Description);
                }
                else if (columnValues.Length == 1)
                {
                    columns[i] = new RdtColumn(rdfSeg.Columns[i].Description, columnValues[0]);
                }
                else
                {
                    columns[i] = new RdtColumn(rdfSeg.Columns[i].Description, columnValues);
                }
            }
        }
        public Patient getPatient(int rdtIdx)
        {
            if (RDT == null)
            {
                return(null);
            }
            if (QAK.QueryResponseStatus != "OK")
            {
                return(null);
            }
            if (rdtIdx > RDT.Length)
            {
                throw new IndexOutOfRangeException("Only " + RDT.Length + " RDTs");
            }
            Patient result = new Patient();

            RdtColumn column  = RDT[rdtIdx].getColumn(MpiConstants.LASTNAME_FLDNAME);
            string    patname = column.Values[0];

            column = RDT[rdtIdx].getColumn(MpiConstants.FIRSTNAME_FLDNAME);
            if (column.Values != null && !StringUtils.isEmpty(column.Values[0]))
            {
                patname += ',' + column.Values[0];
            }
            column = RDT[rdtIdx].getColumn(MpiConstants.MIDDLENAME_FLDNAME);
            if (column.Values != null && !StringUtils.isEmpty(column.Values[0]))
            {
                patname += ' ' + column.Values[0];
            }
            column = RDT[rdtIdx].getColumn(MpiConstants.NAMESUFFIX_FLDNAME);
            if (column.Values != null && !StringUtils.isEmpty(column.Values[0]))
            {
                patname += ' ' + column.Values[0];
            }
            result.Name = new PersonName(patname);

            column     = RDT[rdtIdx].getColumn(MpiConstants.SSN_FLDNAME);
            result.SSN = new SocSecNum(column.Values[0]);

            column = RDT[rdtIdx].getColumn(MpiConstants.ICN_FLDNAME);
            string[] parts = StringUtils.split(column.Values[0], 'V');
            result.MpiPid      = parts[0];
            result.MpiChecksum = parts[1];

            column = RDT[rdtIdx].getColumn(MpiConstants.DOB_FLDNAME);
            if (column.Values != null && !StringUtils.isEmpty(column.Values[0]))
            {
                result.DOB = column.Values[0];
            }

            column = RDT[rdtIdx].getColumn(MpiConstants.SEX_FLDNAME);
            if (column != null && column.Values != null)
            {
                result.Gender = column.Values[0];
            }

            column = RDT[rdtIdx].getColumn(MpiConstants.DECEASEDDATE_FLDNAME);
            if (column.Values != null && !StringUtils.isEmpty(column.Values[0]))
            {
                result.DeceasedDate = column.Values[0];
            }

            column = RDT[rdtIdx].getColumn(MpiConstants.SITES_FLDNAME);
            if (column != null && column.Values != null && column.Values.Length > 0)
            {
                ArrayList lst = new ArrayList(column.Values.Length);
                for (int i = 0; i < column.Values.Length; i++)
                {
                    parts = StringUtils.split(column.Values[i], StringUtils.CARET);
                    if (parts[0].Length == 3 && StringUtils.isNumeric(parts[0]) && parts[0] != "003")
                    {
                        SiteId s = new SiteId(parts[0], "", "", "");
                        if (parts.Length > 2)
                        {
                            s = new SiteId(parts[0], "", parts[1], parts[2]);
                        }
                        lst.Add(s);
                    }
                }
                result.SiteIDs = (SiteId[])lst.ToArray(typeof(SiteId));
            }

            column = RDT[rdtIdx].getColumn(MpiConstants.CMOR_FLDNAME);
            if (column != null && !StringUtils.isEmpty(column.Values[0]))
            {
                result.CmorSiteId = column.Values[0];
            }

            return(result);
        }