malawi_hiv_program_reports 1.0.17 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,7 +19,9 @@ module MalawiHivProgramReports
19
19
  end
20
20
 
21
21
  def find_report
22
- drop_temporary_tables
22
+ drop_temporary_tables unless @location
23
+ delete_patients_in_temp_table if @location
24
+
23
25
  create_temp_earliest_start_date unless temp_eartliest_start_date_exists?
24
26
  init_report
25
27
  build_cohort_tables
@@ -62,26 +64,55 @@ module MalawiHivProgramReports
62
64
  }
63
65
  end
64
66
 
67
+ def delete_patients_in_temp_table
68
+ if ActiveRecord::Base.connection.table_exists?('temp_tb_screened')
69
+ execute_action("DELETE FROM temp_tb_screened WHERE site_id = #{@location}")
70
+ end
71
+ if ActiveRecord::Base.connection.table_exists?('temp_tb_confirmed_and_on_treatment')
72
+ execute_action("DELETE FROM temp_tb_confirmed_and_on_treatment WHERE site_id = #{@location}")
73
+ end
74
+ end
75
+
65
76
  def drop_temporary_tables
66
- execute_action('DROP TABLE IF EXISTS temp_tb_screened;')
67
- execute_action('DROP TABLE IF EXISTS temp_tb_confirmed_and_on_treatment;')
77
+ execute_action("DROP TABLE IF EXISTS temp_tb_screened;")
78
+ execute_action("DROP TABLE IF EXISTS temp_tb_confirmed_and_on_treatment;")
68
79
  end
69
80
 
70
81
  def build_cohort_tables
71
82
  return unless rebuild_outcome || @occupation.present?
72
83
 
73
- cohort_builder = MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: 'pepfar',
74
- location: @location)
75
- cohort_builder.init_temporary_tables(start_date, end_date, @occupation)
84
+ cohort_builder = MalawiHivProgramReports::Moh::CumulativeCohort.new(
85
+ start_date: start_date,
86
+ end_date: end_date,
87
+ locations: [@location.to_s],
88
+ rebuild: rebuild_outcome
89
+ ).find_report
76
90
  end
77
91
 
78
92
  def process_tb_screening
79
93
  execute_action(create_temp_tb_screened_query)
94
+ execute_action(insert_temp_tb_screened_query)
95
+ end
96
+
97
+ def create_temp_tb_screened_query
98
+ <<~SQL
99
+ CREATE TABLE IF NOT EXISTS temp_tb_screened(
100
+ patient_id INT(11) NOT NULL,
101
+ gender VARCHAR(255) NULL,
102
+ screened_date DATE NULL,
103
+ enrollment_date DATE NULL,
104
+ age_group VARCHAR(255) NULL,
105
+ tb_status VARCHAR(255) NULL,
106
+ screening_methods VARCHAR(255) DEFAULT NULL,
107
+ site_id INT(11) DEFAULT 1,
108
+ PRIMARY KEY (patient_id, site_id)
109
+ )
110
+ SQL
80
111
  end
81
112
 
82
- def create_temp_tb_screened_query
113
+ def insert_temp_tb_screened_query
83
114
  <<~SQL
84
- CREATE TABLE temp_tb_screened AS
115
+ INSERT INTO temp_tb_screened
85
116
  SELECT
86
117
  o.person_id as patient_id,
87
118
  LEFT(current_obs.gender, 1) AS gender, MAX(o.obs_datetime) AS screened_date,
@@ -89,18 +120,19 @@ module MalawiHivProgramReports
89
120
  disaggregated_age_group(current_obs.birthdate, DATE('#{end_date.to_date}')) AS age_group,
90
121
  cn.name AS tb_status,
91
122
  GROUP_CONCAT(DISTINCT vcn.name) AS screening_methods
92
- FROM obs o
123
+ #{@location ? ", #{@location}" : 1} AS site_id
124
+ FROM obs #{current_partition} o
93
125
  INNER JOIN (
94
126
  SELECT o.person_id, MAX(o.obs_datetime) AS obs_datetime, tesd.earliest_start_date, tesd.gender, tesd.birthdate
95
- FROM obs o
96
- INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = o.person_id
127
+ FROM obs #{current_partition} o
128
+ INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = o.person_id
97
129
  WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
98
130
  AND o.value_coded IN (SELECT concept_id FROM concept_name WHERE name IN ('TB Suspected', 'TB NOT suspected') AND voided = 0)
99
131
  AND o.voided = 0 AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}' #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
100
132
  GROUP BY o.person_id
101
133
  ) current_obs ON current_obs.person_id = o.person_id AND current_obs.obs_datetime = o.obs_datetime
102
134
  INNER JOIN concept_name cn ON cn.concept_id = o.value_coded AND cn.voided = 0
103
- LEFT JOIN obs screen_method ON screen_method.concept_id = #{::ConceptName.find_by_name('TB screening method used').concept_id}
135
+ LEFT JOIN obs #{current_partition} screen_method ON screen_method.concept_id = #{::ConceptName.find_by_name('TB screening method used').concept_id}
104
136
  AND screen_method.voided = 0 #{site_manager(operator: 'AND', column: 'screen_method.site_id', location: @location)}
105
137
  AND screen_method.person_id = o.person_id#{' '}
106
138
  AND DATE(screen_method.obs_datetime) = DATE(current_obs.obs_datetime)
@@ -114,22 +146,42 @@ module MalawiHivProgramReports
114
146
  end
115
147
 
116
148
  def temp_eartliest_start_date_exists?
117
- ActiveRecord::Base.connection.table_exists?('temp_earliest_start_date')
149
+ ActiveRecord::Base.connection.table_exists?('cdr_temp_cohort_members')
118
150
  end
119
151
 
120
152
  def create_temp_earliest_start_date
121
- cohort_builder = MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: 'pepfar',
122
- location: @location)
123
- cohort_builder.init_temporary_tables(start_date, end_date, @occupation)
153
+ MalawiHivProgramReports::Moh::CumulativeCohort.new(
154
+ start_date: start_date,
155
+ end_date: end_date,
156
+ locations: [@location],
157
+ rebuild: rebuild_outcome
158
+ ).find_report
124
159
  end
125
160
 
126
161
  def process_tb_confirmed_and_on_treatment
127
162
  execute_action(create_temp_tb_confirmed_query)
163
+ execute_action(insert_temp_tb_confirmed_query)
128
164
  end
129
165
 
130
166
  def create_temp_tb_confirmed_query
131
167
  <<~SQL
132
- CREATE TABLE temp_tb_confirmed_and_on_treatment AS
168
+ CREATE TABLE IF NOT EXISTS temp_tb_confirmed_and_on_treatment(
169
+ patient_id INT(11) NOT NULL,
170
+ gender VARCHAR(255) NULL,
171
+ age_group VARCHAR(255) NOT NULL,
172
+ tb_confirmed_date DATE NULL,
173
+ has_tb_confirmed_date BOOLEAN NOT NULL,
174
+ enrollment_date DATE NULL,
175
+ prev_reading DATE,
176
+ site_id INT(11) DEFAULT 1,
177
+ PRIMARY KEY (patient_id, site_id)
178
+ )
179
+ SQL
180
+ end
181
+
182
+ def insert_temp_tb_confirmed_query
183
+ <<~SQL
184
+ INSERT INTO temp_tb_confirmed_and_on_treatment
133
185
  SELECT
134
186
  o.person_id as patient_id,
135
187
  LEFT(p.gender, 1) AS gender,
@@ -141,17 +193,18 @@ module MalawiHivProgramReports
141
193
  END AS has_tb_confirmed_date,
142
194
  tesd.earliest_start_date as enrollment_date,
143
195
  prev.tb_confirmed_date prev_reading
