コード例 #1
0
ファイル: sql_reports.py プロジェクト: zbidi/commcare-hq
 def columns(self):
     return self.common_columns + \
         [
             DatabaseColumn("Count", CountColumn("doc_id", alias="day_count")),
             DatabaseColumn("disease", SimpleColumn("disease_name", alias="disease_name"))
         ]
コード例 #2
0
 def columns(self):
     columns = super(ImmunizationDetailsFirstYear, self).columns
     del columns[6:8]
     del columns[-2:]
     cols1 = [
         DatabaseColumn(
             "OPV0",
             CountUniqueColumn('doc_id',
                               alias="opv0",
                               filters=self.filters + [EQ('opv0', 'yes')])),
         DatabaseColumn(
             "HEP0",
             CountUniqueColumn('doc_id',
                               alias="hep0",
                               filters=self.filters +
                               [EQ('hepb0', 'yes')])),
         DatabaseColumn(
             "OPV1",
             CountUniqueColumn('doc_id',
                               alias="opv1",
                               filters=self.filters + [EQ('opv1', 'yes')])),
         DatabaseColumn(
             "HEP1",
             CountUniqueColumn('doc_id',
                               alias="hep1",
                               filters=self.filters +
                               [EQ('hepb1', 'yes')])),
         DatabaseColumn(
             "DPT1",
             CountUniqueColumn('doc_id',
                               alias="dpt1",
                               filters=self.filters + [EQ('dpt1', 'yes')])),
         DatabaseColumn(
             "OPV2",
             CountUniqueColumn('doc_id',
                               alias="opv2",
                               filters=self.filters + [EQ('opv2', 'yes')])),
         DatabaseColumn(
             "HEP2",
             CountUniqueColumn('doc_id',
                               alias="hep2",
                               filters=self.filters +
                               [EQ('hepb2', 'yes')])),
         DatabaseColumn(
             "DPT2",
             CountUniqueColumn('doc_id',
                               alias="dpt2",
                               filters=self.filters + [EQ('dpt2', 'yes')])),
     ]
     cols2 = [
         DatabaseColumn(
             "OPV0 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="opv0_eligible",
                               filters=self.filters)),
         DatabaseColumn(
             "HEP0 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="hep0_eligible",
                               filters=self.filters)),
         DatabaseColumn(
             "OPV1 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="opv1_eligible",
                               filters=self.filters +
                               [LTE('dob', 'today_minus_40')])),
         DatabaseColumn(
             "HEP1 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="hep1_eligible",
                               filters=self.filters +
                               [LTE('dob', 'today_minus_40')])),
         DatabaseColumn(
             "DPT1 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="dpt1_eligible",
                               filters=self.filters +
                               [LTE('dob', 'today_minus_40')])),
         DatabaseColumn(
             "OPV2 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="opv2_eligible",
                               filters=self.filters +
                               [LTE('dob', 'today_minus_75')])),
         DatabaseColumn(
             "HEP2 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="hep2_eligible",
                               filters=self.filters +
                               [LTE('dob', 'today_minus_75')])),
         DatabaseColumn(
             "DPT2 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="dpt2_eligible",
                               filters=self.filters +
                               [LTE('dob', 'today_minus_75')]))
     ]
     cols3 = [
         DatabaseColumn(
             "VitA1",
             CountUniqueColumn('doc_id',
                               alias="vita1",
                               filters=self.filters + [EQ('vita1', 'yes')]))
     ]
     cols4 = [
         DatabaseColumn(
             "VitA1 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="vita1_eligible",
                               filters=self.filters +
                               [LTE('dob', 'today_minus_273')]))
     ]
     return columns[:1] + cols1 + columns[1:5] + cols3 + columns[5:-5] \
         + cols2 + columns[-5:-1] + cols4 + columns[-1:]
コード例 #3
0
ファイル: sqldata.py プロジェクト: yonglehou/commcare-hq
 def columns(self):
     levels = [k for k in self.geography_config.keys()]
     columns = []
     for k in levels:
         columns.append(DatabaseColumn(k, SimpleColumn(k)))
     return columns
コード例 #4
0
 def columns(self):
     return [
         DatabaseColumn("Cause of death",
                        SimpleColumn('cause_of_death_child')),
         DatabaseColumn("Number", CountUniqueColumn('doc_id')),
     ]
コード例 #5
0
 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
