his_emr_api_lab 1.0.2 → 1.1.1

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
@@ -0,0 +1,20 @@
1
+ class FixNumericResultsValueType < ActiveRecord::Migration[5.2]
2
+ def up
3
+ results = Lab::LabResult.all.includes(:children)
4
+
5
+ ActiveRecord::Base.connection.transaction do
6
+ results.each do |result|
7
+ result.children.each do |measure|
8
+ next unless measure.value_text&.match?(/^[+-]?((\d+(\.\d+)?)|\.\d+)$/)
9
+
10
+ puts "Updating result value type for result measure ##{measure.obs_id}"
11
+ measure.value_numeric = measure.value_text
12
+ measure.value_text = nil
13
+ measure.save!
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ def down; end
20
+ end
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.2'
4
+ VERSION = '1.1.1'
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.2
4
+ version: 1.1.1
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-08 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
@@ -270,6 +289,7 @@ files:
270
289
  - db/migrate/20210323080140_change_lims_id_to_string_in_lims_order_mapping.rb
271
290
  - db/migrate/20210326195504_add_order_revision_to_lims_order_mapping.rb
272
291
  - db/migrate/20210407071728_create_lab_lims_failed_imports.rb
292
+ - db/migrate/20210610095024_fix_numeric_results_value_type.rb
273
293
  - lib/auto12epl.rb
274
294
  - lib/couch_bum/couch_bum.rb
275
295
  - lib/generators/lab/install/USAGE
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative './api'
4
- require_relative './order_dto'
5
-
6
- module Lab
7
- module Lims
8
- ##
9
- # Manage LIMS orders that failed to import
10
- module FailedImports
11
- class << self
12
- ##
13
- # Retrieve all imports that failed
14
- def failed_imports(start_id = 0, limit = 20)
15
- Lab::LimsFailedImport.where('id >= ?', start_id).limit(limit)
16
- end
17
-
18
- ##
19
- # Forcefully imports a failed import into a patient
20
- def force_import(failed_import_id, _patient_id)
21
- failed_import = Lab::LimsFailedImport.find(failed_import_id)
22
- order_dto = Lab::Lims::OrderDTO.new(lims_api.find_order(failed_import.lims_id))
23
- byebug
24
- end
25
-
26
- private
27
-
28
- def lims_api
29
- @lims_api ||= Lab::Lims::Api.new
30
- end
31
- end
32
- end
33
- end
34
- end