ez7gen 1.0.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 +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
|