emr_ohsp_interface 0.5.1 → 1.0.0

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: 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