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,213 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'ox'
|
3
|
+
require 'set'
|
4
|
+
|
5
|
+
class DataTypesExploration < Test::Unit::TestCase
|
6
|
+
|
7
|
+
dynamic_types = ["DT", "DTN", "FT", "ID", "IS", "JCC", "MO", "MOP", "NM", "NR", "OCD", "PT", "QIP", "RI", "SCV", "SI", "SRT", "ST", "TM", "TN", "TS", "TX", "TXCHALLENGE", "UVC", "VR", "WVI", "WVS"]
|
8
|
+
|
9
|
+
def test_SN
|
10
|
+
snipet = "<Export>
|
11
|
+
<Document version='2.4'>
|
12
|
+
<Category>
|
13
|
+
<DataType name='SN' description='structured numeric'>
|
14
|
+
<DataSubType piece='1' description='comparator'datatype='ST' />
|
15
|
+
<DataSubType piece='2' description='num1' datatype='NM' />
|
16
|
+
<DataSubType piece='3' description='separator/suffix' datatype='ST' />
|
17
|
+
<DataSubType piece='4' description='num2' datatype='NM' />
|
18
|
+
</DataType>
|
19
|
+
</Category>
|
20
|
+
</Document>
|
21
|
+
</Export>"
|
22
|
+
|
23
|
+
xml = Ox.parse(snipet)
|
24
|
+
assert_not_nil (xml)
|
25
|
+
name = 'SN'
|
26
|
+
# dt = xml.Document.Category.locate('DataType').select{|it| it.attributes[:name] == 'SN' }.first
|
27
|
+
dt = xml.Document.Category.locate('DataType').select{|it| it.attributes[:name] == name}.first
|
28
|
+
p dt.attributes[:name]
|
29
|
+
dts = dt.locate('DataSubType')
|
30
|
+
p dts
|
31
|
+
values=[]
|
32
|
+
dts.each{|it|
|
33
|
+
values << it.attributes[:datatype]
|
34
|
+
}
|
35
|
+
values.join('~')
|
36
|
+
# p values
|
37
|
+
assert_equal ["ST", "NM", "ST", "NM"], values
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_base_types_no_subtypes_dt
|
41
|
+
templatePath = File.path('test-config/schema/2.5/2.5.HL7.xml')
|
42
|
+
xml = Ox.parse(IO.read(templatePath))
|
43
|
+
assert_not_nil (xml)
|
44
|
+
|
45
|
+
# dt = xml.Export.Document.Category.DataType.locate('DataSubType').select{|it| it.nodes.size == 1}
|
46
|
+
dt = xml.Export.Document.Category.locate('DataType').select{|it| it.nodes.size == 1}
|
47
|
+
data_types = []
|
48
|
+
dt.each{ |it|
|
49
|
+
data_types << it.attributes[:name]
|
50
|
+
# p it
|
51
|
+
}
|
52
|
+
assert_equal 11, dt.size
|
53
|
+
# base_dt = ["DT", "FT", "ID", "IS", "NM", "SI", "ST", "TM", "TN", "TX"]
|
54
|
+
base_dt = ["DT", "DTM", "FT", "GTS", "ID", "IS", "NM", "SI", "ST", "TM", "TX"]
|
55
|
+
|
56
|
+
assert_equal base_dt, data_types
|
57
|
+
|
58
|
+
dt = xml.Export.Document.Category.locate('DataType')
|
59
|
+
# dt
|
60
|
+
# p dt.locate('DataSubType/@description')
|
61
|
+
# p dt.locate('DataSubType/@datatype').size
|
62
|
+
|
63
|
+
# data_types = []
|
64
|
+
dt.each{ |it|
|
65
|
+
if (it.locate('DataSubType/@description').size != it.locate('DataSubType/@datatype').size) then p it[:name] end
|
66
|
+
}
|
67
|
+
# "AD"
|
68
|
+
# "DT"
|
69
|
+
# "DTM"
|
70
|
+
# "FT"
|
71
|
+
# "GTS"
|
72
|
+
# "ID"
|
73
|
+
# "IS"
|
74
|
+
# "NM"
|
75
|
+
# "SI"
|
76
|
+
# "ST"
|
77
|
+
# "TM"
|
78
|
+
# "TX"
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
def test_base_types
|
84
|
+
templatePath = File.path('test-config/schema/2.4/2.4.HL7.xml')
|
85
|
+
xml = Ox.parse(IO.read(templatePath))
|
86
|
+
assert_not_nil (xml)
|
87
|
+
|
88
|
+
dt = xml.Export.Document.Category.locate('DataType').select{|it| it.nodes.size == 1}
|
89
|
+
data_types = []
|
90
|
+
dt.each{ |it|
|
91
|
+
data_types << it.attributes[:name]
|
92
|
+
}
|
93
|
+
assert_equal 10, dt.size
|
94
|
+
base_dt = ["DT", "FT", "ID", "IS", "NM", "SI", "ST", "TM", "TN", "TX"]
|
95
|
+
assert_equal base_dt, data_types
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_base_types_2
|
100
|
+
base_dt = ["DT", "FT", "ID", "IS", "NM", "SI", "ST", "TM", "TN", "TX"]
|
101
|
+
templatePath = File.path('test-config/schema/2.4/2.4.HL7.xml')
|
102
|
+
xml = Ox.parse(IO.read(templatePath))
|
103
|
+
assert_not_nil (xml)
|
104
|
+
|
105
|
+
dt = xml.Export.Document.Category.locate('DataType').select{|it| it.nodes.size == 2}
|
106
|
+
data_types = []
|
107
|
+
cnt=0
|
108
|
+
base_dt2 =[]
|
109
|
+
dt.each{ |it|
|
110
|
+
data_types << it.attributes[:name]
|
111
|
+
puts it.attributes[:name]
|
112
|
+
puts '+++++'
|
113
|
+
t = it.locate('DataSubType/@datatype')
|
114
|
+
ct = it.locate('DataSubType/@codetable')
|
115
|
+
h = Hash[t.zip(ct)]
|
116
|
+
puts h
|
117
|
+
# delta = t - base_dt
|
118
|
+
if ((t - base_dt).empty?) then puts 'All'; base_dt2 << it.attributes[:name] end
|
119
|
+
puts '~~~~~~~~~~~~~~~~~~~~~~~~~~'
|
120
|
+
}
|
121
|
+
assert_equal 25, dt.size
|
122
|
+
assert_equal 17,base_dt2.size
|
123
|
+
expected = ["CCD", "CQ", "DIN", "DLD", "DR", "DTN", "EIP", "FC", "JCC", "MO", "MOC", "MOP", "NR", "OCD", "PT", "QIP", "RI", "SCV", "SRT", "TS", "TXCHALLENGE", "UVC", "VR", "WVI", "WVS"]
|
124
|
+
assert_equal expected, data_types.sort()
|
125
|
+
bdt = (base_dt + base_dt2).sort
|
126
|
+
assert_equal 27, bdt.size
|
127
|
+
|
128
|
+
dt.each{ |it|
|
129
|
+
data_types << it.attributes[:name]
|
130
|
+
t = it.locate('DataSubType/@datatype')
|
131
|
+
if ((t - base_dt).empty?) then bdt << it.attributes[:name] end
|
132
|
+
}
|
133
|
+
# bdt = (base_dt + base_dt2).sort
|
134
|
+
assert_equal 27, bdt.to_set.size
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_dynamic_base_dt
|
139
|
+
# base_dt = ["DT", "FT", "ID", "IS", "NM", "SI", "ST", "TM", "TN", "TX"]
|
140
|
+
|
141
|
+
templatePath = File.path('test-config/schema/2.4/2.4.HL7.xml')
|
142
|
+
xml = Ox.parse(IO.read(templatePath))
|
143
|
+
assert_not_nil (xml)
|
144
|
+
|
145
|
+
sub_comp_cnt = 1
|
146
|
+
# total = -1
|
147
|
+
bdt =[]
|
148
|
+
x = []
|
149
|
+
while sub_comp_cnt < 20 do
|
150
|
+
dt = xml.Export.Document.Category.locate('DataType').select{|it| it.nodes.size == sub_comp_cnt}
|
151
|
+
# total = -1
|
152
|
+
if( dt.empty?)
|
153
|
+
sub_comp_cnt +=1
|
154
|
+
next
|
155
|
+
end
|
156
|
+
st_count = bdt.size
|
157
|
+
end_count = -1
|
158
|
+
|
159
|
+
while st_count != end_count do
|
160
|
+
st_count = end_count
|
161
|
+
dt.each{ |it|
|
162
|
+
t = it.attributes[:name]
|
163
|
+
st = it.locate('DataSubType/@datatype')
|
164
|
+
# if (!st.empty? && (st - bdt).empty?)
|
165
|
+
if ((st - bdt).empty?)
|
166
|
+
# bdt << t unless bdt.include?(t)
|
167
|
+
if(!bdt.include?(t))
|
168
|
+
bdt << t
|
169
|
+
end
|
170
|
+
elsif !x.include?(t)
|
171
|
+
x << t
|
172
|
+
end
|
173
|
+
|
174
|
+
}
|
175
|
+
end_count = bdt.size
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
sub_comp_cnt+=1
|
180
|
+
end
|
181
|
+
p bdt.sort
|
182
|
+
p bdt.size
|
183
|
+
|
184
|
+
p x.sort
|
185
|
+
p x.size
|
186
|
+
|
187
|
+
unresolved = x - bdt
|
188
|
+
p unresolved.sort
|
189
|
+
p unresolved.size
|
190
|
+
# 81 ["AD", "AUI", "CCD", "CCP", "CE", "CE013602620263", "CF", "CK", "CN", "CNE", "CNN", "CP", "CSU", "CWE", "CX", "DDI", "DLD", "DLN", "DLT", "DR", "DT", "DTN", "ED", "EI", "FC", "FN", "FT", "HD", "ID", "IS", "JCC", "LA1", "LA2", "MA", "MO", "MOP", "MSG", "NA", "NDL", "NM", "NR", "OCD", "OSD", "PCF", "PI", "PL", "PLN", "PN", "PPN", "PT", "PTA", "QIP", "QSC", "RCD", "RFR", "RI", "RMC", "RP", "SAD", "SCV", "SI", "SN", "SPD", "SPS", "SRT", "ST", "TM", "TN", "TS", "TX", "TXCHALLENGE", "UVC", "VH", "VR", "WVI", "WVS", "XAD", "XCN", "XON", "XPN", "XTN"]
|
191
|
+
|
192
|
+
#11 ["CD", "CQ", "DIN", "EIP", "ELD", "MOC", "OSP", "PIP", "PRL", "TQ", "VID"]
|
193
|
+
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_all_datatypes
|
198
|
+
|
199
|
+
templatePath = File.path('test-config/schema/2.4/2.4.HL7.xml')
|
200
|
+
xml = Ox.parse(IO.read(templatePath))
|
201
|
+
assert_not_nil (xml)
|
202
|
+
data_types = []
|
203
|
+
dt = xml.Export.Document.Category.locate('DataType')
|
204
|
+
dt.each{ |it|
|
205
|
+
data_types << it.attributes[:name]
|
206
|
+
}
|
207
|
+
assert_equal 92, dt.size
|
208
|
+
p data_types.sort()
|
209
|
+
expected = ["AD", "AUI", "CCD", "CCP", "CD", "CE", "CE013602620263", "CF", "CK", "CN", "CNE", "CNN", "CP", "CQ", "CSU", "CWE", "CX", "DDI", "DIN", "DLD", "DLN", "DLT", "DR", "DT", "DTN", "ED", "EI", "EIP", "ELD", "FC", "FN", "FT", "HD", "ID", "IS", "JCC", "LA1", "LA2", "MA", "MO", "MOC", "MOP", "MSG", "NA", "NDL", "NM", "NR", "OCD", "OSD", "OSP", "PCF", "PI", "PIP", "PL", "PLN", "PN", "PPN", "PRL", "PT", "PTA", "QIP", "QSC", "RCD", "RFR", "RI", "RMC", "RP", "SAD", "SCV", "SI", "SN", "SPD", "SPS", "SRT", "ST", "TM", "TN", "TQ", "TS", "TX", "TXCHALLENGE", "UVC", "VH", "VID", "VR", "WVI", "WVS", "XAD", "XCN", "XON", "XPN", "XTN"]
|
210
|
+
assert_equal expected, data_types.sort()
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
@@ -0,0 +1,292 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'ox'
|
3
|
+
require 'set'
|
4
|
+
require_relative '../lib/ez7gen/service/2.4/dynamic_field_generator'
|
5
|
+
|
6
|
+
class DynamicFieldGeneratorTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
# 27
|
9
|
+
vs =
|
10
|
+
[
|
11
|
+
{: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"}]},
|
12
|
+
{: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"}]}
|
13
|
+
]
|
14
|
+
attrs = {std: '2.4', version: '2.4.HL7', event: 'ADT_A01', version_store: vs}
|
15
|
+
|
16
|
+
#parse xml once
|
17
|
+
@@pp = ProfileParser.new(attrs)
|
18
|
+
|
19
|
+
#helper method
|
20
|
+
def lineToHash(line)
|
21
|
+
hash = line.gsub(/(\[|\])/,'').gsub(':',',').split(',').map{|it| it.strip()}.each_slice(2).to_a.to_h
|
22
|
+
return Hash[hash.map{|(k,v)| [k.to_sym,v]}]
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def setup
|
27
|
+
@fldGenerator = DynamicFieldGenerator.new(@@pp)
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def teardown
|
32
|
+
@fieldGenerator = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_init
|
36
|
+
assert_equal 'Odysseus', @fldGenerator.yml['person.names.first'][0]
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_base_types
|
40
|
+
|
41
|
+
dt = @fldGenerator.DT({},true)
|
42
|
+
p dt
|
43
|
+
assert_not_nil dt
|
44
|
+
|
45
|
+
dt = @fldGenerator.FT({},true)
|
46
|
+
p dt
|
47
|
+
assert_not_nil dt
|
48
|
+
|
49
|
+
dt = @fldGenerator.ID({},true)
|
50
|
+
p dt
|
51
|
+
assert_not_nil dt
|
52
|
+
|
53
|
+
dt = @fldGenerator.IS({},true)
|
54
|
+
p dt
|
55
|
+
assert_not_nil dt
|
56
|
+
|
57
|
+
dt = @fldGenerator.NM({},true)
|
58
|
+
p dt
|
59
|
+
assert_not_nil dt
|
60
|
+
|
61
|
+
dt = @fldGenerator.SI({},true)
|
62
|
+
p dt
|
63
|
+
assert_not_nil dt
|
64
|
+
|
65
|
+
dt = @fldGenerator.ST({},true)
|
66
|
+
p dt
|
67
|
+
assert_not_nil dt
|
68
|
+
|
69
|
+
dt = @fldGenerator.SAD({},true)
|
70
|
+
assert_not_nil dt
|
71
|
+
|
72
|
+
dt = @fldGenerator.TM({},true)
|
73
|
+
p dt
|
74
|
+
assert_not_nil dt
|
75
|
+
|
76
|
+
dt = @fldGenerator.TN({},true)
|
77
|
+
p dt
|
78
|
+
assert_not_nil dt
|
79
|
+
|
80
|
+
dt = @fldGenerator.TX({},true)
|
81
|
+
p dt
|
82
|
+
assert_not_nil dt
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_property_types
|
86
|
+
dt = @fldGenerator.FN({},true)
|
87
|
+
p dt
|
88
|
+
assert_not_nil dt
|
89
|
+
end
|
90
|
+
|
91
|
+
# <DataType name='FN' description='familiy name'>
|
92
|
+
# <DataSubType piece='1' description='surname' datatype='ST' />
|
93
|
+
# <DataSubType piece='2' description='own surname prefix' datatype='ST' />
|
94
|
+
# <DataSubType piece='3' description='own surname' datatype='ST' />
|
95
|
+
# <DataSubType piece='4' description='surname prefix from partner/spouse' datatype='ST' />
|
96
|
+
# <DataSubType piece='5' description='surname from partner/spouse' datatype='ST' />
|
97
|
+
# </DataType>
|
98
|
+
|
99
|
+
|
100
|
+
def test_dynamic_SN
|
101
|
+
#2.4
|
102
|
+
# <DataType name='SN' description='structured numeric'>
|
103
|
+
# <DataSubType piece='1' description='comparator'datatype='ST' />
|
104
|
+
# <DataSubType piece='2' description='num1' datatype='NM' />
|
105
|
+
# <DataSubType piece='3' description='separator/suffix' datatype='ST' />
|
106
|
+
# <DataSubType piece='4' description='num2' datatype='NM' />
|
107
|
+
# </DataType>
|
108
|
+
|
109
|
+
#2.5
|
110
|
+
# <DataType name='SN' description='Structured Numeric'>
|
111
|
+
# <DataSubType piece='1' description='Comparator' datatype='ST' max_length='2' required='O'/>
|
112
|
+
# <DataSubType piece='2' description='Num1' datatype='NM' max_length='15' required='O'/>
|
113
|
+
# <DataSubType piece='3' description='Separator/Suffix' datatype='ST' max_length='1' required='O'/>
|
114
|
+
# <DataSubType piece='4' description='Num2' datatype='NM' max_length='15' required='O'/>
|
115
|
+
# </DataType>
|
116
|
+
dt = @fldGenerator.dynamic('SN',{},true)
|
117
|
+
p dt
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_dynamic_CE
|
121
|
+
# <DataType name='CE' description='coded element'>
|
122
|
+
# <DataSubType piece='1' description='identifier (ST)' datatype='ST' />
|
123
|
+
# <DataSubType piece='2' description='text' datatype='ST' />
|
124
|
+
# <DataSubType piece='3' description='name of coding system' datatype='IS' codetable='396' />
|
125
|
+
# <DataSubType piece='4' description='alternate identifier (ST)' datatype='ST' />
|
126
|
+
# <DataSubType piece='5' description='alternate text' datatype='ST' />
|
127
|
+
# <DataSubType piece='6' description='name of alternate coding system' datatype='IS' codetable='396' />
|
128
|
+
# </DataType>
|
129
|
+
dt = @fldGenerator.dynamic('CE',{},true)
|
130
|
+
p dt
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_dynamic_XPN
|
134
|
+
# <DataType name='XPN' description='extended person name'>
|
135
|
+
# <DataSubType piece='1' description='family name' datatype='FN' />
|
136
|
+
# <DataSubType piece='2' description='given name' datatype='ST' />
|
137
|
+
# <DataSubType piece='3' description='second and further given names or initials thereof' datatype='ST' />
|
138
|
+
# <DataSubType piece='4' description='suffix (e.g., JR or III)' datatype='ST' />
|
139
|
+
# <DataSubType piece='5' description='prefix (e.g., DR)' datatype='ST' />
|
140
|
+
# <DataSubType piece='6' description='degree (e.g., MD)' datatype='IS' codetable='360' />
|
141
|
+
# <DataSubType piece='7' description='name type code' datatype='ID' codetable='200' />
|
142
|
+
# <DataSubType piece='8' description='Name Representation code' datatype='ID' codetable='465' />
|
143
|
+
# <DataSubType piece='9' description='name context' datatype='CE' codetable='448' />
|
144
|
+
# <DataSubType piece='10' description='name validity range' datatype='DR' />
|
145
|
+
# <DataSubType piece='11' description='name assembly order' datatype='ID' codetable='444' />
|
146
|
+
# </DataType>
|
147
|
+
dt = @fldGenerator.dynamic('XPN',{},true)
|
148
|
+
p dt
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
def _test_dynamic_PID
|
153
|
+
pid = [
|
154
|
+
{:Name=>"Patient Identifier List", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CX", :Length=>"250", :ItemNo=>"00106", :Pos=>2, :components=>[{:Name=>"ID", :Usage=>"R", :Datatype=>"ST", :Length=>"60", :Pos=>0}, {:Name=>"code identifying the check digit scheme employed", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0061", :Pos=>2}, {:Name=>"assigning authority", :Usage=>"R", :Datatype=>"HD", :Length=>"8", :Pos=>3, :subComponents=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"5", :Table=>"0363", :Pos=>0}, {:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Length=>"1", :Table=>"0301", :Pos=>2}]}, {:Name=>"identifier type code (ID)", :Usage=>"R", :Datatype=>"ID", :Length=>"2", :Table=>"0203", :Pos=>4}]},
|
155
|
+
{:Name=>"Patient Name", :Usage=>"R", :Min=>"1", :Max=>"*", :Datatype=>"XPN", :Length=>"250", :ItemNo=>"00108", :Pos=>4, :components=>[{:Name=>"family name", :Usage=>"R", :Datatype=>"FN", :Length=>"60", :Pos=>0, :subComponents=>[{:Name=>"surname", :Usage=>"R", :Datatype=>"ST", :Length=>"35", :Pos=>0}]}, {:Name=>"given name", :Usage=>"R", :Datatype=>"ST", :Length=>"25", :Pos=>1}]},
|
156
|
+
{:Name=>"Date/Time Of Birth", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"TS", :Length=>"26", :ItemNo=>"00110", :Pos=>6, :components=>[{:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"20", :Pos=>0}]},
|
157
|
+
{:Name=>"Administrative Sex", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"IS", :Length=>"1", :Table=>"0001", :ItemNo=>"00111", :Pos=>7}
|
158
|
+
]
|
159
|
+
|
160
|
+
#Patient Identifier List"
|
161
|
+
pil = [
|
162
|
+
{:Name=>"Patient Identifier List", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CX", :Length=>"250", :ItemNo=>"00106", :Pos=>2,
|
163
|
+
:components=>[
|
164
|
+
{:Name=>"ID", :Usage=>"R", :Datatype=>"ST", :Length=>"60", :Pos=>0},
|
165
|
+
{:Name=>"code identifying the check digit scheme employed", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0061", :Pos=>2},
|
166
|
+
{:Name=>"assigning authority", :Usage=>"R", :Datatype=>"HD", :Length=>"8", :Pos=>3,
|
167
|
+
:subComponents=>[
|
168
|
+
{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"5", :Table=>"0363", :Pos=>0},
|
169
|
+
{:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Table=>"0301", :Pos=>2} #:Length=>"1"
|
170
|
+
]
|
171
|
+
},
|
172
|
+
{:Name=>"identifier type code (ID)", :Usage=>"R", :Datatype=>"ID", :Length=>"2", :Table=>"0203", :Pos=>4}]}
|
173
|
+
]
|
174
|
+
|
175
|
+
aa = [ {:Name=>"assigning authority", :Usage=>"R", :Datatype=>"HD", :Length=>"8", :Pos=>3,
|
176
|
+
:subComponents=>[
|
177
|
+
{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"5", :Table=>"0363", :Pos=>0},
|
178
|
+
{:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Table=>"0301", :Pos=>2} #:Length=>"1"
|
179
|
+
]
|
180
|
+
}]
|
181
|
+
|
182
|
+
#CANAB&&ISO&&HC : CANAB & &ISO & &HC
|
183
|
+
#MWB
|
184
|
+
#CANON&&UUID: CANON & &UUID
|
185
|
+
#CANON&&UUID
|
186
|
+
# 12345^4^NPI^CANPE&&GUID^MA^^20140325
|
187
|
+
# 12345 <Component Name="ID" Usage="R" Datatype="ST" Length="60"
|
188
|
+
# 4 <Component Name="Check digit" Usage="RE" Datatype="ST" Length="1"
|
189
|
+
# NPI Component Name="code identifying the check digit scheme employed" Usage="R" Datatype="ID" Length="3" Table="0061"
|
190
|
+
# CANPE&&GUID <Component Name="assigning authority" Usage="R" Datatype="HD" Length="8 : NOTE: length 11
|
191
|
+
# CANPE <SubComponent Name="namespace ID" Usage="R" Datatype="IS" Length="5" Table="0363"
|
192
|
+
# '' <SubComponent Name="universal ID" Usage="X" Datatype="ST"> NOTE: blank Usage X
|
193
|
+
# GUID <SubComponent Name="universal ID type" Usage="R" Datatype="ID" Length="1" Table="0301"
|
194
|
+
|
195
|
+
pn =[{:Name=>"Patient Name", :Usage=>"R", :Min=>"1", :Max=>"*", :Datatype=>"XPN", :Length=>"250", :ItemNo=>"00108", :Pos=>4, :components=>[{:Name=>"family name", :Usage=>"R", :Datatype=>"FN", :Length=>"60", :Pos=>0, :subComponents=>[{:Name=>"surname", :Usage=>"R", :Datatype=>"ST", :Length=>"35", :Pos=>0}]}, {:Name=>"given name", :Usage=>"R", :Datatype=>"ST", :Length=>"25", :Pos=>1}]}]
|
196
|
+
|
197
|
+
# PID with R and RE
|
198
|
+
pid_re = [{:Name=>"Patient Identifier List", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CX", :Length=>"250", :ItemNo=>"00106", :Pos=>2, :components=>[{:Name=>"ID", :Usage=>"R", :Datatype=>"ST", :Length=>"60", :Pos=>0}, {:Name=>"Check digit", :Usage=>"RE", :Datatype=>"ST", :Length=>"1", :Pos=>1}, {:Name=>"code identifying the check digit scheme employed", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0061", :Pos=>2}, {:Name=>"assigning authority", :Usage=>"R", :Datatype=>"HD", :Length=>"8", :Pos=>3, :subComponents=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"5", :Table=>"0363", :Pos=>0}, {:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Length=>"1", :Table=>"0301", :Pos=>2}]}, {:Name=>"identifier type code (ID)", :Usage=>"R", :Datatype=>"ID", :Length=>"2", :Table=>"0203", :Pos=>4}, {:Name=>"assigning facility", :Usage=>"RE", :Datatype=>"HD", :Length=>"14", :Pos=>5, :subComponents=>[{:Name=>"namespace ID", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0363", :Pos=>0}]}, {:Name=>"effective date (DT)", :Usage=>"RE", :Datatype=>"DT", :Length=>"8", :Pos=>6}]},
|
199
|
+
{:Name=>"Patient Name", :Usage=>"R", :Min=>"1", :Max=>"*", :Datatype=>"XPN", :Length=>"250", :ItemNo=>"00108", :Pos=>4, :components=>[{:Name=>"family name", :Usage=>"R", :Datatype=>"FN", :Length=>"60", :Pos=>0, :subComponents=>[{:Name=>"surname", :Usage=>"R", :Datatype=>"ST", :Length=>"35", :Pos=>0}]}, {:Name=>"given name", :Usage=>"R", :Datatype=>"ST", :Length=>"25", :Pos=>1}, {:Name=>"second and further given names or initials thereof", :Usage=>"RE", :Datatype=>"ST", :Length=>"25", :Pos=>2}]},
|
200
|
+
{:Name=>"Date/Time Of Birth", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"TS", :Length=>"26", :ItemNo=>"00110", :Pos=>6, :components=>[{:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"20", :Pos=>0}]},
|
201
|
+
{:Name=>"Administrative Sex", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"IS", :Length=>"1", :Table=>"0001", :ItemNo=>"00111", :Pos=>7},
|
202
|
+
{:Name=>"Race", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0005", :ItemNo=>"00113", :Pos=>9, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"10", :Table=>"0005", :Pos=>0}, {:Name=>"name of coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0396", :Pos=>2}, {:Name=>"alternate identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"6", :Pos=>3}, {:Name=>"name of alternate coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"3", :Table=>"0396", :Pos=>5}]},
|
203
|
+
{:Name=>"Patient Address", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"XAD", :Length=>"250", :ItemNo=>"00114", :Pos=>10, :components=>[{:Name=>"street address (SAD)", :Usage=>"RE", :Datatype=>"SAD", :Length=>"49", :Pos=>0, :subComponents=>[{:Name=>"street or mailing address", :Usage=>"RE", :Datatype=>"ST", :Length=>"35", :Pos=>0}]}, {:Name=>"city", :Usage=>"RE", :Datatype=>"ST", :Length=>"15", :Pos=>2}, {:Name=>"state or province", :Usage=>"RE", :Datatype=>"ST", :Length=>"5", :Pos=>3}, {:Name=>"zip or postal code", :Usage=>"RE", :Datatype=>"ST", :Length=>"5", :Pos=>4}]},
|
204
|
+
{:Name=>"Marital Status", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0002", :ItemNo=>"00119", :Pos=>15, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"1", :Table=>"0002", :Pos=>0}]},
|
205
|
+
{:Name=>"Religion", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0006", :ItemNo=>"00120", :Pos=>16, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"2", :Table=>"0006", :Pos=>0}]},
|
206
|
+
{:Name=>"Ethnic Group", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0189", :ItemNo=>"00125", :Pos=>21, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"10", :Table=>"0189", :Pos=>0}, {:Name=>"name of coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0396", :Pos=>2}, {:Name=>"alternate identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"6", :Pos=>3}, {:Name=>"name of alternate coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0396", :Pos=>5}]}]
|
207
|
+
|
208
|
+
|
209
|
+
flds = []
|
210
|
+
pid_re.each{|f|
|
211
|
+
dt_partials = []
|
212
|
+
dt_partials << process_partials(f)
|
213
|
+
flds[f[:Pos].to_i] = dt_partials.join('^')
|
214
|
+
puts f.to_s
|
215
|
+
# puts flds
|
216
|
+
puts flds.last
|
217
|
+
}
|
218
|
+
puts flds.join('|')
|
219
|
+
|
220
|
+
# AETNA18^^M11^CANON&&UUID^VA-EDI^CANYT
|
221
|
+
# "834^^ISO^CANYT&&^PI"
|
222
|
+
|
223
|
+
# PID|||607^1^M11^CANMB&&^AN^CANQC^20150615||Harper^Octavius^Stewart||2016-03-25T20:17:16-10:00|F||2106-3^^I9C^497^^ICS|359^^466^150^366|||||W||||||N^^E7^675^^CAS
|
224
|
+
# PID|||AETNA18^ ^M11^CANON&&UUID^VA-EDI^CANYT||HL7PFSSZELSURNAME^HL7ZPDFIRSTNAME||199901101410|F||2028-9^^^CST^^MVX|^^BROOKSVILLE^^38221|||||W|REC|||||^^DCL^NDC^^ACR
|
225
|
+
|
226
|
+
# PID|||607 ^1^M11^CANMB&& ^AN ^CANQC^20150615||Harper ^Octavius ^Stewart||2016-03-25T20:17:16-10:00|F||2106-3^^I9C^497^^ICS|359^^466^150^366 |||||W| |||||N^^E7^675^^CAS
|
227
|
+
# PID|||AETNA18^ ^M11^CANON&&UUID^VA-EDI^CANYT ||HL7PFSSZELSURNAME^HL7ZPDFIRSTNAME ||199901101410 |F||2028-9^^^CST^^MVX |^^BROOKSVILLE^^38221|||||W|REC|||||^^DCL^NDC^^ACR
|
228
|
+
# |9999999^4^M11^CANAB&&x400^PEN ^AUSHIC^20140325
|
229
|
+
|
230
|
+
# PID|1||211||Farrell^Castor^X|Meyer^Octavius^G|19751028175300.644|||2106-3^White|7061 Iron Blossom Ridge^^Owl^MS^38889-6760^USA||(601)110-8688||||SOU^Christian: Southern Baptist|468|||||620||||||20160320175300.676|N||||562||||
|
231
|
+
# PID|||607^1^M11^CANMB&&^AN^CANQC^20150615||Harper^Octavius^Stewart||2016-03-25T20:17:16-10:00|F||2106-3^^I9C^497^^ICS|359^^466^150^366|||||W||||||N^^E7^675^^CAS
|
232
|
+
|
233
|
+
end
|
234
|
+
|
235
|
+
def _test_dynamic_MSH
|
236
|
+
msh = [
|
237
|
+
{:Name=>"Field Separator", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ST", :Length=>"1", :ItemNo=>"00001", :Pos=>0},
|
238
|
+
{:Name=>"Encoding Characters", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ST", :Length=>"4", :ItemNo=>"00002", :Pos=>1},
|
239
|
+
{:Name=>"Sending Application", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0361", :ItemNo=>"00003", :Pos=>2, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"120", :Table=>"0363", :Pos=>0}]},
|
240
|
+
{:Name=>"Sending Facility", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0362", :ItemNo=>"00004", :Pos=>3, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"3", :Table=>"0363", :Pos=>0}, {:Name=>"universal ID", :Usage=>"R", :Datatype=>"ST", :Length=>"120", :Pos=>1}, {:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0301", :Pos=>2}]},
|
241
|
+
{:Name=>"Receiving Application", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0361", :ItemNo=>"00005", :Pos=>4, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"120", :Table=>"0363", :Pos=>0}]},
|
242
|
+
{:Name=>"Receiving Facility", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0362", :ItemNo=>"00006", :Pos=>5, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"3", :Table=>"0363", :Pos=>0}, {:Name=>"universal ID", :Usage=>"R", :Datatype=>"ST", :Length=>"120", :Pos=>1}, {:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0301", :Pos=>2}]},
|
243
|
+
{:Name=>"Date/Time Of Message", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"TS", :Length=>"26", :Pos=>6, :components=>[{:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"26", :Pos=>0}]},
|
244
|
+
{:Name=>"Message Type", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CM_MSG", :Length=>"15", :Table=>"0076", :ItemNo=>"00009", :Pos=>8, :components=>[{:Name=>"message type", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0076", :Pos=>0}, {:Name=>"trigger event", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0003", :Pos=>1}, {:Name=>"message structure", :Usage=>"R", :Datatype=>"ID", :Length=>"7", :Table=>"0354", :Pos=>2}]},
|
245
|
+
{:Name=>"Message Control ID", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ST", :Length=>"20", :ItemNo=>"00010", :Pos=>9},
|
246
|
+
{:Name=>"Processing ID", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"PT", :Length=>"7", :ItemNo=>"00011", :Pos=>10, :components=>[{:Name=>"processing ID", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0103", :Pos=>0}]},
|
247
|
+
{:Name=>"Version ID", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"VID", :Length=>"60", :Table=>"0104", :ItemNo=>"00012", :Pos=>11, :components=>[{:Name=>"version ID", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0104", :Pos=>0}]},
|
248
|
+
{:Name=>"Accept Acknowledgment Type", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ID", :Length=>"2", :Table=>"0155", :ItemNo=>"00015", :Pos=>14},
|
249
|
+
{:Name=>"Application Acknowledgment Type", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ID", :Length=>"2", :Table=>"0155", :ItemNo=>"00016", :Pos=>15}
|
250
|
+
]
|
251
|
+
# MSH|9|117|CANMB|^861^DNS|CANBC|^477^DNS|2016-01-30T15:36:08-10:00||RTB^P02^MFN_M01|741|P|2.1|||ER|ER
|
252
|
+
# MSH|^~\&|VISTA SQWM|442^HL7.CHEYENNE.MED.VA.GOV:5274^DNS|SQWM|442^VAAUSSQWAPP80:8010^DNS|20160520160008.812-0400||ADT^A60^ADT_A60|B9D3F122897A4707|T|2.4|||AL|NE
|
253
|
+
|
254
|
+
flds = []
|
255
|
+
|
256
|
+
msh.each{|f|
|
257
|
+
dt_partials = []
|
258
|
+
dt_partials << process_partials(f)
|
259
|
+
flds[f[:Pos].to_i] = dt_partials.join('^')
|
260
|
+
}
|
261
|
+
puts flds.join('|')
|
262
|
+
|
263
|
+
end
|
264
|
+
|
265
|
+
def _test_dymamic_ADT_60
|
266
|
+
|
267
|
+
adt_60 = {"MSH"=>[{:Name=>"Field Separator", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ST", :Length=>"1", :ItemNo=>"00001", :Pos=>0}, {:Name=>"Encoding Characters", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ST", :Length=>"4", :ItemNo=>"00002", :Pos=>1}, {:Name=>"Sending Application", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0361", :ItemNo=>"00003", :Pos=>2, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"120", :Table=>"0363", :Pos=>0}]}, {:Name=>"Sending Facility", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0362", :ItemNo=>"00004", :Pos=>3, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"3", :Table=>"0363", :Pos=>0}, {:Name=>"universal ID", :Usage=>"R", :Datatype=>"ST", :Length=>"120", :Pos=>1}, {:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0301", :Pos=>2}]}, {:Name=>"Receiving Application", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0361", :ItemNo=>"00005", :Pos=>4, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"120", :Table=>"0363", :Pos=>0}]}, {:Name=>"Receiving Facility", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"HD", :Length=>"180", :Table=>"0362", :ItemNo=>"00006", :Pos=>5, :components=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"3", :Table=>"0363", :Pos=>0}, {:Name=>"universal ID", :Usage=>"R", :Datatype=>"ST", :Length=>"120", :Pos=>1}, {:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0301", :Pos=>2}]}, {:Name=>"Date/Time Of Message", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"TS", :Length=>"26", :Pos=>6, :components=>[{:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"26", :Pos=>0}]}, {:Name=>"Message Type", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CM_MSG", :Length=>"15", :Table=>"0076", :ItemNo=>"00009", :Pos=>8, :components=>[{:Name=>"message type", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0076", :Pos=>0}, {:Name=>"trigger event", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0003", :Pos=>1}, {:Name=>"message structure", :Usage=>"R", :Datatype=>"ID", :Length=>"7", :Table=>"0354", :Pos=>2}]}, {:Name=>"Message Control ID", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ST", :Length=>"20", :ItemNo=>"00010", :Pos=>9}, {:Name=>"Processing ID", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"PT", :Length=>"7", :ItemNo=>"00011", :Pos=>10, :components=>[{:Name=>"processing ID", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0103", :Pos=>0}]}, {:Name=>"Version ID", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"VID", :Length=>"60", :Table=>"0104", :ItemNo=>"00012", :Pos=>11, :components=>[{:Name=>"version ID", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0104", :Pos=>0}]}, {:Name=>"Accept Acknowledgment Type", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ID", :Length=>"2", :Table=>"0155", :ItemNo=>"00015", :Pos=>14}, {:Name=>"Application Acknowledgment Type", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"ID", :Length=>"2", :Table=>"0155", :ItemNo=>"00016", :Pos=>15}], "EVN"=>[{:Name=>"Recorded Date/Time", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"TS", :Length=>"26", :ItemNo=>"00100", :Pos=>1, :components=>[{:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"20", :Pos=>0}]}], "PID"=>[{:Name=>"Patient Identifier List", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CX", :Length=>"250", :ItemNo=>"00106", :Pos=>2, :components=>[{:Name=>"ID", :Usage=>"R", :Datatype=>"ST", :Length=>"60", :Pos=>0}, {:Name=>"Check digit", :Usage=>"RE", :Datatype=>"ST", :Length=>"1", :Pos=>1}, {:Name=>"code identifying the check digit scheme employed", :Usage=>"R", :Datatype=>"ID", :Length=>"3", :Table=>"0061", :Pos=>2}, {:Name=>"assigning authority", :Usage=>"R", :Datatype=>"HD", :Length=>"8", :Pos=>3, :subComponents=>[{:Name=>"namespace ID", :Usage=>"R", :Datatype=>"IS", :Length=>"5", :Table=>"0363", :Pos=>0}, {:Name=>"universal ID type", :Usage=>"R", :Datatype=>"ID", :Length=>"1", :Table=>"0301", :Pos=>2}]}, {:Name=>"identifier type code (ID)", :Usage=>"R", :Datatype=>"ID", :Length=>"2", :Table=>"0203", :Pos=>4}, {:Name=>"assigning facility", :Usage=>"RE", :Datatype=>"HD", :Length=>"14", :Pos=>5, :subComponents=>[{:Name=>"namespace ID", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0363", :Pos=>0}]}, {:Name=>"effective date (DT)", :Usage=>"RE", :Datatype=>"DT", :Length=>"8", :Pos=>6}]}, {:Name=>"Patient Name", :Usage=>"R", :Min=>"1", :Max=>"*", :Datatype=>"XPN", :Length=>"250", :ItemNo=>"00108", :Pos=>4, :components=>[{:Name=>"family name", :Usage=>"R", :Datatype=>"FN", :Length=>"60", :Pos=>0, :subComponents=>[{:Name=>"surname", :Usage=>"R", :Datatype=>"ST", :Length=>"35", :Pos=>0}]}, {:Name=>"given name", :Usage=>"R", :Datatype=>"ST", :Length=>"25", :Pos=>1}, {:Name=>"second and further given names or initials thereof", :Usage=>"RE", :Datatype=>"ST", :Length=>"25", :Pos=>2}]}, {:Name=>"Date/Time Of Birth", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"TS", :Length=>"26", :ItemNo=>"00110", :Pos=>6, :components=>[{:Name=>"Date/Time", :Usage=>"R", :Datatype=>"NM", :Length=>"20", :Pos=>0}]}, {:Name=>"Administrative Sex", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"IS", :Length=>"1", :Table=>"0001", :ItemNo=>"00111", :Pos=>7}, {:Name=>"Race", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0005", :ItemNo=>"00113", :Pos=>9, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"10", :Table=>"0005", :Pos=>0}, {:Name=>"name of coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0396", :Pos=>2}, {:Name=>"alternate identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"6", :Pos=>3}, {:Name=>"name of alternate coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"3", :Table=>"0396", :Pos=>5}]}, {:Name=>"Patient Address", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"XAD", :Length=>"250", :ItemNo=>"00114", :Pos=>10, :components=>[{:Name=>"street address (SAD)", :Usage=>"RE", :Datatype=>"SAD", :Length=>"49", :Pos=>0, :subComponents=>[{:Name=>"street or mailing address", :Usage=>"RE", :Datatype=>"ST", :Length=>"35", :Pos=>0}]}, {:Name=>"city", :Usage=>"RE", :Datatype=>"ST", :Length=>"15", :Pos=>2}, {:Name=>"state or province", :Usage=>"RE", :Datatype=>"ST", :Length=>"5", :Pos=>3}, {:Name=>"zip or postal code", :Usage=>"RE", :Datatype=>"ST", :Length=>"5", :Pos=>4}]}, {:Name=>"Marital Status", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0002", :ItemNo=>"00119", :Pos=>15, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"1", :Table=>"0002", :Pos=>0}]}, {:Name=>"Religion", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0006", :ItemNo=>"00120", :Pos=>16, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"2", :Table=>"0006", :Pos=>0}]}, {:Name=>"Ethnic Group", :Usage=>"RE", :Min=>"0", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0189", :ItemNo=>"00125", :Pos=>21, :components=>[{:Name=>"identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"10", :Table=>"0189", :Pos=>0}, {:Name=>"name of coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0396", :Pos=>2}, {:Name=>"alternate identifier", :Usage=>"RE", :Datatype=>"ST", :Length=>"6", :Pos=>3}, {:Name=>"name of alternate coding system", :Usage=>"RE", :Datatype=>"IS", :Length=>"6", :Table=>"0396", :Pos=>5}]}], "IAM"=>[{:Name=>"Set ID - IAM", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"SI", :Length=>"4", :ItemNo=>"01612", :Pos=>0}, {:Name=>"Allergen Type Code", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0127", :ItemNo=>"00204", :Pos=>1, :components=>[{:Name=>"identifier", :Usage=>"R", :Datatype=>"ST", :Length=>"3", :Table=>"0127", :Pos=>0}]}, {:Name=>"Allergen Code/Mnemonic/Description", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CE", :Length=>"250", :ItemNo=>"00205", :Pos=>2, :components=>[{:Name=>"identifier", :Usage=>"R", :Datatype=>"ST", :Length=>"60", :Pos=>0}]}, {:Name=>"Allergy Severity Code", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CE", :Length=>"250", :Table=>"0128", :ItemNo=>"00206", :Pos=>3, :components=>[{:Name=>"identifier", :Usage=>"R", :Datatype=>"ST", :Length=>"2", :Table=>"0128", :Pos=>0}]}, {:Name=>"Allergy Reaction Code", :Usage=>"RE", :Min=>"0", :Max=>"*", :Datatype=>"ST", :Length=>"15", :ItemNo=>"00207", :Pos=>4}, {:Name=>"Allergy Action Code", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"CNE", :Length=>"250", :Table=>"0323", :ItemNo=>"01551", :Pos=>5, :components=>[{:Name=>"identifier (ST)", :Usage=>"R", :Datatype=>"ST", :Length=>"3", :Table=>"0323", :Pos=>0}]}, {:Name=>"Allergy Unique Identifier", :Usage=>"R", :Min=>"1", :Max=>"1", :Datatype=>"EI", :Length=>"80", :ItemNo=>"01552", :Pos=>6, :components=>[{:Name=>"entity identifier", :Usage=>"R", :Datatype=>"ST", :Length=>"80", :Pos=>0}]}]}
|
268
|
+
|
269
|
+
segments = adt_60.keys
|
270
|
+
flds = []
|
271
|
+
|
272
|
+
segments.each{|s|
|
273
|
+
f = adt_60[s]
|
274
|
+
|
275
|
+
dt_partials = []
|
276
|
+
dt_partials << process_partials(f)
|
277
|
+
|
278
|
+
# flds[f[:Pos].to_i] = dt_partials.join('^')
|
279
|
+
flds << dt_partials.join('|')
|
280
|
+
|
281
|
+
puts f
|
282
|
+
puts flds.last
|
283
|
+
}
|
284
|
+
|
285
|
+
flds.each_with_index{|f, idx|
|
286
|
+
puts segments[idx] + '|' + f
|
287
|
+
}
|
288
|
+
|
289
|
+
end
|
290
|
+
|
291
|
+
|
292
|
+
end
|