emr_ohsp_interface 0.2.0 → 0.3.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: 83c80ec468458588f59780732a3f9cfd5edddeb9f1a6d3b4bec35b6ba3c6e68e
4
- data.tar.gz: 3685b4e374487f02b7dee2326a099f982610d111c0c554852dd392e05b05c3f5
3
+ metadata.gz: 6f6553499e58adb8f290bfa2ff597f0c57ca58412b1b7430d2ab8d33494c89b0
4
+ data.tar.gz: c603ea2729e987c6a85a091f0bd9eaf63b2671e20b9218ebac5edfb706c42ad5
5
5
  SHA512:
6
- metadata.gz: 76cd0bd019b31b6a3312aa95632ef776c52e00d0693a4f8ee8c2eb7c8abba52a9cdc4dd7efa99ed029afb24b1930dc664fbcaa8283a9dce960397594558711b8
7
- data.tar.gz: 9f16e3206cffd4c5e09f3ae0f517d2ecc132efa65fde6933ae57bd46d00139f235bd8d7cc2b89bd0a8596f0831b123ad833ba7ee2be86afddb75d93933982100
6
+ metadata.gz: 837e42141f3d58d61da5780a4693f834edfbcb40715717ffa858ee20feac78a4e762f2d2265f1b0b7f0c588222d95e2ddaf392cb06c0cdd9555c69fc43227551
7
+ data.tar.gz: 3e15c6d814d1277208b96ee5084562016cad88ce995f6434c0644a42925dc7620ffec7dfc0e8db285d479b0e97670a8fc0f6f1e54cf66f537eb659e308004b11
@@ -2,8 +2,17 @@ class EmrOhspInterface::EmrOhspInterfaceController < ::ApplicationController
2
2
  def weeks_generator
3
3
  render json: service.weeks_generator();
4
4
  end
5
+
5
6
  def months_generator
6
7
  render json: service.months_generator();
8
+ end
9
+
10
+ def generate_weekly_idsr_report
11
+ render json: service.generate_weekly_idsr_report(params[:request],params[:start_date],params[:end_date]);
12
+ end
13
+
14
+ def generate_monthly_idsr_report
15
+ render json: service.generate_monthly_idsr_report(params[:request],params[:start_date],params[:end_date]);
7
16
  end
8
17
 
9
18
  def service
@@ -23,13 +23,14 @@ module EmrOhspInterface
23
23
  result = []
24
24
  #["waoQ016uOz1", "r1AT49VBKqg", "FPN4D0s6K3m", "zE8k2BtValu"]
25
25
  # ds, de_id , <5yrs , >=5yrs
26
+ puts de
26
27
  if type == "weekly"
27
28
  file = File.open(Rails.root.join("db","idsr_metadata","idsr_weekly_ohsp_ids.csv"))
28
29
  else
29
30
  file = File.open(Rails.root.join("db","idsr_metadata","idsr_monthly_ohsp_ids.csv"))
30
31
  end
31
32
  data = CSV.parse(file,headers: true)
32
- row = data.select{|row| row["Data Element Name"].strip.downcase.eql?(de.downcase)}
33
+ row = data.select{|row| row["Data Element Name"].strip.downcase.eql?(de.downcase.strip)}
33
34
  ohsp_ds_id = row[0]["Data Set ID"]
34
35
  result << ohsp_ds_id
35
36
  ohsp_de_id = row[0]["UID"]
@@ -52,13 +53,13 @@ module EmrOhspInterface
52
53
  data_set_id = data.first["Data Set ID"]
53
54
  end
54
55
 
55
- def generate_weekly_idsr_report()
56
+ def generate_weekly_idsr_report(request=nil,start_date=nil,end_date=nil)
56
57
 
57
58
  diag_map = settings["weekly_idsr_map"]
58
59
 
59
60
  epi_week = weeks_generator.last.first.strip