コード例 #6
0
 def columns(self):
     columns = self.get_columns_by_loc_level
     agg_columns = [
         DatabaseColumn(
             'num_households',
             SumColumn('cases_household'),
             slug='num_households'
         ),
         DatabaseColumn(
             'num_people',
             SumColumn('cases_person_all'),
             slug='num_people'
         ),
         DatabaseColumn(
             'beneficiary_persons',
             SumColumn(self.person_is_beneficiary_column),
             slug='beneficiary_persons'
         ),
         DatabaseColumn(
             'person_has_aadhaar',
             SumColumn(self.person_has_aadhaar_column),
             slug='person_has_aadhaar'
         ),
         AggregateColumn(
             'num_people_with_aadhar',
             percent,
             [
                 AliasColumn(self.person_has_aadhaar_column),
                 AliasColumn(self.person_is_beneficiary_column)
             ],
             slug='num_people_with_aadhar'
         ),
         DatabaseColumn(
             'num_pregnant_women',
             SumColumn('cases_ccs_pregnant_all'),
             slug='num_pregnant_women'
         ),
         DatabaseColumn(
             'num_pregnant_women_enrolled_for_services',
             SumColumn('cases_ccs_pregnant'),
             slug='num_pregnant_women_enrolled_for_services'
         ),
         DatabaseColumn(
             'num_lactating_women',
             SumColumn('cases_ccs_lactating_all'),
             slug='num_lactating_women'
         ),
         DatabaseColumn(
             'num_lactating_women_enrolled_for_services',
             SumColumn('cases_ccs_lactating'),
             slug='num_lactating_women_enrolled_for_services'
         ),
         DatabaseColumn(
             'num_children_0_6years',
             SumColumn('cases_child_health_all'),
             slug='num_children_0_6years'
         ),
         DatabaseColumn(
             'num_children_0_6years_enrolled_for_services',
             SumColumn('cases_child_health'),
             slug='num_children_0_6years_enrolled_for_services'
         ),
         DatabaseColumn(
             'num_adolescent_girls_11yr14yr',
             SumColumn('cases_person_adolescent_girls_11_14_all'),
             slug='num_adolescent_girls_11yr14yr'
         ),
         DatabaseColumn(
             'num_adolescent_girls_15yr18yr',
             SumColumn('cases_person_adolescent_girls_15_18_all'),
             slug='num_adolescent_girls_15yr18yr'
         ),
         DatabaseColumn(
             'num_adolescent_girls_11yr14yr_enrolled_for_services',
             SumColumn('cases_person_adolescent_girls_11_14'),
             slug='num_adolescent_girls_11yr14yr_enrolled_for_services'
         ),
         DatabaseColumn(
             'num_adolescent_girls_15yr18yr_enrolled_for_services',
             SumColumn('cases_person_adolescent_girls_15_18'),
             slug='num_adolescent_girls_15yr18yr_enrolled_for_services'
         )
     ]
     return columns + agg_columns
コード例 #7
0
 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')]),
         )
     ]
コード例 #8
0
 def columns(self):
     return [
         DatabaseColumn('Product Name', SimpleColumn('product_id')),
         DatabaseColumn("Commandes", SumColumn('commandes_total')),
         DatabaseColumn("Recu", SumColumn('recus_total'))
     ]
コード例 #9
0
    def columns(self):
        diff = lambda x, y: (x or 0) - (y or 0)

        def get_prd_name(id):
            try:
                return SQLProduct.objects.get(product_id=id,
                                              domain=self.config['domain'],
                                              is_archived=False).name
            except SQLProduct.DoesNotExist:
                pass

        return [
            DatabaseColumn(_("Designations"),
                           SimpleColumn('product_id'),
                           format_fn=lambda id: get_prd_name(id)),
            DatabaseColumn(_("Stock apres derniere livraison"),
                           SumColumn('product_old_stock_total')),
            DatabaseColumn(_("Stock disponible et utilisable a la livraison"),
                           SumColumn('product_total_stock')),
            DatabaseColumn(_("Livraison"), SumColumn('product_livraison')),
            DatabaseColumn(
                _("Stock Total"),
                SumColumn('product_display_total_stock', alias='stock_total')),
            DatabaseColumn(_("Precedent"), SumColumn('product_old_stock_pps')),
            DatabaseColumn(_("Recu hors entrepots mobiles"),
                           SumColumn('product_outside_receipts_amount')),
            AggregateColumn(
                _("Non Facturable"), diff,
                [AliasColumn('aconsumption'),
                 AliasColumn("bconsumption")]),
            DatabaseColumn(
                _("Facturable"),
                SumColumn('product_billed_consumption', alias='bconsumption')),
            DatabaseColumn(
                _("Reelle"),
                SumColumn('product_actual_consumption', alias='aconsumption')),
            DatabaseColumn("Stock Total", AliasColumn('stock_total')),
            DatabaseColumn("PPS Restant", SumColumn('product_pps_restant')),
            DatabaseColumn("Pertes et Adjustement",
                           SumColumn('product_loss_amt'))
        ]
コード例 #10
0
 def columns(self):
     return [
         DatabaseColumn('Food code', SimpleColumn('food_code')),
     ]
コード例 #11
0
 def columns(self):
     return [
         DatabaseColumn('Food base term', SimpleColumn('food_base_term')),
     ]
コード例 #12
0
 def columns(self):
     columns = self.get_columns_by_loc_level
     agg_columns = [
         AggregateColumn(
             'Weighing efficiency (in month)',
             percent,
             [
                 SumWhen(
                     whens={"age_tranche != :age_72": 'nutrition_status_weighed'}, else_=0,
                     alias='nutrition_status_weighed'
                 ),
                 SumWhen(
                     whens={"age_tranche != :age_72": 'wer_eligible'}, else_=0,
                     alias='wer_eligible'
                 )
             ],
             slug='percent_weight_efficiency'
         ),
         AggregateColumn(
             'Height measurement efficiency (in month)',
             percent,
             [
                 SumWhen(
                     whens={"age_tranche != :age_72": 'height_measured_in_month'}, else_=0,
                     alias='height_measured_in_month_efficiency'
                 ),
                 SumWhen(
                     whens={"age_tranche != :age_72": 'height_eligible'}, else_=0,
                     alias='height_eligible',
                 )
             ],
             slug='height_measurement'
         ),
         DatabaseColumn(
             'Total number of unweighed children (0-5 Years)',
             SumWhen(
                 whens={"age_tranche != :age_72": 'nutrition_status_unweighed'}, else_=0,
                 alias='nutrition_status_unweighed'
             ),
             slug='total_number_unweighed'
         ),
         AggregateColumn(
             'Percentage of severely underweight children',
             percent,
             [
                 SumWhen(
                     whens={"age_tranche != :age_72": 'nutrition_status_severely_underweight'}, else_=0,
                     alias='nutrition_status_severely_underweight'
                 ),
                 AliasColumn('nutrition_status_weighed'),
             ],
             slug='percent_severe_underweight'
         ),
         AggregateColumn(
             'Percentage of moderately underweight children',
             percent,
             [
                 SumWhen(
                     whens={"age_tranche != :age_72": 'nutrition_status_moderately_underweight'}, else_=0,
                     alias='nutrition_status_moderately_underweight'
                 ),
                 AliasColumn('nutrition_status_weighed'),
             ],
             slug='percent_moderate_underweight'
         ),
         AggregateColumn(
             'Percentage of normal weight-for-age children',
             percent,
             [
                 SumWhen(
                     whens={"age_tranche != :age_72": 'nutrition_status_normal'}, else_=0,
                     alias='nutrition_status_normal'
                 ),
                 AliasColumn('nutrition_status_weighed'),
             ],
             slug='percent_normal_weight'
         ),
         AggregateColumn(
             'Percentage of children with severe wasting',
             percent,
             [
                 SumWhen(
                     whens={get_age_condition(self.beta): wasting_severe_column(self.beta)},
                     alias='wasting_severe'
                 ),
                 SumWhen(
                     whens={get_age_condition(self.beta): wfh_recorded_in_month_column(self.beta)},
                     alias='weighed_and_height_measured_in_month'
                 ),
             ],
             slug='percent_severe_wasting'
         ),
         AggregateColumn(
             'Percentage of children with moderate wasting',
             percent,
             [
                 SumWhen(
                     whens={get_age_condition(self.beta): wasting_moderate_column(self.beta)},
                     alias='wasting_moderate'
                 ),
                 AliasColumn('weighed_and_height_measured_in_month')
             ],
             slug='percent_moderate_wasting'
         ),
         AggregateColumn(
             'Percentage of children with normal weight-for-height',
             percent,
             [
                 SumWhen(
                     whens={get_age_condition(self.beta): wasting_normal_column(self.beta)},
                     alias='wasting_normal'
                 ),
                 AliasColumn('weighed_and_height_measured_in_month')
             ],
             slug='percent_normal_wasting'
         ),
         AggregateColumn(
             'Percentage of children with severe stunting',
             percent,
             [
                 SumWhen(
                     whens={get_age_condition(self.beta): stunting_severe_column(self.beta)},
                     alias='stunting_severe'
                 ),
                 SumWhen(
                     whens={get_age_condition(self.beta): hfa_recorded_in_month_column(self.beta)},
                     alias='height_measured_in_month'
                 ),
             ],
             slug='percent_severe_stunting'
         ),
         AggregateColumn(
             'Percentage of children with moderate stunting',
             percent,
             [
                 SumWhen(
                     whens={get_age_condition(self.beta): stunting_moderate_column(self.beta)},
                     alias='stunting_moderate'
                 ),
                 AliasColumn('height_measured_in_month')
             ],
             slug='percent_moderate_stunting'
         ),
         AggregateColumn(
             'Percentage of children with normal height-for-age',
             percent,
             [
                 SumWhen(
                     whens={get_age_condition(self.beta): stunting_normal_column(self.beta)},
                     alias='stunting_normal'
                 ),
                 AliasColumn('height_measured_in_month')
             ],
             slug='percent_normal_stunting'
         ),
         AggregateColumn(
             'Percent of newborns with low birth weight',
             percent,
             [
                 SumColumn('low_birth_weight_in_month'),
                 SumColumn('weighed_and_born_in_month')
             ],
             slug='newborn_low_birth_weight'
         ),
         AggregateColumn(
             'Percentage of children with completed 1 year immunizations',
             lambda x, y, z: '%.2f%%' % (((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='percent_completed_1year_immunizations'
         ),
         AggregateColumn(
             'Percentage of children breastfed at birth',
             percent,
             [
                 SumColumn('bf_at_birth'),
                 SumColumn('born_in_month')
             ],
             slug='percent_breastfed_at_birth'
         ),
         AggregateColumn(
             'Percentage of children exclusively breastfeeding',
             percent,
             [
                 SumColumn('ebf_in_month'),
                 SumColumn('ebf_eligible')
             ],
             slug='percent_ebf'
         ),
         AggregateColumn(
             'Percentage of children initiated complementary feeding (in the past 30 days)',
             percent,
             [
                 SumColumn('cf_initiation_in_month'),
                 SumColumn('cf_initiation_eligible')
             ],
             slug='percent_initiated_on_cf'
         ),
         AggregateColumn(
             'Percentage of children initiated appropriate complementary feeding',
             percent,
             [
                 SumColumn('cf_in_month'),
                 SumColumn('cf_eligible')
             ],
             slug='percent_appropriate_cf'
         ),
         AggregateColumn(
             'Percentage of children receiving complementary feeding with adequate diet diversity',
             percent,
             [
                 SumColumn('cf_diet_diversity'),
                 AliasColumn('cf_eligible')
             ],
             slug='percent_cf_diet_diversity'
         ),
         AggregateColumn(
             'Percentage of children receiving complementary feeding with adequate diet quanity',
             percent,
             [
                 SumColumn('cf_diet_quantity'),
                 AliasColumn('cf_eligible')
             ],
             slug='percent_cf_diet_quanity'
         ),
         AggregateColumn(
             "Percentage of children receiving complementary feeding "
             "with appropriate handwashing before feeding",
             percent,
             [
                 SumColumn('cf_handwashing'),
                 AliasColumn('cf_eligible')
             ],
             slug='percent_cf_handwashing_before_feeding'
         ),
     ]
     return columns + agg_columns
コード例 #13
0
ファイル: sql_reports.py プロジェクト: zbidi/commcare-hq
    def columns(self):
        female_range_group = DataTablesColumnGroup(
            "Female Positive Tests (% positive)")
        male_range_group = DataTablesColumnGroup(
            "Male Positive Tests (% positive)")

        def age_range_filter(gender, age_from, age_to):
            return [
                AND([
                    EQ("gender", gender),
                    EQ("diagnosis", "positive"),
                    BETWEEN("age", age_from, age_to)
                ])
            ]

        def generate_columns(gender):
            age_range_group = male_range_group if gender is "male" else female_range_group
            return [
                AggregateColumn(
                    "0-10",
                    self.percent_fn, [
                        CountColumn('doc_id',
                                    alias="zero_ten_" + gender,
                                    filters=self.filters +
                                    age_range_filter(gender, "zero", "ten")),
                        AliasColumn(gender + "_total")
                    ],
                    header_group=age_range_group,
                    sort_type=DTSortType.NUMERIC),
                AggregateColumn(
                    "10-20",
                    self.percent_fn, [
                        CountColumn(
                            'doc_id',
                            alias="ten_twenty_" + gender,
                            filters=self.filters +
                            age_range_filter(gender, "ten_plus", "twenty")),
                        AliasColumn(gender + "_total")
                    ],
                    header_group=age_range_group,
                    sort_type=DTSortType.NUMERIC),
                AggregateColumn(
                    "20-50",
                    self.percent_fn, [
                        CountColumn(
                            'doc_id',
                            alias="twenty_fifty_" + gender,
                            filters=self.filters +
                            age_range_filter(gender, "twenty_plus", "fifty")),
                        AliasColumn(gender + "_total")
                    ],
                    header_group=age_range_group,
                    sort_type=DTSortType.NUMERIC),
                AggregateColumn(
                    "50+",
                    self.percent_fn, [
                        CountColumn('doc_id',
                                    alias="fifty_" + gender,
                                    filters=self.filters + [
                                        AND([
                                            EQ("gender", gender),
                                            EQ("diagnosis", "positive"),
                                            GT("age", "fifty")
                                        ])
                                    ]),
                        AliasColumn(gender + "_total")
                    ],
                    header_group=age_range_group,
                    sort_type=DTSortType.NUMERIC),
                AggregateColumn(
                    "Total",
                    self.percent_fn, [
                        CountColumn('doc_id',
                                    alias="positive_total_" + gender,
                                    filters=self.filters + [
                                        AND([
                                            EQ("gender", gender),
                                            EQ("diagnosis", "positive")
                                        ])
                                    ]),
                        CountColumn(
                            'doc_id',
                            alias=gender + "_total",
                            filters=self.filters + [EQ("gender", gender)]),
                    ],
                    header_group=age_range_group,
                    sort_type=DTSortType.NUMERIC),
            ]

        totals_group = DataTablesColumnGroup("Total tests")
        sum_fn = lambda x, y: int(x or 0) + int(y or 0)

        return self.common_columns + [
            DatabaseColumn("Males ",
                           AliasColumn("male_total"),
                           header_group=totals_group),
            DatabaseColumn("Females ",
                           AliasColumn("female_total"),
                           header_group=totals_group),
            AggregateColumn(
                "Total",
                sum_fn,
                [AliasColumn("male_total"),
                 AliasColumn("female_total")],
                header_group=totals_group),
        ] + generate_columns("male") + generate_columns("female")
コード例 #14
0
ファイル: sql_reports.py プロジェクト: zbidi/commcare-hq
 def columns(self):
     return self.common_columns + [
         DatabaseColumn("Test", CountColumn('doc_id', alias="lot_count"))
     ]
コード例 #15
0
 def columns(self):
     diff = lambda x, y: (x or 0) - (y or 0)
     return [
         DatabaseColumn(_("Designations"), SimpleColumn('product_name')),
         DatabaseColumn(_("Stock apres derniere livraison"),
                        SumColumn('product_old_stock_total')),
         DatabaseColumn(_("Stock disponible et utilisable a la livraison"),
                        SumColumn('product_total_stock')),
         DatabaseColumn(_("Livraison"), SumColumn('product_livraison')),
         DatabaseColumn(
             _("Stock Total"),
             SumColumn('product_display_total_stock', alias='stock_total')),
         DatabaseColumn(_("Precedent"), SumColumn('product_old_stock_pps')),
         DatabaseColumn(_("Recu hors entrepots mobiles"),
                        SumColumn('product_outside_receipts_amount')),
         AggregateColumn(
             _("Non Facturable"), diff,
             [AliasColumn('aconsumption'),
              AliasColumn("bconsumption")]),
         DatabaseColumn(
             _("Facturable"),
             SumColumn('product_billed_consumption', alias='bconsumption')),
         DatabaseColumn(
             _("Reelle"),
             SumColumn('product_actual_consumption', alias='aconsumption')),
         DatabaseColumn("Stock Total", AliasColumn('stock_total')),
         DatabaseColumn("PPS Restant", SumColumn('product_pps_restant')),
         DatabaseColumn("Pertes et Adjustement",
                        SumColumn('product_loss_amt'))
     ]
コード例 #16
0
 def columns(self):
     columns = self.get_columns_by_loc_level
     agg_columns = [
         DatabaseColumn('Number of lactating women',
                        SumColumn('lactating'),
                        slug='lactating'),
         DatabaseColumn('Number of pregnant women',
                        SumColumn('pregnant'),
                        slug='pregnant'),
         DatabaseColumn('Number of postnatal women',
                        SumColumn('postnatal'),
                        slug='postnatal'),
         AggregateColumn(
             'Percentage Anemia',
             lambda x, y, z: '%.2f%%' %
             (((x or 0) + (y or 0)) * 100 / float(z or 1)), [
                 SumWhen(
                     whens=[["ccs_status = 'pregnant'", 'anemic_moderate']],
                     alias='anemic_moderate'),
                 SumWhen(
                     whens=[["ccs_status = 'pregnant'", 'anemic_severe']],
                     alias='anemic_severe'),
                 AliasColumn('pregnant')
             ],
             slug='percent_anemia'),
         AggregateColumn(
             'Percentage Tetanus Completed',
             percent,
             [SumColumn('tetanus_complete'),
              AliasColumn('pregnant')],
             slug='percent_tetanus_complete'),
         AggregateColumn(
             'Percent women had at least 1 ANC visit by delivery',
             percent, [
                 SumColumn('anc1_received_at_delivery'),
                 SumColumn('delivered_in_month')
             ],
             slug='percent_anc1_received_by_delivery'),
         AggregateColumn(
             'Percent women had at least 2 ANC visit by delivery',
             percent, [
                 SumColumn('anc2_received_at_delivery'),
                 AliasColumn('delivered_in_month')
             ],
             slug='percent_anc2_received_by_delivery'),
         AggregateColumn(
             'Percent women had at least 3 ANC visit by delivery',
             percent, [
                 SumColumn('anc3_received_at_delivery'),
                 AliasColumn('delivered_in_month')
             ],
             slug='percent_anc3_received_by_delivery'),
         AggregateColumn(
             'Percent women had at least 4 ANC visit by delivery',
             percent, [
                 SumColumn('anc4_received_at_delivery'),
                 AliasColumn('delivered_in_month')
             ],
             slug='percent_anc4_received_by_delivery'),
         AggregateColumn('Percentage of women resting during pregnancy',
                         percent, [
                             SumColumn('resting_during_pregnancy'),
                             AliasColumn('pregnant')
                         ],
                         slug='percent_resting_during_pregnancy'),
         AggregateColumn(
             'Percentage of women eating extra meal during pregnancy',
             percent, [SumColumn('extra_meal'),
                       AliasColumn('pregnant')],
             slug='percent_eating_extra_meal_during_pregnancy'),
         AggregateColumn(
             'Percentage of trimester 3 women counselled on immediate breastfeeding',
             percent,
             [SumColumn('counsel_immediate_bf'),
              SumColumn('trimester_3')],
             slug='percent_trimester_3_women_counselled_on_immediate_bf')
     ]
     return columns + agg_columns
コード例 #17
0
 def columns(self):
     return [
         DatabaseColumn('week', MaxColumn('week'))
     ]
コード例 #18
0
ファイル: sql.py プロジェクト: xbryanc/commcare-hq
 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')]))
     ]
コード例 #19
0
 def columns(self):
     return [
         DatabaseColumn(
             "BCG",
             CountUniqueColumn('doc_id',
                               alias="bcg",
                               filters=self.filters + [EQ('bcg', 'yes')])),
         DatabaseColumn(
             "OPV3",
             CountUniqueColumn('doc_id',
                               alias="opv3",
                               filters=self.filters + [EQ('opv3', 'yes')])),
         DatabaseColumn(
             "HEP3",
             CountUniqueColumn('doc_id',
                               alias="hep3",
                               filters=self.filters +
                               [EQ('hepb3', 'yes')])),
         DatabaseColumn(
             "DPT3",
             CountUniqueColumn('doc_id',
                               alias="dpt3",
                               filters=self.filters + [EQ('dpt3', 'yes')])),
         DatabaseColumn(
             "Measles",
             CountUniqueColumn('doc_id',
                               alias="measles",
                               filters=self.filters +
                               [EQ('measles', 'yes')])),
         DatabaseColumn(
             "Fully Immunized in 1st year",
             CountUniqueColumn('doc_id',
                               alias="fully_immunized",
                               filters=self.filters + [
                                   AND([
                                       EQ('bcg', 'yes'),
                                       EQ('opv0', 'yes'),
                                       EQ('hepb0', 'yes'),
                                       EQ('opv1', 'yes'),
                                       EQ('hepb1', 'yes'),
                                       EQ('dpt1', 'yes'),
                                       EQ('opv2', 'yes'),
                                       EQ('hepb2', 'yes'),
                                       EQ('dpt2', 'yes'),
                                       EQ('opv3', 'yes'),
                                       EQ('hepb3', 'yes'),
                                       EQ('dpt3', 'yes'),
                                       EQ('measles', 'yes')
                                   ])
                               ])),
         DatabaseColumn(
             "DPT-OPT Booster",
             CountUniqueColumn('doc_id',
                               alias="dpt_opv_booster",
                               filters=self.filters +
                               [EQ('dpt_opv_booster', 'yes')])),
         DatabaseColumn(
             "VitA3",
             CountUniqueColumn('doc_id',
                               alias="vita3",
                               filters=self.filters +
                               [EQ('vita3', 'yes')])),
         DatabaseColumn(
             "BCG Total Eligible",
             CountUniqueColumn('doc_id', alias="bcg_eligible"),
         ),
         DatabaseColumn(
             "OPV3 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="opv3_eligible",
                               filters=self.filters +
                               [LTE('dob', 'days_106')])),
         DatabaseColumn(
             "HEP3 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="hep3_eligible",
                               filters=self.filters +
                               [LTE('dob', 'days_106')])),
         DatabaseColumn(
             "DPT3 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="dpt3_eligible",
                               filters=self.filters +
                               [LTE('dob', 'days_106')])),
         DatabaseColumn(
             "Measles Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="measles_eligible",
                               filters=self.filters +
                               [LTE('dob', 'days_273')])),
         DatabaseColumn(
             "Fully Immunized Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="fully_immunized_eligible",
                               filters=self.filters +
                               [LTE('dob', 'days_273')])),
         DatabaseColumn(
             "DPT-OPT Booster Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="dpt_opv_booster_eligible",
                               filters=self.filters +
                               [LTE('dob', 'days_548')])),
         DatabaseColumn(
             "VitA3 Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="vita3_eligible",
                               filters=self.filters +
                               [LTE('dob', 'days_700')]))
     ]
