malawi_hiv_program_reports 1.0.23 → 1.0.24
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/arv_refill_periods.rb +2 -3
- data/app/services/malawi_hiv_program_reports/pepfar/tx_ml.rb +0 -9
- data/app/services/malawi_hiv_program_reports/pepfar/tx_new.rb +1 -5
- data/app/services/malawi_hiv_program_reports/pepfar/tx_rtt.rb +11 -18
- data/app/services/malawi_hiv_program_reports/pepfar/tx_tb.rb +17 -13
- data/app/services/malawi_hiv_program_reports/pepfar/utils.rb +6 -9
- data/app/services/malawi_hiv_program_reports/utils/common_sql_query_utils.rb +4 -5
- data/lib/malawi_hiv_program_reports/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a9d1e889940aaf8994a6ec4460478b967f0271d4f02319f6fa5de3979ba1dee
|
4
|
+
data.tar.gz: 9429bd54ed65107f2cb2834723b368ddb6685eee25aac8d937b203532e264290
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39e251a0d4e9cfa9d9cff5b7b8c86698c54127a06e4cccbd6fc737ae011f93707276a2da6d7f5c93656573b5a0564f8a93847b294cc21e2aff7b02c7a0064ade
|
7
|
+
data.tar.gz: dfe33da4f7a2dff0ef62eb6c9eba6e60ffed4eaa977a3344b142b9fe329e14de1aaf76501ad2816f415b127dce72c0e4144d1f7b7c9273d736ce3c6fabdfbea0
|
@@ -15,7 +15,7 @@ module MalawiHivProgramReports
|
|
15
15
|
@min_age = min_age
|
16
16
|
@max_age = max_age
|
17
17
|
@org = org
|
18
|
-
@initialize_tables = (initialize_tables ==
|
18
|
+
@initialize_tables = (initialize_tables.to_s == "true")
|
19
19
|
@occupation = kwargs[:occupation]
|
20
20
|
@location = kwargs[:location]
|
21
21
|
@format = kwargs[:format] || 'poc'
|
@@ -260,7 +260,7 @@ module MalawiHivProgramReports
|
|
260
260
|
AND LENGTH(identifier) > 0 AND i.voided = 0
|
261
261
|
WHERE s.concept_set = #{arv_concept_set} AND o.voided = 0
|
262
262
|
AND DATE(o.start_date) = (
|
263
|
-
SELECT DATE(MAX(t.start_date)) FROM orders t
|
263
|
+
SELECT DATE(MAX(t.start_date)) FROM orders #{current_partition} t
|
264
264
|
INNER JOIN drug_order #{current_partition} t2 ON t2.order_id = t.order_id
|
265
265
|
INNER JOIN drug t3 ON t3.drug_id = t2.drug_inventory_id
|
266
266
|
INNER JOIN concept_set t4 ON t4.concept_id = t3.concept_id
|
@@ -289,7 +289,6 @@ module MalawiHivProgramReports
|
|
289
289
|
INNER JOIN moh_regimen_ingredient i ON r.regimen_id = i.regimen_id
|
290
290
|
AND r.regimen_index = #{regimen_index}
|
291
291
|
INNER JOIN moh_regimen_doses d ON i.dose_id = d.dose_id #{weight_sql}
|
292
|
-
#{site_manager(operator: 'AND', column: 'r.site_id', location: @location)}
|
293
292
|
GROUP BY min_weight, max_weight, drug_inventory_id;
|
294
293
|
SQL
|
295
294
|
|
@@ -62,7 +62,6 @@ module MalawiHivProgramReports
|
|
62
62
|
#{function_manager(function: 'disaggregated_age_group', location: @location, args: "p.birthdate::date, '#{end_date.to_date}::date'")} age_group
|
63
63
|
FROM person #{current_partition} p
|
64
64
|
WHERE #{in_manager(column: 'p.person_id', values: patient_ids)}
|
65
|
-
#{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
|
66
65
|
GROUP BY p.person_id #{group_by_columns('p.birthdate, p.gender')}
|
67
66
|
SQL
|
68
67
|
|
@@ -119,14 +118,10 @@ module MalawiHivProgramReports
|
|
119
118
|
#{function_manager(function: 'date_antiretrovirals_started', location: @location, args: "p.patient_id::int, MIN(s.start_date)::date, #{@location}::int")} AS earliest_start_date
|
120
119
|
FROM patient_program #{current_partition} p
|
121
120
|
INNER JOIN person #{current_partition} pe ON pe.person_id = p.patient_id AND pe.voided = 0
|
122
|
-
#{site_manager(operator: 'AND', column: 'pe.site_id', location: @location)}
|
123
121
|
INNER JOIN patient_state #{current_partition} s ON p.patient_program_id = s.patient_program_id AND s.voided = 0 AND s.state = 7
|
124
|
-
#{site_manager(operator: 'AND', column: 's.site_id', location: @location)}
|
125
122
|
LEFT JOIN (#{current_occupation_query}) a ON a.person_id = p.patient_id
|
126
|
-
#{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
|
127
123
|
WHERE p.program_id = 1 #{%w[Military Civilian].include?(@occupation) ? 'AND' : ''} #{occupation_filter(occupation: @occupation, field_name: 'value', table_name: 'a', include_clause: false)}
|
128
124
|
AND DATE(s.start_date) < '#{start_date.to_date}'
|
129
|
-
#{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
|
130
125
|
AND #{function_manager(function: 'pepfar_patient_outcome', location: @location, args: "p.patient_id::int, '#{start_date.to_date}'::date, #{@location}::int")} = 'On antiretrovirals'
|
131
126
|
AND pe.person_id NOT IN (#{drug_refills_and_external_consultation_list})
|
132
127
|
GROUP BY p.patient_id
|
@@ -144,15 +139,11 @@ module MalawiHivProgramReports
|
|
144
139
|
#{function_manager(function: 'date_antiretrovirals_started', location: @location, args: "p.patient_id::int, MIN(s.start_date)::date, #{@location}::int")} AS earliest_start_date
|
145
140
|
FROM patient_program #{current_partition} p
|
146
141
|
INNER JOIN person #{current_partition} pe ON pe.person_id = p.patient_id AND pe.voided = 0
|
147
|
-
#{site_manager(operator: 'AND', column: 'pe.site_id', location: @location)}
|
148
142
|
INNER JOIN patient_state #{current_partition} s ON p.patient_program_id = s.patient_program_id AND s.voided = 0 AND s.state = 7
|
149
|
-
#{site_manager(operator: 'AND', column: 's.site_id', location: @location)}
|
150
143
|
LEFT JOIN (#{current_occupation_query}) a ON a.person_id = p.patient_id
|
151
|
-
#{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
|
152
144
|
WHERE p.program_id = 1 #{%w[Military Civilian].include?(@occupation) ? 'AND' : ''} #{occupation_filter(occupation: @occupation, field_name: 'value', table_name: 'a', include_clause: false)}
|
153
145
|
AND DATE(s.start_date) BETWEEN DATE('#{start_date}') AND DATE('#{end_date}')
|
154
146
|
AND pe.person_id NOT IN (#{drug_refills_and_external_consultation_list})
|
155
|
-
#{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
|
156
147
|
GROUP BY p.patient_id
|
157
148
|
HAVING date_enrolled IS NOT NULL AND date_enrolled BETWEEN DATE('#{start_date}') AND DATE('#{end_date}');
|
158
149
|
SQL
|
@@ -166,7 +166,7 @@ module MalawiHivProgramReports
|
|
166
166
|
DATE(MIN(pregnant_or_breastfeeding.obs_datetime)) AS maternal_status_date
|
167
167
|
FROM cdr_temp_cohort_members pp
|
168
168
|
INNER JOIN person #{current_partition} pe ON pe.person_id = pp.patient_id AND pe.voided = 0
|
169
|
-
#{site_manager(operator: 'AND', column: '
|
169
|
+
#{site_manager(operator: 'AND', column: 'pp.site_id', location: @location)}
|
170
170
|
LEFT JOIN (
|
171
171
|
SELECT max(o.obs_datetime) AS obs_datetime, o.person_id
|
172
172
|
FROM obs #{current_partition} o
|
@@ -176,24 +176,20 @@ module MalawiHivProgramReports
|
|
176
176
|
AND pp.voided = 0
|
177
177
|
INNER JOIN patient_state #{current_partition} ps ON ps.patient_program_id = pp.patient_program_id AND ps.voided = 0 AND ps.state = 7 AND ps.start_date <= DATE('#{end_date}')
|
178
178
|
WHERE o.concept_id = #{concept_name('CD4 count').concept_id} AND o.voided = 0
|
179
|
-
#{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}#{' '}
|
180
179
|
AND o.obs_datetime <= '#{end_date}' AND o.obs_datetime >= '#{start_date}'
|
181
180
|
GROUP BY o.person_id
|
182
181
|
) current_cd4 ON current_cd4.person_id = pp.patient_id
|
183
182
|
LEFT JOIN obs #{current_partition} o ON o.person_id = pp.patient_id AND o.concept_id = #{concept_name('CD4 count').concept_id} AND o.voided = 0 AND o.obs_datetime = current_cd4.obs_datetime
|
184
|
-
#{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
|
185
183
|
LEFT JOIN obs #{current_partition} transfer_in ON transfer_in.person_id = pp.patient_id
|
186
184
|
AND transfer_in.concept_id = #{concept_name('Ever registered at ART clinic').concept_id}
|
187
185
|
AND transfer_in.voided = 0
|
188
186
|
AND transfer_in.value_coded = #{concept_name('Yes').concept_id}
|
189
187
|
AND transfer_in.obs_datetime <= '#{end_date}'
|
190
188
|
AND transfer_in.obs_datetime >= '#{start_date}'
|
191
|
-
#{site_manager(operator: 'AND', column: 'transfer_in.site_id', location: @location)}
|
192
189
|
LEFT JOIN obs #{current_partition} pregnant_or_breastfeeding ON pregnant_or_breastfeeding.person_id = pp.patient_id
|
193
190
|
AND pregnant_or_breastfeeding.concept_id IN (SELECT concept_id FROM concept_name WHERE name IN ('Breast feeding?', 'Breast feeding', 'Breastfeeding', 'Is patient pregnant?', 'patient pregnant') AND voided = 0)
|
194
191
|
AND pregnant_or_breastfeeding.voided = 0
|
195
192
|
AND pregnant_or_breastfeeding.value_coded = #{concept_name('Yes').concept_id}
|
196
|
-
#{site_manager(operator: 'AND', column: 'pregnant_or_breastfeeding.site_id', location: @location)}
|
197
193
|
LEFT JOIN concept_name preg_or_breast ON preg_or_breast.concept_id = pregnant_or_breastfeeding.concept_id AND preg_or_breast.voided = 0
|
198
194
|
WHERE pp.date_enrolled <= '#{end_date}' AND pp.date_enrolled >= '#{start_date}'
|
199
195
|
GROUP BY pp.patient_id
|
@@ -93,8 +93,8 @@ module MalawiHivProgramReports
|
|
93
93
|
|
94
94
|
def process_age_group_report(age_group, gender, age_group_report)
|
95
95
|
{
|
96
|
-
age_group
|
97
|
-
gender
|
96
|
+
age_group:,
|
97
|
+
gender:,
|
98
98
|
cd4_less_than_200: age_group_report[:cd4_less_than_200],
|
99
99
|
cd4_greater_than_or_equal_to_200: age_group_report[:cd4_greater_than_or_equal_to_200],
|
100
100
|
unknown_cd4_count: age_group_report[:unknown_cd4_count],
|
@@ -122,7 +122,7 @@ module MalawiHivProgramReports
|
|
122
122
|
|
123
123
|
def tx_rtt
|
124
124
|
ActiveRecord::Base.connection.select_all <<~SQL
|
125
|
-
|
125
|
+
SELECT patient_program.patient_id,
|
126
126
|
#{function_manager(function: 'disaggregated_age_group', location: @location, args: "person.birthdate::date, #{@end_date}::date")} AS age_group,
|
127
127
|
person.gender,
|
128
128
|
IF(
|
@@ -165,7 +165,6 @@ module MalawiHivProgramReports
|
|
165
165
|
END cd4_count_group
|
166
166
|
FROM patient_program #{current_partition}
|
167
167
|
INNER JOIN person #{current_partition} ON person.person_id = patient_program.patient_id
|
168
|
-
#{site_manager(operator: 'AND', column: 'person.site_id', location: @location)}
|
169
168
|
/* Select patients that were on treatment before start of reporting period */
|
170
169
|
INNER JOIN patient_state #{current_partition} AS patient_ever_on_treatment
|
171
170
|
ON patient_ever_on_treatment.patient_program_id = patient_program.patient_program_id
|
@@ -186,7 +185,6 @@ module MalawiHivProgramReports
|
|
186
185
|
ON date_of_last_patient_state_before_quarter.patient_program_id = patient_program.patient_program_id
|
187
186
|
LEFT JOIN patient_state #{current_partition} AS patient_state_at_start_of_quarter
|
188
187
|
ON patient_state_at_start_of_quarter.patient_program_id = date_of_last_patient_state_before_quarter.patient_program_id
|
189
|
-
#{site_manager(operator: 'AND', column: 'patient_state_at_start_of_quarter.site_id', location: @location)}
|
190
188
|
AND patient_state_at_start_of_quarter.date_created = date_of_last_patient_state_before_quarter.date_created
|
191
189
|
AND patient_state_at_start_of_quarter.state IN (6, 12) /* 2: TO, 6: Tx Stopped, 12: Defaulted */
|
192
190
|
/* Select patients who received ART within the reporting period. */
|
@@ -200,7 +198,7 @@ module MalawiHivProgramReports
|
|
200
198
|
INNER JOIN drug_order #{current_partition}
|
201
199
|
ON drug_order.order_id = orders.order_id
|
202
200
|
AND drug_order.quantity > 0
|
203
|
-
AND drug_order.drug_inventory_id IN (SELECT DISTINCT drug_id FROM arv_drug
|
201
|
+
AND drug_order.drug_inventory_id IN (SELECT DISTINCT drug_id FROM arv_drug)
|
204
202
|
WHERE encounter.voided = 0
|
205
203
|
AND encounter.program_id = 1
|
206
204
|
AND DATE(encounter.encounter_datetime) BETWEEN DATE(#{start_date}) AND DATE(#{end_date})
|
@@ -220,7 +218,7 @@ module MalawiHivProgramReports
|
|
220
218
|
ON date_of_last_patient_state_in_quarter.patient_program_id = patient_program.patient_program_id
|
221
219
|
|
222
220
|
/*Not sure why Walter had this section in but I believe its not neccessary*/
|
223
|
-
/*INNER JOIN patient_state
|
221
|
+
/*INNER JOIN patient_state AS patient_state_at_end_of_quarter
|
224
222
|
ON patient_state_at_end_of_quarter.patient_program_id = patient_program.patient_program_id
|
225
223
|
AND patient_state_at_end_of_quarter.date_created = date_of_last_patient_state_before_quarter.date_created
|
226
224
|
AND patient_state_at_end_of_quarter.state = 7*/
|
@@ -235,13 +233,12 @@ module MalawiHivProgramReports
|
|
235
233
|
INNER JOIN orders #{current_partition}
|
236
234
|
ON orders.encounter_id = encounter.encounter_id
|
237
235
|
AND orders.voided = 0
|
238
|
-
#{site_manager(operator: 'AND', column: 'orders.site_id', location: @location)}
|
239
236
|
AND DATE(orders.start_date) BETWEEN DATE(#{start_date}) AND DATE(#{end_date})
|
240
237
|
AND DATE(orders.auto_expire_date) >= (DATE(#{end_date}) - INTERVAL 30 DAY)
|
241
238
|
INNER JOIN drug_order #{current_partition}
|
242
239
|
ON drug_order.order_id = orders.order_id
|
243
240
|
AND drug_order.quantity > 0
|
244
|
-
AND drug_order.drug_inventory_id IN (SELECT DISTINCT drug_id FROM arv_drug
|
241
|
+
AND drug_order.drug_inventory_id IN (SELECT DISTINCT drug_id FROM arv_drug)
|
245
242
|
WHERE encounter.program_id = 1
|
246
243
|
AND DATE(encounter.encounter_datetime) BETWEEN DATE(#{start_date}) AND DATE(#{end_date})
|
247
244
|
AND encounter.voided = 0
|
@@ -251,19 +248,17 @@ module MalawiHivProgramReports
|
|
251
248
|
SELECT max(o.obs_datetime) AS obs_datetime, o.person_id
|
252
249
|
FROM obs #{current_partition} o
|
253
250
|
INNER JOIN concept_name cn ON cn.concept_id = o.concept_id AND cn.name = 'CD4 count'
|
254
|
-
#{
|
255
|
-
WHERE o.concept_id = #{concept('CD4 count').concept_id} AND o.voided = 0
|
251
|
+
WHERE o.concept_id = #{concept_name('CD4 count').concept_id} AND o.voided = 0
|
256
252
|
AND o.obs_datetime <= #{end_date} AND o.obs_datetime >= #{start_date}
|
257
253
|
GROUP BY o.person_id
|
258
254
|
) current_cd4 ON current_cd4.person_id = patient_program.patient_id
|
259
|
-
LEFT JOIN obs #{current_partition} cd4_result ON cd4_result.person_id = patient_program.patient_id AND cd4_result.concept_id = #{
|
260
|
-
#{site_manager(operator: 'AND', column: 'cd4_result.site_id', location: @location)}
|
255
|
+
LEFT JOIN obs #{current_partition} cd4_result ON cd4_result.person_id = patient_program.patient_id AND cd4_result.concept_id = #{concept_name('CD4 count').concept_id} AND cd4_result.voided = 0
|
261
256
|
# Not sure why we are matching the two dates but the result was excluding cd4 results for patients.
|
262
257
|
# AND cd4_result.obs_datetime = current_cd4.obs_datetime
|
263
258
|
LEFT JOIN (#{current_occupation_query}) a ON a.person_id = patient_program.patient_id
|
264
259
|
WHERE patient_program.program_id = 1 #{%w[Military Civilian].include?(@occupation) ? 'AND' : ''} #{occupation_filter(occupation: @occupation, field_name: 'value', table_name: 'a', include_clause: false)}
|
265
|
-
|
266
|
-
|
260
|
+
/* Ensure that the patients retrieved, did not receive ART within 28 days
|
261
|
+
before the start of the reporting period */
|
267
262
|
AND patient_program.patient_id NOT IN (
|
268
263
|
SELECT DISTINCT orders.patient_id
|
269
264
|
FROM orders #{current_partition}
|
@@ -272,15 +267,13 @@ module MalawiHivProgramReports
|
|
272
267
|
INNER JOIN patient_program #{current_partition}
|
273
268
|
ON patient_program.patient_id = orders.patient_id
|
274
269
|
AND patient_program.program_id = 1
|
275
|
-
#{site_manager(operator: 'AND', column: 'orders.site_id', location: @location)}
|
276
270
|
WHERE ((DATE(orders.start_date )BETWEEN (DATE(#{start_date}) - INTERVAL 30 DAY) AND DATE(#{start_date}))
|
277
271
|
OR (DATE(orders.auto_expire_date) BETWEEN (DATE(#{start_date}) - INTERVAL 30 DAY) AND DATE(#{start_date})))
|
278
272
|
AND orders.voided = 0
|
279
273
|
)
|
280
274
|
GROUP BY patient_program.patient_id
|
281
275
|
HAVING initial_outcome IN ('Defaulted', 'Treatment stopped')
|
282
|
-
AND final_outcome = 'On antiretrovirals'
|
283
|
-
AND initial_outcome_date IS NOT NULL;
|
276
|
+
AND final_outcome = 'On antiretrovirals';
|
284
277
|
SQL
|
285
278
|
end
|
286
279
|
end
|
@@ -81,7 +81,7 @@ module MalawiHivProgramReports
|
|
81
81
|
def build_cohort_tables
|
82
82
|
return unless rebuild_outcome || @occupation.present?
|
83
83
|
|
84
|
-
|
84
|
+
MalawiHivProgramReports::Moh::CumulativeCohort.new(
|
85
85
|
start_date: start_date,
|
86
86
|
end_date: end_date,
|
87
87
|
locations: [@location.to_s],
|
@@ -126,19 +126,20 @@ module MalawiHivProgramReports
|
|
126
126
|
SELECT o.person_id, MAX(o.obs_datetime) AS obs_datetime, tesd.earliest_start_date, tesd.gender, tesd.birthdate
|
127
127
|
FROM obs #{current_partition} o
|
128
128
|
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = o.person_id
|
129
|
+
#{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
|
129
130
|
WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
|
130
131
|
AND o.value_coded IN (SELECT concept_id FROM concept_name WHERE name IN ('TB Suspected', 'TB NOT suspected') AND voided = 0)
|
131
|
-
AND o.voided = 0 AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
132
|
+
AND o.voided = 0 AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
132
133
|
GROUP BY o.person_id
|
133
134
|
) current_obs ON current_obs.person_id = o.person_id AND current_obs.obs_datetime = o.obs_datetime
|
134
135
|
INNER JOIN concept_name cn ON cn.concept_id = o.value_coded AND cn.voided = 0
|
135
136
|
LEFT JOIN obs #{current_partition} screen_method ON screen_method.concept_id = #{::ConceptName.find_by_name('TB screening method used').concept_id}
|
136
|
-
AND screen_method.voided = 0
|
137
|
-
AND screen_method.person_id = o.person_id
|
137
|
+
AND screen_method.voided = 0
|
138
|
+
AND screen_method.person_id = o.person_id
|
138
139
|
AND DATE(screen_method.obs_datetime) = DATE(current_obs.obs_datetime)
|
139
140
|
LEFT JOIN concept_name vcn ON vcn.concept_id = screen_method.value_coded AND vcn.voided = 0 AND vcn.name IN ('CXR', 'MWRD')
|
140
141
|
WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
|
141
|
-
AND o.voided = 0
|
142
|
+
AND o.voided = 0
|
142
143
|
AND o.value_coded IN (SELECT concept_id FROM concept_name WHERE name IN ('TB Suspected', 'TB NOT suspected') AND voided = 0)
|
143
144
|
AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
144
145
|
GROUP BY o.person_id
|
@@ -195,26 +196,27 @@ module MalawiHivProgramReports
|
|
195
196
|
prev.tb_confirmed_date prev_reading
|
196
197
|
#{@location ? ", #{@location}" : ''} AS site_id
|
197
198
|
FROM obs #{current_partition} o
|
198
|
-
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = o.person_id
|
199
|
-
|
199
|
+
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = o.person_id
|
200
|
+
#{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
|
201
|
+
INNER JOIN person #{current_partition} p ON p.person_id = o.person_id AND p.voided = 0
|
200
202
|
LEFT JOIN obs #{current_partition} tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
|
201
|
-
AND tcd.voided = 0 AND tcd.person_id = o.person_id
|
203
|
+
AND tcd.voided = 0 AND tcd.person_id = o.person_id
|
202
204
|
LEFT JOIN (
|
203
205
|
SELECT
|
204
206
|
o.person_id,
|
205
207
|
COALESCE(MAX(tcd.value_datetime),MAX(o.obs_datetime)) AS tb_confirmed_date
|
206
208
|
FROM obs #{current_partition} o
|
207
209
|
LEFT JOIN obs #{current_partition} tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
|
208
|
-
AND tcd.voided = 0 AND tcd.person_id = o.person_id
|
210
|
+
AND tcd.voided = 0 AND tcd.person_id = o.person_id
|
209
211
|
WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
|
210
212
|
AND o.value_coded = #{::ConceptName.find_by_name('Confirmed TB on treatment').concept_id}
|
211
|
-
AND o.voided = 0
|
213
|
+
AND o.voided = 0
|
212
214
|
AND o.obs_datetime <= '#{start_date}'
|
213
215
|
GROUP BY o.person_id
|
214
216
|
) prev ON prev.person_id = o.person_id
|
215
217
|
WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
|
216
218
|
AND o.value_coded = #{::ConceptName.find_by_name('Confirmed TB on treatment').concept_id}
|
217
|
-
AND o.voided = 0
|
219
|
+
AND o.voided = 0
|
218
220
|
AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
219
221
|
GROUP BY o.person_id
|
220
222
|
SQL
|
@@ -236,8 +238,10 @@ module MalawiHivProgramReports
|
|
236
238
|
<<~SQL
|
237
239
|
SELECT tpo.patient_id, LEFT(tesd.gender, 1) AS gender, disaggregated_age_group(tesd.birthdate, DATE('#{end_date.to_date}')) age_group
|
238
240
|
FROM cdr_temp_patient_outcomes #{current_partition} tpo
|
239
|
-
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = tpo.patient_id
|
240
|
-
|
241
|
+
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = tpo.patient_id
|
242
|
+
#{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
|
243
|
+
#{site_manager(operator: 'AND', column: 'tpo.site_id', location: @location)}
|
244
|
+
WHERE tpo.cum_outcome = 'On antiretrovirals'
|
241
245
|
SQL
|
242
246
|
end
|
243
247
|
|
@@ -94,30 +94,27 @@ module MalawiHivProgramReports
|
|
94
94
|
external_concept = ::ConceptName.find_by_name('External consultation').concept_id
|
95
95
|
hiv_clinic_registration_id = ::EncounterType.find_by_name('HIV CLINIC REGISTRATION').encounter_type_id
|
96
96
|
|
97
|
-
ActiveRecord::Base.connection.select_all
|
97
|
+
res = ActiveRecord::Base.connection.select_all <<~SQL
|
98
98
|
SELECT p.person_id patient_id
|
99
99
|
FROM person #{current_partition} p
|
100
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
|
-
#{site_manager(operator: 'AND', column: 'pp.site_id', location: @location)}
|
102
101
|
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
|
-
#{site_manager(operator: 'AND', column: 'ps.site_id', location: @location)}
|
104
102
|
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
|
-
#{site_manager(operator: 'AND', column: 'hiv_registration.site_id', location: @location)}
|
106
103
|
LEFT JOIN (
|
107
104
|
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
|
-
#{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
|
109
105
|
) AS new_patient ON p.person_id = new_patient.person_id
|
110
106
|
LEFT JOIN (
|
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: '+')}
|
107
|
+
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: '+')}
|
112
108
|
) AS refill ON p.person_id = refill.person_id
|
113
109
|
LEFT JOIN (
|
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: '+')}
|
110
|
+
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: '+')}
|
115
111
|
) AS external ON p.person_id = external.person_id
|
116
112
|
WHERE (refill.value_coded IS NOT NULL OR external.value_coded IS NOT NULL)
|
117
113
|
AND NOT (hiv_registration.encounter_id IS NOT NULL OR new_patient.value_coded IS NOT NULL)
|
118
|
-
#{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
|
119
114
|
GROUP BY p.person_id
|
120
|
-
ORDER BY hiv_registration.encounter_datetime DESC, refill.obs_datetime DESC, external.obs_datetime DESC
|
115
|
+
ORDER BY hiv_registration.encounter_datetime DESC, refill.obs_datetime DESC, external.obs_datetime DESC
|
116
|
+
SQL
|
117
|
+
res.each do |record|
|
121
118
|
to_remove << record['patient_id'].to_i
|
122
119
|
end
|
123
120
|
to_remove.join(',')
|
@@ -46,13 +46,12 @@ module MalawiHivProgramReports
|
|
46
46
|
ActiveRecord::Base.connection.adapter_name.downcase
|
47
47
|
<<~SQL
|
48
48
|
SELECT a.person_id, a.value, a.site_id
|
49
|
-
FROM person_attribute a
|
50
|
-
LEFT OUTER JOIN person_attribute b
|
51
|
-
ON a.person_attribute_id = b.person_attribute_id
|
49
|
+
FROM person_attribute #{current_partition} a
|
50
|
+
LEFT OUTER JOIN person_attribute #{current_partition} b
|
51
|
+
ON a.person_attribute_id = b.person_attribute_id
|
52
52
|
AND a.date_created < b.date_created
|
53
|
-
AND b.voided = 0
|
53
|
+
AND b.voided = 0
|
54
54
|
WHERE b.person_attribute_id IS NULL AND a.person_attribute_type_id = 13 AND a.voided = 0
|
55
|
-
#{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
|
56
55
|
SQL
|
57
56
|
end
|
58
57
|
|