malawi_hiv_program_reports 1.1.16 → 1.1.18
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/cohort/disaggregated.rb +57 -47
- data/app/services/malawi_hiv_program_reports/moh/cumulative_cohort.rb +79 -5
- data/app/services/malawi_hiv_program_reports/pepfar/maternal_status.rb +103 -1
- data/app/services/malawi_hiv_program_reports/pepfar/tb_prev3.rb +214 -172
- data/app/services/malawi_hiv_program_reports/pepfar/tx_curr_mmd.rb +63 -25
- data/app/services/malawi_hiv_program_reports/pepfar/tx_ml.rb +137 -41
- data/app/services/malawi_hiv_program_reports/pepfar/tx_new.rb +51 -64
- data/app/services/malawi_hiv_program_reports/pepfar/tx_rtt.rb +91 -47
- data/app/services/malawi_hiv_program_reports/pepfar/tx_tb.rb +188 -135
- data/app/services/malawi_hiv_program_reports/report_map.rb +1 -1
- data/lib/malawi_hiv_program_reports/version.rb +1 -1
- metadata +3 -3
@@ -19,36 +19,48 @@ module MalawiHivProgramReports
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def find_report
|
22
|
-
drop_temporary_tables unless @location
|
23
|
-
delete_patients_in_temp_table if @location
|
24
|
-
|
25
|
-
create_temp_earliest_start_date unless temp_eartliest_start_date_exists?
|
26
22
|
init_report
|
27
23
|
build_cohort_tables
|
28
|
-
process_tb_screening
|
29
|
-
process_tb_confirmed_and_on_treatment
|
30
24
|
process_patients_alive_and_on_art
|
31
25
|
process_tb_screened
|
32
26
|
process_tb_confirmed
|
33
|
-
|
27
|
+
flatten_the_report
|
28
|
+
rescue StandardError => e
|
29
|
+
Rails.logger.error("Error generating TxTb report: #{e.message}")
|
30
|
+
Rails.logger.error(e.backtrace.join("\n"))
|
31
|
+
raise e
|
32
|
+
end
|
33
|
+
|
34
|
+
def process_tb_data
|
35
|
+
delete_patients_in_temp_table
|
36
|
+
process_tb_screening
|
37
|
+
process_tb_confirmed_and_on_treatment
|
34
38
|
end
|
35
39
|
|
36
40
|
private
|
37
41
|
|
42
|
+
GENDER = %w[Male Female].freeze
|
43
|
+
|
38
44
|
def init_report
|
39
45
|
@report = initialize_report_structure
|
46
|
+
addittional_groups
|
40
47
|
end
|
41
48
|
|
42
49
|
def initialize_report_structure
|
43
50
|
pepfar_age_groups.each_with_object({}) do |age_group, report|
|
44
|
-
|
45
|
-
|
46
|
-
report[age_group] ||= {}
|
47
|
-
report[age_group][gender] = initialize_gender_metrics
|
51
|
+
report[age_group] = GENDER.each_with_object({}) do |gender, age_group_report|
|
52
|
+
age_group_report[gender] = initialize_gender_metrics
|
48
53
|
end
|
49
54
|
end
|
50
55
|
end
|
51
56
|
|
57
|
+
def addittional_groups
|
58
|
+
@report['All'] = {}
|
59
|
+
%w[Male FP FNP FBf].each do |key|
|
60
|
+
@report['All'][key] = initialize_gender_metrics
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
52
64
|
def initialize_gender_metrics
|
53
65
|
{
|
54
66
|
tx_curr: [],
|
@@ -64,85 +76,114 @@ module MalawiHivProgramReports
|
|
64
76
|
}
|
65
77
|
end
|
66
78
|
|
67
|
-
def
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
79
|
+
def flatten_the_report
|
80
|
+
result = []
|
81
|
+
@report.each do |age_group, age_group_report|
|
82
|
+
next if age_group == 'Unknown'
|
83
|
+
|
84
|
+
age_group_report.each_key do |gender|
|
85
|
+
next if gender == 'Unknown'
|
86
|
+
|
87
|
+
result << process_age_group_report(age_group, gender, age_group_report[gender])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
new_group = pepfar_age_groups.map { |age_group| age_group }
|
92
|
+
new_group << 'All'
|
93
|
+
gender_scores = { 'Female' => 0, 'Male' => 1, 'FNP' => 3, 'FP' => 2, 'FBf' => 4 }
|
94
|
+
result_scores = result.sort_by do |item|
|
95
|
+
gender_score = gender_scores[item[:gender]] || 999
|
96
|
+
age_group_score = new_group.index(item[:age_group]) || 999
|
97
|
+
[gender_score, age_group_score]
|
73
98
|
end
|
99
|
+
# remove all unknown age groups
|
100
|
+
result_scores.reject { |item| item[:age_group].match?(/unknown/i) }
|
74
101
|
end
|
75
102
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
103
|
+
def process_age_group_report(age_group, gender, age_group_report)
|
104
|
+
{
|
105
|
+
age_group:,
|
106
|
+
gender:,
|
107
|
+
**age_group_report
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
def delete_patients_in_temp_table
|
112
|
+
if ActiveRecord::Base.connection.table_exists?('cdr_tb_screened')
|
113
|
+
execute_action("DELETE FROM cdr_tb_screened WHERE site_id = #{@location}")
|
114
|
+
end
|
115
|
+
return unless ActiveRecord::Base.connection.table_exists?('cdr_tb_confirmed_and_on_treatment')
|
116
|
+
|
117
|
+
execute_action("DELETE FROM cdr_tb_confirmed_and_on_treatment WHERE site_id = #{@location}")
|
79
118
|
end
|
80
119
|
|
81
120
|
def build_cohort_tables
|
82
121
|
return unless rebuild_outcome || @occupation.present?
|
83
122
|
|
84
123
|
MalawiHivProgramReports::Moh::CumulativeCohort.new(
|
85
|
-
start_date
|
86
|
-
end_date
|
124
|
+
start_date:,
|
125
|
+
end_date:,
|
87
126
|
locations: [@location.to_s],
|
88
127
|
rebuild: rebuild_outcome
|
89
128
|
).find_report
|
90
129
|
end
|
91
130
|
|
92
131
|
def process_tb_screening
|
93
|
-
execute_action(create_temp_tb_screened_query)
|
94
132
|
execute_action(insert_temp_tb_screened_query)
|
95
133
|
end
|
96
134
|
|
97
|
-
def
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
135
|
+
def tb_status_results
|
136
|
+
@tb_status_results ||= [::ConceptName.find_by_name('TB Suspected').concept_id,
|
137
|
+
::ConceptName.find_by_name('TB NOT suspected').concept_id].join(',')
|
138
|
+
end
|
139
|
+
|
140
|
+
def tb_status
|
141
|
+
@tb_status ||= ::ConceptName.find_by_name('TB status').concept_id
|
142
|
+
end
|
143
|
+
|
144
|
+
def tb_screening_method
|
145
|
+
@tb_screening_method ||= ::ConceptName.find_by_name('TB screening method used').concept_id
|
146
|
+
end
|
147
|
+
|
148
|
+
def tb_treatment_start_date
|
149
|
+
@tb_treatment_start_date ||= ::ConceptName.find_by_name('TB treatment start date').concept_id
|
150
|
+
end
|
151
|
+
|
152
|
+
def confirmed_tb_on_treatment
|
153
|
+
@confirmed_tb_on_treatment ||= ::ConceptName.find_by_name('Confirmed TB on treatment').concept_id
|
111
154
|
end
|
112
155
|
|
113
156
|
def insert_temp_tb_screened_query
|
114
157
|
<<~SQL
|
115
|
-
INSERT INTO
|
158
|
+
INSERT INTO cdr_tb_screened #{current_partition}
|
116
159
|
SELECT
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
160
|
+
tesd.patient_id,
|
161
|
+
#{@location} AS site_id,
|
162
|
+
LEFT(tesd.gender, 1) AS gender,
|
163
|
+
MAX(o.obs_datetime) AS screened_date,
|
164
|
+
tesd.earliest_start_date as enrollment_date,
|
165
|
+
disaggregated_age_group(tesd.birthdate, DATE('#{end_date.to_date}')) AS age_group,
|
121
166
|
cn.name AS tb_status,
|
122
167
|
GROUP_CONCAT(DISTINCT vcn.name) AS screening_methods
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
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)}
|
130
|
-
WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
|
131
|
-
AND o.value_coded IN (SELECT concept_id FROM concept_name WHERE name IN ('TB Suspected', 'TB NOT suspected') AND voided = 0)
|
132
|
-
AND o.voided = 0 AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
133
|
-
GROUP BY o.person_id
|
134
|
-
) current_obs ON current_obs.person_id = o.person_id AND current_obs.obs_datetime = o.obs_datetime
|
168
|
+
FROM cdr_temp_cohort_members #{current_partition} tesd
|
169
|
+
INNER JOIN obs #{current_partition} o ON o.person_id = tesd.patient_id
|
170
|
+
AND o.voided = 0 AND o.concept_id = #{tb_status}
|
171
|
+
AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
172
|
+
AND o.value_coded IN (#{tb_status_results})
|
135
173
|
INNER JOIN concept_name cn ON cn.concept_id = o.value_coded AND cn.voided = 0
|
136
|
-
LEFT JOIN obs #{current_partition}
|
174
|
+
LEFT JOIN obs #{current_partition} acurr ON acurr.person_id = o.person_id
|
175
|
+
AND acurr.voided = 0 AND acurr.concept_id = #{tb_status}
|
176
|
+
AND acurr.obs_datetime > o.obs_datetime
|
177
|
+
AND acurr.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
178
|
+
AND acurr.value_coded IN (#{tb_status_results})
|
179
|
+
LEFT JOIN obs #{current_partition} screen_method ON screen_method.concept_id = #{tb_screening_method}
|
137
180
|
AND screen_method.voided = 0
|
138
181
|
AND screen_method.person_id = o.person_id
|
139
|
-
AND DATE(screen_method.obs_datetime) = DATE(
|
182
|
+
AND DATE(screen_method.obs_datetime) = DATE(o.obs_datetime)
|
140
183
|
LEFT JOIN concept_name vcn ON vcn.concept_id = screen_method.value_coded AND vcn.voided = 0 AND vcn.name IN ('CXR', 'MWRD')
|
141
|
-
WHERE
|
142
|
-
|
143
|
-
|
144
|
-
AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
145
|
-
GROUP BY o.person_id
|
184
|
+
WHERE acurr.person_id IS NULL
|
185
|
+
GROUP BY tesd.patient_id
|
186
|
+
ON DUPLICATE KEY UPDATE gender = VALUES(gender), screened_date = VALUES(screened_date), age_group = VALUES(age_group), tb_status = VALUES(tb_status), screening_methods = VALUES(screening_methods)
|
146
187
|
SQL
|
147
188
|
end
|
148
189
|
|
@@ -152,72 +193,45 @@ module MalawiHivProgramReports
|
|
152
193
|
|
153
194
|
def create_temp_earliest_start_date
|
154
195
|
MalawiHivProgramReports::Moh::CumulativeCohort.new(
|
155
|
-
start_date
|
156
|
-
end_date
|
196
|
+
start_date:,
|
197
|
+
end_date:,
|
157
198
|
locations: [@location],
|
158
199
|
rebuild: rebuild_outcome
|
159
200
|
).find_report
|
160
201
|
end
|
161
202
|
|
162
203
|
def process_tb_confirmed_and_on_treatment
|
163
|
-
execute_action(create_temp_tb_confirmed_query)
|
164
204
|
execute_action(insert_temp_tb_confirmed_query)
|
165
205
|
end
|
166
206
|
|
167
|
-
def create_temp_tb_confirmed_query
|
168
|
-
<<~SQL
|
169
|
-
CREATE TABLE IF NOT EXISTS temp_tb_confirmed_and_on_treatment(
|
170
|
-
patient_id INT(11) NOT NULL,
|
171
|
-
gender VARCHAR(255) NULL,
|
172
|
-
age_group VARCHAR(255) NOT NULL,
|
173
|
-
tb_confirmed_date DATE NULL,
|
174
|
-
has_tb_confirmed_date BOOLEAN NOT NULL,
|
175
|
-
enrollment_date DATE NULL,
|
176
|
-
prev_reading DATE,
|
177
|
-
site_id INT(11) DEFAULT 1,
|
178
|
-
PRIMARY KEY (patient_id, site_id)
|
179
|
-
)
|
180
|
-
SQL
|
181
|
-
end
|
182
|
-
|
183
207
|
def insert_temp_tb_confirmed_query
|
184
208
|
<<~SQL
|
185
|
-
INSERT INTO
|
209
|
+
INSERT INTO cdr_tb_confirmed_and_on_treatment #{current_partition}
|
186
210
|
SELECT
|
187
211
|
o.person_id as patient_id,
|
188
|
-
|
189
|
-
|
212
|
+
#{@location} AS site_id,
|
213
|
+
LEFT(tesd.gender, 1) AS gender,
|
214
|
+
disaggregated_age_group(tesd.birthdate, DATE('#{end_date.to_date}')) AS age_group,
|
190
215
|
COALESCE(MIN(tcd.value_datetime),MIN(o.obs_datetime)) AS tb_confirmed_date,
|
191
216
|
CASE
|
192
217
|
WHEN COUNT(tcd.value_datetime) > 0 THEN TRUE
|
193
218
|
ELSE FALSE
|
194
219
|
END AS has_tb_confirmed_date,
|
195
220
|
tesd.earliest_start_date as enrollment_date,
|
196
|
-
prev.
|
197
|
-
#{@location ? ", #{@location}" : ''} AS site_id
|
221
|
+
COALESCE(MIN(prev_tcd.value_datetime),MIN(prev.obs_datetime)) AS prev_reading
|
198
222
|
FROM obs #{current_partition} o
|
199
|
-
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = o.person_id
|
200
|
-
#{
|
201
|
-
|
202
|
-
LEFT JOIN obs #{current_partition}
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
LEFT JOIN obs #{current_partition} tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
|
210
|
-
AND tcd.voided = 0 AND tcd.person_id = o.person_id
|
211
|
-
WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
|
212
|
-
AND o.value_coded = #{::ConceptName.find_by_name('Confirmed TB on treatment').concept_id}
|
223
|
+
INNER JOIN cdr_temp_cohort_members #{current_partition} tesd ON tesd.patient_id = o.person_id
|
224
|
+
LEFT JOIN obs #{current_partition} tcd ON tcd.concept_id = #{tb_treatment_start_date}
|
225
|
+
AND tcd.voided = 0 AND tcd.person_id = o.person_id
|
226
|
+
LEFT JOIN obs #{current_partition} prev ON prev.person_id = o.person_id AND prev.voided = 0
|
227
|
+
AND prev.concept_id = #{tb_status} AND prev.value_coded = #{confirmed_tb_on_treatment}
|
228
|
+
AND prev.obs_datetime < '#{start_date}'
|
229
|
+
LEFT JOIN obs #{current_partition} prev_tcd ON prev_tcd.person_id = o.person_id AND prev_tcd.voided = 0
|
230
|
+
AND prev_tcd.concept_id = #{tb_treatment_start_date} AND prev_tcd.obs_datetime < '#{start_date}'
|
231
|
+
WHERE o.concept_id = #{tb_status}
|
232
|
+
AND o.value_coded = #{confirmed_tb_on_treatment}
|
213
233
|
AND o.voided = 0
|
214
|
-
AND o.obs_datetime
|
215
|
-
GROUP BY o.person_id
|
216
|
-
) prev ON prev.person_id = o.person_id
|
217
|
-
WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
|
218
|
-
AND o.value_coded = #{::ConceptName.find_by_name('Confirmed TB on treatment').concept_id}
|
219
|
-
AND o.voided = 0
|
220
|
-
AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
234
|
+
AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
|
221
235
|
GROUP BY o.person_id
|
222
236
|
SQL
|
223
237
|
end
|
@@ -225,8 +239,28 @@ module MalawiHivProgramReports
|
|
225
239
|
def process_patients_alive_and_on_art
|
226
240
|
find_patients_alive_and_on_art.each do |patient|
|
227
241
|
next unless pepfar_age_groups.include?(patient['age_group'])
|
242
|
+
next unless GENDER.include?(patient['gender'])
|
228
243
|
|
229
|
-
|
244
|
+
process_aggreggation_rows(patient['age_group'], patient['gender'], :tx_curr, patient['patient_id'],
|
245
|
+
patient['maternal_status'])
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def process_aggreggation_rows(age_group, gender, indicator, patient_id, maternal_status)
|
250
|
+
@report[age_group][gender][indicator] << patient_id
|
251
|
+
|
252
|
+
if gender == 'Male'
|
253
|
+
@report['All']['Male'][indicator] << patient_id
|
254
|
+
return
|
255
|
+
end
|
256
|
+
|
257
|
+
case maternal_status
|
258
|
+
when 'FP'
|
259
|
+
@report['All']['FP'][indicator] << patient_id
|
260
|
+
when 'FBf'
|
261
|
+
@report['All']['FBf'][indicator] << patient_id
|
262
|
+
else
|
263
|
+
@report['All']['FNP'][indicator] << patient_id
|
230
264
|
end
|
231
265
|
end
|
232
266
|
|
@@ -236,11 +270,15 @@ module MalawiHivProgramReports
|
|
236
270
|
|
237
271
|
def create_patients_alive_and_on_art_query
|
238
272
|
<<~SQL
|
239
|
-
SELECT tpo.patient_id,
|
273
|
+
SELECT tpo.patient_id, CASE tesd.gender
|
274
|
+
WHEN 'M' THEN 'Male'
|
275
|
+
WHEN 'F' THEN 'Female'
|
276
|
+
ELSE 'Unknown'
|
277
|
+
END gender, ms.maternal_status,
|
278
|
+
disaggregated_age_group(tesd.birthdate, DATE('#{end_date.to_date}')) age_group
|
240
279
|
FROM cdr_temp_patient_outcomes #{current_partition} tpo
|
241
|
-
INNER JOIN cdr_temp_cohort_members tesd ON tesd.patient_id = tpo.patient_id
|
242
|
-
#{
|
243
|
-
#{site_manager(operator: 'AND', column: 'tpo.site_id', location: @location)}
|
280
|
+
INNER JOIN cdr_temp_cohort_members #{current_partition} tesd ON tesd.patient_id = tpo.patient_id
|
281
|
+
LEFT JOIN cdr_temp_maternal_status #{current_partition} ms ON ms.patient_id = tpo.patient_id
|
244
282
|
WHERE tpo.cum_outcome = 'On antiretrovirals'
|
245
283
|
SQL
|
246
284
|
end
|
@@ -253,14 +291,15 @@ module MalawiHivProgramReports
|
|
253
291
|
age_group = patient['age_group']
|
254
292
|
next unless pepfar_age_groups.include?(age_group)
|
255
293
|
|
256
|
-
gender = patient['gender']
|
257
|
-
metrics = @report[age_group][gender]
|
294
|
+
gender = patient['gender']
|
258
295
|
enrollment_date = patient['enrollment_date']
|
259
296
|
tb_status = patient['tb_status'].downcase
|
260
|
-
|
297
|
+
methods = patient['screening_methods']&.split(',')&.map(&:downcase)
|
261
298
|
patient_id = patient['patient_id']
|
262
|
-
|
263
|
-
|
299
|
+
maternal_status = patient['maternal_status']
|
300
|
+
|
301
|
+
process_method(methods:, age_group:, gender:, patient_id:, maternal_status:)
|
302
|
+
process_screening_results(enrollment_date:, tb_status:, age_group:, gender:, patient_id:, maternal_status:)
|
264
303
|
end
|
265
304
|
end
|
266
305
|
|
@@ -269,34 +308,38 @@ module MalawiHivProgramReports
|
|
269
308
|
age_group = patient['age_group']
|
270
309
|
next unless pepfar_age_groups.include?(age_group)
|
271
310
|
|
272
|
-
gender = patient['gender']
|
273
|
-
metrics = @report[age_group][gender]
|
311
|
+
gender = patient['gender']
|
274
312
|
enrollment_date = patient['enrollment_date']
|
275
313
|
|
276
314
|
if new_on_art(enrollment_date)
|
277
|
-
|
315
|
+
process_aggreggation_rows(age_group, gender, :started_tb_new, patient['patient_id'], patient['maternal_status'])
|
278
316
|
else
|
279
|
-
|
317
|
+
process_aggreggation_rows(age_group, gender, :started_tb_prev, patient['patient_id'], patient['maternal_status'])
|
280
318
|
end
|
281
319
|
end
|
282
320
|
end
|
283
321
|
|
284
|
-
def process_screening_results(
|
322
|
+
def process_screening_results(enrollment_date:, tb_status:, **kwargs)
|
285
323
|
if new_on_art(enrollment_date)
|
286
|
-
|
324
|
+
indicator = :sceen_pos_new if ['tb suspected', 'sup', 'confirmed tb not on treatment', 'norx',
|
287
325
|
'confirmed tb on treatment', 'rx'].include?(tb_status)
|
288
|
-
|
326
|
+
indicator = :sceen_neg_new if ['tb not suspected', 'nosup'].include?(tb_status)
|
289
327
|
else
|
290
|
-
|
328
|
+
indicator = :sceen_pos_prev if ['tb suspected', 'sup', 'confirmed tb not on treatment',
|
291
329
|
'norx'].include?(tb_status)
|
292
|
-
|
330
|
+
indicator = :sceen_neg_prev if ['tb not suspected', 'nosup'].include?(tb_status)
|
293
331
|
end
|
332
|
+
return unless indicator
|
333
|
+
|
334
|
+
process_aggreggation_rows(kwargs[:age_group], kwargs[:gender], indicator, kwargs[:patient_id], kwargs[:maternal_status])
|
294
335
|
end
|
295
336
|
|
296
|
-
def process_method(
|
297
|
-
|
298
|
-
|
299
|
-
|
337
|
+
def process_method(methods:, **kwargs)
|
338
|
+
indicator = :symptom_screen_alone if methods.blank?
|
339
|
+
indicator = :cxr_screen if methods&.include?('cxr') && !methods&.include?('mwrd')
|
340
|
+
indicator = :mwrd_screen if methods&.include?('mwrd')
|
341
|
+
|
342
|
+
process_aggreggation_rows(kwargs[:age_group], kwargs[:gender], indicator, kwargs[:patient_id], kwargs[:maternal_status])
|
300
343
|
end
|
301
344
|
|
302
345
|
# rubocop:enable Metrics/AbcSize
|
@@ -324,18 +367,28 @@ module MalawiHivProgramReports
|
|
324
367
|
|
325
368
|
def find_tb_screened_data_query
|
326
369
|
<<~SQL
|
327
|
-
SELECT tbs.patient_id, tbs.enrollment_date,
|
328
|
-
|
329
|
-
|
370
|
+
SELECT tbs.patient_id, tbs.enrollment_date,
|
371
|
+
CASE tbs.gender
|
372
|
+
WHEN 'M' THEN 'Male'
|
373
|
+
WHEN 'F' THEN 'Female'
|
374
|
+
ELSE 'Unknown'
|
375
|
+
END gender, ms.maternal_status,
|
376
|
+
tbs.age_group, tbs.tb_status, tbs.screened_date, tbs.screening_methods
|
377
|
+
FROM cdr_tb_screened #{current_partition} tbs
|
378
|
+
LEFT JOIN cdr_temp_maternal_status #{current_partition} ms ON ms.patient_id = tbs.patient_id
|
330
379
|
SQL
|
331
380
|
end
|
332
381
|
|
333
382
|
def find_tb_confirmed_data_query
|
334
383
|
<<~SQL
|
335
|
-
SELECT t.patient_id, t.gender
|
336
|
-
|
384
|
+
SELECT t.patient_id, CASE t.gender
|
385
|
+
WHEN 'M' THEN 'Male'
|
386
|
+
WHEN 'F' THEN 'Female'
|
387
|
+
ELSE 'Unknown'
|
388
|
+
END gender, ms.maternal_status, t.age_group, t.enrollment_date, t.tb_confirmed_date
|
389
|
+
FROM cdr_tb_confirmed_and_on_treatment #{current_partition} t
|
390
|
+
LEFT JOIN cdr_temp_maternal_status #{current_partition} ms ON ms.patient_id = t.patient_id
|
337
391
|
WHERE t.tb_confirmed_date > '#{start_date}'
|
338
|
-
#{site_manager(operator: 'AND', column: 't.site_id', location: @location)}
|
339
392
|
AND (t.has_tb_confirmed_date = TRUE OR t.prev_reading IS NULL OR TIMESTAMPDIFF(MONTH,t.prev_reading, t.tb_confirmed_date) > 6)
|
340
393
|
SQL
|
341
394
|
end
|
@@ -35,7 +35,7 @@ module MalawiHivProgramReports
|
|
35
35
|
'VL_DUE' => MalawiHivProgramReports::Clinic::PatientsDueForViralLoad,
|
36
36
|
'DEFAULTER_LIST' => MalawiHivProgramReports::Pepfar::DefaulterList,
|
37
37
|
'VL_DISAGGREGATED' => MalawiHivProgramReports::Clinic::ViralLoadDisaggregated,
|
38
|
-
'TB_PREV' => MalawiHivProgramReports::Pepfar::
|
38
|
+
'TB_PREV' => MalawiHivProgramReports::Pepfar::TbPrev3,
|
39
39
|
'OUTCOME_LIST' => MalawiHivProgramReports::Clinic::OutcomeList,
|
40
40
|
'VIRAL_LOAD' => MalawiHivProgramReports::Clinic::ViralLoad,
|
41
41
|
'VIRAL_LOAD_COVERAGE' => MalawiHivProgramReports::Pepfar::ViralLoadCoverage2,
|
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.18
|
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-
|
11
|
+
date: 2024-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -191,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
191
|
- !ruby/object:Gem::Version
|
192
192
|
version: '0'
|
193
193
|
requirements: []
|
194
|
-
rubygems_version: 3.
|
194
|
+
rubygems_version: 3.4.1
|
195
195
|
signing_key:
|
196
196
|
specification_version: 4
|
197
197
|
summary: Malawi HIV PROGRAM Reports for Ruby on Rails
|