def columns(self): columns = super(DeliveryPlaceDetailsExtended, self).columns additional_columns = [ DatabaseColumn( "Home deliveries", CountUniqueColumn('doc_id', alias="home_deliveries", filters=self.filters + [ OR([ EQ('place_of_birth', 'home'), EQ('place_of_birth', 'on_route') ]) ])), DatabaseColumn( "Other places", CountUniqueColumn('doc_id', alias="other_places", filters=self.filters + [ OR([ EQ('place_of_birth', 'empty'), EQ('place_of_birth', 'other') ]) ])) ] columns.extend(additional_columns) return columns
def columns(self): columns = [ DatabaseColumn("Total child registered ever", CountUniqueColumn('doc_id', alias="total")) ] if 'startdate' not in self.config and 'enddate' not in self.config or 'startdate' not in self.config \ and 'enddate' in self.config: columns.extend([ DatabaseColumn( "Total open children cases", CountUniqueColumn( 'doc_id', alias="no_date_opened", filters=self.filters + [EQ('closed_on', 'empty')] ) ), DatabaseColumn( "Total closed children cases", CountUniqueColumn( 'doc_id', alias="no_date_closed", filters=self.filters + [NOTEQ('closed_on', 'empty')] ) ), DatabaseColumn( "New registrations during last 30 days", CountUniqueColumn( 'doc_id', alias="no_date_new_registrations", filters=self.filters + [AND([GTE('opened_on', "last_month"), LTE('opened_on', "today")])] ) ) ]) else: columns.extend([ DatabaseColumn( "Children cases open at end period", CountUniqueColumn( 'doc_id', alias="opened", filters=self.filters + [AND([LTE('opened_on', "stred"), OR([EQ('closed_on', 'empty'), GT('closed_on', "stred")])])] ) ), DatabaseColumn( "Children cases closed during period", CountUniqueColumn( 'doc_id', alias="closed", filters=self.filters + [AND([GTE('closed_on', "strsd"), LTE('closed_on', "stred")])] ) ), DatabaseColumn( "Total children followed during period", CountUniqueColumn( 'doc_id', alias="followed", filters=self.filters + [AND([LTE('opened_on', "stred"), OR([EQ('closed_on', 'empty'), GTE('closed_on', "strsd")])])] ) ), DatabaseColumn( "New registrations during period", CountUniqueColumn( 'doc_id', alias="new_registrations", filters=self.filters + [AND([LTE('opened_on', "stred"), GTE('opened_on', "strsd")])] ) ) ]) return columns
def columns(self): self.config['mother_ids'] = tuple(DeliveryMothersIds(config=self.config).data.keys()) + ('',) columns = [ DatabaseColumn("Total children with with birthweight known", CountUniqueColumn('doc_id', alias="total_birthweight_known", filters=self.filters + [NOTEQ('weight_birth', 'empty')])), DatabaseColumn("Total births", CountUniqueColumn('doc_id', filters=[AND([IN('mother_id', get_INFilter_bindparams('mother_ids', self.config['mother_ids'])), OR([EQ('gender', 'female'), EQ('gender', 'male')])])], alias='total_births'))] columns.extend([ DatabaseColumn("Birthweight < 2.5 kg", CountUniqueColumn('doc_id', alias="total_birthweight_lt_25", filters=self.filters + [AND([LT('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty')])] ) ), DatabaseColumn("Birthweight >= 2.5 kg", CountUniqueColumn('doc_id', alias="total_birthweight_gte_25", filters=self.filters + [AND([GTE('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty')])] ) ) ]) return columns
def filters(self): filters = [EQ('xmlns', 'xmlns')] if 'age' in self.config and self.config['age']: if len(self.config['age']) == 1: filters.append(BETWEEN('age', 'age_start_0', 'age_end_0')) else: between_filters = [] for idx, age in enumerate(self.config['age']): between_filters.append(BETWEEN('age', 'age_start_{}'.format(idx), 'age_end_{}'.format(idx))) filters.append(OR(between_filters)) if 'district' in self.config and self.config['district']: filters.append(IN('district', get_INFilter_bindparams('district', self.config['district']))) if ( 'visit_date_start' in self.config and self.config['visit_date_start'] and 'visit_date_end' in self.config and self.config['visit_date_end'] ): filters.append(BETWEEN('visit_date', 'visit_date_start', 'visit_date_end')) if 'type_visit' in self.config and self.config['type_visit']: filters.append(EQ('type_visit', 'type_visit')) if 'activity_type' in self.config and self.config['activity_type']: filters.append(EQ('activity_type', 'activity_type')) if 'client_type' in self.config and self.config['client_type']: filters.append(IN('client_type', get_INFilter_bindparams('client_type', self.config['client_type']))) if 'user_id' in self.config and self.config['user_id']: filters.append(IN('user_id', get_INFilter_bindparams('user_id', self.config['user_id']))) if 'organization' in self.config and self.config['organization']: filters.append(EQ('organization', 'organization')) if 'want_hiv_test' in self.config and self.config['want_hiv_test']: filters.append(EQ('want_hiv_test', 'want_hiv_test')) return filters
def filters(self): filters = None if 'enddate' not in self.config: self.config['enddate'] = self.config['today'] self.config['stred'] = self.config['today'] if 'startdate' in self.config: filters = [ AND([ LTE("date", "enddate"), OR([ GTE('closed_on', "startdate"), EQ('closed_on', 'empty') ]) ]) ] else: self.config['strsd'] = '0001-01-01' filters = [LTE("date", "enddate")] for k, v in six.iteritems(LOCATION_HIERARCHY): if v['prop'] in self.config and self.config[v['prop']]: filters.append( IN(k, get_INFilter_bindparams(k, self.config[v['prop']]))) return filters
def columns(self): return [ DatabaseColumn( "Total Deliveries (with/without outcome)", CountUniqueColumn('doc_id', alias="total_delivery", filters=self.filters), ), DatabaseColumn( "Normal deliveries", CountUniqueColumn( 'doc_id', alias="normal_deliveries", filters=self.filters + [EQ('type_of_delivery', 'normal_delivery')])), DatabaseColumn( "Caesarean deliveries", CountUniqueColumn( 'doc_id', alias="caesarean_deliveries", filters=self.filters + [EQ('type_of_delivery', 'cesarean_delivery')])), DatabaseColumn( "Delivery type unknown", CountUniqueColumn( 'doc_id', alias="unknown", filters=self.filters + [ OR([ EQ('type_of_delivery', 'empty'), EQ('type_of_delivery', 'unknown_delivery') ]) ])) ]
def columns(self): self.config['mother_ids'] = tuple( DeliveryMothersIds(config=self.config).data.keys()) + ('', ) return [ DatabaseColumn( "Total births", CountUniqueColumn( 'doc_id', filters=[ AND([ IN( 'mother_id', get_INFilter_bindparams( 'mother_ids', self.config['mother_ids'])), OR([EQ('gender', 'female'), EQ('gender', 'male')]) ]) ], alias='total_births')), DatabaseColumn( "Newborn deaths (< 1 m)", CountUniqueColumn( 'doc_id', filters=self.filters + [ AND([ EQ('reason_for_child_closure', 'death'), EQ('type_of_child_death', 'newborn_death') ]) ], alias='newborn_death')), DatabaseColumn( "Infant deaths (< 1 y)", CountUniqueColumn( 'doc_id', filters=self.filters + [ AND([ EQ('reason_for_child_closure', 'death'), EQ('type_of_child_death', 'infant_death') ]) ], alias='infant_death')), DatabaseColumn( "Child deaths (2-5y)", CountUniqueColumn( 'doc_id', filters=self.filters + [ AND([ EQ('reason_for_child_closure', 'death'), EQ('type_of_child_death', 'child_death') ]) ], alias='child_death')), DatabaseColumn( "Total deaths", CountUniqueColumn('doc_id', filters=self.filters + [EQ('reason_for_child_closure', 'death')], alias='total_deaths')) ]
def _get_age_range_filter(self): filters = [ AND([ GTE(age_range.column, age_range.lower_param), LT(age_range.column, age_range.upper_param) ]) for age_range in self._age_ranges ] return filters[0] if len(filters) == 1 else OR(filters)
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 test_filter(self): slug = "hierarchy_filter_slug" filter_spec = { "type": "enikshay_location_hierarchy", "display": "location hierarchy", "datatype": "string", "slug": slug, "field": "does_not_matter", } data_source_config = DataSourceConfiguration( domain=self.domain, referenced_doc_type="", table_id="123", ) with patch( "corehq.apps.userreports.reports.data_source.get_datasource_config", MagicMock(return_value=(data_source_config, None)) ): report_config = ReportConfiguration( config_id="123", filters=[filter_spec] ) report = ReportFactory().from_spec(report_config) filter_values = get_filter_values( report_config.ui_filters, {slug: self.cto.location_id}, user=MagicMock(), ) report.set_filter_values(filter_values) expected_filter_vals = { '{}_sto'.format(slug): self.sto.location_id, '{}_cto'.format(slug): self.cto.location_id, '{}_below_cto'.format(slug): self.cto.location_id, } expected_filter = OR([ EQ("sto", "{}_sto".format(slug)), EQ("cto", "{}_cto".format(slug)), EQ("below_cto", "{}_below_cto".format(slug)) ]) self.assertEqual(len(report.data_source.filters), 1) self.assertFiltersEqual( report.data_source.filters[0], expected_filter ) self.assertEqual( report.data_source.filter_values, expected_filter_vals )
def filters(self): filters = [] if self.config['task_responsible']: filters.append(EQ('task_responsible', 'task_responsible')) if self.config['referenced_id']: filters.append(EQ('referenced_id', 'referenced_id')) if self.config['closed']: filters.append(EQ('closed', 'closed')) or_filter = [] if self.config['owner_ids']: or_filter.append(IN('owner_id', 'owner_ids')) if or_filter: or_filter.append(EQ('user_id', 'user_id')) filters.append(OR(filters=or_filter)) return filters
def columns(self): return [ DatabaseColumn( "Total Deliveries (with/without outcome)", CountUniqueColumn('doc_id', alias="total_delivery", filters=self.filters), ), DatabaseColumn( "Institutional deliveries", CountUniqueColumn( 'doc_id', alias="institutional_deliveries", filters=self.filters + [ OR([ EQ('place_of_birth', 'health_center'), EQ('place_of_birth', "hospital") ]) ])) ]
def columns(self): return [ DatabaseColumn("Total child ill", CountUniqueColumn( 'doc_id', alias="total_child_ill", filters=self.filters + [OR([EQ('pneumonia_since_last_visit', 'yes'), EQ('has_diarrhea_since_last_visit', 'yes')])])), DatabaseColumn("ARI (Pneumonia)", CountUniqueColumn('doc_id', alias="ari_cases", filters=self.filters + [EQ('pneumonia_since_last_visit', 'yes')])), DatabaseColumn("Diarrhea", CountUniqueColumn('doc_id', alias="diarrhea_cases", filters=self.filters + [EQ('has_diarrhea_since_last_visit', 'yes')])), DatabaseColumn("ORS given during diarrhea", CountUniqueColumn('doc_id', alias="ors", filters=self.filters + [EQ('dairrhea_treated_with_ors', 'yes')])), DatabaseColumn("Zinc given during diarrhea", CountUniqueColumn('doc_id', alias="zinc", filters=self.filters + [EQ('dairrhea_treated_with_zinc', 'yes')])) ]
def columns(self): return [ DatabaseColumn("Total pregnant", CountUniqueColumn('doc_id', alias="total_pregnant")), DatabaseColumn( "No ANC", CountUniqueColumn('doc_id', alias="no_anc", filters=self.filters + [NOTEQ('anc_1', 'yes')])), DatabaseColumn( "ANC1", CountUniqueColumn('doc_id', alias="anc_1", filters=self.filters + [EQ('anc_1', 'yes')])), DatabaseColumn( "ANC2", CountUniqueColumn('doc_id', alias="anc_2", filters=self.filters + [EQ('anc_2', 'yes')])), DatabaseColumn( "ANC3", CountUniqueColumn('doc_id', alias="anc_3", filters=self.filters + [EQ('anc_3', 'yes')])), DatabaseColumn( "ANC4", CountUniqueColumn('doc_id', alias="anc_4", filters=self.filters + [EQ('anc_4', 'yes')])), DatabaseColumn( "TT1", CountUniqueColumn('doc_id', alias="tt_1", filters=self.filters + [EQ('tt_1', 'yes')])), DatabaseColumn( "TT2", CountUniqueColumn('doc_id', alias="tt_2", filters=self.filters + [EQ('tt_2', 'yes')])), DatabaseColumn( "TT Booster", CountUniqueColumn('doc_id', alias="tt_booster", filters=self.filters + [EQ('tt_booster', 'yes')])), DatabaseColumn( "TT Complete", CountUniqueColumn( 'doc_id', alias="tt_completed", filters=self.filters + [OR([EQ('tt_2', 'yes'), EQ('tt_booster', 'yes')])])), DatabaseColumn( "IFA received", CountUniqueColumn('doc_id', alias="ifa_tablets", filters=self.filters + [EQ('iron_folic', 'yes')])), DatabaseColumn( "100 IFA consumed", CountUniqueColumn('doc_id', alias="100_tablets", filters=self.filters[1:-1] + [ AND([ EQ('completed_100_ifa', 'yes'), GTE('delivery_date', 'strsd'), LTE('delivery_date', 'stred') ]) ])), DatabaseColumn( "Clinically anemic mothers", CountUniqueColumn('doc_id', alias="clinically_anemic", filters=self.filters + [EQ('anemia_signs', 'yes')])), DatabaseColumn( "Number of pregnant mother referrals due to danger signs", CountUniqueColumn('doc_id', alias="danger_signs", filters=self.filters + [EQ('currently_referred', 'yes')])), DatabaseColumn( "Knows closest health facility", CountUniqueColumn('doc_id', alias="knows_closest_facility", filters=self.filters + [EQ('knows_closest_facility', 'yes')])), DatabaseColumn( "No ANC Total Eligible", CountUniqueColumn('doc_id', alias="no_anc_eligible", filters=self.filters + [LTE('edd', 'today_plus_196')])), DatabaseColumn( "ANC1 Total Eligible", CountUniqueColumn('doc_id', alias="anc_1_eligible", filters=self.filters + [LTE('edd', 'today_plus_196')])), DatabaseColumn( "ANC2 Total Eligible", CountUniqueColumn( 'doc_id', alias="anc_2_eligible", filters=self.filters + [AND([EQ('anc_1', 'yes'), LTE('edd', 'today_plus_112')])])), DatabaseColumn( "ANC3 Total Eligible", CountUniqueColumn( 'doc_id', alias="anc_3_eligible", filters=self.filters + [AND([EQ('anc_2', 'yes'), LTE('edd', 'today_plus_56')])])), DatabaseColumn( "ANC4 Total Eligible", CountUniqueColumn( 'doc_id', alias="anc_4_eligible", filters=self.filters + [AND([EQ('anc_3', 'yes'), LTE('edd', 'today_plus_35')])])), DatabaseColumn( "TT1 Total Eligible", CountUniqueColumn('doc_id', alias="tt_1_eligible", filters=self.filters + [NOTEQ('previous_tetanus', 'yes')])), DatabaseColumn( "TT2 Total Eligible", CountUniqueColumn('doc_id', alias="tt_2_eligible", filters=self.filters + [EQ('tt_1', 'yes')])), DatabaseColumn( "TT Booster Total Eligible", CountUniqueColumn('doc_id', alias="tt_booster_eligible", filters=self.filters + [EQ('previous_tetanus', 'yes')])), DatabaseColumn( "TT Completed (TT2 or Booster) Total Eligible", CountUniqueColumn( 'doc_id', alias="tt_completed_eligible", filters=self.filters + [OR([EQ('tt_1', 'yes'), EQ('previous_tetanus', 'yes')])])), DatabaseColumn( "Taking IFA tablets Total Eligible", CountUniqueColumn('doc_id', alias="ifa_tablets_eligible")), DatabaseColumn( "Completed 100 IFA tablets Total Eligible", CountUniqueColumn('doc_id', alias="100_tablets_eligible", filters=self.filters[1:-1] + [ AND([ GTE('delivery_date', 'strsd'), LTE('delivery_date', 'stred') ]) ])), DatabaseColumn( "Clinically anemic mothers Total Eligible", CountUniqueColumn('doc_id', alias="clinically_anemic_eligible")), DatabaseColumn( "Number of mother referrals due to danger signs Total Eligible", CountUniqueColumn('doc_id', alias="danger_signs_eligible")), DatabaseColumn( "Know closest health facility Total Eligible", CountUniqueColumn('doc_id', alias="knows_closest_facility_eligible")) ]
def columns(self): return [ self.first_column, DatabaseColumn( _('home_visits_newborn'), CountColumn('doc_id', alias="home_visits_newborn", filters=self.filters + [ OR([ EQ('newborn_reg', 'one'), EQ('newborn_followup', 'one') ]) ])), DatabaseColumn( _('home_visits_children'), CountColumn('doc_id', alias="home_visits_children", filters=self.filters + [ OR([ EQ('child_reg', 'one'), EQ('child_followup', 'one') ]) ])), DatabaseColumn( _('home_visits_adult'), CountColumn('doc_id', alias="home_visits_adult", filters=self.filters + [NOTEQ('home_visit', 'not')])), AggregateColumn(_("home_visits_total"), add_all, [ AliasColumn("home_visits_newborn"), AliasColumn("home_visits_children"), AliasColumn("home_visits_adult"), ], slug='home_visits_total'), DatabaseColumn( _('cases_transferred'), CountColumn('doc_id', alias='cases_transferred', filters=self.filters + [ OR([ EQ('referral_reported_newborn', 'one'), EQ('referral_given_child', 'one'), EQ('referral_given_adult', 'one'), ]) ])), DatabaseColumn( _('home_visits_followup'), CountColumn('doc_id', alias="home_visits_followup", filters=self.filters + [ OR([ EQ('newborn_followup', 'one'), EQ('child_followup', 'one'), EQ('adult_followup', 'one') ]) ])), DatabaseColumn( _('patients_given_pneumonia_meds_num'), CountColumn('doc_id', alias='patients_given_pneumonia_meds_num', filters=self.filters + [ OR([ AND([ EQ('has_pneumonia', 'one'), EQ('it_ari_child', 'one') ]), AND([ EQ('pneumonia_ds', 'one'), EQ('it_ari_child', 'one') ]), AND([ EQ('ari_adult', 'one'), EQ('it_ari_adult', 'one') ]) ]) ])), DatabaseColumn( _('patients_given_pneumonia_meds_denom'), CountColumn('doc_id', alias='patients_given_pneumonia_meds_denom', filters=self.filters + [ OR([ EQ('has_pneumonia', 'one'), EQ('pneumonia_ds', 'one'), EQ('ari_adult', 'one') ]) ])), AggregateColumn( _('patients_given_pneumonia_meds'), percent_format, [ AliasColumn('patients_given_pneumonia_meds_num'), AliasColumn('patients_given_pneumonia_meds_denom') ], slug='patients_given_pneumonia_meds'), DatabaseColumn( _('patients_given_diarrhoea_meds_num'), CountColumn('doc_id', alias='patients_given_diarrhoea_meds_num', filters=self.filters + [ OR([ AND([ OR([ EQ('diarrhoea_ds', 'one'), EQ('diarrhoea', 'one') ]), EQ('it_diarrhea_child', 'one') ]), AND([ EQ('diarrhea_adult', 'one'), EQ('it_diarrhea_adult', 'one') ]) ]) ])), DatabaseColumn( _('patients_given_diarrhoea_meds_denum'), CountColumn('doc_id', alias='patients_given_diarrhoea_meds_denum', filters=self.filters + [ OR([ EQ('diarrhoea_ds', 'one'), EQ('diarrhoea', 'one'), EQ('diarrhea_adult', 'one') ]) ])), AggregateColumn( _('patients_given_diarrhoea_meds'), percent_format, [ AliasColumn('patients_given_diarrhoea_meds_num'), AliasColumn('patients_given_diarrhoea_meds_denum') ], slug='patients_given_diarrhoea_meds'), DatabaseColumn( _('patients_given_malaria_meds'), CountColumn('doc_id', alias='patients_given_malaria_meds_num', filters=self.filters + [ OR([ AND([ EQ('malaria_child', 'one'), EQ('it_malaria_child', 'one') ]), AND([ EQ('malaria_adult', 'one'), EQ('it_malaria_adult', 'one') ]) ]) ])), DatabaseColumn( _('patients_given_malaria_meds_denum'), CountColumn('doc_id', alias='patients_given_malaria_meds_demum', filters=self.filters + [ OR([ EQ('has_malaria', 'one'), EQ('malaria_adult', 'one') ]) ])), AggregateColumn( _('patients_given_malaria_meds'), percent_format, [ AliasColumn('patients_given_malaria_meds_num'), AliasColumn('patients_given_malaria_meds_denum') ], slug='patients_given_malaria_meds'), DatabaseColumn( _('patients_correctly_referred_num'), CountColumn('doc_id', alias='patients_correctly_referred_num', filters=self.filters + [ OR([ AND([ EQ('referral_needed_newborn', 'one'), EQ('referral_given_newborn', 'one') ]), AND([ EQ('referral_needed_child', 'one'), EQ('referral_given_child', 'one') ]), AND([ EQ('treatment_preg_ds', 'one'), EQ('referral_given_adult', 'one') ]) ]) ])), DatabaseColumn( _('patients_correctly_referred_denum'), CountColumn('doc_id', alias='patients_correctly_referred_denum', filters=self.filters + [ OR([ EQ('referral_needed_newborn', 'one'), EQ('referral_needed_child', 'one'), EQ('treatment_preg_ds', 'one') ]) ])), AggregateColumn( _('patients_correctly_referred'), percent_format, [ AliasColumn('patients_correctly_referred_num'), AliasColumn('patients_correctly_referred_denum') ], slug='patients_correctly_referred'), DatabaseColumn( _('cases_rdt_not_done'), CountColumn('cases_rdt_not_done', filters=self.filters + [EQ('cases_rdt_not_done', 'one')])), ]
def get_columns(self, filters): return [ DatabaseColumn('month', SimpleColumn('month')), AggregateColumn( '% Weighing efficiency (Children <5 weighed)', percent_num, [ SumColumn( 'nutrition_status_weighed', filters=filters + [NOT(EQ('age_tranche', 'age_72'))]), SumColumn( 'wer_eligible', alias='wer_eligible', filters=filters + [NOT(EQ('age_tranche', 'age_72'))]) ], slug='status_weighed'), AggregateColumn( '% Height measurement efficiency (Children <5 measured)', percent_num, [ SumColumn( 'height_measured_in_month', alias='height_measured_in_month_less_5', filters=filters + [NOT(EQ('age_tranche', 'age_72'))]), SumColumn( 'height_eligible', alias='height_eligible', filters=filters + [NOT(EQ('age_tranche', 'age_72'))]) ], slug='status_height_efficiency'), DatabaseColumn( 'Total number Unweighed', SumColumn('nutrition_status_unweighed', filters=filters + [NOT(EQ('age_tranche', 'age_72'))])), AggregateColumn( 'Percent Children severely underweight (weight for age)', percent_num, [ SumColumn( 'nutrition_status_severely_underweight', filters=filters + [NOT(EQ('age_tranche', 'age_72'))]), AliasColumn('nutrition_status_weighed') ], slug='severely_underweight'), AggregateColumn( 'Percent Children moderately underweight (weight for age)', percent_num, [ SumColumn( 'nutrition_status_moderately_underweight', filters=filters + [NOT(EQ('age_tranche', 'age_72'))]), AliasColumn('nutrition_status_weighed') ], slug='moderately_underweight'), AggregateColumn('Percent Children normal (weight for age)', percent_num, [ SumColumn('nutrition_status_normal', filters=filters + [NOT(EQ('age_tranche', 'age_72'))]), AliasColumn('nutrition_status_weighed') ], slug='status_normal'), AggregateColumn( 'Percent children with severe acute malnutrition (weight-for-height)', percent_num, [ SumColumn(wasting_severe_column(self.beta), filters=filters + get_age_filters(self.beta)), SumColumn(wfh_recorded_in_month_column(self.beta), alias='weighed_and_height_measured_in_month', filters=filters + get_age_filters(self.beta)) ], slug='wasting_severe'), AggregateColumn( 'Percent children with moderate acute malnutrition (weight-for-height)', percent_num, [ SumColumn(wasting_moderate_column(self.beta), filters=filters + get_age_filters(self.beta)), AliasColumn('weighed_and_height_measured_in_month') ], slug='wasting_moderate'), AggregateColumn( 'Percent children normal (weight-for-height)', percent_num, [ SumColumn(wasting_normal_column(self.beta), filters=filters + get_age_filters(self.beta)), AliasColumn('weighed_and_height_measured_in_month') ], slug='wasting_normal'), AggregateColumn( 'Percent children with severe stunting (height for age)', percent_num, [ SumColumn(stunting_severe_column(self.beta), filters=filters + get_age_filters(self.beta)), SumColumn(hfa_recorded_in_month_column(self.beta), alias='height_measured_in_month', filters=filters + get_age_filters(self.beta)) ], slug='stunting_severe'), AggregateColumn( 'Percent children with moderate stunting (height for age)', percent_num, [ SumColumn(stunting_moderate_column(self.beta), filters=filters + get_age_filters(self.beta)), AliasColumn('height_measured_in_month') ], slug='stunting_moderate'), AggregateColumn( 'Percent children with normal (height for age)', percent_num, [ SumColumn(stunting_normal_column(self.beta), filters=filters + get_age_filters(self.beta)), AliasColumn('height_measured_in_month') ], slug='stunting_normal'), AggregateColumn( 'Percent children immunized with 1st year immunizations', lambda x, y, z: ((x or 0) + (y or 0)) * 100 / float(z or 1), [ SumColumn('fully_immunized_on_time'), SumColumn('fully_immunized_late'), SumColumn('fully_immunized_eligible') ], slug='fully_immunized'), AggregateColumn( 'Percent Children breastfed at birth', percent_num, [SumColumn('bf_at_birth'), SumColumn('born_in_month')], slug='breastfed_at_birth'), AggregateColumn( 'Percent Children exclusively breastfed', percent_num, [SumColumn('ebf_in_month'), SumColumn('ebf_eligible')], slug='exclusively_breastfed'), AggregateColumn( 'Percent Children initiated appropriate complementary feeding', percent_num, [ SumColumn('cf_initiation_in_month'), SumColumn('cf_initiation_eligible') ], slug='cf_initiation'), AggregateColumn( 'Perecent children complementary feeding', percent_num, [SumColumn('cf_in_month'), SumColumn('cf_eligible')], slug='complementary_feeding'), AggregateColumn( 'Percentage of children consuming atleast 4 food groups', percent_num, [SumColumn('cf_diet_diversity'), AliasColumn('cf_eligible')], slug='diet_diversity'), AggregateColumn( 'Percentage of children consuming adequate food', percent_num, [SumColumn('cf_diet_quantity'), AliasColumn('cf_eligible')], slug='diet_quantity'), AggregateColumn( 'Percentage of children whose mothers handwash before feeding', percent_num, [SumColumn('cf_handwashing'), AliasColumn('cf_eligible')], slug='handwashing'), DatabaseColumn('Children (0 - 28 Days) Seeking Services', SumColumn('valid_in_month', filters=filters + [EQ('age_tranche', 'age_0')], alias='zero'), slug='zero'), DatabaseColumn('Children (28 Days - 6 mo) Seeking Services', SumColumn('valid_in_month', filters=filters + [EQ('age_tranche', 'age_6')], alias='one'), slug='one'), DatabaseColumn('Children (6 mo - 1 year) Seeking Services', SumColumn('valid_in_month', filters=filters + [EQ('age_tranche', 'age_12')], alias='two'), slug='two'), DatabaseColumn('Children (1 year - 3 years) Seeking Services', SumColumn('valid_in_month', filters=filters + [ OR([ EQ('age_tranche', 'age_24'), EQ('age_tranche', 'age_36') ]) ], alias='three'), slug='three'), DatabaseColumn('Children (3 years - 6 years) Seeking Services', SumColumn('valid_in_month', filters=filters + [ OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72') ]) ], alias='four'), slug='four'), AggregateColumn( 'Percent of children born in month with low birth weight', percent_num, [ SumColumn('low_birth_weight_in_month'), SumColumn('weighed_and_born_in_month') ], slug='low_birth_weight') ]
def columns(self): return [ DatabaseColumn( "Total pregnant", CountUniqueColumn('doc_id', alias="total_pregnant"), ), DatabaseColumn( "ANC3", CountUniqueColumn('doc_id', alias="anc_3", filters=self.filters + [EQ('anc_3', 'yes')]), ), DatabaseColumn( "TT Completed (TT2 or Booster)", CountUniqueColumn( 'doc_id', alias="tt_completed", filters=self.filters + [OR([EQ('tt_2', 'yes'), EQ('tt_booster', 'yes')])]), ), DatabaseColumn( "Taking IFA tablets", CountUniqueColumn('doc_id', alias="ifa_tablets", filters=self.filters + [EQ('iron_folic', 'yes')]), ), DatabaseColumn( "Completed 100 IFA tablets", CountUniqueColumn('doc_id', alias="100_tablets", filters=self.filters + [EQ('completed_100_ifa', 'yes')]), ), DatabaseColumn( "ANC3 Total Eligible", CountUniqueColumn( 'doc_id', alias="anc_3_eligible", filters=self.filters + [AND([EQ('anc_2', 'yes'), LTE('lmp', 'days_224')])]), ), DatabaseColumn( "TT Completed (TT2 or Booster) Total Eligible", CountUniqueColumn( 'doc_id', alias="tt_completed_eligible", filters=self.filters + [OR([EQ('tt_1', 'yes'), EQ('previous_tetanus', 'yes')])]), ), DatabaseColumn( "Taking IFA tablets Total Eligible", CountUniqueColumn('doc_id', alias="ifa_tablets_eligible"), ), DatabaseColumn( "Completed 100 IFA tablets Total Eligible", CountUniqueColumn('doc_id', alias="100_tablets_eligible", filters=self.filters + [LTE('lmp', 'days_195')]), ) ]
def columns(self): return [ DatabaseColumn( _("Total number of ASHAs under the Facilitator"), CountUniqueColumn( "case_id", filters=[ EQ('owner_id', 'af'), OR([ISNULL('closed_on'), GTE('closed_on', 'enddate')]), LTE('registration_date', 'enddate') ], alias="total_ashas" ) ), DatabaseColumn( _("Total number of ASHAs for whom functionality checklist was filled"), CountUniqueColumn( "case_id", filters=[ EQ('owner_id', 'af'), EQ('is_checklist', 'is_checklist'), BETWEEN('date', 'startdate', 'enddate') ], alias="total_ashas_checklist" ) ), DatabaseColumn( _("Newborn visits within first day of birth in case of home deliveries"), FunctionalityChecklistColumn('hv_fx_home_birth_visits', whens={1: 1}), ), DatabaseColumn( _("Set of home visits for newborn care as specified in the HBNC guidelines<br/>" "(six visits in case of Institutional delivery and seven in case of a home delivery)"), FunctionalityChecklistColumn('hv_fx_newborns_visited', whens={1: 1}), ), DatabaseColumn( _("Attending VHNDs/Promoting immunization"), FunctionalityChecklistColumn('hv_fx_vhnd', whens={1: 1}), ), DatabaseColumn( _("Supporting institutional delivery"), FunctionalityChecklistColumn('hv_fx_support_inst_delivery', whens={1: 1}), ), DatabaseColumn( _("Management of childhood illness - especially diarrhea and pneumonia"), FunctionalityChecklistColumn('hv_fx_child_illness_mgmt', whens={1: 1}), ), DatabaseColumn( _("Household visits with nutrition counseling"), FunctionalityChecklistColumn('hv_fx_nut_counseling', whens={1: 1}), ), DatabaseColumn( _("Fever cases seen/malaria slides made in malaria endemic area"), FunctionalityChecklistColumn('hv_fx_malaria', whens={1: 1}), ), DatabaseColumn( _("Acting as DOTS provider"), FunctionalityChecklistColumn('hv_fx_dots', whens={1: 1}), ), DatabaseColumn( _("Holding or attending village/VHSNC meeting"), FunctionalityChecklistColumn('hv_fx_vhsnc', whens={1: 1}), ), DatabaseColumn( _("Successful referral of the IUD, " "female sterilization or male sterilization cases and/or providing OCPs/Condoms"), FunctionalityChecklistColumn('hv_fx_fp', whens={1: 1}), ), AggregateColumn( _("<b>Total number of ASHAs who are functional on at least %s of the tasks</b>") % "60%", aggregate_fn=lambda x, y: { 'sort_key': ((x or 0) * 100 / (y or 1)), 'html': '{0}/{1} ({2}%)'.format((x or 0), y, ((x or 0) * 100 // (y or 1))) }, columns=[ FunctionalityChecklistColumn( whens={'hv_percent_functionality >= 60': 1}, alias='percent_functionality'), AliasColumn('total_ashas_checklist') ], format_fn=lambda x: x ), ]
def columns(self): return [ self.first_column, DatabaseColumn( _('home_visits_pregnant'), CountColumn('home_visit', alias="home_visits_pregnant", filters=self.filters + [EQ('home_visit', 'one')])), DatabaseColumn( _('home_visits_postpartem'), CountColumn('post_partem', alias="home_visits_postpartem", filters=self.filters + [EQ('post_partem', 'one')])), DatabaseColumn( _('home_visits_newborn'), CountColumn('doc_id', alias="home_visits_newborn", filters=self.filters + [ OR([ EQ('newborn_reg', 'one'), EQ('newborn_followup', 'one') ]) ])), DatabaseColumn( _('home_visits_children'), CountColumn('doc_id', alias="home_visits_children", filters=self.filters + [ OR([ EQ('child_reg', 'one'), EQ('child_followup', 'one') ]) ])), DatabaseColumn( _('home_visits_other'), CountColumn('doc_id', alias="home_visits_other", filters=self.filters + [ OR([ AND([ EQ('home_visit', 'zero'), EQ('post_partem', 'zero') ]), EQ('sex', 'one'), EQ('adult_followup', 'one') ]) ])), AggregateColumn(_("home_visits_total"), add_all, [ AliasColumn("home_visits_pregnant"), AliasColumn("home_visits_postpartem"), AliasColumn("home_visits_newborn"), AliasColumn("home_visits_children"), AliasColumn("home_visits_other"), ], slug='home_visits_total'), DatabaseColumn( _('rdt_positive_children'), CountColumn('doc_id', alias='rdt_positive_children', filters=self.filters + [EQ('rdt_children', 'one')])), DatabaseColumn( _('rdt_positive_adults'), CountColumn('doc_id', alias='rdt_positive_adults', filters=self.filters + [EQ('rdt_adult', 'one')])), DatabaseColumn( _('rdt_others'), CountColumn('doc_id', alias='rdt_others', filters=self.filters + [ OR([ EQ('rdt_adult', 'zero'), EQ('rdt_children', 'zero') ]) ])), AggregateColumn(_('rdt_total'), add_all, [ AliasColumn('rdt_positive_children'), AliasColumn('rdt_positive_adults'), AliasColumn('rdt_others') ], slug='rdt_total'), DatabaseColumn( _('diagnosed_malaria_child'), CountColumn('malaria_child', alias='diagnosed_malaria_child', filters=self.filters + [EQ('malaria_child', 'one')])), DatabaseColumn( _('diagnosed_malaria_adult'), CountColumn('malaria_adult', alias='diagnosed_malaria_adult', filters=self.filters + [EQ('malaria_adult', 'one')])), DatabaseColumn( _('diagnosed_diarrhea'), CountColumn('doc_id', alias='diagnosed_diarrhea', filters=self.filters + [ OR([ EQ('diarrhea_child', 'one'), EQ('diarrhea_adult', 'one') ]) ])), DatabaseColumn( _('diagnosed_ari'), CountColumn( 'doc_id', alias='diagnosed_ari', filters=self.filters + [OR([EQ('ari_child', 'one'), EQ('ari_adult', 'one')])])), AggregateColumn(_('diagnosed_total'), add_all, [ AliasColumn('diagnosed_malaria_child'), AliasColumn('diagnosed_malaria_adult'), AliasColumn('diagnosed_diarrhea'), AliasColumn('diagnosed_ari') ], slug='diagnosed_total'), DatabaseColumn( _('treated_malaria'), CountColumn('doc_id', alias='treated_malaria', filters=self.filters + [ OR([ AND([ EQ('it_malaria_child', 'one'), EQ('malaria_child', 'one') ]), AND([ EQ('it_malaria_adult', 'one'), EQ('malaria_adult', 'one') ]) ]) ])), DatabaseColumn( _('treated_diarrhea'), CountColumn('doc_id', alias='treated_diarrhea', filters=self.filters + [ OR([ AND([ EQ('diarrhea_child', 'one'), EQ('it_diarrhea_child', 'one') ]), AND([ EQ('diarrhea_adult', 'one'), EQ('it_diarrhea_adult', 'one') ]) ]) ])), DatabaseColumn( _('treated_ari'), CountColumn('doc_id', alias='treated_ari', filters=self.filters + [ OR([ AND([ EQ('ari_child', 'one'), EQ('it_ari_child', 'one') ]), AND([ EQ('ari_adult', 'one'), EQ('it_ari_adult', 'one') ]) ]) ])), AggregateColumn(_('treated_total'), add_all, [ AliasColumn('treated_malaria'), AliasColumn('treated_diarrhea'), AliasColumn('treated_ari') ], slug='treated_total'), DatabaseColumn( _('transfer_malnutrition'), CountColumn('doc_id', alias='transfer_malnutrition', filters=self.filters + [ OR([ EQ('malnutrition_child', 'one'), EQ('malnutrition_adult', 'one') ]) ])), DatabaseColumn( _('transfer_incomplete_vaccination'), CountColumn('doc_id', alias='transfer_incomplete_vaccination', filters=self.filters + [ OR([ EQ('vaccination_child', 'one'), EQ('vaccination_adult', 'one'), EQ('vaccination_newborn', 'one') ]) ])), DatabaseColumn( _('transfer_danger_signs'), CountColumn('doc_id', alias='transfer_danger_signs', filters=self.filters + [ OR([ EQ('danger_sign_child', 'one'), EQ('danger_sign_adult', 'one'), EQ('danger_sign_newborn', 'one') ]) ])), DatabaseColumn( _('transfer_prenatal_consult'), CountColumn('doc_id', alias='transfer_prenatal_consult', filters=self.filters + [EQ('prenatal_consult', 'one')])), DatabaseColumn( _('transfer_missing_malaria_meds'), CountColumn('doc_id', alias='transfer_missing_malaria_meds', filters=self.filters + [ OR([ EQ('missing_malaria_meds_child', 'one'), EQ('missing_malaria_meds_adult', 'one') ]) ])), DatabaseColumn( _('transfer_other'), CountColumn('doc_id', alias='transfer_other', filters=self.filters + [ OR([ EQ('other_child', 'one'), EQ('other_adult', 'one'), EQ('other_newborn', 'one') ]) ])), AggregateColumn(_('transfer_total'), add_all, [ AliasColumn('transfer_malnutrition'), AliasColumn('transfer_incomplete_vaccination'), AliasColumn('transfer_danger_signs'), AliasColumn('transfer_prenatal_consult'), AliasColumn('transfer_missing_malaria_meds'), AliasColumn('transfer_other'), ], slug='transfer_total'), DatabaseColumn( _('deaths_newborn'), CountColumn('doc_id', alias='deaths_newborn', filters=self.filters + [EQ('deaths_newborn', 'one')])), DatabaseColumn( _('deaths_children'), CountColumn('doc_id', alias='deaths_children', filters=self.filters + [EQ('deaths_children', 'one')])), DatabaseColumn( _('deaths_mothers'), CountColumn('doc_id', alias='deaths_mothers', filters=self.filters + [EQ('deaths_mothers', 'one')])), DatabaseColumn( _('deaths_others'), SumColumn('deaths_others', alias='deaths_other', filters=self.filters + [NOTEQ('deaths_others', 'zero')])), AggregateColumn(_('deaths_total'), add_all, [ AliasColumn('deaths_newborn'), AliasColumn('deaths_children'), AliasColumn('deaths_mothers'), AliasColumn('deaths_other'), ], slug='deaths_total'), DatabaseColumn( _('heath_ed_talks'), SumColumn('heath_ed_talks', alias='heath_ed_talks', filters=self.filters + [NOTEQ('heath_ed_talks', 'zero')])), DatabaseColumn( _('heath_ed_participants'), SumColumn('heath_ed_participants', alias='heath_ed_participants', filters=self.filters + [NOTEQ('heath_ed_participants', 'zero')])) ]
def columns(self): return [ DatabaseColumn("Total pregnant", CountUniqueColumn('doc_id', alias="total_pregnant")), DatabaseColumn( "ANC3", CountUniqueColumn('doc_id', alias="anc_3", filters=self.filters + [EQ('anc_3', 'yes')])), DatabaseColumn( "TT Completed (TT2 or Booster)", CountUniqueColumn( 'doc_id', alias="tt_completed", filters=self.filters + [OR([EQ('tt_2', 'yes'), EQ('tt_booster', 'yes')])])), DatabaseColumn( "Taking IFA tablets", CountUniqueColumn('doc_id', alias="ifa_tablets", filters=self.filters + [EQ('iron_folic', 'yes')])), DatabaseColumn( "Completed 100 IFA tablets", CountUniqueColumn('doc_id', alias="100_tablets", filters=self.filters[1:-1] + [ AND([ EQ('completed_100_ifa', 'yes'), GTE('delivery_date', 'strsd'), LTE('delivery_date', 'stred') ]) ])), DatabaseColumn( "ANC3 Total Eligible", CountUniqueColumn( 'doc_id', alias="anc_3_eligible", filters=self.filters + [AND([EQ('anc_2', 'yes'), LTE('edd', 'today_plus_56')])])), DatabaseColumn( "TT Completed (TT2 or Booster) Total Eligible", CountUniqueColumn( 'doc_id', alias="tt_completed_eligible", filters=self.filters + [OR([EQ('tt_1', 'yes'), EQ('previous_tetanus', 'yes')])])), DatabaseColumn( "Taking IFA tablets Total Eligible", CountUniqueColumn('doc_id', alias="ifa_tablets_eligible")), DatabaseColumn( "Completed 100 IFA tablets Total Eligible", CountUniqueColumn('doc_id', alias="100_tablets_eligible", filters=self.filters[1:-1] + [ AND([ GTE('delivery_date', 'strsd'), LTE('delivery_date', 'stred') ]) ])), ]
def columns(self): return [ DatabaseColumn('awc_id', SimpleColumn('awc_id')), DatabaseColumn( 'pre_sc_boys_36_72', CountUniqueColumn('doc_id', alias='pre_sc_boys_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'sc'), EQ('sex', 'male'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_sc_girls_36_72', CountUniqueColumn('doc_id', alias='pre_sc_girls_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'sc'), EQ('sex', 'female'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_st_boys_36_72', CountUniqueColumn('doc_id', alias='pre_st_boys_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'st'), EQ('sex', 'male'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_st_girls_36_72', CountUniqueColumn('doc_id', alias='pre_st_girls_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'st'), EQ('sex', 'female'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_obc_boys_36_72', CountUniqueColumn('doc_id', alias='pre_obc_boys_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'obc'), EQ('sex', 'male'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_obc_girls_36_72', CountUniqueColumn('doc_id', alias='pre_obc_girls_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'obc'), EQ('sex', 'female'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_general_boys_36_72', CountUniqueColumn('doc_id', alias='pre_general_boys_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'other'), EQ('sex', 'male'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_general_girls_36_72', CountUniqueColumn('doc_id', alias='pre_general_girls_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('caste', 'other'), EQ('sex', 'female'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_total_boys_36_72', CountUniqueColumn('doc_id', alias='pre_total_boys_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('sex', 'male'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_total_girls_36_72', CountUniqueColumn('doc_id', alias='pre_total_girls_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('sex', 'female'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), ])), DatabaseColumn( 'pre_minority_boys_36_72', CountUniqueColumn('doc_id', alias='pre_minority_boys_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('sex', 'male'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), EQ('minority', 'yes'), ])), DatabaseColumn( 'pre_minority_girls_36_72', CountUniqueColumn('doc_id', alias='pre_minority_girls_36_72', filters=self.filters + [ GTE('pse_days_attended', 'twentyone'), EQ('sex', 'female'), OR([ EQ('age_tranche', 'age_48'), EQ('age_tranche', 'age_60'), EQ('age_tranche', 'age_72'), ]), EQ('minority', 'yes'), ])) ]