コード例 #20
0
ファイル: sql.py プロジェクト: xbryanc/commcare-hq
 def columns(self):
     return [
         DatabaseColumn('Date', SimpleColumn('date')),
         DatabaseColumn('user', SimpleColumn('user_id')),
         DatabaseColumn('hf', SimpleColumn('hf')),
         DatabaseColumn('district', SimpleColumn('district')),
         DatabaseColumn(_('form/stock/stock_amox_pink'),
                        SimpleColumn('stock_amox_pink')),
         DatabaseColumn(_('form/stock/stock_amox_green'),
                        SimpleColumn('stock_amox_green')),
         DatabaseColumn(_('form/stock/stock_ors'),
                        SimpleColumn('stock_ors')),
         DatabaseColumn(_('form/stock/stock_ra_50'),
                        SimpleColumn('stock_ra_50')),
         DatabaseColumn(_('form/stock/stock_ra_200'),
                        SimpleColumn('stock_ra_200')),
         DatabaseColumn(_('form/stock/stock_zinc'),
                        SimpleColumn('stock_zinc')),
         DatabaseColumn(_('form/stock/stock_coartem_yellow'),
                        SimpleColumn('stock_coartem_yellow')),
         DatabaseColumn(_('form/stock/stock_coartem_blue'),
                        SimpleColumn('stock_coartem_blue')),
         DatabaseColumn(_('form/stock/stock_coartem_green'),
                        SimpleColumn('stock_coartem_green')),
         DatabaseColumn(_('form/stock/stock_coartem_brown'),
                        SimpleColumn('stock_coartem_brown')),
         DatabaseColumn(_('form/stock/stock_paracetamol_250'),
                        SimpleColumn('stock_paracetamol_250')),
         DatabaseColumn(_('form/stock/stock_paracetamol_500'),
                        SimpleColumn('stock_paracetamol_500')),
         DatabaseColumn(_('form/stock/stock_rdt'),
                        SimpleColumn('stock_rdt')),
         DatabaseColumn(_('form/stock/stock_gloves'),
                        SimpleColumn('stock_gloves'))
     ]
