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,656 @@
|
|
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/profile_parser"
|
7
|
+
|
8
|
+
class SegmentGeneratorTest < Test::Unit::TestCase
|
9
|
+
#parse xml once
|
10
|
+
@@VS =
|
11
|
+
[
|
12
|
+
{:std=>"2.4", :path=>"../test/test-config/schema/2.4", :profiles=>[{:doc=>"2.4.HL7", :name=>"2.4", :std=>"1", :path=>"../test/test-config/schema/2.4/2.4.HL7.xml"}, {:doc=>"VAZ2.4.HL7", :name=>"VAZ2.4", :description=>"2.4 schema with VA defined tables and Z segments", :base=>"2.4", :path=>"../test/test-config/schema/2.4/VAZ2.4.HL7.xml.bkp"}]},
|
13
|
+
{:std=>"2.5", :path=>"../test/test-config/schema/2.5", :profiles=>[{:doc=>"2.5.HL7", :name=>"2.5", :std=>"1", :path=>"../test/test-config/schema/2.5/2.5.HL7.xml"}, {:doc=>"TEST2.5.HL7", :name=>"TEST2.5", :description=>"2.5 mockup schema for testing", :base=>"2.4", :path=>"../test/test-config/schema/2.5/VAZ2.5.HL7.xml"}]}
|
14
|
+
]
|
15
|
+
@attrs = {std: '2.4', version: '2.4.HL7', event: 'ADT_A01', version_store: @@VS}
|
16
|
+
|
17
|
+
# @@pp = ProfileParser.new('2.4','ADT_A01')
|
18
|
+
@@pp = ProfileParser.new(@attrs)
|
19
|
+
|
20
|
+
# EVN: EVN
|
21
|
+
@@evn_attributes ="[max_length:3, description:Event Type Code, ifrepeating:0, datatype:ID, required:B, piece:1, codetable:3]
|
22
|
+
[max_length:26, symbol:!, description:Recorded Date/Time, ifrepeating:0, datatype:TS, required:R, piece:2]
|
23
|
+
[max_length:26, description:Date/Time Planned Event, ifrepeating:0, datatype:TS, required:O, piece:3]
|
24
|
+
[max_length:3, description:Event Reason Code, ifrepeating:0, datatype:IS, required:O, piece:4, codetable:62]
|
25
|
+
[max_length:250, symbol:*, description:Operator ID, ifrepeating:1, datatype:XCN, required:O, piece:5, codetable:188]
|
26
|
+
[max_length:26, description:Event Occurred, ifrepeating:0, datatype:TS, required:O, piece:6]
|
27
|
+
[max_length:180, description:Event Facility, ifrepeating:0, datatype:HD, required:O, piece:7]"
|
28
|
+
|
29
|
+
# PID: PID
|
30
|
+
@@pid_attributes ="[max_length:4, description:Set ID - PID, ifrepeating:0, datatype:SI, required:O, piece:1]
|
31
|
+
[max_length:20, description:Patient ID, ifrepeating:0, datatype:CX, required:B, piece:2]
|
32
|
+
[max_length:250, symbol:+, description:Patient Identifier List, ifrepeating:1, datatype:CX, required:R, piece:3]
|
33
|
+
[max_length:20, symbol:*, description:Alternate Patient ID - PID, ifrepeating:1, datatype:CX, required:B, piece:4]
|
34
|
+
[max_length:250, symbol:+, description:Patient Name, ifrepeating:1, datatype:XPN, required:R, piece:5]
|
35
|
+
[max_length:250, symbol:*, description:Mother's Maiden Name, ifrepeating:1, datatype:XPN, required:O, piece:6]
|
36
|
+
[max_length:26, description:Date/Time Of Birth, ifrepeating:0, datatype:TS, required:O, piece:7]
|
37
|
+
[max_length:1, description:Administrative Sex, ifrepeating:0, datatype:IS, required:O, piece:8, codetable:1]
|
38
|
+
[max_length:250, symbol:*, description:Patient Alias, ifrepeating:1, datatype:XPN, required:B, piece:9]
|
39
|
+
[max_length:250, symbol:*, description:Race, ifrepeating:1, datatype:CE, required:O, piece:10, codetable:5]
|
40
|
+
[max_length:250, symbol:*, description:Patient Address, ifrepeating:1, datatype:XAD, required:O, piece:11]
|
41
|
+
[max_length:4, description:County Code, ifrepeating:0, datatype:IS, required:B, piece:12, codetable:289]
|
42
|
+
[max_length:250, symbol:*, description:Phone Number - Home, ifrepeating:1, datatype:XTN, required:O, piece:13]
|
43
|
+
[max_length:250, symbol:*, description:Phone Number - Business, ifrepeating:1, datatype:XTN, required:O, piece:14]
|
44
|
+
[max_length:250, description:Primary Language, ifrepeating:0, datatype:CE, required:O, piece:15, codetable:296]
|
45
|
+
[max_length:250, description:Marital Status, ifrepeating:0, datatype:CE, required:O, piece:16, codetable:2]
|
46
|
+
[max_length:250, description:Religion, ifrepeating:0, datatype:CE, required:O, piece:17, codetable:6]
|
47
|
+
[max_length:250, description:Patient Account Number, ifrepeating:0, datatype:CX, required:O, piece:18]
|
48
|
+
[max_length:16, description:SSN Number - Patient, ifrepeating:0, datatype:ST, required:B, piece:19]
|
49
|
+
[max_length:25, description:Driver's License Number - Patient, ifrepeating:0, datatype:DLN, required:O, piece:20]
|
50
|
+
[max_length:250, symbol:*, description:Mother's Identifier, ifrepeating:1, datatype:CX, required:O, piece:21]
|
51
|
+
[max_length:250, symbol:*, description:Ethnic Group, ifrepeating:1, datatype:CE, required:O, piece:22, codetable:189]
|
52
|
+
[max_length:250, description:Birth Place, ifrepeating:0, datatype:ST, required:O, piece:23]
|
53
|
+
[max_length:1, description:Multiple Birth Indicator, ifrepeating:0, datatype:ID, required:O, piece:24, codetable:136]
|
54
|
+
[max_length:2, description:Birth Order, ifrepeating:0, datatype:NM, required:O, piece:25]
|
55
|
+
[max_length:250, symbol:*, description:Citizenship, ifrepeating:1, datatype:CE, required:O, piece:26, codetable:171]
|
56
|
+
[max_length:250, description:Veterans Military Status, ifrepeating:0, datatype:CE, required:O, piece:27, codetable:172]
|
57
|
+
[max_length:250, description:Nationality, ifrepeating:0, datatype:CE, required:B, piece:28, codetable:212]
|
58
|
+
[max_length:26, description:Patient Death Date and Time, ifrepeating:0, datatype:TS, required:O, piece:29]
|
59
|
+
[max_length:1, description:Patient Death Indicator, ifrepeating:0, datatype:ID, required:O, piece:30, codetable:136]
|
60
|
+
[max_length:1, description:Identity Unknown Indicator, ifrepeating:0, datatype:ID, required:O, piece:31, codetable:136]
|
61
|
+
[max_length:20, symbol:*, description:Identity Reliability Code, ifrepeating:1, datatype:IS, required:O, piece:32, codetable:445]
|
62
|
+
[max_length:26, description:Last Update Date/Time, ifrepeating:0, datatype:TS, required:O, piece:33]
|
63
|
+
[max_length:40, description:Last Update Facility, ifrepeating:0, datatype:HD, required:O, piece:34]
|
64
|
+
[max_length:250, symbol:?, description:Species Code, ifrepeating:0, datatype:CE, required:C, piece:35, codetable:446]
|
65
|
+
[max_length:250, symbol:?, description:Breed Code, ifrepeating:0, datatype:CE, required:C, piece:36, codetable:447]
|
66
|
+
[max_length:80, description:Strain, ifrepeating:0, datatype:ST, required:O, piece:37]
|
67
|
+
[max_length:250, description:Production Class Code, ifrepeating:0, datatype:CE, required:O, piece:38, codetable:429]"
|
68
|
+
|
69
|
+
# PV1: PV1
|
70
|
+
@@pv1_attributes="[max_length:4, description:Set ID - PV1, ifrepeating:0, datatype:SI, required:O, piece:1]
|
71
|
+
[max_length:1, symbol:!, description:Patient Class, ifrepeating:0, datatype:IS, required:R, piece:2, codetable:4]
|
72
|
+
[max_length:80, description:Assigned Patient Location, ifrepeating:0, datatype:PL, required:O, piece:3]
|
73
|
+
[max_length:2, description:Admission Type, ifrepeating:0, datatype:IS, required:O, piece:4, codetable:7]
|
74
|
+
[max_length:250, description:Preadmit Number, ifrepeating:0, datatype:CX, required:O, piece:5]
|
75
|
+
[max_length:80, description:Prior Patient Location, ifrepeating:0, datatype:PL, required:O, piece:6]
|
76
|
+
[max_length:250, symbol:*, description:Attending Doctor, ifrepeating:1, datatype:XCN, required:O, piece:7, codetable:10]
|
77
|
+
[max_length:250, symbol:*, description:Referring Doctor, ifrepeating:1, datatype:XCN, required:O, piece:8, codetable:10]
|
78
|
+
[max_length:250, symbol:*, description:Consulting Doctor, ifrepeating:1, datatype:XCN, required:B, piece:9, codetable:10]
|
79
|
+
[max_length:3, description:Hospital Service, ifrepeating:0, datatype:IS, required:O, piece:10, codetable:69]
|
80
|
+
[max_length:80, description:Temporary Location, ifrepeating:0, datatype:PL, required:O, piece:11]
|
81
|
+
[max_length:2, description:Preadmit Test Indicator, ifrepeating:0, datatype:IS, required:O, piece:12, codetable:87]
|
82
|
+
[max_length:2, description:Re-admission Indicator, ifrepeating:0, datatype:IS, required:O, piece:13, codetable:92]
|
83
|
+
[max_length:6, description:Admit Source, ifrepeating:0, datatype:IS, required:O, piece:14, codetable:23]
|
84
|
+
[max_length:2, symbol:*, description:Ambulatory Status, ifrepeating:1, datatype:IS, required:O, piece:15, codetable:9]
|
85
|
+
[max_length:2, description:VIP Indicator, ifrepeating:0, datatype:IS, required:O, piece:16, codetable:99]
|
86
|
+
[max_length:250, symbol:*, description:Admitting Doctor, ifrepeating:1, datatype:XCN, required:O, piece:17, codetable:10]
|
87
|
+
[max_length:2, description:Patient Type, ifrepeating:0, datatype:IS, required:O, piece:18, codetable:18]
|
88
|
+
[max_length:250, description:Visit Number, ifrepeating:0, datatype:CX, required:O, piece:19]
|
89
|
+
[max_length:50, symbol:*, description:Financial Class, ifrepeating:1, datatype:FC, required:O, piece:20, codetable:64]
|
90
|
+
[max_length:2, description:Charge Price Indicator, ifrepeating:0, datatype:IS, required:O, piece:21, codetable:32]
|
91
|
+
[max_length:2, description:Courtesy Code, ifrepeating:0, datatype:IS, required:O, piece:22, codetable:45]
|
92
|
+
[max_length:2, description:Credit Rating, ifrepeating:0, datatype:IS, required:O, piece:23, codetable:46]
|
93
|
+
[max_length:2, symbol:*, description:Contract Code, ifrepeating:1, datatype:IS, required:O, piece:24, codetable:44]
|
94
|
+
[max_length:8, symbol:*, description:Contract Effective Date, ifrepeating:1, datatype:DT, required:O, piece:25]
|
95
|
+
[max_length:12, symbol:*, description:Contract Amount, ifrepeating:1, datatype:NM, required:O, piece:26]
|
96
|
+
[max_length:3, symbol:*, description:Contract Period, ifrepeating:1, datatype:NM, required:O, piece:27]
|
97
|
+
[max_length:2, description:Interest Code, ifrepeating:0, datatype:IS, required:O, piece:28, codetable:73]
|
98
|
+
[max_length:1, description:Transfer to Bad Debt Code, ifrepeating:0, datatype:IS, required:O, piece:29, codetable:110]
|
99
|
+
[max_length:8, description:Transfer to Bad Debt Date, ifrepeating:0, datatype:DT, required:O, piece:30]
|
100
|
+
[max_length:10, description:Bad Debt Agency Code, ifrepeating:0, datatype:IS, required:O, piece:31, codetable:21]
|
101
|
+
[max_length:12, description:Bad Debt Transfer Amount, ifrepeating:0, datatype:NM, required:O, piece:32]
|
102
|
+
[max_length:12, description:Bad Debt Recovery Amount, ifrepeating:0, datatype:NM, required:O, piece:33]
|
103
|
+
[max_length:1, description:Delete Account Indicator, ifrepeating:0, datatype:IS, required:O, piece:34, codetable:111]
|
104
|
+
[max_length:8, description:Delete Account Date, ifrepeating:0, datatype:DT, required:O, piece:35]
|
105
|
+
[max_length:3, description:Discharge Disposition, ifrepeating:0, datatype:IS, required:O, piece:36, codetable:112]
|
106
|
+
[max_length:25, description:Discharged to Location, ifrepeating:0, datatype:DLD, required:O, piece:37, codetable:113]
|
107
|
+
[max_length:250, description:Diet Type, ifrepeating:0, datatype:CE, required:O, piece:38, codetable:114]
|
108
|
+
[max_length:2, description:Servicing Facility, ifrepeating:0, datatype:IS, required:O, piece:39, codetable:115]
|
109
|
+
[max_length:1, description:Bed Status, ifrepeating:0, datatype:IS, required:B, piece:40, codetable:116]
|
110
|
+
[max_length:2, description:Account Status, ifrepeating:0, datatype:IS, required:O, piece:41, codetable:117]
|
111
|
+
[max_length:80, description:Pending Location, ifrepeating:0, datatype:PL, required:O, piece:42]
|
112
|
+
[max_length:80, description:Prior Temporary Location, ifrepeating:0, datatype:PL, required:O, piece:43]
|
113
|
+
[max_length:26, description:Admit Date/Time, ifrepeating:0, datatype:TS, required:O, piece:44]
|
114
|
+
[max_length:26, symbol:*, description:Discharge Date/Time, ifrepeating:1, datatype:TS, required:O, piece:45]
|
115
|
+
[max_length:12, description:Current Patient Balance, ifrepeating:0, datatype:NM, required:O, piece:46]
|
116
|
+
[max_length:12, description:Total Charges, ifrepeating:0, datatype:NM, required:O, piece:47]
|
117
|
+
[max_length:12, description:Total Adjustments, ifrepeating:0, datatype:NM, required:O, piece:48]
|
118
|
+
[max_length:12, description:Total Payments, ifrepeating:0, datatype:NM, required:O, piece:49]
|
119
|
+
[max_length:250, description:Alternate Visit ID, ifrepeating:0, datatype:CX, required:O, piece:50, codetable:203]
|
120
|
+
[max_length:1, description:Visit Indicator, ifrepeating:0, datatype:IS, required:O, piece:51, codetable:326]
|
121
|
+
[max_length:250, symbol:*, description:Other Healthcare Provider, ifrepeating:1, datatype:XCN, required:B, piece:52, codetable:10]"
|
122
|
+
|
123
|
+
# [~PD1~]: PD1
|
124
|
+
@@pd1_attributes="[max_length:2, symbol:*, description:Living Dependency, ifrepeating:1, datatype:IS, required:O, piece:1, codetable:223]
|
125
|
+
[max_length:2, description:Living Arrangement, ifrepeating:0, datatype:IS, required:O, piece:2, codetable:220]
|
126
|
+
[max_length:250, symbol:*, description:Patient Primary Facility, ifrepeating:1, datatype:XON, required:O, piece:3]
|
127
|
+
[max_length:250, symbol:*, description:Patient Primary Care Provider Name & ID No., ifrepeating:1, datatype:XCN, required:B, piece:4]
|
128
|
+
[max_length:2, description:Student Indicator, ifrepeating:0, datatype:IS, required:O, piece:5, codetable:231]
|
129
|
+
[max_length:2, description:Handicap, ifrepeating:0, datatype:IS, required:O, piece:6, codetable:295]
|
130
|
+
[max_length:2, description:Living Will Code, ifrepeating:0, datatype:IS, required:O, piece:7, codetable:315]
|
131
|
+
[max_length:2, description:Organ Donor Code, ifrepeating:0, datatype:IS, required:O, piece:8, codetable:316]
|
132
|
+
[max_length:1, description:Separate Bill, ifrepeating:0, datatype:ID, required:O, piece:9, codetable:136]
|
133
|
+
[max_length:250, symbol:*, description:Duplicate Patient, ifrepeating:1, datatype:CX, required:O, piece:10]
|
134
|
+
[max_length:250, description:Publicity Code, ifrepeating:0, datatype:CE, required:O, piece:11, codetable:215]
|
135
|
+
[max_length:1, description:Protection Indicator, ifrepeating:0, datatype:ID, required:O, piece:12, codetable:136]
|
136
|
+
[max_length:8, description:Protection Indicator Effective Date, ifrepeating:0, datatype:DT, required:O, piece:13]
|
137
|
+
[max_length:250, symbol:*, description:Place of Worship, ifrepeating:1, datatype:XON, required:O, piece:14]
|
138
|
+
[max_length:250, symbol:*, description:Advance Directive Code, ifrepeating:1, datatype:CE, required:O, piece:15, codetable:435]
|
139
|
+
[max_length:1, description:Immunization Registry Status, ifrepeating:0, datatype:IS, required:O, piece:16, codetable:441]
|
140
|
+
[max_length:8, description:Immunization Registry Status Effective Date, ifrepeating:0, datatype:DT, required:O, piece:17]
|
141
|
+
[max_length:8, description:Publicity Code Effective Date, ifrepeating:0, datatype:DT, required:O, piece:18]
|
142
|
+
[max_length:5, description:Military Branch, ifrepeating:0, datatype:IS, required:O, piece:19, codetable:140]
|
143
|
+
[max_length:2, description:Military Rank/Grade, ifrepeating:0, datatype:IS, required:O, piece:20, codetable:141]
|
144
|
+
[max_length:3, description:Military Status, ifrepeating:0, datatype:IS, required:O, piece:21, codetable:142]"
|
145
|
+
|
146
|
+
# [~{~AL1~}~]: AL1
|
147
|
+
@@al1_attributes="[max_length:250, symbol:!, description:Set ID - AL1, ifrepeating:0, datatype:CE, required:R, piece:1]
|
148
|
+
[max_length:250, description:Allergen Type Code, ifrepeating:0, datatype:CE, required:O, piece:2, codetable:127]
|
149
|
+
[max_length:250, symbol:!, description:Allergen Code/Mnemonic/Description, ifrepeating:0, datatype:CE, required:R, piece:3]
|
150
|
+
[max_length:250, description:Allergy Severity Code, ifrepeating:0, datatype:CE, required:O, piece:4, codetable:128]
|
151
|
+
[max_length:15, symbol:*, description:Allergy Reaction Code, ifrepeating:1, datatype:ST, required:O, piece:5]
|
152
|
+
[max_length:8, description:Identification Date, ifrepeating:0, datatype:DT, required:B, piece:6]"
|
153
|
+
|
154
|
+
# [~{~DG1~}~]: DG1
|
155
|
+
@@dg1_attributes="[max_length:4, symbol:!, description:Set ID - DG1, ifrepeating:0, datatype:SI, required:R, piece:1]
|
156
|
+
[max_length:2, description:Diagnosis Coding Method, ifrepeating:0, datatype:ID, required:(B) R, piece:2, codetable:53]
|
157
|
+
[max_length:250, description:Diagnosis Code - DG1, ifrepeating:0, datatype:CE, required:O, piece:3, codetable:51]
|
158
|
+
[max_length:40, description:Diagnosis Description, ifrepeating:0, datatype:ST, required:B, piece:4]
|
159
|
+
[max_length:26, description:Diagnosis Date/Time, ifrepeating:0, datatype:TS, required:O, piece:5]
|
160
|
+
[max_length:2, symbol:!, description:Diagnosis Type, ifrepeating:0, datatype:IS, required:R, piece:6, codetable:52]
|
161
|
+
[max_length:250, description:Major Diagnostic Category, ifrepeating:0, datatype:CE, required:B, piece:7, codetable:118]
|
162
|
+
[max_length:250, description:Diagnostic Related Group, ifrepeating:0, datatype:CE, required:B, piece:8, codetable:55]
|
163
|
+
[max_length:1, description:DRG Approval Indicator, ifrepeating:0, datatype:ID, required:B, piece:9, codetable:136]
|
164
|
+
[max_length:2, description:DRG Grouper Review Code, ifrepeating:0, datatype:IS, required:B, piece:10, codetable:56]
|
165
|
+
[max_length:250, description:Outlier Type, ifrepeating:0, datatype:CE, required:B, piece:11, codetable:83]
|
166
|
+
[max_length:3, description:Outlier Days, ifrepeating:0, datatype:NM, required:B, piece:12]
|
167
|
+
[max_length:12, description:Outlier Cost, ifrepeating:0, datatype:CP, required:B, piece:13]
|
168
|
+
[max_length:4, description:Grouper Version And Type, ifrepeating:0, datatype:ST, required:B, piece:14]
|
169
|
+
[max_length:2, description:Diagnosis Priority, ifrepeating:0, datatype:ID, required:O, piece:15, codetable:359]
|
170
|
+
[max_length:250, symbol:*, description:Diagnosing Clinician, ifrepeating:1, datatype:XCN, required:O, piece:16]
|
171
|
+
[max_length:3, description:Diagnosis Classification, ifrepeating:0, datatype:IS, required:O, piece:17, codetable:228]
|
172
|
+
[max_length:1, description:Confidential Indicator, ifrepeating:0, datatype:ID, required:O, piece:18, codetable:136]
|
173
|
+
[max_length:26, description:Attestation Date/Time, ifrepeating:0, datatype:TS, required:O, piece:19]"
|
174
|
+
|
175
|
+
#helper method
|
176
|
+
def lineToHash(line)
|
177
|
+
hash = line.gsub(/(\[|\])/,'').gsub('base:','base~').gsub(':',',').gsub('base~','base:').split(',').map{|it| it.strip()}.each_slice(2).to_a.to_h
|
178
|
+
return Hash[hash.map{|(k,v)| [k.to_sym,v]}]
|
179
|
+
end
|
180
|
+
|
181
|
+
# TESTS #
|
182
|
+
def setup
|
183
|
+
puts Benchmark.measure{
|
184
|
+
# pp = ProfilerParser.new(@attrs).generate()
|
185
|
+
profilers = { 'primary'=> @@pp }
|
186
|
+
@segmentGen = SegmentGenerator.new("2.4","ADT_A01", profilers)
|
187
|
+
# @msg = HL7::Message.new
|
188
|
+
# @msg << @segmentGen.init_msh()
|
189
|
+
}
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_init
|
194
|
+
assert(@segmentGen !=nil)
|
195
|
+
# puts @msg
|
196
|
+
end
|
197
|
+
|
198
|
+
# def test_addField_CE
|
199
|
+
# #PID
|
200
|
+
# line = '[max_length:250, description:Role Action Reason, ifrepeating:0, datatype:CE, required:R, piece:8]'
|
201
|
+
# row=line.gsub(/(\[|\])/,'').gsub(':',',').split(',').map{|it| it.strip()}.each_slice(2).to_a.to_h
|
202
|
+
# puts row
|
203
|
+
# fld = @segmentGen.add_field(row, @pp)
|
204
|
+
# puts fld
|
205
|
+
# end
|
206
|
+
#
|
207
|
+
# def test_segment_PD
|
208
|
+
# attrs = []
|
209
|
+
# line = '[max_length:250, symbol:*, description:Race, ifrepeating:1, datatype:CE, required:R, piece:10, codetable:5]'
|
210
|
+
# row=line.gsub(/(\[|\])/,'').gsub(':',',').split(',').map{|it| it.strip()}.each_slice(2).to_a.to_h
|
211
|
+
# p row
|
212
|
+
# attrs<<row
|
213
|
+
# p attrs
|
214
|
+
# seg = @segmentGen.generate_segment("PD",attrs)
|
215
|
+
# puts seg.to_info
|
216
|
+
# puts seg
|
217
|
+
# end
|
218
|
+
#
|
219
|
+
# def test_addField_EI
|
220
|
+
# attrs = []
|
221
|
+
# row = {'max_length'=> '60', 'symbol'=>'?', 'description'=>'Role Instance ID', 'ifrepeating'=>'0', 'datatype'=>'EI', 'required'=>'C', 'piece'=>'1'}
|
222
|
+
# attrs << row
|
223
|
+
# seg = @segmentGen.generate_segment("ROL",attrs)
|
224
|
+
# puts seg.to_info
|
225
|
+
# puts seg
|
226
|
+
# end
|
227
|
+
def test_MSH
|
228
|
+
# weight( -1 ) # the msh should always start a message
|
229
|
+
# add_field :enc_chars
|
230
|
+
# add_field :sending_app
|
231
|
+
# add_field :sending_facility
|
232
|
+
# add_field :recv_app
|
233
|
+
# add_field :recv_facility
|
234
|
+
# add_field :time do |value|
|
235
|
+
# convert_to_ts(value)
|
236
|
+
# end
|
237
|
+
# add_field :security
|
238
|
+
# add_field :message_type
|
239
|
+
# add_field :message_control_id
|
240
|
+
# add_field :processing_id
|
241
|
+
# add_field :version_id
|
242
|
+
# add_field :seq
|
243
|
+
# add_field :continue_ptr
|
244
|
+
# add_field :accept_ack_type
|
245
|
+
# add_field :app_ack_type
|
246
|
+
# add_field :country_code
|
247
|
+
# add_field :charset
|
248
|
+
# add_field :principal_language_of_message
|
249
|
+
# add_field :alternate_character_set_handling_scheme
|
250
|
+
# add_field :message_profile_identifier
|
251
|
+
# add_field :sending_responsible_org
|
252
|
+
# add_field :receiving_responsible_org
|
253
|
+
# add_field :sending_network_address
|
254
|
+
# add_field :receiving_network_address
|
255
|
+
msg = HL7::Message.new
|
256
|
+
msg << @segmentGen.init_msh
|
257
|
+
puts msg.to_hl7
|
258
|
+
assert_equal 'MSH', msg[0].e0
|
259
|
+
# 1 Field Separator 2.4:ST 1 R 0 Always populated |
|
260
|
+
# assert_equal '|', msg[0].e1
|
261
|
+
# 2 Encoding Characters 2.4:ST 4 R 0 Always populated ^~\&
|
262
|
+
assert_equal '^~\&', msg[0].e1
|
263
|
+
# 3 Sending Application 2.4:HD 180 O 0 2.4:361 Always populated <namespace ID (IS)> Table 361 has no suggested values. The field will be populated with value 'Sending App'
|
264
|
+
# assert_equal ['101','202','303','404'].include?(msg[0].e2)
|
265
|
+
# 4 Sending Facility 2.4:HD 180 O 0 2.4:362 Always populated <namespace ID (IS)> Table 362 has no suggested values. The field will be populated with value 'Sending Facility'
|
266
|
+
assert ['505','606','707','808','909','200','500'].include? msg[0].e3
|
267
|
+
# 5 Receiving Application 2.4:HD 180 O 0 2.4:361 Always populated <namespace ID (IS)> Table 361 has no suggested values. The field will be populated with value 'MARM'
|
268
|
+
assert ['101','202','303','404','PRCHCPR','PRCHCPS'].include? msg[0].e4
|
269
|
+
# 6 Receiving Facility 2.4:HD 180 O 0 2.4:362 Always populated <namespace ID (IS)> Table 362 has no suggested values. The field will be populated with value 'HL7 Generator'
|
270
|
+
assert ['505','606','707','808','909','200','500'].include? msg[0].e5
|
271
|
+
# 7 Date/Time Of Message 2.4:TS 26 R 0 Always populated Any randomly generated date/time within one year into the past. Example value: 20150824160140.761
|
272
|
+
assert msg[0].e6.include?('.')
|
273
|
+
# 8 Security 2.4:ST 40 O 0 Randomly Populated Any randomly generated positive integer with up to 3 digits. Example value: 123
|
274
|
+
# 9 Message Type 2.4:MSG 15 R 0 2.4:76 Always populated Message Type from table 76, Trigger Event from table 3 and Message Structure for table 354. Example value: ADT^A01^ADT_A01
|
275
|
+
assert_equal 'ADT^A01^ADT_A01', msg[0].e8
|
276
|
+
# 10 Message Control ID 2.4:ST 20 R 0 Always populated Any randomly generated positive integer with up to 3 digits. Example value: 331
|
277
|
+
# 11 Processing ID 2.4:PT 3 R 0 Always populated <processing ID (ID)> One of the values from table 103. Example value: P
|
278
|
+
# 12 Version ID 2.4:VID 60 R 0 2.4:104 Always populated <version ID (ID)> The field will be populated with value '2.4' from table 104
|
279
|
+
assert_equal '2.4', msg[0].e11
|
280
|
+
# 13 Sequence Number 2.4:NM 15 O 0 Randomly Populated Any randomly generated positive integer with up to 3 digits. Example value: 123
|
281
|
+
# 14 Continuation Pointer 2.4:ST 180 O 0 Randomly Populated Any randomly generated positive integer with up to 3 digits. Example value: 123
|
282
|
+
# 15 Accept Acknowledgment Type 2.4:ID 2 O 0 2.4:155 Randomly Populated One of the values from table 155. Example value: AL
|
283
|
+
# 16 Application Acknowledgment Type 2.4:ID 2 O 0 2.4:155 Randomly Populated One of the values from table 155. Example value: NE
|
284
|
+
# 17 Country Code 2.4:ID 3 O 0 2.4:399 Randomly Populated One of the values from table 399. Example value: DEU
|
285
|
+
# 18 Character Set 2.4:ID 16 O 1 2.4:211 Randomly Populated One of the values from table 211. Example value: ASCII
|
286
|
+
# 19 Principal Language Of Message 2.4:CE 250 O 0 Randomly Populated <identifier (ST)>^<text (ST)> Table 296 Primary Language has no suggested values. The field will be populated with values from the Primary Language table in the properties file. Example value: EN^English
|
287
|
+
# 20 Alternate Character Set Handling Scheme 2.4:ID 20 O 0 2.4:356 Randomly Populated One of the values from table 356. Example value: ASCII
|
288
|
+
# 21 Conformance Statement ID 2.4:ID 10 O 1 2.4:449 Randomly Populated Table 449 has no suggested values. Any randomly generated positive integer with up to 3 digits. Example value: 123
|
289
|
+
# puts msg
|
290
|
+
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_MSH_MsgStruct_Different_From_MsgType
|
294
|
+
@segmentGen = SegmentGenerator.new("2.4","ADT_A04", {'primary' => @@pp })
|
295
|
+
msg = HL7::Message.new
|
296
|
+
msg << @segmentGen.init_msh
|
297
|
+
puts msg.to_hl7
|
298
|
+
assert_equal 'MSH', msg[0].e0
|
299
|
+
# 1 Field Separator 2.4:ST 1 R 0 Always populated |
|
300
|
+
# assert_equal '|', msg[0].e1
|
301
|
+
# 2 Encoding Characters 2.4:ST 4 R 0 Always populated ^~\&
|
302
|
+
assert_equal '^~\&', msg[0].e1
|
303
|
+
# 3 Sending Application 2.4:HD 180 O 0 2.4:361 Always populated <namespace ID (IS)> Table 361 has no suggested values. The field will be populated with value 'Sending App'
|
304
|
+
# assert_equal ['101','202','303','404'].include?(msg[0].e2)
|
305
|
+
# 4 Sending Facility 2.4:HD 180 O 0 2.4:362 Always populated <namespace ID (IS)> Table 362 has no suggested values. The field will be populated with value 'Sending Facility'
|
306
|
+
assert ['505','606','707','808','909','200','500'].include? msg[0].e3
|
307
|
+
# 5 Receiving Application 2.4:HD 180 O 0 2.4:361 Always populated <namespace ID (IS)> Table 361 has no suggested values. The field will be populated with value 'MARM'
|
308
|
+
assert ['101','202','303','404','PRCHCPR','PRCHCPS'].include? msg[0].e4
|
309
|
+
# 6 Receiving Facility 2.4:HD 180 O 0 2.4:362 Always populated <namespace ID (IS)> Table 362 has no suggested values. The field will be populated with value 'HL7 Generator'
|
310
|
+
assert ['505','606','707','808','909','200','500'].include? msg[0].e5
|
311
|
+
# 7 Date/Time Of Message 2.4:TS 26 R 0 Always populated Any randomly generated date/time within one year into the past. Example value: 20150824160140.761
|
312
|
+
assert msg[0].e6.include?('.')
|
313
|
+
|
314
|
+
assert msg[0].e7 # security - msh8 optional, random 3 digit
|
315
|
+
assert msg[0].e14 # accept_ack_type - msh16 optional, codetable 155
|
316
|
+
assert msg[0].e15 # app_ack_type - msh16 optional, codetable 155
|
317
|
+
assert msg[0].e16 # country code - msh17 optional, codetable 399
|
318
|
+
assert msg[0].e17 # charset - msh18 optional, codetable 211
|
319
|
+
# assert_equal '*', msg[0].e17 # charset - msh18 optional, codetable 211
|
320
|
+
|
321
|
+
# 9 Message Type 2.4:MSG 15 R 0 2.4:76 Always populated Message Type from table 76, Trigger Event from table 3 and Message Structure for table 354. Example value: ADT^A01^ADT_A01
|
322
|
+
assert_equal 'ADT^A04^ADT_A01', msg[0].e8
|
323
|
+
end
|
324
|
+
|
325
|
+
def test_MSH_Version_24_For_Custom
|
326
|
+
ver = '2.4' # now logic to figure out base version is in the calling class
|
327
|
+
# @segmentGen = SegmentGenerator.new("vaz2.4","ADT_A01", {'primary' => @@pp })
|
328
|
+
@segmentGen = SegmentGenerator.new("2.4","ADT_A01", {'primary' => @@pp })
|
329
|
+
msg = HL7::Message.new
|
330
|
+
msg << @segmentGen.init_msh
|
331
|
+
puts msg.to_hl7
|
332
|
+
assert_equal 'MSH', msg[0].e0
|
333
|
+
|
334
|
+
# 9 Message Type 2.4:MSG 15 R 0 2.4:76 Always populated Message Type from table 76, Trigger Event from table 3 and Message Structure for table 354. Example value: ADT^A01^ADT_A01
|
335
|
+
assert_equal 'ADT^A01^ADT_A01', msg[0].e8
|
336
|
+
# 12 Version ID 2.4:VID 60 R 0 2.4:104 Always populated <version ID (ID)> The field will be populated with value '2.4' from table 104
|
337
|
+
assert_equal '2.4', msg[0].e11
|
338
|
+
end
|
339
|
+
|
340
|
+
def test_EVN
|
341
|
+
attributes = []
|
342
|
+
attributes << lineToHash('[max_length:3, description:Event Type Code, ifrepeating:0, datatype:ID, required:B, piece:1, codetable:3]')
|
343
|
+
attributes << lineToHash('[max_length:26, symbol:!, description:Recorded Date/Time, ifrepeating:0, datatype:TS, required:R, piece:2]')
|
344
|
+
attributes << lineToHash('[max_length:26, description:Date/Time Planned Event, ifrepeating:0, datatype:TS, required:O, piece:3]')
|
345
|
+
attributes << lineToHash('[max_length:3, description:Event Reason Code, ifrepeating:0, datatype:IS, required:O, piece:4, codetable:62]')
|
346
|
+
attributes << lineToHash('[max_length:250, symbol:*, description:Operator ID, ifrepeating:1, datatype:XCN, required:O, piece:5, codetable:188]')
|
347
|
+
attributes << lineToHash('[max_length:26, description:Event Occurred, ifrepeating:0, datatype:TS, required:O, piece:6]')
|
348
|
+
attributes << lineToHash('[max_length:180, description:Event Facility, ifrepeating:0, datatype:HD, required:O, piece:7]')
|
349
|
+
puts Benchmark.measure(){
|
350
|
+
puts @segmentGen.generate_segment('EVN', attributes)
|
351
|
+
}
|
352
|
+
end
|
353
|
+
|
354
|
+
def test_ADT_A01_EVN
|
355
|
+
attributes = []
|
356
|
+
@@evn_attributes.each_line do |line|
|
357
|
+
attributes << lineToHash( line)
|
358
|
+
end
|
359
|
+
msg = HL7::Message.new
|
360
|
+
msg << @segmentGen.init_msh
|
361
|
+
puts @segmentGen.generate_segment_in_context(msg, 'EVN', attributes)
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_ADT_A01_PID
|
365
|
+
attributes = []
|
366
|
+
@@pid_attributes.each_line do |line|
|
367
|
+
attributes << lineToHash( line)
|
368
|
+
end
|
369
|
+
|
370
|
+
msg = HL7::Message.new
|
371
|
+
msg << @segmentGen.init_msh
|
372
|
+
puts @segmentGen.generate_segment_in_context(msg, 'PID', attributes)
|
373
|
+
end
|
374
|
+
|
375
|
+
def test_ADT_A01_PV1
|
376
|
+
attributes = []
|
377
|
+
@@pv1_attributes.each_line do |line|
|
378
|
+
attributes << lineToHash( line)
|
379
|
+
end
|
380
|
+
|
381
|
+
msg = HL7::Message.new
|
382
|
+
msg << @segmentGen.init_msh
|
383
|
+
puts @segmentGen.generate_segment_in_context(msg, 'PV1', attributes)
|
384
|
+
end
|
385
|
+
|
386
|
+
def test_ADT_A01_PD1
|
387
|
+
attributes = []
|
388
|
+
@@pd1_attributes.each_line do |line|
|
389
|
+
attributes << lineToHash( line)
|
390
|
+
end
|
391
|
+
|
392
|
+
msg = HL7::Message.new
|
393
|
+
msg << @segmentGen.init_msh
|
394
|
+
# puts @segmentGen.generate(msg,'[~PD1~]', attributes)
|
395
|
+
puts @segmentGen.generate_segment_in_context(msg, '[~PD1~]', attributes, 1)
|
396
|
+
end
|
397
|
+
|
398
|
+
def test_ADT_A01_AL1
|
399
|
+
attributes = []
|
400
|
+
@@al1_attributes.each_line do |line|
|
401
|
+
attributes << lineToHash( line)
|
402
|
+
end
|
403
|
+
|
404
|
+
msg = HL7::Message.new
|
405
|
+
msg << @segmentGen.init_msh
|
406
|
+
puts @segmentGen.generate_segment_in_context(msg, '[~{~AL1~}~]', attributes)
|
407
|
+
end
|
408
|
+
|
409
|
+
def test_ADT_A01_DG1
|
410
|
+
attributes = []
|
411
|
+
@@dg1_attributes.each_line do |line|
|
412
|
+
attributes << lineToHash( line)
|
413
|
+
end
|
414
|
+
|
415
|
+
msg = HL7::Message.new
|
416
|
+
msg << @segmentGen.init_msh
|
417
|
+
puts @segmentGen.generate_segment_in_context(msg, '[~{~DG1~}~]', attributes)
|
418
|
+
end
|
419
|
+
|
420
|
+
def test_ADT_ALL1
|
421
|
+
attributes = []
|
422
|
+
@@pid_attributes.each_line do |line|
|
423
|
+
attributes << lineToHash( line)
|
424
|
+
end
|
425
|
+
|
426
|
+
msg = HL7::Message.new
|
427
|
+
msg << @segmentGen.init_msh
|
428
|
+
@segmentGen.generate_segment_in_context(msg, 'PID', attributes)
|
429
|
+
|
430
|
+
attributes = []
|
431
|
+
@@evn_attributes.each_line do |line|
|
432
|
+
attributes << lineToHash( line)
|
433
|
+
end
|
434
|
+
@segmentGen.generate_segment_in_context(msg, 'EVN', attributes)
|
435
|
+
|
436
|
+
attributes = []
|
437
|
+
@@pv1_attributes.each_line do |line|
|
438
|
+
attributes << lineToHash( line)
|
439
|
+
end
|
440
|
+
@segmentGen.generate_segment_in_context(msg, 'PV1', attributes)
|
441
|
+
|
442
|
+
attributes = []
|
443
|
+
@@pd1_attributes.each_line do |line|
|
444
|
+
attributes << lineToHash( line)
|
445
|
+
end
|
446
|
+
@segmentGen.generate_segment_in_context(msg, '[~PD1~]', attributes)
|
447
|
+
|
448
|
+
attributes = []
|
449
|
+
@@al1_attributes.each_line do |line|
|
450
|
+
attributes << lineToHash( line)
|
451
|
+
end
|
452
|
+
@segmentGen.generate_segment_in_context(msg, '[~{~AL1~}~]', attributes)
|
453
|
+
|
454
|
+
attributes = []
|
455
|
+
@@dg1_attributes.each_line do |line|
|
456
|
+
attributes << lineToHash( line)
|
457
|
+
end
|
458
|
+
puts @segmentGen.generate_segment_in_context(msg, '[~{~DG1~}~]', attributes)
|
459
|
+
|
460
|
+
end
|
461
|
+
|
462
|
+
def test_RCP
|
463
|
+
# <SegmentStructure name='RCP' description='Response Control Parameter'>
|
464
|
+
rcp_attributes = "[ piece:1, description:Query Priority, datatype:ID, max_length:1, required:O, ifrepeating:0, codetable:91]
|
465
|
+
[ piece:2, description:Quantity Limited Request, datatype:CQ, max_length:10, required:O, ifrepeating:0, codetable:126]
|
466
|
+
[ piece:3, description:Response Modality, datatype:CE, max_length:250, required:O, ifrepeating:0, codetable:394]
|
467
|
+
[ piece:4, description:Execution and Delivery Time, datatype:TS, symbol:?, max_length:26, required:C, ifrepeating:0]
|
468
|
+
[ piece:5, description:Modify Indicator, datatype:ID, max_length:1, required:O, ifrepeating:0, codetable:395]
|
469
|
+
[ piece:6, description:Sort-by Field, datatype:SRT, symbol:*, max_length:512, required:O, ifrepeating:1]
|
470
|
+
[ piece:7, description:Segment group inclusion, datatype:ID, symbol:*, max_length:256, ifrepeating:1]"
|
471
|
+
|
472
|
+
msg = HL7::Message.new
|
473
|
+
# msg << @segmentGen.init_msh
|
474
|
+
|
475
|
+
attributes = []
|
476
|
+
rcp_attributes.each_line do |line|
|
477
|
+
# p line
|
478
|
+
attributes << lineToHash( line)
|
479
|
+
# p attributes
|
480
|
+
end
|
481
|
+
puts @segmentGen.generate_segment_in_context(msg, '~RCP~', attributes)
|
482
|
+
|
483
|
+
end
|
484
|
+
|
485
|
+
def test_ZMH
|
486
|
+
|
487
|
+
vs_alt = @@VS.clone()
|
488
|
+
vs_alt[0][:profiles][1][:path] = "../test/test-config/schema/2.4/VAZ2.4.HL7.xml"
|
489
|
+
@attrs = {std: '2.4', version: 'VAZ2.4.HL7', event: 'ADT_A01', version_store: vs_alt}
|
490
|
+
bp = ProfileParser.new(@attrs)
|
491
|
+
|
492
|
+
profilers = { 'primary'=> bp , 'base'=> @@pp}
|
493
|
+
@segmentGen = SegmentGenerator.new("2.4","ADT_20", profilers)
|
494
|
+
|
495
|
+
zmh_attributes = "[ piece:1, description:SET ID - ZMH, datatype:base:SI, max_length:4, required:R, ifrepeating:0]
|
496
|
+
[ piece:2, description:MILITARY HISTORY TYPE, datatype:base:IS, max_length:8, required:R, ifrepeating:0, codetable:VA038]
|
497
|
+
[ piece:3, description:SERVICE INDICATOR, datatype:base:CE, max_length:80, required:R, ifrepeating:0]
|
498
|
+
[ piece:4, description:SERVICE ENTRY DATE AND SERVICE SEPARATION DATE, datatype:base:DR, max_length:53, required:R, ifrepeating:0]
|
499
|
+
[ piece:5, description:SERVICE COMPONENT, datatype:base:IS, max_length:8, required:R, ifrepeating:0, codetable:VA026]"
|
500
|
+
msg = HL7::Message.new
|
501
|
+
# msg << @segmentGen.init_msh
|
502
|
+
|
503
|
+
attributes = []
|
504
|
+
zmh_attributes.each_line do |line|
|
505
|
+
# p line
|
506
|
+
attributes << lineToHash( line)
|
507
|
+
# p attributes
|
508
|
+
end
|
509
|
+
puts @segmentGen.generate_segment_in_context(msg, 'ZMH', attributes)
|
510
|
+
end
|
511
|
+
|
512
|
+
def test_segment_is_optional_group
|
513
|
+
|
514
|
+
parsers = { 'primary'=> @@pp }
|
515
|
+
msg = HL7::Message.new
|
516
|
+
msg << @segmentGen.init_msh
|
517
|
+
segments = []
|
518
|
+
segments << "[~{~NTE~}~]"
|
519
|
+
segments << OptionalGroup.new().concat(["PID", "[~PD1~]", "[~{~NTE~}~]", OptionalGroup.new().concat(["PV1", "[~PV2~]"]), OptionalGroup.new(RepeatingGroup.new().concat(["IN1", "[~IN2~]", "[~IN3~]"])), "[~GT1~]", "[~{~AL1~}~]"])
|
520
|
+
|
521
|
+
segments.each.with_index(){ |segment, idx|
|
522
|
+
@segmentGen.generate(msg, segment, parsers, false)
|
523
|
+
}
|
524
|
+
puts msg
|
525
|
+
end
|
526
|
+
|
527
|
+
def test_segment_is_optional_group_dg1
|
528
|
+
|
529
|
+
parsers = { 'primary'=> @@pp }
|
530
|
+
msg = HL7::Message.new
|
531
|
+
msg << @segmentGen.init_msh
|
532
|
+
segments = []
|
533
|
+
segments << "[~{~NTE~}~]"
|
534
|
+
segments << OptionalGroup.new().concat(["PID", "[~PD1~]", "[~{~NTE~}~]", OptionalGroup.new().concat(["PV1", "[~PV2~]"]), OptionalGroup.new(RepeatingGroup.new().concat(["IN1", "[~IN2~]", "[~IN3~]"])), "[~GT1~]", "[~{~AL1~}~]"])
|
535
|
+
|
536
|
+
segments.each.with_index(){ |segment, idx|
|
537
|
+
@segmentGen.generate(msg, segment, parsers, false)
|
538
|
+
}
|
539
|
+
puts msg
|
540
|
+
end
|
541
|
+
|
542
|
+
def test_handle_set_id
|
543
|
+
#code table value
|
544
|
+
attributes = []
|
545
|
+
attributes << lineToHash('[max_length:3, description:Event Type Code, ifrepeating:0, datatype:ID, required:B, piece:1, codetable:3]')
|
546
|
+
attributes << lineToHash('[max_length:26, symbol:!, description:Recorded Date/Time, ifrepeating:0, datatype:TS, required:R, piece:2]')
|
547
|
+
attributes << lineToHash('[max_length:26, description:Date/Time Planned Event, ifrepeating:0, datatype:TS, required:O, piece:3]')
|
548
|
+
|
549
|
+
# set_id not set set to idx
|
550
|
+
# set_id set set set to idx
|
551
|
+
|
552
|
+
# set_id set with coded table val, don't change
|
553
|
+
set_id = "ABC"
|
554
|
+
@segmentGen.handle_set_id('EVN', attributes, nil) || set_id
|
555
|
+
assert_equal('ABC', set_id)
|
556
|
+
|
557
|
+
# set_id not set with coded table val (opt), don't change
|
558
|
+
set_id = ""
|
559
|
+
@segmentGen.handle_set_id('EVN', attributes, 5) || set_id
|
560
|
+
assert_equal('', set_id)
|
561
|
+
# set_id not set, don't set - idx = nil
|
562
|
+
set_id = ""
|
563
|
+
@segmentGen.handle_set_id('EVN', attributes, nil) || set_id
|
564
|
+
assert_equal('', set_id)
|
565
|
+
|
566
|
+
#set_id set, don't set even if idx != nil
|
567
|
+
set_id = "DFG"
|
568
|
+
@segmentGen.handle_set_id('EVN', attributes, nil) || set_id
|
569
|
+
assert_equal('DFG', set_id)
|
570
|
+
|
571
|
+
#no codetable values
|
572
|
+
attributes = []
|
573
|
+
attributes << lineToHash(' piece:1, description:SET ID - ZMH, datatype:base:SI, max_length:4, required:R, ifrepeating:0]')
|
574
|
+
attributes << lineToHash('[max_length:26, symbol:!, description:Recorded Date/Time, ifrepeating:0, datatype:TS, required:R, piece:2]')
|
575
|
+
attributes << lineToHash('[max_length:26, description:Date/Time Planned Event, ifrepeating:0, datatype:TS, required:O, piece:3]')
|
576
|
+
|
577
|
+
# set_id not set with, don't change if idx = nil
|
578
|
+
set_id = ""
|
579
|
+
set_id = @segmentGen.handle_set_id('ZMH', attributes, nil) || set_id
|
580
|
+
assert_equal('', set_id)
|
581
|
+
# set_id set, idx = nil, do not reset
|
582
|
+
set_id = "1234"
|
583
|
+
set_id = @segmentGen.handle_set_id('ZMH', attributes, nil) || set_id
|
584
|
+
assert_equal('1234', set_id)
|
585
|
+
# set_id set, idx not nil, reset
|
586
|
+
set_id = "456"
|
587
|
+
set_id = @segmentGen.handle_set_id( 'ZMH', attributes, 3) || set_id
|
588
|
+
assert_equal('3', set_id)
|
589
|
+
|
590
|
+
# set id for PID, AL1, DG1 not set, idx is nil
|
591
|
+
set_id = ""
|
592
|
+
set_id = @segmentGen.handle_set_id('PID', attributes, nil) || set_id
|
593
|
+
assert_equal('1', set_id)
|
594
|
+
# set id for PID, AL1, DG1 not set, idx not nil
|
595
|
+
set_id = ""
|
596
|
+
set_id = @segmentGen.handle_set_id('PID', attributes, 2) || set_id
|
597
|
+
assert_equal('2', set_id)
|
598
|
+
# set id for PID, AL1, DG1 set, idx not nil
|
599
|
+
set_id = "2345"
|
600
|
+
set_id = @segmentGen.handle_set_id('PID', attributes, 2) || set_id
|
601
|
+
assert_equal('2', set_id)
|
602
|
+
|
603
|
+
end
|
604
|
+
|
605
|
+
# piece => 1
|
606
|
+
# description => Set ID - AL1
|
607
|
+
# datatype => base:CE
|
608
|
+
# symbol => !
|
609
|
+
# max_length => 250
|
610
|
+
# required => R
|
611
|
+
# ifrepeating => 0
|
612
|
+
#
|
613
|
+
# [1] = Hash (7 elements)
|
614
|
+
# piece => 2
|
615
|
+
# description => Allergen Type Code
|
616
|
+
# datatype => base:CE
|
617
|
+
# max_length => 250
|
618
|
+
# required => O
|
619
|
+
# ifrepeating => 0
|
620
|
+
# codetable => base:127
|
621
|
+
#
|
622
|
+
# [2] = Hash (7 elements)
|
623
|
+
# piece => 3
|
624
|
+
# description => Allergen Code/Mnemonic/Description
|
625
|
+
# datatype => base:CE
|
626
|
+
# symbol => !
|
627
|
+
# max_length => 250
|
628
|
+
# required => R
|
629
|
+
# ifrepeating => 0
|
630
|
+
#
|
631
|
+
# piece => 4
|
632
|
+
# description => Allergy Severity Code
|
633
|
+
# datatype => base:CE
|
634
|
+
# max_length => 250
|
635
|
+
# required => O
|
636
|
+
# ifrepeating => 0
|
637
|
+
# codetable => base:128
|
638
|
+
#
|
639
|
+
# piece => 5
|
640
|
+
# description => Allergy Reaction Code
|
641
|
+
# datatype => base:ST
|
642
|
+
# symbol => +
|
643
|
+
# max_length => 15
|
644
|
+
# required => R
|
645
|
+
# ifrepeating => 1
|
646
|
+
|
647
|
+
# ~~~~~~~~~~~~
|
648
|
+
# [4] = Hash (7 elements)
|
649
|
+
# piece => 5
|
650
|
+
# description => SERVICE COMPONENT
|
651
|
+
# datatype => base:IS
|
652
|
+
# max_length => 8
|
653
|
+
# required => O
|
654
|
+
# ifrepeating => 0
|
655
|
+
# codetable => VA026
|
656
|
+
end
|