his_emr_api_lab 1.0.0 → 1.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e6be868d3a1113b834bf4e6644734eead3e01d7b51f90e310e3020eb8125b6c
4
- data.tar.gz: bd7ca74bdf0af442d3a4c6f9a1f9e0a73d4d61571f1e39ae6ce5352246cd801d
3
+ metadata.gz: cecc609c02db9bc3bfef3b86458006055944bf3bc7729446490c5375c9ceabd4
4
+ data.tar.gz: 9992f6d05a17f52c725dc014876a29faadc1b96ba2711f26851e73c917e44e61
5
5
  SHA512:
6
- metadata.gz: 7c122f5fbc967d7e470aac9eb455f77d9471a40caa582a9306d4558a25094d8efba17a9aca25ea312609ac9c7571cf154f463a0c65a55387bb8a030dcf48b7c6
7
- data.tar.gz: 9c68ca05bb1accaac6942c37f2399ae5ef5f94bde87cbd30811f35e394a9b2a43e2671f266173839156b980c3030051fc5e9fc4103c3b8f41a7dcd84e5324e35
6
+ metadata.gz: 4d37c96cfad06c9d7c8a62dab06ab9c4a2ecbb7ffed973287d09abfe5f7f3fb9d721ae5f473edc1aab7ba100cf4f525af329f8797e319cfb534f7141e96d12c3
7
+ data.tar.gz: 2e88ceb111fa7a74be37c78d8b7df7a6b179f28c38ee9824d829097e8568c058ea9996afd2105fff44d61e51aa37184d495f77fd6ed6ee84e3ffd86419cc8e9f
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './api'
4
3
  require_relative './order_dto'
5
4
 
6
5
  module Lab
@@ -83,9 +83,9 @@ module Lab
83
83
 
84
84
  # Translates a LIMS sample priority to a concept_id
85
85
  def reason_for_test
86
- return unknown_concept.concept_id unless self['sample_priority']
86
+ return unknown_concept.concept_id unless self['priority']
87
87
 
88
- ConceptName.find_by_name!(self['sample_priority']).concept_id
88
+ ConceptName.find_by_name!(self['priority']).concept_id
89
89
  end
90
90
 
91
91
  def lab_program
@@ -18,7 +18,7 @@ module Lab
18
18
  tracking_number: serialized_order.accession_number,
19
19
  sending_facility: current_facility_name,
20
20
  receiving_facility: serialized_order.target_lab,
21
- tests: serialized_order.tests.collect(&:name),
21
+ tests: serialized_order.tests.map { |test| format_test_name(test.name) },
22
22
  patient: format_patient(serialized_order.patient_id),
23
23
  order_location: format_order_location(serialized_order.encounter_id),
24
24
  sample_type: format_sample_type(serialized_order.specimen.name),
@@ -27,7 +27,7 @@ module Lab
27
27
  test_statuses: format_test_status_trail(order),
28
28
  who_order_test: format_orderer(order),
29
29
  districy: current_district, # yes districy [sic]...
30
- priority: serialized_order.reason_for_test.name,
30
+ priority: format_sample_priority(serialized_order.reason_for_test.name),
31
31
  date_created: serialized_order.order_date,
32
32
  test_results: format_test_results(serialized_order),
33
33
  type: 'Order'
@@ -69,7 +69,7 @@ module Lab
69
69
  end
70
70
 
71
71
  def format_sample_type(name)
72
- name.casecmp?('Unknown') ? 'not_specified' : name
72
+ name.casecmp?('Unknown') ? 'not_specified' : name.titleize
73
73
  end
74
74
 
75
75
  def format_sample_status(name)
@@ -98,8 +98,7 @@ module Lab
98
98
 
99
99
  def format_test_status_trail(order)
100
100
  order.tests.each_with_object({}) do |test, trail|
101
- test_name = ConceptName.find_by_concept_id!(test.value_coded).name
102
- test_name = 'Viral load' if test_name.casecmp?('HIV Viral Load')
101
+ test_name = format_test_name(ConceptName.find_by_concept_id!(test.value_coded).name)
103
102
 