コード例 #21
0
 def columns(self):
     return [
         DatabaseColumn("Reason for closure",
                        SimpleColumn('reason_for_child_closure')),
         DatabaseColumn("Number", CountUniqueColumn('doc_id'))
     ]
コード例 #22
0
ファイル: sql.py プロジェクト: xbryanc/commcare-hq
 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')])),
     ]
コード例 #23
0
 def columns(self):
     return [
         DatabaseColumn("Month", SimpleColumn('month_of_death')),
         DatabaseColumn("Year", SimpleColumn('year_of_death')),
         DatabaseColumn("Number", CountUniqueColumn('doc_id'))
     ]
コード例 #24
0
    def get_columns_by_loc_level(self):
        selected_month = self.config['month']

        def test_fucntion(x):
            return format_decimal(x) if x else DATA_NOT_ENTERED

        columns = [
            DatabaseColumn('AWC Name',
                           SimpleColumn('awc_name'),
                           slug='awc_name'),
            DatabaseColumn('AWC Site Code',
                           SimpleColumn('awc_site_code'),
                           slug='awc_site_code'),
            DatabaseColumn('Supervisor Name',
                           SimpleColumn('supervisor_name'),
                           slug='supervisor_name'),
            DatabaseColumn('Block Name',
                           SimpleColumn('block_name'),
                           slug='block_name'),
            DatabaseColumn('AWW Phone Number',
                           SimpleColumn('aww_phone_number'),
                           format_fn=phone_number_function,
                           slug='aww_phone_number'),
            DatabaseColumn('Mother Phone Number',
                           SimpleColumn('mother_phone_number'),
                           format_fn=phone_number_function,
                           slug='mother_phone_number'),
            DatabaseColumn('Child Name',
                           SimpleColumn('person_name'),
                           slug='person_name'),
            DatabaseColumn('Date of Birth', SimpleColumn('dob'), slug='dob'),
            DatabaseColumn('Current Age (as of {})'.format(
                selected_month.isoformat()),
                           AliasColumn('dob'),
                           format_fn=lambda x: calculate_date_for_age(
                               x, self.config['month']),
                           slug='current_age'),
            DatabaseColumn('Sex ', SimpleColumn('sex'), slug='sex'),
            ICDSDatabaseColumn('1 Year Immunizations Complete',
                               SimpleColumn('fully_immunized'),
                               format_fn=lambda x: 'Yes' if x else 'No'),
            DatabaseColumn('Month for data shown',
                           SimpleColumn('month'),
                           slug='month'),
            DatabaseColumn('Weight Recorded (in Month)',
                           SimpleColumn('recorded_weight'),
                           format_fn=test_fucntion,
                           slug='recorded_weight'),
            DatabaseColumn('Height Recorded (in Month)',
                           SimpleColumn('recorded_height'),
                           format_fn=test_fucntion,
                           slug='recorded_height'),
            DatabaseColumn(
                'Weight-for-Age Status (in Month)',
                SimpleColumn('current_month_nutrition_status'),
                format_fn=lambda x: get_status(x, 'underweight',
                                               'Normal weight for age', True),
                slug='current_month_nutrition_status'),
            DatabaseColumn('Weight-for-Height Status (in Month)',
                           SimpleColumn(current_month_wasting_column(
                               self.beta)),
                           format_fn=lambda x: get_status(
                               x, 'wasted', 'Normal weight for height', True),
                           slug="current_month_wasting_v2"),
            DatabaseColumn('Height-for-Age status (in Month)',
                           SimpleColumn(
                               current_month_stunting_column(self.beta)),
                           format_fn=lambda x: get_status(
                               x, 'stunted', 'Normal height for age', True),
                           slug="current_month_stunting_v2"),
            DatabaseColumn('Days attended PSE (as of {})'.format(
                selected_month.isoformat()),
                           SimpleColumn('pse_days_attended'),
                           slug="pse_days_attended"),
        ]
        return columns
