his_emr_api_lab 1.0.5 → 1.1.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 +4 -4
- data/README.md +20 -1
- data/app/jobs/lab/update_patient_orders_job.rb +20 -0
- data/app/jobs/lab/void_order_job.rb +18 -0
- data/app/models/lab/lab_order.rb +4 -0
- data/app/serializers/lab/lab_order_serializer.rb +7 -1
- data/app/services/lab/lims/api/rest_api.rb +344 -0
- data/app/services/lab/lims/api/ws_api.rb +121 -0
- data/app/services/lab/lims/config.rb +45 -8
- data/app/services/lab/lims/migrator.rb +12 -9
- data/app/services/lab/lims/order_serializer.rb +31 -8
- data/app/services/lab/lims/pull_worker.rb +295 -0
- data/app/services/lab/lims/push_worker.rb +103 -0
- data/app/services/lab/lims/utils.rb +6 -1
- data/app/services/lab/lims/worker.rb +40 -317
- data/app/services/lab/orders_search_service.rb +18 -0
- data/app/services/lab/orders_service.rb +4 -2
- data/lib/lab/version.rb +1 -1
- metadata +22 -3
- data/app/services/lab/lims/failed_imports.rb +0 -33
@@ -5,6 +5,14 @@ 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
|
+
|
8
16
|
extra_filters = pop_filters(filters, :date, :end_date, :status)
|
9
17
|
|
10
18
|
orders = Lab::LabOrder.prefetch_relationships
|
@@ -17,6 +25,14 @@ module Lab
|
|
17
25
|
orders.map { |order| Lab::LabOrderSerializer.serialize_order(order) }
|
18
26
|
end
|
19
27
|
|
28
|
+
def find_orders_without_results(patient_id: nil)
|
29
|
+
query = Lab::LabOrder.where
|
30
|
+
.not(order_id: Lab::LabResult.all.select(:order_id))
|
31
|
+
query = query.where(patient_id: patient_id) if patient_id
|
32
|
+
|
33
|
+
query
|
34
|
+
end
|
35
|
+
|
20
36
|
def filter_orders_by_date(orders, date: nil, end_date: nil)
|
21
37
|
date = date&.to_date
|
22
38
|
end_date = end_date&.to_date
|
@@ -53,6 +69,8 @@ module Lab
|
|
53
69
|
popped_params[filter.to_sym] = params.delete(filter)
|
54
70
|
end
|
55
71
|
end
|
72
|
+
|
73
|
+
def fetch_results(order); end
|
56
74
|
end
|
57
75
|
end
|
58
76
|
end
|
@@ -78,7 +78,7 @@ module Lab
|
|
78
78
|
order.update!(concept_id: specimen_id,
|
79
79
|
discontinued: true,
|
80
80
|
discontinued_by: User.current.user_id,
|
81
|
-
discontinued_date: params[:date]&.to_date ||
|
81
|
+
discontinued_date: params[:date]&.to_date || Time.now,
|
82
82
|
discontinued_reason_non_coded: 'Sample drawn/updated')
|
83
83
|
Lab::LabOrderSerializer.serialize_order(order)
|
84
84
|
end
|
@@ -92,8 +92,10 @@ module Lab
|
|
92
92
|
order.target_lab&.void(reason)
|
93
93
|
|
94
94
|
order.tests.each { |test| test.void(reason) }
|
95
|
+
voided = order.void(reason)
|
96
|
+
Lab::VoidOrderJob.perform_later(order_id)
|
95
97
|
|
96
|
-
|
98
|
+
voided
|
97
99
|
end
|
98
100
|
|
99
101
|
private
|
data/lib/lab/version.rb
CHANGED
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.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elizabeth Glaser Pediatric Foundation Malawi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: couchrest
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: 5.2.4.3
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: socket.io-client-simple
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.2.1
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.2.1
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: bcrypt
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,6 +248,8 @@ files:
|
|
234
248
|
- app/controllers/lab/test_types_controller.rb
|
235
249
|
- app/controllers/lab/tests_controller.rb
|
236
250
|
- app/jobs/lab/application_job.rb
|
251
|
+
- app/jobs/lab/update_patient_orders_job.rb
|
252
|
+
- app/jobs/lab/void_order_job.rb
|
237
253
|
- app/mailers/lab/application_mailer.rb
|
238
254
|
- app/models/lab/application_record.rb
|
239
255
|
- app/models/lab/lab_accession_number_counter.rb
|
@@ -251,12 +267,15 @@ files:
|
|
251
267
|
- app/services/lab/labelling_service/order_label.rb
|
252
268
|
- app/services/lab/lims/api/couchdb_api.rb
|
253
269
|
- app/services/lab/lims/api/mysql_api.rb
|
270
|
+
- app/services/lab/lims/api/rest_api.rb
|
271
|
+
- app/services/lab/lims/api/ws_api.rb
|
254
272
|
- app/services/lab/lims/config.rb
|
255
273
|
- app/services/lab/lims/exceptions.rb
|
256
|
-
- app/services/lab/lims/failed_imports.rb
|
257
274
|
- app/services/lab/lims/migrator.rb
|
258
275
|
- app/services/lab/lims/order_dto.rb
|
259
276
|
- app/services/lab/lims/order_serializer.rb
|
277
|
+
- app/services/lab/lims/pull_worker.rb
|
278
|
+
- app/services/lab/lims/push_worker.rb
|
260
279
|
- app/services/lab/lims/utils.rb
|
261
280
|
- app/services/lab/lims/worker.rb
|
262
281
|
- app/services/lab/metadata.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative './order_dto'
|
4
|
-
|
5
|
-
module Lab
|
6
|
-
module Lims
|
7
|
-
##
|
8
|
-
# Manage LIMS orders that failed to import
|
9
|
-
module FailedImports
|
10
|
-
class << self
|
11
|
-
##
|
12
|
-
# Retrieve all imports that failed
|
13
|
-
def failed_imports(start_id = 0, limit = 20)
|
14
|
-
Lab::LimsFailedImport.where('id >= ?', start_id).limit(limit)
|
15
|
-
end
|
16
|
-
|
17
|
-
##
|
18
|
-
# Forcefully imports a failed import into a patient
|
19
|
-
def force_import(failed_import_id, _patient_id)
|
20
|
-
failed_import = Lab::LimsFailedImport.find(failed_import_id)
|
21
|
-
order_dto = Lab::Lims::OrderDTO.new(lims_api.find_order(failed_import.lims_id))
|
22
|
-
byebug
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def lims_api
|
28
|
-
@lims_api ||= Lab::Lims::Api.new
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|