his_emr_api_lab 0.0.6 → 0.0.11

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: d79ce0bd4282f205bd510bc5fbbaa09cbf50abf9038e98a906cfa0ec241da535
4
- data.tar.gz: afb6a736ceefeab7ac2b58227e4a3e3214cd562368f8750b0584eae6cdbb163b
3
+ metadata.gz: 060337303a9a04fc0f9cebbe525f2275964b41776297b440bc9d7ea4c25c39b8
4
+ data.tar.gz: 5cc5383ab62d941de6a0d5fa2f51c5199461f141459cea072b40c004277855d1
5
5
  SHA512:
6
- metadata.gz: affeaac951ade6771fe0b0b14a9ab3ef8795a40ce1a994c7f90a82c0d522bb8b8f44e8363c4532a8bc2a600dc2446aee3f3f677ae211cdf6feadc27f9fd1bf22
7
- data.tar.gz: dd4ada5f115a2953c45bf20476ac32c5072a25b15f4dbaf1b451e55bd20c3e12dcd9663b8d474f0fefe8599e3dffdd8984b03b728d1fdcbdb3735090ca0175e3
6
+ metadata.gz: 25e70f8e501dd0f0edf25b6f202f41129842fe5099cd5e6d977035df063d9233ac38b98e51ebdd2c2bcb382524da111b42138815d0a48c02e5bdb979b43c8127
7
+ data.tar.gz: 950d9d988b026ac2dbaed9f63be620cc474816aaba77c64231291e721e463f2872a20c2f629a553d1c52c0689e20afb28d44fa1c981807e1a0c4ed7945d6103f
@@ -27,7 +27,7 @@ module Lab
27
27
  '',
28
28
  drawer,
29
29
  '',
30
- specimen,
30
+ tests,
31
31
  reason_for_test,
32
32
  order.accession_number,
33
33
  order.accession_number)
@@ -36,7 +36,7 @@ module Lab
36
36
  def reason_for_test
37
37
  return 'Unknown' unless order.reason_for_test
38
38
 
39
- ConceptName.find_by_concept_id(order.reason_for_test.value_coded)&.name || 'Unknown'
39
+ short_concept_name(order.reason_for_test.value_coded) || 'Unknown'
40
40
  end
41
41
 
42
42
  def patient
@@ -60,11 +60,14 @@ module Lab
60
60
  def drawer
61
61
  return 'N/A' if order.concept_id == unknown_concept.concept_id
62
62
 
63
- name = PersonName.find_by_person_id(order.creator)
64
- return "#{name.given_name} #{name.family_name}" if name
63
+ drawer_id = order.discontinued_by || order.creator
64
+ draw_date = (order.discontinued_date || order.start_date).strftime('%d/%^b/%Y %H:%M:%S')
65
65
 
66
- user = User.find(order.creator)
67
- user&.username || 'N/A'
66
+ name = PersonName.find_by_person_id(drawer_id)
67
+ return "#{name.given_name} #{name.family_name} #{draw_date}" if name
68
+
69
+ user = User.find_by_user_id(drawer_id)
70
+ user ? "#{user.username} #{draw_date}" : 'N/A'
68
71
  end
69
72
 
70
73
  def specimen
@@ -73,6 +76,24 @@ module Lab
73
76
  ConceptName.find_by_concept_id(order.concept_id)&.name || 'Unknown'
74
77
  end
75
78
 
79
+ def tests
80
+ tests = order.tests.map do |test|
81
+ name = short_concept_name(test.value_coded) || 'Unknown'
82
+
83
+ next 'VL' if name.match?(/Viral load/i)
84
+
85
+ name.size > 7 ? name[0..6] : name
86
+ end
87
+
88
+ tests.join(', ')
89
+ end
90
+
91
+ def short_concept_name(concept_id)
92
+ ConceptName.where(concept_id: concept_id)
93
+ .min_by { |concept| concept.name.size }
94
+ &.name
95
+ end
96
+
76
97
  def unknown_concept
77
98
  ConceptName.find_by_name('Unknown')
78
99
  end
