malawi_hiv_program_reports 1.0.13 → 1.0.14

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: e822549d8adf92be3c36169ba9b0f279b8e36837e237dff82bf7a06f1eed7a6a
4
- data.tar.gz: df4680fed4a17a65e077a9648fd06d752a816b8845c80141a99d9e895eb5bcee
3
+ metadata.gz: 8c1d535116ce1283de2cbbfd8e32f29f7c67ca4a3ffab22cf91de0fe3396199b
4
+ data.tar.gz: f094051dd235262b875743e63b059ed4449d5d966b13dbfd4bb7c4fac16d0a29
5
5
  SHA512:
6
- metadata.gz: f948b554218cf4420b06a37a98028bbceebb06aad04a61d3cce9651aadfbc429dc6603d853e03d51eb5bbe51688b4bfd7b704301c4f53c99031985dfb1cca53b
7
- data.tar.gz: 1214999f3ee1fbb72287e31f634e28aa650ec6a9ba9b5cedb29c38416f7a53cedd0adf4d521bada6a1d562b1054a9087e3e43174752d8fbf7cf6939889a1854a
6
+ metadata.gz: 7e7c15a56f50c1923fadbda4fcd7b1711989d50d5d32ca6c7f9cb9862694248194d2a9d7589538d10d894d65654af74e0d260f3ea0e7fc3754ee5238c4002092
7
+ data.tar.gz: 5864f57e5cb41ccb861ef52f474c6ea4d08b105089fd84dd6322adaaaf7603a4492109d4c19f6c8c9f149ca1bdac5405280ab37e7430b5976ad5a5c27135a6ed
@@ -94,15 +94,19 @@ module MalawiHivProgramReports
94
94
  TIMESTAMPDIFF(day, DATE(o.start_date), DATE(o.auto_expire_date)) prescribed_days
95
95
  FROM orders o
96
96
  INNER JOIN drug_order od ON od.order_id = o.order_id
97
+ #{site_manager(operator: 'AND', column: 'od.site_id', location: @location)}
97
98
  INNER JOIN drug d ON d.drug_id = od.drug_inventory_id
98
99
  INNER JOIN concept_set s ON s.concept_id = d.concept_id
99
100
  INNER JOIN person p ON p.person_id = o.patient_id
101
+ #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
100
102
  INNER JOIN encounter e ON e.patient_id = p.person_id
103
+ #{site_manager(operator: 'AND', column: 'e.site_id', location: @location)}
101
104
  WHERE s.concept_set = #{arv_concept_set} AND o.voided = 0
102
105
  #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
