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,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
|