public QueryComposerQueryInterrogator(DTO.QueryComposer.QueryComposerQueryDTO query) { _query = query; if (_query.Select == null) { _query.Select = new DTO.QueryComposer.QueryComposerSelectDTO { Fields = Enumerable.Empty <DTO.QueryComposer.QueryComposerFieldDTO>() }; } if (_query.Select.Fields == null) { _query.Select.Fields = Enumerable.Empty <DTO.QueryComposer.QueryComposerFieldDTO>(); } _selectFields = _query.Select.Fields; if (_query.Where.Criteria == null) { _query.Where.Criteria = Enumerable.Empty <DTO.QueryComposer.QueryComposerCriteriaDTO>(); } _primaryCriteria = _query.Where.Criteria.FirstOrDefault(); if (_primaryCriteria != null) { _primaryObservationPeriodTerm = _primaryCriteria.Terms.FirstOrDefault(t => t.Type == ModelTermsFactory.ObservationPeriodID); } }
protected override SummaryRequestModel ConvertToModel(DTO.QueryComposer.QueryComposerQueryDTO query) { var criteria = query.Where.Criteria.First(); SummaryRequestModel model = new SummaryRequestModel(); var observationPeriodTerm = GetAllCriteriaTerms(criteria, ModelTermsFactory.YearID).FirstOrDefault(); if (observationPeriodTerm != null) { model.StartPeriod = observationPeriodTerm.GetStringValue("StartYear"); model.EndPeriod = observationPeriodTerm.GetStringValue("EndYear"); model.Period = string.Join(",", QueryAdapter.ExpandYears(model).Select(y => "'" + y + "'"));//used in query } DTO.Enums.Coverages coverage; var cov = GetAllCriteriaTerms(criteria, ModelTermsFactory.CoverageID).FirstOrDefault(); if (cov.GetEnumValue("Coverage", out coverage)) { model.Coverage = coverage; } //These values are pulled from the stratification section of the request json var ageStratification = GetAgeField(query.Select.Fields.Where(f => f.Type == ModelTermsFactory.AgeRangeID)); if (ageStratification != null) { QueryAdapter.SetAgeStratification(model, ageStratification); } var sexStratification = GetAllCriteriaTerms(criteria, ModelTermsFactory.SexID).FirstOrDefault(); if (sexStratification != null) { QueryAdapter.SetSexStratification(model, sexStratification); } model.Codes = null; //not applicable to this query model.CodeNames = null; //not applicable to this query model.Setting = null; //not applicable to this query model.MetricType = "0"; //not applicable to this query model.OutputCriteria = "0"; //not applicable to this query model.StartQuarter = null; //not applicable to this query model.EndQuarter = null; //not applicable to this query model.SubtypeId = 0; //value never gets set in ui of v5 summary query composer return(model); }
protected override SummaryRequestModel ConvertToModel(DTO.QueryComposer.QueryComposerQueryDTO query) { var criteria = query.Where.Criteria.First(); SummaryRequestModel model = new SummaryRequestModel(); var observationPeriodTerm = GetAllCriteriaTerms(criteria, ModelTermsFactory.YearID).FirstOrDefault(); if (observationPeriodTerm != null) { model.StartPeriod = observationPeriodTerm.GetStringValue("StartYear"); model.EndPeriod = observationPeriodTerm.GetStringValue("EndYear"); model.Period = string.Join(",", QueryAdapter.ExpandYears(model).Select(y => "'" + y + "'"));//used in query } var codeTerms = criteria.Criteria.SelectMany(c => c.Terms.Where(t => t.Type == ModelTermsFactory.HCPCSProcedureCodesID)).Concat(criteria.Terms.Where(t => t.Type == ModelTermsFactory.HCPCSProcedureCodesID)); IEnumerable <string> codeTermValues = from t in codeTerms from v in t.GetCodeStringCollection() where !string.IsNullOrWhiteSpace(v) select v.Trim(); model.Codes = string.Join(",", codeTermValues.Distinct()); IEnumerable <string> codeNameValues = from t in codeTerms from v in t.GetCodeNameStringCollection() where !string.IsNullOrWhiteSpace(v) select v.Trim(); model.CodeNames = codeNameValues.Distinct().ToArray(); DTO.Enums.Settings settingValue; var setting = GetAllCriteriaTerms(criteria, ModelTermsFactory.SettingID).FirstOrDefault(); if (setting.GetEnumValue("Setting", out settingValue)) { model.Setting = settingValue.ToString(); } //These values are pulled from the stratification section of the request json var ageStratification = GetAgeField(query.Select.Fields.Where(f => f.Type == ModelTermsFactory.AgeRangeID)); if (ageStratification != null) { QueryAdapter.SetAgeStratification(model, ageStratification); } var sexStratification = GetAllCriteriaTerms(criteria, ModelTermsFactory.SexID).FirstOrDefault(); if (sexStratification != null) { QueryAdapter.SetSexStratification(model, sexStratification); } model.Coverage = null; //not applicable to this query model.MetricType = "0"; //not applicable to this query model.OutputCriteria = "0"; //not applicable to this query model.StartQuarter = null; //not applicable to this query model.EndQuarter = null; //not applicable to this query model.SubtypeId = 0; //value never gets set in ui of v5 summary query composer return(model); }
QueryComposer.IModelAdapter GetModelAdapter(DTO.QueryComposer.QueryComposerQueryDTO query, bool requireRequestDTO = false) { if (IsFileDistributionRequest) { return(new QueryComposer.Adapters.ModularProgram.ModularProgramModelAdapter(_requestMetadata)); } if (IsDistributedRegressionRequest) { return(new QueryComposer.Adapters.DistributedRegression.DistributedRegressionModelAdapter(_requestMetadata)); } if (ModelID == QueryComposerModelMetadata.SummaryTableModelID) { if ((requireRequestDTO == false) && (_request == null || query == null)) { return(new QueryComposer.Adapters.SummaryQuery.DummyModelAdapter(_requestMetadata)); } if (!query.Header.QueryType.HasValue) { throw new Exception($"Unable to determine the Summary Query Type supported by the adapter required by query \"{ query.Header.Name }\". Invalid request JSON."); } switch (query.Header.QueryType.Value) { case Dns.DTO.Enums.QueryComposerQueryTypes.SummaryTable_Incidence: return(new QueryComposer.Adapters.SummaryQuery.IncidenceModelAdapter(_requestMetadata)); case Dns.DTO.Enums.QueryComposerQueryTypes.SummaryTable_MFU: return(new QueryComposer.Adapters.SummaryQuery.MostFrequentlyUsedQueriesModelAdapter(_requestMetadata)); case Dns.DTO.Enums.QueryComposerQueryTypes.SummaryTable_Prevalence: return(new QueryComposer.Adapters.SummaryQuery.PrevalenceModelAdapter(_requestMetadata)); case DTO.Enums.QueryComposerQueryTypes.Sql: return(new QueryComposer.Adapters.SummaryQuery.SqlDistributionAdapter(_requestMetadata)); default: throw new Exception($"Cannot determine model query adapter:{ query.Header.QueryType.Value} for query \"{ query.Header.Name }\"."); } } var adaptersTypes = (from a in AppDomain.CurrentDomain.GetAssemblies() from t in GetLoadableTypes(a).Where(i => i.FullName.StartsWith("System.") == false) let interfaces = t.GetInterfaces().DefaultIfEmpty() where interfaces.Any(i => i == typeof(QueryComposer.IModelAdapter)) && !t.IsInterface select t).ToArray(); foreach (Type type in adaptersTypes.Where(t => t.GetConstructor(Type.EmptyTypes) != null)) { var adapter = (QueryComposer.IModelAdapter)Activator.CreateInstance(type); if (adapter.ModelID == ModelID) { return(adapter); } } foreach (Type type in adaptersTypes.Where(t => t.GetConstructor(new[] { typeof(RequestMetadata) }) != null)) { var adapter = (QueryComposer.IModelAdapter)Activator.CreateInstance(type, _requestMetadata); if (adapter.ModelID == ModelID) { return(adapter); } } throw new Exception("Model adapter for modelID: " + ModelID + " not found."); }
protected override SummaryRequestModel ConvertToModel(DTO.QueryComposer.QueryComposerQueryDTO query) { var criteria = query.Where.Criteria.First(); SummaryRequestModel model = new SummaryRequestModel(); var observationPeriodTerm = GetAllCriteriaTerms(criteria, ModelTermsFactory.QuarterYearID).FirstOrDefault(); if (observationPeriodTerm != null) { model.StartPeriod = observationPeriodTerm.GetStringValue("StartYear"); model.EndPeriod = observationPeriodTerm.GetStringValue("EndYear"); if (string.Equals(observationPeriodTerm.GetStringValue("ByYearsOrQuarters"), "ByQuarters", StringComparison.OrdinalIgnoreCase)) { model.StartQuarter = observationPeriodTerm.GetStringValue("StartQuarter"); model.EndQuarter = observationPeriodTerm.GetStringValue("EndQuarter"); model.Period = string.Join(",", QueryAdapter.ExpandYearsWithQuarters(Convert.ToInt32(model.StartPeriod), Convert.ToInt32(model.StartQuarter[1].ToString()), Convert.ToInt32(model.EndPeriod), Convert.ToInt32(model.EndQuarter[1].ToString())).Select(y => "'" + y + "'"));//used in query } else { model.StartQuarter = null; model.EndQuarter = null; model.Period = string.Join(",", QueryAdapter.ExpandYears(model).Select(y => "'" + y + "'"));//used in query } } var codeTerms = criteria.FlattenCriteriaToTerms().Where(t => t.Type == ModelTermsFactory.DrugNameID || t.Type == ModelTermsFactory.DrugClassID); if (codeTerms.Any(t => t.Type == ModelTermsFactory.DrugNameID)) { _queryType = IncidencePharmaDispensingQueryType.DrugName; } else if (codeTerms.Any(t => t.Type == ModelTermsFactory.DrugClassID)) { _queryType = IncidencePharmaDispensingQueryType.DrugClass; } else { throw new InvalidOperationException("Either a Drug Name term or a Drug Class term is required for the query."); } var codeTermValues = (from t in codeTerms let v = t.GetCodeSelectorValues() from c in v where c != null && !string.IsNullOrWhiteSpace(c.Code) select c).GroupBy(k => k.Code.Trim()).Select(k => new { Code = k.Key, Name = k.Select(c => c.Name).FirstOrDefault() ?? k.Key }).ToArray(); model.Codes = string.Join(",", codeTermValues.Select(c => System.Net.WebUtility.HtmlEncode(c.Code).Replace(",", ","))); model.CodeNames = codeTermValues.Select(c => c.Name).ToArray(); //These values are pulled from the stratification section of the request json var ageStratification = GetAgeField(query.Select.Fields.Where(f => f.Type == ModelTermsFactory.AgeRangeID)); if (ageStratification != null) { QueryAdapter.SetAgeStratification(model, ageStratification); } var sexStratification = GetAllCriteriaTerms(criteria, ModelTermsFactory.SexID).FirstOrDefault(); if (sexStratification != null) { QueryAdapter.SetSexStratification(model, sexStratification); } model.Setting = null; //not applicable to this query model.Coverage = null; //not applicable to this query model.MetricType = "0"; //not applicable to this query model.OutputCriteria = "0"; //not applicable to this query model.SubtypeId = 0; //value never gets set in ui of v5 summary query composer return(model); }
public abstract IEnumerable <DTO.QueryComposer.QueryComposerResponseQueryResultDTO> Execute(DTO.QueryComposer.QueryComposerQueryDTO query, bool viewSQL);
public override IEnumerable <DTO.QueryComposer.QueryComposerResponseQueryResultDTO> Execute(DTO.QueryComposer.QueryComposerQueryDTO query, bool viewSQL) { Guid termID = Guid.Empty; IQueryAdapter queryAdapter = null; if (query.Where.Criteria.First().Terms.Any(t => t.Type == Lpp.QueryComposer.ModelTermsFactory.SqlDistributionID)) { logger.Debug("Sql Distribution term found, creating SummarySqlQueryAdapter."); SummarySqlQueryAdapter sql = new SummarySqlQueryAdapter(); var result = sql.Execute(query, _settings, viewSQL); return(new[] { result }); } if (query.Select.Fields.Any(f => CodeQueryTermIDs.Contains(f.Type))) { if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.HCPCSProcedureCodesID)) { termID = ModelTermsFactory.HCPCSProcedureCodesID; logger.Debug("HCPCS Procedure Codes selector found, creating MFUCodesQueryAdapter."); } else if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.ICD9DiagnosisCodes3digitID)) { termID = ModelTermsFactory.ICD9DiagnosisCodes3digitID; logger.Debug("ICD9 Diagnosis Codes (3 digit) selector found, creating MFUCodesQueryAdapter."); } else if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.ICD9DiagnosisCodes4digitID)) { termID = ModelTermsFactory.ICD9DiagnosisCodes4digitID; logger.Debug("ICD9 Diagnosis Codes (4 digit) term found, creating MFUCodesQueryAdapter."); } else if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.ICD9DiagnosisCodes5digitID)) { termID = ModelTermsFactory.ICD9DiagnosisCodes5digitID; logger.Debug("ICD9 Diagnosis Codes (5 digit) selector found, creating MFUCodesQueryAdapter."); } else if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.ICD9ProcedureCodes3digitID)) { termID = ModelTermsFactory.ICD9ProcedureCodes3digitID; logger.Debug("ICD9 Procedure Codes (3 digit) selector found, creating MFUCodesQueryAdapter."); } else if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.ICD9ProcedureCodes4digitID)) { termID = ModelTermsFactory.ICD9ProcedureCodes4digitID; logger.Debug("ICD9 Procedure Codes (4 digit) selector found, creating MFUCodesQueryAdapter."); } queryAdapter = new MostFrequentlyUsedCodesQueryAdapter(_settings, termID); } else if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.DrugClassID || f.Type == ModelTermsFactory.DrugNameID)) { if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.DrugClassID)) { termID = ModelTermsFactory.DrugClassID; logger.Debug("Pharamcy dispensing drug class selector found, creating MFUPharmaQueryAdapter."); } else if (query.Select.Fields.Any(f => f.Type == ModelTermsFactory.DrugNameID)) { termID = ModelTermsFactory.DrugNameID; logger.Debug("Pharamcy dispensing generic drug selector found, creating MFUPharmaQueryAdapter."); } queryAdapter = new MostFrequentlyUsedPharmaDispensingQueryAdapter(_settings, termID); } if (queryAdapter == null) { throw new InvalidOperationException("Unable to determine the query adapter to use based on the primary criteria terms."); } using (queryAdapter) { var qcResponseDTO = queryAdapter.Execute(query, viewSQL); foreach (var r in qcResponseDTO) { r.LowCellThrehold = _lowThresholdValue; } return(qcResponseDTO); } }
public override IEnumerable <DTO.QueryComposer.QueryComposerResponseQueryResultDTO> Execute(DTO.QueryComposer.QueryComposerQueryDTO query, bool viewSQL) { //modular program doesn't actually upload anything. throw new NotImplementedException(); }
/// <summary> /// Returns all terms from all criteria defined in the query. /// </summary> /// <param name="query"></param> /// <returns></returns> public static IEnumerable <DTO.QueryComposer.QueryComposerTermDTO> FlattenToTerms(this DTO.QueryComposer.QueryComposerQueryDTO query) { foreach (var criteria in query.Where.Criteria) { //foreach root critiera in each query foreach (var term in FlattenCriteriaToTerms(criteria).Where(t => t != null)) { yield return(term); } } }