malawi_hiv_program_reports 1.0.23 → 1.0.24
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.
- 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
|
|