def generate_for_all_patient_types(slug, filters):
    columns = []
    for patient_type in PATIENT_TYPES:
        patient_type_filter = RawFilter(
            "patient_type = '%s'" % patient_type
        )
        columns.append(
            DatabaseColumn(
                '',
                CountColumn(
                    'doc_id',
                    filters=filters + [patient_type_filter],
                    alias='%s_%s' % (slug, patient_type)
                )
            )
        )
    columns.append(
        DatabaseColumn(
            '',
            CountColumn(
                'doc_id',
                filters=filters,
                alias='%s_total' % slug
            )
        )
    )
    return columns
Example #2
0
    def columns(self):
        return [
            DatabaseColumn(
                '',
                CountColumn(
                    'doc_id',
                    filters=self.filters + convert_to_raw_filters_list(
                        "patient_type = 'new'"
                    ),
                    alias='cat1_patients'
                )
            ),
            DatabaseColumn(
                '',
                CountColumn(
                    'doc_id',
                    filters=self.filters + convert_to_raw_filters_list(
                        "patient_type in ('', 'recurrent', 'treatment_after_failure', 'treatment_after_lfu',"
                        " 'other_previously_treated')"
                    ),
                    alias='cat2_patients'
                )
            ),
            DatabaseColumn(
                '',
                CountColumn(
                    'doc_id',
                    filters=convert_to_raw_filters_list(
                        "patient_type IS NOT NULL"
                    ),
                    alias='total_patients'
                )
            ),

        ]
Example #3
0
def generate_for_all_ranges(slug, filters):
    type_filter = RawFilter("patient_type IN ('new', 'recurrent')")
    columns = []
    for lower_bound, upper_bound in AGE_RANGES[:-1]:
        age_filter = RawFilter(
            'age_in_days BETWEEN %d AND %d' %
            (lower_bound * DAYS_IN_YEARS, upper_bound * DAYS_IN_YEARS))
        columns.append(
            DatabaseColumn(
                '',
                CountColumn('doc_id',
                            filters=filters + [age_filter, type_filter],
                            alias='%s_age_%d_%d' %
                            (slug, lower_bound, upper_bound))))
    columns.append(
        DatabaseColumn(
            '',
            CountColumn(
                'doc_id',
                filters=filters + [
                    RawFilter('age_in_days > %d' %
                              (AGE_RANGES[-1][0] * DAYS_IN_YEARS)), type_filter
                ],
                alias='%s_age_%d' % (slug, AGE_RANGES[-1][0]))))
    columns.append(
        DatabaseColumn(
            '',
            CountColumn('doc_id',
                        filters=filters + [type_filter],
                        alias='%s_total' % slug)))
    return columns
Example #4
0
    def columns(self):
        return [
            DatabaseColumn(
                '',
                CountColumn(
                    'doc_id',
                    filters=self.filters + convert_to_raw_filters_list(
                        "current_episode_type = 'confirmed_tb'", "previous_tb_treatment = 'no'"
                    ),
                    alias='cat1_patients'
                )
            ),
            DatabaseColumn(
                '',
                CountColumn(
                    'doc_id',
                    filters=self.filters + convert_to_raw_filters_list(
                        "current_episode_type = 'confirmed_tb'", "previous_tb_treatment = 'yes'"
                    ),
                    alias='cat2_patients'
                )
            ),
            DatabaseColumn(
                '',
                CountColumn(
                    'doc_id',
                    filters=convert_to_raw_filters_list(
                        "current_episode_type = 'confirmed_tb'"
                    ),
                    alias='total_patients'
                )
            ),

        ]
