his_emr_api_lab 1.1.15 → 1.1.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/lab/orders_controller.rb +6 -3
- data/app/controllers/lab/tests_controller.rb +2 -1
- data/app/models/lab/lab_order.rb +0 -8
- data/app/services/lab/lims/api/rest_api.rb +4 -2
- data/app/services/lab/lims/pull_worker.rb +5 -5
- data/app/services/lab/lims/push_worker.rb +1 -1
- data/app/services/lab/orders_search_service.rb +2 -14
- data/app/services/lab/orders_service.rb +0 -1
- data/lib/lab/version.rb +1 -1
- data/lib/logger_multiplexor.rb +8 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1417f8496820741d5eb37f1d2ae95da6ffdb27cc3b434242d079f6780d7eaeec
|
4
|
+
data.tar.gz: 17bf60bd54605de176c26f87f7da8653789d1df101920814b354512d8cca3c68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c5722a094de688a6803de102553bdc928e29b28b208bf12f999a98e5d631cbc5b817c5982e5a1bc349a366263dcd3bd66ab2a1618a70b8d4ecbd8f2c86c0644
|
7
|
+
data.tar.gz: 8ed510173d514efcdf307cbb38d70fb4e25b19752bb95f1f20a0f4a0cdc6efd5b2d3cf5761648b8a5ac92d17072fb4a35bdbca0de929937ecccbe6525e30cfaf
|
@@ -8,14 +8,15 @@ module Lab
|
|
8
8
|
OrdersService.order_test(order_params)
|
9
9
|
end
|
10
10
|
|
11
|
+
orders.each { |order| Lab::PushOrderJob.perform_later(order.fetch(:order_id)) }
|
12
|
+
|
11
13
|
render json: orders, status: :created
|
12
14
|
end
|
13
15
|
|
14
16
|
def update
|
15
17
|
specimen = params.require(:specimen).permit(:concept_id)
|
16
|
-
|
17
|
-
order
|
18
|
-
force_update: params[:force_update])
|
18
|
+
order = OrdersService.update_order(params[:id], specimen: specimen, force_update: params[:force_update])
|
19
|
+
Lab::PushOrderJob.perform_later(order.fetch(:order_id))
|
19
20
|
|
20
21
|
render json: order
|
21
22
|
end
|
@@ -23,11 +24,13 @@ module Lab
|
|
23
24
|
def index
|
24
25
|
filters = params.permit(%i[patient_id accession_number date status])
|
25
26
|
|
27
|
+
Lab::UpdatePatientOrdersJob.perform_later(filters[:patient_id]) if filters[:patient_id]
|
26
28
|
render json: OrdersSearchService.find_orders(filters)
|
27
29
|
end
|
28
30
|
|
29
31
|
def destroy
|
30
32
|
OrdersService.void_order(params[:id], params[:reason])
|
33
|
+
Lab::VoidOrderJob.perform_later(params[:id])
|
31
34
|
|
32
35
|
render status: :no_content
|
33
36
|
end
|
@@ -14,7 +14,8 @@ class Lab::TestsController < ::ApplicationController
|
|
14
14
|
order_id, test_concepts = test_params.require(%i[order_id tests])
|
15
15
|
date = test_params[:date] || Date.today
|
16
16
|
|
17
|
-
tests = service.create_tests(
|
17
|
+
tests = service.create_tests(Lab::LabOrder.find(order_id), date, test_concepts)
|
18
|
+
Lab::PushOrderJob.perform_later(order_id)
|
18
19
|
|
19
20
|
render json: tests, status: :created
|
20
21
|
end
|
data/app/models/lab/lab_order.rb
CHANGED
@@ -44,19 +44,11 @@ module Lab
|
|
44
44
|
scope :drawn, -> { where.not(concept_id: ConceptName.where(name: 'Unknown').select(:concept_id)) }
|
45
45
|
scope :not_drawn, -> { where(concept_id: ConceptName.where(name: 'Unknown').select(:concept_id)) }
|
46
46
|
|
47
|
-
after_commit :queue_lims_push
|
48
|
-
|
49
47
|
def self.prefetch_relationships
|
50
48
|
includes(:reason_for_test,
|
51
49
|
:requesting_clinician,
|
52
50
|
:target_lab,
|
53
51
|
tests: [:result])
|
54
52
|
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def queue_lims_push
|
59
|
-
Lab::PushOrderJob.perform_later(order_id)
|
60
|
-
end
|
61
53
|
end
|
62
54
|
end
|
@@ -377,7 +377,7 @@ class Lab::Lims::Api::RestApi
|
|
377
377
|
orders_without_specimen(patient_id).each { |order| orders[order.order_id] = order }
|
378
378
|
orders_without_results(patient_id).each { |order| orders[order.order_id] = order }
|
379
379
|
orders_without_reason(patient_id).each { |order| orders[order.order_id] = order }
|
380
|
-
|
380
|
+
|
381
381
|
orders.values
|
382
382
|
end
|
383
383
|
|
@@ -394,8 +394,10 @@ class Lab::Lims::Api::RestApi
|
|
394
394
|
|
395
395
|
def orders_without_results(patient_id = nil)
|
396
396
|
Rails.logger.debug('Looking for orders without a result')
|
397
|
+
# Lab::OrdersSearchService.find_orders_without_results(patient_id: patient_id)
|
398
|
+
# .where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id).where("pulled_at IS NULL"))
|
397
399
|
Lab::OrdersSearchService.find_orders_without_results(patient_id: patient_id)
|
398
|
-
|
400
|
+
.where(order_id: Lab::LimsOrderMapping.select(:order_id))
|
399
401
|
end
|
400
402
|
|
401
403
|
def orders_without_reason(patient_id = nil)
|
@@ -45,7 +45,7 @@ module Lab
|
|
45
45
|
end
|
46
46
|
|
47
47
|
update_last_seq(context.current_seq)
|
48
|
-
rescue DuplicateNHID
|
48
|
+
rescue Lab::Lims::DuplicateNHID
|
49
49
|
logger.warn("Failed to import order due to duplicate patient NHID: #{order_dto[:patient][:id]}")
|
50
50
|
save_failed_import(order_dto, "Duplicate local patient NHID: #{order_dto[:patient][:id]}")
|
51
51
|
rescue MissingAccessionNumber
|
@@ -102,7 +102,7 @@ module Lab
|
|
102
102
|
.distinct(:patient_id)
|
103
103
|
.all
|
104
104
|
|
105
|
-
raise DuplicateNHID, "Duplicate National Health ID: #{nhid}" if patients.size > 1
|
105
|
+
raise Lab::Lims::DuplicateNHID, "Duplicate National Health ID: #{nhid}" if patients.size > 1
|
106
106
|
|
107
107
|
patients.first
|
108
108
|
end
|
@@ -182,14 +182,14 @@ module Lab
|
|
182
182
|
|
183
183
|
def update_results(order, lims_results)
|
184
184
|
logger.debug("Updating results for order ##{order[:accession_number]}: #{lims_results}")
|
185
|
-
|
185
|
+
|
186
186
|
lims_results.each do |test_name, test_results|
|
187
187
|
test = find_test(order['id'], test_name)
|
188
188
|
unless test
|
189
189
|
logger.warn("Couldn't find test, #{test_name}, in order ##{order[:id]}")
|
190
190
|
next
|
191
191
|
end
|
192
|
-
|
192
|
+
|
193
193
|
next if test.result || test_results['results'].blank?
|
194
194
|
|
195
195
|
measures = test_results['results'].map do |indicator, value|
|
@@ -198,7 +198,7 @@ module Lab
|
|
198
198
|
|
199
199
|
measure
|
200
200
|
end
|
201
|
-
|
201
|
+
|
202
202
|
measures = measures.compact
|
203
203
|
next if measures.empty?
|
204
204
|
|
@@ -98,7 +98,7 @@ module Lab
|
|
98
98
|
|
99
99
|
Lab::LabOrder.left_joins(:results)
|
100
100
|
.where('orders.discontinued_date > :last_updated
|
101
|
-
OR obs.date_created >
|
101
|
+
OR obs.date_created > orders.date_created',
|
102
102
|
last_updated: last_updated)
|
103
103
|
.group('orders.order_id')
|
104
104
|
.order(discontinued_date: :desc, date_created: :desc)
|
@@ -5,14 +5,6 @@ module Lab
|
|
5
5
|
module OrdersSearchService
|
6
6
|
class << self
|
7
7
|
def find_orders(filters)
|
8
|
-
# A bit of hack-ish solution to have a patient's orders updated upon
|
9
|
-
# scanning of a patient. Done in this way to deal with LIMS' lack of
|
10
|
-
# a notification system for lab order updates. We are limited to polling
|
11
|
-
# for updates on a per order basis.
|
12
|
-
if filters[:patient_id]
|
13
|
-
Lab::UpdatePatientOrdersJob.perform_later(filters[:patient_id])
|
14
|
-
end
|
15
|
-
|
16
8
|
extra_filters = pop_filters(filters, :date, :end_date, :status)
|
17
9
|
|
18
10
|
orders = Lab::LabOrder.prefetch_relationships
|
@@ -39,13 +31,9 @@ module Lab
|
|
39
31
|
date = date&.to_date
|
40
32
|
end_date = end_date&.to_date
|
41
33
|
|
42
|
-
if date && end_date
|
43
|
-
return orders.where('start_date BETWEEN ? AND ?', date, end_date + 1.day)
|
44
|
-
end
|
34
|
+
return orders.where('start_date BETWEEN ? AND ?', date, end_date + 1.day) if date && end_date
|
45
35
|
|
46
|
-
if date
|
47
|
-
return orders.where('start_date BETWEEN ? AND ?', date, date + 1.day)
|
48
|
-
end
|
36
|
+
return orders.where('start_date BETWEEN ? AND ?', date, date + 1.day) if date
|
49
37
|
|
50
38
|
return orders.where('start_date < ?', end_date + 1.day) if end_date
|
51
39
|
|
data/lib/lab/version.rb
CHANGED
data/lib/logger_multiplexor.rb
CHANGED
@@ -23,10 +23,16 @@ class LoggerMultiplexor
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def method_missing(method_name, *args)
|
26
|
-
|
26
|
+
if respond_to_missing?(method_name)
|
27
|
+
@loggers.each { |logger| logger.send(method_name, *args) }
|
28
|
+
else
|
29
|
+
super
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
def respond_to_missing?(method_name)
|
30
|
-
@loggers.all?
|
34
|
+
@loggers.all? do |logger|
|
35
|
+
logger.respond_to?(method_name)
|
36
|
+
end
|
31
37
|
end
|
32
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: his_emr_api_lab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elizabeth Glaser Pediatric Foundation Malawi
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: couchrest
|
@@ -319,7 +319,7 @@ licenses:
|
|
319
319
|
- MIT
|
320
320
|
metadata:
|
321
321
|
source_code_uri: https://github.com/EGPAFMalawiHIS/his_emr_api_lab
|
322
|
-
post_install_message:
|
322
|
+
post_install_message:
|
323
323
|
rdoc_options: []
|
324
324
|
require_paths:
|
325
325
|
- lib
|
@@ -334,8 +334,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
334
334
|
- !ruby/object:Gem::Version
|
335
335
|
version: '0'
|
336
336
|
requirements: []
|
337
|
-
rubygems_version: 3.0.
|
338
|
-
signing_key:
|
337
|
+
rubygems_version: 3.0.9
|
338
|
+
signing_key:
|
339
339
|
specification_version: 4
|
340
340
|
summary: Lab extension for the HIS-EMR-API
|
341
341
|
test_files: []
|