60
- start_date = weeks_generator.last.last.split("to")[0].strip
61
- end_date = weeks_generator.last.last.split("to")[1].strip
61
+ start_date = weeks_generator.last.last.split("to")[0].strip if start_date.nil?
62
+ end_date = weeks_generator.last.last.split("to")[1].strip if end_date.nil?
62
63
 
63
64
  #pull the data
64
65
  type = EncounterType.find_by_name 'Outpatient diagnosis'
@@ -89,11 +90,94 @@ module EmrOhspInterface
89
90
 
90
91
  collection[key] = options
91
92
  end
92
-
93
- response = send_data(collection,"weekly")
93
+ if request == nil
94
+ response = send_data(collection,"weekly")
95
+ end
96
+ return collection
94
97
  end
98
+ #idsr monthly report
99
+
100
+ def generate_monthly_idsr_report(request=nil,start_date=nil,end_date=nil)
101
+ diag_map = settings["monthly_idsr_map"]
102
+ epi_month = months_generator.first.first.strip
103
+ start_date = months_generator.first.last[1].split("to").first.strip if start_date.nil?
104
+ end_date = months_generator.first.last[1].split("to").last.strip if end_date.nil?
105
+ type = EncounterType.find_by_name 'Outpatient diagnosis'
106
+ collection = {}
107
+
108
+ special_indicators = ["Malaria in Pregnancy","HIV New Initiated on ART"]
95
109
 