Example #5
0
 def columns(self):
     return [
         DatabaseColumn('location_id', SimpleColumn('site_id')),
         DatabaseColumn('Completude', CountColumn('doc_id', alias='completude')),
         DatabaseColumn('Promptitude', CountColumn(
             'doc_id',
             alias='promptitude',
             filters=self.filters + [LT('opened_on', 'monday')]
         )),
     ]
    def columns(self):
        case_table_name = '%s%s_%s' % (TABLE_PREFIX, self.domain.name,
                                       MAPPING_NAME_CASES)
        case_ownership_table_name = '%s%s_%s' % (
            TABLE_PREFIX, self.domain.name, MAPPING_NAME_CASE_OWNERSHIP)
        case_type_filters = [filters.NOTEQ('case_type', 'ccCaseType')]

        columns = [
            DatabaseColumn("case",
                           SimpleColumn('user_id'),
                           format_fn=self.get_user_case_id,
                           sortable=False),
            DatabaseColumn('formsSubmittedWeek0',
                           CountColumn('date', alias='formsSubmittedWeek0'),
                           sortable=False),
            DatabaseColumn('formsSubmittedWeek1',
                           CountColumn('date',
                                       filters=filters_week1,
                                       alias='formsSubmittedWeek1'),
                           sortable=False),
            DatabaseColumn('formsSubmittedMonth0',
                           CountColumn('date',
                                       filters=filters_month0,
                                       alias='formsSubmittedMonth0'),
                           sortable=False),
            DatabaseColumn('casesUpdatedMonth0',
                           CountUniqueColumn('case_id',
                                             table_name=case_table_name,
                                             filters=filters_month0 +
                                             case_type_filters,
                                             alias='casesUpdatedMonth0'),
                           sortable=False),
            DatabaseColumn('casesUpdatedMonth1',
                           CountUniqueColumn('case_id',
                                             table_name=case_table_name,
                                             filters=filters_month1 +
                                             case_type_filters,
                                             alias='casesUpdatedMonth1'),
                           sortable=False),
            DatabaseColumn('totalCases',
                           SumColumn('open_cases',
                                     table_name=case_ownership_table_name,
                                     filters=case_type_filters,
                                     alias='totalCases'),
                           sortable=False)
        ]

        columns.extend(self._get_custom_columns())

        return columns
Example #7
0
    def columns(self):
        columns = []
        if 'region_id' in self.config:
            columns.append(DatabaseColumn(_("District"), SimpleColumn('district_name')))
        else:
            columns.append(DatabaseColumn(_("PPS"), SimpleColumn('PPS_name')))

        columns.append(DatabaseColumn(_("Stock total"), CountColumn('total_stock_total')))
        return columns
def generate_for_all_outcomes(slug, filters):
    columns = [
        DatabaseColumn(
            '', CountColumn('doc_id', filters=filters,
                            alias='total_%s' % slug))
    ]

    for treatment_outcome in TREATMENT_OUTCOMES:
        columns.append(
            DatabaseColumn(
                '',
                CountColumn('doc_id',
                            filters=filters + [
                                RawFilter("treatment_outcome = '%s'" %
                                          treatment_outcome)
                            ],
                            alias='%s_%s' % (slug, treatment_outcome))), )
    return columns
