emr_ohsp_interface 0.5.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b0a446ac067b3e70a193019ee45c89339716467f917d8a370bcbb1a223b75b6
4
- data.tar.gz: b281e439cc147418468af783a1896940f5aa9d5311c85616dc6f57d1945cdfc2
3
+ metadata.gz: 9b90822c9bd76ac63ee6f58ca9310cba51be673f2934909cd421861f5d55fed5
4
+ data.tar.gz: d74fedb9aa593757a009b1ee0d11b62fa390a3b12ff2b4f0c93a95685465c525
5
5
  SHA512:
6
- metadata.gz: a76ba192164398c65368d1b9ac19b67b74696e53f1f2df83cb8155f2f50cd496f9a98d512166c8afdc61ccae88a4c14bef99b5f932072e9b5e8750be364640c8
7
- data.tar.gz: c225131968d0b931b1e15c0c8be724d2e7e754690c998426d186aa9517bac464a99e4b75af4eae5ef012d2939ee993f8bb240f8e37e36c551eb67a2500eb07d6
6
+ metadata.gz: 3bcb9d8be53adcfd4e650073191521275e3ce8a85a8cef62110c1b755b6443bb58791e91d6cefc4ac969fe3390aa05996f6c81649995c3effc213cc80b78c40e
7
+ data.tar.gz: 8db4a502f87dc78fefba91398c1b71917f7750ad1e9248be19d50476084bfc34e40cf42c870138959c9e48015122b7bb06720fccc46b120e81568f2349dc693f
@@ -16,7 +16,7 @@ class EmrOhspInterface::EmrOhspInterfaceController < ::ApplicationController
16
16
  end
17
17
 
18
18
  def generate_hmis_15_report
19
- render json: service.generate_hmis_15_report(params[:request],params[:start_date],params[:end_date]);
19
+ render json: service.generate_hmis_15_report(params[:start_date],params[:end_date]);
20
20
  end
21
21
 
22
22
  def service
@@ -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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module EmrOhspInterface
2
- VERSION = '0.5.1'
2
+ VERSION = '1.0.0'
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.1
4
+ version: 1.0.0
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-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails