stupidedi 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (500) hide show
  1. data/README.md +215 -0
  2. data/Rakefile +108 -0
  3. data/bin/edi-ed +71 -0
  4. data/bin/edi-pp +81 -0
  5. data/doc/Defining.md +0 -0
  6. data/doc/Generating.md +321 -0
  7. data/doc/LICENSE.md +0 -0
  8. data/doc/Navigating.md +645 -0
  9. data/doc/Parsing.md +0 -0
  10. data/doc/Serializing.md +7 -0
  11. data/doc/Tokenizing.md +0 -0
  12. data/doc/Validating.md +0 -0
  13. data/doc/design/Parser.md +0 -0
  14. data/doc/design/Reader.md +0 -0
  15. data/lib/ruby/array.rb +164 -0
  16. data/lib/ruby/blank.rb +67 -0
  17. data/lib/ruby/enumerable.rb +35 -0
  18. data/lib/ruby/exception.rb +33 -0
  19. data/lib/ruby/hash.rb +4 -0
  20. data/lib/ruby/instance_exec.rb +26 -0
  21. data/lib/ruby/module.rb +79 -0
  22. data/lib/ruby/object.rb +63 -0
  23. data/lib/ruby/string.rb +73 -0
  24. data/lib/ruby/symbol.rb +24 -0
  25. data/lib/ruby/to_d.rb +81 -0
  26. data/lib/ruby/to_date.rb +33 -0
  27. data/lib/ruby/to_time.rb +24 -0
  28. data/lib/ruby/try.rb +43 -0
  29. data/lib/stupidedi/blank_slate.rb +11 -0
  30. data/lib/stupidedi/builder/builder_dsl.rb +281 -0
  31. data/lib/stupidedi/builder/constraint_table.rb +418 -0
  32. data/lib/stupidedi/builder/generation.rb +112 -0
  33. data/lib/stupidedi/builder/instruction.rb +102 -0
  34. data/lib/stupidedi/builder/instruction_table.rb +204 -0
  35. data/lib/stupidedi/builder/navigation.rb +655 -0
  36. data/lib/stupidedi/builder/state_machine.rb +55 -0
  37. data/lib/stupidedi/builder/states/abstract_state.rb +332 -0
  38. data/lib/stupidedi/builder/states/failure_state.rb +69 -0
  39. data/lib/stupidedi/builder/states/functional_group_state.rb +97 -0
  40. data/lib/stupidedi/builder/states/initial_state.rb +63 -0
  41. data/lib/stupidedi/builder/states/interchange_state.rb +94 -0
  42. data/lib/stupidedi/builder/states/loop_state.rb +79 -0
  43. data/lib/stupidedi/builder/states/table_state.rb +96 -0
  44. data/lib/stupidedi/builder/states/transaction_set_state.rb +112 -0
  45. data/lib/stupidedi/builder/states/transmission_state.rb +59 -0
  46. data/lib/stupidedi/builder/tokenization.rb +196 -0
  47. data/lib/stupidedi/builder.rb +23 -0
  48. data/lib/stupidedi/color.rb +93 -0
  49. data/lib/stupidedi/config/code_list_config.rb +42 -0
  50. data/lib/stupidedi/config/editor_config.rb +51 -0
  51. data/lib/stupidedi/config/functional_group_config.rb +62 -0
  52. data/lib/stupidedi/config/interchange_config.rb +79 -0
  53. data/lib/stupidedi/config/transaction_set_config.rb +91 -0
  54. data/lib/stupidedi/config.rb +101 -0
  55. data/lib/stupidedi/editor/00501.rb +341 -0
  56. data/lib/stupidedi/editor/005010/N2.rb +0 -0
  57. data/lib/stupidedi/editor/005010/N3.rb +0 -0
  58. data/lib/stupidedi/editor/005010/N4.rb +63 -0
  59. data/lib/stupidedi/editor/005010/NM1.rb +0 -0
  60. data/lib/stupidedi/editor/005010.rb +469 -0
  61. data/lib/stupidedi/editor/X222-HC837.rb +195 -0
  62. data/lib/stupidedi/editor/abstract_ed.rb +36 -0
  63. data/lib/stupidedi/editor/claim_ack.rb +9 -0
  64. data/lib/stupidedi/editor/implementation_ack.rb +213 -0
  65. data/lib/stupidedi/editor/interchange_ack.rb +9 -0
  66. data/lib/stupidedi/editor/result.rb +100 -0
  67. data/lib/stupidedi/editor/result_set.rb +69 -0
  68. data/lib/stupidedi/editor/transaction_set_ed.rb +275 -0
  69. data/lib/stupidedi/editor/transmission_ed.rb +90 -0
  70. data/lib/stupidedi/editor.rb +37 -0
  71. data/lib/stupidedi/either.rb +287 -0
  72. data/lib/stupidedi/exceptions/invalid_element_error.rb +8 -0
  73. data/lib/stupidedi/exceptions/invalid_schema_error.rb +8 -0
  74. data/lib/stupidedi/exceptions/output_error.rb +8 -0
  75. data/lib/stupidedi/exceptions/parse_error.rb +8 -0
  76. data/lib/stupidedi/exceptions/stupidedi_error.rb +8 -0
  77. data/lib/stupidedi/exceptions/tokenize_error.rb +8 -0
  78. data/lib/stupidedi/exceptions/zipper_error.rb +8 -0
  79. data/lib/stupidedi/exceptions.rb +11 -0
  80. data/lib/stupidedi/guides/005010/X214-HN277.rb +409 -0
  81. data/lib/stupidedi/guides/005010/X221-HP835.rb +613 -0
  82. data/lib/stupidedi/guides/005010/X221A1-HP835.rb +613 -0
  83. data/lib/stupidedi/guides/005010/X222-HC837P.rb +2291 -0
  84. data/lib/stupidedi/guides/005010/X222A1-HC837P.rb +2297 -0
  85. data/lib/stupidedi/guides/005010/X231-FA999.rb +123 -0
  86. data/lib/stupidedi/guides/005010/X231A1-FA999.rb +119 -0
  87. data/lib/stupidedi/guides/005010/element_reqs.rb +38 -0
  88. data/lib/stupidedi/guides/005010/guide_builder.rb +180 -0
  89. data/lib/stupidedi/guides/005010/segment_reqs.rb +32 -0
  90. data/lib/stupidedi/guides/005010.rb +64 -0
  91. data/lib/stupidedi/guides.rb +5 -0
  92. data/lib/stupidedi/inspect.rb +26 -0
  93. data/lib/stupidedi/reader/input/abstract_input.rb +133 -0
  94. data/lib/stupidedi/reader/input/delegated_input.rb +111 -0
  95. data/lib/stupidedi/reader/input/file_input.rb +155 -0
  96. data/lib/stupidedi/reader/input.rb +30 -0
  97. data/lib/stupidedi/reader/position.rb +69 -0
  98. data/lib/stupidedi/reader/result.rb +168 -0
  99. data/lib/stupidedi/reader/segment_dict.rb +175 -0
  100. data/lib/stupidedi/reader/separators.rb +85 -0
  101. data/lib/stupidedi/reader/stream_reader.rb +172 -0
  102. data/lib/stupidedi/reader/token_reader.rb +466 -0
  103. data/lib/stupidedi/reader/tokens/component_element_tok.rb +56 -0
  104. data/lib/stupidedi/reader/tokens/composite_element_tok.rb +64 -0
  105. data/lib/stupidedi/reader/tokens/repeated_element_tok.rb +64 -0
  106. data/lib/stupidedi/reader/tokens/segment_tok.rb +51 -0
  107. data/lib/stupidedi/reader/tokens/simple_element_tok.rb +63 -0
  108. data/lib/stupidedi/reader.rb +121 -0
  109. data/lib/stupidedi/schema/abstract_def.rb +74 -0
  110. data/lib/stupidedi/schema/abstract_use.rb +73 -0
  111. data/lib/stupidedi/schema/code_list.rb +94 -0
  112. data/lib/stupidedi/schema/element_def.rb +173 -0
  113. data/lib/stupidedi/schema/element_req.rb +56 -0
  114. data/lib/stupidedi/schema/element_use.rb +251 -0
  115. data/lib/stupidedi/schema/functional_group_def.rb +114 -0
  116. data/lib/stupidedi/schema/interchange_def.rb +93 -0
  117. data/lib/stupidedi/schema/loop_def.rb +152 -0
  118. data/lib/stupidedi/schema/repeat_count.rb +85 -0
  119. data/lib/stupidedi/schema/segment_def.rb +108 -0
  120. data/lib/stupidedi/schema/segment_req.rb +43 -0
  121. data/lib/stupidedi/schema/segment_use.rb +98 -0
  122. data/lib/stupidedi/schema/syntax_note.rb +63 -0
  123. data/lib/stupidedi/schema/table_def.rb +139 -0
  124. data/lib/stupidedi/schema/transaction_set_def.rb +88 -0
  125. data/lib/stupidedi/schema.rb +28 -0
  126. data/lib/stupidedi/sets/absolute_set.rb +297 -0
  127. data/lib/stupidedi/sets/abstract_set.rb +174 -0
  128. data/lib/stupidedi/sets/null_set.rb +125 -0
  129. data/lib/stupidedi/sets/relative_complement.rb +137 -0
  130. data/lib/stupidedi/sets/relative_set.rb +269 -0
  131. data/lib/stupidedi/sets/universal_set.rb +104 -0
  132. data/lib/stupidedi/sets.rb +57 -0
  133. data/lib/stupidedi/tail_call.rb +109 -0
  134. data/lib/stupidedi/thread_local.rb +174 -0
  135. data/lib/stupidedi/values/abstract_element_val.rb +19 -0
  136. data/lib/stupidedi/values/abstract_val.rb +130 -0
  137. data/lib/stupidedi/values/composite_element_val.rb +95 -0
  138. data/lib/stupidedi/values/functional_group_val.rb +102 -0
  139. data/lib/stupidedi/values/interchange_val.rb +86 -0
  140. data/lib/stupidedi/values/invalid_envelope_val.rb +61 -0
  141. data/lib/stupidedi/values/invalid_segment_val.rb +78 -0
  142. data/lib/stupidedi/values/loop_val.rb +70 -0
  143. data/lib/stupidedi/values/repeated_element_val.rb +105 -0
  144. data/lib/stupidedi/values/segment_val.rb +104 -0
  145. data/lib/stupidedi/values/segment_val_group.rb +20 -0
  146. data/lib/stupidedi/values/simple_element_val.rb +80 -0
  147. data/lib/stupidedi/values/table_val.rb +66 -0
  148. data/lib/stupidedi/values/transaction_set_val.rb +66 -0
  149. data/lib/stupidedi/values/transmission_val.rb +52 -0
  150. data/lib/stupidedi/values.rb +21 -0
  151. data/lib/stupidedi/version.rb +3 -0
  152. data/lib/stupidedi/versions/functional_groups/004010/element_defs.rb +54 -0
  153. data/lib/stupidedi/versions/functional_groups/004010/element_reqs.rb +18 -0
  154. data/lib/stupidedi/versions/functional_groups/004010/element_types/date_val.rb +527 -0
  155. data/lib/stupidedi/versions/functional_groups/004010/element_types/fixnum_val.rb +335 -0
  156. data/lib/stupidedi/versions/functional_groups/004010/element_types/float_val.rb +299 -0
  157. data/lib/stupidedi/versions/functional_groups/004010/element_types/identifier_val.rb +287 -0
  158. data/lib/stupidedi/versions/functional_groups/004010/element_types/string_val.rb +338 -0
  159. data/lib/stupidedi/versions/functional_groups/004010/element_types/time_val.rb +309 -0
  160. data/lib/stupidedi/versions/functional_groups/004010/element_types.rb +124 -0
  161. data/lib/stupidedi/versions/functional_groups/004010/functional_group_def.rb +30 -0
  162. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/GE.rb +20 -0
  163. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/GS.rb +27 -0
  164. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SE.rb +20 -0
  165. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/ST.rb +20 -0
  166. data/lib/stupidedi/versions/functional_groups/004010/segment_defs.rb +23 -0
  167. data/lib/stupidedi/versions/functional_groups/004010/segment_reqs.rb +18 -0
  168. data/lib/stupidedi/versions/functional_groups/004010/syntax_notes.rb +174 -0
  169. data/lib/stupidedi/versions/functional_groups/004010.rb +38 -0
  170. data/lib/stupidedi/versions/functional_groups/005010/element_defs.rb +1405 -0
  171. data/lib/stupidedi/versions/functional_groups/005010/element_reqs.rb +18 -0
  172. data/lib/stupidedi/versions/functional_groups/005010/element_types/date_val.rb +577 -0
  173. data/lib/stupidedi/versions/functional_groups/005010/element_types/fixnum_val.rb +322 -0
  174. data/lib/stupidedi/versions/functional_groups/005010/element_types/float_val.rb +354 -0
  175. data/lib/stupidedi/versions/functional_groups/005010/element_types/identifier_val.rb +368 -0
  176. data/lib/stupidedi/versions/functional_groups/005010/element_types/operators.rb +117 -0
  177. data/lib/stupidedi/versions/functional_groups/005010/element_types/string_val.rb +398 -0
  178. data/lib/stupidedi/versions/functional_groups/005010/element_types/time_val.rb +327 -0
  179. data/lib/stupidedi/versions/functional_groups/005010/element_types.rb +132 -0
  180. data/lib/stupidedi/versions/functional_groups/005010/functional_group_def.rb +30 -0
  181. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK1.rb +21 -0
  182. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK2.rb +21 -0
  183. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK9.rb +28 -0
  184. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AMT.rb +21 -0
  185. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/BHT.rb +24 -0
  186. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/BPR.rb +49 -0
  187. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CAS.rb +56 -0
  188. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CL1.rb +22 -0
  189. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CLM.rb +41 -0
  190. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CLP.rb +34 -0
  191. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CN1.rb +24 -0
  192. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR1.rb +32 -0
  193. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR2.rb +35 -0
  194. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR3.rb +25 -0
  195. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CRC.rb +26 -0
  196. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CTP.rb +36 -0
  197. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CTX.rb +24 -0
  198. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CUR.rb +57 -0
  199. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DMG.rb +34 -0
  200. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DN1.rb +22 -0
  201. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DN2.rb +24 -0
  202. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DTM.rb +24 -0
  203. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DTP.rb +21 -0
  204. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/FRM.rb +25 -0
  205. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/GE.rb +20 -0
  206. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/GS.rb +27 -0
  207. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HCP.rb +39 -0
  208. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HI.rb +31 -0
  209. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HL.rb +22 -0
  210. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK3.rb +22 -0
  211. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK4.rb +22 -0
  212. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK5.rb +24 -0
  213. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/K3.rb +21 -0
  214. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LIN.rb +69 -0
  215. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LQ.rb +22 -0
  216. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LX.rb +19 -0
  217. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MEA.rb +39 -0
  218. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MIA.rb +45 -0
  219. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MOA.rb +28 -0
  220. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N1.rb +24 -0
  221. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N2.rb +20 -0
  222. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N3.rb +20 -0
  223. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N4.rb +30 -0
  224. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/NM1.rb +35 -0
  225. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/NTE.rb +20 -0
  226. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/OI.rb +24 -0
  227. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PAT.rb +31 -0
  228. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PER.rb +32 -0
  229. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PLB.rb +40 -0
  230. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PRV.rb +26 -0
  231. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PS1.rb +21 -0
  232. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PWK.rb +30 -0
  233. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/QTY.rb +25 -0
  234. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/RDM.rb +23 -0
  235. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/REF.rb +23 -0
  236. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SBR.rb +28 -0
  237. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SE.rb +20 -0
  238. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/ST.rb +21 -0
  239. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/STC.rb +30 -0
  240. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV1.rb +44 -0
  241. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV2.rb +29 -0
  242. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV3.rb +30 -0
  243. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV5.rb +29 -0
  244. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SVC.rb +26 -0
  245. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SVD.rb +24 -0
  246. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TOO.rb +21 -0
  247. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TRN.rb +22 -0
  248. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TS2.rb +40 -0
  249. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TS3.rb +45 -0
  250. data/lib/stupidedi/versions/functional_groups/005010/segment_defs.rb +227 -0
  251. data/lib/stupidedi/versions/functional_groups/005010/segment_reqs.rb +18 -0
  252. data/lib/stupidedi/versions/functional_groups/005010/syntax_notes.rb +165 -0
  253. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/FA999.rb +38 -0
  254. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HB271.rb +85 -0
  255. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HC837.rb +163 -0
  256. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HI278.rb +64 -0
  257. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HN277.rb +74 -0
  258. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HP835.rb +68 -0
  259. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HR276.rb +57 -0
  260. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HS270.rb +53 -0
  261. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/RA820.rb +240 -0
  262. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs.rb +68 -0
  263. data/lib/stupidedi/versions/functional_groups/005010.rb +38 -0
  264. data/lib/stupidedi/versions/functional_groups.rb +8 -0
  265. data/lib/stupidedi/versions/interchanges/00401/element_defs.rb +224 -0
  266. data/lib/stupidedi/versions/interchanges/00401/interchange_def.rb +45 -0
  267. data/lib/stupidedi/versions/interchanges/00401/segment_defs/IEA.rb +20 -0
  268. data/lib/stupidedi/versions/interchanges/00401/segment_defs/ISA.rb +34 -0
  269. data/lib/stupidedi/versions/interchanges/00401/segment_defs/TA1.rb +23 -0
  270. data/lib/stupidedi/versions/interchanges/00401/segment_defs.rb +28 -0
  271. data/lib/stupidedi/versions/interchanges/00401.rb +23 -0
  272. data/lib/stupidedi/versions/interchanges/00501/element_defs.rb +269 -0
  273. data/lib/stupidedi/versions/interchanges/00501/interchange_def.rb +47 -0
  274. data/lib/stupidedi/versions/interchanges/00501/segment_defs/IEA.rb +20 -0
  275. data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISA.rb +34 -0
  276. data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISB.rb +18 -0
  277. data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISE.rb +18 -0
  278. data/lib/stupidedi/versions/interchanges/00501/segment_defs/TA1.rb +23 -0
  279. data/lib/stupidedi/versions/interchanges/00501/segment_defs/TA3.rb +18 -0
  280. data/lib/stupidedi/versions/interchanges/00501/segment_defs.rb +37 -0
  281. data/lib/stupidedi/versions/interchanges/00501.rb +23 -0
  282. data/lib/stupidedi/versions/interchanges.rb +8 -0
  283. data/lib/stupidedi/versions.rb +6 -0
  284. data/lib/stupidedi/writer/claredi.rb +142 -0
  285. data/lib/stupidedi/writer/default.rb +124 -0
  286. data/lib/stupidedi/writer.rb +6 -0
  287. data/lib/stupidedi/zipper/abstract_cursor.rb +351 -0
  288. data/lib/stupidedi/zipper/dangling_cursor.rb +103 -0
  289. data/lib/stupidedi/zipper/edited_cursor.rb +157 -0
  290. data/lib/stupidedi/zipper/memoized_cursor.rb +131 -0
  291. data/lib/stupidedi/zipper/path.rb +124 -0
  292. data/lib/stupidedi/zipper/root_cursor.rb +120 -0
  293. data/lib/stupidedi/zipper.rb +25 -0
  294. data/lib/stupidedi.rb +66 -0
  295. data/spec/examples/integration/generating.example +551 -0
  296. data/spec/examples/integration/navigating.example +214 -0
  297. data/spec/examples/integration/parsing.example +445 -0
  298. data/spec/examples/ruby/array.example +476 -0
  299. data/spec/examples/ruby/blank.example +62 -0
  300. data/spec/examples/ruby/count.example +68 -0
  301. data/spec/examples/ruby/object.example +99 -0
  302. data/spec/examples/ruby/string.example +111 -0
  303. data/spec/examples/ruby/symbol.example +117 -0
  304. data/spec/examples/ruby/to_d.example +90 -0
  305. data/spec/examples/ruby/try.example +50 -0
  306. data/spec/examples/stupidedi/either.example +375 -0
  307. data/spec/examples/stupidedi/reader/failure.example +68 -0
  308. data/spec/examples/stupidedi/reader/input/delegated_input.example +292 -0
  309. data/spec/examples/stupidedi/reader/separators.example +73 -0
  310. data/spec/examples/stupidedi/reader/stream_reader.example +48 -0
  311. data/spec/examples/stupidedi/reader/success.example +34 -0
  312. data/spec/examples/stupidedi/reader/token_reader.example +775 -0
  313. data/spec/examples/stupidedi/reader.example +168 -0
  314. data/spec/examples/stupidedi/sets/absolute_set.example +1577 -0
  315. data/spec/examples/stupidedi/sets/null_set.example +2 -0
  316. data/spec/examples/stupidedi/sets/relative_set.example +2 -0
  317. data/spec/examples/stupidedi/sets/universal_set.example +1 -0
  318. data/spec/examples/stupidedi/versions/005010/element_types/an.example +201 -0
  319. data/spec/examples/stupidedi/versions/005010/element_types/dt.example +258 -0
  320. data/spec/examples/stupidedi/versions/005010/element_types/id.example +192 -0
  321. data/spec/examples/stupidedi/versions/005010/element_types/nn.example +177 -0
  322. data/spec/examples/stupidedi/versions/005010/element_types/r.example +178 -0
  323. data/spec/examples/stupidedi/versions/005010/element_types/tm.example +2 -0
  324. data/spec/examples/stupidedi/zipper/abstract_cursor.example +417 -0
  325. data/spec/examples/stupidedi/zipper.example +9 -0
  326. data/spec/fixtures/X186-AG824/1-bad.txt +21 -0
  327. data/spec/fixtures/X186-AG824/1-good.txt +17 -0
  328. data/spec/fixtures/X186-AG824/2-bad.txt +26 -0
  329. data/spec/fixtures/X186-AG824/2-good.txt +21 -0
  330. data/spec/fixtures/X186-AG824/3-bad.txt +87 -0
  331. data/spec/fixtures/X186-AG824/3-good.txt +61 -0
  332. data/spec/fixtures/X212-HN277/1-bad.txt +54 -0
  333. data/spec/fixtures/X212-HN277/1-good.txt +46 -0
  334. data/spec/fixtures/X212-HN277/2-bad.txt +37 -0
  335. data/spec/fixtures/X212-HN277/2-good.txt +29 -0
  336. data/spec/fixtures/X212-HN277/3-bad.txt +22 -0
  337. data/spec/fixtures/X212-HN277/3-good.txt +17 -0
  338. data/spec/fixtures/X212-HN277/4-bad.txt +30 -0
  339. data/spec/fixtures/X212-HN277/4-good.txt +24 -0
  340. data/spec/fixtures/X212-HR276/1-bad.txt +53 -0
  341. data/spec/fixtures/X212-HR276/1-good.txt +46 -0
  342. data/spec/fixtures/X212-HR276/2-bad.txt +45 -0
  343. data/spec/fixtures/X212-HR276/2-good.txt +38 -0
  344. data/spec/fixtures/X212-HR276/3-bad.txt +32 -0
  345. data/spec/fixtures/X212-HR276/3-good.txt +26 -0
  346. data/spec/fixtures/X212-HR276/4-bad.txt +32 -0
  347. data/spec/fixtures/X212-HR276/4-good.txt +26 -0
  348. data/spec/fixtures/X214-HN277/1-bad.txt +58 -0
  349. data/spec/fixtures/X214-HN277/1-good.txt +47 -0
  350. data/spec/fixtures/X214-HN277/2-bad.txt +34 -0
  351. data/spec/fixtures/X214-HN277/2-good.txt +22 -0
  352. data/spec/fixtures/X214-HN277/3-bad.txt +64 -0
  353. data/spec/fixtures/X214-HN277/3-good.txt +54 -0
  354. data/spec/fixtures/X214-HN277/4-bad.txt +77 -0
  355. data/spec/fixtures/X214-HN277/4-good.txt +63 -0
  356. data/spec/fixtures/X216-HI278/1-bad.txt +42 -0
  357. data/spec/fixtures/X216-HI278/1-good.txt +27 -0
  358. data/spec/fixtures/X216-HI278/2-bad.txt +43 -0
  359. data/spec/fixtures/X216-HI278/2-good.txt +29 -0
  360. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-1.txt +24 -0
  361. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-1_Clean.txt +20 -0
  362. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-2.txt +46 -0
  363. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-2_Clean.txt +30 -0
  364. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-3.txt +38 -0
  365. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-3_Clean.txt +24 -0
  366. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4a.txt +39 -0
  367. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4a_Clean.txt +24 -0
  368. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4b.txt +43 -0
  369. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4b_Clean.txt +25 -0
  370. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-5.txt +63 -0
  371. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-5_Clean.txt +41 -0
  372. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-6.txt +36 -0
  373. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-6_Clean.txt +20 -0
  374. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-1r.txt +34 -0
  375. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-1r_Clean.txt +23 -0
  376. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-2r.txt +46 -0
  377. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-2r_Clean.txt +31 -0
  378. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-3r.txt +44 -0
  379. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-3r_Clean.txt +26 -0
  380. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-4ar_Clean.txt +28 -0
  381. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-4br_Clean.txt +35 -0
  382. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-5r.txt +60 -0
  383. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-5r_Clean.txt +42 -0
  384. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-6r.txt +40 -0
  385. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-6r_Clean.txt +24 -0
  386. data/spec/fixtures/X218-RA820/1-bad.txt +31 -0
  387. data/spec/fixtures/X218-RA820/1-good.txt +25 -0
  388. data/spec/fixtures/X218-RA820/2-bad.txt +37 -0
  389. data/spec/fixtures/X218-RA820/2-good.txt +29 -0
  390. data/spec/fixtures/X218-RA820/3-bad.txt +29 -0
  391. data/spec/fixtures/X218-RA820/3-good.txt +23 -0
  392. data/spec/fixtures/X218-RA820/4-bad.txt +36 -0
  393. data/spec/fixtures/X218-RA820/4-good.txt +27 -0
  394. data/spec/fixtures/X220-BE834/1-bad.txt +35 -0
  395. data/spec/fixtures/X220-BE834/1-good.txt +29 -0
  396. data/spec/fixtures/X220-BE834/10-bad.txt +26 -0
  397. data/spec/fixtures/X220-BE834/10-good.txt +19 -0
  398. data/spec/fixtures/X220-BE834/2-bad.txt +31 -0
  399. data/spec/fixtures/X220-BE834/2-good.txt +23 -0
  400. data/spec/fixtures/X220-BE834/3-bad.txt +36 -0
  401. data/spec/fixtures/X220-BE834/3-good.txt +26 -0
  402. data/spec/fixtures/X220-BE834/4-bad.txt +27 -0
  403. data/spec/fixtures/X220-BE834/4-good.txt +21 -0
  404. data/spec/fixtures/X220-BE834/5-bad.txt +26 -0
  405. data/spec/fixtures/X220-BE834/5-good.txt +17 -0
  406. data/spec/fixtures/X220-BE834/6-bad.txt +25 -0
  407. data/spec/fixtures/X220-BE834/6-good.txt +20 -0
  408. data/spec/fixtures/X220-BE834/7-bad.txt +25 -0
  409. data/spec/fixtures/X220-BE834/7-good.txt +20 -0
  410. data/spec/fixtures/X220-BE834/8-bad.txt +25 -0
  411. data/spec/fixtures/X220-BE834/8-good.txt +20 -0
  412. data/spec/fixtures/X220-BE834/9-bad.txt +27 -0
  413. data/spec/fixtures/X220-BE834/9-good.txt +21 -0
  414. data/spec/fixtures/X221-HP835/1-bad.txt +58 -0
  415. data/spec/fixtures/X221-HP835/1-good.txt +40 -0
  416. data/spec/fixtures/X221-HP835/2-bad.txt +51 -0
  417. data/spec/fixtures/X221-HP835/2-good.txt +40 -0
  418. data/spec/fixtures/X221-HP835/3a-bad.txt +78 -0
  419. data/spec/fixtures/X221-HP835/3a-good.txt +49 -0
  420. data/spec/fixtures/X221-HP835/3b-bad.txt +60 -0
  421. data/spec/fixtures/X221-HP835/3b-good.txt +32 -0
  422. data/spec/fixtures/X221-HP835/3c-bad.txt +55 -0
  423. data/spec/fixtures/X221-HP835/3c-good.txt +34 -0
  424. data/spec/fixtures/X222-HC837/1-bad.txt +60 -0
  425. data/spec/fixtures/X222-HC837/1-good.txt +53 -0
  426. data/spec/fixtures/X222-HC837/10a-bad.txt +52 -0
  427. data/spec/fixtures/X222-HC837/10a-good.txt +40 -0
  428. data/spec/fixtures/X222-HC837/10b-bad.txt +99 -0
  429. data/spec/fixtures/X222-HC837/10b-good.txt +80 -0
  430. data/spec/fixtures/X222-HC837/10c-bad.txt +105 -0
  431. data/spec/fixtures/X222-HC837/10c-good.txt +80 -0
  432. data/spec/fixtures/X222-HC837/11-bad.txt +69 -0
  433. data/spec/fixtures/X222-HC837/11-good.txt +45 -0
  434. data/spec/fixtures/X222-HC837/12-bad.txt +73 -0
  435. data/spec/fixtures/X222-HC837/12-good.txt +51 -0
  436. data/spec/fixtures/X222-HC837/13-bad.txt +64 -0
  437. data/spec/fixtures/X222-HC837/13-good.txt +46 -0
  438. data/spec/fixtures/X222-HC837/3a-bad.txt +83 -0
  439. data/spec/fixtures/X222-HC837/3a-good.txt +59 -0
  440. data/spec/fixtures/X222-HC837/3b-bad.txt +97 -0
  441. data/spec/fixtures/X222-HC837/3b-good.txt +70 -0
  442. data/spec/fixtures/X222-HC837/3c-bad.txt +95 -0
  443. data/spec/fixtures/X222-HC837/3c-good.txt +74 -0
  444. data/spec/fixtures/X222-HC837/4-bad.txt +67 -0
  445. data/spec/fixtures/X222-HC837/4-good.txt +48 -0
  446. data/spec/fixtures/X222-HC837/5-bad.txt +73 -0
  447. data/spec/fixtures/X222-HC837/5-good.txt +60 -0
  448. data/spec/fixtures/X222-HC837/6-bad.txt +50 -0
  449. data/spec/fixtures/X222-HC837/6-good.txt +39 -0
  450. data/spec/fixtures/X222-HC837/7-bad.txt +93 -0
  451. data/spec/fixtures/X222-HC837/7-good.txt +78 -0
  452. data/spec/fixtures/X222-HC837/8-bad.txt +64 -0
  453. data/spec/fixtures/X222-HC837/8-good.txt +52 -0
  454. data/spec/fixtures/X222-HC837/9-bad.txt +56 -0
  455. data/spec/fixtures/X222-HC837/9-good.txt +38 -0
  456. data/spec/fixtures/X223-HC837/1-bad.txt +66 -0
  457. data/spec/fixtures/X223-HC837/1-good.txt +53 -0
  458. data/spec/fixtures/X223-HC837/2-bad.txt +69 -0
  459. data/spec/fixtures/X223-HC837/2-good.txt +60 -0
  460. data/spec/fixtures/X223-HC837/3-bad.txt +89 -0
  461. data/spec/fixtures/X223-HC837/3-good.txt +61 -0
  462. data/spec/fixtures/X223-HC837/4-bad.txt +60 -0
  463. data/spec/fixtures/X223-HC837/4-good.txt +40 -0
  464. data/spec/fixtures/X223-HC837/5-bad.txt +75 -0
  465. data/spec/fixtures/X223-HC837/5-good.txt +58 -0
  466. data/spec/fixtures/X224-HC837/1-bad.txt +54 -0
  467. data/spec/fixtures/X224-HC837/1-good.txt +44 -0
  468. data/spec/fixtures/X224-HC837/2a-bad.txt +52 -0
  469. data/spec/fixtures/X224-HC837/2a-good.txt +42 -0
  470. data/spec/fixtures/X224-HC837/2b-bad.txt +67 -0
  471. data/spec/fixtures/X224-HC837/2b-good.txt +52 -0
  472. data/spec/fixtures/X224-HC837/3-bad.txt +67 -0
  473. data/spec/fixtures/X224-HC837/3-good.txt +51 -0
  474. data/spec/fixtures/X224-HC837/4-bad.txt +49 -0
  475. data/spec/fixtures/X224-HC837/4-good.txt +40 -0
  476. data/spec/fixtures/X230-FA997/1-bad.txt +19 -0
  477. data/spec/fixtures/X230-FA997/1-good.txt +16 -0
  478. data/spec/fixtures/X231-FA999/1-bad.txt +20 -0
  479. data/spec/fixtures/X231-FA999/1-good.txt +20 -0
  480. data/spec/fixtures/X279-HB271/1-bad.txt +36 -0
  481. data/spec/fixtures/X279-HB271/1-good.txt +30 -0
  482. data/spec/fixtures/X279-HB271/2-bad.txt +22 -0
  483. data/spec/fixtures/X279-HB271/2-good.txt +16 -0
  484. data/spec/fixtures/X279-HB271/3-bad.txt +44 -0
  485. data/spec/fixtures/X279-HB271/3-good.txt +36 -0
  486. data/spec/fixtures/X279-HS270/1-bad.txt +29 -0
  487. data/spec/fixtures/X279-HS270/1-good.txt +23 -0
  488. data/spec/fixtures/X279-HS270/2-bad.txt +32 -0
  489. data/spec/fixtures/X279-HS270/2-good.txt +25 -0
  490. data/spec/spec_helper.rb +34 -0
  491. data/spec/support/fixtures.rb +26 -0
  492. data/spec/support/matchers/either_matchers.rb +26 -0
  493. data/spec/support/matchers/navigation_matchers.rb +247 -0
  494. data/spec/support/node.rb +41 -0
  495. data/spec/support/quickcheck/characters.rb +28 -0
  496. data/spec/support/quickcheck/property.rb +105 -0
  497. data/spec/support/quickcheck/serialized_edi.rb +399 -0
  498. data/spec/support/quickcheck.rb +302 -0
  499. data/spec/support/rcov.rb +34 -0
  500. metadata +577 -0
