Beispiel #1
0
        static void FinishTheEdits(int _lastConflict, string _claimNo, Dictionary <string, ClaimLinesIndex> _claimLinesList, Dictionary <string, Findings> _dic, int errLine)
        {
            string startId = _claimNo + "|" + (_lastConflict + 1).ToString();
            string endId   = _claimNo + "|z";

            foreach (var pair in _claimLinesList)
            {
                if (pair.Key.CompareTo(startId) >= 0 && pair.Key.CompareTo(endId) < 0)
                {
                    ClaimLinesIndex _cli = pair.Value;
                    if (_cli.hasDU)
                    {
                        Findings findings = new Findings();
                        findings.id          = _claimNo;
                        findings.claimIndex  = _cli.claimIndex;
                        findings.editType    = "Review";
                        findings.mnemonic    = "mMP";
                        findings.editConflit = "mMP";
                        findings.description = "PNS3 Multiple Procedure Reduction " + _cli.percentage;
                        try
                        {
                            _dic.Add(String.Format("{0}{1}{2}", _claimNo, _cli.claimIndex, (++errLine).ToString()), findings);
                        }catch (Exception mex)
                        {
                            log.LogError("In FinishTheEdits " + mex.Message);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        static bool IsCleanClaim(string _claimNo, Dictionary <string, ClaimLinesIndex> _claimLinesList)
        {
            bool findings = true;
            //string _claimNo = _findings.id;

            string startId = (_claimNo + "|0").ToString();
            string endId   = _claimNo + "|z";
            int    results = 0;

            if (_claimNo.Equals("20170309T33K00018"))
            {
                results = 0;
            }
            foreach (var pair in _claimLinesList)
            {
                if (pair.Key.CompareTo(_claimNo) >= 0 && pair.Key.CompareTo(endId) < 0)
                {
                    ClaimLinesIndex _cli = pair.Value;
                    // if (!_cli.claimIndex.Equals("0") )
                    //    results++;
                    if (_cli.hasDU)
                    {
                        findings = false;
                    }
                }
            }
            if (results > 1)
            {
                findings = false;
            }
            return(findings);
        }
Beispiel #3
0
        static void MergeFindings(Dictionary <string, Findings> _dic, Dictionary <string, ClaimLinesIndex> _claimLinesList, List <string> _thisRun)
        {
            string lastClaim = String.Empty;
            int    errLine   = 0;

            foreach (var pair in _claimLinesList)
            {
                ClaimLinesIndex _cli = pair.Value;
                if (!_thisRun.Contains(_cli.claim))
                {
                    continue;
                }
                if (_cli.claim.CompareTo(lastClaim) != 0)
                {
                    errLine = 0;
                }
                if (_cli.percentage != null)
                {
                    Findings findings = new Findings();
                    findings.id          = _cli.claim;
                    findings.claimIndex  = _cli.claimIndex;
                    findings.editType    = "Review";
                    findings.mnemonic    = "mMP";
                    findings.editConflit = "mMP";
                    findings.description = "PNS4 Multiple Procedure Reduction " + _cli.percentage;
                    try
                    {
                        _dic.Add(String.Format("{0}{1}{2}", _cli.claim, _cli.claimIndex, (++errLine).ToString()), findings);
                    }catch (Exception mex)
                    {
                        log.LogError("MergeFindings " + mex.Message);
                    }
                }
            }
        }
Beispiel #4
0
        static void SplitFiles(string _file, string _network, SqlConnection _con)
        {
            TextReader tr        = File.OpenText(_file);
            string     fileName  = Path.GetFileName(_file);
            int        fileCount = 1;

            log.LogInformation(String.Format("Spliting File {0}", _file));
            string     workingFile = String.Format(@"{0}\WORKING\{1}.{2}", _network, fileName, fileCount.ToString("000"));
            TextWriter tw          = null;

            try
            {
                tw = File.CreateText(workingFile);
            }
            catch (Exception ex)
            {
                log.LogError(String.Format("SplitFiles Create File {0}", ex.Message));
            }
            string          line       = "";
            int             lineNo     = 0;
            int             claimCount = 0;
            ClaimLinesIndex _cl;

            _cl       = new ClaimLinesIndex();
            _cl.claim = null;
            _cl.hasDU = false;
            string diagnosis   = "";
            string procedure   = "";
            string description = "";
            int    icdVersion  = 9;

            log.LogInformation(String.Format("Working file {0}", workingFile));
            int    surgicalCount   = 0;
            string surguryStarts   = "123456";
            string lastServiceDate = "";

            try
            {
                while ((line = tr.ReadLine()) != null)
                {
                    line = line.TrimStart();
                    if (line.StartsWith(@"<?xml") || line.StartsWith(@"<claims"))
                    {
                        tw.WriteLine(line);
                    }
                    else
                    {
                        if (line.StartsWith(@"<icd9v1></icd9v1>") || line.StartsWith(@"<modifier></modifier>") || line.StartsWith(@"<icd10cm></icd10cm"))
                        {
                            continue;
                        }
                        if (!line.StartsWith("<lineno"))
                        {
                            tw.WriteLine(line);
                        }

                        if (line.Contains(@"icd9v1") || line.Contains(@"icd10cm"))
                        {
                            if (line.Contains(@"icd10cm"))
                            {
                                icdVersion = 10;
                            }
                            else
                            {
                                icdVersion = 9;
                            }

                            //diagnosis = GetValue(line);
                        }
                        if (line.StartsWith("<service-begin-date>"))
                        {
                            if (lastServiceDate.CompareTo(GetValue(line)) != 0)
                            {
                                lastServiceDate = GetValue(line);
                                if (surgicalCount > 0)
                                {
                                    surgicalCount = 0;
                                }
                            }
                        }
                        if (line.StartsWith("<diagnostic-code>"))
                        {
                            diagnosis = GetValue(line);
                            _cl.diag  = diagnosis;
                        }

                        if (line.StartsWith(@"<procedure-code"))
                        {
                            procedure = GetValue(line);
                            _cl.cpt   = procedure;
                            _cl.hasDU = false;

                            // this is a surgery
                            if (surguryStarts.IndexOf(procedure.Substring(0, 1)) >= 0)
                            {
                                if (!gCPTExclusions.Contains(procedure))
                                {
                                    surgicalCount++;
                                    if (surgicalCount > 1)
                                    {
                                        _cl.hasDU      = true;
                                        _cl.percentage = "";
                                        switch (surgicalCount)
                                        {
                                        case 1:     /* doing nothing here to avoid default */
                                            break;

                                        case 2: _cl.percentage = p2;
                                            break;

                                        case 3: _cl.percentage = p3;
                                            break;

                                        case 4: _cl.percentage = p4;
                                            break;

                                        case 5: _cl.percentage = p5;
                                            break;

                                        default: _cl.percentage = p6;
                                            break;
                                        }
                                    }
                                }
                            }
                        }

                        if (line.StartsWith(@"<claim id="))
                        {
                            _cl       = new ClaimLinesIndex();
                            _cl.claim = GetClaimID(line);
                            if (_cl.claim.CompareTo("20170309T33K00018") == 0)
                            {
                                _cl.hasDU = false;
                            }
                            _cl.hasDU      = false;
                            _cl.percentage = null;
                            lineNo         = 0;
                            claimCount++;
                            surgicalCount   = 0;
                            lastServiceDate = "";
                        }

                        if (line.StartsWith("<claim-line"))
                        {
                            diagnosis   = "";
                            procedure   = "";
                            description = "";
                            lineNo++;
                        }


                        if (line.StartsWith("<lineno"))
                        {
                            _cl.claimIndex = GetClaimIndex(line);
                            _cl.lineNo     = lineNo.ToString();
                            _cl.key        = String.Format("{0}|{1}", _cl.claim, _cl.lineNo);
                            _cl.hasDU      = false;
                            _cl.percentage = null;
                            continue;
                        }

                        if (line.StartsWith(@"</claim-line"))
                        {
                            claimLinesList.Add(_cl.key, _cl);
                        }



                        if (claimCount == 100 && line.StartsWith(@"</claim>"))
                        {
                            tw.WriteLine(@"</claims>");
                            tw.Flush();
                            tw.Close();
                            workingFile = String.Format(@"{0}\WORKING\{1}.{2}", _network, fileName, (++fileCount).ToString("000"));
                            tw          = File.CreateText(workingFile);
                            tw.WriteLine(@"<?xml version='1.0' encoding='UTF-8'?>");
                            tw.WriteLine(@"<claims>");
                            claimCount = 0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.LogError(String.Format("Exception in SplitFiles {0}", ex.Message));
            }
            tw.Close();
            tr.Close();
        }
Beispiel #5
0
        static void SendFiles(string _fileName, string _dir)
        {
            TextWriter tw = null;

            var dic = new Dictionary <string, Findings>();

            if (optumFindings == null)
            {
                optumFindings = new List <Findings>();
            }
            else
            {
                optumFindings.Clear();
            }


            List <string> thisRun     = new List <string>();
            int           loop        = 0;
            int           lineCounter = 0;

            try
            {
                log.LogInformation(String.Format("In SendFiles {0} {1}", _fileName, _dir));
                string     user         = "******";
                string     password     = "******";
                string     claimsDotXml = _fileName;
                WebRequest req          = WebRequest.Create("https://realtimeecontent.com/ws/claims5x");

                req.Method      = "POST";
                req.ContentType = "application/xml";
                req.Credentials = new NetworkCredential(user, password);
                FileStream fs       = new FileStream(claimsDotXml, FileMode.Open);
                string     outFile  = String.Format(@"{0}\OUT\{1}.out", _dir, Path.GetFileName(_fileName));
                string     outFile2 = String.Format(@"{0}\OUT\{1}2.out", _dir, Path.GetFileName(_fileName));

                if (File.Exists(outFile))
                {
                    File.Delete(outFile);
                }

                log.LogInformation(String.Format("Creating File {0} ", outFile));
                tw = File.CreateText(outFile);


                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                using (Stream reqStream = req.GetRequestStream())
                {
                    byte[] buffer    = new byte[1024];
                    int    bytesRead = 0;
                    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        reqStream.Write(buffer, 0, bytesRead);
                    }
                    fs.Close();
                }

                System.Net.HttpWebResponse resp = req.GetResponse() as System.Net.HttpWebResponse;
                if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    System.Xml.XPath.XPathDocument  xmlDoc = new System.Xml.XPath.XPathDocument(resp.GetResponseStream());
                    System.Xml.XPath.XPathNavigator nav    = xmlDoc.CreateNavigator();
                    //Console.WriteLine("Claim A5 had {0} Edits.", nav.Evaluate("count(/claim-responses/claim-response[@claim-id='43']/edit)"));
                    //Console.WriteLine(nav.Evaluate("/claim-responses/claim-response/edit"));
                    lineCounter++;
                    loop = 1;
                    XPathNodeIterator xPathIterator = nav.Select("/claim-responses//claim-response");
                    int    errLine = 0;
                    int    lastConflictFound = 0, iClaimLine = 0;
                    string lastClaim = "";
                    foreach (XPathNavigator claimResponse in xPathIterator)
                    {
                        XPathNavigator onav = claimResponse.SelectSingleNode("@claim-id");
                        string         id   = onav == null ? string.Empty : onav.Value;

                        try {
                            thisRun.Add(id);
                        }catch (Exception mex)
                        {
                            log.LogError(mex.Message);
                        }

                        if (id.CompareTo("20170309T33K00018") == 0)
                        {
                            errLine = 0;
                        }

                        XPathNodeIterator ixPathIterator = claimResponse.Select("edit");
                        bool hasEdits  = false;
                        int  noOfEdits = 0;
                        foreach (XPathNavigator editLines in ixPathIterator)
                        {
                            hasEdits = true;
                            noOfEdits++;
                            onav = editLines.SelectSingleNode("@line");
                            string claimLine = onav == null ? string.Empty : onav.Value;
                            string key       = id.Trim() + "|" + claimLine.Trim();

                            ClaimLinesIndex _cli;
                            try
                            {
                                iClaimLine = int.Parse(claimLine);
                            }
                            catch (Exception ex)
                            {
                                iClaimLine = 0;
                            }
                            if (iClaimLine > lastConflictFound)
                            {
                                string myId = "";
                                lastConflictFound = iClaimLine;
                            }

                            XPathNavigator inav        = editLines.SelectSingleNode("description");
                            string         description = editLines == null ? string.Empty : inav.Value;

                            //if (description.Contains("[Pattern 10372]"))
                            //    hasEdits = false;

                            //inav = editLines.SelectSingleNode("edit-conflict");
                            string editConflict = ""; // editLines == null ? string.Empty : inav.Value;

                            inav = editLines.SelectSingleNode("edit-type");
                            string editType = editLines == null ? string.Empty : inav.Value;

                            inav = editLines.SelectSingleNode("mnemonic");
                            string mnemonic = editLines == null ? string.Empty : inav.Value;


                            Findings opFind = new Findings();
                            opFind.id          = id;
                            opFind.lineNo      = claimLine;
                            opFind.editType    = editType;
                            opFind.mnemonic    = mnemonic;
                            opFind.editConflit = editConflict;
                            opFind.description = description;
                            optumFindings.Add(opFind);


                            if (!claimLinesList.ContainsKey(key))
                            {
                                log.LogError(String.Format("The claim does not contain {0}", key));
                                _cli            = new ClaimLinesIndex();
                                _cli.claim      = id;
                                _cli.hasDU      = true;
                                _cli.lineNo     = "-99";
                                _cli.claimIndex = "-99";
                            }
                            else
                            {
                                _cli = claimLinesList[key];
                            }
                            if (!_cli.hasDU)
                            {
                                if (!description.Contains("50.0%")) // Ignore Optum
                                {
                                    Findings findings = new Findings();
                                    findings.id          = id;
                                    findings.claimIndex  = _cli.claimIndex;
                                    findings.editType    = editType;
                                    findings.mnemonic    = mnemonic;
                                    findings.editConflit = editConflict;
                                    findings.description = description;
                                    try {
                                        dic.Add(String.Format("{0}{1}{2}", id, _cli.claimIndex, (++errLine).ToString()), findings);
                                    }catch (Exception mex)
                                    {
                                        log.LogError(mex.Message);
                                    }
                                }
                                else
                                {
                                    if (noOfEdits == 1) // this is the only edit for the claim and it's a wrong one mMP
                                    {
                                        hasEdits = false;
                                    }
                                    noOfEdits--;
                                }
                            }
                        }
                        if (hasEdits == false)
                        { // claim does not have any edits
                          //string percentage = "";
                          //ClaimLinesIndex _cli;
                          //int found = 0;

                            //if (found == 0)
                            //{
                            if (IsCleanClaim(id, claimLinesList))
                            {
                                Findings findings = new Findings();
                                findings.id          = id;
                                findings.claimIndex  = "0";
                                findings.editType    = "";
                                findings.mnemonic    = "";
                                findings.editConflit = "";
                                findings.description = "";
                                try {
                                    dic.Add(String.Format("{0}{1}{2}", id, findings.claimIndex, (++errLine).ToString()), findings);
                                }catch (Exception mex)
                                {
                                    log.LogError(mex.Message);
                                }
                            }

                            //tw.WriteLine("************ Claim {0} is clean ********", id);
                            //}
                        }
                    }
                    //FinishTheEdits(lastConflictFound - 1, lastClaim, claimLinesList, dic, errLine);
                }
                ReviewClaimLineList(tw);
                optumFindings.Clear();
                dic.Clear();
                dic = null;
                tw.Close();
            }
            catch (Exception ex)
            {
                log.LogError(String.Format("Sending Files {0}", ex.Message));
            }
            finally
            {
                //claimLinesList.Clear();
                thisRun.Clear();
            }
        }