103
106
  AND DATE(o.start_date) = (
104
107
  SELECT DATE(MAX(t.start_date)) FROM orders t
105
108
  INNER JOIN drug_order t2 ON t2.order_id = t.order_id
109
+ #{site_manager(operator: 'AND', column: 't2.site_id', location: @location)}
106
110
  INNER JOIN drug t3 ON t3.drug_id = t2.drug_inventory_id
107
111
  INNER JOIN concept_set t4 ON t4.concept_id = t3.concept_id
108
112
  WHERE t.patient_id = #{patient_id}
@@ -179,7 +183,9 @@ module MalawiHivProgramReports
179
183
  def get_weight(patient_id)
180
184
  concept_id = ::ConceptName.find_by_name('Weight (Kg)').concept_id
181
185
  weight_details = ::Observation.where("person_id = ? AND concept_id = ?
182
- AND obs_datetime <= ? AND ( CAST(value_numeric as DECIMAL(4,1)) > 0 OR
186
+ AND obs_datetime <= ?
187
+ #{site_manager(operator: 'AND', column: 'site_id', location: @location)}
188
+ AND ( CAST(value_numeric as DECIMAL(4,1)) > 0 OR
183
189
  CAST(value_text as DECIMAL(4,1)) > 0)", patient_id,
184
190
  concept_id, @end_date).order('obs_datetime DESC, date_created DESC')
185
191
 
@@ -216,19 +222,23 @@ module MalawiHivProgramReports
216
222
  TIMESTAMPDIFF(day, DATE(o.start_date), DATE(o.auto_expire_date)) prescribed_days
217
223
  FROM orders o
218
224
  INNER JOIN drug_order od ON od.order_id = o.order_id
225
+ #{site_manager(operator: 'AND', column: 'od.site_id', location: @location)}
219
226
  INNER JOIN drug d ON d.drug_id = od.drug_inventory_id
220
227
  INNER JOIN concept_set s ON s.concept_id = d.concept_id
221
228
  INNER JOIN person p ON p.person_id = o.patient_id
229
+ #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
222
230
  INNER JOIN encounter e ON e.patient_id = p.person_id
231
+ #{site_manager(operator: 'AND', column: 'e.site_id', location: @location)}
223
232
  AND e.program_id = #{program_id}
224
- #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
225
233
  LEFT JOIN patient_identifier i ON i.patient_id = o.patient_id
226
234
  AND i.identifier_type = #{identifier_type}
227
235
  AND LENGTH(identifier) > 0 AND i.voided = 0
228
236
  WHERE s.concept_set = #{arv_concept_set} AND o.voided = 0
237
+ #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
229
238
  AND DATE(o.start_date) = (
230
239
  SELECT DATE(MAX(t.start_date)) FROM orders t
231
240
  INNER JOIN drug_order t2 ON t2.order_id = t.order_id
241
+ #{site_manager(operator: 'AND', column: 't2.site_id', location: @location)}
232
242
  INNER JOIN drug t3 ON t3.drug_id = t2.drug_inventory_id
233
243
  INNER JOIN concept_set t4 ON t4.concept_id = t3.concept_id
234
244
  WHERE t.patient_id = #{patient_id}
@@ -1004,7 +1004,7 @@ module MalawiHivProgramReports
1004
1004
 
1005
1005
  ActiveRecord::Base.connection.execute <<~SQL
1006
1006
  INSERT INTO temp_patient_tb_status
1007
- SELECT e.person_id, obs.value_coded, e.site_id
1007
+ SELECT e.person_id, e.site_id, obs.value_coded
1008
1008
  FROM temp_latest_tb_status e
1009
1009
  INNER JOIN obs ON obs.person_id = e.person_id AND obs.voided = 0
1010
1010
  AND obs.concept_id = 7459 #{site_manager(operator: 'AND', column: 'e.site_id', location: @location)}
@@ -1921,7 +1921,7 @@ module MalawiHivProgramReports
1921
1921
  FROM obs o
1922
1922
  WHERE o.concept_id IN (6131,1755,7972,7563)
1923
1923
  AND o.value_coded IN (1065,1755)
1924
- AND o.voided = 0 #{site_manager(operator: 'AND', column: 'o.location_id', location: @location)}
1924
+ AND o.voided = 0 #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
1925
1925
  AND o.obs_datetime >= '#{start_date}' AND o.obs_datetime < '#{end_date}' + INTERVAL 1 DAY;
1926
1926
  SQL
1927
1927
  ActiveRecord::Base.connection.execute 'CREATE INDEX fre_person ON temp_pregnant_obs(person_id);'
@@ -123,6 +123,7 @@ module MalawiHivProgramReports
123
123
  INNER JOIN patient_state s ON p.patient_program_id = s.patient_program_id AND s.voided = 0 AND s.state = 7
124
124
  #{site_manager(operator: 'AND', column: 's.site_id', location: @location)}
125
125
  LEFT JOIN (#{current_occupation_query}) a ON a.person_id = p.patient_id
126
+ #{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
126
127
  WHERE p.program_id = 1 #{%w[Military Civilian].include?(@occupation) ? 'AND' : ''} #{occupation_filter(occupation: @occupation, field_name: 'value', table_name: 'a', include_clause: false)}
127
128
  AND DATE(s.start_date) < '#{start_date.to_date}'
128
129
  #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
@@ -147,6 +148,7 @@ module MalawiHivProgramReports
147
148
  INNER JOIN patient_state s ON p.patient_program_id = s.patient_program_id AND s.voided = 0 AND s.state = 7
148
149
  #{site_manager(operator: 'AND', column: 's.site_id', location: @location)}
149
150
  LEFT JOIN (#{current_occupation_query}) a ON a.person_id = p.patient_id
151
+ #{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
150
152
  WHERE p.program_id = 1 #{%w[Military Civilian].include?(@occupation) ? 'AND' : ''} #{occupation_filter(occupation: @occupation, field_name: 'value', table_name: 'a', include_clause: false)}
151
153
  AND DATE(s.start_date) BETWEEN DATE('#{start_date}') AND DATE('#{end_date}')
152
154
  AND pe.person_id NOT IN (#{drug_refills_and_external_consultation_list})
@@ -158,7 +160,7 @@ module MalawiHivProgramReports
158
160
 
159
161
  def defaulter_period(patient_id, earliest_start_date)
160
162
  defaulter_date = ActiveRecord::Base.connection.select_one <<~SQL
161
- SELECT #{function_manager(function: 'current_pepfar_defaulter_date', location: @location, args: "#{patient_id}::int, '#{end_date}'::date, #{@location}::int")}
163
+ SELECT #{function_manager(function: 'current_pepfar_defaulter_date', location: @location, args: "#{patient_id}::int, '#{end_date}'::date, #{@location}::int")} def_date;
162
164
  SQL
163
165
 
164
166
  defaulter_date = begin
@@ -8,6 +8,7 @@ module MalawiHivProgramReports
8
8
  attr_accessor :start_date, :end_date, :report, :rebuild_outcome
9
9
 
10
10
  include Utils
11
+ include MalawiHivProgramReports::Adapters::Moh::Custom
11
12
 
12
13
  def initialize(start_date:, end_date:, **kwargs)
13
14
  @start_date = start_date.to_date.strftime('%Y-%m-%d 00:00:00')
@@ -69,7 +70,8 @@ module MalawiHivProgramReports
69
70
  def build_cohort_tables
70
71
  return unless rebuild_outcome || @occupation.present?
71
72
 
72
- cohort_builder = MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: 'pepfar', location: @location)
73
+ cohort_builder = MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: 'pepfar',
74
+ location: @location)
73
75
  cohort_builder.init_temporary_tables(start_date, end_date, @occupation)
74
76
  end
75
77
 
@@ -94,14 +96,17 @@ module MalawiHivProgramReports
94
96
  INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = o.person_id
95
97
  WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
96
98
  AND o.value_coded IN (SELECT concept_id FROM concept_name WHERE name IN ('TB Suspected', 'TB NOT suspected') AND voided = 0)
97
- AND o.voided = 0 AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
99
+ AND o.voided = 0 AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}' #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
98
100
  GROUP BY o.person_id
99
101
  ) current_obs ON current_obs.person_id = o.person_id AND current_obs.obs_datetime = o.obs_datetime
100
102
  INNER JOIN concept_name cn ON cn.concept_id = o.value_coded AND cn.voided = 0
101
- LEFT JOIN obs screen_method ON screen_method.concept_id = #{::ConceptName.find_by_name('TB screening method used').concept_id} AND screen_method.voided = 0 AND screen_method.person_id = o.person_id AND DATE(screen_method.obs_datetime) = DATE(current_obs.obs_datetime)
103
+ LEFT JOIN obs screen_method ON screen_method.concept_id = #{::ConceptName.find_by_name('TB screening method used').concept_id}
104
+ AND screen_method.voided = 0 #{site_manager(operator: 'AND', column: 'screen_method.site_id', location: @location)}
105
+ AND screen_method.person_id = o.person_id#{' '}
106
+ AND DATE(screen_method.obs_datetime) = DATE(current_obs.obs_datetime)
102
107
  LEFT JOIN concept_name vcn ON vcn.concept_id = screen_method.value_coded AND vcn.voided = 0 AND vcn.name IN ('CXR', 'MWRD')
103
108
  WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
104
- AND o.voided = 0
109
+ AND o.voided = 0 #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
105
110
  AND o.value_coded IN (SELECT concept_id FROM concept_name WHERE name IN ('TB Suspected', 'TB NOT suspected') AND voided = 0)
106
111
  AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
107
112
  GROUP BY o.person_id
@@ -113,7 +118,8 @@ module MalawiHivProgramReports
113
118
  end
114
119
 
115
120
  def create_temp_earliest_start_date
116
- cohort_builder = MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: 'pepfar', location: @location)
121
+ cohort_builder = MalawiHivProgramReports::Moh::CohortBuilder.new(outcomes_definition: 'pepfar',
122
+ location: @location)
117
123
  cohort_builder.init_temporary_tables(start_date, end_date, @occupation)
118
124
  end
119
125
 
@@ -136,24 +142,26 @@ module MalawiHivProgramReports
136
142
  tesd.earliest_start_date as enrollment_date,
137
143
  prev.tb_confirmed_date prev_reading
138
144
  FROM obs o
139
- INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = o.person_id
140
- INNER JOIN person p ON p.person_id = o.person_id AND p.voided = 0
141
- LEFT JOIN obs tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id} AND tcd.voided = 0 AND tcd.person_id = o.person_id
145
+ INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = o.person_id #{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
146
+ INNER JOIN person p ON p.person_id = o.person_id AND p.voided = 0 #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
147
+ LEFT JOIN obs tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
148
+ AND tcd.voided = 0 AND tcd.person_id = o.person_id #{site_manager(operator: 'AND', column: 'tcd.site_id', location: @location)}
142
149
  LEFT JOIN (
143
150
  SELECT
144
151
  o.person_id,
145
152
  COALESCE(MAX(tcd.value_datetime),MAX(o.obs_datetime)) AS tb_confirmed_date
146
153
  FROM obs o
147
- LEFT JOIN obs tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id} AND tcd.voided = 0 AND tcd.person_id = o.person_id
154
+ LEFT JOIN obs tcd ON tcd.concept_id = #{::ConceptName.find_by_name('TB treatment start date').concept_id}
155
+ AND tcd.voided = 0 AND tcd.person_id = o.person_id #{site_manager(operator: 'AND', column: 'tcd.site_id', location: @location)}
148
156
  WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