@@ -0,0 +1,40 @@
1
+ Example 4 - Orthodontic Treatment Plan
2
+
3
+ Orthodontic treatment plan, patient is not the subscriber. The payer is a commercial payer. Billing provider submits claim directly to the payer.
4
+
5
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
6
+ GS*HC*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X224A1~
7
+ ST*837*0322*005010X224A1~
8
+ BHT*0019*00*0123*20061123*1023*CH~
9
+ NM1*41*2*JOHN DOE*****46*940001~
10
+ PER*IC*SALLY*TE*7175555555~
11
+ NM1*40*2*KEY INSURANCE COMPANY*****46*999996666~
12
+ HL*1**20*1~
13
+ PRV*BI*PXC*1223G0001X~
14
+ NM1*85*1*JOHN*DOE****XX*2345678900~
15
+ N3*123 TOOTH DRIVE~
16
+ N4*MIAMI*FL*334111234~
17
+ REF*EI*587654321~
18
+ HL*2*1*22*1~
19
+ SBR*P********CI~
20
+ NM1*IL*1*SMITH*JANE****MI*111223333~
21
+ N3*1234 A AVENUE~
22
+ N4*MIAMI*FL*33411~
23
+ NM1*PR*2*KEY INSURANCE COMPANY*****PI*999996666~
24
+ N4*MIAMI*FL*33111~
25
+ HL*3*2*23*0~
26
+ PAT*19~
27
+ NM1*QC*1*SMITH*TED~
28
+ N3*236 N MAIN ST~
29
+ N4*MIAMI*FL*33413~
30
+ DMG*D8*19911029*M~
31
+ CLM*SMITH788*4000***11:B:1*Y*A*Y*Y~
32
+ DTP*452*D8*20061115~
33
+ DN1*36~
34
+ LX*1~
35
+ SV3*AD:D8080*4000****1~
36
+ DTP*472*D8*20061115~
37
+ REF*6R*001~
38
+ SE*32*0322~
39
+ GE*1*1~
40
+ IEA*1*000000905~
@@ -0,0 +1,19 @@
1
+ The following example describes a 997 transaction set that is responding to a functional group that was received containing two 837 transaction sets. The first transaction set conformed fully with the X12 standard, while the second contained errors.
2
+
3
+ Errors Found in File 997 5010X230
4
+ * W10009:Padding, spaces or control characters detected after segment terminator.
5
+
6
+ ISA*00* *00* *ZZ*123456789 *ZZ*987654321 *041117*1024*^*00501*000000286*0*P*:~
7
+ GS*FA*RCVR*SNDR*20041117*1024*287*X*005010X230~
8
+ ST*997*2870001*005010X230~
9
+ AK1*HC*17456*005010~
10
+ AK2*837*0001~
11
+ AK5*A~
12
+ AK2*837*0002~
13
+ AK3*CLM*22**8~
14
+ AK4*1*1028*1~
15
+ AK5*R*5~
16
+ AK9*P*2*2*1~
17
+ SE*10*2870001~
18
+ GE*1*287~
19
+ IEA*1*000000286~
@@ -0,0 +1,16 @@
1
+ The following example describes a 997 transaction set that is responding to a functional group that was received containing two 837 transaction sets. The first transaction set conformed fully with the X12 standard, while the second contained errors.
2
+
3
+ ISA*00* *00* *ZZ*123456789 *ZZ*987654321 *041117*1024*^*00501*000000286*0*P*:~
4
+ GS*FA*RCVR*SNDR*20041117*1024*287*X*005010X230~
5
+ ST*997*2870001*005010X230~
6
+ AK1*HC*17456*005010~
7
+ AK2*837*0001~
8
+ AK5*A~
9
+ AK2*837*0002~
10
+ AK3*CLM*22**8~
11
+ AK4*1*1028*1~
12
+ AK5*R*5~
13
+ AK9*P*2*2*1~
14
+ SE*10*2870001~
15
+ GE*1*287~
16
+ IEA*1*000000286~
@@ -0,0 +1,20 @@
1
+ ISA*00* *00* *ZZ*123456789 *ZZ*987654321 *041117*1024*^*00501*000000286*0*P*:~
2
+ GS*FA*RCVR*SNDR*20041117*1024*287*X*005010X231~
3
+ ST*999*2870001*005010X231~
4
+ AK1*HC*17456*004010X098A1~
5
+ AK2*837*0001~
6
+ IK5*A~
7
+ AK2*837*0002~
8
+ IK3*CLM*22**8~
9
+ CTX*CLM01:123456789~
10
+ IK4*2*782*1~
11
+ IK5*R*5~
12
+ AK2*837*0003~
13
+ IK3*REF*57**3~
14
+ CTX*SITUATIONAL TRIGGER*CLM*43**5:3*C023:1325~
15
+ CTX*CLM01:987654321~
16
+ IK5*R*5~
17
+ AK9*P*3*3*1~
18
+ SE*16*2870001~
19
+ GE*1*287~
20
+ IEA*1*000000286~
@@ -0,0 +1,20 @@
1
+ ISA*00* *00* *ZZ*123456789 *ZZ*987654321 *041117*1024*^*00501*000000286*0*P*:~
2
+ GS*FA*RCVR*SNDR*20041117*1024*287*X*005010X231A1~
3
+ ST*999*2870001*005010X231~
4
+ AK1*HC*17456*004010X098A1~
5
+ AK2*837*0001~
6
+ IK5*A~
7
+ AK2*837*0002~
8
+ IK3*CLM*22**8~
9
+ CTX*CLM01:123456789~
10
+ IK4*2*782*1~
11
+ IK5*R*5~
12
+ AK2*837*0003~
13
+ IK3*REF*57**3~
14
+ CTX*SITUATIONAL TRIGGER*CLM*43**5:3~
15
+ CTX*CLM01:987654321~
16
+ IK5*R*5~
17
+ AK9*P*3*3*1~
18
+ SE*16*2870001~
19
+ GE*1*287~
20
+ IEA*1*000000286~
@@ -0,0 +1,36 @@
1
+ Example 1 - Subscriber Found Response
2
+
3
+ Response to a generic request by a clinic for the patient's, who is the subscriber, eligibility. This response illustrates the required components outlined in Section 1.4.7 - Implementation-Compliant Use of the 270/271 Transaction Set. The payer has indicated the patient has active coverage for the health plan, the beginning date for their coverage with the plan, active coverage for all the benefits outlined in Section 1.4.7 - Implementation-Compliant Use of the 270/271 Transaction Set and they have a Primary Care Physician.
4
+
5
+ Errors Found in File 271 5010X29-1
6
+ * W10009:Padding, spaces or control characters detected after segment terminator.
7
+ * H10203:Functional Group ID 'XX' mismatch - Transaction Set is type 'HB'
8
+ * H11204:Code Value 'XX' not used for element 'GS01'
9
+ * H21084:Invalid qualifier 'SV' found in '2120C NM108'. Only 'XX' is valid because the National Provider Identifier (NPI) is now mandated for use.
10
+
11
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
12
+ GS*XX*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
13
+ ST*271*4321*005010X279~
14
+ BHT*0022*11*10001234*20060501*1319~
15
+ HL*1**20*1~
16
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
17
+ HL*2*1*21*1~
18
+ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~
19
+ HL*3*2*22*0~
20
+ TRN*2*93175-012547*9877281234~
21
+ NM1*IL*1*SMITH*JOHN****MI*123456789~
22
+ N3*15197 BROADWAY AVENUE*APT 215~
23
+ N4*KANSAS CITY*MO*64108~
24
+ DMG*D8*19630519*M~
25
+ DTP*346*D8*20060101~
26
+ EB*1**30**GOLD 123 PLAN~
27
+ EB*L~
28
+ LS*2120~
29
+ NM1*P3*1*JONES*MARCUS****SV*0202034~
30
+ LE*2120~
31
+ EB*1**1^33^35^47^86^88^98^AL^MH^UC~
32
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*10*****Y~
33
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*30*****N~
34
+ SE*22*4321~
35
+ GE*1*1~
36
+ IEA*1*000000905~
@@ -0,0 +1,30 @@
1
+ Example 1 - Subscriber Found Response
2
+
3
+ Response to a generic request by a clinic for the patient's, who is the subscriber, eligibility. This response illustrates the required components outlined in Section 1.4.7 - Implementation-Compliant Use of the 270/271 Transaction Set. The payer has indicated the patient has active coverage for the health plan, the beginning date for their coverage with the plan, active coverage for all the benefits outlined in Section 1.4.7 - Implementation-Compliant Use of the 270/271 Transaction Set and they have a Primary Care Physician.
4
+
5
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
6
+ GS*HB*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
7
+ ST*271*4321*005010X279~
8
+ BHT*0022*11*10001234*20060501*1319~
9
+ HL*1**20*1~
10
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
11
+ HL*2*1*21*1~
12
+ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~
13
+ HL*3*2*22*0~
14
+ TRN*2*93175-012547*9877281234~
15
+ NM1*IL*1*SMITH*JOHN****MI*123456789~
16
+ N3*15197 BROADWAY AVENUE*APT 215~
17
+ N4*KANSAS CITY*MO*64108~
18
+ DMG*D8*19630519*M~
19
+ DTP*346*D8*20060101~
20
+ EB*1**30**GOLD 123 PLAN~
21
+ EB*L~
22
+ LS*2120~
23
+ NM1*P3*1*JONES*MARCUS****XX*1232343560~
24
+ LE*2120~
25
+ EB*1**1^33^35^47^86^88^98^AL^MH^UC~
26
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*10*****Y~
27
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*30*****N~
28
+ SE*22*4321~
29
+ GE*1*1~
30
+ IEA*1*000000905~
@@ -0,0 +1,22 @@
1
+ Example 1 � Error Response
2
+
3
+ The request validation segment is used in this example to indicate that the provider is not eligible for inquiries.
4
+
5
+ Errors Found in File 271 5010X279-2
6
+ * W10009:Padding, spaces or control characters detected after segment terminator.
7
+ * H10203:Functional Group ID 'XX' mismatch - Transaction Set is type 'HB'
8
+ * H11204:Code Value 'XX' not used for element 'GS01'
9
+ * H11402:HL segment marked as having children but in fact has none','HL segment n marked as having children but in fact has none
10
+
11
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
12
+ GS*XX*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
13
+ ST*271*4323*005010X279~
14
+ BHT*0022*11*10001234*20060501*1319~
15
+ HL*1**20*1~
16
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
17
+ HL*2*1*21*1~
18
+ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~
19
+ AAA*Y**50*N~
20
+ SE*8*4323~
21
+ GE*1*1~
22
+ IEA*1*000000905~
@@ -0,0 +1,16 @@
1
+ Example 1 � Error Response
2
+
3
+ The request validation segment is used in this example to indicate that the provider is not eligible for inquiries.
4
+
5
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
6
+ GS*HB*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
7
+ ST*271*4323*005010X279~
8
+ BHT*0022*11*10001234*20060501*1319~
9
+ HL*1**20*1~
10
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
11
+ HL*2*1*21*0~
12
+ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~
13
+ AAA*Y**50*N~
14
+ SE*8*4323~
15
+ GE*1*1~
16
+ IEA*1*000000905~
@@ -0,0 +1,44 @@
1
+ Example 2 � Response
2
+
3
+ Response to a generic request by a physician for the patient's, who is not the subscriber, eligibility. The payer has indicated the patient has active coverage for the health plan, the beginning date for their coverage with the plan, active coverage for all the benefits outlined in Section 1.4.7 - Implementation-Compliant Use of the 270/271 Transaction Set and they have a Primary Care Physician.
4
+
5
+ Errors Found in File 271 5010X279-3
6
+ * W10009:Padding, spaces or control characters detected after segment terminator.
7
+ * H10203:Functional Group ID 'XX' mismatch - Transaction Set is type 'HB'
8
+ * H11204:Code Value 'XX' not used for element 'GS01'
9
+ * H11402:HL segment marked as having children but in fact has none','HL segment n marked as having children but in fact has none
10
+ * H20204:Code Value '1' at element 'HL04' is valid in the X12 standard, but not in this HIPAA implementation
11
+ * H21084:Invalid qualifier 'SV' found in '2120D NM108'. Only 'XX' is valid because the National Provider Identifier (NPI) is now mandated for use.
12
+
13
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
14
+ GS*XX*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
15
+ ST*271*4322*005010X279~
16
+ BHT*0022*11*10001235*20060501*1319~
17
+ HL*1**20*1~
18
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
19
+ HL*2*1*21*1~
20
+ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~
21
+ HL*3*2*22*1~
22
+ NM1*IL*1*SMITH*JOHN****MI*123456789~
23
+ N3*15197 BROADWAY AVENUE*APT 215~
24
+ N4*KANSAS CITY*MO*64108~
25
+ DMG*D8*19630519*M~
26
+ HL*4*3*23*1~
27
+ TRN*2*93175-012547*9877281234~
28
+ NM1*03*1*SMITH*MARY~
29
+ N3*15197 BROADWAY AVENUE*APT 215~
30
+ N4*KANSAS CITY*MO*64108~
31
+ DMG*D8*19981014*F~
32
+ INS*N*19~
33
+ DTP*346*D8*20060101~
34
+ EB*1**30**GOLD 123 PLAN~
35
+ EB*L~
36
+ LS*2120~
37
+ NM1*P3*1*JONES*MARCUS****SV*0202034~
38
+ LE*2120~
39
+ EB*1**1^33^35^47^86^88^98^AL^MH^UC~
40
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*10*****Y~
41
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*30*****N~
42
+ SE*28*4322~
43
+ GE*1*1~
44
+ IEA*1*000000905~
@@ -0,0 +1,36 @@
1
+ Example 2 � Response
2
+
3
+ Response to a generic request by a physician for the patient's, who is not the subscriber, eligibility. The payer has indicated the patient has active coverage for the health plan, the beginning date for their coverage with the plan, active coverage for all the benefits outlined in Section 1.4.7 - Implementation-Compliant Use of the 270/271 Transaction Set and they have a Primary Care Physician.
4
+
5
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
6
+ GS*HB*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
7
+ ST*271*4322*005010X279~
8
+ BHT*0022*11*10001235*20060501*1319~
9
+ HL*1**20*1~
10
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
11
+ HL*2*1*21*1~
12
+ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~
13
+ HL*3*2*22*1~
14
+ NM1*IL*1*SMITH*JOHN****MI*123456789~
15
+ N3*15197 BROADWAY AVENUE*APT 215~
16
+ N4*KANSAS CITY*MO*64108~
17
+ DMG*D8*19630519*M~
18
+ HL*4*3*23*0~
19
+ TRN*2*93175-012547*9877281234~
20
+ NM1*03*1*SMITH*MARY~
21
+ N3*15197 BROADWAY AVENUE*APT 215~
22
+ N4*KANSAS CITY*MO*64108~
23
+ DMG*D8*19981014*F~
24
+ INS*N*19~
25
+ DTP*346*D8*20060101~
26
+ EB*1**30**GOLD 123 PLAN~
27
+ EB*L~
28
+ LS*2120~
29
+ NM1*P3*1*JONES*MARCUS****XX*1020203497~
30
+ LE*2120~
31
+ EB*1**1^33^35^47^86^88^98^AL^MH^UC~
32
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*10*****Y~
33
+ EB*B**1^33^35^47^86^88^98^AL^MH^UC*HM*GOLD 123 PLAN*27*30*****N~
34
+ SE*28*4322~
35
+ GE*1*1~
36
+ IEA*1*000000905~
@@ -0,0 +1,29 @@
1
+ Example 1 - Request
2
+
3
+ The Subscriber is the patient. A generic request by a clinic for the patient's eligibility.
4
+
5
+ This is an example of an eligibility request from a clinic to a payer processed in Real Time. The clinic is inquiring if the patient has coverage.
6
+
7
+ Errors Found in File 270 5010X279-1
8
+ * W10009:Padding, spaces or control characters detected after segment terminator.
9
+ * H10203:Functional Group ID 'XX' mismatch - Transaction Set is type 'HS'
10
+ * H11204:Code Value 'XX' not used for element 'GS01'
11
+ * W25219:The value of SV is only to be used if the provider is not a covered health care provider under the NPI mandate.
12
+
13
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
14
+ GS*XX*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
15
+ ST*270*1234*005010X279~
16
+ BHT*0022*13*10001234*20060501*1319~
17
+ HL*1**20*1~
18
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
19
+ HL*2*1*21*1~
20
+ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~
21
+ HL*3*2*22*0~
22
+ TRN*1*93175-012547*9877281234~
23
+ NM1*IL*1*SMITH*ROBERT****MI*11122333301~
24
+ DMG*D8*19430519~
25
+ DTP*291*D8*20060501~
26
+ EQ*30~
27
+ SE*13*1234~
28
+ GE*1*1~
29
+ IEA*1*000000905~
@@ -0,0 +1,23 @@
1
+ Example 1 - Request
2
+
3
+ The Subscriber is the patient. A generic request by a clinic for the patient's eligibility.
4
+
5
+ This is an example of an eligibility request from a clinic to a payer processed in Real Time. The clinic is inquiring if the patient has coverage.
6
+
7
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
8
+ GS*HS*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
9
+ ST*270*1234*005010X279~
10
+ BHT*0022*13*10001234*20060501*1319~
11
+ HL*1**20*1~
12
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
13
+ HL*2*1*21*1~
14
+ NM1*1P*2*BONE AND JOINT CLINIC*****XX*1232343560~
15
+ HL*3*2*22*0~
16
+ TRN*1*93175-012547*9877281234~
17
+ NM1*IL*1*SMITH*ROBERT****MI*11122333301~
18
+ DMG*D8*19430519~
19
+ DTP*291*D8*20060501~
20
+ EQ*30~
21
+ SE*13*1234~
22
+ GE*1*1~
23
+ IEA*1*000000905~
@@ -0,0 +1,32 @@
1
+ Example 2 - Request
2
+
3
+ The patient is the dependent of a subscriber.
4
+
5
+ Generic request by a physician for the patient's eligibility. This is an example of an eligibility request from an individual provider to a payer. The physician is inquiring if the patient has coverage.
6
+
7
+ Errors Found in File 270 5010X279-2
8
+ * W10009:Padding, spaces or control characters detected after segment terminator.
9
+ * H10203:Functional Group ID 'XX' mismatch - Transaction Set is type 'HS'
10
+ * H11204:Code Value 'XX' not used for element 'GS01'
11
+ * W25219:The value of SV is only to be used if the provider is not a covered health care provider under the NPI mandate.
12
+ * H10913:Transaction Set Control Number '1234' does not match ST02's '1235'.
13
+
14
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
15
+ GS*XX*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
16
+ ST*270*1235*005010X279~
17
+ BHT*0022*13*10001235*20060501*1320~
18
+ HL*1**20*1~
19
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
20
+ HL*2*1*21*1~
21
+ NM1*1P*1*JONES*MARCUS****SV*0202034~
22
+ HL*3*2*22*1~
23
+ NM1*IL*1******MI*11122333301~
24
+ HL*4*3*23*0~
25
+ TRN*1*93175-012547*9877281234~
26
+ NM1*03*1*SMITH*MARY~
27
+ DMG*D8*19781014~
28
+ DTP*291*D8*20060501~
29
+ EQ*30~
30
+ SE*15*1234~
31
+ GE*1*1~
32
+ IEA*1*000000905~
@@ -0,0 +1,25 @@
1
+ Example 2 - Request
2
+
3
+ The patient is the dependent of a subscriber.
4
+
5
+ Generic request by a physician for the patient's eligibility. This is an example of an eligibility request from an individual provider to a payer. The physician is inquiring if the patient has coverage.
6
+
7
+ ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~
8
+ GS*HS*SENDER CODE*RECEIVER CODE*19991231*0802*1*X*005010X279~
9
+ ST*270*1235*005010X279~
10
+ BHT*0022*13*10001235*20060501*1320~
11
+ HL*1**20*1~
12
+ NM1*PR*2*ABC COMPANY*****PI*842610001~
13
+ HL*2*1*21*1~
14
+ NM1*1P*1*JONES*MARCUS****XX*1232343560~
15
+ HL*3*2*22*1~
16
+ NM1*IL*1******MI*11122333301~
17
+ HL*4*3*23*0~
18
+ TRN*1*93175-012547*9877281234~
19
+ NM1*03*1*SMITH*MARY~
20
+ DMG*D8*19781014~
21
+ DTP*291*D8*20060501~
22
+ EQ*30~
23
+ SE*15*1235~
24
+ GE*1*1~
25
+ IEA*1*000000905~
@@ -0,0 +1,34 @@
1
+ require File.expand_path("../../lib/stupidedi", __FILE__)
2
+
3
+ begin
4
+ # RSpec-1: https://github.com/dchelimsky/rspec
5
+ require "spec"
6
+ rescue LoadError
7
+ # RSpec-2: https://github.com/rspec/rspec
8
+ require "rspec"
9
+ end
10
+
11
+ # Require supporting files with custom matchers and macros
12
+ Pathname.new(File.dirname(__FILE__)).tap do |specdir|
13
+ Dir["#{specdir}/support/**/*.rb"].each do |file|
14
+ require Pathname.new(file).relative_path_from(specdir)
15
+ end
16
+ end
17
+
18
+ RSpec.configure do |config|
19
+ config.include(EitherMatchers)
20
+
21
+ # rspec -I lib -t random spec
22
+ # config.filter_run :random => true
23
+
24
+ # rspec -I lib -t ~random spec
25
+ # config.filter_run_excluding :random => true
26
+
27
+ # Skip platform-specific examples unless our platform matches
28
+ config.filter_run_excluding(:ruby => lambda{|n| RUBY_VERSION !~ /^#{n}/ })
29
+
30
+ # config.filter_run(:random => true)
31
+ # config.filter_run(:focus => true)
32
+
33
+ # srand 44182052595481443184625304627718313206
34
+ end
@@ -0,0 +1,26 @@
1
+ Fixtures = Class.new do
2
+ def initialize(root)
3
+ @root = root
4
+ @files = Hash.new{|h,k| h[k] = parse(k) }
5
+
6
+ @config = Stupidedi::Config.default
7
+ @machine = Stupidedi::Builder::StateMachine.build(@config)
8
+ end
9
+
10
+ def file(path)
11
+ @files[path]
12
+ end
13
+
14
+ # @return [StateMachine]
15
+ def parse(path)
16
+ path = File.join(@root, path)
17
+ pair = File.open(path){|io| @machine.read(Stupidedi::Reader.build(io)) }
18
+
19
+ machine, result = pair
20
+ if result.fatal?
21
+ result.explain{|msg| raise msg }
22
+ end
23
+
24
+ machine
25
+ end
26
+ end.new(File.expand_path("../../fixtures", __FILE__))
@@ -0,0 +1,26 @@
1
+ module EitherMatchers
2
+
3
+ def be_defined
4
+ BeDefined.new
5
+ end
6
+
7
+ class BeDefined
8
+ def matches?(either)
9
+ @either = either
10
+ either.defined?
11
+ end
12
+
13
+ def failure_message_for_should
14
+ "expected Either.success, got #{@either.inspect}"
15
+ end
16
+
17
+ def failure_message_for_should_not
18
+ "expected Either.failure, got #{@either.inspect}"
19
+ end
20
+
21
+ def description
22
+ "be defined"
23
+ end
24
+ end
25
+
26
+ end