emr_ohsp_interface 0.4.0 → 0.5.3

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: 6d9929d6c572d68a83032faf3e7bcd30beb07c2ad9a6c5936f0da9b4e54e4377
4
- data.tar.gz: a7df28d9f471cfaddecd76174698a83ee8b64172a8bc68ef91ec0751a2535ca4
3
+ metadata.gz: 145e8b4a017e7cbec4cc4ace99ca78f853f16bf5048a7043e1c8eba6b5486a54
4
+ data.tar.gz: 741d47d437d4334b0218b9dbce8cdb328df9839ee68c95a71dc285c780a96425
5
5
  SHA512:
6
- metadata.gz: e74d315683453b6853ecd523abed43953a29a8f7d34d948c11d3a382b0a3fb258c72945fecb685a34328d14ea5990127f61607723fcde62221621f0087f6f389
7
- data.tar.gz: 702c61725fc4db911ab0d51c9cf55bd2bc3414daa5720bc2dd3c3cdfd0e5e57943d4e062bd01ee73aea148f485aaacdb9b262890e3f0b16394cb6783a29ad84e
6
+ metadata.gz: 6b5c9d1df00c1e00065fd95966924a4c28f130cdf9f7302ed7a7b7071288dcce42f9d1995c2e7d22307bd81749abf28879ef40a1c6f9abef4c1cb2990fe20ceb
7
+ data.tar.gz: 78e83895b4a74c5d45bc1abdd420aff1003380bc0ba474f6b4d64dfb879309ef1989113f56e178c6f6a2fd52a16549810d3a077547d2482cb46b809ecbba1377
@@ -14,6 +14,10 @@ class EmrOhspInterface::EmrOhspInterfaceController < ::ApplicationController
14
14
  def generate_monthly_idsr_report
15
15
  render json: service.generate_monthly_idsr_report(params[:request],params[:start_date],params[:end_date]);
16
16
  end
17
+
18
+ def generate_hmis_15_report
19
+ render json: service.generate_hmis_15_report(params[:start_date],params[:end_date]);
20
+ end
17
21
 
18
22
  def service
19
23
  EmrOhspInterface::EmrOhspInterfaceService
@@ -17,18 +17,23 @@ module EmrOhspInterface
17
17
  end
18
18
 
19
19
  def get_patient_number
20
- query "SELECT COUNT(*) as 'patient_identify' FROM patients; "
20
+ get_patient_id = query "SELECT id FROM iblis.patients order by id desc limit 1;"
21
+
22
+ get_patient_id.each do |x|
23
+ return patient_number = x['id']
24
+ end
25
+
26
+
27
+
21
28
  end
22
29
 
23
30
  def check_patient_number(patient_id)
24
- patient_number = ''
25
31
  get_patient_id = query "SELECT patient_number FROM patients WHERE `external_patient_number` ='#{patient_id}'; "
26
32
 
27
33
  get_patient_id.each do |x|
28
- patient_number = x['patient_number']
34
+ return patient_number = x['patient_number']
29
35
  end
30
36
 
31
- patient_number
32
37
  end
33
38
 
34
39
  def filterpatient_number(data)
@@ -50,7 +55,7 @@ module EmrOhspInterface
50
55
  date = time.strftime('%Y-%m-%d %H:%M:%S')
51
56
  lab_details.map do |order_params|
52
57
  if patient_number.blank?
53
- patient_number = filterpatient_number(get_patient_number) + 1
58
+ patient_number = get_patient_number() + 1
54
59
 
55
60
  person_data = Person.where('person_id= ?', order_params[:patient_id])[0]
56
61
  address_data = PersonAddress.where('person_id= ?', order_params[:patient_id])[0]
@@ -105,7 +105,12 @@ module EmrOhspInterface
105
105
  type = EncounterType.find_by_name 'Outpatient diagnosis'
106
106
  collection = {}
107
107
 
108
- special_indicators = ["Malaria in Pregnancy","HIV New Initiated on ART"]
108
+ special_indicators = ["Malaria in Pregnancy",
109
+ "HIV New Initiated on ART",
110
+ "Diarrhoea In Under 5",
111
+ "Malnutrition In Under 5",
112
+ "Underweight Newborns < 2500g in Under 5 Cases",
113
+ "Severe Pneumonia in under 5 cases"]
109
114
 
110
115
  diag_map.each do |key,value|
111
116
  options = {"<5yrs"=>nil,">=5yrs"=>nil}
@@ -172,6 +177,76 @@ module EmrOhspInterface
172
177
 
173
178
  collection[key] = options
174
179
  end
180
+
181
+ if key.eql?("Diarrhoea In Under 5")
182
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
183
+ AND encounter_type = ? AND value_coded IN (?)
184
+ AND concept_id IN(6543, 6542)',
185
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
186
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
187
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
188
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
189
+ select('encounter.encounter_type, obs.value_coded, p.*')
190
+
191
+ #under_five
192
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
193
+ collect{|record| record.person_id}
194
+ options["<5yrs"] = under_five
195
+ collection[key] = options
196
+ end
197
+
198
+
199
+ if key.eql?("Malnutrition In Under 5")
200
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
201
+ AND encounter_type = ? AND value_coded IN (?)
202
+ AND concept_id IN(6543, 6542)',
203
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
204
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
205
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
206
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
207
+ select('encounter.encounter_type, obs.value_coded, p.*')
208
+
209
+ #under_five
210
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
211
+ collect{|record| record.person_id}
212
+ options["<5yrs"] = under_five
213
+ collection[key] = options
214
+ end
215
+
216
+
217
+ if key.eql?("Underweight Newborns < 2500g in Under 5 Cases")
218
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
219
+ AND encounter_type = ? AND value_coded IN (?)
220
+ AND concept_id IN(6543, 6542)',
221
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
222
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
223
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
224
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
225
+ select('encounter.encounter_type, obs.value_coded, p.*')
226
+
227
+ #under_five
228
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
229
+ collect{|record| record.person_id}
230
+ options["<5yrs"] = under_five
231
+ collection[key] = options
232
+ end
233
+
234
+ if key.eql?("Severe Pneumonia in under 5 cases")
235
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
236
+ AND encounter_type = ? AND value_coded IN (?)
237
+ AND concept_id IN(6543, 6542)',
238
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
239
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
240
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
241
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
242
+ select('encounter.encounter_type, obs.value_coded, p.*')
243
+
244
+ #under_five
245
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
246
+ collect{|record| record.person_id}
247
+ options["<5yrs"] = under_five
248
+ collection[key] = options
249
+ end
175
250
  end
