hippo 0.0.4

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 (203) hide show
  1. data/.gitignore +6 -0
  2. data/CHANGELOG +9 -0
  3. data/Gemfile +11 -0
  4. data/Guardfile +14 -0
  5. data/README.md +227 -0
  6. data/Rakefile +12 -0
  7. data/bin/demo_270.rb +280 -0
  8. data/bin/demo_276.rb +296 -0
  9. data/bin/demo_835.rb +170 -0
  10. data/hippo.gemspec +24 -0
  11. data/lib/hippo/exceptions.rb +8 -0
  12. data/lib/hippo/field.rb +6 -0
  13. data/lib/hippo/loop.rb +0 -0
  14. data/lib/hippo/parser.rb +92 -0
  15. data/lib/hippo/samples/835.edi +88 -0
  16. data/lib/hippo/samples/sample_835_with.rb +272 -0
  17. data/lib/hippo/samples/sample_parsed.rb +1162 -0
  18. data/lib/hippo/segments/AK1.rb +32 -0
  19. data/lib/hippo/segments/AK2.rb +31 -0
  20. data/lib/hippo/segments/AK9.rb +82 -0
  21. data/lib/hippo/segments/AMT.rb +31 -0
  22. data/lib/hippo/segments/BHT.rb +55 -0
  23. data/lib/hippo/segments/BPR.rb +175 -0
  24. data/lib/hippo/segments/CAS.rb +159 -0
  25. data/lib/hippo/segments/CL1.rb +39 -0
  26. data/lib/hippo/segments/CLM.rb +223 -0
  27. data/lib/hippo/segments/CLP.rb +119 -0
  28. data/lib/hippo/segments/CN1.rb +55 -0
  29. data/lib/hippo/segments/CR1.rb +87 -0
  30. data/lib/hippo/segments/CR2.rb +104 -0
  31. data/lib/hippo/segments/CR3.rb +47 -0
  32. data/lib/hippo/segments/CR4.rb +239 -0
  33. data/lib/hippo/segments/CR5.rb +151 -0
  34. data/lib/hippo/segments/CR6.rb +175 -0
  35. data/lib/hippo/segments/CR7.rb +33 -0
  36. data/lib/hippo/segments/CR8.rb +79 -0
  37. data/lib/hippo/segments/CRC.rb +63 -0
  38. data/lib/hippo/segments/CTP.rb +212 -0
  39. data/lib/hippo/segments/CTX.rb +105 -0
  40. data/lib/hippo/segments/CUR.rb +175 -0
  41. data/lib/hippo/segments/DMG.rb +115 -0
  42. data/lib/hippo/segments/DN1.rb +39 -0
  43. data/lib/hippo/segments/DN2.rb +55 -0
  44. data/lib/hippo/segments/DSB.rb +71 -0
  45. data/lib/hippo/segments/DTM.rb +55 -0
  46. data/lib/hippo/segments/DTP.rb +31 -0
  47. data/lib/hippo/segments/FRM.rb +47 -0
  48. data/lib/hippo/segments/GE.rb +19 -0
  49. data/lib/hippo/segments/GS.rb +52 -0
  50. data/lib/hippo/segments/HCP.rb +127 -0
  51. data/lib/hippo/segments/HI.rb +919 -0
  52. data/lib/hippo/segments/HL.rb +44 -0
  53. data/lib/hippo/segments/HSD.rb +72 -0
  54. data/lib/hippo/segments/IEA.rb +19 -0
  55. data/lib/hippo/segments/IK3.rb +40 -0
  56. data/lib/hippo/segments/IK4.rb +63 -0
  57. data/lib/hippo/segments/IK5.rb +55 -0
  58. data/lib/hippo/segments/IMM.rb +55 -0
  59. data/lib/hippo/segments/ISA.rb +95 -0
  60. data/lib/hippo/segments/K3.rb +147 -0
  61. data/lib/hippo/segments/LIN.rb +255 -0
  62. data/lib/hippo/segments/LQ.rb +23 -0
  63. data/lib/hippo/segments/LX.rb +21 -0
  64. data/lib/hippo/segments/MEA.rb +219 -0
  65. data/lib/hippo/segments/MIA.rb +199 -0
  66. data/lib/hippo/segments/MOA.rb +79 -0
  67. data/lib/hippo/segments/N1.rb +55 -0
  68. data/lib/hippo/segments/N2.rb +23 -0
  69. data/lib/hippo/segments/N3.rb +23 -0
  70. data/lib/hippo/segments/N4.rb +63 -0
  71. data/lib/hippo/segments/NM1.rb +103 -0
  72. data/lib/hippo/segments/NTE.rb +23 -0
  73. data/lib/hippo/segments/OI.rb +55 -0
  74. data/lib/hippo/segments/PAT.rb +79 -0
  75. data/lib/hippo/segments/PER.rb +79 -0
  76. data/lib/hippo/segments/PLB.rb +191 -0
  77. data/lib/hippo/segments/PRV.rb +75 -0
  78. data/lib/hippo/segments/PS1.rb +31 -0
  79. data/lib/hippo/segments/PWK.rb +116 -0
  80. data/lib/hippo/segments/QTY.rb +155 -0
  81. data/lib/hippo/segments/RDM.rb +135 -0
  82. data/lib/hippo/segments/REF.rb +83 -0
  83. data/lib/hippo/segments/SBR.rb +79 -0
  84. data/lib/hippo/segments/SE.rb +24 -0
  85. data/lib/hippo/segments/ST.rb +31 -0
  86. data/lib/hippo/segments/STC.rb +187 -0
  87. data/lib/hippo/segments/SV1.rb +267 -0
  88. data/lib/hippo/segments/SV2.rb +147 -0
  89. data/lib/hippo/segments/SV3.rb +223 -0
  90. data/lib/hippo/segments/SV4.rb +211 -0
  91. data/lib/hippo/segments/SV5.rb +123 -0
  92. data/lib/hippo/segments/SV6.rb +155 -0
  93. data/lib/hippo/segments/SV7.rb +55 -0
  94. data/lib/hippo/segments/SVC.rb +183 -0
  95. data/lib/hippo/segments/SVD.rb +116 -0
  96. data/lib/hippo/segments/TOO.rb +67 -0
  97. data/lib/hippo/segments/TRN.rb +39 -0
  98. data/lib/hippo/segments/TS2.rb +159 -0
  99. data/lib/hippo/segments/TS3.rb +199 -0
  100. data/lib/hippo/segments/UR.rb +23 -0
  101. data/lib/hippo/segments/base.rb +148 -0
  102. data/lib/hippo/segments.rb +85 -0
  103. data/lib/hippo/transaction_sets/HIPAA_276/L2000A.rb +28 -0
  104. data/lib/hippo/transaction_sets/HIPAA_276/L2000B.rb +28 -0
  105. data/lib/hippo/transaction_sets/HIPAA_276/L2000C.rb +28 -0
  106. data/lib/hippo/transaction_sets/HIPAA_276/L2000D.rb +45 -0
  107. data/lib/hippo/transaction_sets/HIPAA_276/L2000E.rb +45 -0
  108. data/lib/hippo/transaction_sets/HIPAA_276/L2100A.rb +20 -0
  109. data/lib/hippo/transaction_sets/HIPAA_276/L2100B.rb +20 -0
  110. data/lib/hippo/transaction_sets/HIPAA_276/L2100C.rb +19 -0
  111. data/lib/hippo/transaction_sets/HIPAA_276/L2100D.rb +19 -0
  112. data/lib/hippo/transaction_sets/HIPAA_276/L2100E.rb +20 -0
  113. data/lib/hippo/transaction_sets/HIPAA_276/L2200D.rb +116 -0
  114. data/lib/hippo/transaction_sets/HIPAA_276/L2200E.rb +116 -0
  115. data/lib/hippo/transaction_sets/HIPAA_276/L2210D.rb +36 -0
  116. data/lib/hippo/transaction_sets/HIPAA_276/L2210E.rb +36 -0
  117. data/lib/hippo/transaction_sets/HIPAA_276/base.rb +86 -0
  118. data/lib/hippo/transaction_sets/HIPAA_276.rb +21 -0
  119. data/lib/hippo/transaction_sets/HIPAA_277/L2000A.rb +35 -0
  120. data/lib/hippo/transaction_sets/HIPAA_277/L2000B.rb +35 -0
  121. data/lib/hippo/transaction_sets/HIPAA_277/L2000C.rb +35 -0
  122. data/lib/hippo/transaction_sets/HIPAA_277/L2000D.rb +35 -0
  123. data/lib/hippo/transaction_sets/HIPAA_277/L2000E.rb +35 -0
  124. data/lib/hippo/transaction_sets/HIPAA_277/L2100A.rb +19 -0
  125. data/lib/hippo/transaction_sets/HIPAA_277/L2100B.rb +20 -0
  126. data/lib/hippo/transaction_sets/HIPAA_277/L2100C.rb +19 -0
  127. data/lib/hippo/transaction_sets/HIPAA_277/L2100D.rb +20 -0
  128. data/lib/hippo/transaction_sets/HIPAA_277/L2100E.rb +20 -0
  129. data/lib/hippo/transaction_sets/HIPAA_277/L2200A.rb +41 -0
  130. data/lib/hippo/transaction_sets/HIPAA_277/L2200B.rb +66 -0
  131. data/lib/hippo/transaction_sets/HIPAA_277/L2200C.rb +73 -0
  132. data/lib/hippo/transaction_sets/HIPAA_277/L2200D.rb +73 -0
  133. data/lib/hippo/transaction_sets/HIPAA_277/L2200E.rb +103 -0
  134. data/lib/hippo/transaction_sets/HIPAA_277/L2220D.rb +56 -0
  135. data/lib/hippo/transaction_sets/HIPAA_277/L2220E.rb +43 -0
  136. data/lib/hippo/transaction_sets/HIPAA_277/base.rb +77 -0
  137. data/lib/hippo/transaction_sets/HIPAA_277.rb +24 -0
  138. data/lib/hippo/transaction_sets/HIPAA_835/L1000A.rb +71 -0
  139. data/lib/hippo/transaction_sets/HIPAA_835/L1000B.rb +47 -0
  140. data/lib/hippo/transaction_sets/HIPAA_835/L2000.rb +37 -0
  141. data/lib/hippo/transaction_sets/HIPAA_835/L2100.rb +182 -0
  142. data/lib/hippo/transaction_sets/HIPAA_835/L2110.rb +85 -0
  143. data/lib/hippo/transaction_sets/HIPAA_835/base.rb +112 -0
  144. data/lib/hippo/transaction_sets/HIPAA_835.rb +12 -0
  145. data/lib/hippo/transaction_sets/HIPAA_837/L1000A.rb +30 -0
  146. data/lib/hippo/transaction_sets/HIPAA_837/L1000B.rb +21 -0
  147. data/lib/hippo/transaction_sets/HIPAA_837/L2000A.rb +65 -0
  148. data/lib/hippo/transaction_sets/HIPAA_837/L2000B.rb +49 -0
  149. data/lib/hippo/transaction_sets/HIPAA_837/L2000C.rb +42 -0
  150. data/lib/hippo/transaction_sets/HIPAA_837/L2010AA.rb +57 -0
  151. data/lib/hippo/transaction_sets/HIPAA_837/L2010AB.rb +33 -0
  152. data/lib/hippo/transaction_sets/HIPAA_837/L2010AC.rb +51 -0
  153. data/lib/hippo/transaction_sets/HIPAA_837/L2010BA.rb +74 -0
  154. data/lib/hippo/transaction_sets/HIPAA_837/L2010BB.rb +48 -0
  155. data/lib/hippo/transaction_sets/HIPAA_837/L2010CA.rb +72 -0
  156. data/lib/hippo/transaction_sets/HIPAA_837/L2300.rb +510 -0
  157. data/lib/hippo/transaction_sets/HIPAA_837/L2310A.rb +26 -0
  158. data/lib/hippo/transaction_sets/HIPAA_837/L2310B.rb +37 -0
  159. data/lib/hippo/transaction_sets/HIPAA_837/L2310C.rb +52 -0
  160. data/lib/hippo/transaction_sets/HIPAA_837/L2310D.rb +27 -0
  161. data/lib/hippo/transaction_sets/HIPAA_837/L2310E.rb +34 -0
  162. data/lib/hippo/transaction_sets/HIPAA_837/L2310F.rb +34 -0
  163. data/lib/hippo/transaction_sets/HIPAA_837/L2320.rb +122 -0
  164. data/lib/hippo/transaction_sets/HIPAA_837/L2330A.rb +43 -0
  165. data/lib/hippo/transaction_sets/HIPAA_837/L2330B.rb +92 -0
  166. data/lib/hippo/transaction_sets/HIPAA_837/L2330C.rb +26 -0
  167. data/lib/hippo/transaction_sets/HIPAA_837/L2330D.rb +26 -0
  168. data/lib/hippo/transaction_sets/HIPAA_837/L2330E.rb +27 -0
  169. data/lib/hippo/transaction_sets/HIPAA_837/L2330F.rb +27 -0
  170. data/lib/hippo/transaction_sets/HIPAA_837/L2330G.rb +26 -0
  171. data/lib/hippo/transaction_sets/HIPAA_837/L2400.rb +475 -0
  172. data/lib/hippo/transaction_sets/HIPAA_837/L2410.rb +30 -0
  173. data/lib/hippo/transaction_sets/HIPAA_837/L2420A.rb +37 -0
  174. data/lib/hippo/transaction_sets/HIPAA_837/L2420B.rb +26 -0
  175. data/lib/hippo/transaction_sets/HIPAA_837/L2420C.rb +41 -0
  176. data/lib/hippo/transaction_sets/HIPAA_837/L2420D.rb +27 -0
  177. data/lib/hippo/transaction_sets/HIPAA_837/L2420E.rb +51 -0
  178. data/lib/hippo/transaction_sets/HIPAA_837/L2420F.rb +26 -0
  179. data/lib/hippo/transaction_sets/HIPAA_837/L2420G.rb +34 -0
  180. data/lib/hippo/transaction_sets/HIPAA_837/L2420H.rb +34 -0
  181. data/lib/hippo/transaction_sets/HIPAA_837/L2430.rb +44 -0
  182. data/lib/hippo/transaction_sets/HIPAA_837/L2440.rb +23 -0
  183. data/lib/hippo/transaction_sets/HIPAA_837/base.rb +81 -0
  184. data/lib/hippo/transaction_sets/HIPAA_837.rb +45 -0
  185. data/lib/hippo/transaction_sets/HIPAA_999/L2000 - AK2.rb +30 -0
  186. data/lib/hippo/transaction_sets/HIPAA_999/L2000AK2.rb +30 -0
  187. data/lib/hippo/transaction_sets/HIPAA_999/L2100 - AK2.rb +37 -0
  188. data/lib/hippo/transaction_sets/HIPAA_999/L2100AK2.rb +37 -0
  189. data/lib/hippo/transaction_sets/HIPAA_999/L2110 - AK2.rb +23 -0
  190. data/lib/hippo/transaction_sets/HIPAA_999/L2110AK2.rb +23 -0
  191. data/lib/hippo/transaction_sets/HIPAA_999/base.rb +46 -0
  192. data/lib/hippo/transaction_sets/HIPAA_999.rb +10 -0
  193. data/lib/hippo/transaction_sets/base.rb +136 -0
  194. data/lib/hippo/transaction_sets.rb +11 -0
  195. data/lib/hippo/version.rb +3 -0
  196. data/lib/hippo.rb +15 -0
  197. data/samples/835_4010.edi +1 -0
  198. data/samples/837_4010A1.edi +1 -0
  199. data/test/test_helper.rb +118 -0
  200. data/test/test_hipaa_837.rb +396 -0
  201. data/test/test_segments_base.rb +106 -0
  202. data/test/test_transaction_sets_base.rb +85 -0
  203. metadata +277 -0
