emr_ohsp_interface 0.5.2 → 1.0.1

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: 629a2399385ed5e066c4d90ccf234d6c166434ddf72ab0b68d61399843bc877c
4
- data.tar.gz: f69c5c3b41882bb75659e79a6163947e18bf5792663958ff6d183a61784855ed
3
+ metadata.gz: 615b6608b86d4635ef984daf489d23fd7d2eda027ceba04df262593e03dc8abf
4
+ data.tar.gz: 3862e0ce3eb31e36b386c1be405fc840f67ed33b57e953d6f4e42d857f86230b
5
5
  SHA512:
6
- metadata.gz: 4f4e46beb7306b3658ad83032b71046837c4cf6981f0d3fd79c43b0fc948ca599ad14c805971c6cd8565eca03859c99ed2a3809fbcf6b9c9bb10056203e7b883
7
- data.tar.gz: b2d705a3019ed894f969bf005c5abe897d76d7375c956fff979e72c88a4635251176dc0fec022cd15e2d297d6b5038eeff57205d3ca7ae1fad6eed13384aa05b
6
+ metadata.gz: af1d17bb456373feed6325bb5b7168d1f980e8c33fe1b918b638da1b78d229ba564c1623fcc4a9e4ef1ad16feb5d737adf2a38fd93f949763ff18634e082b389
7
+ data.tar.gz: 9b29acf9e63db3bfec739df4add596c2f4e61f53d6f576d3af1018d80eaaedd749adf17d994c90a2daddadf636c9c0982acebfda1e86cf63891aca99c32e6c4c
@@ -5,6 +5,7 @@ module EmrOhspInterface
5
5
  class << self
6
6
  require 'csv'
7
7
  require 'rest-client'
8
+ require 'json'
8
9
  def settings
9
10
  file = File.read(Rails.root.join("db","idsr_metadata","idsr_ohsp_settings.json"))
10
11
  config = JSON.parse(file)
@@ -93,10 +94,11 @@ module EmrOhspInterface
93
94
  if request == nil
94
95
  response = send_data(collection,"weekly")
95
96
  end
97
+
96
98
  return collection
97
99
  end
98
- #idsr monthly report
99
100
 
101
+ #idsr monthly report
100
102
  def generate_monthly_idsr_report(request=nil,start_date=nil,end_date=nil)
101
103
  diag_map = settings["monthly_idsr_map"]
102
104
  epi_month = months_generator.first.first.strip
@@ -105,7 +107,12 @@ module EmrOhspInterface
105
107
  type = EncounterType.find_by_name 'Outpatient diagnosis'
106
108
  collection = {}
107
109
 
108
- special_indicators = ["Malaria in Pregnancy","HIV New Initiated on ART"]
110
+ special_indicators = ["Malaria in Pregnancy",
111
+ "HIV New Initiated on ART",
112
+ "Diarrhoea In Under 5",
113
+ "Malnutrition In Under 5",
114
+ "Underweight Newborns < 2500g in Under 5 Cases",
115
+ "Severe Pneumonia in under 5 cases"]
109
116
 
110
117
  diag_map.each do |key,value|
111
118
  options = {"<5yrs"=>nil,">=5yrs"=>nil}
@@ -172,6 +179,76 @@ module EmrOhspInterface
172
179
 
173
180
  collection[key] = options
174
181
  end