コード例 #25
0
 def columns(self):
     return [
         DatabaseColumn(
             "Early initiation of breastfeeding",
             CountUniqueColumn('doc_id',
                               alias="colostrum_feeding",
                               filters=self.filters +
                               [EQ('breastfeed_1_hour', 'yes')])),
         DatabaseColumn(
             "Early initiation of breastfeeding Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="colostrum_feeding_total_eligible",
                               filters=self.filters +
                               [NOTEQ('breastfeed_1_hour', 'empty')])),
         DatabaseColumn(
             "Exclusive breastfeeding",
             CountUniqueColumn('doc_id',
                               alias="exclusive_breastfeeding",
                               filters=self.filters + [
                                   AND([
                                       EQ('exclusive_breastfeeding', "yes"),
                                       GTE('dob', "today_minus_183")
                                   ])
                               ])),
         DatabaseColumn(
             "Exclusive Breastfeeding (EBF) Total Eligible",
             CountUniqueColumn(
                 'doc_id',
                 alias="exclusive_breastfeeding_total_eligible",
                 filters=self.filters + [GTE('dob', 'today_minus_183')])),
         DatabaseColumn(
             "Supplementary feeding",
             CountUniqueColumn(
                 'doc_id',
                 alias="supplementary_feeding",
                 filters=self.filters + [
                     AND([
                         EQ('supplementary_feeding_baby', 'yes'),
                         GTE('dob', 'today_minus_182')
                     ])
                 ])),
         DatabaseColumn(
             "Supplementary feeding Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="supplementary_feeding_total_eligible",
                               filters=self.filters +
                               [GTE('dob', 'today_minus_182')])),
         DatabaseColumn(
             "Complementary feeding",
             CountUniqueColumn('doc_id',
                               alias="complementary_feeding",
                               filters=self.filters + [
                                   AND([
                                       EQ('comp_breastfeeding', 'yes'),
                                       LTE('dob', 'today_minus_183'),
                                       GTE('dob', 'today_minus_730')
                                   ])
                               ])),
         DatabaseColumn(
             "Complementary feeding Total Eligible",
             CountUniqueColumn('doc_id',
                               alias="complementary_feeding_total_eligible",
                               filters=self.filters + [
                                   AND([
                                       LTE('dob', 'today_minus_183'),
                                       GTE('dob', 'today_minus_730')
                                   ])
                               ]))
     ]
