/// <summary> /// Gets the cost quality hospital detail. /// </summary> /// <param name="values">The values.</param> /// <param name="hospital">The hospital.</param> /// <param name="websiteMeasures">The website measures.</param> /// <returns></returns> public static List <CostQualityHospital> GetCostQualityHospitalDetail(List <Tuple <int, int, double> > values, CostQualityHospital hospital, List <WebsiteMeasure> websiteMeasures) { if (values == null) { return(Enumerable.Empty <CostQualityHospital>().ToList()); } return(websiteMeasures.Select(measure => new CostQualityHospital { MeasureId = measure.OriginalMeasure != null ? measure.OriginalMeasure.Id : measure.OverrideMeasure != null ? measure.OverrideMeasure.Id : 0, HospitalId = hospital.HospitalId, CountyId = hospital.CountyId, RegionId = hospital.RegionId, ZipCode = hospital.ZipCode, HospitalType = hospital.HospitalType, // Value = GetValue(values.FirstOrDefault(x => x.Item1 == hospital.HospitalId), measure), Value = GetRate(null, measure.ReportMeasure, hospital.HospitalId), Rate = GetRate(null, measure.ReportMeasure, hospital.HospitalId), }).ToList()); }
/// <summary> /// Outputs the report data files. /// </summary> /// <returns></returns> protected override bool OutputDataFiles() { try { _costQualityDataDir = Path.Combine(CurrentWebsite.OutPutDirectory, "Data", "Base", "CostQualityMeasures"); CreateDir(_costQualityDataDir); _costQualityHospitalDataDir = Path.Combine(CurrentWebsite.OutPutDirectory, "Data", "CostQualityRatings", "Hospital"); CreateDir(_costQualityHospitalDataDir); // Calculate Data in WinQI. try { if (TestWinQISettings()) { CostQualityCalculator = new CostQualityCalculator( ConfigurationService.WinQiConnectionSettings.ConnectionString, ConfigurationService.ConnectionSettings.ConnectionString, CurrentWebsite); CostQualityCalculator.Calculate(); LogMessage("Finished cost quality calculations"); } } catch (Exception ex) { Logger.Write(ex); LogMessage( "A error occurred while preforming cost calculation. Skipping the rest of cost quality calculation.", PubishMessageTypeEnum.Error); return(false); } // Determine which measures to report on. // - Currently we have to family of measures where each family contains 3 Measures each: // - IQI 12, IQI 12_QNTY, IQI 12_COST & // - IQI 14, IQI 14_QNTY, IQI 14_COST // - If the ENTIRE family isn't selected then none in the family should be reported on. var cqrMeasures = CurrentWebsite.Measures .Where(wm => { return (wm.IsSelected && wm.ReportMeasure.Name.EqualsAny( "IQI 12", "IQI 12_QNTY", "IQI 12_COST", "IQI 14", "IQI 14_QNTY", "IQI 14_COST")); }).Select(wm => wm.ReportMeasure).ToList(); var cqrMeasureGroups = cqrMeasures.GroupBy(m => m.Name.Substring(0, 6)); cqrMeasureGroups.ForEach(group => { if (group.Count() != 3) { group.ForEach(gm => cqrMeasures.Remove(gm)); } }); // Get data. var costQualityMeasureDescriptions = CostQualityMeasureDescription.GetCostQualityMeasureDescriptions(this, CurrentWebsite.HasAllAudiences, cqrMeasures); var hospitalIds = CurrentWebsite.Hospitals.Select(x => x.Hospital.Id).ToList(); var costQualityhospitals = CostQualityHospital.GetCostQualityHospitals(this, string.Join(",", hospitalIds), string.Join(",", costQualityMeasureDescriptions.Select(m => m.MeasureId))); var costqualityTopics = new List <CostQualityTopic>(); CostQualityTopic.FindAddCostQualityTopic(costqualityTopics, DataServiceProvider, "Health Care Cost and Quality", "Hip replacement surgery", cqrMeasures); CostQualityTopic.FindAddCostQualityTopic(costqualityTopics, DataServiceProvider, "Health Care Cost and Quality", "Heart Surgeries and Procedures", cqrMeasures); CostQualityTopic.FindAddCostQualityTopic(costqualityTopics, DataServiceProvider, "Hip or knee replacement surgery", "Results of care", cqrMeasures); CostQualityTopic.FindAddCostQualityTopic(costqualityTopics, DataServiceProvider, "Heart surgeries and procedures", "Results of Care", cqrMeasures); //"Results of Care – Deaths var ipDatasets = CurrentWebsite.Datasets.Where(d => d.Dataset.ContentType.Name.EqualsIgnoreCase("Inpatient Discharge")).ToList(); WebsiteDataset datasetToUse; if (ipDatasets.Count == 1) { datasetToUse = ipDatasets.First(); } else { datasetToUse = ipDatasets.FirstOrDefault(d => d.Dataset.ReportingYear == CurrentWebsite.ReportedYear) ?? ipDatasets.First(); } var values = GetCostAndQuantityValues(datasetToUse, CurrentWebsite.Id); GenerateJsonFile(costqualityTopics.OrderBy(x => x.Name), Path.Combine(_costQualityDataDir, "CostQualityTopic.js"), JSON_TOPIC_DOMAIN); costQualityhospitals.GroupBy(cqh => cqh.HospitalId).ForEach(cqhs => // costQualityhospitals.ForEach(h => { var hospitalDetail = CostQualityHospital.GetCostQualityHospitalDetail(values, cqhs.ToList()[0], CurrentWebsite.Measures.Where(m => (m.OriginalMeasure != null && m.OriginalMeasure.Source == "Calculated") || (m.OverrideMeasure != null && m.OverrideMeasure.Source == "Calculated")).ToList()); hospitalDetail.AddRange(cqhs.ToList()); GenerateJsonFile(hospitalDetail, Path.Combine(_costQualityHospitalDataDir, String.Format("Hospital_{0}.js", cqhs.Key)), JSON_HOSPITAL_DOMAIN + cqhs.Key + "="); }); costQualityMeasureDescriptions.ForEach(measureDesc => GenerateJsonFile(new List <CostQualityMeasureDescription>() { measureDesc }, Path.Combine(_costQualityDataDir, String.Format("Measure_{0}.js", measureDesc.MeasureId)), JSON_MEASURE_DOMAIN + measureDesc.MeasureId + "=")); } catch (Exception ex) { Logger.Write(ex); return(false); } return(true); }