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