149
157
  AND o.value_coded = #{::ConceptName.find_by_name('Confirmed TB on treatment').concept_id}
150
- AND o.voided = 0
158
+ AND o.voided = 0 #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
151
159
  AND o.obs_datetime <= '#{start_date}'
152
160
  GROUP BY o.person_id
153
161
  ) prev ON prev.person_id = o.person_id
154
162
  WHERE o.concept_id = #{::ConceptName.find_by_name('TB status').concept_id}
155
163
  AND o.value_coded = #{::ConceptName.find_by_name('Confirmed TB on treatment').concept_id}
156
- AND o.voided = 0
164
+ AND o.voided = 0 #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
157
165
  AND o.obs_datetime BETWEEN '#{start_date}' AND '#{end_date}'
158
166
  GROUP BY o.person_id
159
167
  SQL
@@ -175,8 +183,8 @@ module MalawiHivProgramReports
175
183
  <<~SQL
176
184
  SELECT tpo.patient_id, LEFT(tesd.gender, 1) AS gender, disaggregated_age_group(tesd.birthdate, DATE('#{end_date.to_date}')) age_group
177
185
  FROM temp_patient_outcomes tpo
178
- INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = tpo.patient_id
179
- WHERE tpo.cum_outcome = 'On antiretrovirals'
186
+ INNER JOIN temp_earliest_start_date tesd ON tesd.patient_id = tpo.patient_id #{site_manager(operator: 'AND', column: 'tesd.site_id', location: @location)}
187
+ WHERE tpo.cum_outcome = 'On antiretrovirals' #{site_manager(operator: 'AND', column: 'tpo.site_id', location: @location)}
180
188
  SQL
