Esempio n. 1
0
    def test_filters_multiple(self):
        def test(filters):
            filter_values = {
                "startdate": date(2013, 02, 20),
                "enddate": date(2013, 03, 05)
            }

            data = self._get_user_data(filter_values, filters)
            self.assertNotIn('user1', data)
            self.assertEqual(data['user2']['indicator_a'], 2)
            self.assertEqual(data['user2']['indicator_b'], 1)

        test([GTE('date', 'startdate'), LT('date', 'enddate')])
        test([AND([GTE('date', 'startdate'), LT('date', 'enddate')])])
Esempio n. 2
0
    def columns(self):
        self.config['mother_ids'] = tuple(DeliveryMothersIds(config=self.config).data.keys()) + ('',)
        columns = [
            DatabaseColumn("Total children with with birthweight known",
                           CountUniqueColumn('doc_id', alias="total_birthweight_known",
                                             filters=self.filters + [NOTEQ('weight_birth', 'empty')])),
            DatabaseColumn("Total births",
                           CountUniqueColumn('doc_id',
                                             filters=[AND([IN('mother_id', get_INFilter_bindparams('mother_ids', self.config['mother_ids'])),
                                                           OR([EQ('gender', 'female'), EQ('gender', 'male')])])],
                                             alias='total_births'))]

        columns.extend([
            DatabaseColumn("Birthweight < 2.5 kg",
                CountUniqueColumn('doc_id',
                    alias="total_birthweight_lt_25",
                    filters=self.filters + [AND([LT('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty')])]
                )
            ),
            DatabaseColumn("Birthweight >= 2.5 kg",
                CountUniqueColumn('doc_id',
                    alias="total_birthweight_gte_25",
                    filters=self.filters + [AND([GTE('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty')])]
                )
            )
        ])
        return columns
Esempio n. 3
0
 def columns(self):
     columns = [
         DatabaseColumn(
             "Total children with with birthweight known",
             CountUniqueColumn('doc_id',
                               alias="total_birthweight_known",
                               filters=self.filters +
                               [NOTEQ('weight_birth', 'empty')])),
     ]
     columns.extend([
         DatabaseColumn(
             "Birthweight < 2.5 kg",
             CountUniqueColumn(
                 'doc_id',
                 alias="total_birthweight_lt_25",
                 filters=self.filters + [
                     AND([
                         LT('weight_birth', 'weight_birth_25'),
                         NOTEQ('weight_birth', 'empty')
                     ])
                 ])),
         DatabaseColumn(
             "Birthweight >= 2.5 kg",
             CountUniqueColumn(
                 'doc_id',
                 alias="total_birthweight_gte_25",
                 filters=self.filters + [
                     AND([
                         GTE('weight_birth', 'weight_birth_25'),
                         NOTEQ('weight_birth', 'empty')
                     ])
                 ]))
     ])
     return columns
Esempio n. 4
0
 def _age_range_filter(self):
     age_range = {age_range.slug: age_range
                  for age_range in AGE_RANGES}[self.config['age_range']]
     return [
         GTE(age_range.column, age_range.lower_bound),
         LT(age_range.column, age_range.upper_bound)
     ]
Esempio n. 5
0
 def _get_age_range_filter(self):
     filters = [
         AND([
             GTE(age_range.column, age_range.lower_param),
             LT(age_range.column, age_range.upper_param)
         ]) for age_range in self._age_ranges
     ]
     return filters[0] if len(filters) == 1 else OR(filters)
Esempio n. 6
0
    def test_filters(self):
        filters = [LT('date', 'enddate')]
        filter_values = {"enddate": date(2013, 02, 01)}

        data = self._get_user_data(filter_values, filters)
        self.assertEqual(data['user1']['indicator_a'], 1)
        self.assertEqual(data['user1']['indicator_b'], 1)
        self.assertEqual(data['user2']['indicator_a'], 0)
        self.assertEqual(data['user2']['indicator_b'], 1)
Esempio n. 7
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')]
         )),
     ]
Esempio n. 8
0
    def filters(self):
        filters = [
            AND([GTE('opened_on', 'start_date'),
                 LT('opened_on', 'end_date')]),
        ]

        locations_id = filter(lambda x: bool(x), self.config.locations_id)

        if locations_id:
            filters.append(
                IN('person_owner_id',
                   get_INFilter_bindparams('locations_id', locations_id)))

        return filters
Esempio n. 9
0
    def test_alias(self):
        filters = [LT('date', 'enddate')]
        filter_values = {"enddate": date(2013, 04, 01)}
        vc = QueryContext("user_table", filters=filters, group_by=["user"])
        user = SimpleColumn("user")
        i_sum_a = SumColumn("indicator_a", alias="sum_a")
        i_count_a = CountColumn("indicator_a", alias="count_a")
        vc.append_column(user)
        vc.append_column(i_sum_a)
        vc.append_column(i_count_a)
        data = vc.resolve(self.session.connection(), filter_values)

        self.assertEqual(data['user1']['sum_a'], 4)
        self.assertEqual(data['user1']['count_a'], 2)
        self.assertEqual(data['user2']['sum_a'], 2)
        self.assertEqual(data['user2']['count_a'], 2)
Esempio n. 10
0
    def test_different_filters(self):
        filters = [LT('date', 'enddate')]
        filter_values = {"enddate": date(2013, 02, 01)}
        vc = QueryContext("user_table", filters=filters, group_by=["user"])
        user = SimpleColumn("user")
        i_a = SumColumn("indicator_a")
        i_b = SumColumn("indicator_b", filters=[GT('date', 'enddate')])
        vc.append_column(user)
        vc.append_column(i_a)
        vc.append_column(i_b)
        data = vc.resolve(self.session.connection(), filter_values)

        self.assertEqual(data['user1']['indicator_a'], 1)
        self.assertNotIn('indicator_b', data['user1'])
        self.assertEqual(data['user2']['indicator_a'], 0)
        self.assertEqual(data['user2']['indicator_b'], 1)
Esempio n. 11
0
    def filters(self):
        filters = [
            AND([GTE(self.date_property, 'start_date'), LT(self.date_property, 'end_date')])
        ]

        locations_id = filter(lambda x: bool(x), self.config.locations_id)

        if locations_id:
            filters.append(
                IN(self.location_property, get_INFilter_bindparams('locations_id', locations_id))
            )

        is_migrated = self.config.is_migrated

        if is_migrated is not None:
            filters.append(EQ('case_created_by_migration', 'is_migrated'))

        return filters
Esempio n. 12
0
    def test_multiple_tables(self):
        filters = [LT('date', 'enddate')]
        filter_values = {"enddate": date(2013, 04, 01)}
        vc = QueryContext("user_table", filters=filters, group_by=["user"])
        user = SimpleColumn("user")
        i_a = SumColumn("indicator_a")

        region = SimpleColumn("region",
                              table_name="region_table",
                              group_by=["region"])
        i_a_r = SumColumn("indicator_a",
                          table_name="region_table",
                          group_by=["region"])
        vc.append_column(user)
        vc.append_column(i_a)

        vc.append_column(region)
        vc.append_column(i_a_r)
        data = vc.resolve(self.session.connection(), filter_values)

        self.assertEqual(data['user1']['indicator_a'], 4)
        self.assertEqual(data['user2']['indicator_a'], 2)
        self.assertEqual(data['region1']['indicator_a'], 5)
        self.assertEqual(data['region2']['indicator_a'], 2)
Esempio n. 13
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'))
            ])