182
+
183
+ if key.eql?("Diarrhoea In Under 5")
184
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
185
+ AND encounter_type = ? AND value_coded IN (?)
186
+ AND concept_id IN(6543, 6542)',
187
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
188
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
189
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
190
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
191
+ select('encounter.encounter_type, obs.value_coded, p.*')
192
+
193
+ #under_five
194
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
195
+ collect{|record| record.person_id}
196
+ options["<5yrs"] = under_five
197
+ collection[key] = options
198
+ end
199
+
200
+
201
+ if key.eql?("Malnutrition In Under 5")
202
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
203
+ AND encounter_type = ? AND value_coded IN (?)
204
+ AND concept_id IN(6543, 6542)',
205
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
206
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
207
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
208
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
209
+ select('encounter.encounter_type, obs.value_coded, p.*')
210
+
211
+ #under_five
212
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
213
+ collect{|record| record.person_id}
214
+ options["<5yrs"] = under_five
215
+ collection[key] = options
216
+ end
217
+
218
+
219
+ if key.eql?("Underweight Newborns < 2500g in Under 5 Cases")
220
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
221
+ AND encounter_type = ? AND value_coded IN (?)
222
+ AND concept_id IN(6543, 6542)',
223
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
224
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
225
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
226
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
227
+ select('encounter.encounter_type, obs.value_coded, p.*')
228
+
229
+ #under_five
230
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
231
+ collect{|record| record.person_id}
232
+ options["<5yrs"] = under_five
233
+ collection[key] = options
234
+ end
235
+
236
+ if key.eql?("Severe Pneumonia in under 5 cases")
237
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
238
+ AND encounter_type = ? AND value_coded IN (?)
239
+ AND concept_id IN(6543, 6542)',
240
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
241
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
242
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
243
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
244
+ select('encounter.encounter_type, obs.value_coded, p.*')
245
+
246
+ #under_five
247
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
248
+ collect{|record| record.person_id}
249
+ options["<5yrs"] = under_five
250
+ collection[key] = options
251
+ end
175
252
  end
176
253
  end
177
254
  if request == nil
@@ -280,6 +357,47 @@ module EmrOhspInterface
280
357
  collection
281
358
  end
282
359
 
360
+ def generate_notifiable_disease_conditions_report(start_date=nil,end_date=nil)
361
+ diag_map = settings["notifiable_disease_conditions"]
362
+
363
+ start_date = Date.today.strftime("%Y-%m-%d") if start_date.nil?
364
+ end_date = Date.today.strftime("%Y-%m-%d") if end_date.nil?
365
+
366
+ type = EncounterType.find_by_name 'Outpatient diagnosis'
367
+ collection = {}
368
+ concept_name_for_sms_portal = {}
369
+
370
+ diag_map.each do |key,value|
371
+ options = {"<5yrs"=>nil,">=5yrs"=>nil}
372
+ concept_ids = ConceptName.where(name: value).collect{|cn| cn.concept_id}
373
+
374
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
375
+ AND encounter_type = ? AND value_coded IN (?)
376
+ AND concept_id IN(6543, 6542)',
377
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
378
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
379
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
380
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
381
+ select('encounter.encounter_type, obs.value_coded, p.*')
382
+
383
+ #under_five
384
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
385
+ collect{|record| record.person_id}
386
+ options["<5yrs"] = under_five
387
+ #above 5 years
388
+ over_five = data.select{|record| calculate_age(record["birthdate"]) >=5 }.\
389
+ collect{|record| record.person_id}
390
+
391
+ options[">=5yrs"] = over_five
392
+
393
+ collection[key] = options
394
+
395
+ concept_name_for_sms_portal[key] = concept_ids
396
+ end
397
+ send_data_to_sms_portal(collection, concept_name_for_sms_portal)
398
+ return collection
399
+ end
400
+
283
401
  # helper menthod
284
402
  def months_generator
285
403
  months = Hash.new
@@ -351,11 +469,11 @@ module EmrOhspInterface
351
469
  if !special.include?(key)
352
470
  option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
353
471
  "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
354
- "value"=>value["<5yrs"].size }
472
+ "value"=>value["<5yrs"].size } rescue {}
355
473
 
356
474
  option2 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
357
475
  "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[3],
358
- "value"=>value[">=5yrs"].size}
476
+ "value"=>value[">=5yrs"].size} rescue {}
359
477
 
360
478
  #fill data values array
361
479
  payload["dataValues"] << option1
@@ -365,25 +483,25 @@ module EmrOhspInterface
365
483
  when special[0]
366
484
  option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
367
485
  "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
368
- "value"=>value["<5yrs"].size }
486
+ "value"=>value["<5yrs"].size } rescue {}
369
487
 
370
488
  payload["dataValues"] << option1
371
489
  when special[1]
372
490
  option2 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
373
491
  "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[3],
374
- "value"=>value[">=5yrs"].size }
492
+ "value"=>value[">=5yrs"].size } rescue {}
375
493
 
376
494
  payload["dataValues"] << option2
377
495
  when special[2]
378
496
  option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
379
497
  "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
380
- "value"=>value["<5yrs"].size }
498
+ "value"=>value["<5yrs"].size } rescue {}
381
499
 
382
500
  payload["dataValues"] << option1
383
501
  when special[3]
384
502
  option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
385
503
  "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
386
- "value"=>value["<5yrs"].size}
504
+ "value"=>value["<5yrs"].size} rescue {}
387
505
 
388
506
  payload["dataValues"] << option1
389
507
  end
@@ -405,8 +523,41 @@ module EmrOhspInterface
405
523
  puts send
406
524
  end
407
525
 
526
+ def send_data_to_sms_portal(data, concept_name_collection)
527
+ conn2 = settings["sms_server"]
528
+ data = data.select {|k,v| v.select {|kk,vv| vv.length > 0}.length > 0}
529
+ payload = {
530
+ "email"=> conn2["user"],
531
+ "password" => conn2["pass"],
532
+ "emr_facility_id" => Location.current_health_center.id,
533
+ "emr_facility_name" => Location.current_health_center.name,
534
+ "payload" => data,
535
+ "concept_name_collection" => concept_name_collection
536
+ }
537
+
538
+
539
+
540
+ begin
541
+ response = RestClient::Request.execute(method: :post,
542
+ url: conn2["url"],
543
+ headers:{'Content-Type'=> 'application/json'},
544
+ payload: payload.to_json
545
+ )
546
+ rescue RestClient::ExceptionWithResponse => res
547
+ if res.class == RestClient::Forbidden
548
+ puts "error: #{res.class}"
549
+ end
550
+ end
551
+
552
+ if response.class != NilClass
553
+ if response.code == 200
554
+ puts "success: #{response}"
555
+ end
556
+ end
557
+
558
+ end
559
+
408
560
  end
409
561
  end
410
562
 
411
-
412
563
  end
data/config/routes.rb CHANGED
@@ -6,4 +6,12 @@ EmrOhspInterface::Engine.routes.draw do
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
8
  get '/generate_hmis_15_report', to: 'emr_ohsp_interface#generate_hmis_15_report'
9
+
10
+ # for the new crossplatform OPD system
11
+ get 'api/v1/get_lims_user', to: 'emr_lims_interface#get_user_info'
12
+ get 'api/v1/get_weeks', to: 'emr_ohsp_interface#weeks_generator'
13
+ get 'api/v1/get_months', to: 'emr_ohsp_interface#months_generator'
14
+ get 'api/v1/generate_weekly_idsr_report', to: 'emr_ohsp_interface#generate_weekly_idsr_report'
15
+ get 'api/v1/generate_monthly_idsr_report', to: 'emr_ohsp_interface#generate_monthly_idsr_report'
16
+ get 'api/v1/generate_hmis_15_report', to: 'emr_ohsp_interface#generate_hmis_15_report'
9
17
  end
@@ -1,3 +1,3 @@
1
1
  module EmrOhspInterface
2
- VERSION = '0.5.2'
2
+ VERSION = '1.0.1'
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.5.2
4
+ version: 1.0.1
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: 2022-01-06 00:00:00.000000000 Z
11
+ date: 2022-04-11 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.2.32
123
+ rubygems_version: 3.0.9
124
124
  signing_key:
125
125
  specification_version: 4
126
126
  summary: This in a gem that facilitates interfacing of EMR, One Health Surveillance