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.
@@ -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 || Date.today,
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
- order.void(reason)
98
+ voided
97
99
  end
98
100
 
99
101
  private
data/lib/lab/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lab
4
- VERSION = '1.0.5'
4
+ VERSION = '1.1.0'
5
5
  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.0.5
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-06-23 00:00:00.000000000 Z
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