his_emr_api_lab 1.0.5 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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