181
189
  end
182
190
 
@@ -98,14 +98,21 @@ module MalawiHivProgramReports
98
98
  SELECT p.person_id patient_id
99
99
  FROM person p
100
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
101
- 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
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
103
+ #{site_manager(operator: 'AND', column: 'ps.site_id', location: @location)}
103
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
105
  #{site_manager(operator: 'AND', column: 'hiv_registration.site_id', location: @location)}
105
- LEFT JOIN (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: '+')}
106
- #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}) AS new_patient ON p.person_id = new_patient.person_id
107
- LEFT JOIN (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)}) AS refill ON p.person_id = refill.person_id
108
- LEFT JOIN (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)}) AS external ON p.person_id = external.person_id
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: '+')}
108
+ #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
109
+ ) AS new_patient ON p.person_id = new_patient.person_id
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)}
112
+ ) AS refill ON p.person_id = refill.person_id
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)}
115
+ ) AS external ON p.person_id = external.person_id
109
116
  WHERE (refill.value_coded IS NOT NULL OR external.value_coded IS NOT NULL)
110
117
  AND NOT (hiv_registration.encounter_id IS NOT NULL OR new_patient.value_coded IS NOT NULL)
111
118
  #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
@@ -126,18 +126,21 @@ module MalawiHivProgramReports
126
126
  SELECT o.person_id, o.value_coded
