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 +4 -4
- data/app/controllers/emr_ohsp_interface/emr_ohsp_interface_controller.rb +4 -0
- data/app/services/emr_ohsp_interface/emr_lims_interface_service.rb +10 -5
- data/app/services/emr_ohsp_interface/emr_ohsp_interface_service.rb +176 -1
- data/config/routes.rb +1 -0
- data/lib/emr_ohsp_interface/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 145e8b4a017e7cbec4cc4ace99ca78f853f16bf5048a7043e1c8eba6b5486a54
|
4
|
+
data.tar.gz: 741d47d437d4334b0218b9dbce8cdb328df9839ee68c95a71dc285c780a96425
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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 =
|
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",
|
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
|
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
|
+
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:
|
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.
|
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
|