ez7gen 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/ez7gen +6 -0
- data/lib/ez7gen.rb +23 -0
- data/lib/ez7gen/config/schema/2.4/2.4.HL7.xml +13904 -0
- data/lib/ez7gen/config/schema/2.4/VAZ2.4.HL7.xml +3085 -0
- data/lib/ez7gen/config/schema/2.4/added/coded-tables.xml +730 -0
- data/lib/ez7gen/config/schema/2.4/rules/2.4.HL7.yml +4 -0
- data/lib/ez7gen/config/schema/2.4/rules/VAZ2.4.HL7.yml +6 -0
- data/lib/ez7gen/config/schema/2.5/2.5.HL7.xml +10008 -0
- data/lib/ez7gen/config/schema/2.5/VAZ2.5.HL7.xml +7 -0
- data/lib/ez7gen/config/schema/2.5/added/coded-tables.xml +549 -0
- data/lib/ez7gen/config/schema/readme.txt +0 -0
- data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_m01 20151201.xml +416 -0
- data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_y01.xml +416 -0
- data/lib/ez7gen/config/templates/2.4/eiv-ec-MFN_X01_reg request 20160126.xml +659 -0
- data/lib/ez7gen/config/templates/2.4/examples/ADT_A60.txt +69 -0
- data/lib/ez7gen/config/templates/2.4/examples/eiv table update-mfn_m01 20151201.txt +21 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_dss_units-query_qbp_q13-qbp_q13.txt +26 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.txt +26 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_patient eligibility_response-rsp_k11-080714.txt +44 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.txt +21 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11.txt +42 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13.txt +49 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.txt +31 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.txt +21 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_esc_procedures_response_rtb_k13-rtb_k13.txt +40 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.txt +21 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.txt +21 -0
- data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patinet_problems_response_rsp_k11-rsp_k11.txt +33 -0
- data/lib/ez7gen/config/templates/2.4/examples/orur01rvbecv2.txt +31 -0
- data/lib/ez7gen/config/templates/2.4/examples/sqwm vitals-oru_ro1.txt +52 -0
- data/lib/ez7gen/config/templates/2.4/examples/vista sqwm-adt_a60.txt +40 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_dss_units_query_qbp_q13-qbp_q13.xml +312 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.xml +314 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_patient eligibility_response-rsp_k11-080714.xml +640 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.xml +284 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11-rsp_k11.xml +563 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13-rtb_k13.xml +365 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.xml +2172 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.xml +269 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_procedures_response_rtb_k13-rtb_k13-rtb_k13.xml +354 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.xml +284 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.xml +282 -0
- data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_response_rsp_k11-rsp_k11-rsp_k11.xml +565 -0
- data/lib/ez7gen/config/templates/2.4/orur01rvbecv2.xml +1529 -0
- data/lib/ez7gen/config/templates/2.4/sqwm vitals-oru_r01.xml +2975 -0
- data/lib/ez7gen/config/templates/2.4/vista sqwm-adt_a60.xml +1360 -0
- data/lib/ez7gen/message_factory.rb +142 -0
- data/lib/ez7gen/msg_error_handler.rb +33 -0
- data/lib/ez7gen/profile_parser.rb +321 -0
- data/lib/ez7gen/resources/properties-with-comments.yml +51 -0
- data/lib/ez7gen/resources/properties.yml +325 -0
- data/lib/ez7gen/service/2.4/dynamic_field_generator.rb +45 -0
- data/lib/ez7gen/service/2.4/field_generator.rb +1586 -0
- data/lib/ez7gen/service/2.5/field_generator.rb +75 -0
- data/lib/ez7gen/service/base_field_generator.rb +451 -0
- data/lib/ez7gen/service/segment_generator.rb +218 -0
- data/lib/ez7gen/service/segment_picker.rb +147 -0
- data/lib/ez7gen/service/template_generator.rb +213 -0
- data/lib/ez7gen/service/type_aware_field_generator.rb +1583 -0
- data/lib/ez7gen/service/utils.rb +75 -0
- data/lib/ez7gen/structure_parser.rb +331 -0
- data/lib/ez7gen/version.rb +38 -0
- data/test/Additional Tables with values_v1.1.txt +1653 -0
- data/test/added_shema_test.rb +143 -0
- data/test/app-tmp.rb +225 -0
- data/test/at.txt +1 -0
- data/test/backburner.zip +0 -0
- data/test/codes.txt +262 -0
- data/test/codes1.txt +1240 -0
- data/test/data_types_exploration_test.rb +213 -0
- data/test/dynamic_field_generated_test.rb +292 -0
- data/test/message_factory_24_custom_test.rb +648 -0
- data/test/message_factory_25_test.rb +50 -0
- data/test/message_factory_adm_test.rb +558 -0
- data/test/message_factory_gen_test.rb +63 -0
- data/test/message_factory_lab_test.rb +107 -0
- data/test/message_factory_pharm_test.rb +121 -0
- data/test/message_factory_template_24_test.rb +730 -0
- data/test/message_factory_test.rb +220 -0
- data/test/msg_error_handler_test.rb +59 -0
- data/test/profile_parser_test.rb +542 -0
- data/test/quick_run.rb +880 -0
- data/test/segment_generator_test.rb +656 -0
- data/test/segment_picker_test.rb +279 -0
- data/test/structrure_parser_test.rb +355 -0
- data/test/template_generator_test.rb +164 -0
- data/test/type_aware_field_generator_test.rb +582 -0
- data/test/utils_test.rb +97 -0
- metadata +215 -0
@@ -0,0 +1,164 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'ox'
|
3
|
+
|
4
|
+
require_relative '../lib/ez7gen/service/template_generator'
|
5
|
+
require_relative '../lib/ez7gen/profile_parser'
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
class TemplateGeneratorTest < Test::Unit::TestCase
|
10
|
+
@@VS =
|
11
|
+
[
|
12
|
+
{:std=>"2.4", :path=>"../test/test-config/schema/2.4", :profiles=>[{:doc=>"2.4.HL7", :name=>"2.4", :std=>"1", :path=>"../test/test-config/schema/2.4/2.4.HL7.xml"}, {:doc=>"VAZ2.4.HL7", :name=>"VAZ2.4", :description=>"2.4 schema with VA defined tables and Z segments", :base=>"2.4", :path=>"../test/test-config/schema/2.4/VAZ2.4.HL7.xml.bkp"}]},
|
13
|
+
{:std=>"2.5", :path=>"../test/test-config/schema/2.5", :profiles=>[{:doc=>"2.5.HL7", :name=>"2.5", :std=>"1", :path=>"../test/test-config/schema/2.5/2.5.HL7.xml"}, {:doc=>"TEST2.5.HL7", :name=>"TEST2.5", :description=>"2.5 mockup schema for testing", :base=>"2.4", :path=>"../test/test-config/schema/2.5/VAZ2.5.HL7.xml"}]}
|
14
|
+
]
|
15
|
+
@attrs = {std: '2.4', version: '2.4.HL7', event: 'ADT_A01', version_store: @@VS}
|
16
|
+
@@pp = ProfileParser.new(@attrs)
|
17
|
+
|
18
|
+
# Called before every test method runs. Can be used
|
19
|
+
# to set up fixture information.
|
20
|
+
def setup
|
21
|
+
# @attrs = {std: '2.4', version: '2.4.HL7', event: 'ADT_A01'}
|
22
|
+
# @pp = [ProfileParser.new(@attrs)]
|
23
|
+
end
|
24
|
+
|
25
|
+
# Called after every test method runs. Can be used to tear
|
26
|
+
# down fixture information.
|
27
|
+
def teardown
|
28
|
+
@pp = nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_read_template_ADT_A60
|
32
|
+
templatePath = 'test-config/templates/ADT_A60.xml'
|
33
|
+
|
34
|
+
useExVal = false
|
35
|
+
map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_metadata(useExVal)
|
36
|
+
|
37
|
+
# p map
|
38
|
+
# map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_template_metadata( usages)
|
39
|
+
p map
|
40
|
+
assert_equal(4, map.size)
|
41
|
+
assert_equal 'Recorded Date/Time', map['EVN'].first[:Name]
|
42
|
+
assert_equal '20', map['EVN'].first[TemplateGenerator::COMP].first[:Length]
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_read_template_EVN
|
47
|
+
|
48
|
+
templatePath = 'test-config/templates/ADT_A60_EVN.xml'
|
49
|
+
useExVal = false
|
50
|
+
map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_metadata(useExVal)
|
51
|
+
#map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_template_metadata( usages)
|
52
|
+
puts map
|
53
|
+
assert_equal(4, map.size)
|
54
|
+
assert_equal 'Recorded Date/Time', map['EVN'].first[:Name]
|
55
|
+
assert_equal '20', map['EVN'].first[TemplateGenerator::COMP].first[:Length]
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_read_template_PID
|
59
|
+
|
60
|
+
templatePath = 'test-config/templates/ADT_A60_PID.xml'
|
61
|
+
useExVal = false
|
62
|
+
tg = TemplateGenerator.new(templatePath,{'primary' => @@pp })
|
63
|
+
# tg.class.const_set('USAGES_REQ', [])
|
64
|
+
map = tg.build_metadata(useExVal)
|
65
|
+
|
66
|
+
# TemplateGenerator.USAGES_REQ = ['R','RE']
|
67
|
+
# map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_template_metadata( usages)
|
68
|
+
# p map
|
69
|
+
assert_equal 1, map.size
|
70
|
+
assert_equal 9, map['PID'][0].size
|
71
|
+
|
72
|
+
# puts map
|
73
|
+
puts map['PID']
|
74
|
+
puts
|
75
|
+
assert_equal 0, map['PID'].first[TemplateGenerator::COMP].first[:Pos]
|
76
|
+
assert_equal 0, map['PID'].first[TemplateGenerator::COMP].first[:Pos]
|
77
|
+
puts map['PID'][1][TemplateGenerator::COMP]
|
78
|
+
puts
|
79
|
+
puts map['PID'][1][TemplateGenerator::COMP][0][TemplateGenerator::SUB]
|
80
|
+
# map['PID'].first[2][:components].each {|it| p it.keys}
|
81
|
+
# puts map['PID'].first[4]
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_read_template_PID_1
|
85
|
+
|
86
|
+
templatePath = 'test-config/templates/ADT_A60_PID.xml'
|
87
|
+
useExVal = false
|
88
|
+
map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_metadata(useExVal)
|
89
|
+
|
90
|
+
puts map
|
91
|
+
assert_equal 1, map.size
|
92
|
+
assert_equal 9, map['PID'][0].size
|
93
|
+
|
94
|
+
# puts map
|
95
|
+
puts map['PID']
|
96
|
+
puts
|
97
|
+
assert_equal 0, map['PID'].first[TemplateGenerator::COMP].first[:Pos]
|
98
|
+
assert_equal 0, map['PID'].first[TemplateGenerator::COMP].first[:Pos]
|
99
|
+
puts map['PID'][1][TemplateGenerator::COMP]
|
100
|
+
puts
|
101
|
+
puts map['PID'][1][TemplateGenerator::COMP][0][TemplateGenerator::SUB]
|
102
|
+
# map['PID'].first[2][:components].each {|it| p it.keys}
|
103
|
+
# puts map['PID'].first[4]
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_read_template_MFN_M01
|
107
|
+
|
108
|
+
templatePath = 'test-config/templates/2.4/eiv table update-mfn_m01 20151201.xml'
|
109
|
+
usages = ['R','RE']
|
110
|
+
useExVal = false
|
111
|
+
map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_metadata(useExVal)
|
112
|
+
# map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_template_metadata( usages)
|
113
|
+
p map
|
114
|
+
assert_equal 3, map.size
|
115
|
+
assert_equal 3, map['MFI'].size
|
116
|
+
assert_equal 5, map['MFE'].size
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_get_metadata_EVN
|
120
|
+
|
121
|
+
# templatePath = 'test-config/templates/ADT_A60_EVN_only.xml'
|
122
|
+
templatePath = 'test-config/templates/ADT_A60_EVN.xml'
|
123
|
+
usages = ['R','RE']
|
124
|
+
useExVal = false
|
125
|
+
map = TemplateGenerator.new(templatePath,{'primary' => @@pp }).build_metadata(useExVal)
|
126
|
+
|
127
|
+
puts map
|
128
|
+
# assert_equal(4, map.size)
|
129
|
+
assert_equal 'Recorded Date/Time', map['EVN'].first[:Name]
|
130
|
+
assert_equal '20', map['EVN'].first[TemplateGenerator::COMP].first[:Length]
|
131
|
+
# {"MSH"=>[],
|
132
|
+
# "EVN"=>[
|
133
|
+
# {:Name=>"Recorded Date/Time", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"TS", :Length=>"26", :ItemNo=>"00100", :Pos=>1,
|
134
|
+
# :components=>[
|
135
|
+
# {:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"20", :Pos=>0}
|
136
|
+
# ]
|
137
|
+
# }
|
138
|
+
# ],
|
139
|
+
# "PID"=>[],
|
140
|
+
# "IAM"=>[]}
|
141
|
+
|
142
|
+
# {"MSH"=>[{:Name=>"MSH", :LongName=>"Message Header", :Usage=>"R", :Min=>"1", :Max=>"1"}],
|
143
|
+
# "EVN"=>[
|
144
|
+
# {"Field"=>[[{"Component"=>[[{:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"20", :Pos=>0}]]}]]}],
|
145
|
+
|
146
|
+
# "PID"=>[{:Name=>"PID", :LongName=>"Patient identification", :Usage=>"R", :Min=>"1", :Max=>"1"}], "IAM"=>[{:Name=>"IAM", :LongName=>"Patient adverse reaction information - unique iden", :Usage=>"R", :Min=>"1", :Max=>"*"}]}
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_use
|
151
|
+
templatePath = 'test-config/templates/ADT_A60_EVN.xml'
|
152
|
+
tg = TemplateGenerator.new(templatePath,{'primary' => @@pp })
|
153
|
+
assert_true tg.use?('R')
|
154
|
+
assert_true [true, false].include? tg.use?('RE') # could be either
|
155
|
+
|
156
|
+
tg.class.const_set('USAGES_REQ', ['R','RE']) # force to build both for testing
|
157
|
+
assert_true tg.use?('RE')
|
158
|
+
|
159
|
+
assert_false tg.use?('X')
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
end
|
@@ -0,0 +1,582 @@
|
|
1
|
+
# require "minitest/autorun"
|
2
|
+
require 'test/unit'
|
3
|
+
require_relative '../lib/ez7gen/profile_parser'
|
4
|
+
require_relative '../lib/ez7gen/service/type_aware_field_generator'
|
5
|
+
|
6
|
+
class TypeAwareFieldGeneratorTest < Test::Unit::TestCase
|
7
|
+
vs =
|
8
|
+
[
|
9
|
+
{:std=>"2.4", :path=>"../test/test-config/schema/2.4", :profiles=>[{:doc=>"2.4.HL7", :name=>"2.4", :std=>"1", :path=>"../test/test-config/schema/2.4/2.4.HL7.xml"}, {:doc=>"VAZ2.4.HL7", :name=>"VAZ2.4", :description=>"2.4 schema with VA defined tables and Z segments", :base=>"2.4", :path=>"../test/test-config/schema/2.4/VAZ2.4.HL7.xml.bkp"}]},
|
10
|
+
{:std=>"2.5", :path=>"../test/test-config/schema/2.5", :profiles=>[{:doc=>"2.5.HL7", :name=>"2.5", :std=>"1", :path=>"../test/test-config/schema/2.5/2.5.HL7.xml"}, {:doc=>"TEST2.5.HL7", :name=>"TEST2.5", :description=>"2.5 mockup schema for testing", :base=>"2.4", :path=>"../test/test-config/schema/2.5/VAZ2.5.HL7.xml"}]}
|
11
|
+
]
|
12
|
+
attrs = {std: '2.4', version: '2.4.HL7', event: 'ADT_A01', version_store: vs}
|
13
|
+
|
14
|
+
#parse xml once
|
15
|
+
@@pp = ProfileParser.new(attrs)
|
16
|
+
|
17
|
+
#helper method
|
18
|
+
def lineToHash(line)
|
19
|
+
hash = line.gsub(/(\[|\])/,'').gsub(':',',').split(',').map{|it| it.strip()}.each_slice(2).to_a.to_h
|
20
|
+
return Hash[hash.map{|(k,v)| [k.to_sym,v]}]
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def setup
|
25
|
+
@fldGenerator = TypeAwareFieldGenerator.new(@@pp)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_init
|
29
|
+
assert_equal 'Odysseus', @fldGenerator.yml['person.names.first'][0]
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_CE
|
33
|
+
# IAM.3 ‘Allergen Code/Mnemonic/Description’ with the ICD 10 Allergy Reaction Codes from the properties file.
|
34
|
+
# However, it needs to be populated with the ICD 10 Allergen Codes from the properties file (e.g. T78.40XA Allergy, unspecified, initial encounter)
|
35
|
+
line = '[piece:3, description:Allergen Code/Mnemonic/Description, datatype:CE, symbol:!, max_length:250, required:R, ifrepeating:0]'
|
36
|
+
row= lineToHash(line)
|
37
|
+
fld = @fldGenerator.CE(row)
|
38
|
+
puts fld
|
39
|
+
icd10s =
|
40
|
+
['T78.40XA^Allergy unspecified initial encounter',
|
41
|
+
'T78.40XD^Allergy unspecified subsequent encounter',
|
42
|
+
'Z91.048^Other nonmedicinal substance allergy status',
|
43
|
+
'Z91.09^Other allergy status, other than to drugs and biological substances',
|
44
|
+
'Z91.013^Allergy to seafood',
|
45
|
+
'Z91.010^Allergy to peanuts',
|
46
|
+
'Z88.0^Allergy status to penicillin',
|
47
|
+
'Z91.038^Other insect allergy status',
|
48
|
+
'Z91.030^Bee Allergy status']
|
49
|
+
|
50
|
+
assert_includes(icd10s, fld) # conditional should skip on auto generate
|
51
|
+
|
52
|
+
|
53
|
+
# PID.35 – PID.38 should be always blank, as they deal with animals, not humans.
|
54
|
+
line = '[max_length:250, symbol:?, description:Species Code, ifrepeating:0, datatype:CE, required:C, piece:35, codetable:446]'
|
55
|
+
row= lineToHash(line)
|
56
|
+
fld = @fldGenerator.CE(row)
|
57
|
+
puts fld
|
58
|
+
assert_equal('',fld) # conditional should skip on auto generate
|
59
|
+
|
60
|
+
line = '[[max_length:250, symbol:?, description:Breed Code, ifrepeating:0, datatype:CE, required:C, piece:36, codetable:447]'
|
61
|
+
row= lineToHash(line)
|
62
|
+
fld = @fldGenerator.CE(row)
|
63
|
+
puts fld
|
64
|
+
assert_equal('',fld) # conditional should skip on auto generate
|
65
|
+
|
66
|
+
line = '[max_length:250, description:Production Class Code, ifrepeating:0, datatype:CE, required:O, piece:38, codetable:429]'
|
67
|
+
row= lineToHash(line)
|
68
|
+
fld = @fldGenerator.CE(row, true)
|
69
|
+
puts fld
|
70
|
+
assert_equal('',fld) # conditional should skip on auto generate
|
71
|
+
|
72
|
+
line = '[max_length:250, description:Role Action Reason, ifrepeating:0, datatype:CE, required:R, piece:8]'
|
73
|
+
row= lineToHash(line)
|
74
|
+
#puts row
|
75
|
+
fld = @fldGenerator.CE(row)
|
76
|
+
assert fld.to_i < 1000
|
77
|
+
#puts fld
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_CNN
|
81
|
+
line = '[required:R, piece:8]'
|
82
|
+
row= lineToHash(line)
|
83
|
+
fld = @fldGenerator.CNN(row)
|
84
|
+
puts fld
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_segment_CE_codetable
|
88
|
+
attrs = []
|
89
|
+
line = '[max_length:250, symbol:*, description:Race, ifrepeating:1, datatype:CE, required:R, piece:10, codetable:5]'
|
90
|
+
row= lineToHash(line)
|
91
|
+
fld = @fldGenerator.CE(row)
|
92
|
+
assert fld.include?('^')
|
93
|
+
puts fld
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_NM
|
97
|
+
# Field size restriction exceeded in segment 8:
|
98
|
+
# PV2. Field 20, repetition 1 is larger than segment structure 2.4:
|
99
|
+
# PV2 permits it to be. (alert request ID=9)
|
100
|
+
# '<SegmentSubStructure piece='20' description='Expected Number of Insurance Plans' datatype='NM' max_length='1' required='O' ifrepeating='0' />' line ='[max_length:4, symbol:!, description:Set ID - DG1, ifrepeating:0, datatype:SI, required:R, piece:1]'
|
101
|
+
line = '[piece:20, description:Expected Number of Insurance Plans, datatype=:NM, max_length:1,required:O, ifrepeating:0]'
|
102
|
+
fld = @fldGenerator.NM(lineToHash(line), true)
|
103
|
+
puts fld
|
104
|
+
assert_equal 1, fld.size
|
105
|
+
|
106
|
+
line = '[max_length:12, description:Total Charges, ifrepeating:0, datatype:NM, required:R, piece:47]'
|
107
|
+
fld = @fldGenerator.NM(lineToHash(line))
|
108
|
+
puts fld
|
109
|
+
assert fld.include?('.00')
|
110
|
+
assert fld.to_f < 1000
|
111
|
+
|
112
|
+
line = '[max_length:2, description:Birth Order, ifrepeating:0, datatype:NM, required:R, piece:25]'
|
113
|
+
fld = @fldGenerator.NM(lineToHash(line))
|
114
|
+
puts fld
|
115
|
+
assert fld.to_i < 10
|
116
|
+
|
117
|
+
line = '[piece=:6, description:Percentage, datatype:NM, max_length:3, required:R, ifrepeating:0]'
|
118
|
+
fld = @fldGenerator.NM(lineToHash(line))
|
119
|
+
puts fld
|
120
|
+
assert fld.to_i < 100
|
121
|
+
|
122
|
+
# <SegmentSubStructure piece='3' description='Disability %' datatype='base:NM' max_length='3' required='O' ifrepeating='0'/>
|
123
|
+
line = '[piece=:3, description:Disability %, datatype:NM, max_length:3, required:R, ifrepeating:0]'
|
124
|
+
fld = @fldGenerator.NM(lineToHash(line))
|
125
|
+
puts fld
|
126
|
+
assert fld.to_i < 100
|
127
|
+
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_CP
|
132
|
+
line ='[max_length:12, description:???, ifrepeating:0, datatype:CP, required:R, piece:13]'
|
133
|
+
fld = @fldGenerator.CP(lineToHash(line))
|
134
|
+
puts fld
|
135
|
+
assert fld.include?('.00')
|
136
|
+
|
137
|
+
line = '[piece:27, description:Guarantor Household Annual Income, datatype:CP, max_length:10, required:O, ifrepeating:0]'
|
138
|
+
fld = @fldGenerator.CP(lineToHash(line),true)
|
139
|
+
puts fld
|
140
|
+
assert fld.include?('.00')
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_CX
|
145
|
+
line = '[max_length:250, description:Alternate Visit ID, ifrepeating:0, datatype:CX, required:O, piece:50, codetable:203]'
|
146
|
+
fld = @fldGenerator.CX(lineToHash(line),true)
|
147
|
+
puts fld
|
148
|
+
|
149
|
+
line ='[max_length:250, symbol:+, description:Patient Identifier List, ifrepeating:1, datatype:CX, required:R, piece:3]'
|
150
|
+
fld = @fldGenerator.CX(lineToHash(line))
|
151
|
+
assert /^[-+]?[1-9]([0-9]*)?$/.match(fld) # is a number
|
152
|
+
puts fld
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_ELD
|
156
|
+
line ='[max_length:250, symbol:+, description:Mockup, datatype:ELD, required:R, piece:3]'
|
157
|
+
fld = @fldGenerator.ELD(lineToHash(line))
|
158
|
+
# assert /^[-+]?[1-9]([0-9]*)?$/.match(fld) # is a number
|
159
|
+
puts fld
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_ID
|
163
|
+
line ='[max_length:1, description:Separate Bill, ifrepeating:0, datatype:ID, required:R, piece:9, codetable:136]'
|
164
|
+
fld = @fldGenerator.ID(lineToHash(line))
|
165
|
+
puts fld
|
166
|
+
assert /[Y|N]/.match(fld)
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_TS
|
170
|
+
|
171
|
+
#The field IAM.13 ‘Reported Date/Time’ needs to be just the date - 8 characters long
|
172
|
+
line = '[max_length:8, description:Reported Date/Time, ifrepeating:0, datatype:TS, required:R, piece:13]'
|
173
|
+
# <SegmentSubStructure piece='13' description='Reported Date/Time' datatype='TS' max_length='8' required='O' ifrepeating='0' />
|
174
|
+
fld = @fldGenerator.TS(lineToHash(line))
|
175
|
+
puts fld
|
176
|
+
assert_equal 8, fld.size
|
177
|
+
|
178
|
+
# PID.7 Date of Birth – please make the date within 50-20 years into the past.
|
179
|
+
line = '[max_length:26, description:Date/Time Of Birth, ifrepeating:0, datatype:TS, required:R, piece:7]'
|
180
|
+
fld = @fldGenerator.TS(lineToHash(line))
|
181
|
+
puts fld
|
182
|
+
assert_equal 18, fld.size
|
183
|
+
|
184
|
+
line ='[max_length:26, description:Admit Date/Time, ifrepeating:0, datatype:TS, required:R, piece:44]'
|
185
|
+
fld_past = @fldGenerator.TS(lineToHash(line))
|
186
|
+
puts fld_past
|
187
|
+
assert_equal 18, fld_past.size, 'datetime format YYYYMMDDHHSS.SSS, like 20150321201748.373'
|
188
|
+
|
189
|
+
line ='[max_length:26, description:Role End Date/Time, ifrepeating:0, datatype:TS, required:R, piece:44]'
|
190
|
+
fld_future = @fldGenerator.TS(lineToHash(line))
|
191
|
+
puts "past timestamp #{fld_past}, future timestamp #{fld_future}"
|
192
|
+
assert fld_past < fld_future
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_DLD
|
196
|
+
line ='[max_length:25, description:Discharged to Location, ifrepeating:0, datatype:DLD, required:R, piece:37, codetable:112]'
|
197
|
+
fld = @fldGenerator.DLD(lineToHash(line))
|
198
|
+
puts fld
|
199
|
+
assert fld.include?('^') #
|
200
|
+
|
201
|
+
line ='[max_length:25, description:Discharged to Location, ifrepeating:0, datatype:DLD, required:X, piece:37]'
|
202
|
+
fld = @fldGenerator.DLD(lineToHash(line), true)
|
203
|
+
puts fld
|
204
|
+
assert fld.include?('^') #
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_DLN
|
208
|
+
line ="[max_length:25, description:Driver's License Number - Patient, ifrepeating:0, datatype:DLN, required:O, piece:20]"
|
209
|
+
fld = @fldGenerator.DLN(lineToHash(line),true)
|
210
|
+
puts fld
|
211
|
+
assert_equal 3, fld.split('^').size
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_DR
|
215
|
+
line ='[max_length:25, description:Discharged to Location, ifrepeating:0, datatype:DLD, required:R, piece:37, codetable:112]'
|
216
|
+
fld = @fldGenerator.DR(lineToHash(line))
|
217
|
+
puts fld
|
218
|
+
assert fld.include?('^') #
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_DT
|
222
|
+
line ='[max_length:8, symbol:*, description:Contract Effective Date, ifrepeating:1, datatype:DT, required:O, piece:25]'
|
223
|
+
fld = @fldGenerator.DT(lineToHash(line),true)
|
224
|
+
puts fld
|
225
|
+
assert_equal 8, fld.size, 'date format yyyymmdd, like 20141228'
|
226
|
+
|
227
|
+
# <SegmentSubStructure piece='2' description='Income Year' datatype='base:DT' max_length='4' required='O' ifrepeating='0'/>
|
228
|
+
line ='[max_length:4, description:Income Year, ifrepeating:0, datatype:DT, required:O, piece:2]'
|
229
|
+
fld = @fldGenerator.DT(lineToHash(line),true)
|
230
|
+
puts fld
|
231
|
+
assert_equal 4, fld.size, 'date format yyyy, like 2016'
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_DTN
|
235
|
+
# piece='11' description='Days' datatype='DTN' max_length='3' required='O' ifrepeating='0' codetable='149'
|
236
|
+
line ='[max_length:3, description:Days, ifrepeating:0, datatype:DTN, required:O, piece:11]'
|
237
|
+
fld = @fldGenerator.DTN(lineToHash(line),true)
|
238
|
+
puts fld
|
239
|
+
assert_not_nil /\d+/.match(fld) # number
|
240
|
+
assert 3 >= fld.size
|
241
|
+
|
242
|
+
line ='[max_length:3, description:Days, ifrepeating:0, datatype:DTN, required:O, piece:11, codetable:149]'
|
243
|
+
fld = @fldGenerator.DTN(lineToHash(line),true)
|
244
|
+
puts fld
|
245
|
+
assert_not_nil /\w+/.match(fld) # word
|
246
|
+
assert 3 >= fld.size
|
247
|
+
|
248
|
+
# assert_equal 8, fld.size, 'date format yyyymmdd, like 20141228'
|
249
|
+
end
|
250
|
+
|
251
|
+
def test_IS
|
252
|
+
# PD1.20 has a value of 27. The value is supposed to come from table 141 (this was the error picked by Ensemble):
|
253
|
+
line ='[max_length:2, description:Military Rank/Grade, ifrepeating:0, datatype:IS, required:O, piece:20, codetable:141]'
|
254
|
+
fld = @fldGenerator.IS(lineToHash(line),true)
|
255
|
+
puts fld
|
256
|
+
|
257
|
+
line ='[max_length:2, description:Interest Code, ifrepeating:0, datatype:IS, required:O, piece:28, codetable:44]'
|
258
|
+
fld = @fldGenerator.IS(lineToHash(line),true)
|
259
|
+
assert ['C','K','S','P'].include?(fld)
|
260
|
+
|
261
|
+
line ='[max_length:2, description:Interest Code, ifrepeating:0, datatype:IS, required:O, piece:28]' #, codetable:44]'
|
262
|
+
fld = @fldGenerator.IS(lineToHash(line),true)
|
263
|
+
assert fld.to_i <1000
|
264
|
+
end
|
265
|
+
|
266
|
+
def test_FC
|
267
|
+
line ='[max_length:50, symbol:*, description:Financial Class, ifrepeating:1, datatype:FC, required:O, piece:20, codetable:64]'
|
268
|
+
fld = @fldGenerator.FC(lineToHash(line),true)
|
269
|
+
puts fld
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_FN
|
273
|
+
line ='[required:O, piece:20]'
|
274
|
+
fld = @fldGenerator.FN(lineToHash(line),true)
|
275
|
+
assert fld
|
276
|
+
puts fld
|
277
|
+
end
|
278
|
+
|
279
|
+
def test_HD
|
280
|
+
line ='[max_length:180, description:Event Facility, ifrepeating:0, datatype:HD, required:O, piece:7]'
|
281
|
+
fld = @fldGenerator.HD(lineToHash(line),true)
|
282
|
+
assert fld
|
283
|
+
puts fld
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_JCC
|
287
|
+
line ='[required:O, piece:20]'
|
288
|
+
fld = @fldGenerator.JCC(lineToHash(line),true)
|
289
|
+
assert fld.include?('^')
|
290
|
+
puts fld
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_LA1
|
294
|
+
line ='[required:R, piece:1]'
|
295
|
+
fld = @fldGenerator.LA1(lineToHash(line))
|
296
|
+
assert fld.include?('^')
|
297
|
+
puts fld
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_LA2
|
301
|
+
line ='[required:R, piece:1]'
|
302
|
+
fld = @fldGenerator.LA2(lineToHash(line))
|
303
|
+
assert fld.include?('^')
|
304
|
+
puts fld
|
305
|
+
end
|
306
|
+
|
307
|
+
def test_MOP
|
308
|
+
line ='[required:R, piece:1]'
|
309
|
+
fld = @fldGenerator.MOP(lineToHash(line))
|
310
|
+
assert fld.include?('^')
|
311
|
+
puts fld
|
312
|
+
end
|
313
|
+
|
314
|
+
def test_MSG
|
315
|
+
line ='[required:R, piece:1]'
|
316
|
+
fld = @fldGenerator.MSG(lineToHash(line))
|
317
|
+
assert fld.include?('^')
|
318
|
+
puts fld
|
319
|
+
end
|
320
|
+
|
321
|
+
def test_OCD
|
322
|
+
line ='[required:R, piece:20]'
|
323
|
+
fld = @fldGenerator.OCD(lineToHash(line))
|
324
|
+
assert fld.include?('^')
|
325
|
+
puts fld
|
326
|
+
end
|
327
|
+
|
328
|
+
def test_OSP
|
329
|
+
line ='[required:R, piece:20]'
|
330
|
+
fld = @fldGenerator.OSP(lineToHash(line))
|
331
|
+
assert fld.include?('^')
|
332
|
+
puts fld
|
333
|
+
end
|
334
|
+
|
335
|
+
def test_PI
|
336
|
+
line ='[required:R, piece:20]'
|
337
|
+
fld = @fldGenerator.PI(lineToHash(line))
|
338
|
+
puts fld
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_PL
|
342
|
+
line ='[max_length:80, description:Assigned Patient Location, ifrepeating:0, datatype:PL, required:O, piece:3]'
|
343
|
+
fld = @fldGenerator.PL(lineToHash(line), true)
|
344
|
+
assert fld.include?('^')
|
345
|
+
puts fld
|
346
|
+
assert_equal 7, fld.split('^').size
|
347
|
+
end
|
348
|
+
|
349
|
+
def test_PT
|
350
|
+
line ='[datatype:PT, required:O, piece:3]'
|
351
|
+
fld = @fldGenerator.PT(lineToHash(line), true)
|
352
|
+
assert fld
|
353
|
+
puts fld
|
354
|
+
end
|
355
|
+
|
356
|
+
|
357
|
+
def test_SI
|
358
|
+
line ='[max_length:4, symbol:!, description:Set ID - DG1, ifrepeating:0, datatype:SI, required:R, piece:1]'
|
359
|
+
fld = @fldGenerator.SI(lineToHash(line), true)
|
360
|
+
assert_equal 4, fld.size
|
361
|
+
puts fld
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_ST
|
365
|
+
#ZEL.29 should be 1 digit integer.
|
366
|
+
# line = '[piece:29, description:AGENT ORANGE EXPOSURE LOCATION, datatype=base:ST, max_length:1, required=O , ifrepeating:0]'
|
367
|
+
line = '[piece:29, description:AGENT ORANGE EXPOSURE LOCATION, datatype:base:ST, max_length:1, required=O , ifrepeating:0]'
|
368
|
+
fld = @fldGenerator.ST(lineToHash(line), true)
|
369
|
+
puts fld
|
370
|
+
assert_equal(1,fld.size)
|
371
|
+
|
372
|
+
#PID.35 – PID.38 should be always blank, as they deal with animals, not humans.
|
373
|
+
line ='[max_length:80, description:Strain, ifrepeating:0, datatype:ST, required:O, piece:37]'
|
374
|
+
fld = @fldGenerator.ST(lineToHash(line), true)
|
375
|
+
puts fld
|
376
|
+
assert_equal(nil,fld)
|
377
|
+
|
378
|
+
fld = @fldGenerator.ST({}, true)
|
379
|
+
puts fld
|
380
|
+
|
381
|
+
line ='[max_length:15, symbol:*, description:Allergy Reaction Code, ifrepeating:1, datatype:ST, required:O, piece:5]'
|
382
|
+
fld = @fldGenerator.ST(lineToHash(line), true)
|
383
|
+
puts fld
|
384
|
+
|
385
|
+
end
|
386
|
+
|
387
|
+
def test_TN
|
388
|
+
line ='[datatype:TN, required:R, piece:1]'
|
389
|
+
fld = @fldGenerator.TN(lineToHash(line), true)
|
390
|
+
puts fld
|
391
|
+
assert_equal 13, fld.size
|
392
|
+
end
|
393
|
+
|
394
|
+
def test_UVC
|
395
|
+
line = '[piece:10, :description:Value Amount & Code (46-49), :datatype:UVC, :symbol:*, :repeatcount:8, :max_length:12, :required:O, :ifrepeating:1, :codetable:153]'
|
396
|
+
fld = @fldGenerator.UVC(lineToHash(line), true)
|
397
|
+
puts fld
|
398
|
+
|
399
|
+
line ='[datatype:UVC, required:R, piece:1]'
|
400
|
+
fld = @fldGenerator.UVC(lineToHash(line), true)
|
401
|
+
puts fld
|
402
|
+
assert fld.include?('^')
|
403
|
+
end
|
404
|
+
|
405
|
+
def test_VID
|
406
|
+
line ='[datatype:VID, required:R, piece:1]'
|
407
|
+
fld = @fldGenerator.VID(lineToHash(line), true)
|
408
|
+
puts fld
|
409
|
+
assert fld.to_i < 1000
|
410
|
+
end
|
411
|
+
|
412
|
+
def test_XAD
|
413
|
+
line ='[max_length:250, symbol:*, description:Patient Address, ifrepeating:1, datatype:XAD, required:O, piece:11]'
|
414
|
+
fld = @fldGenerator.XAD(lineToHash(line), true)
|
415
|
+
puts fld
|
416
|
+
assert_equal 6, fld.split('^').size
|
417
|
+
end
|
418
|
+
|
419
|
+
def test_XCN
|
420
|
+
line ='[max_length:250, symbol:*, description:Operator ID, ifrepeating:1, datatype:XCN, required:O, piece:5, codetable:188]'
|
421
|
+
fld = @fldGenerator.XCN(lineToHash(line), true)
|
422
|
+
puts fld
|
423
|
+
assert_equal 4, fld.split('^').size
|
424
|
+
|
425
|
+
line = '[max_length:250, symbol:*, description:Diagnosing Clinician, ifrepeating:1, datatype:XCN, required:O, piece:16]'
|
426
|
+
fld = @fldGenerator.XCN(lineToHash(line), true)
|
427
|
+
puts fld
|
428
|
+
assert_equal 4, fld.split('^').size
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_XON
|
432
|
+
line ='[max_length:250, symbol:*, description:Patient Primary Facility, ifrepeating:1, datatype:XON, required:O, piece:3]'
|
433
|
+
fld = @fldGenerator.XON(lineToHash(line), true)
|
434
|
+
puts fld
|
435
|
+
assert_equal 3, fld.split('^').size
|
436
|
+
end
|
437
|
+
|
438
|
+
def test_XPN
|
439
|
+
line ='[max_length:250, symbol:*, description:Patient Alias, ifrepeating:1, datatype:XPN, required:B, piece:9]'
|
440
|
+
fld = @fldGenerator.XPN(lineToHash(line), true)
|
441
|
+
puts fld
|
442
|
+
assert_equal 3, fld.split('^').size
|
443
|
+
end
|
444
|
+
|
445
|
+
def test_XTN
|
446
|
+
line ='[max_length:250, symbol:*, description:Phone Number - Business, ifrepeating:1, datatype:XTN, required:O, piece:14]'
|
447
|
+
fld = @fldGenerator.XTN(lineToHash(line), true)
|
448
|
+
puts fld
|
449
|
+
assert /^\(\d{3}\)/.match(fld), 'Starts with (...)'
|
450
|
+
# assert fld.include?/(\d{3}\\)\d{3}-\d{4}/
|
451
|
+
end
|
452
|
+
|
453
|
+
def test_autoGenerate
|
454
|
+
map = {:required =>'B'}
|
455
|
+
refute (@fldGenerator.generate?(map)) # false
|
456
|
+
|
457
|
+
map = {:required =>'X'}
|
458
|
+
refute (@fldGenerator.generate?(map)) # false
|
459
|
+
|
460
|
+
map = {:required =>'W'}
|
461
|
+
refute (@fldGenerator.generate?(map)) # false
|
462
|
+
|
463
|
+
map = {:required =>'R'}
|
464
|
+
assert (@fldGenerator.generate?(map)) # true
|
465
|
+
|
466
|
+
map = {:required =>'O'}
|
467
|
+
puts @fldGenerator.generate?(map) # true or false random
|
468
|
+
|
469
|
+
map = {:required =>'O'}
|
470
|
+
assert @fldGenerator.generate?(map, true) # true or false random
|
471
|
+
|
472
|
+
map = {'required'=>'W'}
|
473
|
+
assert @fldGenerator.generate?(map, true) # true or false random
|
474
|
+
end
|
475
|
+
|
476
|
+
|
477
|
+
def test_generateLengthBoundId
|
478
|
+
actual = @fldGenerator.generate_length_bound_id(10, '12345')
|
479
|
+
puts actual
|
480
|
+
assert_equal('1234500000', actual)
|
481
|
+
|
482
|
+
actual = @fldGenerator.generate_length_bound_id(9)
|
483
|
+
puts actual
|
484
|
+
assert_equal(9, actual.size)
|
485
|
+
|
486
|
+
actual = @fldGenerator.generate_length_bound_id(1, '3000')
|
487
|
+
puts actual
|
488
|
+
assert_equal(1, actual.size)
|
489
|
+
|
490
|
+
actual = @fldGenerator.generate_length_bound_id(0)
|
491
|
+
puts actual
|
492
|
+
# assert_equal(, actual.size)
|
493
|
+
end
|
494
|
+
|
495
|
+
def test_getCodedValue_lenViolation
|
496
|
+
actual = @fldGenerator.get_coded_value({'codetable'=>'162', 'max_length' =>'1'})
|
497
|
+
puts actual
|
498
|
+
end
|
499
|
+
|
500
|
+
|
501
|
+
def test_getCodedValues_range3
|
502
|
+
# {"position"=>position='3', "value"=>value='2 ...', "description"=>description='For ranked secondary diagnoses'}
|
503
|
+
actual = @fldGenerator.get_coded_value({'codetable'=>'1', 'max_length' =>'2'})
|
504
|
+
puts actual
|
505
|
+
end
|
506
|
+
|
507
|
+
def test_getCodedMap_lenViolation
|
508
|
+
actual = @fldGenerator.get_coded_map({'codetable'=>'162', 'max_length' =>'1'})
|
509
|
+
puts actual
|
510
|
+
end
|
511
|
+
|
512
|
+
def test_getCodedValue_range1
|
513
|
+
actual = @fldGenerator.get_coded_map({'codetable'=>'112', 'max_length' =>'2'})
|
514
|
+
# puts actual
|
515
|
+
assert_equal({}, actual)
|
516
|
+
end
|
517
|
+
|
518
|
+
def test_getCodedValue_range2
|
519
|
+
actual = @fldGenerator.get_coded_map({'codetable'=>'141', 'max_length' =>'2'})
|
520
|
+
# puts actual
|
521
|
+
assert_equal({}, actual)
|
522
|
+
|
523
|
+
end
|
524
|
+
|
525
|
+
def test_handleRanges
|
526
|
+
# Change was made because Ensemble can't handle validation of ranges.
|
527
|
+
# Invalid value 'Q8' appears in segment 4:PD1, field 20, repetition 1, component 1, subcomponent 1, but does not
|
528
|
+
# appear in code table 2.4:141.
|
529
|
+
# I think you had to fix this one before to pull only the first and the last values from each row.
|
530
|
+
|
531
|
+
# { :position=>'1', :value=>'...', :description=>'No suggested values defined'}
|
532
|
+
code = @fldGenerator.handle_ranges('...')
|
533
|
+
assert_equal '', code
|
534
|
+
|
535
|
+
# {"position"=>'12' value='12 ... 16' description='Payer codes.' }
|
536
|
+
code = @fldGenerator.handle_ranges('12 ... 16').to_i
|
537
|
+
puts code
|
538
|
+
# assert 11 < code && code < 17
|
539
|
+
assert 12 == code || code == 16
|
540
|
+
|
541
|
+
#position='1' value='E1 ... E9' description='Enlisted'
|
542
|
+
code = @fldGenerator.handle_ranges('E1 ... E9')
|
543
|
+
puts code
|
544
|
+
assert 'E1' == code || code == 'E9'
|
545
|
+
# {"position"=>position='3', "value"=>value='2 ...', "description"=>description='For ranked secondary diagnoses'}
|
546
|
+
code = @fldGenerator.handle_ranges('2 ...')
|
547
|
+
# puts code
|
548
|
+
assert_equal '2', code
|
549
|
+
code = @fldGenerator.handle_ranges('A2 ...')
|
550
|
+
assert_equal 'A2', code
|
551
|
+
# puts code
|
552
|
+
# assert 'E0' < code && code <= 'E9'
|
553
|
+
end
|
554
|
+
|
555
|
+
# 112 141
|
556
|
+
def test_applyRules
|
557
|
+
# codes = Array (6 elements)
|
558
|
+
# [0] = Hash (3 elements)
|
559
|
+
# position => 1
|
560
|
+
# value => 1002-5
|
561
|
+
# description => American Indian or Alaska Native
|
562
|
+
# [1] = Hash (3 elements)
|
563
|
+
# [2] = Hash (3 elements)
|
564
|
+
# [3] = Hash (3 elements)
|
565
|
+
# [4] = Hash (3 elements)
|
566
|
+
# [5] = Hash (3 elements)
|
567
|
+
|
568
|
+
|
569
|
+
# attributes = Hash (8 elements)
|
570
|
+
# max_length => 250
|
571
|
+
# symbol => *
|
572
|
+
# description => Race
|
573
|
+
# ifrepeating => 1
|
574
|
+
# datatype => CE
|
575
|
+
# required => O
|
576
|
+
# piece => 10
|
577
|
+
# codetable => 5
|
578
|
+
# actual = @fldGenerator.apply_rules({'codetable'=>'141','max_length' =>'2'})
|
579
|
+
# puts actual
|
580
|
+
end
|
581
|
+
|
582
|
+
end
|