/** * \brief <b>Brief Description</b> - Billing<b> <i>class method</i></b> - This will analyze the response file sent from the Ministry of Health. * \details <b>Details</b> * * The Ministry of Health will provide a response file to any submitted MonthlyBillingFile. The file will be analyzed to look for * codes sent back from the ministry. It will look for codes; <i>PAID</i>, <i>DECL(Declined)</i>, <i>FHCV(Failed Validation)</i>, <i>CMOH(Contact MoH)</i>. * It will update the monthly summary and will also flag the appointments for review if the code sent back is <b>FHCV</b> or <b>CMOH</b>. * * \return - <b>List<string></string></b> - this method will return the summarized monthly bill summary */ public List <string> ReconcileMonthlyBilling(string monthFilePath = "govFile.txt") { string[] fn = monthFilePath.Split('\\'); string tmpYear = fn.Last().Substring(0, 4); string tmpMonth = fn.Last().Substring(4, 2); double totalBilled = 0; double totalRcvd = 0; int totalFlagged = 0; Dictionary <string, string[]> reconciledAppointment = FileIO.GetTableFromFile(monthFilePath, FileIO.FileInputFormat.GovernmentResponse); Dictionary <string, double> theSummary = new Dictionary <string, double>(); List <string> theSummaryDisplayed = new List <string>(); theSummary.Add("TotalEncounters", reconciledAppointment.Count); foreach (KeyValuePair <string, string[]> data in reconciledAppointment) { try { totalBilled = totalBilled + (Convert.ToDouble(data.Value[4])); if (data.Value[5] == "PAID") { totalRcvd = totalRcvd + (Convert.ToDouble(data.Value[4])); } else if (data.Value[5] == "FHCV" || data.Value[5] == "CMOH") { totalFlagged++; flaggedEncounters.Add(data.Value); } } catch (FormatException f) { Logging.Log(f, "Billing", "ReconcileMonthlyBilling", "FAILED CONVERTING STRING TO DOUBLE - EXCEPTION"); } catch (OverflowException o) { Logging.Log(o, "Billing", "ReconcileMonthlyBilling", "FAILED CONVERTING STRING TO DOUBLE - EXCEPTION"); } } totalBilled = totalBilled / 10000; totalRcvd = totalRcvd / 10000; theSummary.Add("TotalBilled", totalBilled); theSummaryDisplayed.Add("Total Billed : " + totalBilled.ToString("C2", CultureInfo.CurrentCulture)); theSummary.Add("TotalReceived", totalRcvd); theSummaryDisplayed.Add("Total Received : " + totalRcvd.ToString("C2", CultureInfo.CurrentCulture)); theSummary.Add("ReceivedPercentage", ((totalRcvd / totalBilled) * 100)); theSummaryDisplayed.Add("Received Percentage : " + ((totalRcvd / totalBilled) * 100).ToString("C2", CultureInfo.CurrentCulture)); theSummary.Add("AverageBilling", (totalRcvd / reconciledAppointment.Count)); theSummaryDisplayed.Add("Average Billing : " + (totalRcvd / reconciledAppointment.Count).ToString("C2", CultureInfo.CurrentCulture)); theSummary.Add("NumberOfFollowUps", totalFlagged); theSummaryDisplayed.Add("Number of Follow Ups : " + totalFlagged.ToString()); Demographics demographics = new Demographics(); foreach (string[] s in flaggedEncounters) { Patient p = demographics.GetPatientByHCN(s[1]); if (p != null) { theSummaryDisplayed.Add(string.Format("{0} - {1},{2} - {3}", s[0], p.LastName, p.FirstName, s[3])); } } Logging.Log("Billing", "ReconcileMonthlyBilling", ("Summary displayed for Month: " + tmpMonth + " Year: " + tmpYear)); return(theSummaryDisplayed); }