malawi_hiv_program_reports 1.1.4 → 1.1.5
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df87fea0cc11ac0afae293f935d62c7f6c79a8e487e1ae0161d2e9e18b87e843
|
4
|
+
data.tar.gz: 9f1d344482d7f661d83f4140734f7339b81071e9984b20e25ed3af5e9c391bae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bead67daba89758fba7d271bfc729b0455e85a88edc1ae382ed17436bd2e67b6088df8b3d8ce181cbdb6457331c4c4fe3caef0b9fefd102bb66300ee9335c32d
|
7
|
+
data.tar.gz: d615b55bb62b59ed7eb3bd14d20ac8fb7ace2e04ec3dcbc8df2badcc3dce8ac370a96123471e6ac0403505810231914abb1ac3ee806183720be6e5c5fbceb29a
|
@@ -66,6 +66,7 @@ module MalawiHivProgramReports
|
|
66
66
|
# HIC SUNT DRACONIS: The order of the operations below matters,
|
67
67
|
# do not change it unless you know what you are doing!!!
|
68
68
|
load_patients_who_died(start:)
|
69
|
+
load_other_patient_who_died(start:)
|
69
70
|
load_patients_who_stopped_treatment(start:)
|
70
71
|
load_patients_without_drug_orders(start:)
|
71
72
|
load_patients_on_treatment(start:)
|
@@ -94,7 +95,7 @@ module MalawiHivProgramReports
|
|
94
95
|
AND drug_order.site_id = o.site_id AND drug_order.quantity > 0
|
95
96
|
AND drug_order.drug_inventory_id IN (#{arv_drug})
|
96
97
|
WHERE o.order_type_id = 1 -- drug order
|
97
|
-
AND o.start_date < (DATE(#{start ? start_date : end_date}) + INTERVAL 1 DAY)
|
98
|
+
AND o.start_date < (DATE(#{start ? start_date : end_date}) #{start ? '' : '+ INTERVAL 1 DAY'})
|
98
99
|
AND o.voided = 0
|
99
100
|
GROUP BY o.patient_id
|
100
101
|
ON DUPLICATE KEY UPDATE start_date = VALUES(start_date), min_order_date = VALUES(min_order_date)
|
@@ -110,8 +111,8 @@ module MalawiHivProgramReports
|
|
110
111
|
INNER JOIN drug_order PARTITION (p#{location}) ON drug_order.order_id = o.order_id AND drug_order.quantity > 0
|
111
112
|
AND drug_order.drug_inventory_id IN (#{arv_drug})
|
112
113
|
WHERE o.order_type_id = 1 -- drug order
|
113
|
-
AND o.start_date < (DATE(#{start ? start_date : end_date}) + INTERVAL 1 DAY)
|
114
|
-
AND o.start_date >= (DATE(#{start ? prev_date : start_date}) + INTERVAL 1 DAY)
|
114
|
+
AND o.start_date < (DATE(#{start ? start_date : end_date}) #{start ? '' : '+ INTERVAL 1 DAY'})
|
115
|
+
AND o.start_date >= (DATE(#{start ? prev_date : start_date}) #{start ? '' : '+ INTERVAL 1 DAY'})
|
115
116
|
AND o.voided = 0
|
116
117
|
GROUP BY o.patient_id
|
117
118
|
ON DUPLICATE KEY UPDATE start_date = VALUES(start_date), min_order_date = VALUES(min_order_date)
|
@@ -185,7 +186,7 @@ module MalawiHivProgramReports
|
|
185
186
|
SELECT pp.patient_id, #{location}, MAX(ps.start_date) start_date
|
186
187
|
FROM patient_state PARTITION (p#{location}) AS ps
|
187
188
|
INNER JOIN patient_program PARTITION (p#{location}) AS pp ON pp.patient_program_id = ps.patient_program_id AND pp.program_id = 1 AND pp.voided = 0
|
188
|
-
WHERE ps.start_date < DATE(#{end_date}) + INTERVAL 1 DAY
|
189
|
+
WHERE ps.start_date < DATE(#{start ? start_date : end_date}) #{start ? '' : '+ INTERVAL 1 DAY'}
|
189
190
|
AND ps.voided = 0 AND pp.patient_id IN (SELECT patient_id FROM cdr_temp_cohort_members PARTITION (p#{location}))
|
190
191
|
GROUP BY pp.patient_id
|
191
192
|
HAVING start_date IS NOT NULL
|
@@ -228,28 +229,28 @@ module MalawiHivProgramReports
|
|
228
229
|
def load_patients_who_died(start: false)
|
229
230
|
ActiveRecord::Base.connection.execute <<~SQL
|
230
231
|
INSERT INTO cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location})
|
231
|
-
SELECT patients.patient_id, 'Patient died',
|
232
|
-
FROM
|
233
|
-
|
234
|
-
ON patient_program.patient_id = patients.patient_id
|
235
|
-
AND patient_program.program_id = 1
|
236
|
-
AND patient_program.voided = 0
|
237
|
-
INNER JOIN patient_state PARTITION (p#{location})
|
238
|
-
ON patient_state.patient_program_id = patient_program.patient_program_id
|
239
|
-
AND patient_state.state = (#{program_states('Patient died').limit(1).to_sql})
|
240
|
-
AND patient_state.start_date < DATE(#{end_date}) + INTERVAL 1 DAY
|
241
|
-
AND patient_state.voided = 0
|
242
|
-
WHERE patients.date_enrolled <= DATE(#{end_date})
|
243
|
-
AND patient_state.date_created = (
|
244
|
-
SELECT MAX(date_created)
|
245
|
-
FROM patient_state PARTITION (p#{location}) ps
|
246
|
-
WHERE ps.patient_program_id = patient_state.patient_program_id
|
247
|
-
AND ps.state = patient_state.state AND ps.voided = 0 AND ps.start_date <= #{end_date})
|
232
|
+
SELECT patients.patient_id, 'Patient died', patients.outcome_date, #{location}, 1
|
233
|
+
FROM cdr_temp_current_state#{start ? '_start' : ''} PARTITION (p#{location}) AS patients
|
234
|
+
WHERE patients.outcomes = 1 AND patients.cum_outcome = 'Patient died'
|
248
235
|
GROUP BY patients.patient_id
|
249
236
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
250
237
|
SQL
|
251
238
|
end
|
252
239
|
|
240
|
+
def load_other_patient_who_died(start: false)
|
241
|
+
ActiveRecord::Base.connection.execute <<~SQL
|
242
|
+
INSERT INTO cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location})
|
243
|
+
SELECT tesd.patient_id, 'Patient died', MAX(ps.start_date), #{location}, 1
|
244
|
+
FROM cdr_temp_cohort_members PARTITION (p#{location}) tesd
|
245
|
+
INNER JOIN patient_program PARTITION (p#{location}) pp ON pp.patient_id = tesd.patient_id AND pp.program_id = 1 AND pp.voided = 0
|
246
|
+
INNER JOIN patient_state PARTITION (p#{location}) ps ON ps.patient_program_id = pp.patient_program_id AND ps.state = 3 AND ps.voided = 0 AND ps.start_date <= #{end_date}
|
247
|
+
WHERE tesd.patient_id NOT IN (SELECT patient_id FROM cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location}) WHERE step = 1)
|
248
|
+
AND tesd.date_enrolled < DATE(#{start ? start_date : end_date}) #{start ? '' : '+ INTERVAL 1 DAY'}
|
249
|
+
GROUP BY tesd.patient_id
|
250
|
+
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
251
|
+
SQL
|
252
|
+
end
|
253
|
+
|
253
254
|
# Loads all patients with an outcome of transferred out or
|
254
255
|
# treatment stopped into temp_patient_outcomes table.
|
255
256
|
def load_patients_who_stopped_treatment(start: false)
|
@@ -278,7 +279,7 @@ module MalawiHivProgramReports
|
|
278
279
|
INSERT INTO cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location})
|
279
280
|
SELECT patients.patient_id, 'Unknown', NULL, #{location}, 3
|
280
281
|
FROM cdr_temp_cohort_members PARTITION (p#{location}) AS patients
|
281
|
-
WHERE date_enrolled
|
282
|
+
WHERE date_enrolled < DATE(#{start ? start_date : end_date}) #{start ? '' : '+ INTERVAL 1 DAY'}
|
282
283
|
AND (patient_id) NOT IN (SELECT patient_id FROM cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location}) WHERE step IN (1, 2, 3, 4))
|
283
284
|
AND (patient_id) NOT IN (SELECT patient_id FROM cdr_temp_max_drug_orders#{start ? '_start' : ''} PARTITION (p#{location}))
|
284
285
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
@@ -292,7 +293,7 @@ module MalawiHivProgramReports
|
|
292
293
|
SELECT patients.patient_id, 'On antiretrovirals', COALESCE(cs.outcome_date, patients.start_date), #{location}, 4
|
293
294
|
FROM cdr_temp_min_auto_expire_date#{start ? '_start' : ''} PARTITION (p#{location}) AS patients
|
294
295
|
LEFT JOIN cdr_temp_current_state#{start ? '_start' : ''} PARTITION (p#{location}) AS cs ON cs.patient_id = patients.patient_id AND cs.site_id = patients.site_id
|
295
|
-
WHERE patients.#{definition == 'pepfar' ? 'pepfar_defaulter_date' : 'moh_defaulter_date'} > #{end_date}
|
296
|
+
WHERE patients.#{definition == 'pepfar' ? 'pepfar_defaulter_date' : 'moh_defaulter_date'} > DATE(#{start ? start_date : end_date}) #{start ? '- INTERVAL 1 DAY' : ''}
|
296
297
|
AND (patients.patient_id) NOT IN (SELECT patient_id FROM cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location}) WHERE step IN (1, 2, 3))
|
297
298
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
298
299
|
SQL
|
@@ -304,7 +305,7 @@ module MalawiHivProgramReports
|
|
304
305
|
SELECT patients.patient_id, 'Defaulted', patients.#{definition == 'pepfar' ? 'pepfar_defaulter_date' : 'moh_defaulter_date'},#{location}, 5
|
305
306
|
FROM cdr_temp_current_medication#{start ? '_start' : ''} PARTITION (p#{location}) AS patients
|
306
307
|
LEFT JOIN cdr_temp_current_state#{start ? '_start' : ''} PARTITION (p#{location}) AS cs ON cs.patient_id = patients.patient_id
|
307
|
-
WHERE patients.#{definition == 'pepfar' ? 'pepfar_defaulter_date' : 'moh_defaulter_date'} <= #{end_date}
|
308
|
+
WHERE patients.#{definition == 'pepfar' ? 'pepfar_defaulter_date' : 'moh_defaulter_date'} <= DATE(#{start ? start_date : end_date}) #{start ? '- INTERVAL 1 DAY' : ''}
|
308
309
|
AND (patients.patient_id) NOT IN (SELECT patient_id FROM cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location}) WHERE step IN (1, 2, 3, 4))
|
309
310
|
ON DUPLICATE KEY UPDATE cum_outcome = VALUES(cum_outcome), outcome_date = VALUES(outcome_date), step = VALUES(step)
|
310
311
|
SQL
|
@@ -314,7 +315,7 @@ module MalawiHivProgramReports
|
|
314
315
|
def load_defaulters(start: false)
|
315
316
|
ActiveRecord::Base.connection.execute <<~SQL
|
316
317
|
INSERT INTO cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location})
|
317
|
-
SELECT patient_id, #{patient_outcome_function('patient_id', 'site_id')}, NULL, #{location}, 6
|
318
|
+
SELECT patient_id, #{patient_outcome_function('patient_id', 'site_id', start)}, NULL, #{location}, 6
|
318
319
|
FROM cdr_temp_cohort_members PARTITION (p#{location})
|
319
320
|
WHERE date_enrolled <= #{end_date}
|
320
321
|
AND (patient_id, site_id) NOT IN (SELECT patient_id, site_id FROM cdr_temp_patient_outcomes#{start ? '_start' : ''} PARTITION (p#{location}) WHERE step IN (1, 2, 3, 4, 5))
|
@@ -325,10 +326,10 @@ module MalawiHivProgramReports
|
|
325
326
|
# ===================================
|
326
327
|
# Function Management Region
|
327
328
|
# ===================================
|
328
|
-
def patient_outcome_function(sql_column, site_id)
|
329
|
+
def patient_outcome_function(sql_column, site_id, start)
|
329
330
|
case definition
|
330
|
-
when 'moh' then "patient_outcome(#{sql_column}, #{end_date}, #{site_id})"
|
331
|
-
when 'pepfar' then "pepfar_patient_outcome(#{sql_column}, #{end_date}, #{site_id})"
|
331
|
+
when 'moh' then "patient_outcome(#{sql_column}, #{start ? "'#{start_date.to_date - 1.day}'" : end_date}, #{site_id})"
|
332
|
+
when 'pepfar' then "pepfar_patient_outcome(#{sql_column}, #{start ? "'#{start_date.to_date - 1.day}'" : end_date}, #{site_id})"
|
332
333
|
else raise "Invalid outcomes definition: #{definition}"
|
333
334
|
end
|
334
335
|
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.1.
|
4
|
+
version: 1.1.5
|
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-06-
|
11
|
+
date: 2024-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|