his_emr_api_lab 2.1.7.pre.gamma → 2.1.8
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 +17 -4
- data/app/jobs/lab/process_lab_result_job.rb +1 -1
- data/app/services/lab/acknowledgement_service.rb +4 -8
- data/app/services/lab/concepts_service.rb +7 -12
- data/app/services/lab/lims/acknowledgement_worker.rb +3 -5
- data/app/services/lab/lims/api/rest_api.rb +11 -15
- data/app/services/lab/lims/pull_worker.rb +3 -4
- data/app/services/lab/lims/push_worker.rb +8 -15
- data/app/services/lab/lims/worker.rb +13 -13
- data/app/services/lab/orders_service.rb +3 -3
- data/lib/lab/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 44e72036503453b83d8f3cfcdff281e1085e461c476a8f793e24a3d72f12f223
|
|
4
|
+
data.tar.gz: 0100d95046a1a81db0fc8b7eace3e9fa02dc2f9be6f396f073954bbfa5578993
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 25cb61dabafa209680d649747e35a06e19ed3685c7730bc0c539a35357e9e9529794ed180714c626125ec6ab8104b107e90e6ad0ab0cbebfcaee2ae728ea7815
|
|
7
|
+
data.tar.gz: 0da64fc5aa9647ffcc3252ae597b0492bacb3b77ec97064c4433f72bcd122431e04114323f7f13dc602faa0ccdc7c2f836b098a1090e9a56fa8cae774503101f
|
data/README.md
CHANGED
|
@@ -22,25 +22,25 @@ For details on how to perform these operations please see the
|
|
|
22
22
|
Add this line to your application's Gemfile:
|
|
23
23
|
|
|
24
24
|
```ruby
|
|
25
|
-
gem '
|
|
25
|
+
gem 'his_emr_api_lab', git: 'https://github.com/EGPAFMalawiHIS/HIS-EMR-API-Lab', branch: 'development'
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
And then execute:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
$ bundle install
|
|
31
|
+
$ bundle install
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
Or install it yourself as:
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
$ gem install
|
|
37
|
+
$ gem install his_emr_api_lab
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Finally run:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
$ bundle exec rails
|
|
43
|
+
$ bundle exec rails his_emr_api_lab:install
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
## Configuration
|
|
@@ -66,6 +66,19 @@ but too much a departure from it is frowned upon. For example, you will be forgi
|
|
|
66
66
|
for writing a method with 15 to 20 lines if you clearly justify why you couldn't
|
|
67
67
|
break that method into multiple smaller methods.
|
|
68
68
|
|
|
69
|
+
## Publishing
|
|
70
|
+
|
|
71
|
+
To publish a new version of the gem, first update the version number in
|
|
72
|
+
`lib/lab/version.rb` and then run the following command:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
$ gem build his_emr_api_lab.gemspec
|
|
76
|
+
$ gem push his_emr_api_lab-<version>.gem
|
|
77
|
+
```
|
|
78
|
+
Make sure to replace `<version>` with the version number you set in `lib/lab/version.rb`.
|
|
79
|
+
|
|
80
|
+
NB: You need to have an account on [rubygems.org](https://rubygems.org/) and permission to publish gems.
|
|
81
|
+
|
|
69
82
|
## License
|
|
70
83
|
|
|
71
84
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
|
@@ -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.
|
|
10
|
+
results_obs = Lab::LabResult.find(results_obs_id)
|
|
11
11
|
Lab::ResultsService.process_result_completion(results_obs, serializer, result_enter_by)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -14,12 +14,9 @@ module Lab
|
|
|
14
14
|
date_received: params[:date_received])
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def acknowledgements_pending_sync(batch_size
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
query = query.where('orders.date_created >= ?', start_date) if start_date
|
|
21
|
-
|
|
22
|
-
query.limit(batch_size)
|
|
17
|
+
def acknowledgements_pending_sync(batch_size)
|
|
18
|
+
Lab::LabAcknowledgement.where(pushed: false)
|
|
19
|
+
.limit(batch_size)
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
def push_acknowledgement(acknowledgement, lims_api)
|
|
@@ -33,8 +30,7 @@ module Lab
|
|
|
33
30
|
Rails.logger.info("Updating acknowledgement ##{acknowledgement_dto[:tracking_number]} in LIMS")
|
|
34
31
|
response = lims_api.acknowledge(acknowledgement_dto)
|
|
35
32
|
Rails.logger.info("Info #{response}")
|
|
36
|
-
if ['results already delivered for test name given', 'test result acknowledged successfully',
|
|
37
|
-
'test result already acknowledged electronically at facility'].include?(response['message'])
|
|
33
|
+
if ['results already delivered for test name given', 'test result acknowledged successfully', 'test result already acknowledged electronically at facility'].include?(response['message'])
|
|
38
34
|
acknowledgement.pushed = true
|
|
39
35
|
acknowledgement.date_pushed = Time.now
|
|
40
36
|
acknowledgement.save!
|
|
@@ -34,11 +34,10 @@ 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
|
|
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
|
|
42
41
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
43
42
|
AND ca.concept_id IN (#{test_types.select(:concept_id).to_sql})
|
|
44
43
|
GROUP BY ca.concept_id
|
|
@@ -57,11 +56,10 @@ module Lab
|
|
|
57
56
|
)
|
|
58
57
|
|
|
59
58
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
60
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
59
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
61
60
|
FROM concept_attribute ca
|
|
62
61
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
63
62
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
64
|
-
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
65
63
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
66
64
|
AND ca.concept_id IN (#{concept_set.select(:concept_set).to_sql})
|
|
67
65
|
GROUP BY ca.concept_id
|
|
@@ -74,11 +72,10 @@ module Lab
|
|
|
74
72
|
|
|
75
73
|
unless test_type
|
|
76
74
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
77
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
75
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
78
76
|
FROM concept_attribute ca
|
|
79
77
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
80
78
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
81
|
-
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
82
79
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
83
80
|
AND ca.concept_id IN (#{specimen_types.select(:concept_id).to_sql})
|
|
84
81
|
GROUP BY ca.concept_id
|
|
@@ -97,11 +94,10 @@ module Lab
|
|
|
97
94
|
)
|
|
98
95
|
|
|
99
96
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
100
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
97
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
101
98
|
FROM concept_attribute ca
|
|
102
99
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
103
100
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
104
|
-
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
105
101
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
106
102
|
AND ca.concept_id IN (#{concept_set.pluck(:concept_id).push(0).join(',')})
|
|
107
103
|
GROUP BY ca.concept_id
|
|
@@ -118,16 +114,15 @@ module Lab
|
|
|
118
114
|
measures = ConceptSet.find_members_by_name(Lab::Metadata::TEST_RESULT_INDICATOR_CONCEPT_NAME)
|
|
119
115
|
.select(:concept_id)
|
|
120
116
|
|
|
121
|
-
sets = ConceptSet.where(concept_set:
|
|
117
|
+
sets = ConceptSet.where(concept_set: measures, concept_id: test)
|
|
122
118
|
|
|
123
119
|
return ActiveRecord::Base.connection.select_all <<~SQL
|
|
124
|
-
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
120
|
+
SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
|
|
125
121
|
FROM concept_attribute ca
|
|
126
122
|
INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
|
|
127
123
|
AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
128
|
-
INNER JOIN concept c ON c.concept_id = ca.concept_id
|
|
129
124
|
WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
|
|
130
|
-
AND ca.concept_id IN (#{sets.pluck(:
|
|
125
|
+
AND ca.concept_id IN (#{sets.pluck(:concept_set).push(0).join(',')})
|
|
131
126
|
GROUP BY ca.concept_id
|
|
132
127
|
SQL
|
|
133
128
|
end
|
|
@@ -4,22 +4,20 @@ 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
|
|
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)
|
|
14
14
|
@lims_api = lims_api
|
|
15
|
-
@start_date = start_date
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
def push_acknowledgement(batch_size: 1000, wait: false)
|
|
19
18
|
loop do
|
|
20
19
|
logger.info('Looking for new acknowledgements to push to LIMS...')
|
|
21
|
-
acknowledgements = Lab::AcknowledgementService.acknowledgements_pending_sync(batch_size
|
|
22
|
-
start_date: start_date).all
|
|
20
|
+
acknowledgements = Lab::AcknowledgementService.acknowledgements_pending_sync(batch_size).all
|
|
23
21
|
|
|
24
22
|
logger.debug("Found #{acknowledgements.size} acknowledgements...")
|
|
25
23
|
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,
|
|
78
|
-
orders_pending_updates(patient_id
|
|
77
|
+
def consume_orders(*_args, patient_id: nil, **_kwargs)
|
|
78
|
+
orders_pending_updates(patient_id).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,47 +510,43 @@ 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)
|
|
514
514
|
Rails.logger.info('Looking for orders that need to be updated...')
|
|
515
515
|
orders = {}
|
|
516
516
|
|
|
517
|
-
orders_without_specimen(patient_id
|
|
518
|
-
orders_without_results(patient_id
|
|
519
|
-
orders_without_reason(patient_id
|
|
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 }
|
|
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)
|
|
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
|
|
532
531
|
|
|
533
532
|
orders
|
|
534
533
|
end
|
|
535
534
|
|
|
536
|
-
def orders_without_results(patient_id = nil
|
|
535
|
+
def orders_without_results(patient_id = nil)
|
|
537
536
|
Rails.logger.debug('Looking for orders without a result')
|
|
538
537
|
# Lab::OrdersSearchService.find_orders_without_results(patient_id: patient_id)
|
|
539
538
|
# .where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id).where("pulled_at IS NULL"))
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
orders = orders.where('orders.date_created >= ?', start_date) if start_date
|
|
543
|
-
orders
|
|
539
|
+
Lab::OrdersSearchService.find_orders_without_results(patient_id:)
|
|
540
|
+
.where(order_id: Lab::LimsOrderMapping.select(:order_id))
|
|
544
541
|
end
|
|
545
542
|
|
|
546
|
-
def orders_without_reason(patient_id = nil
|
|
543
|
+
def orders_without_reason(patient_id = nil)
|
|
547
544
|
Rails.logger.debug('Looking for orders without a reason for test')
|
|
548
545
|
orders = Lab::LabOrder.joins(:reason_for_test)
|
|
549
546
|
.merge(Observation.where(value_coded: nil, value_text: nil))
|
|
550
547
|
.limit(1000)
|
|
551
548
|
.where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id))
|
|
552
549
|
orders = orders.where(patient_id:) if patient_id
|
|
553
|
-
orders = orders.where('orders.date_created >= ?', start_date) if start_date
|
|
554
550
|
|
|
555
551
|
orders
|
|
556
552
|
end
|
|
@@ -5,15 +5,14 @@ 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
|
|
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)
|
|
15
15
|
@lims_api = lims_api
|
|
16
|
-
@start_date = start_date
|
|
17
16
|
end
|
|
18
17
|
|
|
19
18
|
##
|
|
@@ -21,7 +20,7 @@ module Lab
|
|
|
21
20
|
def pull_orders(batch_size: 10_000, **)
|
|
22
21
|
logger.info("Retrieving LIMS orders starting from #{last_seq}")
|
|
23
22
|
|
|
24
|
-
lims_api.consume_orders(from: last_seq, limit: batch_size,
|
|
23
|
+
lims_api.consume_orders(from: last_seq, limit: batch_size, **) do |order_dto, context|
|
|
25
24
|
logger.debug("Retrieved order ##{order_dto[:tracking_number]}: #{order_dto}")
|
|
26
25
|
|
|
27
26
|
patient = find_patient_by_nhid(order_dto[:patient][:id], order_dto[:tracking_number])
|
|
@@ -5,16 +5,15 @@ 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
|
|
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)
|
|
16
16
|
@lims_api = lims_api
|
|
17
|
-
@start_date = start_date
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
def push_orders(batch_size: 1000, wait: false)
|
|
@@ -82,8 +81,8 @@ module Lab
|
|
|
82
81
|
|
|
83
82
|
def void_order_in_lims(order_id)
|
|
84
83
|
order = Lab::LabOrder.joins(order_type: { name: 'Lab' })
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
.unscoped
|
|
85
|
+
.find(order_id)
|
|
87
86
|
order_dto = Lab::Lims::OrderSerializer.serialize_order(order)
|
|
88
87
|
Rails.logger.info("Deleting order ##{order_dto[:accession_number]} from LIMS")
|
|
89
88
|
lims_api.delete_order('', order_dto)
|
|
@@ -101,16 +100,10 @@ module Lab
|
|
|
101
100
|
|
|
102
101
|
def new_orders
|
|
103
102
|
Rails.logger.debug('Looking for new orders that need to be created in LIMS...')
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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)
|
|
103
|
+
Lab::LabOrder.where.not(order_id: Lab::LimsOrderMapping.all.select(:order_id))
|
|
104
|
+
.where("accession_number IS NOT NULL AND accession_number !=''")
|
|
105
|
+
.where(date_created: START_DATE..(Date.today + 1.day))
|
|
106
|
+
.order(date_created: :desc)
|
|
114
107
|
end
|
|
115
108
|
|
|
116
109
|
def updated_orders
|
|
@@ -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
|
|
13
13
|
User.current = Utils.lab_user
|
|
14
14
|
|
|
15
|
-
fork
|
|
16
|
-
fork
|
|
17
|
-
fork
|
|
18
|
-
fork
|
|
15
|
+
fork(&method(:start_push_worker))
|
|
16
|
+
fork(&method(:start_pull_worker))
|
|
17
|
+
fork(&method(:start_acknowledgement_worker))
|
|
18
|
+
fork(&method(:start_realtime_pull_worker)) 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
|
|
24
24
|
start_worker('push_worker') do
|
|
25
|
-
worker = PushWorker.new(lims_api
|
|
25
|
+
worker = PushWorker.new(lims_api)
|
|
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
|
|
32
32
|
start_worker('acknowledgement_worker') do
|
|
33
|
-
worker = AcknowledgementWorker.new(lims_api
|
|
33
|
+
worker = AcknowledgementWorker.new(lims_api)
|
|
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
|
|
39
39
|
start_worker('pull_worker') do
|
|
40
|
-
worker = PullWorker.new(lims_api
|
|
40
|
+
worker = PullWorker.new(lims_api)
|
|
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
|
|
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))
|
|
49
49
|
|
|
50
50
|
worker.pull_orders
|
|
51
51
|
end
|
|
@@ -247,6 +247,7 @@ module Lab
|
|
|
247
247
|
|
|
248
248
|
concept = params.dig(:specimen, :concept)
|
|
249
249
|
concept ||= params.dig(:specimen, :concept_id)
|
|
250
|
+
concept ||= unknown_concept_id
|
|
250
251
|
|
|
251
252
|
order_type = nil
|
|
252
253
|
order_type = OrderType.find_by_order_type_id!(params[:order_type_id])&.id if params[:order_type_id].present?
|
|
@@ -259,8 +260,7 @@ module Lab
|
|
|
259
260
|
order.date_created = params[:date]&.to_date || Date.today if order.respond_to?(:date_created)
|
|
260
261
|
order.start_date = params[:date]&.to_date || Date.today if order.respond_to?(:start_date)
|
|
261
262
|
order.auto_expire_date = params[:end_date]
|
|
262
|
-
|
|
263
|
-
# It will be created via add_comment_to_fulfiller method
|
|
263
|
+
order.comment_to_fulfiller = params[:comment_to_fulfiller] if params[:comment_to_fulfiller]
|
|
264
264
|
order.accession_number = access_number
|
|
265
265
|
order.orderer = User.current&.user_id
|
|
266
266
|
|
|
@@ -348,7 +348,7 @@ module Lab
|
|
|
348
348
|
end
|
|
349
349
|
|
|
350
350
|
def unknown_concept_id
|
|
351
|
-
ConceptName.find_by_name!('Unknown').
|
|
351
|
+
ConceptName.find_by_name!('Unknown').concept_id
|
|
352
352
|
end
|
|
353
353
|
|
|
354
354
|
def update_reason_for_test(order, concept_id, force_update: false)
|
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.
|
|
4
|
+
version: 2.1.8
|
|
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-02-
|
|
11
|
+
date: 2026-02-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: couchrest
|
|
@@ -340,9 +340,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
340
340
|
version: '0'
|
|
341
341
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
342
|
requirements:
|
|
343
|
-
- - "
|
|
343
|
+
- - ">="
|
|
344
344
|
- !ruby/object:Gem::Version
|
|
345
|
-
version:
|
|
345
|
+
version: '0'
|
|
346
346
|
requirements: []
|
|
347
347
|
rubygems_version: 3.4.1
|
|
348
348
|
signing_key:
|