176
251
  end
177
252
  if request == nil
@@ -180,6 +255,106 @@ module EmrOhspInterface
180
255
  return collection
181
256
  end
182
257
 
258
+ def generate_hmis_15_report(start_date=nil,end_date=nil)
259
+
260
+ diag_map = settings["hmis_15_map"]
261
+
262
+ #pull the data
263
+ type = EncounterType.find_by_name 'Outpatient diagnosis'
264
+ collection = {}
265
+
266
+ special_indicators = ["Malaria - new cases (under 5)",
267
+ "Malaria - new cases (5 & over)",
268
+ "HIV confirmed positive (15-49 years) new cases"
269
+ ]
270
+
271
+ diag_map.each do |key,value|
272
+ options = {"ids"=>nil}
273
+ concept_ids = ConceptName.where(name: value).collect{|cn| cn.concept_id}
274
+
275
+ if !special_indicators.include?(key)
276
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
277
+ AND encounter_type = ? AND value_coded IN (?)
278
+ AND concept_id IN(6543, 6542)',
279
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
280
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
281
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
282
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
283
+ select('encounter.encounter_type, obs.value_coded, p.*')
284
+
285
+ # #under_five
286
+ # under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
287
+ # collect{|record| record.person_id}
288
+ # options["<5yrs"] = under_five
289
+ # #above 5 years
290
+ # over_five = data.select{|record| calculate_age(record["birthdate"]) >=5 }.\
291
+ # collect{|record| record.person_id}
292
+
293
+ # options[">=5yrs"] = over_five
294
+
295
+ all = data.collect{|record| record.person_id}
296
+
297
+
298
+ options["ids"] = all
299
+
300
+ collection[key] = options
301
+ else
302
+ if key.eql?("Malaria - new cases (under 5)")
303
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
304
+ AND encounter_type = ? AND value_coded IN (?)
305
+ AND concept_id IN(6543, 6542)',
306
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
307
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
308
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
309
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
310
+ select('encounter.encounter_type, obs.value_coded, p.*')
311
+
312
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5 }.\
313
+ collect{|record| record["person_id"]}
314
+
315
+ options["ids"] = under_five
316
+
317
+ collection[key] = options
318
+
319
+ end
320
+
321
+ if key.eql?("Malaria - new cases (5 & over)")
322
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
323
+ AND encounter_type = ? AND value_coded IN (?)
324
+ AND concept_id IN(6543, 6542)',
325
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
326
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
327
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
328
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
329
+ select('encounter.encounter_type, obs.value_coded, p.*')
330
+
331
+ over_and_five = data.select{|record| calculate_age(record["birthdate"]) >= 5 }.\
332
+ collect{|record| record["person_id"]}
333
+
334
+ options["ids"] = over_and_five
335
+
336
+ collection[key] = options
337
+ end
338
+
339
+ if key.eql?("HIV confirmed positive (15-49 years) new cases")
340
+ data = ActiveRecord::Base.connection.select_all(
341
+ "SELECT * FROM temp_earliest_start_date
342
+ WHERE date_enrolled BETWEEN '#{start_date}' AND '#{end_date}'
343
+ AND date_enrolled = earliest_start_date
344
+ GROUP BY patient_id" ).to_hash
345
+
346
+ over_and_15_49 = data.select{|record| calculate_age(record["birthdate"]) >= 15 && calculate_age(record["birthdate"]) <=49 }.\
347
+ collect{|record| record["patient_id"]}
348
+
349
+ options["ids"] = over_and_15_49
350
+
351
+ collection[key] = options
352
+ end
353
+ end
354
+ end
355
+ collection
356
+ end
357
+
183
358
  # helper menthod
184
359
  def months_generator
185
360
  months = Hash.new
data/config/routes.rb CHANGED
@@ -5,4 +5,5 @@ EmrOhspInterface::Engine.routes.draw do
5
5
  get '/get_months', to: 'emr_ohsp_interface#months_generator'
6
6
  get '/generate_weekly_idsr_report', to: 'emr_ohsp_interface#generate_weekly_idsr_report'
7
7
  get '/generate_monthly_idsr_report', to: 'emr_ohsp_interface#generate_monthly_idsr_report'
8
+ get '/generate_hmis_15_report', to: 'emr_ohsp_interface#generate_hmis_15_report'
8
9
  end
@@ -1,3 +1,3 @@
1
1
  module EmrOhspInterface
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emr_ohsp_interface
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Manda and Petros Kayange
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-29 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  requirements: []
123
- rubygems_version: 3.0.8
123
+ rubygems_version: 3.2.32
124
124
  signing_key:
125
125
  specification_version: 4
126
126
  summary: This in a gem that facilitates interfacing of EMR, One Health Surveillance