his_emr_api_lab 2.0.2 → 2.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: b33f866b86cd84bf4f88956e9358f00996f7f6ba7ac6c3878680f6db2281b493
4
- data.tar.gz: e774a119159caf8c5a7f628606603f270b8746287afe5955fb4f722591239824
3
+ metadata.gz: fa48f103211974b33e9655ff076610ed6947acf378c96cc30937e38cfa65245b
4
+ data.tar.gz: ca3905ec865b706d8242e7040d3ef52dd5775497960a0016b38ff1a093d7e0f0
5
5
  SHA512:
6
- metadata.gz: 7202aaaac5cc85be3d3f489e05f7d9aa537915b58e28f5961804a3cce07c3960a45373cabc8649d8b0fef7dd8333e27e4ed6434a7881022043b7f1c2a9ab058b
7
- data.tar.gz: 787a155bfc9bf1af6dd202ba6ec18d07a5185f4dec661c2889968567f02d17529b536f30036c708cbaa316925e505818863596725b371219576a1082aae830c2
6
+ metadata.gz: 378fbfc8631c09be95111fa94c557b87749cacc9bb6bb3b9d6f72929f7b41c9bc36b4aa7c5e09a228a409e57d3ca900b2123bdd381c14b244be5bc052fe05f7c
7
+ data.tar.gz: 94ea4c075d6a2f0cbb746a238a371ef6c41d40b96cab80458414068888bee87f17d8d98ede12b9a31a85e5968561afb5ed4aa69985a4adaa749f03ece34f035d
@@ -6,12 +6,12 @@ module Lab
6
6
 
7
7
  def print_order_label
8
8
  order_id = params.require(:order_id)
9
-
10
- label = LabellingService::OrderLabel.new(order_id)
11
- send_data(label.print, type: 'application/label; charset=utf-8',
12
- stream: false,
13
- filename: "#{SecureRandom.hex(24)}.lbl",
14
- disposition: 'inline')
9
+ print_copies = params[:number_of_copies].to_i if params[:number_of_copies].present?
10
+ render_zpl(LabellingService::OrderLabel.new(order_id).print(
11
+ params[:use_small_specimen_label] == 'true',
12
+ print_copies
13
+ )
14
+ )
15
15
  end
16
16
  end
17
17
  end
@@ -66,7 +66,7 @@ module Lab
66
66
  .select(:concept_id)
67
67
 
68
68
  ConceptSet.where(concept_set: measures, concept_id: test)
69
- .joins('INNER JOIN concept_name AS measure ON measure.concept_id = concept_set.concept_set')
69
+ .joins("INNER JOIN concept_name AS measure ON measure.concept_id = concept_set.concept_set AND (measure.locale_preferred = 1 OR measure.concept_name_type = 'SHORT' OR measure.concept_name_type = 'FULLY_SPECIFIED')")
70
70
  .select('measure.concept_id, measure.name')
71
71
  .group('measure.concept_id')
72
72
  .map { |concept| { name: concept.name, concept_id: concept.concept_id } }
@@ -13,24 +13,53 @@ module Lab
13
13
  @order = Lab::LabOrder.find(order_id)
14
14
  end
15
15
 
16
- def print
16
+ def print(use_small_specimen = false, number_of_copies = nil)
17
17
  # NOTE: The arguments are passed into the method below not in the order
18
18
  # the method expects (eg patient_id is passed to middle_name field)
19
19
  # to retain compatibility with labels generated by the `lab test controller`
20
20
  # application of the NLIMS suite.
21
- auto12epl.generate_epl(patient.given_name,
22
- patient.family_name,
23
- patient.nhid,
24
- patient.birthdate.strftime('%d/%^b/%Y'),
25
- '',
26
- patient.gender,
27
- '',
28
- drawer,
29
- '',
30
- tests,
31
- reason_for_test,
32
- order.accession_number,
33
- order.accession_number)
21
+ zpl = if use_small_specimen
22
+ auto12epl.generate_small_specimen_label(
23
+ patient.family_name,
24
+ patient.given_name,
25
+ patient.gender,
26
+ drawer_date,
27
+ tests,
28
+ order.accession_number,
29
+ number_of_copies
30
+ )
31
+ else
32
+ auto12epl.generate_epl(
33
+ patient.given_name,
34
+ patient.family_name,
35
+ patient.nhid,
36
+ patient.birthdate.strftime('%d/%^b/%Y'),
37
+ '',
38
+ patient.gender,
39
+ '',
40
+ drawer,
41
+ '',
42
+ tests,
43
+ reason_for_test,
44
+ order.accession_number,
45
+ order.accession_number,
46
+ number_of_copies
47
+ )
48
+ end
49
+ {
50
+ zpl:,
51
+ data: {
52
+ accession_number: order.accession_number,
53
+ given_name: patient.given_name,
54
+ family_name: patient.family_name,
55
+ nhid: patient.nhid,
56
+ birthdate: patient.birthdate.strftime('%d/%^b/%Y'),
57
+ gender: patient.gender,
58
+ drawer:,
59
+ tests:,
60
+ reason_for_test:
61
+ }
62
+ }
34
63
  end
35
64
 
36
65
  def reason_for_test
@@ -70,6 +99,13 @@ module Lab
70
99
  user ? "#{user.username} #{draw_date}" : 'N/A'
71
100
  end
72
101
 
102
+ def drawer_date
103
+ return 'N/A' if order.concept_id == unknown_concept.concept_id
104
+
105
+ draw_date = (order.discontinued_date || order.start_date).strftime('%d/%^b/%Y %H:%M:%S')
106
+ "#{draw_date}" || 'N/A'
107
+ end
108
+
73
109
  def specimen
74
110
  return 'N/A' if order.concept_id == unknown_concept.concept_id
75
111
 
@@ -24,10 +24,6 @@ module Lab
24
24
  'indian ink' => 'India ink'
25
25
  }.freeze
26
26
 
27
- TEST_INDICATOR_MAPPINGS = {
28
- 'HCT' => 10_532
29
- }.freeze
30
-
31
27
  def self.translate_test_name(test_name)
32
28
  TEST_NAME_MAPPINGS.fetch(test_name.downcase, test_name)
33
29
  end
@@ -83,11 +79,9 @@ module Lab
83
79
  end
84
80
 
85
81
  def self.find_concept_by_name(name)
86
- concept_id = TEST_INDICATOR_MAPPINGS[name.upcase]
87
- query_condition = concept_id.nil? ? { name: CGI.unescapeHTML(name) } : { concept_id: }
88
82
  ConceptName.joins(:concept)
89
- .merge(Concept.all)
90
- .where(query_condition)
83
+ .merge(Concept.all) # Filter out voided
84
+ .where(name: CGI.unescapeHTML(name))
91
85
  .first
92
86
  end
93
87
  end
data/lib/auto12epl.rb CHANGED
@@ -96,9 +96,24 @@ class Auto12Epl
96
96
  "#{last_name}, #{first_name}#{middle_initial.nil? ? '' : " #{middle_initial}"}"
97
97
  end
98
98
 
99
+ def generate_small_specimen_label(last_name, first_name, gender, col_date_time, tests, acc_num, number_of_copies = print_copies)
100
+ <<~TEXT
101
+ N
102
+ R216,0
103
+ ZT
104
+ S1
105
+ A100,6,0,1,1,1,N,"#{first_name}, #{last_name} - #{gender}"
106
+ B120,40,0,1A,1,2,48,N,"#{acc_num}"
107
+ A100,100,0,1,1,1,N,"#{acc_num}"
108
+ A100,118,0,1,1,1,N,"#{col_date_time}"
109
+ A100,140,0,1,1,1,N,"#{tests}"
110
+ P#{number_of_copies}
111
+ TEXT
112
+ end
113
+
99
114
  # The main function to generate the EPL
100
115
  def generate_epl(last_name, first_name, middle_initial, pid, dob, age, gender, col_date_time, col_name, tests, stat,
101
- acc_num, schema_track)
116
+ acc_num, schema_track, number_of_copies = print_copies)
102
117
  # format text and set margin
103
118
  if stat.nil?
104
119
  name_text = truncate_name(last_name, first_name, middle_initial, false)
@@ -133,9 +148,9 @@ class Auto12Epl
133
148
 
134
149
  # combine EPL statements
135
150
  if stat.nil?
136
- "\nN\nR216,0\nZT\nS1\n#{name_element}\n#{pid_dob_age_gender_element}\n#{barcode_element}\n#{barcode_human_element}\n#{collector_element}\n#{tests_element}\nP#{print_copies}\n"
151
+ "\nN\nR216,0\nZT\nS1\n#{name_element}\n#{pid_dob_age_gender_element}\n#{barcode_element}\n#{barcode_human_element}\n#{collector_element}\n#{tests_element}\nP#{number_of_copies}\n"
137
152
  else
138
- "\nN\nR216,0\nZT\nS1\n#{name_element}\n#{pid_dob_age_gender_element}\n#{barcode_element}\n#{barcode_human_element}\n#{collector_element}\n#{tests_element}\n#{stat_element}\nP#{print_copies}\n"
153
+ "\nN\nR216,0\nZT\nS1\n#{name_element}\n#{pid_dob_age_gender_element}\n#{barcode_element}\n#{barcode_human_element}\n#{collector_element}\n#{tests_element}\n#{stat_element}\nP#{number_of_copies}\n"
139
154
  end
140
155
  end
141
156
 
data/lib/lab/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lab
4
- VERSION = '2.0.2'
4
+ VERSION = '2.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: 2.0.2
4
+ version: 2.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: 2024-07-05 00:00:00.000000000 Z
11
+ date: 2025-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: couchrest
@@ -336,7 +336,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
336
336
  - !ruby/object:Gem::Version
337
337
  version: '0'
338
338
  requirements: []
339
- rubygems_version: 3.5.6
339
+ rubygems_version: 3.5.17
340
340
  signing_key:
341
341
  specification_version: 4
342
342
  summary: Lab extension for the HIS-EMR-API