his_emr_api_lab 2.1.8.4 → 2.1.8.6
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/app/jobs/lab/process_lab_result_job.rb +1 -1
- data/app/serializers/lab/lab_order_serializer.rb +2 -1
- data/app/services/lab/acknowledgement_service.rb +8 -4
- data/app/services/lab/concepts_service.rb +12 -7
- data/app/services/lab/lims/acknowledgement_worker.rb +5 -3
- data/app/services/lab/lims/api/rest_api.rb +15 -11
- data/app/services/lab/lims/order_serializer.rb +1 -0
- data/app/services/lab/lims/pull_worker.rb +4 -3
- data/app/services/lab/lims/push_worker.rb +22 -12
- data/app/services/lab/lims/worker.rb +13 -13
- data/app/services/lab/orders_service.rb +2 -1
- data/app/services/lab/results_service.rb +5 -1
- data/lib/lab/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9d62deddcd36f58905cb31ed7240186170e63bb60024a9b7f1adbeeba2b7fa02
|
|
4
|
+
data.tar.gz: 5396bb200c07079f19b12004fb2fa11af844b0c24ae8f90a7a076f474c7d1867
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0fc83099a46e0b9879c9d489b507e3b04444e1dba215d2c3632290b937092b83682938ef3a4991851acdd725f0dbff30766ff9024378e67520b628bf8d5b170c
|
|
7
|
+
data.tar.gz: 58b1df7bff8f2ed90083d24a382d20dc963604574f94024a98408f1ec1ef9afa4e407f651bbd82863c2355ffef81cdccb8bea224c2516fb9d3a00420abbc0bce
|
|
@@ -7,7 +7,7 @@ module Lab
|
|
|
7
7
|
queue_as :default
|
|
8
8
|
def perform(results_obs_id, serializer, result_enter_by)
|
|
9
9
|
Rails.logger.info("Lab::ProcessLabResultJob: Processing result completion for #{serializer}")
|
|
10
|
-
results_obs = Lab::LabResult.find(results_obs_id)
|
|
10
|
+
results_obs = Lab::LabResult.unscoped.find(results_obs_id)
|
|
11
11
|
Lab::ResultsService.process_result_completion(results_obs, serializer, result_enter_by)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -66,7 +66,8 @@ module Lab
|
|
|
66
66
|
def self.concept_name(concept_id)
|
|
67
67
|
return concept_id unless concept_id
|
|
68
68
|
|
|
69
|
-
::ConceptAttribute.find_by(concept_id:, attribute_type: ConceptAttributeType.test_catalogue_name)&.value_reference
|
|
69
|
+
c_name = ::ConceptAttribute.find_by(concept_id:, attribute_type: ConceptAttributeType.test_catalogue_name)&.value_reference
|
|
70
|
+
c_name || ConceptName.find_by_concept_id(concept_id)&.name
|
|
70
71
|
end
|
|
71
72
|
|
|
72
73
|
def self.voided_tests(order)
|
|
@@ -14,9 +14,12 @@ module Lab
|
|
|
14
14
|
date_received: params[:date_received])
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def acknowledgements_pending_sync(batch_size)
|
|
18
|
-
Lab::LabAcknowledgement.where(pushed: false)
|
|
19
|
-
|
|
17
|
+
def acknowledgements_pending_sync(batch_size, start_date: nil)
|
|
18
|
+
query = Lab::LabAcknowledgement.joins(:order).where(pushed: false)
|
|
19
|
+
|
|
20
|
+
query = query.where('orders.date_created >= ?', start_date) if start_date
|
|
21
|
+
|
|
22
|
+
query.limit(batch_size)
|
|
20
23
|
end
|
|
21
24
|
|
|
22
25
|
def push_acknowledgement(acknowledgement, lims_api)
|
|
@@ -30,7 +33,8 @@ module Lab
|
|
|
30
33
|
Rails.logger.info("Updating acknowledgement ##{acknowledgement_dto[:tracking_number]} in LIMS")
|
|
31
34
|
response = lims_api.acknowledge(acknowledgement_dto)
|
|
32
35
|
Rails.logger.info("Info #{response}")
|
|
33
|
-
if ['results already delivered for test name given', 'test result acknowledged successfully',
|
|
36
|
+
if ['results already delivered for test name given', 'test result acknowledged successfully',
|
|
37
|
+
'test result already acknowledged electronically at facility'].include?(response['message'])
|
|
34
38
|
acknowledgement.pushed = true
|
|
35
39
|
acknowledgement.date_pushed = Time.now
|
|
36
40
|
acknowledgement.save!
|
|
@@ -34,10 +34,11 @@ module Lab
|
|
|
34
34
|
|
|
35
35
|
unless specimen_type
|
|
36
36
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
37
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
37
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
|
|
38
38
|
FROM concept_attribute ca
|
|
39
39
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
40
40
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
41
|
+
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
41
42
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
42
43
|
AND ca.concept_id IN (#{test_types.select(:concept_id).to_sql})
|
|
43
44
|
GROUP BY ca.concept_id
|
|
@@ -56,10 +57,11 @@ module Lab
|
|
|
56
57
|
)
|
|
57
58
|
|
|
58
59
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
59
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
60
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
|
|
60
61
|
FROM concept_attribute ca
|
|
61
62
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
62
63
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
64
|
+
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
63
65
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
64
66
|
AND ca.concept_id IN (#{concept_set.select(:concept_set).to_sql})
|
|
65
67
|
GROUP BY ca.concept_id
|
|
@@ -72,10 +74,11 @@ module Lab
|
|
|
72
74
|
|
|
73
75
|
unless test_type
|
|
74
76
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
75
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
77
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
|
|
76
78
|
FROM concept_attribute ca
|
|
77
79
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
78
80
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
81
|
+
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
79
82
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
80
83
|
AND ca.concept_id IN (#{specimen_types.select(:concept_id).to_sql})
|
|
81
84
|
GROUP BY ca.concept_id
|
|
@@ -94,10 +97,11 @@ module Lab
|
|
|
94
97
|
)
|
|
95
98
|
|
|
96
99
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
97
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
100
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
|
|
98
101
|
FROM concept_attribute ca
|
|
99
102
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
100
103
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
104
|
+
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
101
105
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
102
106
|
AND ca.concept_id IN (#{concept_set.pluck(:concept_id).push(0).join(',')})
|
|
103
107
|
GROUP BY ca.concept_id
|
|
@@ -114,15 +118,16 @@ module Lab
|
|
|
114
118
|
measures = ConceptSet.find_members_by_name(Lab::Metadata::TEST_RESULT_INDICATOR_CONCEPT_NAME)
|
|
115
119
|
.select(:concept_id)
|
|
116
120
|
|
|
117
|
-
sets = ConceptSet.where(concept_set:
|
|
121
|
+
sets = ConceptSet.where(concept_set: test, concept_id: measures)
|
|
118
122
|
|
|
119
123
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
120
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
124
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
|
|
121
125
|
FROM concept_attribute ca
|
|
122
126
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
123
127
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
128
|
+
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
124
129
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
125
|
-
AND ca.concept_id IN (#{sets.pluck(:
|
|
130
|
+
AND ca.concept_id IN (#{sets.pluck(:concept_id).push(0).join(',')})
|
|
126
131
|
GROUP BY ca.concept_id
|
|
127
132
|
SQL
|
|
128
133
|
end
|
|
@@ -4,20 +4,22 @@ module Lab
|
|
|
4
4
|
module Lims
|
|
5
5
|
# This class is responsible for handling the acknowledgement of lab orders
|
|
6
6
|
class AcknowledgementWorker
|
|
7
|
-
attr_reader :lims_api
|
|
7
|
+
attr_reader :lims_api, :start_date
|
|
8
8
|
|
|
9
9
|
include Utils # for logger
|
|
10
10
|
|
|
11
11
|
SECONDS_TO_WAIT_FOR_ORDERS = 30
|
|
12
12
|
|
|
13
|
-
def initialize(lims_api)
|
|
13
|
+
def initialize(lims_api, start_date: nil)
|
|
14
14
|
@lims_api = lims_api
|
|
15
|
+
@start_date = start_date
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def push_acknowledgement(batch_size: 1000, wait: false)
|
|
18
19
|
loop do
|
|
19
20
|
logger.info('Looking for new acknowledgements to push to LIMS...')
|
|
20
|
-
acknowledgements = Lab::AcknowledgementService.acknowledgements_pending_sync(batch_size
|
|
21
|
+
acknowledgements = Lab::AcknowledgementService.acknowledgements_pending_sync(batch_size,
|
|
22
|
+
start_date: start_date).all
|
|
21
23
|
|
|
22
24
|
logger.debug("Found #{acknowledgements.size} acknowledgements...")
|
|
23
25
|
acknowledgements.each do |acknowledgement|
|
|
@@ -74,8 +74,8 @@ module Lab
|
|
|
74
74
|
{ tracking_number: order_dto[:tracking_number] }
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
-
def consume_orders(*_args, patient_id: nil, **_kwargs)
|
|
78
|
-
orders_pending_updates(patient_id).each do |order|
|
|
77
|
+
def consume_orders(*_args, patient_id: nil, start_date: nil, **_kwargs)
|
|
78
|
+
orders_pending_updates(patient_id, start_date: start_date).each do |order|
|
|
79
79
|
order_dto = Lab::Lims::OrderSerializer.serialize_order(order)
|
|
80
80
|
if order_dto['priority'].nil? || order_dto['sample_type'].casecmp?('not_specified')
|
|
81
81
|
patch_order_dto_with_lims_order!(order_dto, find_lims_order(order.accession_number))
|
|
@@ -510,43 +510,47 @@ module Lab
|
|
|
510
510
|
}
|
|
511
511
|
end
|
|
512
512
|
|
|
513
|
-
def orders_pending_updates(patient_id = nil)
|
|
513
|
+
def orders_pending_updates(patient_id = nil, start_date: nil)
|
|
514
514
|
Rails.logger.info('Looking for orders that need to be updated...')
|
|
515
515
|
orders = {}
|
|
516
516
|
|
|
517
|
-
orders_without_specimen(patient_id).each { |order| orders[order.order_id] = order }
|
|
518
|
-
orders_without_results(patient_id).each { |order| orders[order.order_id] = order }
|
|
519
|
-
orders_without_reason(patient_id).each { |order| orders[order.order_id] = order }
|
|
517
|
+
orders_without_specimen(patient_id, start_date: start_date).each { |order| orders[order.order_id] = order }
|
|
518
|
+
orders_without_results(patient_id, start_date: start_date).each { |order| orders[order.order_id] = order }
|
|
519
|
+
orders_without_reason(patient_id, start_date: start_date).each { |order| orders[order.order_id] = order }
|
|
520
520
|
|
|
521
521
|
orders.values
|
|
522
522
|
end
|
|
523
523
|
|
|
524
|
-
def orders_without_specimen(patient_id = nil)
|
|
524
|
+
def orders_without_specimen(patient_id = nil, start_date: nil)
|
|
525
525
|
Rails.logger.debug('Looking for orders without a specimen')
|
|
526
526
|
unknown_specimen = ConceptName.where(name: Lab::Metadata::UNKNOWN_SPECIMEN)
|
|
527
527
|
.select(:concept_id)
|
|
528
528
|
orders = Lab::LabOrder.where(concept_id: unknown_specimen)
|
|
529
529
|
.where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id))
|
|
530
530
|
orders = orders.where(patient_id:) if patient_id
|
|
531
|
+
orders = orders.where('orders.date_created >= ?', start_date) if start_date
|
|
531
532
|
|
|
532
533
|
orders
|
|
533
534
|
end
|
|
534
535
|
|
|
535
|
-
def orders_without_results(patient_id = nil)
|
|
536
|
+
def orders_without_results(patient_id = nil, start_date: nil)
|
|
536
537
|
Rails.logger.debug('Looking for orders without a result')
|
|
537
538
|
# Lab::OrdersSearchService.find_orders_without_results(patient_id: patient_id)
|
|
538
539
|
# .where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id).where("pulled_at IS NULL"))
|
|
539
|
-
Lab::OrdersSearchService.find_orders_without_results(patient_id:)
|
|
540
|
-
|
|
540
|
+
orders = Lab::OrdersSearchService.find_orders_without_results(patient_id:)
|
|
541
|
+
.where(order_id: Lab::LimsOrderMapping.select(:order_id))
|
|
542
|
+
orders = orders.where('orders.date_created >= ?', start_date) if start_date
|
|
543
|
+
orders
|
|
541
544
|
end
|
|
542
545
|
|
|
543
|
-
def orders_without_reason(patient_id = nil)
|
|
546
|
+
def orders_without_reason(patient_id = nil, start_date: nil)
|
|
544
547
|
Rails.logger.debug('Looking for orders without a reason for test')
|
|
545
548
|
orders = Lab::LabOrder.joins(:reason_for_test)
|
|
546
549
|
.merge(Observation.where(value_coded: nil, value_text: nil))
|
|
547
550
|
.limit(1000)
|
|
548
551
|
.where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id))
|
|
549
552
|
orders = orders.where(patient_id:) if patient_id
|
|
553
|
+
orders = orders.where('orders.date_created >= ?', start_date) if start_date
|
|
550
554
|
|
|
551
555
|
orders
|
|
552
556
|
end
|
|
@@ -5,14 +5,15 @@ module Lab
|
|
|
5
5
|
##
|
|
6
6
|
# Pulls orders from a Lims API object and saves them to the local database.
|
|
7
7
|
class PullWorker
|
|
8
|
-
attr_reader :lims_api
|
|
8
|
+
attr_reader :lims_api, :start_date
|
|
9
9
|
|
|
10
10
|
include Utils # for logger
|
|
11
11
|
|
|
12
12
|
LIMS_LOG_PATH = Rails.root.join('log', 'lims')
|
|
13
13
|
|
|
14
|
-
def initialize(lims_api)
|
|
14
|
+
def initialize(lims_api, start_date: nil)
|
|
15
15
|
@lims_api = lims_api
|
|
16
|
+
@start_date = start_date
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
##
|
|
@@ -20,7 +21,7 @@ module Lab
|
|
|
20
21
|
def pull_orders(batch_size: 10_000, **)
|
|
21
22
|
logger.info("Retrieving LIMS orders starting from #{last_seq}")
|
|
22
23
|
|
|
23
|
-
lims_api.consume_orders(from: last_seq, limit: batch_size, **) do |order_dto, context|
|
|
24
|
+
lims_api.consume_orders(from: last_seq, limit: batch_size, start_date: start_date, **) do |order_dto, context|
|
|
24
25
|
logger.debug("Retrieved order ##{order_dto[:tracking_number]}: #{order_dto}")
|
|
25
26
|
|
|
26
27
|
patient = find_patient_by_nhid(order_dto[:patient][:id], order_dto[:tracking_number])
|
|
@@ -5,15 +5,16 @@ module Lab
|
|
|
5
5
|
##
|
|
6
6
|
# Pushes all local orders to a LIMS Api object.
|
|
7
7
|
class PushWorker
|
|
8
|
-
attr_reader :lims_api
|
|
8
|
+
attr_reader :lims_api, :start_date
|
|
9
9
|
|
|
10
10
|
include Utils # for logger
|
|
11
11
|
|
|
12
12
|
SECONDS_TO_WAIT_FOR_ORDERS = 30
|
|
13
13
|
START_DATE = Time.parse('2024-09-03').freeze
|
|
14
14
|
|
|
15
|
-
def initialize(lims_api)
|
|
15
|
+
def initialize(lims_api, start_date: nil)
|
|
16
16
|
@lims_api = lims_api
|
|
17
|
+
@start_date = start_date
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
def push_orders(batch_size: 1000, wait: false)
|
|
@@ -81,8 +82,8 @@ module Lab
|
|
|
81
82
|
|
|
82
83
|
def void_order_in_lims(order_id)
|
|
83
84
|
order = Lab::LabOrder.joins(order_type: { name: 'Lab' })
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
.unscoped
|
|
86
|
+
.find(order_id)
|
|
86
87
|
order_dto = Lab::Lims::OrderSerializer.serialize_order(order)
|
|
87
88
|
Rails.logger.info("Deleting order ##{order_dto[:accession_number]} from LIMS")
|
|
88
89
|
lims_api.delete_order('', order_dto)
|
|
@@ -100,10 +101,16 @@ module Lab
|
|
|
100
101
|
|
|
101
102
|
def new_orders
|
|
102
103
|
Rails.logger.debug('Looking for new orders that need to be created in LIMS...')
|
|
103
|
-
Lab::LabOrder.where.not(order_id: Lab::LimsOrderMapping.all.select(:order_id))
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
query = Lab::LabOrder.where.not(order_id: Lab::LimsOrderMapping.all.select(:order_id))
|
|
105
|
+
.where("accession_number IS NOT NULL AND accession_number !=''")
|
|
106
|
+
|
|
107
|
+
query = if start_date
|
|
108
|
+
query.where('orders.date_created >= ?', start_date)
|
|
109
|
+
else
|
|
110
|
+
query.where('orders.date_created >= ? AND orders.date_created <= ?', START_DATE, Date.today + 1.day)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
query.order(date_created: :desc)
|
|
107
114
|
end
|
|
108
115
|
|
|
109
116
|
def updated_orders
|
|
@@ -111,23 +118,26 @@ module Lab
|
|
|
111
118
|
last_updated = Lab::LimsOrderMapping.select('MAX(updated_at) AS last_updated')
|
|
112
119
|
.first
|
|
113
120
|
.last_updated
|
|
121
|
+
last_updated = start_date if start_date && last_updated < start_date
|
|
114
122
|
|
|
115
123
|
Lab::LabOrder.left_joins(:results)
|
|
116
124
|
.joins(:mapping)
|
|
117
|
-
.where('orders.discontinued_date > :last_updated
|
|
118
|
-
OR obs.date_created > orders.date_created AND lab_lims_order_mappings.result_push_status = 0',
|
|
125
|
+
.where('(orders.discontinued_date > :last_updated
|
|
126
|
+
OR (obs.date_created > orders.date_created AND orders.date_created >= :last_updated)) AND lab_lims_order_mappings.result_push_status = 0',
|
|
119
127
|
last_updated:)
|
|
120
128
|
.group('orders.order_id')
|
|
121
129
|
.order(discontinued_date: :desc, date_created: :desc)
|
|
122
130
|
end
|
|
123
131
|
|
|
124
132
|
def voided_orders
|
|
133
|
+
# add date filter to avoid pushing voided orders that were created a long time ago
|
|
125
134
|
Rails.logger.debug('Looking for voided orders that are being tracked by LIMS...')
|
|
126
|
-
Lab::LabOrder.unscoped
|
|
135
|
+
orders = Lab::LabOrder.unscoped
|
|
127
136
|
.where(order_type: OrderType.where(name: Lab::Metadata::ORDER_TYPE_NAME),
|
|
128
137
|
order_id: Lab::LimsOrderMapping.all.select(:order_id),
|
|
129
138
|
voided: 1)
|
|
130
|
-
|
|
139
|
+
orders = orders.where('orders.date_created >= ?', start_date) if start_date
|
|
140
|
+
orders.order(date_voided: :desc)
|
|
131
141
|
end
|
|
132
142
|
|
|
133
143
|
##
|
|
@@ -9,43 +9,43 @@ module Lab
|
|
|
9
9
|
##
|
|
10
10
|
# Pull/Push orders from/to the LIMS queue (Oops meant CouchDB).
|
|
11
11
|
module Worker
|
|
12
|
-
def self.start
|
|
12
|
+
def self.start(start_date: nil)
|
|
13
13
|
User.current = Utils.lab_user
|
|
14
14
|
|
|
15
|
-
fork(
|
|
16
|
-
fork(
|
|
17
|
-
fork(
|
|
18
|
-
fork(
|
|
15
|
+
fork { start_push_worker(start_date: start_date) }
|
|
16
|
+
fork { start_pull_worker(start_date: start_date) }
|
|
17
|
+
fork { start_acknowledgement_worker(start_date: start_date) }
|
|
18
|
+
fork { start_realtime_pull_worker(start_date: start_date) } if realtime_updates_enabled?
|
|
19
19
|
|
|
20
20
|
Process.waitall
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
def self.start_push_worker
|
|
23
|
+
def self.start_push_worker(start_date: nil)
|
|
24
24
|
start_worker('push_worker') do
|
|
25
|
-
worker = PushWorker.new(lims_api)
|
|
25
|
+
worker = PushWorker.new(lims_api, start_date: start_date)
|
|
26
26
|
|
|
27
27
|
worker.push_orders # (wait: true)
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
def self.start_acknowledgement_worker
|
|
31
|
+
def self.start_acknowledgement_worker(start_date: nil)
|
|
32
32
|
start_worker('acknowledgement_worker') do
|
|
33
|
-
worker = AcknowledgementWorker.new(lims_api)
|
|
33
|
+
worker = AcknowledgementWorker.new(lims_api, start_date: start_date)
|
|
34
34
|
worker.push_acknowledgement
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def self.start_pull_worker
|
|
38
|
+
def self.start_pull_worker(start_date: nil)
|
|
39
39
|
start_worker('pull_worker') do
|
|
40
|
-
worker = PullWorker.new(lims_api)
|
|
40
|
+
worker = PullWorker.new(lims_api, start_date: start_date)
|
|
41
41
|
|
|
42
42
|
worker.pull_orders
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
def self.start_realtime_pull_worker
|
|
46
|
+
def self.start_realtime_pull_worker(start_date: nil)
|
|
47
47
|
start_worker('realtime_pull_worker') do
|
|
48
|
-
worker = PullWorker.new(Lims::Api::WsApi.new(Lab::Lims::Config.updates_socket))
|
|
48
|
+
worker = PullWorker.new(Lims::Api::WsApi.new(Lab::Lims::Config.updates_socket), start_date: start_date)
|
|
49
49
|
|
|
50
50
|
worker.pull_orders
|
|
51
51
|
end
|
|
@@ -260,7 +260,8 @@ module Lab
|
|
|
260
260
|
order.date_created = params[:date]&.to_date || Date.today if order.respond_to?(:date_created)
|
|
261
261
|
order.start_date = params[:date]&.to_date || Date.today if order.respond_to?(:start_date)
|
|
262
262
|
order.auto_expire_date = params[:end_date]
|
|
263
|
-
|
|
263
|
+
# Note: comment_to_fulfiller is a has_one association, not a field
|
|
264
|
+
# It will be created via add_comment_to_fulfiller method
|
|
264
265
|
order.accession_number = access_number
|
|
265
266
|
order.orderer = User.current&.user_id
|
|
266
267
|
|
|
@@ -43,7 +43,11 @@ module Lab
|
|
|
43
43
|
ActiveRecord::Base.connection.commit_db_transaction
|
|
44
44
|
|
|
45
45
|
# Execute job synchronously
|
|
46
|
-
|
|
46
|
+
begin
|
|
47
|
+
ProcessLabResultJob.perform_now(results_obs.id, serializer, result_enter_by)
|
|
48
|
+
rescue StandardError => e
|
|
49
|
+
Rails.logger.error("Lab::ResultsService: Error processing lab result job for test #{test_id}: #{e.message}")
|
|
50
|
+
end
|
|
47
51
|
|
|
48
52
|
Rails.logger.info("Lab::ResultsService: Result created for test #{test_id} #{serializer}")
|
|
49
53
|
serializer
|
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: 2.1.8.
|
|
4
|
+
version: 2.1.8.6
|
|
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: 2026-
|
|
11
|
+
date: 2026-04-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: couchrest
|