144
- FROM obs o
145
- INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = o.person_id #{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
146
- INNER JOIN person p ON p.person_id = o.person_id AND p.voided = 0 #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
147
- LEFT JOIN obs tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
196
+ #{@location ? ", #{@location}" : ''} AS site_id
197
+ FROM obs #{current_partition} o
198
+ INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = o.person_id #{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
199
+ INNER JOIN person #{current_partition} p ON p.person_id = o.person_id AND p.voided = 0 #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
200
+ LEFT JOIN obs #{current_partition} tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
148
201
  AND tcd.voided = 0 AND tcd.person_id = o.person_id #{site_manager(operator: 'AND', column: 'tcd.site_id', location: @location)}
149
202
  LEFT JOIN (
150
203
  SELECT
151
204
  o.person_id,
152
205
  COALESCE(MAX(tcd.value_datetime),MAX(o.obs_datetime)) AS tb_confirmed_date
153
- FROM obs o
154
- LEFT JOIN obs tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
206
+ FROM obs #{current_partition} o
207
+ LEFT JOIN obs #{current_partition} tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
155
208
  AND tcd.voided = 0 AND tcd.person_id = o.person_id #{site_manager(operator: 'AND', column: 'tcd.site_id', location: @location)}
156
209
  WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
157
210
  AND o.value_coded = #{::ConceptName.find_by_name('Confirmed TB on treatment').concept_id}
@@ -182,8 +235,8 @@ module MalawiHivProgramReports
182
235
  def create_patients_alive_and_on_art_query
183
236
  <<~SQL
184
237
  SELECT tpo.patient_id, LEFT(tesd.gender, 1) AS gender, disaggregated_age_group(tesd.birthdate, DATE('#{end_date.to_date}')) age_group
185
- FROM temp_patient_outcomes tpo
186
- INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = tpo.patient_id #{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
238
+ FROM cdr_temp_patient_outcomes #{current_partition} tpo
239
+ INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = tpo.patient_id #{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
187
240
  WHERE tpo.cum_outcome = 'On antiretrovirals' #{site_manager(operator: 'AND', column: 'tpo.site_id', location: @location)}
188
241
  SQL
189
242
  end
@@ -269,6 +322,7 @@ module MalawiHivProgramReports
269
322
  <<~SQL
270
323
  SELECT tbs.patient_id, tbs.enrollment_date, LEFT(tbs.gender, 1) AS gender, tbs.age_group, tbs.tb_status, tbs.screened_date, tbs.screening_methods
271
324
  FROM temp_tb_screened tbs
325
+ #{site_manager(operator: 'WHERE', column: 'tbs.site_id', location: @location)}
272
326
  SQL
273
327
  end
274
328
 
@@ -277,6 +331,7 @@ module MalawiHivProgramReports
277
331
  SELECT t.patient_id, t.gender, t.age_group, t.enrollment_date, t.tb_confirmed_date
278
332
  FROM temp_tb_confirmed_and_on_treatment t
279
333
  WHERE t.tb_confirmed_date > '#{start_date}'
334
+ #{site_manager(operator: 'AND', column: 't.site_id', location: @location)}
280
335
  AND (t.has_tb_confirmed_date = TRUE OR t.prev_reading IS NULL OR TIMESTAMPDIFF(MONTH,t.prev_reading, t.tb_confirmed_date) > 6)
281
336
  SQL
282
337
  end
@@ -37,7 +37,7 @@ module MalawiHivProgramReports
37
37
  def pepfar_patient_drilldown_information(patients, current_date)
38
38
  raise ::ArgumentError, "current_date can't be nil" unless current_date
39
39
 
40
- ::Person.joins("LEFT JOIN patient_identifier ON patient_identifier.patient_id = person.person_id
40
+ ::Person.joins("LEFT JOIN patient_identifier #{current_partition} ON patient_identifier.patient_id = person.person_id
41
41
  AND patient_identifier.voided = 0
42
42
  AND patient_identifier.identifier_type IN (#{pepfar_patient_identifier_type.to_sql})")
43
43
  .where(person_id: patients)
@@ -96,22 +96,22 @@ module MalawiHivProgramReports
96
96
 
97
97
  ActiveRecord::Base.connection.select_all("
98
98
  SELECT p.person_id patient_id
99
- FROM person p
100
- INNER JOIN patient_program pp ON pp.patient_id = p.person_id AND pp.program_id = #{::Program.find_by_name('HIV PROGRAM').id} AND pp.voided = 0
99
+ FROM person #{current_partition} p
100
+ INNER JOIN patient_program #{current_partition} pp ON pp.patient_id = p.person_id AND pp.program_id = #{::Program.find_by_name('HIV PROGRAM').id} AND pp.voided = 0
101
101
  #{site_manager(operator: 'AND', column: 'pp.site_id', location: @location)}
102
- INNER JOIN patient_state ps ON ps.patient_program_id = pp.patient_program_id AND ps.state = 7 AND ps.start_date IS NOT NULL
102
+ INNER JOIN patient_state #{current_partition} ps ON ps.patient_program_id = pp.patient_program_id AND ps.state = 7 AND ps.start_date IS NOT NULL
103
103
  #{site_manager(operator: 'AND', column: 'ps.site_id', location: @location)}
104
- LEFT JOIN encounter as hiv_registration ON hiv_registration.patient_id = p.person_id AND hiv_registration.encounter_datetime < DATE(#{ActiveRecord::Base.connection.quote(end_date)}) AND hiv_registration.encounter_type = #{hiv_clinic_registration_id} AND hiv_registration.voided = 0
104
+ LEFT JOIN encounter #{current_partition} as hiv_registration ON hiv_registration.patient_id = p.person_id AND hiv_registration.encounter_datetime < DATE(#{ActiveRecord::Base.connection.quote(end_date)}) AND hiv_registration.encounter_type = #{hiv_clinic_registration_id} AND hiv_registration.voided = 0
105
105
  #{site_manager(operator: 'AND', column: 'hiv_registration.site_id', location: @location)}
106
106
  LEFT JOIN (
107
- SELECT * FROM obs WHERE concept_id = #{type_of_patient_concept} AND voided = 0 AND value_coded = #{new_patient_concept} AND obs_datetime < #{interval_manager(date: end_date, value: 1, interval: 'DAY', operator: '+')}
107
+ SELECT * FROM obs #{current_partition} WHERE concept_id = #{type_of_patient_concept} AND voided = 0 AND value_coded = #{new_patient_concept} AND obs_datetime < #{interval_manager(date: end_date, value: 1, interval: 'DAY', operator: '+')}
108
108
  #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
109
109
  ) AS new_patient ON p.person_id = new_patient.person_id
110
110
  LEFT JOIN (
111
- SELECT * FROM obs WHERE concept_id = #{type_of_patient_concept} AND voided = 0 AND value_coded = #{drug_refill_concept} AND obs_datetime < #{interval_manager(date: end_date, value: 1, interval: 'DAY', operator: '+')} #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
111
+ SELECT * FROM obs #{current_partition} WHERE concept_id = #{type_of_patient_concept} AND voided = 0 AND value_coded = #{drug_refill_concept} AND obs_datetime < #{interval_manager(date: end_date, value: 1, interval: 'DAY', operator: '+')} #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
112
112
  ) AS refill ON p.person_id = refill.person_id
113
113
  LEFT JOIN (
114
- SELECT * FROM obs WHERE concept_id = #{type_of_patient_concept} AND voided = 0 AND value_coded = #{external_concept} AND obs_datetime < #{interval_manager(date: end_date, value: 1, interval: 'DAY', operator: '+')} #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
114
+ SELECT * FROM obs #{current_partition} WHERE concept_id = #{type_of_patient_concept} AND voided = 0 AND value_coded = #{external_concept} AND obs_datetime < #{interval_manager(date: end_date, value: 1, interval: 'DAY', operator: '+')} #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
115
115
  ) AS external ON p.person_id = external.person_id
116
116
  WHERE (refill.value_coded IS NOT NULL OR external.value_coded IS NOT NULL)
117
117
  AND NOT (hiv_registration.encounter_id IS NOT NULL OR new_patient.value_coded IS NOT NULL)
@@ -124,15 +124,15 @@ module MalawiHivProgramReports
124
124
  def pregnant_women(patient_list)
125
125
  ActiveRecord::Base.connection.select_all <<~SQL
126
126
  SELECT o.person_id, o.value_coded
127
- FROM obs o
128
- INNER JOIN encounter e ON e.encounter_id = o.encounter_id AND e.voided = 0 AND e.encounter_type IN (#{encounter_types.to_sql})
127
+ FROM obs #{current_partition} o
128
+ INNER JOIN encounter #{current_partition} e ON e.encounter_id = o.encounter_id AND e.voided = 0 AND e.encounter_type IN (#{encounter_types.to_sql})
129
129
  #{site_manager(operator: 'AND', column: 'e.site_id', location: @location)}
130
- INNER JOIN person p ON o.person_id = e.patient_id AND LEFT(p.gender, 1) = 'F'
130
+ INNER JOIN person #{current_partition} p ON o.person_id = e.patient_id AND LEFT(p.gender, 1) = 'F'
131
131
  #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
132
132
  INNER JOIN (
133
133
  SELECT person_id, MAX(obs_datetime) AS obs_datetime
134
- FROM obs
135
- INNER JOIN encounter ON encounter.encounter_id = obs.encounter_id AND encounter.encounter_type IN (#{encounter_types.to_sql}) AND encounter.voided = 0
134
+ FROM obs #{current_partition}
135
+ INNER JOIN encounter #{current_partition} ON encounter.encounter_id = obs.encounter_id AND encounter.encounter_type IN (#{encounter_types.to_sql}) AND encounter.voided = 0
136
136
  #{site_manager(operator: 'AND', column: 'encounter.site_id', location: @location)}
137
137
  WHERE obs.concept_id IN (#{pregnant_concepts.to_sql})
138
138
  AND obs.obs_datetime BETWEEN DATE(#{ActiveRecord::Base.connection.quote(start_date)}) AND DATE(#{ActiveRecord::Base.connection.quote(end_date)}) + INTERVAL 1 DAY
@@ -153,15 +153,15 @@ module MalawiHivProgramReports
153
153
  def breast_feeding(patient_list)
154
154
  ActiveRecord::Base.connection.select_all <<~SQL
155
155
  SELECT o.person_id, o.value_coded
156
- FROM obs o
157
- INNER JOIN encounter e ON e.encounter_id = o.encounter_id AND e.voided = 0 AND e.encounter_type IN (#{encounter_types.to_sql})
156
+ FROM obs #{current_partition} o
157
+ INNER JOIN encounter #{current_partition} e ON e.encounter_id = o.encounter_id AND e.voided = 0 AND e.encounter_type IN (#{encounter_types.to_sql})
158
158
  #{site_manager(operator: 'AND', column: 'e.site_id', location: @location)}
159
- INNER JOIN person p ON o.person_id = e.patient_id AND LEFT(p.gender, 1) = 'F'
159
+ INNER JOIN person #{current_partition} p ON o.person_id = e.patient_id AND LEFT(p.gender, 1) = 'F'
160
160
  #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
161
161
  INNER JOIN (
162
162
  SELECT person_id, MAX(obs_datetime) AS obs_datetime
163
- FROM obs
164
- INNER JOIN encounter ON encounter.encounter_id = obs.encounter_id AND encounter.encounter_type IN (#{encounter_types.to_sql}) AND encounter.voided = 0
163
+ FROM obs #{current_partition}
164
+ INNER JOIN encounter #{current_partition} ON encounter.encounter_id = obs.encounter_id AND encounter.encounter_type IN (#{encounter_types.to_sql}) AND encounter.voided = 0
165
165
  #{site_manager(operator: 'AND', column: 'encounter.site_id', location: @location)}
166
166
  WHERE obs.concept_id IN (#{breast_feeding_concepts.to_sql})
167
167
  AND obs.obs_datetime BETWEEN DATE(#{ActiveRecord::Base.connection.quote(start_date)}) AND DATE(#{ActiveRecord::Base.connection.quote(end_date)}) + INTERVAL 1 DAY
@@ -198,8 +198,8 @@ module MalawiHivProgramReports
198
198
  ActiveRecord::Base.connection.select_all(
199
199
  <<~SQL
200
200
  SELECT tpo.patient_id, LEFT(tesd.gender, 1) AS gender, disaggregated_age_group(tesd.birthdate, DATE('#{end_date.to_date}')) age_group
201
- FROM temp_patient_outcomes tpo
202
- INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = tpo.patient_id
201
+ FROM temp_patient_outcomes #{current_partition} tpo
202
+ INNER JOIN temp_earliest_start_date #{current_partition} tesd ON tesd.patient_id = tpo.patient_id
203
203
  WHERE tpo.cum_outcome = 'On antiretrovirals'
204
204
  SQL
205
205
  )
@@ -267,10 +267,10 @@ module MalawiHivProgramReports
267
267
  @adverse_outcomes ||= ActiveRecord::Base.connection.select_all(
268
268
  <<~SQL
269
269
  SELECT pws.program_workflow_state_id state
270
- FROM program_workflow pw
271
- INNER JOIN concept_name pcn ON pcn.concept_id = pw.concept_id AND pcn.concept_name_type = 'FULLY_SPECIFIED' AND pcn.voided = 0
272
- INNER JOIN program_workflow_state pws ON pws.program_workflow_id = pw.program_workflow_id AND pws.retired = 0
273
- INNER JOIN concept_name cn ON cn.concept_id = pws.concept_id AND cn.concept_name_type = 'FULLY_SPECIFIED' AND cn.voided = 0
270
+ FROM program_workflow #{current_partition} pw
271
+ INNER JOIN concept_name #{current_partition} pcn ON pcn.concept_id = pw.concept_id AND pcn.concept_name_type = 'FULLY_SPECIFIED' AND pcn.voided = 0
272
+ INNER JOIN program_workflow_state #{current_partition} pws ON pws.program_workflow_id = pw.program_workflow_id AND pws.retired = 0
273
+ INNER JOIN concept_name #{current_partition} cn ON cn.concept_id = pws.concept_id AND cn.concept_name_type = 'FULLY_SPECIFIED' AND cn.voided = 0
274
274
  WHERE pw.program_id = 1 AND pw.retired = 0 AND pws.terminal = 1
275
275
  SQL
276
276
  ).map { |state| state['state'] }
@@ -287,18 +287,18 @@ module MalawiHivProgramReports
287
287
  current_state.state,
288
288
  current_state.start_date outcome_date,
289
289
  current_order.start_date vl_order_date
290
- FROM orders ab
291
- INNER JOIN person p ON p.person_id = ab.patient_id AND p.voided = 0
290
+ FROM orders #{current_partition} ab
291
+ INNER JOIN person #{current_partition} p ON p.person_id = ab.patient_id AND p.voided = 0
292
292
  #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
293
- INNER JOIN drug_order dor ON dor.order_id = ab.order_id AND dor.quantity > 0
293
+ INNER JOIN drug_order #{current_partition} dor ON dor.order_id = ab.order_id AND dor.quantity > 0
294
294
  #{site_manager(operator: 'AND', column: 'dor.site_id', location: @location)}
295
- INNER JOIN arv_drug ad ON dor.drug_inventory_id = ad.drug_id
296
- INNER JOIN patient_program pp ON pp.patient_id = ab.patient_id AND pp.voided = 0 AND pp.program_id = 1
295
+ INNER JOIN arv_drug #{current_partition} ad ON dor.drug_inventory_id = ad.drug_id
296
+ INNER JOIN patient_program #{current_partition} pp ON pp.patient_id = ab.patient_id AND pp.voided = 0 AND pp.program_id = 1
297
297
  #{site_manager(operator: 'AND', column: 'pp.site_id', location: @location)}
298
298
  INNER JOIN (
299
299
  SELECT a.site_id, a.patient_program_id, a.state, a.start_date, a.end_date
300
- FROM patient_state a
301
- LEFT OUTER JOIN patient_state b ON a.patient_program_id = b.patient_program_id
300
+ FROM patient_state #{current_partition} a
301
+ LEFT OUTER JOIN patient_state #{current_partition} b ON a.patient_program_id = b.patient_program_id
302
302
  #{site_manager(operator: 'AND', column: 'b.site_id', location: @location)}
303
303
  AND a.start_date < b.start_date
304
304
  #{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
@@ -306,24 +306,24 @@ module MalawiHivProgramReports
306
306
  WHERE b.patient_program_id IS NULL AND a.end_date IS NULL AND a.voided = 0
307
307
  ) current_state ON current_state.patient_program_id = pp.patient_program_id
308
308
  #{site_manager(operator: 'AND', column: 'current_state.site_id', location: @location)}
309
- LEFT OUTER JOIN orders b ON ab.patient_id = b.patient_id
309
+ LEFT OUTER JOIN orders #{current_partition} b ON ab.patient_id = b.patient_id
310
310
  AND ab.order_id = b.order_id
311
311
  AND ab.auto_expire_date < b.auto_expire_date
312
312
  AND b.voided = 0 AND b.order_type_id = 1
313
313
  #{site_manager(operator: 'AND', column: 'b.site_id', location: @location)}
314
314
  LEFT JOIN (#{current_occupation_query}) a ON a.person_id = ab.patient_id
315
315
  #{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
316
- LEFT JOIN patient_identifier pid ON pid.patient_id = pp.patient_id AND pid.identifier_type IN (#{pepfar_patient_identifier_type.to_sql}) AND pid.voided = 0
316
+ LEFT JOIN patient_identifier #{current_partition} pid ON pid.patient_id = pp.patient_id AND pid.identifier_type IN (#{pepfar_patient_identifier_type.to_sql}) AND pid.voided = 0
317
317
  #{site_manager(operator: 'AND', column: 'pid.site_id', location: @location)}
318
318
  LEFT JOIN (
319
319
  SELECT ab.patient_id, MAX(ab.start_date) start_date
320
- FROM orders ab
321
- INNER JOIN concept_name
320
+ FROM orders #{current_partition} ab
321
+ INNER JOIN concept_name #{current_partition}
322
322
  ON concept_name.concept_id = ab.concept_id
323
323
  AND concept_name.name IN ('Blood', 'DBS (Free drop to DBS card)', 'DBS (Using capillary tube)', '50:50 Normal Plasma')
324
324
  AND concept_name.voided = 0
325
325
  #{site_manager(operator: 'AND', column: 'ab.site_id', location: @location)}
326
- LEFT OUTER JOIN orders b ON ab.patient_id = b.patient_id
326
+ LEFT OUTER JOIN orders #{current_partition} b ON ab.patient_id = b.patient_id
327
327
  AND ab.order_id = b.order_id
328
328
  AND ab.start_date < b.start_date
329
329
  AND b.voided = 0
@@ -364,40 +364,40 @@ module MalawiHivProgramReports
364
364
  COALESCE(reason_for_test_value.name, reason_for_test.value_text) AS reason_for_test,
365
365
  result.value_modifier AS result_modifier,
366
366
  COALESCE(result.value_numeric, result.value_text) AS result_value
367
- FROM orders
368
- INNER JOIN person patient ON patient.person_id = orders.patient_id AND patient.voided = 0
367
+ FROM orders #{current_partition}
368
+ INNER JOIN person #{current_partition} patient ON patient.person_id = orders.patient_id AND patient.voided = 0
369
369
  #{site_manager(operator: 'AND', column: 'patient.site_id', location: @location)}
370
- INNER JOIN order_type
370
+ INNER JOIN order_type #{current_partition}
371
371
  ON order_type.order_type_id = orders.order_type_id
372
372
  AND order_type.name = 'Lab'
373
373
  AND order_type.retired = 0
374
- INNER JOIN concept_name
374
+ INNER JOIN concept_name #{current_partition}
375
375
  ON concept_name.concept_id = orders.concept_id
376
376
  AND concept_name.name IN ('Blood', 'DBS (Free drop to DBS card)', 'DBS (Using capillary tube)', 'Plasma')
377
377
  AND concept_name.voided = 0
378
- LEFT JOIN obs AS reason_for_test
378
+ LEFT JOIN obs #{current_partition} AS reason_for_test
379
379
  ON reason_for_test.order_id = orders.order_id
380
- AND reason_for_test.concept_id IN (SELECT concept_id FROM concept_name WHERE name LIKE 'Reason for test' AND voided = 0)
380
+ AND reason_for_test.concept_id IN (SELECT concept_id FROM concept_name #{current_partition} WHERE name LIKE 'Reason for test' AND voided = 0)
381
381
  AND reason_for_test.voided = 0
382
382
  #{site_manager(operator: 'AND', column: 'reason_for_test.site_id', location: @location)}
383
- LEFT JOIN concept_name AS reason_for_test_value
383
+ LEFT JOIN concept_name #{current_partition} AS reason_for_test_value
384
384
  ON reason_for_test_value.concept_id = reason_for_test.value_coded
385
385
  AND reason_for_test_value.voided = 0
386
- LEFT JOIN obs AS result
386
+ LEFT JOIN obs #{current_partition} AS result
387
387
  ON result.order_id = orders.order_id
388
- AND result.concept_id IN (SELECT concept_id FROM concept_name WHERE name LIKE 'HIV Viral load' AND voided = 0)
388
+ AND result.concept_id IN (SELECT concept_id FROM concept_name #{current_partition} WHERE name LIKE 'HIV Viral load' AND voided = 0)
389
389
  AND result.voided = 0
390
390
  AND (result.value_text IS NOT NULL OR result.value_numeric IS NOT NULL)
391
391
  #{site_manager(operator: 'AND', column: 'result.site_id', location: @location)}
392
392
  INNER JOIN (
393
393
  /* Get the latest order dates for each patient */
394
394
  SELECT orders.patient_id, MAX(orders.start_date) AS start_date
395
- FROM orders
396
- INNER JOIN order_type
395
+ FROM orders #{current_partition}
396
+ INNER JOIN order_type #{current_partition}
397
397
  ON order_type.order_type_id = orders.order_type_id
398
398
  AND order_type.name = 'Lab'
399
399
  AND order_type.retired = 0
400
- INNER JOIN concept_name
400
+ INNER JOIN concept_name #{current_partition}
401
401
  ON concept_name.concept_id = orders.concept_id
402
402
  AND concept_name.name IN ('Blood', 'DBS (Free drop to DBS card)', 'DBS (Using capillary tube)', 'Plasma')
403
403
  AND concept_name.voided = 0
@@ -409,7 +409,7 @@ module MalawiHivProgramReports
409
409
  ) AS latest_patient_order_date
410
410
  ON latest_patient_order_date.patient_id = orders.patient_id
411
411
  AND latest_patient_order_date.start_date = orders.start_date
412
- LEFT JOIN patient_identifier
412
+ LEFT JOIN patient_identifier #{current_partition}
413
413
  ON patient_identifier.patient_id = orders.patient_id
414
414
  AND patient_identifier.identifier_type IN (#{pepfar_patient_identifier_type.to_sql})
415
415
  AND patient_identifier.voided = 0
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MalawiHivProgramReports
4
- VERSION = '1.0.17'
4
+ VERSION = '1.0.19'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: malawi_hiv_program_reports
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.17
4
+ version: 1.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roy Chanunkha
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-17 00:00:00.000000000 Z
11
+ date: 2024-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -189,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
189
  - !ruby/object:Gem::Version
190
190
  version: '0'
191
191
  requirements: []
192
- rubygems_version: 3.5.6
192
+ rubygems_version: 3.4.1
193
193
  signing_key:
194
194
  specification_version: 4
195
195
  summary: Malawi HIV PROGRAM Reports for Ruby on Rails