Example #9
0
    def columns(self):
        test_type_filter = [RawFilter("bacteriological_examination = 1")]

        return (
            generate_for_all_ranges(
                'male', self.filters + [RawFilter("sex = 'male'")]) +
            generate_for_all_ranges(
                'female', self.filters + [RawFilter("sex = 'female'")]) +
            generate_for_all_ranges(
                'transgender',
                self.filters + [RawFilter("sex = 'transgender'")]) +
            generate_for_all_ranges('all', self.filters) + [
                DatabaseColumn(
                    '',
                    CountColumn('doc_id',
                                filters=self.filters + test_type_filter +
                                [RawFilter("episode_type = 'presumptive_tb'")],
                                alias='patients_with_presumptive_tb')),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(self.filters + test_type_filter + [
                            RawFilter("result_of_test = 'tb_detected'"),
                            RawFilter("episode_type = 'presumptive_tb'")
                        ]),
                        alias='patients_with_positive_tb')),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=self.filters + [
                            RawFilter(
                                "hiv_status IN ('reactive', 'non_reactive')")
                        ],
                        alias='all_hiv_tested')),
                DatabaseColumn(
                    '',
                    CountColumn('doc_id',
                                filters=self.filters +
                                [RawFilter("hiv_status = 'reactive'")],
                                alias='hiv_reactive')),
                DatabaseColumn(
                    '',
                    CountColumn('doc_id',
                                filters=self.filters +
                                [RawFilter("hiv_status = 'reactive'")],
                                alias='hiv_reactive_cpt')),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(self.filters +
                                 [RawFilter("hiv_status = 'reactive'")] +
                                 [RawFilter("initiated_on_art = 'yes'")]),
                        alias='hiv_reactive_art'))
            ])
    def columns(self):
        test_type_filter = [
            RawFilter("bacteriological_examination = 1")
        ]

        filters_without_episode_type = self.filters[:-1]

        return (
            generate_for_all_patient_types(
                'pulmonary_microbiologically', self.filters + diagnosis_filter('microbiological', 'pulmonary')
            ) +
            generate_for_all_patient_types(
                'pulmonary_clinical', self.filters + diagnosis_filter('clinical', 'pulmonary')
            ) +
            generate_for_all_patient_types(
                'extra_pulmonary', self.filters + [
                    RawFilter('patient_type IS NOT NULL'),
                    RawFilter("disease_classification = 'extra_pulmonary'")
                ]
            ) +
            generate_for_all_patient_types(
                'total', self.filters + [RawFilter("patient_type IS NOT NULL")]
            ) +
            generate_for_all_ranges('male', self.filters + [RawFilter("sex = 'male'")]) +
            generate_for_all_ranges('female', self.filters + [RawFilter("sex = 'female'")]) +
            generate_for_all_ranges('transgender', self.filters + [RawFilter("sex = 'transgender'")]) +
            generate_for_all_ranges('all', self.filters) +
            [
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=filters_without_episode_type + test_type_filter + [
                            RawFilter("bacteriological_test_episode_type = 'presumptive_tb'")
                        ],
                        alias='patients_with_presumptive_tb'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            filters_without_episode_type + test_type_filter + [
                                RawFilter("result_of_bacteriological_test = 'tb_detected'"),
                                RawFilter("bacteriological_test_episode_type = 'presumptive_tb'")
                            ]
                        ),
                        alias='patients_with_positive_tb'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=self.filters + [RawFilter("hiv_status IN ('reactive', 'non_reactive')")],
                        alias='all_hiv_tested'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=self.filters + [RawFilter("hiv_status = 'reactive'")],
                        alias='hiv_reactive'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=self.filters + [
                            RawFilter("hiv_status = 'reactive'"), RawFilter("cpt_initiated = 'yes'")
                        ],
                        alias='hiv_reactive_cpt'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + [RawFilter("hiv_status = 'reactive'")] +
                            [RawFilter("initiated_on_art = 'yes'")]
                        ),
                        alias='hiv_reactive_art'
                    )

                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + convert_to_raw_filters_list(
                                "patient_type = 'new'",
                                "disease_classification = 'pulmonary'",
                                "diagnostic_result = 'tb_detected'"
                            )
                        ),
                        alias='new_positive_tb_pulmonary'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + convert_to_raw_filters_list(
                                "patient_type = 'new'",
                                "disease_classification = 'pulmonary'",
                                "diagnostic_result = 'tb_not_detected'"
                            )
                        ),
                        alias='new_negative_tb_pulmonary'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + convert_to_raw_filters_list(
                                "patient_type = 'new'",
                                "disease_classification = 'extrapulmonary'",
                                "diagnostic_result = 'tb_detected'"
                            )
                        ),
                        alias='new_positive_tb_extrapulmonary'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + convert_to_raw_filters_list(
                                "patient_type = 'recurrent'",
                                "diagnostic_result = 'tb_detected'"
                            )
                        ),
                        alias='recurrent_positive_tb'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + convert_to_raw_filters_list(
                                "patient_type = 'treatment_after_failure'",
                                "diagnostic_result = 'tb_detected'"
                            )
                        ),
                        alias='failure_positive_tb'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + convert_to_raw_filters_list(
                                "patient_type = 'treatment_after_lfu'",
                                "diagnostic_result = 'tb_detected'"
                            )
                        ),
                        alias='lfu_positive_tb'
                    )
                ),
                DatabaseColumn(
                    '',
                    CountColumn(
                        'doc_id',
                        filters=(
                            self.filters + convert_to_raw_filters_list(
                                "patient_type = 'other_previously_treated'",
                                "diagnostic_result = 'tb_detected'"
                            )
                        ),
                        alias='other_positive_tb'
                    )
                )
            ]
        )
Example #11
0
 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')])),
     ]
Example #12
0
 def columns(self):
     return [
         self.first_column,
         DatabaseColumn(_('home_visits_pregnant'),
                        CountColumn('home_visit', alias="home_visits_pregnant",
                                    filters=self.filters + [EQ('home_visit', 'one')])),
         DatabaseColumn(_('home_visits_postpartem'),
                        CountColumn('post_partem', alias="home_visits_postpartem",
                                    filters=self.filters + [EQ('post_partem', 'one')])),
         DatabaseColumn(_('home_visits_newborn'),
                        CountColumn('doc_id', alias="home_visits_newborn",
                                    filters=self.filters + [OR([EQ('newborn_reg', 'one'),
                                                                EQ('newborn_followup', 'one')])])),
         DatabaseColumn(_('home_visits_children'),
                        CountColumn('doc_id', alias="home_visits_children",
                                    filters=self.filters + [OR([EQ('child_reg', 'one'),
                                                                EQ('child_followup', 'one')])])),
         DatabaseColumn(_('home_visits_other'),
                        CountColumn('doc_id', alias="home_visits_other",
                                    filters=self.filters + [OR([
                                        AND([EQ('home_visit', 'zero'), EQ('post_partem', 'zero')]),
                                        EQ('sex', 'one'),
                                        EQ('adult_followup', 'one')])])),
         AggregateColumn(_("home_visits_total"), add_all, [
             AliasColumn("home_visits_pregnant"),
             AliasColumn("home_visits_postpartem"),
             AliasColumn("home_visits_newborn"),
             AliasColumn("home_visits_children"),
             AliasColumn("home_visits_other"),
         ], slug='home_visits_total'),
         DatabaseColumn(_('rdt_positive_children'),
                        CountColumn('doc_id', alias='rdt_positive_children',
                                    filters=self.filters + [EQ('rdt_children', 'one')])),
         DatabaseColumn(_('rdt_positive_adults'),
                        CountColumn('doc_id', alias='rdt_positive_adults',
                                    filters=self.filters + [EQ('rdt_adult', 'one')])),
         DatabaseColumn(_('rdt_others'),
                        CountColumn('doc_id', alias='rdt_others',
                                    filters=self.filters + [OR([EQ('rdt_adult', 'zero'),
                                                                EQ('rdt_children', 'zero')])])),
         AggregateColumn(_('rdt_total'), add_all, [
             AliasColumn('rdt_positive_children'),
             AliasColumn('rdt_positive_adults'),
             AliasColumn('rdt_others')
         ], slug='rdt_total'),
         DatabaseColumn(_('diagnosed_malaria_child'),
                        CountColumn('malaria_child', alias='diagnosed_malaria_child',
                                    filters=self.filters + [EQ('malaria_child', 'one')])),
         DatabaseColumn(_('diagnosed_malaria_adult'),
                        CountColumn('malaria_adult', alias='diagnosed_malaria_adult',
                                    filters=self.filters + [EQ('malaria_adult', 'one')])),
         DatabaseColumn(_('diagnosed_diarrhea'),
                        CountColumn('doc_id', alias='diagnosed_diarrhea',
                                    filters=self.filters + [OR([
                                        EQ('diarrhea_child', 'one'),
                                        EQ('diarrhea_adult', 'one')
                                    ])])),
         DatabaseColumn(_('diagnosed_ari'),
                        CountColumn('doc_id', alias='diagnosed_ari',
                                    filters=self.filters + [OR([
                                        EQ('ari_child', 'one'),
                                        EQ('ari_adult', 'one')
                                    ])])),
         AggregateColumn(_('diagnosed_total'), add_all, [
             AliasColumn('diagnosed_malaria_child'),
             AliasColumn('diagnosed_malaria_adult'),
             AliasColumn('diagnosed_diarrhea'),
             AliasColumn('diagnosed_ari')
         ], slug='diagnosed_total'),
         DatabaseColumn(_('treated_malaria'),
                        CountColumn('doc_id', alias='treated_malaria', filters=self.filters + [OR([
                            AND([EQ('it_malaria_child', 'one'), EQ('malaria_child', 'one')]),
                            AND([EQ('it_malaria_adult', 'one'), EQ('malaria_adult', 'one')])
                        ])])),
         DatabaseColumn(_('treated_diarrhea'),
                        CountColumn('doc_id', alias='treated_diarrhea', filters=self.filters + [OR([
                            AND([EQ('diarrhea_child', 'one'), EQ('it_diarrhea_child', 'one')]),
                            AND([EQ('diarrhea_adult', 'one'), EQ('it_diarrhea_adult', 'one')])
                        ])])),
         DatabaseColumn(_('treated_ari'),
                        CountColumn('doc_id', alias='treated_ari', filters=self.filters + [OR([
                            AND([EQ('ari_child', 'one'), EQ('it_ari_child', 'one')]),
                            AND([EQ('ari_adult', 'one'), EQ('it_ari_adult', 'one')])
                        ])])),
         AggregateColumn(_('treated_total'), add_all, [
             AliasColumn('treated_malaria'),
             AliasColumn('treated_diarrhea'),
             AliasColumn('treated_ari')
         ], slug='treated_total'),
         DatabaseColumn(_('transfer_malnutrition'),
                        CountColumn('doc_id', alias='transfer_malnutrition', filters=self.filters + [OR([
                            EQ('malnutrition_child', 'one'),
                            EQ('malnutrition_adult', 'one')
                        ])])),
         DatabaseColumn(_('transfer_incomplete_vaccination'),
                        CountColumn('doc_id', alias='transfer_incomplete_vaccination',
                                    filters=self.filters + [OR([
                                        EQ('vaccination_child', 'one'),
                                        EQ('vaccination_adult', 'one'),
                                        EQ('vaccination_newborn', 'one')
                                    ])])),
         DatabaseColumn(_('transfer_danger_signs'),
                        CountColumn('doc_id', alias='transfer_danger_signs', filters=self.filters + [OR([
                            EQ('danger_sign_child', 'one'),
                            EQ('danger_sign_adult', 'one'),
                            EQ('danger_sign_newborn', 'one')
                        ])])),
         DatabaseColumn(_('transfer_prenatal_consult'),
                        CountColumn('doc_id', alias='transfer_prenatal_consult',
                                    filters=self.filters + [EQ('prenatal_consult', 'one')])),
         DatabaseColumn(_('transfer_missing_malaria_meds'),
                        CountColumn('doc_id', alias='transfer_missing_malaria_meds',
                                    filters=self.filters + [OR([
                                        EQ('missing_malaria_meds_child', 'one'),
                                        EQ('missing_malaria_meds_adult', 'one')
                                    ])])),
         DatabaseColumn(_('transfer_other'),
                        CountColumn('doc_id', alias='transfer_other', filters=self.filters + [OR([
                            EQ('other_child', 'one'),
                            EQ('other_adult', 'one'),
                            EQ('other_newborn', 'one')
                        ])])),
         AggregateColumn(_('transfer_total'), add_all, [
             AliasColumn('transfer_malnutrition'),
             AliasColumn('transfer_incomplete_vaccination'),
             AliasColumn('transfer_danger_signs'),
             AliasColumn('transfer_prenatal_consult'),
             AliasColumn('transfer_missing_malaria_meds'),
             AliasColumn('transfer_other'),
         ], slug='transfer_total'),
         DatabaseColumn(_('deaths_newborn'),
                        CountColumn('doc_id', alias='deaths_newborn',
                                    filters=self.filters + [EQ('deaths_newborn', 'one')])),
         DatabaseColumn(_('deaths_children'),
                        CountColumn('doc_id', alias='deaths_children',
                                    filters=self.filters + [EQ('deaths_children', 'one')])),
         DatabaseColumn(_('deaths_mothers'),
                        CountColumn('doc_id', alias='deaths_mothers',
                                    filters=self.filters + [EQ('deaths_mothers', 'one')])),
         DatabaseColumn(_('deaths_others'),
                        SumColumn('deaths_others', alias='deaths_other',
                                  filters=self.filters + [NOTEQ('deaths_others', 'zero')])),
         AggregateColumn(_('deaths_total'), add_all, [
             AliasColumn('deaths_newborn'),
             AliasColumn('deaths_children'),
             AliasColumn('deaths_mothers'),
             AliasColumn('deaths_other'),
         ], slug='deaths_total'),
         DatabaseColumn(_('heath_ed_talks'),
                        SumColumn('heath_ed_talks', alias='heath_ed_talks',
                                  filters=self.filters + [NOTEQ('heath_ed_talks', 'zero')])),
         DatabaseColumn(_('heath_ed_participants'),
                        SumColumn('heath_ed_participants', alias='heath_ed_participants',
                                  filters=self.filters + [NOTEQ('heath_ed_participants', 'zero')]))
     ]
 def columns(self):
     return (
         generate_for_all_outcomes('new_patients', self.filters + [RawFilter("patient_type = 'new'")]) +
         generate_for_all_outcomes(
             'new_patients_pulmonary_microbiological',
             self.filters + [RawFilter("patient_type = 'new'")] + pulmonary_microbiological()
         ) +
         generate_for_all_outcomes(
             'new_patients_pulmonary_clinical',
             self.filters + [RawFilter("patient_type = 'new'")] + pulmonary_clinical()
         ) +
         generate_for_all_outcomes(
             'new_patients_extra_pulmonary',
             self.filters + [RawFilter("patient_type = 'new'")] + extra_pulmonary()
         ) +
         generate_for_all_outcomes(
             'previously_treated_patients',
             self.filters + previously_treated()
         ) +
         generate_for_all_outcomes(
             'recurrent_patients',
             self.filters + recurrent()
         ) +
         generate_for_all_outcomes(
             'treatment_after_failure_patients',
             self.filters + treatment_after_failure()
         ) +
         generate_for_all_outcomes(
             'treatment_after_lfu_patients',
             self.filters + treatment_after_lfu()
         ) +
         generate_for_all_outcomes(
             'other_previously_treated_patients',
             self.filters + [RawFilter("basis_of_diagnosis = 'clinical'")] + other_previously_treated()
         ) +
         generate_for_all_outcomes(
             'hiv_reactive_patients',
             self.filters + [RawFilter("hiv_status = 'reactive'")]
         ) +
         generate_for_all_outcomes(
             'new_hiv_reactive_patients',
             self.filters + [RawFilter("patient_type = 'new'")] + [RawFilter("hiv_status = 'reactive'")]
         ) +
         generate_for_all_outcomes(
             'previously_treated_hiv_reactive_patients',
             self.filters + previously_treated() + [RawFilter("hiv_status = 'reactive'")]
         ) + [
             DatabaseColumn(
                 '',
                 CountColumn(
                     'doc_id',
                     filters=self.filters + [RawFilter("hiv_status = 'reactive'")],
                     alias='total_hiv_cases'
                 )
             )
         ] + [
             DatabaseColumn(
                 '',
                 CountColumn(
                     'doc_id',
                     filters=(
                         self.filters + [RawFilter("hiv_status = 'reactive'")] +
                         [RawFilter("initiated_on_art = 'yes'")]
                     ),
                     alias='total_initiated_on_art'
                 )
             )
         ] + [
             DatabaseColumn(
                 '',
                 CountColumn(
                     'doc_id',
                     filters=(
                         self.filters + [RawFilter("hiv_status = 'reactive'")] +
                         [RawFilter("cpt_initiated = 'yes'")]
                     ),
                     alias='total_cpt_initiated'
                 )
             )
         ]
     )
    def columns(self):
        case_table_name = case_table(self.domain.name)
        case_ownership_table_name = case_ownership_table(self.domain.name)

        case_type_filters = [filters.NOTEQ('case_type', 'ccCaseType')]
        domain_filter = [
            filters.EQ('domain', 'domain'),
            filters.EQ('doc_type', 'form_doc_type')
        ]

        columns = [
            DatabaseColumn("case",
                           SimpleColumn('user_id',
                                        filters=filters_week0('time_end') +
                                        domain_filter),
                           format_fn=self.get_user_case_id,
                           sortable=False),
            DatabaseColumn('formsSubmittedWeek0',
                           CountColumn('instance_id',
                                       table_name=FORMDATA_TABLE,
                                       filters=filters_week0('time_end') +
                                       domain_filter,
                                       alias='formsSubmittedWeek0'),
                           sortable=False),
            DatabaseColumn('formsSubmittedWeek1',
                           CountColumn('instance_id',
                                       table_name=FORMDATA_TABLE,
                                       filters=filters_week1('time_end') +
                                       domain_filter,
                                       alias='formsSubmittedWeek1'),
                           sortable=False),
            DatabaseColumn('formsSubmittedMonth0',
                           CountColumn('instance_id',
                                       table_name=FORMDATA_TABLE,
                                       filters=filters_month0('time_end') +
                                       domain_filter,
                                       alias='formsSubmittedMonth0'),
                           sortable=False),
            DatabaseColumn('casesUpdatedMonth0',
                           CountUniqueColumn('case_id',
                                             table_name=case_table_name,
                                             filters=filters_month0('date') +
                                             case_type_filters,
                                             alias='casesUpdatedMonth0'),
                           sortable=False),
            DatabaseColumn('casesUpdatedMonth1',
                           CountUniqueColumn('case_id',
                                             table_name=case_table_name,
                                             filters=filters_month1('date') +
                                             case_type_filters,
                                             alias='casesUpdatedMonth1'),
                           sortable=False),
            DatabaseColumn('totalCases',
                           SumColumn('open_cases',
                                     table_name=case_ownership_table_name,
                                     filters=case_type_filters,
                                     alias='totalCases'),
                           sortable=False)
        ]

        columns.extend(self._get_custom_columns())

        return columns