96
- def generate_monthly_idsr_report()
110
+ diag_map.each do |key,value|
111
+ options = {"<5yrs"=>nil,">=5yrs"=>nil}
112
+ concept_ids = ConceptName.where(name: value).collect{|cn| cn.concept_id}
113
+ if !special_indicators.include?(key)
114
+ data = Encounter.where('encounter_datetime BETWEEN ? AND ?
115
+ AND encounter_type = ? AND value_coded IN (?)
116
+ AND concept_id IN(6543, 6542)',
117
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
118
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
119
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
120
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
121
+ select('encounter.encounter_type, obs.value_coded, p.*')
122
+
123
+ #under_five
124
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
125
+ collect{|record| record.person_id}
126
+ options["<5yrs"] = under_five
127
+ #above 5 years
128
+ over_five = data.select{|record| calculate_age(record["birthdate"]) >=5 }.\
129
+ collect{|record| record.person_id}
130
+
131
+ options[">=5yrs"] = over_five
132
+
133
+ collection[key] = options
134
+ else
135
+ if key.eql?("Malaria in Pregnancy")
136
+ mal_patient_id = Encounter.where('encounter_datetime BETWEEN ? AND ?
137
+ AND encounter_type = ? AND value_coded IN (?)
138
+ AND concept_id IN(6543, 6542)',
139
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
140
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
141
+ joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
142
+ INNER JOIN person p ON p.person_id = encounter.patient_id').\
143
+ select('encounter.encounter_type, obs.value_coded, p.*')
144
+
145
+ mal_patient_id= mal_patient_id.collect{|record| record.person_id}
146
+ #find those that are pregnant
147
+ preg = Observation.where(["concept_id = 6131 AND obs_datetime
148
+ BETWEEN ? AND ? AND person_id IN(?)
149
+ AND value_coded =1065",
150
+ start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
151
+ end_date.to_date.strftime('%Y-%m-%d 23:59:59'),mal_patient_id ])
152
+
153
+ options[">=5yrs"] = preg.collect{|record| record.person_id} rescue 0
154
+ collection[key] = options
155
+ end
156
+
157
+ if key.eql?("HIV New Initiated on ART")
158
+ data = ActiveRecord::Base.connection.select_all(
159
+ "SELECT * FROM temp_earliest_start_date
160
+ WHERE date_enrolled BETWEEN '#{start_date}' AND '#{end_date}'
161
+ AND date_enrolled = earliest_start_date
162
+ GROUP BY patient_id" ).to_hash
163
+
164
+ under_five = data.select{|record| calculate_age(record["birthdate"]) < 5 }.\
165
+ collect{|record| record["patient_id"]}
166
+
167
+ over_five = data.select{|record| calculate_age(record["birthdate"]) >=5 }.\
168
+ collect{|record| record["patient_id"]}
169
+
170
+ options["<5yrs"] = under_five
171
+ options[">=5yrs"] = over_five
172
+
173
+ collection[key] = options
174
+ end
175
+ end
176
+ end
177
+ if request == nil
178
+ response = send_data(collection,"monthly")
179
+ end
180
+ return collection
97
181
  end
98
182
 
99
183
  # helper menthod
@@ -160,24 +244,56 @@ module EmrOhspInterface
160
244
  "orgUnit"=> get_ohsp_facility_id,
161
245
  "dataValues"=> []
162
246
  }
247
+ special = ["Severe Pneumonia in under 5 cases","Malaria in Pregnancy",
248
+ "Underweight Newborns < 2500g in Under 5 Cases","Diarrhoea In Under 5"]
163
249
 
164
250
  data.each do |key,value|
165
- option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
166
- "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
167
- "value"=>value["<5yrs"].size }
168
-
169
- option2 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
170
- "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[3],
171
- "value"=>value[">=5yrs"].size}
172
-
173
- #fill data values array
174
- payload["dataValues"] << option1
175
- payload["dataValues"] << option2
251
+ if !special.include?(key)
252
+ option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
253
+ "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
254
+ "value"=>value["<5yrs"].size }
255
+
256
+ option2 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
257
+ "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[3],
258
+ "value"=>value[">=5yrs"].size}
259
+
260
+ #fill data values array
261
+ payload["dataValues"] << option1
262
+ payload["dataValues"] << option2
263
+ else
264
+ case key
265
+ when special[0]
266
+ option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
267
+ "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
268
+ "value"=>value["<5yrs"].size }
269
+
270
+ payload["dataValues"] << option1
271
+ when special[1]
272
+ option2 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
273
+ "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[3],
274
+ "value"=>value[">=5yrs"].size }
275
+
276
+ payload["dataValues"] << option2
277
+ when special[2]
278
+ option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
279
+ "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
280
+ "value"=>value["<5yrs"].size }
281
+
282
+ payload["dataValues"] << option1
283
+ when special[3]
284
+ option1 = {"dataElement"=>get_ohsp_de_ids(key,type)[1],
285
+ "categoryOptionCombo"=> get_ohsp_de_ids(key,type)[2],
286
+ "value"=>value["<5yrs"].size}
287
+
288
+ payload["dataValues"] << option1
289
+ end
290
+ end
176
291
  end
177
292
 
178
- puts "now sending these values: #{payload.to_s}"
293
+ puts "now sending these values: #{payload.to_json}"
179
294
  url = "#{conn["url"]}/api/dataValueSets"
180
295
  puts url
296
+ puts "pushing #{type} IDSR Reports"
181
297
  send = RestClient::Request.execute(method: :post,
182
298
  url: url,
183
299
  headers:{'Content-Type'=> 'application/json'},
data/config/routes.rb CHANGED
@@ -2,4 +2,6 @@ EmrOhspInterface::Engine.routes.draw do
2
2
  resources :radiology, path: 'api/v1/emr_ohsp_interface'
3
3
  get '/get_weeks', to: 'emr_ohsp_interface#weeks_generator'
4
4
  get '/get_months', to: 'emr_ohsp_interface#months_generator'
5
+ get '/generate_weekly_idsr_report', to: 'emr_ohsp_interface#generate_weekly_idsr_report'
6
+ get '/generate_monthly_idsr_report', to: 'emr_ohsp_interface#generate_monthly_idsr_report'
5
7
  end
@@ -1,3 +1,3 @@
1
1
  module EmrOhspInterface
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Manda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-14 00:00:00.000000000 Z
11
+ date: 2021-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails