def columns(self): if self.config['table_card_group_by'] == 'group_name': first_column = 'group_name' else: first_column = 'gender' return [ DatabaseColumn('', SimpleColumn(first_column), format_fn=self.first_column_format), AggregateColumn('practice_count', self.format_cell_fn, [ CareCustomColumn( 'all', filters=self.filters + [RawFilter("maxmin = 2")]), CareCustomColumn( 'none', filters=self.filters + [RawFilter("maxmin = 0")]) ]), ]
def _wrap_if_necessary(string_or_filter): if isinstance(string_or_filter, six.string_types): soft_assert_type_text(string_or_filter) filter = RawFilter(string_or_filter) else: filter = string_or_filter assert isinstance(filter, SqlFilter) return filter
def columns(self): group = self.config['group'] first_columns = 'value_chain' if group == '' or group == 'value_chain': first_columns = 'value_chain' elif group == 'domain': first_columns = 'domains' elif group == 'practice': first_columns = 'practices' columns = [ DatabaseColumn('', SimpleColumn(first_columns), self.group_name_fn), AggregateColumn('Farmers who adopted All practices', self.percent_fn, [ CareCustomColumn('all', filters=self.filters + [RawFilter("maxmin = 2")]), AliasColumn('some'), AliasColumn('none') ]) ] if group != 'practice': columns.append( AggregateColumn( 'Farmers who adopted Some practices', self.percent_fn, [ CareCustomColumn( 'some', filters=self.filters + [RawFilter("maxmin = 1")]), AliasColumn('all'), AliasColumn('none') ])) columns.append( AggregateColumn('Farmers who adopted No practices', self.percent_fn, [ CareCustomColumn('none', filters=self.filters + [RawFilter("maxmin = 0")]), AliasColumn('all'), AliasColumn('some') ])) return columns
def generate_for_all_outcomes(slug, filters): columns = [ DatabaseColumn( '', CountColumn('doc_id', filters=filters + [RawFilter("treatment_outcome IS NOT NULL")], alias='total_%s' % slug)) ] for treatment_outcome in TREATMENT_OUTCOMES: columns.append( DatabaseColumn( '', CountColumn('doc_id', filters=filters + [ RawFilter("treatment_outcome = '%s'" % treatment_outcome) ], alias='%s_%s' % (slug, treatment_outcome))), ) return columns
def generate_for_all_ranges(slug, filters): type_filter = RawFilter("patient_type IN ('new', 'recurrent')") columns = [] for lower_bound, upper_bound in AGE_RANGES[:-1]: age_filter = RawFilter( 'age >= %d AND age <= %d' % (lower_bound, upper_bound) ) columns.append( DatabaseColumn( '', CountColumn( 'doc_id', filters=filters + [age_filter, type_filter], alias='%s_age_%d_%d' % (slug, lower_bound, upper_bound) ) ) ) columns.append( DatabaseColumn( '', CountColumn( 'doc_id', filters=filters + [ RawFilter('age > %d' % AGE_RANGES[-1][0]), type_filter ], alias='%s_age_%d' % (slug, AGE_RANGES[-1][0]) ) ) ) columns.append( DatabaseColumn( '', CountColumn( 'doc_id', filters=filters + [type_filter], alias='%s_total' % slug ) ) ) return columns
def generate_for_all_patient_types(slug, filters): columns = [] for patient_type in PATIENT_TYPES: patient_type_filter = RawFilter("patient_type = '%s'" % patient_type) columns.append( DatabaseColumn( '', CountColumn('doc_id', filters=filters + [patient_type_filter], alias='%s_%s' % (slug, patient_type)))) columns.append( DatabaseColumn( '', CountColumn('doc_id', filters=filters, alias='%s_total' % slug))) return columns
def columns(self): columns = self.get_columns_by_loc_level agg_columns = [ DatabaseColumn( 'num_children_0_6mo_enrolled_for_services', SumColumn('valid_in_month', filters=self.filters + [ OR([ RawFilter("age_tranche = '0'"), RawFilter("age_tranche = '6'") ]) ], alias='num_children_0_6mo_enrolled_for_services'), slug='num_children_0_6mo_enrolled_for_services'), DatabaseColumn( 'num_children_6mo3yr_enrolled_for_services', SumColumn('valid_in_month', filters=self.filters + [ OR([ RawFilter("age_tranche = '12'"), RawFilter("age_tranche = '24'"), RawFilter("age_tranche = '36'") ]) ], alias='num_children_6mo3yr_enrolled_for_services'), slug='num_children_6mo3yr_enrolled_for_services'), DatabaseColumn( 'num_children_3yr6yr_enrolled_for_services', SumColumn('valid_in_month', filters=self.filters + [ OR([ RawFilter("age_tranche = '48'"), RawFilter("age_tranche = '60'"), RawFilter("age_tranche = '72'") ]) ], alias='num_children_3yr6yr_enrolled_for_services'), slug='num_children_3yr6yr_enrolled_for_services'), ] return columns + agg_columns
def filters(self): filters = super(TreatmentOutcomeSqlData, self).filters filters.append( RawFilter('episode_type_patient = 1') ) return filters
def other_previously_treated(): return [ RawFilter( "patient_type = 'other_previously_treated'" ) ]
def treatment_after_lfu(): return [ RawFilter( "patient_type = 'treatment_after_lfu'" ) ]
def wrapped_sum_column_filters_extended(self): return self.wrapped_filters + [RawFilter(DATE_FILTER_EXTENDED)]
def columns(self): test_type_filter = [ RawFilter("bacteriological_examination = 1") ] filters_without_episode_type = self.filters[:-1] return ( generate_for_all_patient_types( 'pulmonary_microbiologically', self.filters + diagnosis_filter('microbiological', 'pulmonary') ) + generate_for_all_patient_types( 'pulmonary_clinical', self.filters + diagnosis_filter('clinical', 'pulmonary') ) + generate_for_all_patient_types( 'extra_pulmonary', self.filters + [ RawFilter('patient_type IS NOT NULL'), RawFilter("disease_classification = 'extra_pulmonary'") ] ) + generate_for_all_patient_types( 'total', self.filters + [RawFilter("patient_type IS NOT NULL")] ) + generate_for_all_ranges('male', self.filters + [RawFilter("sex = 'male'")]) + generate_for_all_ranges('female', self.filters + [RawFilter("sex = 'female'")]) + generate_for_all_ranges('transgender', self.filters + [RawFilter("sex = 'transgender'")]) + generate_for_all_ranges('all', self.filters) + [ DatabaseColumn( '', CountColumn( 'doc_id', filters=filters_without_episode_type + test_type_filter + [ RawFilter("bacteriological_test_episode_type = 'presumptive_tb'") ], alias='patients_with_presumptive_tb' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( filters_without_episode_type + test_type_filter + [ RawFilter("result_of_bacteriological_test = 'tb_detected'"), RawFilter("bacteriological_test_episode_type = 'presumptive_tb'") ] ), alias='patients_with_positive_tb' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=self.filters + [RawFilter("hiv_status IN ('reactive', 'non_reactive')")], alias='all_hiv_tested' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=self.filters + [RawFilter("hiv_status = 'reactive'")], alias='hiv_reactive' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=self.filters + [ RawFilter("hiv_status = 'reactive'"), RawFilter("cpt_initiated = 'yes'") ], alias='hiv_reactive_cpt' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + [RawFilter("hiv_status = 'reactive'")] + [RawFilter("initiated_on_art = 'yes'")] ), alias='hiv_reactive_art' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + convert_to_raw_filters_list( "patient_type = 'new'", "disease_classification = 'pulmonary'", "diagnostic_result = 'tb_detected'" ) ), alias='new_positive_tb_pulmonary' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + convert_to_raw_filters_list( "patient_type = 'new'", "disease_classification = 'pulmonary'", "diagnostic_result = 'tb_not_detected'" ) ), alias='new_negative_tb_pulmonary' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + convert_to_raw_filters_list( "patient_type = 'new'", "disease_classification = 'extrapulmonary'", "diagnostic_result = 'tb_detected'" ) ), alias='new_positive_tb_extrapulmonary' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + convert_to_raw_filters_list( "patient_type = 'recurrent'", "diagnostic_result = 'tb_detected'" ) ), alias='recurrent_positive_tb' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + convert_to_raw_filters_list( "patient_type = 'treatment_after_failure'", "diagnostic_result = 'tb_detected'" ) ), alias='failure_positive_tb' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + convert_to_raw_filters_list( "patient_type = 'treatment_after_lfu'", "diagnostic_result = 'tb_detected'" ) ), alias='lfu_positive_tb' ) ), DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + convert_to_raw_filters_list( "patient_type = 'other_previously_treated'", "diagnostic_result = 'tb_detected'" ) ), alias='other_positive_tb' ) ) ] )
def _map_filter_name_to_sql_filter(self, filter_name): return { 'unweighed': RawFilter('recorded_weight IS NULL'), 'umeasured': RawFilter('recorded_height IS NULL'), 'severely_underweight': RawFilter( "current_month_nutrition_status = 'severely_underweight'"), 'moderately_underweight': RawFilter( "current_month_nutrition_status = 'moderately_underweight'"), 'normal_wfa': RawFilter("current_month_nutrition_status = 'normal'"), 'severely_stunted': RawFilter("{} = 'severe'".format( current_month_stunting_column(self.beta))), 'moderately_stunted': RawFilter("{} = 'moderate'".format( current_month_stunting_column(self.beta))), 'normal_hfa': RawFilter("{} = 'normal'".format( current_month_stunting_column(self.beta))), 'severely_wasted': RawFilter("{} = 'severe'".format( current_month_wasting_column(self.beta))), 'moderately_wasted': RawFilter("{} = 'moderate'".format( current_month_wasting_column(self.beta))), 'normal_wfh': RawFilter("{} = 'normal'".format( current_month_wasting_column(self.beta))), }[filter_name]
def columns(self): return ( generate_for_all_outcomes('new_patients', self.filters + [RawFilter("patient_type = 'new'")]) + generate_for_all_outcomes( 'new_patients_pulmonary_microbiological', self.filters + [RawFilter("patient_type = 'new'")] + pulmonary_microbiological() ) + generate_for_all_outcomes( 'new_patients_pulmonary_clinical', self.filters + [RawFilter("patient_type = 'new'")] + pulmonary_clinical() ) + generate_for_all_outcomes( 'new_patients_extra_pulmonary', self.filters + [RawFilter("patient_type = 'new'")] + extra_pulmonary() ) + generate_for_all_outcomes( 'previously_treated_patients', self.filters + previously_treated() ) + generate_for_all_outcomes( 'recurrent_patients', self.filters + recurrent() ) + generate_for_all_outcomes( 'treatment_after_failure_patients', self.filters + treatment_after_failure() ) + generate_for_all_outcomes( 'treatment_after_lfu_patients', self.filters + treatment_after_lfu() ) + generate_for_all_outcomes( 'other_previously_treated_patients', self.filters + [RawFilter("basis_of_diagnosis = 'clinical'")] + other_previously_treated() ) + generate_for_all_outcomes( 'hiv_reactive_patients', self.filters + [RawFilter("hiv_status = 'reactive'")] ) + generate_for_all_outcomes( 'new_hiv_reactive_patients', self.filters + [RawFilter("patient_type = 'new'")] + [RawFilter("hiv_status = 'reactive'")] ) + generate_for_all_outcomes( 'previously_treated_hiv_reactive_patients', self.filters + previously_treated() + [RawFilter("hiv_status = 'reactive'")] ) + [ DatabaseColumn( '', CountColumn( 'doc_id', filters=self.filters + [RawFilter("hiv_status = 'reactive'")], alias='total_hiv_cases' ) ) ] + [ DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + [RawFilter("hiv_status = 'reactive'")] + [RawFilter("initiated_on_art = 'yes'")] ), alias='total_initiated_on_art' ) ) ] + [ DatabaseColumn( '', CountColumn( 'doc_id', filters=( self.filters + [RawFilter("hiv_status = 'reactive'")] + [RawFilter("cpt_initiated = 'yes'")] ), alias='total_cpt_initiated' ) ) ] )
def pulmonary_microbiological(): return [RawFilter("disease_classification = 'pulmonary' AND basis_of_diagnosis = 'microbiological'")]
def filters(self): filters = super(TreatmentOutcomeSqlData, self).filters filters.append(RawFilter('episode_type_patient = 1')) filters.append(RawFilter("is_enrolled_in_private = 0")) return filters
def filters(self): filters = super(CaseFindingSqlData, self).filters filters.append(RawFilter("episode_type = 'confirmed_tb'")) filters.append(RawFilter("is_enrolled_in_private = 0")) return filters
def previously_treated(): return [ RawFilter("patient_type IN ('recurrent', 'treatment_after_failure'," " 'treatment_after_lfu', 'other_previously_treated')") ]
def filters(self): filters = super(ChartsSqlData, self).filters filters.append(RawFilter('closed = 0')) return filters
def convert_to_raw_filters_list(*filters): return [RawFilter(x) for x in filters]
def diagnosis_filter(diagnosis, classification): return [ RawFilter("basis_of_diagnosis = '%s'" % diagnosis), RawFilter("disease_classification = '%s'" % classification) ]
def pulmonary_clinical(): return [RawFilter("disease_classification = 'pulmonary' AND basis_of_diagnosis = 'clinical'")]
def filters(self): filters = super(CaseFindingSqlData, self).filters filters.append(RawFilter('closed = 0')) return filters
def diagnosis_filter(diagnosis, classification): return [ RawFilter('patient_type IS NOT NULL'), RawFilter("basis_of_diagnosis = '%s'" % diagnosis), RawFilter("disease_classification = '%s'" % classification) ]
def columns(self): test_type_filter = [RawFilter("bacteriological_examination = 1")] return ( generate_for_all_ranges( 'male', self.filters + [RawFilter("sex = 'male'")]) + generate_for_all_ranges( 'female', self.filters + [RawFilter("sex = 'female'")]) + generate_for_all_ranges( 'transgender', self.filters + [RawFilter("sex = 'transgender'")]) + generate_for_all_ranges('all', self.filters) + [ DatabaseColumn( '', CountColumn('doc_id', filters=self.filters + test_type_filter + [RawFilter("episode_type = 'presumptive_tb'")], alias='patients_with_presumptive_tb')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(self.filters + test_type_filter + [ RawFilter("result_of_test = 'tb_detected'"), RawFilter("episode_type = 'presumptive_tb'") ]), alias='patients_with_positive_tb')), DatabaseColumn( '', CountColumn( 'doc_id', filters=self.filters + [ RawFilter( "hiv_status IN ('reactive', 'non_reactive')") ], alias='all_hiv_tested')), DatabaseColumn( '', CountColumn('doc_id', filters=self.filters + [RawFilter("hiv_status = 'reactive'")], alias='hiv_reactive')), DatabaseColumn( '', CountColumn('doc_id', filters=self.filters + [RawFilter("hiv_status = 'reactive'")], alias='hiv_reactive_cpt')), DatabaseColumn( '', CountColumn( 'doc_id', filters=(self.filters + [RawFilter("hiv_status = 'reactive'")] + [RawFilter("initiated_on_art = 'yes'")]), alias='hiv_reactive_art')) ])
def treatment_after_failure(): return [ RawFilter( "patient_type = 'treatment_after_failure'" ) ]
def extra_pulmonary(): return [RawFilter("disease_classification = 'extra_pulmonary'")]
def wrapped_sum_column_filters(self): return self.wrapped_filters + [RawFilter(DATE_FILTER)]
def filters(self): filters = super(CaseFindingSqlData, self).filters filters.append(RawFilter("episode_type = 'confirmed_tb'")) return filters
def recurrent(): return [ RawFilter( "patient_type = 'recurrent'" ) ]