コード例 #26
0
 def get_columns(self, filters):
     return [
         DatabaseColumn('month', SimpleColumn('month')),
         AggregateColumn(
             'Percent of pregnant women who are anemic in given month',
             lambda x, y, z: ((x or 0) + (y or 0)) * 100 / float(z or 1), [
                 SumWhen(
                     whens=[["ccs_status = 'pregnant'", 'anemic_moderate']],
                     alias='anemic_moderate'),
                 SumWhen(
                     whens=[["ccs_status = 'pregnant'", 'anemic_severe']],
                     alias='anemic_severe'),
                 SumColumn('pregnant', alias='pregnant')
             ],
             slug='severe_anemic'),
         AggregateColumn(
             'Percent tetanus complete',
             percent_num,
             [SumColumn('tetanus_complete'),
              AliasColumn('pregnant')],
             slug='tetanus_complete'),
         AggregateColumn(
             'Percent women ANC 1 recieved by deliveryy',
             percent_num, [
                 SumColumn('anc1_received_at_delivery'),
                 SumColumn('delivered_in_month', alias='delivered_in_month')
             ],
             slug='anc_1'),
         AggregateColumn('Percent women ANC 2 received by delivery',
                         percent_num, [
                             SumColumn('anc2_received_at_delivery'),
                             AliasColumn('delivered_in_month')
                         ],
                         slug='anc_2'),
         AggregateColumn('Percent women ANC 3 received by delivery',
                         percent_num, [
                             SumColumn('anc3_received_at_delivery'),
                             AliasColumn('delivered_in_month')
                         ],
                         slug='anc_3'),
         AggregateColumn('Percent women ANC 4 received by delivery',
                         percent_num, [
                             SumColumn('anc4_received_at_delivery'),
                             AliasColumn('delivered_in_month')
                         ],
                         slug='anc_4'),
         AggregateColumn('Percent women Resting during pregnancy',
                         percent_num, [
                             SumColumn('resting_during_pregnancy'),
                             AliasColumn('pregnant')
                         ],
                         slug='resting'),
         AggregateColumn('Percent eating extra meal during pregnancy',
                         percent_num,
                         [SumColumn('extra_meal'),
                          AliasColumn('pregnant')],
                         slug='extra_meal'),
         AggregateColumn(
             'Percent trimester 3 women Counselled on immediate EBF during home visit',
             percent_num,
             [SumColumn('counsel_immediate_bf'),
              SumColumn('trimester_3')],
             slug='trimester')
     ]
