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