malawi_hiv_program_reports 1.0.17 → 1.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/services/malawi_hiv_program_reports/adapters/moh/custom.rb +4 -0
- data/app/services/malawi_hiv_program_reports/arv_refill_periods.rb +39 -4
- data/app/services/malawi_hiv_program_reports/moh/cumulative_cohort.rb +7 -7
- data/app/services/malawi_hiv_program_reports/moh/cumulative_outcome.rb +21 -21
- data/app/services/malawi_hiv_program_reports/pepfar/patient_start_vl.rb +2 -2
- data/app/services/malawi_hiv_program_reports/pepfar/regimen_switch.rb +40 -40
- data/app/services/malawi_hiv_program_reports/pepfar/sc_arvdisp.rb +7 -7
- data/app/services/malawi_hiv_program_reports/pepfar/tb_prev.rb +10 -10
- data/app/services/malawi_hiv_program_reports/pepfar/tb_prev2.rb +27 -27
- data/app/services/malawi_hiv_program_reports/pepfar/tb_prev3.rb +40 -40
- data/app/services/malawi_hiv_program_reports/pepfar/tx_ml.rb +7 -7
- data/app/services/malawi_hiv_program_reports/pepfar/tx_new.rb +8 -8
- data/app/services/malawi_hiv_program_reports/pepfar/tx_rtt.rb +22 -22
- data/app/services/malawi_hiv_program_reports/pepfar/tx_tb.rb +80 -25
- data/app/services/malawi_hiv_program_reports/pepfar/utils.rb +8 -8
- data/app/services/malawi_hiv_program_reports/pepfar/viral_load_coverage2.rb +41 -41
- data/lib/malawi_hiv_program_reports/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f86826f15ceb3f763a71ac85b14142481eb6177dea5e77d63b789c1f76955dfd
|
4
|
+
data.tar.gz: ae2542a2e7bc462c5fca169abb73503dfac6f4074eedd6c837a38ff7dbbf6a27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2726026897b6c08fdfea543e57b82396897e2400849b39615135dff0b1a1caab8113c910cc1cdb98042ff2211a548c541d8e3c56b68157ca165142659830e4bb
|
7
|
+
data.tar.gz: 164b30ad7ca003e832cf4a31ba222c92cee0d04fd0f3aa9875a45ef879d8f33b4dca863ac6afdb60de0f6cfe54a18e799e036d249df9f6ed7be30fb7d6d310c4
|
@@ -187,6 +187,10 @@ module MalawiHivProgramReports
|
|
187
187
|
"DATE_PART('#{interval}', #{date2}::timestamp - #{date1}::timestamp)" if adapter == 'postgresql'
|
188
188
|
end
|
189
189
|
|
190
|
+
def current_partition
|
191
|
+
"PARTITION (p#{@location})"
|
192
|
+
end
|
193
|
+
|
190
194
|
# this is a min filter
|
191
195
|
# @occupation: object
|
192
196
|
def min_filt(occupation)
|
@@ -7,6 +7,7 @@ module MalawiHivProgramReports
|
|
7
7
|
include MalawiHivProgramReports::Adapters::Moh::Custom
|
8
8
|
include MalawiHivProgramReports::Utils::ModelUtils
|
9
9
|
include Utils
|
10
|
+
include Pepfar::Utils
|
10
11
|
|
11
12
|
def initialize(start_date:, end_date:, min_age:, max_age:, org:, initialize_tables:, **kwargs)
|
12
13
|
@start_date = start_date.to_date.strftime('%Y-%m-%d 00:00:00')
|
@@ -17,6 +18,7 @@ module MalawiHivProgramReports
|
|
17
18
|
@initialize_tables = (initialize_tables == 'true')
|
18
19
|
@occupation = kwargs[:occupation]
|
19
20
|
@location = kwargs[:location]
|
21
|
+
@format = kwargs[:format] || 'poc'
|
20
22
|
end
|
21
23
|
|
22
24
|
def find_report
|
@@ -40,23 +42,56 @@ module MalawiHivProgramReports
|
|
40
42
|
|
41
43
|
if @initialize_tables
|
42
44
|
report_type = (/pepfar/i.match?(@org) ? 'pepfar' : 'moh')
|
43
|
-
MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: report_type, location: @location).init_temporary_tables(@start_date,
|
44
|
-
@end_date, @occupation)
|
45
|
+
MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: report_type, location: @location). init_temporary_tables(@start_date, @end_date, @occupation)
|
45
46
|
end
|
46
47
|
|
47
48
|
patients = ActiveRecord::Base.connection.select_all <<~SQL
|
48
49
|
SELECT
|
50
|
+
disaggregated_age_group(p.birthdate, DATE('#{@end_date}')) age_group,
|
49
51
|
p.patient_id, p.date_enrolled, p.birthdate, p.gender,
|
50
52
|
outcome.cum_outcome AS outcome
|
51
53
|
FROM temp_earliest_start_date p
|
52
54
|
LEFT JOIN temp_patient_outcomes outcome USING(patient_id)
|
53
55
|
WHERE DATE(date_enrolled) <= DATE('#{@end_date}')
|
54
|
-
AND
|
55
|
-
AND
|
56
|
+
AND cum_outcome = 'On antiretrovirals'
|
57
|
+
#{@format == 'poc' ? "AND TIMESTAMPDIFF(year, p.birthdate, DATE('#{@end_date}')) BETWEEN #{@min_age} AND #{@max_age}" : ''};
|
56
58
|
SQL
|
57
59
|
|
58
60
|
return {} if patients.blank?
|
59
61
|
|
62
|
+
def init_report
|
63
|
+
pepfar_age_groups.each_with_object({}) do |age_group, report|
|
64
|
+
report[age_group] = ['M', 'F'].each_with_object({}) do |gender, age_group_report|
|
65
|
+
age_group_report[gender] = {
|
66
|
+
less_than_3months: [],
|
67
|
+
three_to_five_months: [],
|
68
|
+
greater_than_six_months: []
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
if @format === 'pepfar'
|
75
|
+
return patients.uniq.each_with_object(init_report) do |patient, report|
|
76
|
+
age_group = patient['age_group']
|
77
|
+
gender = patient['gender']
|
78
|
+
|
79
|
+
dispensing_days = get_dispensing_info(patient['patient_id'], encounter_type, arv_concept_set, program_id)
|
80
|
+
|
81
|
+
return [] if dispensing_days.blank?
|
82
|
+
|
83
|
+
if dispensing_days < 90
|
84
|
+
report[age_group][gender][:greater_than_six_months] << patient['patient_id']
|
85
|
+
end
|
86
|
+
if dispensing_days >= 90 && dispensing_days <= 152
|
87
|
+
report[age_group][gender][:three_to_five_months] << patient['patient_id']
|
88
|
+
end
|
89
|
+
if dispensing_days >= 153
|
90
|
+
report[age_group][gender][:greater_than_six_months] << patient['patient_id']
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
60
95
|
data = []
|
61
96
|
patients.each do |p|
|
62
97
|
data << [p['patient_id'].to_i, p['gender'], p['birthdate']]
|
@@ -223,7 +223,7 @@ module MalawiHivProgramReports
|
|
223
223
|
# rubocop:disable Metrics/MethodLength
|
224
224
|
def cohort_members(location)
|
225
225
|
ActiveRecord::Base.connection.execute <<~SQL
|
226
|
-
INSERT INTO cdr_temp_cohort_members
|
226
|
+
INSERT INTO cdr_temp_cohort_members PARTITION (p#{location})
|
227
227
|
SELECT
|
228
228
|
pcm.patient_id,
|
229
229
|
pcm.site_id,
|
@@ -252,7 +252,7 @@ module MalawiHivProgramReports
|
|
252
252
|
|
253
253
|
def potential_cohort_members(location)
|
254
254
|
ActiveRecord::Base.connection.execute <<~SQL
|
255
|
-
INSERT INTO cdr_temp_potential_cohort_members
|
255
|
+
INSERT INTO cdr_temp_potential_cohort_members PARTITION (p#{location})
|
256
256
|
SELECT
|
257
257
|
pp.patient_id,
|
258
258
|
pp.site_id,
|
@@ -275,7 +275,7 @@ module MalawiHivProgramReports
|
|
275
275
|
|
276
276
|
def min_drug_orders(location)
|
277
277
|
ActiveRecord::Base.connection.execute <<~SQL
|
278
|
-
INSERT INTO cdr_temp_min_drug_orders
|
278
|
+
INSERT INTO cdr_temp_min_drug_orders PARTITION (p#{location})
|
279
279
|
SELECT o.patient_id, o.site_id, DATE(MIN(o.start_date)) start_date
|
280
280
|
FROM orders o
|
281
281
|
INNER JOIN drug_order do ON do.order_id = o.order_id AND do.site_id = o.site_id AND do.quantity > 0
|
@@ -300,7 +300,7 @@ module MalawiHivProgramReports
|
|
300
300
|
|
301
301
|
def transfer_ins(location)
|
302
302
|
ActiveRecord::Base.connection.execute <<~SQL
|
303
|
-
INSERT INTO cdr_temp_transfer_ins
|
303
|
+
INSERT INTO cdr_temp_transfer_ins PARTITION (p#{location})
|
304
304
|
SELECT o.person_id, o.site_id, DATE(MIN(o.value_datetime)) value_datetime
|
305
305
|
FROM obs o
|
306
306
|
INNER JOIN encounter e ON e.patient_id = o.person_id AND e.site_id = o.site_id AND e.encounter_id = o.encounter_id
|
@@ -316,7 +316,7 @@ module MalawiHivProgramReports
|
|
316
316
|
|
317
317
|
def external_clients(location)
|
318
318
|
ActiveRecord::Base.connection.execute <<~SQL
|
319
|
-
INSERT INTO cdr_temp_external_clients
|
319
|
+
INSERT INTO cdr_temp_external_clients PARTITION (p#{location})
|
320
320
|
SELECT e.patient_id, e.site_id, GROUP_CONCAT(DISTINCT(patient_type.value_coded)) AS patient_types, clinic_registration.encounter_id
|
321
321
|
FROM patient_program as e
|
322
322
|
INNER JOIN obs AS patient_type ON patient_type.person_id = e.patient_id
|
@@ -342,7 +342,7 @@ module MalawiHivProgramReports
|
|
342
342
|
|
343
343
|
def cdr_other_patient_types(location)
|
344
344
|
ActiveRecord::Base.connection.execute <<~SQL
|
345
|
-
INSERT INTO cdr_other_patient_types
|
345
|
+
INSERT INTO cdr_other_patient_types PARTITION (p#{location})
|
346
346
|
SELECT o.person_id, o.site_id
|
347
347
|
FROM obs o
|
348
348
|
WHERE o.concept_id = 3289 -- Type of patient
|
@@ -358,7 +358,7 @@ module MalawiHivProgramReports
|
|
358
358
|
|
359
359
|
def reason_for_starting_art(location)
|
360
360
|
ActiveRecord::Base.connection.execute <<~SQL
|
361
|
-
INSERT INTO cdr_reason_for_starting_art
|
361
|
+
INSERT INTO cdr_reason_for_starting_art PARTITION (p#{location})
|
362
362
|
SELECT a.person_id, a.site_id, a.value_coded
|
363
363
|
FROM obs a
|
364
364
|
INNER JOIN cdr_temp_potential_cohort_members ct ON ct.patient_id = a.person_id AND ct.site_id = a.site_id
|
@@ -23,7 +23,7 @@ module MalawiHivProgramReports
|
|
23
23
|
process_data
|
24
24
|
end_time = Time.now
|
25
25
|
total_time_in_minutes = ((end_time - start_time) / 60).round(2)
|
26
|
-
Rails.logger.info("Cumulative Outcome report completed in #{total_time_in_minutes} minutes")
|
26
|
+
Rails.logger.info("Cumulative Outcome report completed in #{total_time_in_minutes} minutes for location: #{location}")
|
27
27
|
{ cumulative_outcome_time: total_time_in_minutes, definition: }
|
28
28
|
end
|
29
29
|
|
@@ -70,7 +70,7 @@ module MalawiHivProgramReports
|
|
70
70
|
|
71
71
|
def load_max_drug_orders
|
72
72
|
ActiveRecord::Base.connection.execute <<~SQL
|
73
|
-
INSERT INTO cdr_temp_max_drug_orders
|
73
|
+
INSERT INTO cdr_temp_max_drug_orders PARTITION (p#{location})
|
74
74
|
SELECT o.patient_id, o.site_id, MAX(o.start_date) AS start_date
|
75
75
|
FROM orders o
|
76
76
|
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = o.patient_id AND tesd.site_id = o.site_id
|
@@ -87,7 +87,7 @@ module MalawiHivProgramReports
|
|
87
87
|
|
88
88
|
def load_min_auto_expire_date
|
89
89
|
ActiveRecord::Base.connection.execute <<~SQL
|
90
|
-
INSERT INTO cdr_temp_min_auto_expire_date
|
90
|
+
INSERT INTO cdr_temp_min_auto_expire_date PARTITION (p#{location})
|
91
91
|
SELECT patient_id, o.site_id, MIN(auto_expire_date) AS auto_expire_date
|
92
92
|
FROM orders o
|
93
93
|
INNER JOIN cdr_temp_max_drug_orders USING (patient_id, site_id, start_date)
|
@@ -104,7 +104,7 @@ module MalawiHivProgramReports
|
|
104
104
|
|
105
105
|
def load_max_appointment_date
|
106
106
|
ActiveRecord::Base.connection.execute <<~SQL
|
107
|
-
INSERT INTO cdr_temp_max_patient_appointment
|
107
|
+
INSERT INTO cdr_temp_max_patient_appointment PARTITION (p#{location})
|
108
108
|
SELECT o.person_id, o.site_id, DATE(MAX(o.value_datetime)) appointment_date
|
109
109
|
FROM obs o
|
110
110
|
INNER JOIN encounter e ON e.encounter_id = o.encounter_id AND e.site_id = o.site_id AND e.voided = 0
|
@@ -118,7 +118,7 @@ module MalawiHivProgramReports
|
|
118
118
|
|
119
119
|
def load_max_patient_state
|
120
120
|
ActiveRecord::Base.connection.execute <<~SQL
|
121
|
-
INSERT INTO cdr_temp_max_patient_state
|
121
|
+
INSERT INTO cdr_temp_max_patient_state PARTITION (p#{location})
|
122
122
|
SELECT pp.patient_id, pp.site_id, MAX(ps.start_date) start_date
|
123
123
|
FROM patient_state ps
|
124
124
|
INNER JOIN patient_program pp ON pp.patient_program_id = ps.patient_program_id AND pp.site_id = ps.site_id AND pp.program_id = 1 AND pp.voided = 0
|
@@ -134,7 +134,7 @@ module MalawiHivProgramReports
|
|
134
134
|
# into the temp_patient_outcomes table.
|
135
135
|
def load_patients_who_died
|
136
136
|
ActiveRecord::Base.connection.execute <<~SQL
|
137
|
-
INSERT INTO cdr_temp_patient_outcomes
|
137
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
138
138
|
SELECT patients.patient_id, 'Patient died', patient_state.start_date, patients.site_id, 1
|
139
139
|
FROM cdr_temp_cohort_members AS patients
|
140
140
|
INNER JOIN patient_program
|
@@ -163,7 +163,7 @@ module MalawiHivProgramReports
|
|
163
163
|
# treatment stopped into temp_patient_outcomes table.
|
164
164
|
def load_patients_who_stopped_treatment
|
165
165
|
ActiveRecord::Base.connection.execute <<~SQL
|
166
|
-
INSERT INTO cdr_temp_patient_outcomes
|
166
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
167
167
|
SELECT patients.patient_id,
|
168
168
|
(
|
169
169
|
SELECT name FROM concept_name
|
@@ -192,7 +192,7 @@ module MalawiHivProgramReports
|
|
192
192
|
AND max_patient_state.site_id = patient_state.site_id
|
193
193
|
AND max_patient_state.start_date = patient_state.start_date
|
194
194
|
WHERE patients.date_enrolled <= #{end_date} AND patients.site_id = #{location}
|
195
|
-
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes WHERE step = 1)
|
195
|
+
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes PARTITION (p#{location}) WHERE step = 1)
|
196
196
|
GROUP BY patients.patient_id, patients.site_id
|
197
197
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
198
198
|
SQL
|
@@ -201,7 +201,7 @@ module MalawiHivProgramReports
|
|
201
201
|
# Load all patients on Pre-ART.
|
202
202
|
def load_patients_on_pre_art
|
203
203
|
ActiveRecord::Base.connection.execute <<~SQL
|
204
|
-
INSERT INTO cdr_temp_patient_outcomes
|
204
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
205
205
|
SELECT patients.patient_id,
|
206
206
|
CASE
|
207
207
|
WHEN #{current_defaulter_function('patients.patient_id', 'patients.site_id')} = 1 THEN 'Defaulted'
|
@@ -226,7 +226,7 @@ module MalawiHivProgramReports
|
|
226
226
|
AND max_patient_state.site_id = patient_state.site_id
|
227
227
|
AND max_patient_state.start_date = patient_state.start_date
|
228
228
|
WHERE patients.date_enrolled <= #{end_date} AND patients.site_id = #{location}
|
229
|
-
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes WHERE step IN (1, 2))
|
229
|
+
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes PARTITION (p#{location}) WHERE step IN (1, 2))
|
230
230
|
GROUP BY patients.patient_id, patients.site_id
|
231
231
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
232
232
|
SQL
|
@@ -235,7 +235,7 @@ module MalawiHivProgramReports
|
|
235
235
|
# Load all patients without a state
|
236
236
|
def load_patients_without_state
|
237
237
|
ActiveRecord::Base.connection.execute <<~SQL
|
238
|
-
INSERT INTO cdr_temp_patient_outcomes
|
238
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
239
239
|
SELECT patients.patient_id,
|
240
240
|
CASE
|
241
241
|
WHEN #{current_defaulter_function('patients.patient_id', 'patients.site_id')} = 1 THEN 'Defaulted'
|
@@ -254,7 +254,7 @@ module MalawiHivProgramReports
|
|
254
254
|
FROM patient_state
|
255
255
|
WHERE start_date < DATE(#{end_date}) + INTERVAL 1 DAY AND voided = 0
|
256
256
|
)
|
257
|
-
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes WHERE step IN (1, 2, 3))
|
257
|
+
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes PARTITION (p#{location}) WHERE step IN (1, 2, 3))
|
258
258
|
GROUP BY patients.patient_id, patients.site_id
|
259
259
|
HAVING cum_outcome = 'Defaulted'
|
260
260
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
@@ -265,14 +265,14 @@ module MalawiHivProgramReports
|
|
265
265
|
# without a quantity.
|
266
266
|
def load_patients_without_drug_orders
|
267
267
|
ActiveRecord::Base.connection.execute <<~SQL
|
268
|
-
INSERT INTO cdr_temp_patient_outcomes
|
268
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
269
269
|
SELECT patients.patient_id,
|
270
270
|
'Unknown',
|
271
271
|
NULL, patients.site_id, 5
|
272
272
|
FROM cdr_temp_cohort_members AS patients
|
273
273
|
WHERE date_enrolled <= #{end_date} AND site_id = #{location}
|
274
|
-
AND (patient_id, site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes WHERE step IN (1, 2, 3, 4))
|
275
|
-
AND (patient_id, site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_max_drug_orders)
|
274
|
+
AND (patient_id, site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes PARTITION (p#{location}) WHERE step IN (1, 2, 3, 4))
|
275
|
+
AND (patient_id, site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_max_drug_orders PARTITION (p#{location}))
|
276
276
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
277
277
|
SQL
|
278
278
|
end
|
@@ -280,7 +280,7 @@ module MalawiHivProgramReports
|
|
280
280
|
# Loads all patients who are on treatment
|
281
281
|
def load_patients_on_treatment
|
282
282
|
ActiveRecord::Base.connection.execute <<~SQL
|
283
|
-
INSERT INTO cdr_temp_patient_outcomes
|
283
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
284
284
|
SELECT patients.patient_id, 'On antiretrovirals', patient_state.start_date, patients.site_id, 6
|
285
285
|
FROM cdr_temp_cohort_members AS patients
|
286
286
|
INNER JOIN patient_program
|
@@ -310,7 +310,7 @@ module MalawiHivProgramReports
|
|
310
310
|
AND first_order_to_expire.site_id = patient_program.site_id
|
311
311
|
AND (first_order_to_expire.auto_expire_date >= #{end_date} OR TIMESTAMPDIFF(DAY,first_order_to_expire.auto_expire_date, #{end_date}) <= #{@definition == 'pepfar' ? 28 : 56})
|
312
312
|
WHERE patients.date_enrolled <= #{end_date} AND patients.site_id = #{location}
|
313
|
-
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes WHERE step IN (1, 2, 3, 4, 5))
|
313
|
+
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes PARTITION (p#{location}) WHERE step IN (1, 2, 3, 4, 5))
|
314
314
|
GROUP BY patients.patient_id, patients.site_id
|
315
315
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
316
316
|
SQL
|
@@ -318,7 +318,7 @@ module MalawiHivProgramReports
|
|
318
318
|
|
319
319
|
def load_without_clinical_contact
|
320
320
|
ActiveRecord::Base.connection.execute <<~SQL
|
321
|
-
INSERT INTO cdr_temp_patient_outcomes
|
321
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
322
322
|
SELECT patients.patient_id, 'Defaulted', null, patients.site_id, 7
|
323
323
|
FROM cdr_temp_cohort_members AS patients
|
324
324
|
INNER JOIN patient_program
|
@@ -349,7 +349,7 @@ module MalawiHivProgramReports
|
|
349
349
|
AND first_order_to_expire.auto_expire_date < #{end_date}
|
350
350
|
AND TIMESTAMPDIFF(DAY,first_order_to_expire.auto_expire_date, #{end_date}) >= 365
|
351
351
|
WHERE patients.date_enrolled <= #{end_date} AND patients.site_id = #{location}
|
352
|
-
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes WHERE step IN (1, 2, 3, 4, 5, 6))
|
352
|
+
AND (patients.patient_id, patients.site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes PARTITION (p#{location}) WHERE step IN (1, 2, 3, 4, 5, 6))
|
353
353
|
GROUP BY patients.patient_id, patients.site_id
|
354
354
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
355
355
|
SQL
|
@@ -358,11 +358,11 @@ module MalawiHivProgramReports
|
|
358
358
|
# Load defaulters
|
359
359
|
def load_defaulters
|
360
360
|
ActiveRecord::Base.connection.execute <<~SQL
|
361
|
-
INSERT INTO cdr_temp_patient_outcomes
|
361
|
+
INSERT INTO cdr_temp_patient_outcomes PARTITION (p#{location})
|
362
362
|
SELECT patient_id, #{patient_outcome_function('patient_id', 'site_id')}, NULL, site_id, 8
|
363
363
|
FROM cdr_temp_cohort_members
|
364
364
|
WHERE date_enrolled <= #{end_date} AND site_id = #{location}
|
365
|
-
AND (patient_id, site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes WHERE step IN (1, 2, 3, 4, 5, 6, 7))
|
365
|
+
AND (patient_id, site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes PARTITION (p#{location}) WHERE step IN (1, 2, 3, 4, 5, 6, 7))
|
366
366
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
367
367
|
SQL
|
368
368
|
end
|
@@ -32,8 +32,8 @@ module MalawiHivProgramReports
|
|
32
32
|
p.birthdate AS birthdate,
|
33
33
|
p.gender,
|
34
34
|
MIN(pi.identifier)
|
35
|
-
FROM person p
|
36
|
-
LEFT JOIN patient_identifier pi ON pi.patient_id = p.person_id AND pi.voided = 0 AND pi.identifier_type = 4
|
35
|
+
FROM person #{current_partition} p
|
36
|
+
LEFT JOIN patient_identifier #{current_partition} pi ON pi.patient_id = p.person_id AND pi.voided = 0 AND pi.identifier_type = 4
|
37
37
|
WHERE p.voided = 0
|
38
38
|
AND #{in_manager(column: 'p.person_id', values: ids)}
|
39
39
|
#{site_manager(operator: 'AND', column: 'p.site_id', location: location)}
|
@@ -50,25 +50,25 @@ module MalawiHivProgramReports
|
|
50
50
|
o.patient_id, drug.drug_id, o.order_id, i.identifier,
|
51
51
|
drug.name, d.quantity, o.start_date, obs.value_numeric,
|
52
52
|
person.birthdate, person.gender
|
53
|
-
FROM orders o
|
54
|
-
INNER JOIN drug_order d ON d.order_id = o.order_id AND d.quantity > 0
|
55
|
-
INNER JOIN drug ON drug.drug_id = d.drug_inventory_id
|
56
|
-
INNER JOIN arv_drug On arv_drug.drug_id = drug.drug_id
|
57
|
-
INNER JOIN temp_patient_outcomes t ON o.patient_id = t.patient_id AND t.cum_outcome = 'On antiretrovirals'
|
58
|
-
INNER JOIN person ON person.person_id = o.patient_id AND person.voided = 0
|
53
|
+
FROM orders #{current_partition} o
|
54
|
+
INNER JOIN drug_order #{current_partition} d ON d.order_id = o.order_id AND d.quantity > 0
|
55
|
+
INNER JOIN drug #{current_partition} ON drug.drug_id = d.drug_inventory_id
|
56
|
+
INNER JOIN arv_drug #{current_partition} On arv_drug.drug_id = drug.drug_id
|
57
|
+
INNER JOIN temp_patient_outcomes #{current_partition} t ON o.patient_id = t.patient_id AND t.cum_outcome = 'On antiretrovirals'
|
58
|
+
INNER JOIN person #{current_partition} ON person.person_id = o.patient_id AND person.voided = 0
|
59
59
|
#{site_manager(operator: 'AND', column: 'person.site_id', location: @location)}
|
60
60
|
INNER JOIN (
|
61
61
|
SELECT MAX(o.start_date) start_date, o.patient_id
|
62
|
-
FROM orders o
|
63
|
-
INNER JOIN drug_order dor ON dor.order_id = o.order_id AND dor.quantity > 0
|
64
|
-
AND dor.drug_inventory_id IN (SELECT drug_id FROM arv_drug)
|
62
|
+
FROM orders #{current_partition} o
|
63
|
+
INNER JOIN drug_order #{current_partition} dor ON dor.order_id = o.order_id AND dor.quantity > 0
|
64
|
+
AND dor.drug_inventory_id IN (SELECT drug_id FROM arv_drug #{current_partition})
|
65
65
|
WHERE o.voided = 0
|
66
66
|
AND o.start_date <= '#{@end_date.to_date.strftime("%Y-%m-%d 23:59:59")}'
|
67
67
|
AND o.start_date >= '#{@start_date.to_date.strftime("%Y-%m-%d 00:00:00")}'
|
68
68
|
GROUP BY o.patient_id
|
69
69
|
) lor ON lor.start_date = o.start_date AND lor.patient_id = o.patient_id
|
70
|
-
LEFT JOIN obs on obs.order_id = o.order_id AND obs.concept_id=#{pills_dispensed} AND obs.voided = 0
|
71
|
-
LEFT JOIN patient_identifier i ON i.patient_id = o.patient_id
|
70
|
+
LEFT JOIN obs #{current_partition} on obs.order_id = o.order_id AND obs.concept_id=#{pills_dispensed} AND obs.voided = 0
|
71
|
+
LEFT JOIN patient_identifier #{current_partition} i ON i.patient_id = o.patient_id
|
72
72
|
AND i.identifier_type = #{patient_identifier_type} AND i.voided = 0
|
73
73
|
WHERE o.voided = 0
|
74
74
|
AND o.start_date <= '#{@end_date.to_date.strftime("%Y-%m-%d 23:59:59")}'
|
@@ -121,7 +121,7 @@ module MalawiHivProgramReports
|
|
121
121
|
encounter_type_id = ::EncounterType.find_by_name('DISPENSING').id
|
122
122
|
arv_concept_id = ::ConceptName.find_by_name('Antiretroviral drugs').concept_id
|
123
123
|
|
124
|
-
drug_ids = ::Drug.joins('INNER JOIN concept_set s ON s.concept_id = drug.concept_id')\
|
124
|
+
drug_ids = ::Drug.joins('INNER JOIN concept_set #{current_partition} s ON s.concept_id = drug.concept_id')\
|
125
125
|
.where('s.concept_set = ?', arv_concept_id).map(&:drug_id)
|
126
126
|
|
127
127
|
ActiveRecord::Base.connection.execute('drop table if exists tmp_latest_arv_dispensation ;')
|
@@ -129,7 +129,7 @@ module MalawiHivProgramReports
|
|
129
129
|
ActiveRecord::Base.connection.execute("
|
130
130
|
create table tmp_latest_arv_dispensation AS
|
131
131
|
SELECT patient_id,DATE(MAX(start_date)) as start_date
|
132
|
-
FROM orders INNER JOIN drug_order t USING (order_id)
|
132
|
+
FROM orders #{current_partition} INNER JOIN drug_order #{current_partition} t USING (order_id)
|
133
133
|
WHERE
|
134
134
|
(
|
135
135
|
start_date BETWEEN '#{@start_date.to_date.strftime('%Y-%m-%d 00:00:00')}' AND '#{@end_date.to_date.strftime('%Y-%m-%d 23:59:59')}'
|
@@ -146,10 +146,10 @@ module MalawiHivProgramReports
|
|
146
146
|
o.order_id,
|
147
147
|
MIN(d.quantity),
|
148
148
|
MIN(drug.name)
|
149
|
-
FROM orders o
|
150
|
-
INNER JOIN drug_order d ON o.order_id = d.order_id
|
151
|
-
INNER JOIN drug ON d.drug_inventory_id = drug.drug_id
|
152
|
-
INNER JOIN tmp_latest_arv_dispensation k on (o.patient_id = k.patient_id and DATE(o.start_date) = k.start_date)
|
149
|
+
FROM orders #{current_partition} o
|
150
|
+
INNER JOIN drug_order #{current_partition} d ON o.order_id = d.order_id
|
151
|
+
INNER JOIN drug #{current_partition} ON d.drug_inventory_id = drug.drug_id
|
152
|
+
INNER JOIN tmp_latest_arv_dispensation #{current_partition} k on (o.patient_id = k.patient_id and DATE(o.start_date) = k.start_date)
|
153
153
|
WHERE #{in_manager(column: 'd.drug_inventory_id', values: drug_ids)}
|
154
154
|
AND d.quantity > 0 AND o.voided = 0 AND o.start_date BETWEEN '#{@start_date.to_date.strftime('%Y-%m-%d 00:00:00')}'
|
155
155
|
AND '#{@end_date.to_date.strftime('%Y-%m-%d 23:59:59')}'
|
@@ -169,9 +169,9 @@ module MalawiHivProgramReports
|
|
169
169
|
date_antiretrovirals_started(CAST(p.patient_id AS INT), CAST(MIN(s.start_date) AS DATE), CAST(#{@location} AS INT)) AS earliest_start_date
|
170
170
|
FROM
|
171
171
|
((patient_program p
|
172
|
-
LEFT JOIN person pe ON (pe.person_id = p.patient_id))
|
173
|
-
LEFT JOIN patient_state s ON (p.patient_program_id = s.patient_program_id))
|
174
|
-
LEFT JOIN person ON (person.person_id = p.patient_id)
|
172
|
+
LEFT JOIN person #{current_partition} pe ON (pe.person_id = p.patient_id))
|
173
|
+
LEFT JOIN patient_state #{current_partition} s ON (p.patient_program_id = s.patient_program_id))
|
174
|
+
LEFT JOIN person #{current_partition} ON (person.person_id = p.patient_id)
|
175
175
|
WHERE
|
176
176
|
(p.voided = 0
|
177
177
|
AND s.voided = 0
|
@@ -184,7 +184,7 @@ module MalawiHivProgramReports
|
|
184
184
|
end
|
185
185
|
|
186
186
|
def max_patient_order_date(patient_id)
|
187
|
-
drug_ids = Drug.joins('INNER JOIN concept_set s ON s.concept_id = drug.concept_id')\
|
187
|
+
drug_ids = Drug.joins('INNER JOIN concept_set #{current_partition} s ON s.concept_id = drug.concept_id')\
|
188
188
|
.where('s.concept_set = ?', ConceptName.find_by_name('Antiretroviral drugs').concept_id).map(&:drug_id)
|
189
189
|
|
190
190
|
Order.joins(drug_order: :drug)
|
@@ -202,7 +202,7 @@ module MalawiHivProgramReports
|
|
202
202
|
encounter_type_id = EncounterType.find_by_name('DISPENSING').id
|
203
203
|
arv_concept_id = ConceptName.find_by_name('Antiretroviral drugs').concept_id
|
204
204
|
|
205
|
-
drug_ids = Drug.joins('INNER JOIN concept_set s ON s.concept_id = drug.concept_id')\
|
205
|
+
drug_ids = Drug.joins('INNER JOIN concept_set #{current_partition} s ON s.concept_id = drug.concept_id')\
|
206
206
|
.where('s.concept_set = ?', arv_concept_id).map(&:drug_id)
|
207
207
|
max_order_date = max_patient_order_date(patient_id)
|
208
208
|
orders = Order.joins(drug_order: :drug)
|
@@ -258,9 +258,9 @@ module MalawiHivProgramReports
|
|
258
258
|
SELECT
|
259
259
|
p.birthdate, p.gender, i.identifier arv_number,
|
260
260
|
n.given_name, n.family_name
|
261
|
-
FROM person p
|
262
|
-
LEFT JOIN person_name n ON n.person_id = p.person_id AND n.voided = 0
|
263
|
-
LEFT JOIN patient_identifier i ON i.patient_id = p.person_id
|
261
|
+
FROM person #{current_partition} p
|
262
|
+
LEFT JOIN person_name #{current_partition} n ON n.person_id = p.person_id AND n.voided = 0
|
263
|
+
LEFT JOIN patient_identifier #{current_partition} i ON i.patient_id = p.person_id
|
264
264
|
AND i.identifier_type = 4 AND i.voided = 0
|
265
265
|
WHERE p.person_id = #{patient_id} GROUP BY p.person_id
|
266
266
|
ORDER BY n.date_created DESC, i.date_created DESC;
|
@@ -305,7 +305,7 @@ module MalawiHivProgramReports
|
|
305
305
|
|
306
306
|
|
307
307
|
outcome_status = ActiveRecord::Base.connection.select_one <<~SQL
|
308
|
-
SELECT cum_outcome FROM temp_patient_outcomes WHERE patient_id = #{patient_id};
|
308
|
+
SELECT cum_outcome FROM temp_patient_outcomes #{current_partition} WHERE patient_id = #{patient_id};
|
309
309
|
SQL
|
310
310
|
|
311
311
|
next if outcome_status.blank?
|
@@ -333,9 +333,9 @@ module MalawiHivProgramReports
|
|
333
333
|
SELECT
|
334
334
|
p.birthdate, p.gender, i.identifier arv_number,
|
335
335
|
n.given_name, n.family_name, p.person_id
|
336
|
-
FROM person p
|
337
|
-
LEFT JOIN person_name n ON n.person_id = p.person_id AND n.voided = 0
|
338
|
-
LEFT JOIN patient_identifier i ON i.patient_id = p.person_id
|
336
|
+
FROM person #{current_partition} p
|
337
|
+
LEFT JOIN person_name #{current_partition} n ON n.person_id = p.person_id AND n.voided = 0
|
338
|
+
LEFT JOIN patient_identifier #{current_partition} i ON i.patient_id = p.person_id
|
339
339
|
AND i.identifier_type = 4 AND i.voided = 0
|
340
340
|
WHERE p.person_id = #{patient_id}
|
341
341
|
GROUP BY p.person_id, n.given_name, n.family_name, i.identifier, p.birthdate, p.gender
|
@@ -401,17 +401,17 @@ module MalawiHivProgramReports
|
|
401
401
|
# ActiveRecord::Base.connection.select_one <<~SQL
|
402
402
|
# SELECT lab_result_obs.obs_datetime AS result_date,
|
403
403
|
# CONCAT (COALESCE(measure.value_modifier, '='),' ',COALESCE(measure.value_numeric, measure.value_text, '')) as result
|
404
|
-
# FROM obs AS lab_result_obs
|
405
|
-
# INNER JOIN orders
|
404
|
+
# FROM obs #{current_partition} AS lab_result_obs
|
405
|
+
# INNER JOIN orders #{current_partition}
|
406
406
|
# ON orders.order_id = lab_result_obs.order_id
|
407
407
|
# AND orders.voided = 0
|
408
|
-
# INNER JOIN obs AS measure
|
408
|
+
# INNER JOIN obs #{current_partition} AS measure
|
409
409
|
# ON measure.obs_group_id = lab_result_obs.obs_id
|
410
410
|
# AND measure.voided = 0
|
411
411
|
# INNER JOIN (
|
412
412
|
# SELECT concept_id, name
|
413
|
-
# FROM concept_name
|
414
|
-
# INNER JOIN
|
413
|
+
# FROM concept_name #{current_partition}
|
414
|
+
# INNER JOIN USING (concept_id)
|
415
415
|
# WHERE concept.retired = 0
|
416
416
|
# AND name NOT LIKE 'Lab test result'
|
417
417
|
# GROUP BY concept_id
|
@@ -429,8 +429,8 @@ module MalawiHivProgramReports
|
|
429
429
|
def latest_vl_orders(patient_list)
|
430
430
|
ActiveRecord::Base.connection.select_all <<~SQL
|
431
431
|
SELECT odr.patient_id, MAX(start_date) AS order_date
|
432
|
-
FROM obs o
|
433
|
-
INNER JOIN orders odr ON odr.order_id = o.order_id AND odr.voided = 0 AND DATE(odr.start_date) <= '#{@end_date}'
|
432
|
+
FROM obs #{current_partition} o
|
433
|
+
INNER JOIN orders #{current_partition} odr ON odr.order_id = o.order_id AND odr.voided = 0 AND DATE(odr.start_date) <= '#{@end_date}'
|
434
434
|
WHERE o.concept_id = #{::ConceptName.find_by_name('Test Type').concept_id}
|
435
435
|
AND o.value_coded = #{::ConceptName.find_by_name('HIV viral load').concept_id}
|
436
436
|
AND o.voided = 0
|
@@ -444,11 +444,11 @@ module MalawiHivProgramReports
|
|
444
444
|
SELECT o.person_id AS patient_id,
|
445
445
|
o.obs_datetime AS result_date,
|
446
446
|
CONCAT (COALESCE(o.value_modifier, '='),' ',COALESCE(o.value_numeric, o.value_text, '')) AS result
|
447
|
-
FROM obs o
|
447
|
+
FROM obs #{current_partition} o
|
448
448
|
INNER JOIN (
|
449
449
|
SELECT MAX(obs_datetime) AS obs_datetime, person_id
|
450
|
-
FROM obs co
|
451
|
-
INNER JOIN orders odr ON odr.order_id = co.order_id AND odr.voided = 0
|
450
|
+
FROM obs #{current_partition} co
|
451
|
+
INNER JOIN orders #{current_partition} odr ON odr.order_id = co.order_id AND odr.voided = 0
|
452
452
|
WHERE co.concept_id = #{::ConceptName.find_by_name('HIV viral load').concept_id}
|
453
453
|
AND co.voided = 0
|
454
454
|
AND co.obs_datetime <= '#{@end_date}'
|
@@ -456,7 +456,7 @@ module MalawiHivProgramReports
|
|
456
456
|
AND #{in_manager(column: 'co.person_id', values: patient_list)}
|
457
457
|
GROUP BY co.person_id
|
458
458
|
) AS latest_vl ON latest_vl.obs_datetime = o.obs_datetime AND latest_vl.person_id = o.person_id
|
459
|
-
INNER JOIN orders odr ON odr.order_id = o.order_id AND odr.voided = 0
|
459
|
+
INNER JOIN orders #{current_partition} odr ON odr.order_id = o.order_id AND odr.voided = 0
|
460
460
|
WHERE o.concept_id = #{::ConceptName.find_by_name('HIV viral load').concept_id}
|
461
461
|
AND o.voided = 0 AND o.obs_datetime <= '#{@end_date}'
|
462
462
|
AND (o.value_numeric IS NOT NULL || o.value_text IS NOT NULL)
|
@@ -138,17 +138,17 @@ module MalawiHivProgramReports
|
|
138
138
|
orders.order_id, orders.start_date, drug_order.quantity, drug.name,
|
139
139
|
orders.patient_id, obs.value_numeric, orders.start_date,
|
140
140
|
patient_identifier.identifier,drug.drug_id
|
141
|
-
FROM orders
|
142
|
-
INNER JOIN drug_order ON drug_order.order_id = orders.order_id AND drug_order.quantity > 0
|
143
|
-
INNER JOIN arv_drug ON arv_drug.drug_id = drug_order.drug_inventory_id
|
144
|
-
INNER JOIN drug ON drug.drug_id = arv_drug.drug_id
|
145
|
-
INNER JOIN encounter ON encounter.encounter_id = orders.encounter_id
|
141
|
+
FROM orders #{current_partition}
|
142
|
+
INNER JOIN drug_order #{current_partition} ON drug_order.order_id = orders.order_id AND drug_order.quantity > 0
|
143
|
+
INNER JOIN arv_drug #{current_partition} ON arv_drug.drug_id = drug_order.drug_inventory_id
|
144
|
+
INNER JOIN drug #{current_partition} ON drug.drug_id = arv_drug.drug_id
|
145
|
+
INNER JOIN encounter #{current_partition} ON encounter.encounter_id = orders.encounter_id
|
146
146
|
AND encounter.program_id = #{::Program.find_by(name: 'HIV PROGRAM').id}
|
147
147
|
#{site_manager(operator: 'AND', column: 'encounter.site_id', location: @location)}
|
148
|
-
INNER JOIN obs ON obs.order_id = orders.order_id AND obs.voided = 0
|
148
|
+
INNER JOIN obs #{current_partition} ON obs.order_id = orders.order_id AND obs.voided = 0
|
149
149
|
AND obs.concept_id = #{amount_dispensed} AND obs.value_numeric > 0
|
150
150
|
#{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
|
151
|
-
LEFT JOIN patient_identifier ON patient_identifier.patient_id = orders.patient_id
|
151
|
+
LEFT JOIN patient_identifier #{current_partition} ON patient_identifier.patient_id = orders.patient_id
|
152
152
|
AND patient_identifier.identifier_type = #{identifier_type}
|
153
153
|
AND patient_identifier.voided = 0
|
154
154
|
#{site_manager(operator: 'AND', column: 'patient_identifier.site_id', location: @location)}
|
@@ -85,11 +85,11 @@ module MalawiHivProgramReports
|
|
85
85
|
start_date = ActiveRecord::Base.connection.select_one <<-SQL
|
86
86
|
SELECT
|
87
87
|
DATE(MIN(o.start_date)) date
|
88
|
-
FROM person p
|
89
|
-
INNER JOIN orders o ON o.patient_id = p.person_id
|
90
|
-
INNER JOIN drug_order t ON o.order_id = t.order_id
|
91
|
-
INNER JOIN drug d ON d.drug_id = t.drug_inventory_id
|
92
|
-
INNER JOIN encounter e ON e.patient_id = o.patient_id AND e.program_id = 1
|
88
|
+
FROM person #{current_partition} p
|
89
|
+
INNER JOIN orders #{current_partition} o ON o.patient_id = p.person_id
|
90
|
+
INNER JOIN drug_order #{current_partition} t ON o.order_id = t.order_id
|
91
|
+
INNER JOIN drug #{current_partition} d ON d.drug_id = t.drug_inventory_id
|
92
|
+
INNER JOIN encounter #{current_partition} e ON e.patient_id = o.patient_id AND e.program_id = 1
|
93
93
|
WHERE o.voided = 0 AND o.patient_id = #{patient_id}
|
94
94
|
AND d.concept_id = 656 AND t.quantity > 0;
|
95
95
|
SQL
|
@@ -146,11 +146,11 @@ module MalawiHivProgramReports
|
|
146
146
|
SELECT
|
147
147
|
o.patient_id, t.drug_inventory_id, t.quantity,
|
148
148
|
o.start_date, o.auto_expire_date
|
149
|
-
FROM person p
|
150
|
-
INNER JOIN orders o ON o.patient_id = p.person_id
|
151
|
-
INNER JOIN drug_order t ON o.order_id = t.order_id
|
152
|
-
INNER JOIN drug d ON d.drug_id = t.drug_inventory_id
|
153
|
-
INNER JOIN encounter e ON e.patient_id = o.patient_id AND e.program_id = 1
|
149
|
+
FROM person #{current_partition} p
|
150
|
+
INNER JOIN orders #{current_partition} o ON o.patient_id = p.person_id
|
151
|
+
INNER JOIN drug_order #{current_partition} t ON o.order_id = t.order_id
|
152
|
+
INNER JOIN drug #{current_partition} d ON d.drug_id = t.drug_inventory_id
|
153
|
+
INNER JOIN encounter #{current_partition} e ON e.patient_id = o.patient_id AND e.program_id = 1
|
154
154
|
WHERE o.voided = 0 AND (o.start_date
|
155
155
|
BETWEEN '#{initiation_start_date}' AND '#{@completion_end_date}')
|
156
156
|
AND d.concept_id = 656 AND t.quantity > 0
|