104
103
  current_test_trail = trail[test_name] = {}
105
104
 
@@ -125,9 +124,11 @@ module Lab
125
124
  order.tests&.each_with_object({}) do |test, results|
126
125
  next unless test.result
127
126
 
128
- results[test.name] = {
127
+ results[format_test_name(test.name)] = {
129
128
  results: test.result.each_with_object({}) do |measure, measures|
130
- measures[measure.indicator.name] = { result_value: "#{measure.value_modifier}#{measure.value}" }
129
+ measures[format_test_name(measure.indicator.name)] = {
130
+ result_value: "#{measure.value_modifier}#{measure.value}"
131
+ }
131
132
  end,
132
133
  result_date: test.result.first&.date,
133
134
  result_entered_by: {}
@@ -135,6 +136,20 @@ module Lab
135
136
  end
136
137
  end
137
138
 
139
+ def format_test_name(test_name)
140
+ return 'Viral Load' if test_name.casecmp?('HIV Viral load')
141
+
142
+ return 'TB' if test_name.casecmp?('TB Program')
143
+
144
+ test_name.titleize
145
+ end
146
+
147
+ def format_sample_priority(priority)
148
+ return 'Routine' if priority&.casecmp?('Medical examination, routine')
149
+
150
+ priority&.titleize
151
+ end
152
+
138
153
  def current_health_center
139
154
  health_center = Location.current_health_center
140
155
  raise 'Current health center not set' unless health_center
@@ -209,7 +209,7 @@ module Lab
209
209
  raise MissingAccessionNumber if order_dto[:tracking_number].blank?
210
210
 
211
211
  logger.info("Importing LIMS order ##{order_dto[:tracking_number]}")
212
- mapping = LimsOrderMapping.find_by(lims_id: order_dto[:_id])
212
+ mapping = find_order_mapping_by_lims_id(order_dto[:_id])
213
213
 
214
214
  ActiveRecord::Base.transaction do
215
215
  if mapping
@@ -221,7 +221,6 @@ module Lab
221
221
  order_id: order['id'],
222
222
  pulled_at: Time.now,
223
223
  revision: order_dto['_rev'])
224
- byebug unless mapping.errors.empty?
225
224
  end
226
225
 
227
226
  order
@@ -313,7 +312,7 @@ module Lab
313
312
  end
314
313
 
315
314
  def guess_result_datatype(result)
316
- return 'numeric' if result.strip.match?(/^[+-]?(\d+(\.\d+)|\.\d+)?$/)
315
+ return 'numeric' if result.strip.match?(/^[+-]?((\d+(\.\d+)?)|\.\d+)$/)
317
316
 
318
317
  'text'
319
318
  end
@@ -339,6 +338,16 @@ module Lab
339
338
  def last_seq_path
340
339
  LIMS_LOG_PATH.join('last_seq.dat')
341
340
  end
341
+
342
+ def find_order_mapping_by_lims_id(lims_id)
343
+ mapping = Lab::LimsOrderMapping.find_by(lims_id: lims_id)
344
+ return nil unless mapping
345
+
346
+ return mapping if Lab::LabOrder.where(order_id: mapping.order_id).exists?
347
+
348
+ mapping.destroy
349
+ nil
350
+ end
342
351
  end
343
352
  end
344
353
  end
@@ -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.0'
4
+ VERSION = '1.0.5'
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.0
4
+ version: 1.0.5
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-04 00:00:00.000000000 Z
11
+ date: 2021-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: couchrest
@@ -270,6 +270,7 @@ files:
270
270
  - db/migrate/20210323080140_change_lims_id_to_string_in_lims_order_mapping.rb
271
271
  - db/migrate/20210326195504_add_order_revision_to_lims_order_mapping.rb
272
272
  - db/migrate/20210407071728_create_lab_lims_failed_imports.rb
273
+ - db/migrate/20210610095024_fix_numeric_results_value_type.rb
273
274
  - lib/auto12epl.rb
274
275
  - lib/couch_bum/couch_bum.rb
275
276
  - lib/generators/lab/install/USAGE