ruby_astm 1.4.7 → 1.4.9
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/publisher/google_lab_interface.rb +14 -7
- data/lib/publisher/poller.rb +18 -1
- data/lib/ruby_astm/lab_interface.rb +19 -74
- data/lib/ruby_astm/order.rb +1 -0
- data/lib/ruby_astm/result.rb +8 -1
- data/lib/ruby_astm/usb_module.rb +49 -25
- 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: 6abc78dc8d0ed2abe9b877e3727155c0aacfe008b40f8e68678f8953c41b3230
|
4
|
+
data.tar.gz: 2c477c41fb604d712da07752e0468bd6468a51ca0ca3e86c24985a99a5003b1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1c5b8d38e039fb84feee8ce501a5fc648ffe7fd79aa088f4018c4dd18c60d6611ba75deac6652b3d558778adf02f827aee3a716e4000e19b762b7459a943385
|
7
|
+
data.tar.gz: 49e0c42b89413aabb1d40ca9a5b2e8ccdedd34ad3a3919a4de6de827f7b33237ab329d96d88679b00850be09f16b6f05be85d9059b4057bc863d431821d8ac40
|
@@ -59,6 +59,9 @@ class Google_Lab_Interface < Poller
|
|
59
59
|
AstmServer.log("Initialized Google Lab Interface")
|
60
60
|
$service = Google::Apis::ScriptV1::ScriptService.new
|
61
61
|
$service.client_options.application_name = APPLICATION_NAME
|
62
|
+
$service.client_options.send_timeout_sec = 1200
|
63
|
+
$service.client_options.open_timeout_sec = 1200
|
64
|
+
$service.request_options.retries = 3
|
62
65
|
$service.authorization = authorize
|
63
66
|
end
|
64
67
|
|
@@ -74,12 +77,16 @@ class Google_Lab_Interface < Poller
|
|
74
77
|
:input => JSON.generate([epoch])
|
75
78
|
}
|
76
79
|
|
80
|
+
|
81
|
+
|
77
82
|
request = Google::Apis::ScriptV1::ExecutionRequest.new(
|
78
83
|
function: 'get_latest_test_information',
|
79
84
|
parameters: pp
|
80
85
|
)
|
81
86
|
|
82
|
-
|
87
|
+
puts "params are: #{pp}"
|
88
|
+
|
89
|
+
#begin
|
83
90
|
resp = $service.run_script(self.script_id, request)
|
84
91
|
if resp.error
|
85
92
|
AstmServer.log("Response Error polling LIS for requisitions: #{resp.error.message}: #{resp.error.code}")
|
@@ -87,13 +94,13 @@ class Google_Lab_Interface < Poller
|
|
87
94
|
process_LIS_response(resp.response["result"])
|
88
95
|
AstmServer.log("Successfully polled lis for requisitions: #{resp.response}")
|
89
96
|
end
|
90
|
-
rescue => e
|
91
|
-
AstmServer.log("Rescue Error polling LIS for requisitions: #{e.to_s}")
|
92
|
-
AstmServer.log("Error backtrace")
|
93
|
-
AstmServer.log(e.backtrace.to_s)
|
94
|
-
ensure
|
97
|
+
#rescue => e
|
98
|
+
#AstmServer.log("Rescue Error polling LIS for requisitions: #{e.to_s}")
|
99
|
+
#AstmServer.log("Error backtrace")
|
100
|
+
#AstmServer.log(e.backtrace.to_s)
|
101
|
+
#ensure
|
95
102
|
|
96
|
-
end
|
103
|
+
#end
|
97
104
|
|
98
105
|
end
|
99
106
|
|
data/lib/publisher/poller.rb
CHANGED
@@ -253,7 +253,24 @@ class Poller
|
|
253
253
|
def get_checkpoint
|
254
254
|
latest_two_entries = $redis.zrange Poller::REQUISITIONS_SORTED_SET, -2, -1, {withscores: true}
|
255
255
|
unless latest_two_entries.blank?
|
256
|
-
latest_two_entries[-1][1].to_i
|
256
|
+
last_entry = latest_two_entries[-1][1].to_i
|
257
|
+
#one_year_back = Time.now - 1.year
|
258
|
+
#one_year_back = one_year_back.to_i
|
259
|
+
#time_now = Time.now.to_i
|
260
|
+
#puts "diff is: #{time_now*1000 - one_year_back*1000}"
|
261
|
+
#puts "one year back is "
|
262
|
+
#puts "last entry is: #{last_entry}"
|
263
|
+
#puts "last entry - Time.now is :#{Time.now.to_i*1000 - last_entry}"
|
264
|
+
#puts "default checkpoint is :#{default_checkpoint}"
|
265
|
+
#last_entry
|
266
|
+
#default_checkpoint
|
267
|
+
if (((Time.now.to_i)*1000) - last_entry) >= 86400*1000
|
268
|
+
puts "diff is too great"
|
269
|
+
default_checkpoint
|
270
|
+
else
|
271
|
+
puts "taking the last entry"
|
272
|
+
last_entry
|
273
|
+
end
|
257
274
|
else
|
258
275
|
default_checkpoint
|
259
276
|
end
|
@@ -78,6 +78,17 @@ module LabInterface
|
|
78
78
|
File.dirname __dir__
|
79
79
|
end
|
80
80
|
|
81
|
+
|
82
|
+
def process_byte_file(full_file_path)
|
83
|
+
bytes = eval(IO.read(full_file_path))
|
84
|
+
bytes = bytes.flatten
|
85
|
+
text = pre_process_bytes(bytes,"")
|
86
|
+
text.each_line do |line|
|
87
|
+
line.split('\\r').each do |txt|
|
88
|
+
process_text(txt)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
81
92
|
## can process a file which contains ASTM output.
|
82
93
|
## this method is added so that you can load previously generated ASTM output into your database
|
83
94
|
## it also simplifies testing.
|
@@ -209,76 +220,7 @@ module LabInterface
|
|
209
220
|
|
210
221
|
end
|
211
222
|
|
212
|
-
|
213
|
-
## [[bytes],[bytes]....]
|
214
|
-
def process_electrolytes(data_bytes)
|
215
|
-
#puts "came to process electrolytes_plain_text"
|
216
|
-
byte_arr = data_bytes.flatten
|
217
|
-
#puts "the end part of the arr is"
|
218
|
-
return if byte_arr[-4..-1] != SIEMENS_ELECTROLYTE_END
|
219
|
-
self.data_bytes = []
|
220
|
-
concat = ""
|
221
|
-
byte_arr.each do |byte|
|
222
|
-
x = [byte].pack('c*').force_encoding('UTF-8')
|
223
|
-
if x == "\r"
|
224
|
-
concat+="\n"
|
225
|
-
elsif x == "\n"
|
226
|
-
#puts "new line found --- "
|
227
|
-
concat+=x
|
228
|
-
#puts "last thing in concat."
|
229
|
-
#puts concat[-1].to_s
|
230
|
-
else
|
231
|
-
concat+=x
|
232
|
-
end
|
233
|
-
end
|
234
|
-
## nwo write concat to file
|
235
|
-
## File.open("electrolytes_plain_text.txt", 'a+') { |file| file.write(concat) }
|
236
|
-
## Header
|
237
|
-
## Patient
|
238
|
-
## Order
|
239
|
-
## Result
|
240
|
-
## Terminator
|
241
|
-
|
242
|
-
## GET PO2
|
243
|
-
concat.scan(/pCO2\s+(?<pco>(\d+)(\.\d)*)(\^|v)?\s+mmHg/) do |k|
|
244
|
-
n = Regexp.last_match
|
245
|
-
puts n[:pco].to_s
|
246
|
-
end
|
247
|
-
|
248
|
-
## GET PCO2
|
249
|
-
concat.scan(/pO2\s+(?<po>(\d+)(\.\d)*)(\^|v)?\s+mmHg/) do |k|
|
250
|
-
n = Regexp.last_match
|
251
|
-
puts n[:po].to_s
|
252
|
-
end
|
253
|
-
|
254
|
-
## GET PH
|
255
|
-
|
256
|
-
## GET NA+
|
257
|
-
|
258
|
-
## GET K+
|
259
|
-
|
260
|
-
## GET CL-
|
261
|
-
|
262
|
-
## GET PATIENT_ID
|
263
|
-
|
264
|
-
## GET DATE AND TIME
|
265
|
-
|
266
|
-
start_measure = false
|
267
|
-
|
268
|
-
concat.split(/\n/).each do |line|
|
269
|
-
if line =~ /348\-D718/
|
270
|
-
header = Header.new({:line => line})
|
271
|
-
self.headers ||= []
|
272
|
-
self.headers << header
|
273
|
-
elsif line =~ /\-{32}/
|
274
|
-
elsif line =~ /Patient\s+ID/
|
275
|
-
elsif line =~ /Measured/
|
276
|
-
elsif line =~ /outside ref/
|
277
|
-
else
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
end
|
223
|
+
|
282
224
|
|
283
225
|
def receive_data(data)
|
284
226
|
|
@@ -324,10 +266,10 @@ module LabInterface
|
|
324
266
|
if data.bytes.to_a[-1] == 4
|
325
267
|
puts "GOT EOT --- PROCESSING BUFFER, AND CLEARING."
|
326
268
|
process_text(self.data_buffer)
|
327
|
-
|
328
|
-
|
329
|
-
#IO.write((File.join root_path,'test','resources','
|
330
|
-
|
269
|
+
root_path = File.dirname __dir__
|
270
|
+
puts "root path #{root_path}"
|
271
|
+
#IO.write((File.join root_path,'../test','resources','stago.txt'),self.test_data_bytes.to_s)
|
272
|
+
puts self.test_data_bytes.flatten.to_s
|
331
273
|
self.data_buffer = ''
|
332
274
|
unless self.headers.blank?
|
333
275
|
if self.headers[-1].queries.blank?
|
@@ -467,7 +409,10 @@ module LabInterface
|
|
467
409
|
end
|
468
410
|
end
|
469
411
|
when "Result"
|
412
|
+
puts "GOT RESULT------------------>"
|
413
|
+
puts "line is :#{line}"
|
470
414
|
result = Result.new({:line => line})
|
415
|
+
puts "made new result"
|
471
416
|
unless self.headers.blank?
|
472
417
|
unless self.headers[-1].patients.blank?
|
473
418
|
unless self.headers[-1].patients[-1].orders[-1].blank?
|
data/lib/ruby_astm/order.rb
CHANGED
data/lib/ruby_astm/result.rb
CHANGED
@@ -9,9 +9,12 @@ class Result
|
|
9
9
|
attr_accessor :dilution
|
10
10
|
|
11
11
|
def set_name(args)
|
12
|
+
puts "came to set name"
|
12
13
|
if line = args[:line]
|
13
|
-
|
14
|
+
puts "line fields is: #{line.fields}"
|
14
15
|
unless line.fields[2].blank?
|
16
|
+
puts "line fields 2 is:"
|
17
|
+
puts line.fields[2]
|
15
18
|
line.fields[2].scan(/^\^+(?<name>[A-Za-z0-9\%\#\-\_\?\/]+)\^?(?<dilution>\d+)?/) { |name,dilution|
|
16
19
|
|
17
20
|
self.name = lookup_mapping(name)
|
@@ -47,6 +50,9 @@ class Result
|
|
47
50
|
}
|
48
51
|
end
|
49
52
|
unless line.fields[2].blank?
|
53
|
+
puts "line fields 2 is:"
|
54
|
+
puts line.fields[2]
|
55
|
+
puts "----------------------------"
|
50
56
|
line.fields[2].scan(/\^+(?<name>[A-Za-z0-9\%\#\-\_\?\/]+)\^?(?<dilution>\d+)?/) { |name,dilution|
|
51
57
|
if transform_expression = lookup_transform(name)
|
52
58
|
self.value = eval(transform_expression)
|
@@ -107,6 +113,7 @@ class Result
|
|
107
113
|
|
108
114
|
## here will call mappings and check the result correlation
|
109
115
|
def initialize(args={})
|
116
|
+
puts "called initialize result"
|
110
117
|
set_name(args)
|
111
118
|
set_flags(args)
|
112
119
|
set_value(args)
|
data/lib/ruby_astm/usb_module.rb
CHANGED
@@ -4,6 +4,8 @@ module UsbModule
|
|
4
4
|
|
5
5
|
mattr_accessor :usb_response_bytes
|
6
6
|
|
7
|
+
ESR_RESULTS_HASH = "ESR_RESULTS_HASH"
|
8
|
+
|
7
9
|
def begin_patient_results
|
8
10
|
">00A00013"
|
9
11
|
end
|
@@ -30,6 +32,24 @@ module UsbModule
|
|
30
32
|
self.usb_response_bytes[-3] == 13
|
31
33
|
end
|
32
34
|
|
35
|
+
def add_result?(barcode,result)
|
36
|
+
begin
|
37
|
+
Integer(result)
|
38
|
+
#puts "result is: #{result}"
|
39
|
+
return false if result.to_i == 0
|
40
|
+
#puts "the result is not zero"
|
41
|
+
existing_result = $redis.hget(ESR_RESULTS_HASH,barcode)
|
42
|
+
#puts "existing result is: #{existing_result}"
|
43
|
+
if ((existing_result.blank?) || (existing_result != result))
|
44
|
+
return true
|
45
|
+
end
|
46
|
+
rescue => e
|
47
|
+
puts e.to_s
|
48
|
+
return false
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
33
53
|
def parse_usb_response(string_data)
|
34
54
|
string_data.bytes.to_a.each do |byte|
|
35
55
|
self.usb_response_bytes.push(byte)
|
@@ -40,31 +60,35 @@ module UsbModule
|
|
40
60
|
#puts "interpret"
|
41
61
|
if kk = self.usb_response_bytes[13..-4]
|
42
62
|
kk.each_slice(32) do |patient_record|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
unless patient_record.blank?
|
64
|
+
unless patient_record.size < 24
|
65
|
+
bar_code = nil
|
66
|
+
bar_code = patient_record[11..23].pack('c*').gsub(/\./,'')
|
67
|
+
#puts "bar code: #{bar_code}"
|
68
|
+
unless bar_code.strip.blank?
|
69
|
+
esr = patient_record[26]
|
70
|
+
patient = Patient.new(:orders => [Order.new(:results => [Result.new(:value => esr, :name => "ESR", :report_name => "ESR")])])
|
71
|
+
patient = Patient.new({})
|
72
|
+
patient.patient_id = bar_code
|
73
|
+
patient.orders = []
|
74
|
+
order = Order.new({})
|
75
|
+
result = Result.new({})
|
76
|
+
result.value = esr.to_s
|
77
|
+
result.name = "ESR"
|
78
|
+
result.report_name = "ESR"
|
79
|
+
order.id = bar_code
|
80
|
+
order.results = []
|
81
|
+
order.results << result
|
82
|
+
#puts "barcode: #{bar_code}, result : #{result.value}"
|
83
|
+
patient.orders << order
|
84
|
+
if add_result?(bar_code,result.value)
|
85
|
+
#puts patient.to_json
|
86
|
+
$redis.lpush("test_patients",patient.to_json)
|
87
|
+
$redis.hset(ESR_RESULTS_HASH,bar_code,result.value.to_i)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
68
92
|
end
|
69
93
|
end
|
70
94
|
self.usb_response_bytes = []
|