コード例 #27
0
 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')
     ]
コード例 #28
0
 def columns(self):
     return [
         DatabaseColumn(_("Date"), SimpleColumn('date')),
     ]
コード例 #29
0
    def columns(self):
        test_type_filter = [RawFilter("bacteriological_examination = 1")]

        filters_without_episode_type = self.filters[:-1]
        bacteriological_test_date_reported = [
            AND([
                GTE('bacteriological_test_date_reported', 'start_date'),
                LT('bacteriological_test_date_reported', 'end_date')
            ])
        ]
        filters_with_bacteriological_date = bacteriological_test_date_reported + 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=(filters_with_bacteriological_date +
                                 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=(filters_with_bacteriological_date +
                                 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=(
                            filters_with_bacteriological_date +
                            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'))
            ])
コード例 #30
0
ファイル: sql_reports.py プロジェクト: zbidi/commcare-hq
    def columns(self):
        sum_fn = lambda x, y: int(x or 0) + int(y or 0)

        total_percent_agg_fn = lambda f_pos, m_pos, f_tot, m_tot: dict(sort_key=sum_fn(f_pos, m_pos), html="%(x)s (%(p)s%%)" % \
            {
                "x": sum_fn(f_pos, m_pos),
                "p": (100 * sum_fn(f_pos, m_pos) / (sum_fn(m_tot, f_tot) or 1))
            })

        patient_number_group = DataTablesColumnGroup("Tests")
        positive_group = DataTablesColumnGroup("Positive Tests")
        age_range_group = DataTablesColumnGroup("Age Range")

        male_filter = EQ("gender", "male")
        female_filter = EQ("gender", "female")

        columns = self.common_columns + [
            DatabaseColumn("Number of Males ",
                           CountColumn('doc_id',
                                       alias="male-total",
                                       filters=self.filters + [male_filter]),
                           header_group=patient_number_group),
            DatabaseColumn("Number of Females ",
                           CountColumn('doc_id',
                                       alias="female-total",
                                       filters=self.filters + [female_filter]),
                           header_group=patient_number_group),
            AggregateColumn(
                "Total",
                sum_fn,
                [AliasColumn("male-total"),
                 AliasColumn("female-total")],
                header_group=patient_number_group),
            AggregateColumn(
                "Male +ve Percent",
                self.percent_agg_fn, [
                    CountColumn(
                        'doc_id',
                        alias="male-positive",
                        filters=self.filters +
                        [AND([male_filter,
                              EQ("diagnosis", "positive")])]),
                    AliasColumn("male-total")
                ],
                header_group=positive_group,
                sort_type=DTSortType.NUMERIC),
            AggregateColumn(
                "Female +ve Percent",
                self.percent_agg_fn, [
                    CountColumn(
                        'doc_id',
                        alias="female-positive",
                        filters=self.filters +
                        [AND([female_filter,
                              EQ("diagnosis", "positive")])]),
                    AliasColumn("female-total")
                ],
                header_group=positive_group,
                sort_type=DTSortType.NUMERIC),
            AggregateColumn("Total +ve Percent",
                            total_percent_agg_fn, [
                                AliasColumn("female-positive"),
                                AliasColumn("male-positive"),
                                AliasColumn("female-total"),
                                AliasColumn("male-total")
                            ],
                            header_group=positive_group,
                            sort_type=DTSortType.NUMERIC),
            AggregateColumn(
                "Male age range",
                functools.partial(self.age_fn, 'male'), [
                    MinColumn("age",
                              alias="male-min",
                              filters=self.filters + [male_filter]),
                    MaxColumn("age",
                              alias="male-max",
                              filters=self.filters + [male_filter])
                ],
                header_group=age_range_group),
            AggregateColumn(
                "Female age range",
                functools.partial(self.age_fn, 'female'), [
                    MinColumn("age",
                              alias="female-min",
                              filters=self.filters + [female_filter]),
                    MaxColumn("age",
                              alias="female-max",
                              filters=self.filters + [female_filter])
                ],
                header_group=age_range_group),
            AggregateColumn("All age range",
                            functools.partial(self.age_fn, 'total'), [
                                MinColumn("age",
                                          alias="age-min",
                                          filters=self.filters +
                                          [OR([female_filter, male_filter])]),
                                MaxColumn("age",
                                          alias="age-max",
                                          filters=self.filters +
                                          [OR([female_filter, male_filter])])
                            ],
                            header_group=age_range_group),
        ]

        if self.is_map:
            columns.append(
                DatabaseColumn("gps",
                               MaxColumn(self.gps_key),
                               format_fn=lambda x: x))
            disease = FixtureDataItem.get(
                self.disease[1]).fields_without_attributes[
                    'disease_name'] if self.disease else 'All diseases'
            columns.append(
                DatabaseColumn('disease', StaticColumn('disease', disease)))

        return columns