emr_ohsp_interface 0.5.0 → 0.5.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b0a446ac067b3e70a193019ee45c89339716467f917d8a370bcbb1a223b75b6
|
4
|
+
data.tar.gz: b281e439cc147418468af783a1896940f5aa9d5311c85616dc6f57d1945cdfc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a76ba192164398c65368d1b9ac19b67b74696e53f1f2df83cb8155f2f50cd496f9a98d512166c8afdc61ccae88a4c14bef99b5f932072e9b5e8750be364640c8
|
7
|
+
data.tar.gz: c225131968d0b931b1e15c0c8be724d2e7e754690c998426d186aa9517bac464a99e4b75af4eae5ef012d2939ee993f8bb240f8e37e36c551eb67a2500eb07d6
|
@@ -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[:request],params[:start_date],params[:end_date]);
|
20
|
+
end
|
17
21
|
|
18
22
|
def service
|
19
23
|
EmrOhspInterface::EmrOhspInterfaceService
|
@@ -180,6 +180,106 @@ module EmrOhspInterface
|
|
180
180
|
return collection
|
181
181
|
end
|
182
182
|
|
183
|
+
def generate_hmis_15_report(start_date=nil,end_date=nil)
|
184
|
+
|
185
|
+
diag_map = settings["hmis_15_map"]
|
186
|
+
|
187
|
+
#pull the data
|
188
|
+
type = EncounterType.find_by_name 'Outpatient diagnosis'
|
189
|
+
collection = {}
|
190
|
+
|
191
|
+
special_indicators = ["Malaria - new cases (under 5)",
|
192
|
+
"Malaria - new cases (5 & over)",
|
193
|
+
"HIV confirmed positive (15-49 years) new cases"
|
194
|
+
]
|
195
|
+
|
196
|
+
diag_map.each do |key,value|
|
197
|
+
options = {"ids"=>nil}
|
198
|
+
concept_ids = ConceptName.where(name: value).collect{|cn| cn.concept_id}
|
199
|
+
|
200
|
+
if !special_indicators.include?(key)
|
201
|
+
data = Encounter.where('encounter_datetime BETWEEN ? AND ?
|
202
|
+
AND encounter_type = ? AND value_coded IN (?)
|
203
|
+
AND concept_id IN(6543, 6542)',
|
204
|
+
start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
|
205
|
+
end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
|
206
|
+
joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
|
207
|
+
INNER JOIN person p ON p.person_id = encounter.patient_id').\
|
208
|
+
select('encounter.encounter_type, obs.value_coded, p.*')
|
209
|
+
|
210
|
+
# #under_five
|
211
|
+
# under_five = data.select{|record| calculate_age(record["birthdate"]) < 5}.\
|
212
|
+
# collect{|record| record.person_id}
|
213
|
+
# options["<5yrs"] = under_five
|
214
|
+
# #above 5 years
|
215
|
+
# over_five = data.select{|record| calculate_age(record["birthdate"]) >=5 }.\
|
216
|
+
# collect{|record| record.person_id}
|
217
|
+
|
218
|
+
# options[">=5yrs"] = over_five
|
219
|
+
|
220
|
+
all = data.collect{|record| record.person_id}
|
221
|
+
|
222
|
+
|
223
|
+
options["ids"] = all
|
224
|
+
|
225
|
+
collection[key] = options
|
226
|
+
else
|
227
|
+
if key.eql?("Malaria - new cases (under 5)")
|
228
|
+
data = Encounter.where('encounter_datetime BETWEEN ? AND ?
|
229
|
+
AND encounter_type = ? AND value_coded IN (?)
|
230
|
+
AND concept_id IN(6543, 6542)',
|
231
|
+
start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
|
232
|
+
end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
|
233
|
+
joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
|
234
|
+
INNER JOIN person p ON p.person_id = encounter.patient_id').\
|
235
|
+
select('encounter.encounter_type, obs.value_coded, p.*')
|
236
|
+
|
237
|
+
under_five = data.select{|record| calculate_age(record["birthdate"]) < 5 }.\
|
238
|
+
collect{|record| record["person_id"]}
|
239
|
+
|
240
|
+
options["ids"] = under_five
|
241
|
+
|
242
|
+
collection[key] = options
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
if key.eql?("Malaria - new cases (5 & over)")
|
247
|
+
data = Encounter.where('encounter_datetime BETWEEN ? AND ?
|
248
|
+
AND encounter_type = ? AND value_coded IN (?)
|
249
|
+
AND concept_id IN(6543, 6542)',
|
250
|
+
start_date.to_date.strftime('%Y-%m-%d 00:00:00'),
|
251
|
+
end_date.to_date.strftime('%Y-%m-%d 23:59:59'),type.id,concept_ids).\
|
252
|
+
joins('INNER JOIN obs ON obs.encounter_id = encounter.encounter_id
|
253
|
+
INNER JOIN person p ON p.person_id = encounter.patient_id').\
|
254
|
+
select('encounter.encounter_type, obs.value_coded, p.*')
|
255
|
+
|
256
|
+
over_and_five = data.select{|record| calculate_age(record["birthdate"]) >= 5 }.\
|
257
|
+
collect{|record| record["person_id"]}
|
258
|
+
|
259
|
+
options["ids"] = over_and_five
|
260
|
+
|
261
|
+
collection[key] = options
|
262
|
+
end
|
263
|
+
|
264
|
+
if key.eql?("HIV confirmed positive (15-49 years) new cases")
|
265
|
+
data = ActiveRecord::Base.connection.select_all(
|
266
|
+
"SELECT * FROM temp_earliest_start_date
|
267
|
+
WHERE date_enrolled BETWEEN '#{start_date}' AND '#{end_date}'
|
268
|
+
AND date_enrolled = earliest_start_date
|
269
|
+
GROUP BY patient_id" ).to_hash
|
270
|
+
|
271
|
+
over_and_15_49 = data.select{|record| calculate_age(record["birthdate"]) >= 15 && calculate_age(record["birthdate"]) <=49 }.\
|
272
|
+
collect{|record| record["patient_id"]}
|
273
|
+
|
274
|
+
options["ids"] = over_and_15_49
|
275
|
+
|
276
|
+
collection[key] = options
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
collection
|
281
|
+
end
|
282
|
+
|
183
283
|
# helper menthod
|
184
284
|
def months_generator
|
185
285
|
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.5.
|
4
|
+
version: 0.5.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:
|
11
|
+
date: 2022-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|