ez7gen 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/bin/ez7gen +6 -0
  3. data/lib/ez7gen.rb +23 -0
  4. data/lib/ez7gen/config/schema/2.4/2.4.HL7.xml +13904 -0
  5. data/lib/ez7gen/config/schema/2.4/VAZ2.4.HL7.xml +3085 -0
  6. data/lib/ez7gen/config/schema/2.4/added/coded-tables.xml +730 -0
  7. data/lib/ez7gen/config/schema/2.4/rules/2.4.HL7.yml +4 -0
  8. data/lib/ez7gen/config/schema/2.4/rules/VAZ2.4.HL7.yml +6 -0
  9. data/lib/ez7gen/config/schema/2.5/2.5.HL7.xml +10008 -0
  10. data/lib/ez7gen/config/schema/2.5/VAZ2.5.HL7.xml +7 -0
  11. data/lib/ez7gen/config/schema/2.5/added/coded-tables.xml +549 -0
  12. data/lib/ez7gen/config/schema/readme.txt +0 -0
  13. data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_m01 20151201.xml +416 -0
  14. data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_y01.xml +416 -0
  15. data/lib/ez7gen/config/templates/2.4/eiv-ec-MFN_X01_reg request 20160126.xml +659 -0
  16. data/lib/ez7gen/config/templates/2.4/examples/ADT_A60.txt +69 -0
  17. data/lib/ez7gen/config/templates/2.4/examples/eiv table update-mfn_m01 20151201.txt +21 -0
  18. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_dss_units-query_qbp_q13-qbp_q13.txt +26 -0
  19. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.txt +26 -0
  20. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_patient eligibility_response-rsp_k11-080714.txt +44 -0
  21. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.txt +21 -0
  22. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11.txt +42 -0
  23. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13.txt +49 -0
  24. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.txt +31 -0
  25. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.txt +21 -0
  26. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_esc_procedures_response_rtb_k13-rtb_k13.txt +40 -0
  27. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.txt +21 -0
  28. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.txt +21 -0
  29. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patinet_problems_response_rsp_k11-rsp_k11.txt +33 -0
  30. data/lib/ez7gen/config/templates/2.4/examples/orur01rvbecv2.txt +31 -0
  31. data/lib/ez7gen/config/templates/2.4/examples/sqwm vitals-oru_ro1.txt +52 -0
  32. data/lib/ez7gen/config/templates/2.4/examples/vista sqwm-adt_a60.txt +40 -0
  33. data/lib/ez7gen/config/templates/2.4/mhvsm_dss_units_query_qbp_q13-qbp_q13.xml +312 -0
  34. data/lib/ez7gen/config/templates/2.4/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.xml +314 -0
  35. data/lib/ez7gen/config/templates/2.4/mhvsm_patient eligibility_response-rsp_k11-080714.xml +640 -0
  36. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.xml +284 -0
  37. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11-rsp_k11.xml +563 -0
  38. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13-rtb_k13.xml +365 -0
  39. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.xml +2172 -0
  40. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.xml +269 -0
  41. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_procedures_response_rtb_k13-rtb_k13-rtb_k13.xml +354 -0
  42. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.xml +284 -0
  43. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.xml +282 -0
  44. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_response_rsp_k11-rsp_k11-rsp_k11.xml +565 -0
  45. data/lib/ez7gen/config/templates/2.4/orur01rvbecv2.xml +1529 -0
  46. data/lib/ez7gen/config/templates/2.4/sqwm vitals-oru_r01.xml +2975 -0
  47. data/lib/ez7gen/config/templates/2.4/vista sqwm-adt_a60.xml +1360 -0
  48. data/lib/ez7gen/message_factory.rb +142 -0
  49. data/lib/ez7gen/msg_error_handler.rb +33 -0
  50. data/lib/ez7gen/profile_parser.rb +321 -0
  51. data/lib/ez7gen/resources/properties-with-comments.yml +51 -0
  52. data/lib/ez7gen/resources/properties.yml +325 -0
  53. data/lib/ez7gen/service/2.4/dynamic_field_generator.rb +45 -0
  54. data/lib/ez7gen/service/2.4/field_generator.rb +1586 -0
  55. data/lib/ez7gen/service/2.5/field_generator.rb +75 -0
  56. data/lib/ez7gen/service/base_field_generator.rb +451 -0
  57. data/lib/ez7gen/service/segment_generator.rb +218 -0
  58. data/lib/ez7gen/service/segment_picker.rb +147 -0
  59. data/lib/ez7gen/service/template_generator.rb +213 -0
  60. data/lib/ez7gen/service/type_aware_field_generator.rb +1583 -0
  61. data/lib/ez7gen/service/utils.rb +75 -0
  62. data/lib/ez7gen/structure_parser.rb +331 -0
  63. data/lib/ez7gen/version.rb +38 -0
  64. data/test/Additional Tables with values_v1.1.txt +1653 -0
  65. data/test/added_shema_test.rb +143 -0
  66. data/test/app-tmp.rb +225 -0
  67. data/test/at.txt +1 -0
  68. data/test/backburner.zip +0 -0
  69. data/test/codes.txt +262 -0
  70. data/test/codes1.txt +1240 -0
  71. data/test/data_types_exploration_test.rb +213 -0
  72. data/test/dynamic_field_generated_test.rb +292 -0
  73. data/test/message_factory_24_custom_test.rb +648 -0
  74. data/test/message_factory_25_test.rb +50 -0
  75. data/test/message_factory_adm_test.rb +558 -0
  76. data/test/message_factory_gen_test.rb +63 -0
  77. data/test/message_factory_lab_test.rb +107 -0
  78. data/test/message_factory_pharm_test.rb +121 -0
  79. data/test/message_factory_template_24_test.rb +730 -0
  80. data/test/message_factory_test.rb +220 -0
  81. data/test/msg_error_handler_test.rb +59 -0
  82. data/test/profile_parser_test.rb +542 -0
  83. data/test/quick_run.rb +880 -0
  84. data/test/segment_generator_test.rb +656 -0
  85. data/test/segment_picker_test.rb +279 -0
  86. data/test/structrure_parser_test.rb +355 -0
  87. data/test/template_generator_test.rb +164 -0
  88. data/test/type_aware_field_generator_test.rb +582 -0
  89. data/test/utils_test.rb +97 -0
  90. 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