@@ -142,9 +142,10 @@ module Lab
142
142
  MIGRATION_REJECTIONS_CSV_PATH = LIMS_LOG_PATH.join('migration-rejections.csv')
143
143
 
144
144
  def self.export_rejections(rejections)
145
- headers = ['Accession number', 'NHID', 'First name', 'Last name', 'Reason']
145
+ headers = ['doc_id', 'Accession number', 'NHID', 'First name', 'Last name', 'Reason']
146
146
  rows = (rejections || []).map do |rejection|
147
147
  [
148
+ rejection.order[:_id],
148
149
  rejection.order[:tracking_number],
149
150
  rejection.order[:patient][:id],
150
151
  rejection.order[:patient][:first_name],
@@ -159,9 +160,10 @@ module Lab
159
160
  MIGRATION_FAILURES_CSV_PATH = LIMS_LOG_PATH.join('migration-failures.csv')
160
161
 
161
162
  def self.export_failures
162
- headers = ['Accession number', 'NHID', 'Reason', 'Difference']
163
+ headers = ['doc_id', 'Accession number', 'NHID', 'Reason', 'Difference']
163
164
  rows = Lab::LimsFailedImport.all.map do |failure|
164
165
  [
166
+ failure.lims_id,
165
167
  failure.tracking_number,
166
168
  failure.patient_nhid,
167
169
  failure.reason,
@@ -30,9 +30,9 @@ module Lab
30
30
 
31
31
  # Translates a LIMS specimen name to an OpenMRS concept_id
32
32
  def specimen_type_id
33
- lims_specimen_name = self['sample_type']
33
+ lims_specimen_name = self['sample_type']&.strip&.downcase
34
34
 
35
- if %w[specimen_not_collected not_assigned].include?(lims_specimen_name)
35
+ if %w[specimen_not_collected not_assigned not_specified].include?(lims_specimen_name)
36
36
  return ConceptName.select(:concept_id).find_by_name!('Unknown').concept_id
37
37
  end
38
38
 
@@ -53,6 +53,8 @@ module Lab
53
53
 
54
54
  # Extract requesting clinician name from LIMS
55
55
  def requesting_clinician
56
+ return 'Unknown' unless self['who_order_test']
57
+
56
58
  # TODO: Extend requesting clinician to an obs tree having extra parameters
57
59
  # like phone number and ID to closely match the lims user.
58
60
  first_name = self['who_order_test']['first_name'] || ''
@@ -67,6 +69,10 @@ module Lab
67
69
  end
68
70
 
69
71
  def start_date
72
+ if self['date_created'].blank?
73
+ raise LimsException, 'Order missing created date'
74
+ end
75
+
70
76
  Utils.parse_date(self['date_created'])
71
77
  end
72
78
 
@@ -66,6 +66,8 @@ module Lab
66
66
  Date.strptime(str_date, '%d-%m-%Y').strftime('%Y-%m-%d')
67
67
  elsif str_date.match?(/(\d{4}\d{2}\d{2})\d+/)
68
68
  Date.strptime(str_date, '%Y%m%d').strftime('%Y-%m-%d')
69
+ elsif str_date.match?(%r{\d{2}/\d{2}/\d{4}})
70
+ str_date.to_date.to_s
69
71
  else
70
72
  Rails.logger.warn("Invalid date: #{str_date}")
71
73
  parse_date(fallback_date)
@@ -28,7 +28,9 @@ module Lab
28
28
  fout.write("Worker ##{Process.pid} started at #{Time.now}")
29
29
  worker = new(Api.new)
30
30
  worker.pull_orders
31
- worker.push_orders
31
+ # TODO: Verify that names being pushed to LIMS are of the correct format (ie matching
32
+ # LIMS naming conventions). Enable pushing when that is done
33
+ # worker.push_orders
32
34
  end
33
35
  end
34
36
 
data/lib/lab/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lab
4
- VERSION = '0.0.6'
4
+ VERSION = '0.0.11'
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: 0.0.6
4
+ version: 0.0.11
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-04-23 00:00:00.000000000 Z
11
+ date: 2021-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: couchrest