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