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
data/bin/demo_276.rb ADDED
@@ -0,0 +1,296 @@
1
+ require './lib/hippo.rb'
2
+ require 'pp'
3
+
4
+ class Demo276
5
+ def self.run
6
+ ts = Hippo::TransactionSets::HIPAA_276::Base.new
7
+
8
+ ts.ST do |seg|
9
+ seg.TransactionSetIdentifierCode = rand(10 * 100)
10
+ seg.TransactionSetControlNumber = rand(10 * 100)
11
+ end
12
+
13
+ ts.BHT do |seg|
14
+ seg.HierarchicalStructureCode = '0001'
15
+ seg.TransactionSetPurposeCode = '00'
16
+ seg.ReferenceIdentification = ''
17
+ seg.Date = ''
18
+ seg.Time = ''
19
+ seg.TransactionTypeCode = ''
20
+ end
21
+
22
+ ts.L2000A do |loop|
23
+ loop.HL do |seg|
24
+ seg.HierarchicalIdNumber = ''
25
+ seg.HierarchicalParentIdNumber = ''
26
+ seg.HierarchicalLevelCode = ''
27
+ seg.HierarchicalChildCode = ''
28
+ end
29
+ loop.L2100A do |sub_loop|
30
+ sub_loop.NM1 do |seg|
31
+ seg.EntityIdentifierCode1 = ''
32
+ seg.EntityTypeQualifier = ''
33
+ seg.NameLastOrOrganizationName = ''
34
+ seg.NameFirst = ''
35
+ end
36
+ sub_loop.PER do |seg|
37
+ seg.ContactFunctionCode = ''
38
+ seg.Name = ''
39
+ seg.CommunicationNumberQualifier1 = ''
40
+ seg.CommunicationNumber1 = ''
41
+ seg.CommunicationNumberQualifier2 = ''
42
+ seg.CommunicationNumber2 = ''
43
+ seg.CommunicationNumberQualifier3 = ''
44
+ seg.CommunicationNumber3 = ''
45
+ seg.ContactInquiryReference = ''
46
+ end
47
+ end
48
+ end
49
+
50
+ ts.L2000B do |loop|
51
+ loop.HL do |seg|
52
+ seg.HierarchicalIdNumber = ''
53
+ seg.HierarchicalParentIdNumber = ''
54
+ seg.HierarchicalLevelCode = ''
55
+ seg.HierarchicalChildCode = ''
56
+ end
57
+ loop.L2100B do |sub_loop|
58
+ sub_loop.NM1 do |seg|
59
+ seg.EntityIdentifierCode1 = ''
60
+ seg.EntityTypeQualifier = ''
61
+ seg.NameLastOrOrganizationName = ''
62
+ seg.NameFirst = ''
63
+ end
64
+ end
65
+ end
66
+
67
+ ts.L2000C do |loop|
68
+ loop.HL do |seg|
69
+ seg.HierarchicalIdNumber = ''
70
+ seg.HierarchicalParentIdNumber = ''
71
+ seg.HierarchicalLevelCode = ''
72
+ seg.HierarchicalChildCode = ''
73
+ end
74
+ loop.L2100C do |sub_loop|
75
+ sub_loop.NM1 do |seg|
76
+ seg.EntityIdentifierCode1 = ''
77
+ seg.EntityTypeQualifier = ''
78
+ seg.NameLastOrOrganizationName = ''
79
+ seg.NameFirst = ''
80
+ end
81
+ end
82
+ end
83
+
84
+ ts.L2000D do |loop|
85
+ loop.HL do |seg|
86
+ seg.HierarchicalIdNumber = ''
87
+ seg.HierarchicalParentIdNumber = ''
88
+ seg.HierarchicalLevelCode = ''
89
+ seg.HierarchicalChildCode = ''
90
+ end
91
+ loop.DMG do |seg|
92
+ seg.DateTimePeriodFormatQualifier = ''
93
+ seg.DateTimePeriod = ''
94
+ seg.GenderCode = ''
95
+ seg.MaritalStatusCode = ''
96
+ seg.CompositeRaceOrEthnicityInformation = ''
97
+ seg.CitizenshipStatusCode = ''
98
+ seg.CountryCode = ''
99
+ seg.BasisOfVerificationCode = ''
100
+ seg.Quantity = ''
101
+ seg.CodeListQualifierCode = ''
102
+ seg.IndustryCode = ''
103
+ end
104
+ loop.L2100D do |sub_loop|
105
+ sub_loop.NM1 do |seg|
106
+ seg.EntityIdentifierCode1 = ''
107
+ seg.EntityTypeQualifier = ''
108
+ seg.NameLastOrOrganizationName = ''
109
+ seg.NameFirst = ''
110
+ end
111
+ end
112
+ loop.L2200D do |sub_loop|
113
+ sub_loop.TRN do |seg|
114
+ seg.TraceTypeCode = rand(10 * 100)
115
+ seg.ReferenceIdentification1 = rand(10 * 100)
116
+ seg.OriginatingCompanyIdentifier = rand(10 * 100)
117
+ seg.ReferenceIdentification2 = rand(10 * 100)
118
+ end
119
+ sub_loop.REF do |seg|
120
+ seg.ReferenceIdentificationQualifier = "00"
121
+ seg.ReferenceIdentification = "R0203"
122
+ seg.Description = "Description"
123
+ seg.ReferenceIdentifier = "1241"
124
+ end
125
+ sub_loop.REF do |seg|
126
+ seg.ReferenceIdentificationQualifier = "00"
127
+ seg.ReferenceIdentification = "R0203"
128
+ seg.Description = "Description"
129
+ seg.ReferenceIdentifier = "1241"
130
+ end
131
+ sub_loop.REF do |seg|
132
+ seg.ReferenceIdentificationQualifier = "00"
133
+ seg.ReferenceIdentification = "R0203"
134
+ seg.Description = "Description"
135
+ seg.ReferenceIdentifier = "1241"
136
+ end
137
+ sub_loop.AMT do |seg|
138
+ seg.AmountQualifierCode = ''
139
+ seg.MonetaryAmount = ''
140
+ seg.CreditDebitFlagCode = ''
141
+ end
142
+ sub_loop.DTP do |seg|
143
+ seg.DateTimeQualifier = ''
144
+ seg.DateTimePeriodFormatQualifier = ''
145
+ seg.DateTimePeriod = ''
146
+ end
147
+ sub_loop.L2210D do |sub_loop_child|
148
+ sub_loop_child.SVC do |seg|
149
+ #seg.CompositeMedicalProcedureIdentifier1 do |seg|
150
+ seg.ProductServiceID = ''
151
+ seg.ProcedureModifier1 = ''
152
+ seg.ProcedureModifier2 = ''
153
+ seg.ProcedureModifier3 = ''
154
+ seg.ProcedureModifier4 = ''
155
+ seg.Description = ''
156
+ #end
157
+
158
+ seg.MonetaryAmount1 = ''
159
+ seg.MonetaryAmount2 = ''
160
+ seg.ProductServiceId = ''
161
+ seg.Quantity1 = ''
162
+
163
+ seg.OriginalProductServiceIDQualifier = ''
164
+ seg.OriginalProductServiceID = ''
165
+ seg.OriginalProcedureModifier1 = ''
166
+ seg.OriginalProcedureModifier2 = ''
167
+ seg.OriginalProcedureModifier3 = ''
168
+ seg.OriginalProcedureModifier4 = ''
169
+ seg.OriginalDescription = ''
170
+ seg.Quantity2 = ''
171
+ end
172
+
173
+ sub_loop_child.REF do |seg|
174
+ seg.ReferenceIdentificationQualifier = "00"
175
+ seg.ReferenceIdentification = "R0203"
176
+ seg.Description = "Description"
177
+ seg.ReferenceIdentifier = "1241"
178
+ end
179
+ sub_loop_child.DTP do |seg|
180
+ seg.DateTimeQualifier = ''
181
+ seg.DateTimePeriodFormatQualifier = ''
182
+ seg.DateTimePeriod = ''
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+ ts.L2000E do |loop|
189
+ loop.HL do |seg|
190
+ seg.HierarchicalIdNumber = ''
191
+ seg.HierarchicalParentIdNumber = ''
192
+ seg.HierarchicalLevelCode = ''
193
+ seg.HierarchicalChildCode = ''
194
+ end
195
+ loop.DMG do |seg|
196
+ seg.DateTimePeriodFormatQualifier = ''
197
+ seg.DateTimePeriod = ''
198
+ seg.GenderCode = ''
199
+ seg.MaritalStatusCode = ''
200
+ seg.CompositeRaceOrEthnicityInformation = ''
201
+ seg.CitizenshipStatusCode = ''
202
+ seg.CountryCode = ''
203
+ seg.BasisOfVerificationCode = ''
204
+ seg.Quantity = ''
205
+ seg.CodeListQualifierCode = ''
206
+ seg.IndustryCode = ''
207
+ end
208
+ loop.L2100E do |sub_loop|
209
+ sub_loop.NM1 do |seg|
210
+ seg.EntityIdentifierCode1 = ''
211
+ seg.EntityTypeQualifier = ''
212
+ seg.NameLastOrOrganizationName = ''
213
+ seg.NameFirst = ''
214
+ end
215
+ sub_loop.TRN do |seg|
216
+ seg.TraceTypeCode = rand(10 * 100)
217
+ seg.ReferenceIdentification1 = rand(10 * 100)
218
+ seg.OriginatingCompanyIdentifier = rand(10 * 100)
219
+ seg.ReferenceIdentification2 = rand(10 * 100)
220
+ end
221
+ end
222
+ loop.L2200E do |sub_loop|
223
+ sub_loop.REF do |seg|
224
+ seg.ReferenceIdentificationQualifier = "00"
225
+ seg.ReferenceIdentification = "R0203"
226
+ seg.Description = "Description"
227
+ seg.ReferenceIdentifier = "1241"
228
+ end
229
+ sub_loop.REF do |seg|
230
+ seg.ReferenceIdentificationQualifier = "00"
231
+ seg.ReferenceIdentification = "R0203"
232
+ seg.Description = "Description"
233
+ seg.ReferenceIdentifier = "1241"
234
+ end
235
+ sub_loop.REF do |seg|
236
+ seg.ReferenceIdentificationQualifier = "00"
237
+ seg.ReferenceIdentification = "R0203"
238
+ seg.Description = "Description"
239
+ seg.ReferenceIdentifier = "1241"
240
+ end
241
+ sub_loop.AMT do |seg|
242
+ seg.AmountQualifierCode = ''
243
+ seg.MonetaryAmount = ''
244
+ seg.CreditDebitFlagCode = ''
245
+ end
246
+ sub_loop.DTP do |seg|
247
+ seg.DateTimeQualifier = ''
248
+ seg.DateTimePeriodFormatQualifier = ''
249
+ seg.DateTimePeriod = ''
250
+ end
251
+ sub_loop.L2210E do |sub_loop_child|
252
+ sub_loop_child.SVC do |seg|
253
+ seg.ProductServiceID = ''
254
+ seg.ProcedureModifier1 = ''
255
+ seg.ProcedureModifier2 = ''
256
+ seg.ProcedureModifier3 = ''
257
+ seg.ProcedureModifier4 = ''
258
+ seg.Description = ''
259
+ seg.MonetaryAmount1 = ''
260
+ seg.MonetaryAmount2 = ''
261
+ seg.OriginalProductServiceIDQualifier = ''
262
+ seg.OriginalProductServiceID = ''
263
+ seg.OriginalProcedureModifier1 = ''
264
+ seg.OriginalProcedureModifier2 = ''
265
+ seg.OriginalProcedureModifier3 = ''
266
+ seg.OriginalProcedureModifier4 = ''
267
+ seg.OriginalDescription = ''
268
+ seg.Quantity2 = ''
269
+ end
270
+ sub_loop.REF do |seg|
271
+ seg.ReferenceIdentificationQualifier = "00"
272
+ seg.ReferenceIdentification = "R0203"
273
+ seg.Description = "Description"
274
+ seg.ReferenceIdentifier = "1241"
275
+ end
276
+ sub_loop.DTP do |seg|
277
+ seg.DateTimeQualifier = ''
278
+ seg.DateTimePeriodFormatQualifier = ''
279
+ seg.DateTimePeriod = ''
280
+ end
281
+ end
282
+ end
283
+ end
284
+
285
+ ts.SE do |seg|
286
+ seg.NumberOfIncludedSegments = ''
287
+ seg.TransactionSetControlNumber = ''
288
+ end
289
+
290
+ puts ts.to_s
291
+ end
292
+ end
293
+
294
+ if __FILE__ == $0
295
+ Demo276.run
296
+ end
data/bin/demo_835.rb ADDED
@@ -0,0 +1,170 @@
1
+ require './lib/hippo.rb'
2
+ require 'faker'
3
+
4
+ module Hippo
5
+ class Demo835
6
+ def self.run
7
+ ts = Hippo::TransactionSets::HIPAA_835::Base.new
8
+
9
+ ts.ST do |seg|
10
+ seg.TransactionSetIdentifierCode = rand(10 * 100)
11
+ seg.TransactionSetControlNumber = rand(10 * 100)
12
+ end
13
+
14
+ ts.BPR do |seg|
15
+ seg.TransactionHandlingCode = 'C'
16
+ seg.MonetaryAmount = rand(10 * 100).to_f
17
+ seg.CreditDebitFlagCode = 'C'
18
+ seg.PaymentMethodCode = 'ACH'
19
+ seg.PaymentFormatCode = 'CCP'
20
+ seg.DFIIdNumberQualifier1 = rand(10 * 100)
21
+ seg.AccountNumberQualifier1 = rand(10 * 100)
22
+ seg.Date = "19951104"
23
+ seg.BusinessFunctionCode = "Col"
24
+ seg.DFIIdNumberQualifier3 = "02"
25
+ seg.AccountNumberQualifier3 = "3"
26
+ end
27
+
28
+ ts.TRN do |seg|
29
+ seg.TraceTypeCode = rand(10 * 100)
30
+ seg.ReferenceIdentification1 = rand(10 * 100)
31
+ seg.OriginatingCompanyIdentifier = rand(10 * 100)
32
+ seg.ReferenceIdentification2 = rand(10 * 100)
33
+ end
34
+
35
+ ts.REF do |seg|
36
+ seg.ReferenceIdentificationQualifier = "00"
37
+ seg.ReferenceIdentification = "R0203"
38
+ seg.Description = "Description"
39
+ seg.ReferenceIdentifier = "1241"
40
+ end
41
+
42
+ ts.REF do |seg|
43
+ seg.ReferenceIdentificationQualifier = "URL"
44
+ seg.ReferenceIdentification = "R0203"
45
+ seg.Description = "Description"
46
+ seg.ReferenceIdentifier = "1241"
47
+ end
48
+
49
+ ts.DTM do |seg|
50
+ seg.DateTimeQualifier = "002"
51
+ seg.Date = "19451104"
52
+ end
53
+
54
+
55
+ ts.L1000A do |loop|
56
+ loop.N1 do |seg|
57
+ seg.EntityIdentifierCode1 = "PR"
58
+ seg.Name = Faker::Name.name
59
+ end
60
+ loop.N3 do |seg|
61
+ seg.AddressInformation1 = Faker::Address.street_address
62
+ seg.AddressInformation2 = "#{Faker::Address.city} #{Faker::Address.us_state} #{Faker::Address.zip_code}"
63
+ end
64
+ loop.N4 do |seg|
65
+ seg.CityName = Faker::Address.city
66
+ seg.StateOrProvinceCode = Faker::Address.us_state_abbr
67
+ seg.PostalCode = Faker::Address.zip_code
68
+ seg.CountryCode = "US"
69
+ end
70
+ loop.REF do |seg|
71
+ seg.ReferenceIdentificationQualifier = "URL"
72
+ seg.ReferenceIdentification = "R0203"
73
+ seg.Description = "Description"
74
+ seg.ReferenceIdentifier = "1241"
75
+ end
76
+ loop.PER do |seg|
77
+ seg.ContactFunctionCode = "1A"
78
+ seg.Name = Faker::Name.name
79
+ end
80
+ end
81
+
82
+ ts.L1000B do |loop|
83
+ loop.N1 do |seg|
84
+ seg.EntityIdentifierCode1 = "PR"
85
+ seg.Name = Faker::Name.name
86
+ end
87
+ loop.N3 do |seg|
88
+ seg.AddressInformation1 = Faker::Address.street_address
89
+ seg.AddressInformation2 = "#{Faker::Address.city} #{Faker::Address.us_state} #{Faker::Address.zip_code}"
90
+ end
91
+ loop.N4 do |seg|
92
+ seg.CityName = Faker::Address.city
93
+ seg.StateOrProvinceCode = Faker::Address.us_state_abbr
94
+ seg.PostalCode = Faker::Address.zip_code
95
+ seg.CountryCode = "US"
96
+ end
97
+ loop.REF do |seg|
98
+ seg.ReferenceIdentificationQualifier = "URL"
99
+ seg.ReferenceIdentification = "R0203"
100
+ seg.Description = "Description"
101
+ seg.ReferenceIdentifier = "1241"
102
+ end
103
+ end
104
+
105
+ 5.times do |i|
106
+ ts.L2000 do |loop|
107
+
108
+ loop.LX do |seg|
109
+ seg.AssignedNumber = i
110
+ end
111
+
112
+ loop.TS3 do |seg|
113
+ seg.ReferenceIdentification = "Provider Identifier"
114
+ seg.FacilityCodeValue = "Facility Type Code"
115
+ seg.Date = "20051104"
116
+ seg.Quantity1 = 5
117
+ seg.MonetaryAmount1 = rand(10 * 100).to_f
118
+ seg.MonetaryAmount2 = rand(10 * 100).to_f
119
+ seg.MonetaryAmount3 = rand(10 * 100).to_f
120
+ seg.MonetaryAmount4 = rand(10 * 100).to_f
121
+ seg.MonetaryAmount5 = rand(10 * 100).to_f
122
+ seg.MonetaryAmount6 = rand(10 * 100).to_f
123
+ seg.MonetaryAmount7 = rand(10 * 100).to_f
124
+ seg.Quantity2 = rand(10 * 100)
125
+ end
126
+
127
+ loop.TS2 do |seg|
128
+ seg.MonetaryAmount1 = rand(10 * 100).to_f
129
+ seg.MonetaryAmount2 = rand(10 * 100).to_f
130
+ seg.MonetaryAmount3 = rand(10 * 100).to_f
131
+ seg.MonetaryAmount4 = rand(10 * 100).to_f
132
+ seg.MonetaryAmount5 = rand(10 * 100).to_f
133
+ seg.MonetaryAmount6 = rand(10 * 100).to_f
134
+ end
135
+
136
+ 2.times do |i|
137
+ loop.L2100 do |sub_loop|
138
+
139
+ sub_loop.CLP do |seg|
140
+ seg.ClaimSubmittersIdentifier = rand(10 * 100).to_f
141
+ seg.ClaimStatusCode = "1"
142
+ seg.MonetaryAmount1 = rand(10 * 100).to_f
143
+ seg.ClaimFilingIndicatorCode = "01"
144
+ seg.YesNoConditionOrResponseCode = "Y"
145
+ end
146
+
147
+ sub_loop.CAS do |seg|
148
+ seg.ClaimAdjustmentGroupCode = "CO"
149
+ seg.ClaimAdjustmentReasonCode1 = "139"
150
+ seg.MonetaryAmount1 = rand(10 * 100).to_f
151
+ end
152
+
153
+ sub_loop.NM1 do |seg|
154
+ seg.EntityIdentifierCode1 = "00"
155
+ seg.EntityTypeQualifier = 1
156
+ seg.NameLastOrOrganizationName = Faker::Name.name
157
+ seg.NameFirst = Faker::Name.first_name
158
+ end
159
+ end
160
+ end
161
+ end
162
+ puts ts.to_s
163
+ end
164
+ end
165
+ end
166
+ end
167
+
168
+ if __FILE__ == $0
169
+ Hippo::Demo835.run
170
+ end
data/hippo.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "hippo/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "hippo"
7
+ s.version = Hippo::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Robert Jackson", 'Jon Jackson']
10
+ s.email = ["robertj@promedicalinc.com"]
11
+ s.homepage = "http://github.com/promedical/hippo"
12
+ s.summary = %q{HIPAA Transaction Set Generator/Parser}
13
+ s.description = %q{HIPAA Transaction Set Generator/Parser}
14
+
15
+ s.rubyforge_project = "hippo"
16
+
17
+ s.add_development_dependency('minitest')
18
+ s.add_development_dependency('rake', '~>0.9.2')
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+ end
@@ -0,0 +1,8 @@
1
+ module Hippo
2
+ module Exceptions
3
+ class Exception < StandardError; end
4
+
5
+ class InvalidField < Exception; end
6
+ class InvalidSegment < Exception; end
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ module Hippo
2
+ class Field
3
+ attr_accessor :name, :sequence, :datatype, :options, :restrictions, :minimum, :maximum, :required, :separator, :composite, :composite_sequence
4
+
5
+ end
6
+ end
data/lib/hippo/loop.rb ADDED
File without changes
@@ -0,0 +1,92 @@
1
+ require 'pp'
2
+ require 'hippo'
3
+
4
+ module Hippo
5
+ class Parser
6
+ attr_accessor :raw_data, :segments, :output
7
+
8
+ def segments
9
+ @segments ||= []
10
+ end
11
+
12
+ def read_file(filename)
13
+ @raw_data = File.read(filename)
14
+ end
15
+
16
+ def populate_segments
17
+
18
+ # iterate through each line of the input data
19
+ # and create Hippo::Segments for each segment
20
+ @raw_data.split(Hippo::SegmentSeparator).each do |line|
21
+
22
+ # get rid of any newlines or other bizarre spacing
23
+ # this may cause an issue with any transactions with
24
+ # some sort of whitespace delimiter
25
+ line = line.strip
26
+ next if line.nil? || line.empty?
27
+
28
+ # each field is separated by either * or : depending
29
+ # if it is a composite field. we treat them the same
30
+ fields = line.split(Hippo::FieldSeparator)
31
+
32
+ # grab the first field as it is the segment identifier
33
+ segment_identifier = fields.shift
34
+
35
+ # create a new segment object based on the identifier
36
+ segment = Hippo::Segments.const_get(segment_identifier.upcase).new
37
+
38
+ # populate each field from the original input
39
+ fields.each_with_index do |value, index|
40
+ field = segment.class.fields[index]
41
+
42
+ # if the field is an array that means it is a
43
+ # composite field
44
+ if field.class == Array
45
+ composite_fields = value.split(Hippo::CompositeSeparator)
46
+
47
+ # initialize the values hash with a hash for this
48
+ # composite field
49
+ segment.values[index] = {}
50
+
51
+ # iterate through each value present in the composite field
52
+ # and save them to the appropriate sequence in the values
53
+ # hash
54
+ composite_fields.each_with_index do |comp_value, comp_index|
55
+ segment.values[index][field[comp_index].sequence] = comp_value
56
+ end
57
+ else
58
+ segment.values[field.sequence] = value
59
+ end
60
+ end
61
+
62
+ # save the newly created segment to the segments accessor
63
+ segments << segment
64
+ end
65
+ end
66
+
67
+ def parse_segments
68
+ @segments.each do |segment|
69
+ puts segment.to_s
70
+ end
71
+ end
72
+
73
+ def parse(filename)
74
+ read_file(filename)
75
+ populate_segments
76
+ parse_segments
77
+ end
78
+ end
79
+ end
80
+
81
+ if __FILE__ == $0
82
+ parser = Hippo::Parser.new
83
+ parser.parse(ARGV[0])
84
+
85
+ output_string = ''
86
+ parser.segments.each do |seg|
87
+ output_string += seg.to_s
88
+ end
89
+
90
+ puts ''
91
+ puts output_string
92
+ end
@@ -0,0 +1,88 @@
1
+ ISA*00* *00* *ZZ*SENDER *ZZ*RECEIVER *080319*2327*U*00401*002721171*0*P*:~
2
+ GS*HC*SENDER*RECEIVER*20080319*2327*27211711*X*004010X091A1~
3
+ ST*835*1234~
4
+ BPR*C*150000*C*ACH*CTX*01*999999992*DA*123456
5
+ *1512345678**01*999988880*DA*98765*19960913~
6
+ TRN*1*12345*1512345678~
7
+ DTM*405*19960916~
8
+ N1*PR*INSURANCE COMPANY OF TIMBUCKTU~
9
+ N3*1 MAIN STREET~
10
+ N4*TIMBUCKTU*AK*89111~
11
+ REF*2U*999~
12
+ N1*PE*CYBIL MENTAL HOSPITAL*XX*6543210903~
13
+ PLB*130035*20070930*72>PR*-12123.66~
14
+ SE*28*1234~
15
+ ST*835*1234~
16
+ BPR*C*150000*C*ACH*CTX*01*999999992*DA*123456
17
+ *1512345678**01*999988880*DA*98765*19960913~
18
+ TRN*1*12345*1512345678~
19
+ DTM*405*19960916~
20
+ N1*PR*INSURANCE COMPANY OF TIMBUCKTU~
21
+ N3*1 MAIN STREET~
22
+ N4*TIMBUCKTU*AK*89111~
23
+ REF*2U*999~
24
+ N1*PE*CYBIL MENTAL HOSPITAL*XX*6543210903~
25
+ LX*961211~
26
+ TS3*6543210903*11*19961231*1*211366.97*138018.4***
27
+ 138018.4**73348.57~
28
+ TS2*2178.45*1919.71**56.82*197.69*4.23~
29
+ CLP*666123*1*211366.97*138018.4**MA*1999999444444*
30
+ 11*1~
31
+ CAS*CO*A2*73348.57~
32
+ NM1*QC*1*SHEPARD*SAM*O***HN*666666666A~
33
+ MIA*0***138018.4~
34
+ DTM*232*19960816~
35
+ DTM*233*19960824~
36
+ QTY*CA*8~
37
+ LX*961213~
38
+ TS3*6543210909*13*19961231*1*15000*15000**
39
+ *11980.33**3019.67~
40
+ CLP*777777*1*15000*11980.33**MB*1999999444445*13*
41
+ 1~
42
+ CAS*CO*A2*3019.67~
43
+ NM1*QC*1*BORDEN*LIZ*E***HN*996669999B~
44
+ NM1*82*2*CYBIL MENTAL HOSPITAL*****XX*6543210903~
45
+ MIA*0****MA130~
46
+ REF*EA*00000000012345~
47
+ DTM*050*19960128~
48
+ DTM*232*19961214~
49
+ DTM*233*19961216~
50
+ SVC*NU:0111*2000*0****2~
51
+ DTM*472*19961216~
52
+ CAS*CO*22*2000*2~
53
+ SVC*NU:0250*1113.08*0****217~
54
+ DTM*472*19961216~
55
+ CAS*CO*22*1113.08*217~
56
+ SVC*NU:0270*349.4*0****8~
57
+ DTM*472*19961216~
58
+ CAS*CO*22*349.4*8~
59
+ SVC*NU:0301*747.65*0****16~
60
+ DTM*472*19961216~
61
+ CAS*CO*22*747.65*16~
62
+ SVC*NU:0305*187.53*0****5~
63
+ DTM*472*19961216~
64
+ CAS*CO*22*187.53*5~
65
+ SVC*NU:0320*375.73*0****2~
66
+ DTM*472*19961216~
67
+ CAS*CO*22*375.73*2~
68
+ SVC*NU:0324*365.87*0****2~
69
+ DTM*472*19961216~
70
+ CAS*CO*22*365.87*2~
71
+ SVC*NU:0410*222.5*0****4~
72
+ DTM*472*19961216~
73
+ CAS*CO*22*222.5*4~
74
+ SVC*NU:0450*715.55*0****1~
75
+ DTM*472*19961216~
76
+ CAS*CO*22*715.55*1~
77
+ SVC*NU:0460*230*0****4~
78
+ DTM*472*19961216~
79
+ CAS*CO*22*230*4~
80
+ SVC*NU:0730*256.86*0****2~
81
+ DTM*472*19961216~
82
+ CAS*CO*22*256.86*2~
83
+ SVC*NU:0801*1550*0****2~
84
+ DTM*472*19961216~
85
+ CAS*CO*22*1550*2~
86
+ SE*28*1234~
87
+ GE*1*27211711~
88
+ IEA*1*002721171~