127
127
  FROM obs o
128
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})
129
+ #{site_manager(operator: 'AND', column: 'e.site_id', location: @location)}
129
130
  INNER JOIN person p ON o.person_id = e.patient_id AND LEFT(p.gender, 1) = 'F'
130
- #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
131
+ #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
131
132
  INNER JOIN (
132
133
  SELECT person_id, MAX(obs_datetime) AS obs_datetime
133
134
  FROM obs
134
135
  INNER JOIN encounter ON encounter.encounter_id = obs.encounter_id AND encounter.encounter_type IN (#{encounter_types.to_sql}) AND encounter.voided = 0
136
+ #{site_manager(operator: 'AND', column: 'encounter.site_id', location: @location)}
135
137
  WHERE obs.concept_id IN (#{pregnant_concepts.to_sql})
136
138
  AND obs.obs_datetime BETWEEN DATE(#{ActiveRecord::Base.connection.quote(start_date)}) AND DATE(#{ActiveRecord::Base.connection.quote(end_date)}) + INTERVAL 1 DAY
137
139
  AND obs.voided = 0
138
140
  #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
139
141
  GROUP BY person_id
140
142
  ) AS max_obs ON max_obs.person_id = o.person_id AND max_obs.obs_datetime = o.obs_datetime
143
+ #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
141
144
  WHERE o.concept_id IN (#{pregnant_concepts.to_sql})
142
145
  AND o.voided = 0
143
146
  AND o.value_coded IN (#{yes_concepts.join(',')})
@@ -152,18 +155,21 @@ module MalawiHivProgramReports
152
155
  SELECT o.person_id, o.value_coded
153
156
  FROM obs o
154
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})
158
+ #{site_manager(operator: 'AND', column: 'e.site_id', location: @location)}
155
159
  INNER JOIN person p ON o.person_id = e.patient_id AND LEFT(p.gender, 1) = 'F'
156
- #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
160
+ #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
157
161
  INNER JOIN (
158
162
  SELECT person_id, MAX(obs_datetime) AS obs_datetime
159
163
  FROM obs
160
164
  INNER JOIN encounter ON encounter.encounter_id = obs.encounter_id AND encounter.encounter_type IN (#{encounter_types.to_sql}) AND encounter.voided = 0
165
+ #{site_manager(operator: 'AND', column: 'encounter.site_id', location: @location)}
161
166
  WHERE obs.concept_id IN (#{breast_feeding_concepts.to_sql})
162
167
  AND obs.obs_datetime BETWEEN DATE(#{ActiveRecord::Base.connection.quote(start_date)}) AND DATE(#{ActiveRecord::Base.connection.quote(end_date)}) + INTERVAL 1 DAY
163
168
  AND obs.voided = 0
164
169
  #{site_manager(operator: 'AND', column: 'obs.site_id', location: @location)}
165
170
  GROUP BY person_id
166
171
  ) AS max_obs ON max_obs.person_id = o.person_id AND max_obs.obs_datetime = o.obs_datetime
172
+ #{site_manager(operator: 'AND', column: 'o.site_id', location: @location)}
167
173
  WHERE o.concept_id IN (#{breast_feeding_concepts.to_sql})
168
174
  AND o.voided = 0
169
175
  AND o.value_coded IN (#{yes_concepts.join(',')})
@@ -285,16 +291,21 @@ module MalawiHivProgramReports
285
291
  INNER JOIN person p ON p.person_id = ab.patient_id AND p.voided = 0
286
292
  #{site_manager(operator: 'AND', column: 'p.site_id', location: @location)}
287
293
  INNER JOIN drug_order dor ON dor.order_id = ab.order_id AND dor.quantity > 0
294
+ #{site_manager(operator: 'AND', column: 'dor.site_id', location: @location)}
288
295
  INNER JOIN arv_drug ad ON dor.drug_inventory_id = ad.drug_id
289
296
  INNER JOIN patient_program pp ON pp.patient_id = ab.patient_id AND pp.voided = 0 AND pp.program_id = 1
297
+ #{site_manager(operator: 'AND', column: 'pp.site_id', location: @location)}
290
298
  INNER JOIN (
291
- SELECT a.patient_program_id, a.state, a.start_date, a.end_date
299
+ SELECT a.site_id, a.patient_program_id, a.state, a.start_date, a.end_date
292
300
  FROM patient_state a
293
301
  LEFT OUTER JOIN patient_state b ON a.patient_program_id = b.patient_program_id
302
+ #{site_manager(operator: 'AND', column: 'b.site_id', location: @location)}
294
303
  AND a.start_date < b.start_date
304
+ #{site_manager(operator: 'AND', column: 'a.site_id', location: @location)}
295
305
  AND b.voided = 0
296
306
  WHERE b.patient_program_id IS NULL AND a.end_date IS NULL AND a.voided = 0
297
307
  ) current_state ON current_state.patient_program_id = pp.patient_program_id
308
+ #{site_manager(operator: 'AND', column: 'current_state.site_id', location: @location)}
298
309
  LEFT OUTER JOIN orders b ON ab.patient_id = b.patient_id
299
310
  AND ab.order_id = b.order_id
300
311
  AND ab.auto_expire_date < b.auto_expire_date
@@ -368,6 +379,7 @@ module MalawiHivProgramReports
368
379
  ON reason_for_test.order_id = orders.order_id
369
380
  AND reason_for_test.concept_id IN (SELECT concept_id FROM concept_name WHERE name LIKE 'Reason for test' AND voided = 0)
370
381
  AND reason_for_test.voided = 0
382
+ #{site_manager(operator: 'AND', column: 'reason_for_test.site_id', location: @location)}
371
383
  LEFT JOIN concept_name AS reason_for_test_value
372
384
  ON reason_for_test_value.concept_id = reason_for_test.value_coded
373
385
  AND reason_for_test_value.voided = 0
@@ -376,6 +388,7 @@ module MalawiHivProgramReports
376
388
  AND result.concept_id IN (SELECT concept_id FROM concept_name WHERE name LIKE 'HIV Viral load' AND voided = 0)
377
389
  AND result.voided = 0
378
390
  AND (result.value_text IS NOT NULL OR result.value_numeric IS NOT NULL)
391
+ #{site_manager(operator: 'AND', column: 'result.site_id', location: @location)}
379
392
  INNER JOIN (
380
393
  /* Get the latest order dates for each patient */
381
394
  SELECT orders.patient_id, MAX(orders.start_date) AS start_date
@@ -404,6 +417,7 @@ module MalawiHivProgramReports
404
417
  AND orders.start_date >= DATE(#{ActiveRecord::Base.connection.quote(start_date)}) - INTERVAL 12 MONTH
405
418
  AND orders.voided = 0
406
419
  AND orders.patient_id IN (#{clients.push(0).join(',')})
420
+ #{site_manager(operator: 'AND', column: 'orders.site_id', location: @location)}
407
421
  GROUP BY orders.patient_id
408
422
  SQL
409
423
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MalawiHivProgramReports
4
- VERSION = '1.0.13'
4
+ VERSION = '1.0.14'
5
5
  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.0.13
4
+ version: 1.0.14
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-03-25 00:00:00.000000000 Z
11
+ date: 2024-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails