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,279 @@
|
|
1
|
+
# require "minitest/autorun"
|
2
|
+
require 'test/unit'
|
3
|
+
require_relative '../lib/ez7gen/service/segment_picker'
|
4
|
+
require_relative '../lib/ez7gen/service/utils'
|
5
|
+
# require_relative '../lib/ez7gen/profile_parser'
|
6
|
+
|
7
|
+
|
8
|
+
class SegmentPickerTest < Test::Unit::TestCase
|
9
|
+
# @@pp = ProfileParser.new('2.4', 'ADT_A01')
|
10
|
+
include Utils
|
11
|
+
|
12
|
+
# Called before every test method runs. Can be used
|
13
|
+
# to set up fixture information.
|
14
|
+
def setup
|
15
|
+
# profile = 'MSH~EVN~PID~0~1~2~PV1~3~4~5~6~7~8~9~11~12~16~17~18~19~20'
|
16
|
+
@profile = ["MSH","EVN","PID",0,1,2,"PV1",3,4,5,6,7,8,9,11,12,16,17,19,20]
|
17
|
+
|
18
|
+
# # Array (21 elements)
|
19
|
+
@elements =[]
|
20
|
+
@elements << "[~PD1~]"
|
21
|
+
@elements << "[~{~ROL~}~]"
|
22
|
+
@elements << "[~{~NK1~}~]"
|
23
|
+
@elements << "[~PV2~]"
|
24
|
+
@elements << "[~{~ROL~}~]"
|
25
|
+
@elements << "[~{~DB1~}~]"
|
26
|
+
@elements << "[~{~OBX~}~]"
|
27
|
+
@elements << "[~{~AL1~}~]"
|
28
|
+
@elements << "[~{~DG1~}~]"
|
29
|
+
@elements << "[~DRG~]"
|
30
|
+
@elements << "[~{~ROL~}~]"
|
31
|
+
@elements << "[~{~PR1~10~}~]"
|
32
|
+
@elements << "[~{~GT1~}~]"
|
33
|
+
@elements << "[~IN2~]"
|
34
|
+
@elements << "[~{~IN3~}~]"
|
35
|
+
@elements << "[~{~ROL~}~]"
|
36
|
+
@elements << "[~{~IN1~13~14~15~}~]"
|
37
|
+
@elements << "[~ACC~]"
|
38
|
+
@elements << "[~UB1~]"
|
39
|
+
@elements << "[~UB2~]"
|
40
|
+
@elements << "[~PDA~]"
|
41
|
+
# segmentMap = {:segments => elements, :profile => profile}
|
42
|
+
@segmentPicker = SegmentPicker.new(@profile, @elements)
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
# Called after every test method runs. Can be used to tear
|
47
|
+
# down fixture information.
|
48
|
+
|
49
|
+
def teardown
|
50
|
+
@segmentMap = {}
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_init
|
54
|
+
assert_equal 21, @segmentPicker.encodedSegments.size
|
55
|
+
assert_equal Array, @segmentPicker.encodedSegments.class
|
56
|
+
assert_equal Array, @segmentPicker.profile.class
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_getSegmentCandidatesCount
|
60
|
+
assert_equal 11, @segmentPicker.get_load_candidates_count(21)
|
61
|
+
assert_equal 2, @segmentPicker.get_load_candidates_count(3)
|
62
|
+
assert_equal 5, @segmentPicker.get_load_candidates_count(10)
|
63
|
+
end
|
64
|
+
|
65
|
+
# def test_isGroup
|
66
|
+
# assert_equal true, @segmentPicker.in_group?('[~{~PR1~10~}~]')
|
67
|
+
# assert_equal false, @segmentPicker.in_group?('[~UB2~]')
|
68
|
+
# end
|
69
|
+
|
70
|
+
# def test_isRequired
|
71
|
+
#
|
72
|
+
# end
|
73
|
+
|
74
|
+
def test_qetRequiredSegments
|
75
|
+
assert_equal ["MSH", "EVN", "PID", "PV1"], @segmentPicker.get_required_segments()
|
76
|
+
|
77
|
+
assert_equal [0,1,2,6], @segmentPicker.get_required_segment_idxs()
|
78
|
+
segments = [0,1,2,6].map{|it| @profile[it]}
|
79
|
+
p segments
|
80
|
+
assert_equal ["MSH", "EVN", "PID", "PV1"], segments
|
81
|
+
end
|
82
|
+
|
83
|
+
# def test_handleRequiredSegments
|
84
|
+
# assert_equal 12, @segmentPicker.pick_optional_segments().size, '11 picked out of 21'
|
85
|
+
# end
|
86
|
+
|
87
|
+
# def test_pickOptionalSegments
|
88
|
+
# p @segmentPicker.pick_optional_segments()
|
89
|
+
# end
|
90
|
+
|
91
|
+
def test_getRequiredSegments_withZ
|
92
|
+
# profile = 'base:MSH~base:EVN~base:PID~0~1~base:PV1~2~3~4~5~6~7~9~10~13~14~15~16~17~18~19'
|
93
|
+
profile = ["base:MSH","base:EVN","base:PID",0,1,"base:PV1",2,3,4,5,6,7,9,10,13,14,15,16,17,18,19]
|
94
|
+
|
95
|
+
elements = []
|
96
|
+
elements << "[~base:PD1~]"
|
97
|
+
elements << "[~{~base:NK1~}~]"
|
98
|
+
elements << "[~base:PV2~]"
|
99
|
+
elements << "[~{~base:DB1~}~]"
|
100
|
+
elements << "[~{~base:OBX~}~]"
|
101
|
+
elements << "[~{~base:AL1~}~]"
|
102
|
+
elements << "[~{~base:DG1~}~]"
|
103
|
+
elements << "[~base:DRG~]"
|
104
|
+
elements << "[~{~base:ROL~}~]"
|
105
|
+
elements << "[~{~base:PR1~8~}~]"
|
106
|
+
elements << "[~{~base:GT1~}~]"
|
107
|
+
elements << "[~base:IN2~]"
|
108
|
+
elements << "[~base:IN3~]"
|
109
|
+
elements << "[~{~base:IN1~11~12~}~]"
|
110
|
+
elements << "[~base:ACC~]"
|
111
|
+
elements << "[~base:UB1~]"
|
112
|
+
elements << "[~base:UB2~]"
|
113
|
+
elements << "[~ZEM~]" #17
|
114
|
+
elements << "[~ZEN~]" #18
|
115
|
+
elements << "[~ZMH~]" #19
|
116
|
+
# @segmentMap = {:segments => elements, :profile => profile}
|
117
|
+
@segmentPicker = SegmentPicker.new(profile, elements)
|
118
|
+
required = @segmentPicker.get_required_segments()
|
119
|
+
expected = ["base:MSH", "base:EVN", "base:PID", "base:PV1", "[~ZEM~]", "[~ZEN~]", "[~ZMH~]"]
|
120
|
+
assert_equal expected, required
|
121
|
+
|
122
|
+
@segmentPicker = SegmentPicker.new(profile, elements)
|
123
|
+
assert_equal [0, 1, 2, 5, 18, 19, 20], @segmentPicker.get_required_segment_idxs()
|
124
|
+
reqs = [0, 1, 2, 5, 18, 19, 20].map{|it| profile[it]}
|
125
|
+
p reqs
|
126
|
+
assert_equal expected, reqs
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_getSegmentsToBuild_with_repeating_required_segments
|
130
|
+
# profile = 'MSH~EVN~PID~0~PV1~1~2~3~PID~4~PV1~5~6~7'
|
131
|
+
profile = ["MSH","EVN","PID",0,"PV1",1,2,3,'PID',4,'PV1',5,6,7]
|
132
|
+
|
133
|
+
elements = []
|
134
|
+
elements << "[~PD1~]"
|
135
|
+
elements << "[~PV2~]"
|
136
|
+
elements << "[~{~DB1~}~]"
|
137
|
+
elements << "[~{~OBX~}~]"
|
138
|
+
elements << "[~PD1~]"
|
139
|
+
elements << "[~PV2~]"
|
140
|
+
elements << "[~{~DB1~}~]"
|
141
|
+
elements << "[~{~OBX~}~]"
|
142
|
+
|
143
|
+
# # @segmentMap = {:segments => elements, :profile => profile}
|
144
|
+
# @segmentPicker = SegmentPicker.new(profile.clone, elements.clone)
|
145
|
+
# segments = @segmentPicker.get_segments_to_build()
|
146
|
+
# # ["MSH", "EVN", "PID", "PV1", "PID", "PV1"]
|
147
|
+
# assert_equal 1,segments.count("MSH")
|
148
|
+
# assert_equal 1, segments.count("EVN")
|
149
|
+
# assert_equal 2, segments.count("PID")
|
150
|
+
# assert_equal 2, segments.count("PV1")
|
151
|
+
|
152
|
+
# @segmentPicker = SegmentPicker.new(profile.clone, elements.clone)
|
153
|
+
# segments = @segmentPicker.get_required_segments()
|
154
|
+
# # ["MSH", "EVN", "PID", "PV1", "PID", "PV1"]
|
155
|
+
# p segments
|
156
|
+
# assert_equal 1,segments.count("MSH")
|
157
|
+
# assert_equal 1, segments.count("EVN")
|
158
|
+
# assert_equal 2, segments.count("PID")
|
159
|
+
# assert_equal 2, segments.count("PV1")
|
160
|
+
|
161
|
+
@segmentPicker = SegmentPicker.new(profile.clone, elements.clone)
|
162
|
+
assert_equal [0, 1, 2, 4, 8, 10], @segmentPicker.get_required_segment_idxs()
|
163
|
+
segments = [0, 1, 2, 4, 8, 10].map{|it| is_number?(profile[it])?@segmentPicker.encodedSegments[profile[it]]: profile[it]}
|
164
|
+
p segments
|
165
|
+
assert_equal 1,segments.count("MSH")
|
166
|
+
assert_equal 1, segments.count("EVN")
|
167
|
+
assert_equal 2, segments.count("PID")
|
168
|
+
assert_equal 2, segments.count("PV1")
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_getSegmentsToBuild_with_repeating_Z_segments
|
172
|
+
# profile = 'base:MSH~base:EVN~base:PID~0~1~base:PV1~2~3~4~5~6~7~9~10~13~14~15~16~17~18~19'
|
173
|
+
profile = ["base:MSH","base:EVN","base:PID",0,1,"base:PV1",2,3,4,5,6,7,9,10,13,14,15,16,17,18,19]
|
174
|
+
|
175
|
+
elements = []
|
176
|
+
elements << "[~base:PD1~]"
|
177
|
+
elements << "[~{~base:NK1~}~]"
|
178
|
+
elements << "[~base:PV2~]"
|
179
|
+
elements << "[~{~base:DB1~}~]"
|
180
|
+
elements << "[~{~base:OBX~}~]"
|
181
|
+
elements << "[~{~base:AL1~}~]"
|
182
|
+
elements << "[~{~base:DG1~}~]"
|
183
|
+
elements << "[~base:DRG~]"
|
184
|
+
elements << "[~{~base:ROL~}~]"
|
185
|
+
elements << "[~{~base:PR1~8~}~]"
|
186
|
+
elements << "[~{~base:GT1~}~]"
|
187
|
+
elements << "[~base:IN2~]"
|
188
|
+
elements << "[~base:IN3~]"
|
189
|
+
elements << "[~{~base:IN1~11~12~}~]"
|
190
|
+
elements << "[~ZEM~]"
|
191
|
+
elements << "[~ZEN~]"
|
192
|
+
elements << "[~ZMH~]"
|
193
|
+
elements << "[~ZEM~]" #17
|
194
|
+
elements << "[~ZEN~]" #18
|
195
|
+
elements << "[~ZMH~]" #19
|
196
|
+
|
197
|
+
# @segmentMap = {:segments => elements, :profile => profile}
|
198
|
+
# @segmentPicker = SegmentPicker.new(profile.clone, elements.clone)
|
199
|
+
# segments = @segmentPicker.get_segments_to_build()
|
200
|
+
# assert_equal 1,segments.count("base:MSH")
|
201
|
+
# assert_equal 1, segments.count("base:EVN")
|
202
|
+
# assert_equal 2, segments.count("[~ZEM~]")
|
203
|
+
# assert_equal 2, segments.count("[~ZEN~]")
|
204
|
+
# assert_equal 2, segments.count("[~ZMH~]")
|
205
|
+
|
206
|
+
# @segmentPicker = SegmentPicker.new(profile.clone, elements.clone)
|
207
|
+
# segments = @segmentPicker.get_required_segments()
|
208
|
+
# assert_equal 1,segments.count("base:MSH")
|
209
|
+
# assert_equal 1, segments.count("base:EVN")
|
210
|
+
# assert_equal 2, segments.count("[~ZEM~]")
|
211
|
+
# assert_equal 2, segments.count("[~ZEN~]")
|
212
|
+
# assert_equal 2, segments.count("[~ZMH~]")
|
213
|
+
|
214
|
+
|
215
|
+
@segmentPicker = SegmentPicker.new(profile.clone, elements.clone)
|
216
|
+
rs = @segmentPicker.get_required_segment_idxs()
|
217
|
+
# assert_equal [0, 1, 2, 5], @segmentPicker.get_required_segment_idxs()
|
218
|
+
segments = rs.map{|it| is_number?(profile[it])?@segmentPicker.encodedSegments[profile[it]]: profile[it]}
|
219
|
+
p segments
|
220
|
+
assert_equal 1,segments.count("base:MSH")
|
221
|
+
assert_equal 1, segments.count("base:EVN")
|
222
|
+
assert_equal 2, segments.count("[~ZEM~]")
|
223
|
+
assert_equal 2, segments.count("[~ZEN~]")
|
224
|
+
assert_equal 2, segments.count("[~ZMH~]")
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
# def test_handleGroups
|
229
|
+
# # profile = ["MSH", "EVN", "PID", "[~PD1~]", "[~{~ROL~}~]", "[~{~NK1~}~]", "PV1", "[~PV2~]", "[~{~ROL~}~]", "[~{~DB1~}~]", "[~{~OBX~}~]", "[~{~AL1~}~]", "[~{~DG1~}~]", "[~DRG~]", "[~{~PR1~10~}~]", "[~{~GT1~}~]", "[~{~IN1~13~14~15~}~]", "[~ACC~]", "[~UB1~]", "[~UB2~]", "[~PDA~]"]
|
230
|
+
# profile = ["MSH","[~{~PR1~10~}~]"]
|
231
|
+
# # [~{~PR1~[~{~ROL~}~]~}~] = {RP1 ~ ROL}
|
232
|
+
# segments = @segmentPicker.handle_groups(profile)
|
233
|
+
# p segments
|
234
|
+
# # [~{~IN1~[~IN2~]~[~{~IN3~}~]~[~{~ROL~}~]~}~]
|
235
|
+
# end
|
236
|
+
|
237
|
+
def test_pickSegments
|
238
|
+
# profile = ["MSH", "EVN", "PID", "[~PD1~]", "[~{~ROL~}~]", "[~{~NK1~}~]", "PV1", "[~PV2~]", "[~{~ROL~}~]", "[~{~DB1~}~]", "[~{~OBX~}~]", "[~{~AL1~}~]", "[~{~DG1~}~]", "[~DRG~]", "[~{~PR1~10~}~]", "[~{~GT1~}~]", "[~{~IN1~13~14~15~}~]", "[~ACC~]", "[~UB1~]", "[~UB2~]", "[~PDA~]"]
|
239
|
+
# profile = [ "[~{~PR1~10~}~]"]
|
240
|
+
# [~{~PR1~[~{~ROL~}~]~}~] = {RP1 ~ ROL}
|
241
|
+
# segments = @segmentPicker.pick_segments
|
242
|
+
# p segments
|
243
|
+
#
|
244
|
+
# teardown
|
245
|
+
# setup()
|
246
|
+
|
247
|
+
segments = @segmentPicker.pick_segments_to_build()
|
248
|
+
p segments
|
249
|
+
# p @profile
|
250
|
+
# idxs = @segmentPicker.pick_segment_idx_to_build
|
251
|
+
# p idxs
|
252
|
+
# segments = idxs.map{|it| is_number?(@profile[it])?@segmentPicker.encodedSegments[@profile[it]]: @profile[it]}
|
253
|
+
# p segments
|
254
|
+
end
|
255
|
+
|
256
|
+
#refactoring
|
257
|
+
# def test_get_required_segment_complex_groups
|
258
|
+
# p @segmentPicker.pick_required_segments1()
|
259
|
+
#
|
260
|
+
# # "MSH~EVN~PID~0~1~2~PV1~3~4~5~6~7~8~9~11~12~16~17~18~19~20"
|
261
|
+
# # ["[~PD1~]", "[~{~ROL~}~]", "[~{~NK1~}~]", "[~PV2~]", "[~{~ROL~}~]", "[~{~DB1~}~]", "[~{~OBX~}~]", "[~{~AL1~}~]", "[~{~DG1~}~]", "[~DRG~]", "[~{~ROL~}~]", ["PR1", "[~{~ROL~}~]"], "[~{~GT1~}~]", "[~IN2~]", "[~{~IN3~}~]", "[~{~ROL~}~]", ["IN1", "[~IN2~]", "[~{~IN3~}~]", "[~{~ROL~}~]"], "[~ACC~]", "[~UB1~]", "[~UB2~]", "[~PDA~]"]
|
262
|
+
#
|
263
|
+
# end
|
264
|
+
def test_isZ
|
265
|
+
assert @segmentPicker.is_z?('[~ZMH~]')
|
266
|
+
assert @segmentPicker.is_z?('[~{~ZMH~}~]')
|
267
|
+
assert !@segmentPicker.is_z?('[~{~AL1~}~]')
|
268
|
+
assert !@segmentPicker.is_z?('[~{~AZL1~}~]')
|
269
|
+
# segment << OptionalGroup.new().concat(["PID", "[~PD1~]", "[~{~NTE~}~]", OptionalGroup.new().concat(["PV1", "[~PV2~]"]), OptionalGroup.new(RepeatingGroup.new().concat(["IN1", "[~IN2~]", "[~IN3~]"])), "[~GT1~]", "[~{~AL1~}~]"])
|
270
|
+
elements =[]
|
271
|
+
elements << RepeatingGroup.new().concat(["PID", "[~ZMH~]", "[~{~NTE~}~]", OptionalGroup.new().concat(["PV1", "[~PV2~]"]), OptionalGroup.new(RepeatingGroup.new().concat(["IN1", "[~IN2~]", "[~IN3~]"])), "[~GT1~]", "[~{~AL1~}~]"])
|
272
|
+
# elements << segment
|
273
|
+
@segmentPicker = SegmentPicker.new([0], elements.clone)
|
274
|
+
# segment = segment.flatten!().to_s
|
275
|
+
# puts (segment =~ /\~Z/)? true: false
|
276
|
+
assert @segmentPicker.is_z1?(0)
|
277
|
+
p elements
|
278
|
+
end
|
279
|
+
end
|
@@ -0,0 +1,355 @@
|
|
1
|
+
# require "minitest/autorun"
|
2
|
+
require "benchmark"
|
3
|
+
require 'test/unit'
|
4
|
+
require 'ruby-hl7'
|
5
|
+
# require_relative "../lib/ez7gen/service/segment_generator"
|
6
|
+
require_relative '../lib/ez7gen/structure_parser'
|
7
|
+
require_relative '../lib/ez7gen/service/utils'
|
8
|
+
|
9
|
+
|
10
|
+
class StructureParserTest < Test::Unit::TestCase
|
11
|
+
include Utils
|
12
|
+
#parse xml once
|
13
|
+
# TESTS #
|
14
|
+
# def setup
|
15
|
+
# puts Benchmark.measure{
|
16
|
+
# # pp = ProfilerParser.new(@attrs).generate()
|
17
|
+
# profilers = { 'primary'=> @@pp }
|
18
|
+
# @segmentGen = SegmentGenerator.new("2.4","ADT_A01", profilers)
|
19
|
+
# # @msg = HL7::Message.new
|
20
|
+
# # @msg << @segmentGen.init_msh()
|
21
|
+
# }
|
22
|
+
#
|
23
|
+
# end
|
24
|
+
|
25
|
+
def test_init
|
26
|
+
parser = StructureParser.new()
|
27
|
+
assert_equal([],parser.encodedSegments)
|
28
|
+
assert_equal(0, parser.idx)
|
29
|
+
|
30
|
+
# puts @msg
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_process_opt
|
34
|
+
parser = StructureParser.new()
|
35
|
+
struct = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
|
36
|
+
# regEx = parser.regExOp
|
37
|
+
# parser.process(struct, regEx, '[]')
|
38
|
+
parser.process_opt_groups(struct)
|
39
|
+
# assert_equal 29,parser.idx
|
40
|
+
assert_equal 29,parser.encodedSegments.size
|
41
|
+
puts struct
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_process_rep
|
45
|
+
parser = StructureParser.new()
|
46
|
+
struct = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
|
47
|
+
# regEx = parser::REGEX_REP
|
48
|
+
# parser.process(struct, regEx, parser::PRNTHS_REP)# {}
|
49
|
+
parser.process_rep_groups(struct)
|
50
|
+
# assert_equal 17,parser.idx
|
51
|
+
assert_equal 17,parser.encodedSegments.size
|
52
|
+
puts struct
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_process_not_optional_group
|
56
|
+
# <MessageStructure name='ADT_A45' definition='MSH~EVN~PID~[~PD1~]~{~MRG~PV1~}' />
|
57
|
+
parser = StructureParser.new()
|
58
|
+
struct = "MSH~MSA~[~ERR~]~QAK~QPD~{~[~PID~[~PD1~]~[~QRI~]~]~}~[~DSC~]"
|
59
|
+
# regEx = parser.regExOp
|
60
|
+
# parser.process(struct, regEx, '[]')
|
61
|
+
# # assert_equal 17,parser.encodedSegments.size
|
62
|
+
# p parser.encodedSegments
|
63
|
+
# puts struct
|
64
|
+
#
|
65
|
+
# regEx = parser.regExRep
|
66
|
+
# parser.process(struct, regEx, '{}')
|
67
|
+
parser.process_struct(struct)
|
68
|
+
assert_equal ["[~ERR~]", "[~PID~2~3~]", "[~PD1~]", "[~QRI~]", "[~DSC~]", "{~1~}"], parser.encodedSegments
|
69
|
+
# p parser.encodedSegments
|
70
|
+
assert_equal "MSH~MSA~0~QAK~QPD~5~4", struct
|
71
|
+
#p struct
|
72
|
+
|
73
|
+
# ["[~ERR~]", "[~PD1~]", "[~QRI~]", "[~PID~1~2~]", "{~3~}", "[~DSC~]"]
|
74
|
+
#["MSH", "MSA", 0, "QAK", "QPD", 4, 5]
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_process_struct
|
78
|
+
#omg_019
|
79
|
+
parser = StructureParser.new()
|
80
|
+
struct = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
|
81
|
+
# regEx = parser::REGEX_REP
|
82
|
+
# parser.process(struct, regEx, parser::PRNTHS_REP)# {}
|
83
|
+
parser.process_struct(struct)
|
84
|
+
assert_equal 33,parser.idx
|
85
|
+
assert_equal 33,parser.encodedSegments.size
|
86
|
+
p parser.encodedSegments
|
87
|
+
puts struct
|
88
|
+
expected =["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "[~17~19~21~31~]", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}", "{~22~OBR~23~24~32~}", "{~OBX~25~}"]
|
89
|
+
assert_equal expected, parser.encodedSegments
|
90
|
+
# ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "[~17~19~21~{~22~OBR~23~24~{~OBX~25~}~}~]", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}"]
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_process_struct_ADT_A01
|
95
|
+
struct = "MSH~EVN~PID~[~PD1~]~[~{~ROL~}~]~[~{~NK1~}~]~PV1~[~PV2~]~[~{~ROL~}~]~[~{~DB1~}~]~[~{~OBX~}~]~[~{~AL1~}~]~[~{~DG1~}~]~[~DRG~]~[~{~PR1~[~{~ROL~}~]~}~]~[~{~GT1~}~]~[~{~IN1~[~IN2~]~[~{~IN3~}~]~[~{~ROL~}~]~}~]~[~ACC~]~[~UB1~]~[~UB2~]~[~PDA~]"
|
96
|
+
parser = StructureParser.new()
|
97
|
+
parser.process_struct(struct)
|
98
|
+
assert_equal 21, parser.idx
|
99
|
+
assert_equal 21, parser.encodedSegments.size
|
100
|
+
p parser.encodedSegments
|
101
|
+
# p struct
|
102
|
+
# expected = ["MSH", "EVN", "PID", 0, 1, 2, "PV1", 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20]
|
103
|
+
assert_equal "MSH~EVN~PID~0~1~2~PV1~3~4~5~6~7~8~9~10~12~13~17~18~19~20", struct
|
104
|
+
expected = ["[~PD1~]", "[~{~ROL~}~]", "[~{~NK1~}~]", "[~PV2~]", "[~{~ROL~}~]", "[~{~DB1~}~]", "[~{~OBX~}~]", "[~{~AL1~}~]", "[~{~DG1~}~]", "[~DRG~]", "[~{~PR1~11~}~]", "[~{~ROL~}~]", "[~{~GT1~}~]", "[~{~IN1~14~15~16~}~]", "[~IN2~]", "[~{~IN3~}~]", "[~{~ROL~}~]", "[~ACC~]", "[~UB1~]", "[~UB2~]", "[~PDA~]"]
|
105
|
+
assert_equal expected, parser.encodedSegments
|
106
|
+
|
107
|
+
# old = ["[~PD1~]", "[~{~ROL~}~]", "[~{~NK1~}~]", "[~PV2~]", "[~{~ROL~}~]", "[~{~DB1~}~]", "[~{~OBX~}~]", "[~{~AL1~}~]", "[~{~DG1~}~]", "[~DRG~]", "[~{~ROL~}~]", "[~{~PR1~10~}~]", "[~{~GT1~}~]", "[~IN2~]", "[~{~IN3~}~]", "[~{~ROL~}~]", "[~{~IN1~13~14~15~}~]", "[~ACC~]", "[~UB1~]", "[~UB2~]", "[~PDA~]"]
|
108
|
+
# assert_equal expected, parser.encodedSegments
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_handle_groups
|
112
|
+
# arr = ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "[~17~19~21~{~22~OBR~23~24~{~OBX~25~}~}~]", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}"]
|
113
|
+
#arr = ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "~17~19~21~31~", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}", "{~22~OBR~23~24~32~}", "{~OBX~25~}"]
|
114
|
+
arr = ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "{~17~19~21~31~}", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}", "{~22~OBR~23~24~32~}", "{~OBX~25~}"]
|
115
|
+
# MSH~0~1~29
|
116
|
+
parser = StructureParser.new()
|
117
|
+
|
118
|
+
parser.encodedSegments = arr
|
119
|
+
parser.idx=parser.encodedSegments.size
|
120
|
+
|
121
|
+
seg = parser.handle_groups(arr)
|
122
|
+
p parser.encodedSegments
|
123
|
+
expected = ["[~{~NTE~}~]", ["PID", "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], [["IN1", "[~IN2~]", "[~IN3~]"]], "[~GT1~]", "[~{~AL1~}~]"], "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], "[~PV2~]", [["IN1", "[~IN2~]", "[~IN3~]"]], "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", [["OBX", "[~{~NTE~}~]"]], "[~{~NTE~}~]", [["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]], ["PID", "[~PD1~]"], "[~PD1~]", ["PV1", "[~PV2~]"], "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", ["ORC", "OBR", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", [["OBX", "[~{~NTE~}~]"]], [[["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]]], "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]"], [[["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]]], ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]], ["OBX", "[~{~NTE~}~]"]]
|
124
|
+
assert_equal expected, parser.encodedSegments
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_handle_groups_optMult
|
129
|
+
arr = ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "{~17~19~21~31~}", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}", "{~22~OBR~23~24~32~}", "{~OBX~25~}"]
|
130
|
+
# MSH~0~1~29
|
131
|
+
parser = StructureParser.new()
|
132
|
+
|
133
|
+
parser.encodedSegments = arr
|
134
|
+
parser.idx=parser.encodedSegments.size
|
135
|
+
|
136
|
+
seg = parser.handle_groups(["[~PID~2~3~4~6~9~10~]"])
|
137
|
+
assert_equal( [["PID", "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], [["IN1", "[~IN2~]", "[~IN3~]"]], "[~GT1~]", "[~{~AL1~}~]"]], seg)
|
138
|
+
# p seg
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_is_group_resolved
|
142
|
+
arr = ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "[~17~19~21~{~22~OBR~23~24~{~OBX~25~}~}~]", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}"]
|
143
|
+
|
144
|
+
seg = "[~17~19~21~{~22~OBR~23~24~{~OBX~25~}~}~]"
|
145
|
+
assert_equal 1, seg.scan(StructureParser::REGEX_OP).size()
|
146
|
+
assert_equal 2, seg.scan(StructureParser::REGEX_REP).size()
|
147
|
+
|
148
|
+
assert (seg.scan(StructureParser::REGEX_OP).size()>1 || seg.scan(StructureParser::REGEX_REP).size()>1)
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_has_subgroups
|
152
|
+
a = nil || 'a'
|
153
|
+
|
154
|
+
regEx = /\[~{(.*)}~\]/
|
155
|
+
puts "[~{~NTE~}~]".scan(regEx)
|
156
|
+
puts "[~ERR~]".scan(regEx)
|
157
|
+
parser = StructureParser.new()
|
158
|
+
|
159
|
+
arr = ["[~ERR~]", "[~{~NTE~}~]", "[~3~{~ORC~5~}~]", "[~PID~4~]", "[~{~NTE~}~]", "[~RXE~{~RXR~}~6~]", "[~{~RXC~}~]"]
|
160
|
+
assert !parser.has_subgroups?(arr[0])
|
161
|
+
assert !parser.has_subgroups?(arr[1])
|
162
|
+
assert parser.has_subgroups?(arr[2])
|
163
|
+
p arr[2].scan(StructureParser::REGEX_OP)
|
164
|
+
p arr[2].scan(StructureParser::REGEX_REP)
|
165
|
+
|
166
|
+
assert !parser.has_subgroups?(arr[3])
|
167
|
+
assert !parser.has_subgroups?(arr[4])
|
168
|
+
assert parser.has_subgroups?(arr[5])
|
169
|
+
assert !parser.has_subgroups?(arr[6])
|
170
|
+
|
171
|
+
assert parser.has_subgroups?("[~{~RXA~}~RXR~]")
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_process_segments_ORM_O01
|
175
|
+
parser = StructureParser.new()
|
176
|
+
# struct='MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~[~<~OBR~|~RQD~|~RQ1~|~RXO~|~ODS~|~ODT~>~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~]~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
|
177
|
+
# struct='MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~[~<~OBR~|~RQD~|~RQ1~|~RXO~|~ODS~|~ODT~>~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~]~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
|
178
|
+
struct='MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~[~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~]~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
|
179
|
+
parser.process_segments(struct)
|
180
|
+
assert_equal 'MSH~0~1~20', struct
|
181
|
+
# expected = ["[~{~NTE~}~]", ["PID", "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], [["IN1", "[~IN2~]", "[~IN3~]"]], "[~GT1~]", "[~{~AL1~}~]"], "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], "[~PV2~]", [["IN1", "[~IN2~]", "[~IN3~]"]], "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", [["OBX", "[~{~NTE~}~]"]], "[~{~NTE~}~]", [["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]], ["PID", "[~PD1~]"], "[~PD1~]", ["PV1", "[~PV2~]"], "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", ["ORC", "OBR", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", [["OBX", "[~{~NTE~}~]"]], [[["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]]], "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]"], [[["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]]], ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]], ["OBX", "[~{~NTE~}~]"]]
|
182
|
+
# assert_equal expected, parser.encodedSegments
|
183
|
+
p parser.encodedSegments
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_process_segments_RDE_O11
|
187
|
+
parser = StructureParser.new()
|
188
|
+
struct='MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~[~RXO~[~{~NTE~}~]~{~RXR~}~[~{~RXC~}~[~{~NTE~}~]~]~]~RXE~{~RXR~}~[~{~RXC~}~]~[~{~OBX~[~{~NTE~}~]~}~]~[~{~CTI~}~]~}'
|
189
|
+
# parser.process_segments(struct)
|
190
|
+
# assert_equal 'MSH~0~1~19', struct
|
191
|
+
# z=parser.process_struct(struct)
|
192
|
+
# p z
|
193
|
+
# ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~RXO~12~{~RXR~}~13~]", "[~{~NTE~}~]", "[~{~RXC~}~14~]", "[~{~NTE~}~]", "[~{~RXC~}~]", "[~{~OBX~17~}~]", "[~{~NTE~}~]", "[~{~CTI~}~]", "{~ORC~11~RXE~20~15~16~18~}", "{~RXR~}"]
|
194
|
+
# parser.handle_groups()
|
195
|
+
# assert_equal expected, parser.encodedSegments
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_process_segments_OMG_O19
|
199
|
+
#omg_019
|
200
|
+
parser = StructureParser.new()
|
201
|
+
struct = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
|
202
|
+
parser.process_segments(struct)
|
203
|
+
assert_equal 'MSH~0~1~29', struct
|
204
|
+
expected = ["[~{~NTE~}~]", ["PID", "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], [["IN1", "[~IN2~]", "[~IN3~]"]], "[~GT1~]", "[~{~AL1~}~]"], "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], "[~PV2~]", [["IN1", "[~IN2~]", "[~IN3~]"]], "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", [["OBX", "[~{~NTE~}~]"]], "[~{~NTE~}~]", [["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]], ["PID", "[~PD1~]"], "[~PD1~]", ["PV1", "[~PV2~]"], "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", ["ORC", "OBR", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", [["OBX", "[~{~NTE~}~]"]], [[["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]]], "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]"], [[["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]]], ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]], ["OBX", "[~{~NTE~}~]"]]
|
205
|
+
assert_equal expected, parser.encodedSegments
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_is_complex_group
|
209
|
+
parser = StructureParser.new()
|
210
|
+
group ='["ORC", "[~OBR~8~]"]' # bug in ORL_22
|
211
|
+
assert_true parser.is_complex_group?(group)
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_markers
|
215
|
+
a = OptionalGroup.new([1,2,3])
|
216
|
+
assert_equal(OptionalGroup, a.class)
|
217
|
+
assert a.instance_of?(OptionalGroup)
|
218
|
+
assert !a.instance_of?(Array)
|
219
|
+
a.each{|it| puts it}
|
220
|
+
assert a.kind_of?(Array) # => true
|
221
|
+
|
222
|
+
group = "[~IN1~7~8~]"
|
223
|
+
a = Marker.gen(group)
|
224
|
+
assert_equal OptionalGroup, a.class
|
225
|
+
a = Marker.whatGroup?(group)
|
226
|
+
assert_equal OptionalGroup, a.class
|
227
|
+
|
228
|
+
group = "{~IN1~7~8~}"
|
229
|
+
a = Marker.gen(group)
|
230
|
+
assert_equal RepeatingGroup, a.class
|
231
|
+
a = Marker.whatGroup?(group)
|
232
|
+
assert_equal RepeatingGroup, a.class
|
233
|
+
|
234
|
+
group = "[~{~IN1~7~8~}~]"
|
235
|
+
a = Marker.gen(group)
|
236
|
+
assert_equal OptionalGroup, a.class
|
237
|
+
a = Marker.whatGroup?(group)
|
238
|
+
assert_equal OptionalGroup, a.class
|
239
|
+
|
240
|
+
group = "~IN1~7~8~"
|
241
|
+
a = Marker.gen(group)
|
242
|
+
assert_nil a
|
243
|
+
a = Marker.whatGroup?(group)
|
244
|
+
assert_nil a
|
245
|
+
|
246
|
+
# group ='[~{~NTE~}~]' # not a group!
|
247
|
+
# a = Marker.gen(group)
|
248
|
+
# assert_nil a
|
249
|
+
# a = Marker.whatGroup?(group)
|
250
|
+
# assert_nil a
|
251
|
+
|
252
|
+
# "[~{~IN1~7~8~}~]"
|
253
|
+
|
254
|
+
# a = Marker.gen("[~17~19~21~{~22~OBR~23~24~{~OBX~25~}~}~]")
|
255
|
+
# p a
|
256
|
+
# a = Marker.new("[~17~19~21~{~22~OBR~23~24~{~OBX~25~}~}~]")
|
257
|
+
# p a
|
258
|
+
#[["PID", "[~PD1~]"], ["PV1", "[~PV2~]"], "[~{~AL1~}~]", ["[~ORC~]", "OBR", "[~{~NTE~}~]", "[~CTD~]", ["OBX", "[~{~NTE~}~]"]]]
|
259
|
+
#segment can be an array
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_markers_1
|
263
|
+
|
264
|
+
# [RXE~{~RXR~}~6]
|
265
|
+
a = Marker.gen1("[~RXE~{~RXR~}~6~]")
|
266
|
+
assert_equal OptionalGroup, a.class
|
267
|
+
# assert_equal RepeatingGroup, a[0].class
|
268
|
+
|
269
|
+
a = Marker.gen("[~IN1~7~8~]")
|
270
|
+
assert_equal OptionalGroup, a.class
|
271
|
+
|
272
|
+
a = Marker.gen("{~IN1~7~8~}")
|
273
|
+
assert_equal RepeatingGroup, a.class
|
274
|
+
|
275
|
+
a = Marker.gen("[~{~IN1~7~8~}~]")
|
276
|
+
assert_equal OptionalGroup, a.class
|
277
|
+
assert_equal RepeatingGroup, a[0].class
|
278
|
+
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_groups_markers
|
282
|
+
o = OptionalGroup.new('~IN1~7~8~')
|
283
|
+
assert_equal 3, o.size
|
284
|
+
|
285
|
+
o = OptionalGroup.new().concat(['a','b','c'])
|
286
|
+
assert_equal 3, o.size
|
287
|
+
|
288
|
+
RepeatingGroup.new('~IN1~7~8~')
|
289
|
+
assert_equal 3, o.size
|
290
|
+
end
|
291
|
+
|
292
|
+
def test_process_struct_PRE_012
|
293
|
+
|
294
|
+
parser = StructureParser.new()
|
295
|
+
# struct = '[~[~PID~[~{~NTE~}~]~]~{~ORC~[~RXE~{~RXR~}~[~{~RXC~}~]~]~}~]'
|
296
|
+
struct = 'MSH~MSA~[~ERR~]~[~{~NTE~}~]~[~[~PID~[~{~NTE~}~]~]~{~ORC~[~RXE~{~RXR~}~[~{~RXC~}~]~]~}~]'
|
297
|
+
# struct = 'RXE~{~RXR~}~6'
|
298
|
+
parser.process_struct(struct)
|
299
|
+
# assert_equal 33,parser.idx
|
300
|
+
# assert_equal 33,parser.encodedSegments.size
|
301
|
+
p parser.encodedSegments
|
302
|
+
puts struct
|
303
|
+
# expected =["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "{~17~19~21~31~}", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}", "{~22~OBR~23~24~32~}", "{~OBX~25~}"]
|
304
|
+
# assert_equal expected, parser.encodedSegments
|
305
|
+
# ["[~{~NTE~}~]", "[~PID~2~3~4~6~9~10~]", "[~PD1~]", "[~{~NTE~}~]", "[~PV1~5~]", "[~PV2~]", "[~{~IN1~7~8~}~]", "[~IN2~]", "[~IN3~]", "[~GT1~]", "[~{~AL1~}~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~DG1~}~]", "[~{~OBX~15~}~]", "[~{~NTE~}~]", "[~17~19~21~{~22~OBR~23~24~{~OBX~25~}~}~]", "[~PID~18~]", "[~PD1~]", "[~PV1~20~]", "[~PV2~]", "[~{~AL1~}~]", "[~ORC~]", "[~{~NTE~}~]", "[~CTD~]", "[~{~NTE~}~]", "[~{~FT1~}~]", "[~{~CTI~}~]", "[~BLG~]", "{~ORC~OBR~11~12~13~14~30~26~27~28~}", "{~16~}"]
|
306
|
+
# [~RXE~{~RXR~}~6~]
|
307
|
+
seg = parser.handle_groups(parser.encodedSegments)
|
308
|
+
# assert_equal( [["PID", "[~PD1~]", "[~{~NTE~}~]", ["PV1", "[~PV2~]"], [["IN1", "[~IN2~]", "[~IN3~]"]], "[~GT1~]", "[~{~AL1~}~]"]], seg)
|
309
|
+
# ["[~ERR~]", "[~{~NTE~}~]", "[~3~{~ORC~5~}~]", "[~PID~4~]", "[~{~NTE~}~]", "[~RXE~{~RXR~}~6~]", "[~{~RXC~}~]"]
|
310
|
+
|
311
|
+
# seg = parser.handle_groups(["[~RXE~{~RXR~}~6~]"])
|
312
|
+
p seg
|
313
|
+
end
|
314
|
+
def test_process_struct_PRE_018
|
315
|
+
|
316
|
+
parser = StructureParser.new()
|
317
|
+
struct = 'MSH~MSA~[~ERR~]~[~{~NTE~}~]~[~[~PID~[~{~NTE~}~]~]~{~ORC~[~{~RXA~}~RXR~]~}~]'
|
318
|
+
|
319
|
+
parser.process_struct(struct)
|
320
|
+
p parser.encodedSegments
|
321
|
+
puts struct
|
322
|
+
seg = parser.handle_groups(parser.encodedSegments)
|
323
|
+
p seg
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_process_struct_ADT_A45
|
327
|
+
|
328
|
+
parser = StructureParser.new()
|
329
|
+
struct = 'MSH~EVN~PID~[~PD1~]~{~MRG~PV1~}'
|
330
|
+
|
331
|
+
parser.process_struct(struct)
|
332
|
+
p parser.encodedSegments
|
333
|
+
puts struct
|
334
|
+
seg = parser.handle_groups(parser.encodedSegments)
|
335
|
+
p seg
|
336
|
+
end
|
337
|
+
|
338
|
+
def test_process_struct_ORL_O22
|
339
|
+
parser = StructureParser.new()
|
340
|
+
struct = 'MSH~MSA~[~ERR~]~[~{~NTE~}~]~[~[~PID~{~[~SAC~[~{~OBX~}~]~]~[~{~ORC~[~OBR~[~{~SAC~}~]~]~}~]~}~]~]'
|
341
|
+
# [~OBR~8~] -broken
|
342
|
+
parser.process_struct(struct)
|
343
|
+
p parser.encodedSegments
|
344
|
+
# puts struct
|
345
|
+
assert_equal 13, struct.size
|
346
|
+
seg = parser.handle_groups(parser.encodedSegments)
|
347
|
+
p seg
|
348
|
+
assert_equal 10, seg.size
|
349
|
+
# ["[~ERR~]", "[~{~NTE~}~]", [["PID", [["SAC", "[~{~OBX~}~]"], [["ORC", ["OBR", "[~{~SAC~}~]"]]]]]], ["PID", [["SAC", "[~{~OBX~}~]"], [["ORC", ["OBR", "[~{~SAC~}~]"]]]]], ["SAC", "[~{~OBX~}~]"], "[~{~OBX~}~]", [["ORC", ["OBR", "[~{~SAC~}~]"]]], ["OBR", "[~{~SAC~}~]"], "[~{~SAC~}~]", [["SAC", "[~{~OBX~}~]"], [["ORC", ["OBR", "[~{~SAC~}~]"]]]]]
|
350
|
+
|
351
|
+
end
|
352
|
+
|
353
|
+
# ["ORC", "[~OBR~8~]"]
|
354
|
+
|
355
|
+
end
|