@@ -0,0 +1,199 @@
1
+ module Hippo::Segments
2
+ class TS3 < Hippo::Segments::Base
3
+
4
+ segment_identifier 'TS3'
5
+
6
+ field :name => 'ReferenceIdentification',
7
+ :sequence => 1,
8
+ :datatype => :string,
9
+ :minimum => 1,
10
+ :maximum => 50,
11
+ :required => true,
12
+ :data_element_number => 127
13
+
14
+ field :name => 'FacilityCodeValue',
15
+ :sequence => 2,
16
+ :datatype => :string,
17
+ :minimum => 1,
18
+ :maximum => 2,
19
+ :required => true,
20
+ :data_element_number => 1331
21
+
22
+ field :name => 'Date',
23
+ :sequence => 3,
24
+ :datatype => :date,
25
+ :minimum => 8,
26
+ :maximum => 8,
27
+ :required => true,
28
+ :data_element_number => 373
29
+
30
+ field :name => 'Quantity',
31
+ :sequence => 4,
32
+ :datatype => :numeric,
33
+ :minimum => 1,
34
+ :maximum => 15,
35
+ :required => true,
36
+ :data_element_number => 380
37
+
38
+ field :name => 'MonetaryAmount',
39
+ :sequence => 5,
40
+ :datatype => :numeric,
41
+ :minimum => 1,
42
+ :maximum => 18,
43
+ :required => true,
44
+ :data_element_number => 782
45
+
46
+ field :name => 'MonetaryAmount',
47
+ :sequence => 6,
48
+ :datatype => :numeric,
49
+ :minimum => 1,
50
+ :maximum => 18,
51
+ :required => false,
52
+ :data_element_number => 782
53
+
54
+ field :name => 'MonetaryAmount',
55
+ :sequence => 7,
56
+ :datatype => :numeric,
57
+ :minimum => 1,
58
+ :maximum => 18,
59
+ :required => false,
60
+ :data_element_number => 782
61
+
62
+ field :name => 'MonetaryAmount',
63
+ :sequence => 8,
64
+ :datatype => :numeric,
65
+ :minimum => 1,
66
+ :maximum => 18,
67
+ :required => false,
68
+ :data_element_number => 782
69
+
70
+ field :name => 'MonetaryAmount',
71
+ :sequence => 9,
72
+ :datatype => :numeric,
73
+ :minimum => 1,
74
+ :maximum => 18,
75
+ :required => false,
76
+ :data_element_number => 782
77
+
78
+ field :name => 'MonetaryAmount',
79
+ :sequence => 10,
80
+ :datatype => :numeric,
81
+ :minimum => 1,
82
+ :maximum => 18,
83
+ :required => false,
84
+ :data_element_number => 782
85
+
86
+ field :name => 'MonetaryAmount',
87
+ :sequence => 11,
88
+ :datatype => :numeric,
89
+ :minimum => 1,
90
+ :maximum => 18,
91
+ :required => false,
92
+ :data_element_number => 782
93
+
94
+ field :name => 'MonetaryAmount',
95
+ :sequence => 12,
96
+ :datatype => :numeric,
97
+ :minimum => 1,
98
+ :maximum => 18,
99
+ :required => false,
100
+ :data_element_number => 782
101
+
102
+ field :name => 'MonetaryAmount',
103
+ :sequence => 13,
104
+ :datatype => :numeric,
105
+ :minimum => 1,
106
+ :maximum => 18,
107
+ :required => false,
108
+ :data_element_number => 782
109
+
110
+ field :name => 'MonetaryAmount',
111
+ :sequence => 14,
112
+ :datatype => :numeric,
113
+ :minimum => 1,
114
+ :maximum => 18,
115
+ :required => false,
116
+ :data_element_number => 782
117
+
118
+ field :name => 'MonetaryAmount',
119
+ :sequence => 15,
120
+ :datatype => :numeric,
121
+ :minimum => 1,
122
+ :maximum => 18,
123
+ :required => false,
124
+ :data_element_number => 782
125
+
126
+ field :name => 'MonetaryAmount',
127
+ :sequence => 16,
128
+ :datatype => :numeric,
129
+ :minimum => 1,
130
+ :maximum => 18,
131
+ :required => false,
132
+ :data_element_number => 782
133
+
134
+ field :name => 'MonetaryAmount',
135
+ :sequence => 17,
136
+ :datatype => :numeric,
137
+ :minimum => 1,
138
+ :maximum => 18,
139
+ :required => false,
140
+ :data_element_number => 782
141
+
142
+ field :name => 'MonetaryAmount',
143
+ :sequence => 18,
144
+ :datatype => :numeric,
145
+ :minimum => 1,
146
+ :maximum => 18,
147
+ :required => false,
148
+ :data_element_number => 782
149
+
150
+ field :name => 'MonetaryAmount',
151
+ :sequence => 19,
152
+ :datatype => :numeric,
153
+ :minimum => 1,
154
+ :maximum => 18,
155
+ :required => false,
156
+ :data_element_number => 782
157
+
158
+ field :name => 'MonetaryAmount',
159
+ :sequence => 20,
160
+ :datatype => :numeric,
161
+ :minimum => 1,
162
+ :maximum => 18,
163
+ :required => false,
164
+ :data_element_number => 782
165
+
166
+ field :name => 'MonetaryAmount',
167
+ :sequence => 21,
168
+ :datatype => :numeric,
169
+ :minimum => 1,
170
+ :maximum => 18,
171
+ :required => false,
172
+ :data_element_number => 782
173
+
174
+ field :name => 'MonetaryAmount',
175
+ :sequence => 22,
176
+ :datatype => :numeric,
177
+ :minimum => 1,
178
+ :maximum => 18,
179
+ :required => false,
180
+ :data_element_number => 782
181
+
182
+ field :name => 'Quantity',
183
+ :sequence => 23,
184
+ :datatype => :numeric,
185
+ :minimum => 1,
186
+ :maximum => 15,
187
+ :required => false,
188
+ :data_element_number => 380
189
+
190
+ field :name => 'MonetaryAmount',
191
+ :sequence => 24,
192
+ :datatype => :numeric,
193
+ :minimum => 1,
194
+ :maximum => 18,
195
+ :required => false,
196
+ :data_element_number => 782
197
+
198
+ end
199
+ end
@@ -0,0 +1,23 @@
1
+ module Hippo::Segments
2
+ class UR < Hippo::Segments::Base
3
+
4
+ segment_identifier 'UR'
5
+
6
+ field :name => 'ApprovalCode',
7
+ :sequence => 1,
8
+ :datatype => :list,
9
+ :minimum => 1,
10
+ :maximum => 1,
11
+ :required => true,
12
+ :data_element_number => 1318
13
+
14
+ field :name => 'Quantity',
15
+ :sequence => 2,
16
+ :datatype => :numeric,
17
+ :minimum => 1,
18
+ :maximum => 15,
19
+ :required => false,
20
+ :data_element_number => 380
21
+
22
+ end
23
+ end
@@ -0,0 +1,148 @@
1
+ module Hippo::Segments
2
+ class Base
3
+ class << self
4
+ attr_accessor :fields, :identifier, :fixed_width
5
+
6
+ def fields
7
+ @fields ||= []
8
+ end
9
+
10
+ def identifier
11
+ @identifier ||= ''
12
+ end
13
+
14
+ def field(field)
15
+ f = Hippo::Field.new
16
+ f.sequence = fields.length + 1
17
+ f.name = field[:name]
18
+ f.datatype = field[:datatype]
19
+ f.minimum = field[:minimum]
20
+ f.maximum = field[:maximum]
21
+ f.options = field[:options]
22
+ f.restrictions = field[:restrictions]
23
+ f.separator = field[:separator] || @default_separator || Hippo::FieldSeparator
24
+
25
+ if @composite_block
26
+ f.composite = true
27
+ f.composite_sequence = fields.length
28
+ f.sequence = fields.last.length + 1
29
+ fields.last << f
30
+ else
31
+ fields << f
32
+ end
33
+ end
34
+
35
+ def composite_field(field_name)
36
+ @composite_block = true
37
+ @default_separator = Hippo::CompositeSeparator
38
+ fields << []
39
+ yield
40
+ @default_separator = Hippo::FieldSeparator
41
+ @composite_block = false
42
+ end
43
+
44
+ def segment_identifier(id)
45
+ @identifier = id
46
+ end
47
+
48
+ def segment_fixed_width
49
+ @fixed_width = true
50
+ end
51
+ end
52
+
53
+ attr_accessor :values, :parent
54
+
55
+ # make totaling segment counts easier...
56
+ def segment_count
57
+ 1
58
+ end
59
+
60
+ def initialize(options = {})
61
+ @parent = options.delete(:parent)
62
+ end
63
+
64
+ def values
65
+ @values ||= {}
66
+ end
67
+
68
+ def get_field_name(text)
69
+ text.to_s.gsub(' ','').gsub('=','')
70
+ end
71
+
72
+ def get_field(field)
73
+ if field.class == Numeric || field =~ /\A#{self.class.identifier}(?:(\d+)(?:_(\d+)){0,1})\z/
74
+ self.class.fields[$1.to_i - 1]
75
+ else
76
+ fields = self.class.fields.flatten.select{|f| f.name == field.gsub(/_\d{1,2}\z/,'')}
77
+
78
+ if field =~ /_(\d{1,2})\z/
79
+ fields[$1.to_i - 1]
80
+ else
81
+ fields.first
82
+ end
83
+ end
84
+ end
85
+
86
+ def to_s
87
+ output = self.class.identifier + Hippo::FieldSeparator
88
+
89
+ self.class.fields.each_with_index do |field, index|
90
+ if field.class == Array # this is a composite field
91
+ field.each do |comp_field|
92
+ field_value = if values[comp_field.composite_sequence]
93
+ # some values exist for this composite field
94
+ values[comp_field.composite_sequence][comp_field.sequence].to_s
95
+ else
96
+ # no values exist for the entire composite field
97
+ ''
98
+ end
99
+ field_value = field_value.ljust(comp_field.maximum) if self.class.fixed_width
100
+
101
+ output += field_value + comp_field.separator
102
+ end
103
+
104
+ output += Hippo::FieldSeparator
105
+ else # standard field
106
+ field_value = values[field.sequence].to_s
107
+ field_value = field_value.ljust(field.maximum) if self.class.fixed_width
108
+
109
+ output += field_value + field.separator
110
+ end
111
+ end
112
+
113
+ # remove extra field separators that aren't needed
114
+ unless self.class.identifier == 'ISA'
115
+ output = output.gsub(/:{2,}\*/,'*').gsub(/:\*/,'*')
116
+ end
117
+
118
+ output += Hippo::SegmentSeparator
119
+ output = output.gsub(/\*+~/,'~')
120
+ end
121
+
122
+
123
+ def identifier
124
+ self.class.identifier
125
+ end
126
+
127
+ def method_missing(method_name, *args)
128
+ values
129
+
130
+ field = get_field(get_field_name(method_name.to_s))
131
+
132
+ if field.nil? || field.class == Array
133
+ raise Hippo::Exceptions::InvalidField.new("Invalid field '#{method_name.to_s}' specified.")
134
+ end
135
+
136
+ if method_name.to_s =~ /=\z/
137
+ if field.composite
138
+ self.values[field.composite_sequence] ||= {}
139
+ self.values[field.composite_sequence][field.sequence] = args[0]
140
+ else
141
+ self.values[field.sequence] = args[0]
142
+ end
143
+ else
144
+ self.values[field.sequence]
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,85 @@
1
+ module Hippo
2
+ module Segments
3
+
4
+ autoload :Base, 'hippo/segments/base'
5
+ autoload :AK1, 'hippo/segments/AK1'
6
+ autoload :AK2, 'hippo/segments/AK2'
7
+ autoload :AK9, 'hippo/segments/AK9'
8
+ autoload :AMT, 'hippo/segments/AMT'
9
+ autoload :BHT, 'hippo/segments/BHT'
10
+ autoload :BPR, 'hippo/segments/BPR'
11
+ autoload :CAS, 'hippo/segments/CAS'
12
+ autoload :CL1, 'hippo/segments/CL1'
13
+ autoload :CLM, 'hippo/segments/CLM'
14
+ autoload :CLP, 'hippo/segments/CLP'
15
+ autoload :CN1, 'hippo/segments/CN1'
16
+ autoload :CR1, 'hippo/segments/CR1'
17
+ autoload :CR2, 'hippo/segments/CR2'
18
+ autoload :CR3, 'hippo/segments/CR3'
19
+ autoload :CR4, 'hippo/segments/CR4'
20
+ autoload :CR5, 'hippo/segments/CR5'
21
+ autoload :CR6, 'hippo/segments/CR6'
22
+ autoload :CR7, 'hippo/segments/CR7'
23
+ autoload :CR8, 'hippo/segments/CR8'
24
+ autoload :CRC, 'hippo/segments/CRC'
25
+ autoload :CTP, 'hippo/segments/CTP'
26
+ autoload :CTX, 'hippo/segments/CTX'
27
+ autoload :CUR, 'hippo/segments/CUR'
28
+ autoload :DMG, 'hippo/segments/DMG'
29
+ autoload :DN1, 'hippo/segments/DN1'
30
+ autoload :DN2, 'hippo/segments/DN2'
31
+ autoload :DSB, 'hippo/segments/DSB'
32
+ autoload :DTM, 'hippo/segments/DTM'
33
+ autoload :DTP, 'hippo/segments/DTP'
34
+ autoload :FRM, 'hippo/segments/FRM'
35
+ autoload :HCP, 'hippo/segments/HCP'
36
+ autoload :HI, 'hippo/segments/HI'
37
+ autoload :HL, 'hippo/segments/HL'
38
+ autoload :HSD, 'hippo/segments/HSD'
39
+ autoload :IK3, 'hippo/segments/IK3'
40
+ autoload :IK4, 'hippo/segments/IK4'
41
+ autoload :IK5, 'hippo/segments/IK5'
42
+ autoload :IMM, 'hippo/segments/IMM'
43
+ autoload :K3, 'hippo/segments/K3'
44
+ autoload :LIN, 'hippo/segments/LIN'
45
+ autoload :LQ, 'hippo/segments/LQ'
46
+ autoload :LX, 'hippo/segments/LX'
47
+ autoload :MEA, 'hippo/segments/MEA'
48
+ autoload :MIA, 'hippo/segments/MIA'
49
+ autoload :MOA, 'hippo/segments/MOA'
50
+ autoload :N1, 'hippo/segments/N1'
51
+ autoload :N2, 'hippo/segments/N2'
52
+ autoload :N3, 'hippo/segments/N3'
53
+ autoload :N4, 'hippo/segments/N4'
54
+ autoload :NM1, 'hippo/segments/NM1'
55
+ autoload :NTE, 'hippo/segments/NTE'
56
+ autoload :OI, 'hippo/segments/OI'
57
+ autoload :PAT, 'hippo/segments/PAT'
58
+ autoload :PER, 'hippo/segments/PER'
59
+ autoload :PLB, 'hippo/segments/PLB'
60
+ autoload :PRV, 'hippo/segments/PRV'
61
+ autoload :PS1, 'hippo/segments/PS1'
62
+ autoload :PWK, 'hippo/segments/PWK'
63
+ autoload :QTY, 'hippo/segments/QTY'
64
+ autoload :RDM, 'hippo/segments/RDM'
65
+ autoload :REF, 'hippo/segments/REF'
66
+ autoload :SBR, 'hippo/segments/SBR'
67
+ autoload :SE, 'hippo/segments/SE'
68
+ autoload :ST, 'hippo/segments/ST'
69
+ autoload :STC, 'hippo/segments/STC'
70
+ autoload :SV1, 'hippo/segments/SV1'
71
+ autoload :SV2, 'hippo/segments/SV2'
72
+ autoload :SV3, 'hippo/segments/SV3'
73
+ autoload :SV4, 'hippo/segments/SV4'
74
+ autoload :SV5, 'hippo/segments/SV5'
75
+ autoload :SV6, 'hippo/segments/SV6'
76
+ autoload :SV7, 'hippo/segments/SV7'
77
+ autoload :SVC, 'hippo/segments/SVC'
78
+ autoload :SVD, 'hippo/segments/SVD'
79
+ autoload :TOO, 'hippo/segments/TOO'
80
+ autoload :TRN, 'hippo/segments/TRN'
81
+ autoload :TS2, 'hippo/segments/TS2'
82
+ autoload :TS3, 'hippo/segments/TS3'
83
+ autoload :UR, 'hippo/segments/UR'
84
+ end
85
+ end
@@ -0,0 +1,28 @@
1
+ module Hippo::TransactionSets
2
+ module HIPAA_276
3
+
4
+ class L2000A < Hippo::TransactionSets::Base
5
+ loop_name 'L2000A' #Information Source Level
6
+
7
+ #Information Source Level
8
+ segment Hippo::Segments::HL,
9
+ :name => 'Information Source Level',
10
+ :minimum => 1,
11
+ :maximum => 1,
12
+ :position => 100,
13
+ :defaults => {
14
+ 'HL03' => '20',
15
+ 'HL04' => '1'
16
+ }
17
+
18
+ #Payer Name
19
+ loop Hippo::TransactionSets::HIPAA_276::L2100A,
20
+ :name => 'Payer Name',
21
+ :identified_by => {'NM1.NM101' => 'PR'},
22
+ :minimum => 1,
23
+ :maximum => 1,
24
+ :position => 500
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Hippo::TransactionSets
2
+ module HIPAA_276
3
+
4
+ class L2000B < Hippo::TransactionSets::Base
5
+ loop_name 'L2000B' #Information Receiver Level
6
+
7
+ #Information Receiver Level
8
+ segment Hippo::Segments::HL,
9
+ :name => 'Information Receiver Level',
10
+ :minimum => 1,
11
+ :maximum => 1,
12
+ :position => 100,
13
+ :defaults => {
14
+ 'HL03' => '21',
15
+ 'HL04' => '1'
16
+ }
17
+
18
+ #Information Receiver Name
19
+ loop Hippo::TransactionSets::HIPAA_276::L2100B,
20
+ :name => 'Information Receiver Name',
21
+ :identified_by => {'NM1.NM101' => '41'},
22
+ :minimum => 1,
23
+ :maximum => 1,
24
+ :position => 500
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Hippo::TransactionSets
2
+ module HIPAA_276
3
+
4
+ class L2000C < Hippo::TransactionSets::Base
5
+ loop_name 'L2000C' #Service Provider Level
6
+
7
+ #Service Provider Level
8
+ segment Hippo::Segments::HL,
9
+ :name => 'Service Provider Level',
10
+ :minimum => 1,
11
+ :maximum => 1,
12
+ :position => 100,
13
+ :defaults => {
14
+ 'HL03' => '19',
15
+ 'HL04' => '1'
16
+ }
17
+
18
+ #Provider Name
19
+ loop Hippo::TransactionSets::HIPAA_276::L2100C,
20
+ :name => 'Provider Name',
21
+ :identified_by => {'NM1.NM101' => '1P'},
22
+ :minimum => 1,
23
+ :maximum => 2,
24
+ :position => 500
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,45 @@
1
+ module Hippo::TransactionSets
2
+ module HIPAA_276
3
+
4
+ class L2000D < Hippo::TransactionSets::Base
5
+ loop_name 'L2000D' #Subscriber Level
6
+
7
+ #Subscriber Level
8
+ segment Hippo::Segments::HL,
9
+ :name => 'Subscriber Level',
10
+ :minimum => 1,
11
+ :maximum => 1,
12
+ :position => 100,
13
+ :defaults => {
14
+ 'HL03' => '22'
15
+ }
16
+
17
+ #Subscriber Demographic Information
18
+ segment Hippo::Segments::DMG,
19
+ :name => 'Subscriber Demographic Information',
20
+ :minimum => 0,
21
+ :maximum => 1,
22
+ :position => 400,
23
+ :defaults => {
24
+ 'DMG01' => 'D8'
25
+ }
26
+
27
+ #Subscriber Name
28
+ loop Hippo::TransactionSets::HIPAA_276::L2100D,
29
+ :name => 'Subscriber Name',
30
+ :identified_by => {'NM1.NM101' => 'IL'},
31
+ :minimum => 1,
32
+ :maximum => 1,
33
+ :position => 500
34
+
35
+ #Claim Status Tracking Number
36
+ loop Hippo::TransactionSets::HIPAA_276::L2200D,
37
+ :name => 'Claim Status Tracking Number',
38
+ :identified_by => {'TRN.TRN01' => '1'},
39
+ :minimum => 0,
40
+ :maximum => nil,
41
+ :position => 900
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,45 @@
1
+ module Hippo::TransactionSets
2
+ module HIPAA_276
3
+
4
+ class L2000E < Hippo::TransactionSets::Base
5
+ loop_name 'L2000E' #Dependent Level
6
+
7
+ #Dependent Level
8
+ segment Hippo::Segments::HL,
9
+ :name => 'Dependent Level',
10
+ :minimum => 0,
11
+ :maximum => 1,
12
+ :position => 100,
13
+ :defaults => {
14
+ 'HL03' => '23'
15
+ }
16
+
17
+ #Dependent Demographic Information
18
+ segment Hippo::Segments::DMG,
19
+ :name => 'Dependent Demographic Information',
20
+ :minimum => 1,
21
+ :maximum => 1,
22
+ :position => 400,
23
+ :defaults => {
24
+ 'DMG01' => 'D8'
25
+ }
26
+
27
+ #Dependent Name
28
+ loop Hippo::TransactionSets::HIPAA_276::L2100E,
29
+ :name => 'Dependent Name',
30
+ :identified_by => {'NM1.NM101' => 'QC'},
31
+ :minimum => 1,
32
+ :maximum => 1,
33
+ :position => 500
34
+
35
+ #Claim Status Tracking Number
36
+ loop Hippo::TransactionSets::HIPAA_276::L2200E,
37
+ :name => 'Claim Status Tracking Number',
38
+ :identified_by => {'TRN.TRN01' => '1'},
39
+ :minimum => 1,
40
+ :maximum => nil,
41
+ :position => 900
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,20 @@
1
+ module Hippo::TransactionSets
2
+ module HIPAA_276
3
+
4
+ class L2100A < Hippo::TransactionSets::Base
5
+ loop_name 'L2100A' #Payer Name
6
+
7
+ #Payer Name
8
+ segment Hippo::Segments::NM1,
9
+ :name => 'Payer Name',
10
+ :minimum => 1,
11
+ :maximum => 1,
12
+ :position => 500,
13
+ :defaults => {
14
+ 'NM101' => 'PR',
15
+ 'NM102' => '2'
16
+ }
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Hippo::TransactionSets
2
+ module HIPAA_276
3
+
4
+ class L2100B < Hippo::TransactionSets::Base
5
+ loop_name 'L2100B' #Information Receiver Name
6
+
7
+ #Information Receiver Name
8
+ segment Hippo::Segments::NM1,
9
+ :name => 'Information Receiver Name',
10
+ :minimum => 1,
11
+ :maximum => 1,
12
+ :position => 500,
13
+ :defaults => {
14
+ 'NM101' => '41',
15
+ 'NM108' => '46'
16
+ }
17
+
18
+ end
19
+ end
20
+ end