ruby_astm 1.1.0 → 1.1.1
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 +4 -4
- data/lib/ruby_astm/header.rb +26 -0
- data/lib/ruby_astm/lab_interface.rb +14 -5
- data/lib/ruby_astm/line.rb +2 -1
- data/lib/ruby_astm/order.rb +1 -1
- data/lib/ruby_astm/query.rb +29 -26
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7633bfcc74d626e2135ceab715f3b91ce9d6a1093a3748829a2e589550c6d9e
|
4
|
+
data.tar.gz: ced94d1d9124f265c519a49e9ce9325924d266abe16f6d63acf80c44990ab6b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '056821d5b0b2c10929205a4d528dfced19bf978d1719ac26cf32fd2212c4cec25666576e25a1fed01761fb3faa871d69b7120b1a994ad022990c5399df9a9ede'
|
7
|
+
data.tar.gz: 8d2fff46ffd8615662c856284301c03a07c0c776096e1f6c0c7c2a29a05c17a821b0d97bfce4e628a0c2e01aabb0bc2cd6bfaa145fbf589ca419118f0c179d3f
|
data/lib/ruby_astm/header.rb
CHANGED
@@ -45,14 +45,40 @@ class Header
|
|
45
45
|
puts JSON.pretty_generate(JSON.parse(self.to_json))
|
46
46
|
end
|
47
47
|
|
48
|
+
def build_one_response
|
49
|
+
responses = []
|
50
|
+
self.queries.each do |query|
|
51
|
+
header_response = "1H|\`^&||||||||||P|E 1394-97|#{Time.now.strftime("%Y%m%d%H%M%S")}\r"
|
52
|
+
query.build_response.each do |qresponse|
|
53
|
+
header_response += qresponse
|
54
|
+
#responses << (header_response + qresponse)
|
55
|
+
end
|
56
|
+
responses << header_response
|
57
|
+
end
|
58
|
+
responses
|
59
|
+
end
|
60
|
+
|
48
61
|
## used to respond to queries.
|
49
62
|
## @return[String] response_to_query : response to the header query.
|
50
63
|
def build_responses
|
64
|
+
responses = []
|
65
|
+
self.queries.each do |query|
|
66
|
+
header_response = "1H|\`^&||||||||||P|E 1394-97|#{Time.now.strftime("%Y%m%d%H%M%S")}\r"
|
67
|
+
query.build_response.each do |qresponse|
|
68
|
+
responses << (header_response + qresponse)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
=begin
|
51
72
|
responses = self.queries.map {|query|
|
52
73
|
header_response = "1H|\`^&||||||||||P|E 1394-97|#{Time.now.strftime("%Y%m%d%H%M%S")}\r"
|
74
|
+
## here the queries have multiple responses.
|
75
|
+
query.build_response.each do |qresponse|
|
76
|
+
|
77
|
+
end
|
53
78
|
query.response = header_response + query.build_response
|
54
79
|
query.response
|
55
80
|
}
|
81
|
+
=end
|
56
82
|
responses
|
57
83
|
end
|
58
84
|
|
@@ -63,7 +63,7 @@ module LabInterface
|
|
63
63
|
|
64
64
|
self.data_buffer ||= ''
|
65
65
|
|
66
|
-
|
66
|
+
puts "incoming data bytes."
|
67
67
|
|
68
68
|
concat = ""
|
69
69
|
|
@@ -95,12 +95,17 @@ module LabInterface
|
|
95
95
|
|
96
96
|
|
97
97
|
if data.bytes.to_a[-1] == 4
|
98
|
-
puts self.data_buffer
|
98
|
+
#puts self.data_buffer
|
99
99
|
process_text(self.data_buffer)
|
100
100
|
self.data_buffer = ''
|
101
101
|
send_data(ENQ)
|
102
102
|
elsif data.bytes.to_a[0] == 6
|
103
|
-
self.headers[-1].
|
103
|
+
header_responses = self.headers[-1].build_one_response
|
104
|
+
header_responses.each_with_index {|response,key|
|
105
|
+
#puts "response is:"
|
106
|
+
#response.bytes.to_a.each do |b|
|
107
|
+
# puts [b].pack('c*')
|
108
|
+
#end
|
104
109
|
message_checksum = checksum(response + terminator + ETX)
|
105
110
|
#puts "Calculated checksum is: #{message_checksum}"
|
106
111
|
final_resp = STX + response + terminator + ETX + message_checksum + "\r"
|
@@ -108,12 +113,16 @@ module LabInterface
|
|
108
113
|
final_resp_arr << 10
|
109
114
|
#puts final_resp_arr.to_s
|
110
115
|
if (self.headers[-1].response_sent == false)
|
116
|
+
puts "sending the data as follows----------------------------------------------"
|
117
|
+
puts "response sent is:"
|
118
|
+
puts self.headers[-1].response_sent
|
119
|
+
puts final_resp_arr.pack('c*').gsub(/\r/,'\n')
|
111
120
|
send_data(final_resp_arr.pack('c*'))
|
112
|
-
self.headers[-1].response_sent = true
|
121
|
+
self.headers[-1].response_sent = true if (key == (header_responses.size - 1))
|
113
122
|
else
|
114
123
|
send_data(EOT)
|
115
124
|
end
|
116
|
-
|
125
|
+
}
|
117
126
|
else
|
118
127
|
## send the header
|
119
128
|
#puts "--------- SENT ACK -----------"
|
data/lib/ruby_astm/line.rb
CHANGED
@@ -41,8 +41,9 @@ class Line
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def detect_type
|
44
|
-
|
44
|
+
puts "detecting line type: #{self.text}"
|
45
45
|
line_type = self.fields[0]
|
46
|
+
return unless line_type
|
46
47
|
line_type.scan(/(?<ltype>[A-Z]+)/) { |ltype|
|
47
48
|
if Line::TYPES[ltype[0]]
|
48
49
|
self.type = Line::TYPES[ltype[0]]
|
data/lib/ruby_astm/order.rb
CHANGED
@@ -117,7 +117,7 @@ class Order
|
|
117
117
|
#puts "no specimen type has been provided, sending SERUM"
|
118
118
|
end
|
119
119
|
|
120
|
-
"O|#{self.sequence_number}|#{self.id}
|
120
|
+
"O|#{self.sequence_number}|#{self.id}|#{Time.now.to_i.to_s}|^^^#{self.tests.join('`^^^')}|#{self.priority}||#{Time.now.strftime("%Y%m%d%H%M%S")}||||N||||#{self.specimen_type || 'SERUM'}\r"
|
121
121
|
end
|
122
122
|
|
123
123
|
end
|
data/lib/ruby_astm/query.rb
CHANGED
@@ -4,17 +4,20 @@ class Query
|
|
4
4
|
|
5
5
|
attr_accessor :response
|
6
6
|
|
7
|
+
attr_accessor :sample_ids
|
8
|
+
|
7
9
|
def initialize(args)
|
8
10
|
line = args[:line]
|
9
11
|
unless line.fields[2].empty?
|
10
12
|
fields = line.fields[2].split(/\^/)
|
11
|
-
|
13
|
+
sample_id = fields[1].strip
|
14
|
+
self.sample_ids = sample_id.split(/\`/)
|
12
15
|
end
|
13
16
|
end
|
14
17
|
|
15
|
-
def get_tests
|
18
|
+
def get_tests(sample_id)
|
16
19
|
tests = []
|
17
|
-
sample_tests = $redis.hget(Poller::REQUISITIONS_HASH,
|
20
|
+
sample_tests = $redis.hget(Poller::REQUISITIONS_HASH,sample_id)
|
18
21
|
unless sample_tests.blank?
|
19
22
|
tests = JSON.parse(sample_tests)
|
20
23
|
end
|
@@ -24,31 +27,31 @@ class Query
|
|
24
27
|
## each query will build one patient and one order inside it.
|
25
28
|
## the order can have many tests.
|
26
29
|
def build_response(variables=nil)
|
27
|
-
## so the response is thus incoming.
|
28
|
-
=begin
|
29
|
-
variables ||= {
|
30
|
-
:sequence_number => "0",
|
31
|
-
:patient_id => "abcde",
|
32
|
-
:specimen_id => self.sample_id,
|
33
|
-
:tests => ["TRIG"],
|
34
|
-
:priority => "R"
|
35
|
-
}
|
36
|
-
=end
|
37
|
-
|
38
|
-
## tests are got from the requisitions hash.
|
39
|
-
tests = get_tests
|
40
|
-
|
41
|
-
## default sequence number is 0 (THIS MAY LEAD TO PROBLEMS.)
|
42
|
-
sequence_number = "0"
|
43
|
-
|
44
|
-
## default patient id:
|
45
|
-
patient_id = "abcde#{Time.now.strftime('%b %d, %Y, %H:%M:%S')}"
|
46
|
-
|
47
|
-
patient = Patient.new({:sequence_number => sequence_number, :patient_id => patient_id})
|
48
30
|
|
49
|
-
|
31
|
+
responses = []
|
32
|
+
|
33
|
+
one_response = ''
|
34
|
+
|
35
|
+
self.sample_ids.each_with_index {|sid,key|
|
36
|
+
|
37
|
+
## tests are got from the requisitions hash.
|
38
|
+
tests = get_tests(sid)
|
39
|
+
|
40
|
+
## default sequence number is 0 (THIS MAY LEAD TO PROBLEMS.)
|
41
|
+
sequence_number = "#{key.to_s}"
|
42
|
+
|
43
|
+
## default patient id:
|
44
|
+
patient_id = "abcde#{Time.now.to_i.to_s}"
|
45
|
+
|
46
|
+
patient = Patient.new({:sequence_number => sequence_number, :patient_id => patient_id})
|
47
|
+
|
48
|
+
order = Order.new({:sequence_number => patient.sequence_number, :specimen_id => sid, :tests => tests, :priority => "R"})
|
49
|
+
|
50
|
+
responses << (patient.build_response + order.build_response)
|
51
|
+
|
52
|
+
}
|
50
53
|
|
51
|
-
return
|
54
|
+
return [one_response]
|
52
55
|
|
53
56
|
end
|
54
57
|
|