conceptql 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1208) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +228 -27
  3. data/LICENSE +21 -0
  4. data/README.md +28 -98
  5. data/bin/conceptql +2 -1
  6. data/bin/conceptql_utils +6 -0
  7. data/config/multiple_vocabularies.csv +4 -0
  8. data/config/provenance.yml +471 -436
  9. data/config/race.yml +50 -0
  10. data/config/vocabularies.csv +87 -0
  11. data/lib/conceptql/behaviors/code_lister.rb +23 -0
  12. data/lib/conceptql/behaviors/drugish.rb +13 -8
  13. data/lib/conceptql/behaviors/labish.rb +15 -9
  14. data/lib/conceptql/behaviors/metadatable.rb +102 -34
  15. data/lib/conceptql/behaviors/provenanceable.rb +15 -19
  16. data/lib/conceptql/behaviors/single_event.rb +11 -0
  17. data/lib/conceptql/behaviors/timeless.rb +11 -0
  18. data/lib/conceptql/behaviors/utilizable.rb +206 -0
  19. data/lib/conceptql/behaviors/windowable.rb +27 -0
  20. data/lib/conceptql/cli.rb +99 -134
  21. data/lib/conceptql/columnizer.rb +75 -0
  22. data/lib/conceptql/data_model/base.rb +462 -0
  23. data/lib/conceptql/data_model/gdm.rb +155 -0
  24. data/lib/conceptql/data_model/gdm_wide.rb +42 -0
  25. data/lib/conceptql/data_model/omopv4_plus.rb +12 -0
  26. data/lib/conceptql/data_model.rb +30 -0
  27. data/lib/conceptql/database.rb +195 -23
  28. data/lib/conceptql/date_adjuster.rb +57 -27
  29. data/lib/conceptql/diagram.rb +243 -0
  30. data/lib/conceptql/lexicon/lexicon_gdm.rb +47 -0
  31. data/lib/conceptql/lexicon/lexicon_no_db.rb +49 -0
  32. data/lib/conceptql/lexicon/lexicon_ohdsi.rb +63 -0
  33. data/lib/conceptql/lexicon/lexicon_strategy.rb +116 -0
  34. data/lib/conceptql/lexicon.rb +111 -0
  35. data/lib/conceptql/nodifier.rb +45 -15
  36. data/lib/conceptql/operators/after.rb +24 -21
  37. data/lib/conceptql/operators/any_overlap.rb +6 -6
  38. data/lib/conceptql/operators/before.rb +24 -16
  39. data/lib/conceptql/operators/binary_operator_operator.rb +52 -13
  40. data/lib/conceptql/operators/casting_operator.rb +24 -17
  41. data/lib/conceptql/operators/co_reported.rb +78 -9
  42. data/lib/conceptql/operators/concurrent_within.rb +29 -17
  43. data/lib/conceptql/operators/contains.rb +9 -9
  44. data/lib/conceptql/operators/count.rb +9 -9
  45. data/lib/conceptql/operators/date_range.rb +40 -18
  46. data/lib/conceptql/operators/death.rb +10 -2
  47. data/lib/conceptql/operators/dedup.rb +31 -0
  48. data/lib/conceptql/operators/during.rb +5 -12
  49. data/lib/conceptql/operators/episode.rb +146 -0
  50. data/lib/conceptql/operators/equal.rb +6 -3
  51. data/lib/conceptql/operators/ethnicity.rb +49 -0
  52. data/lib/conceptql/operators/except.rb +15 -20
  53. data/lib/conceptql/operators/filter.rb +20 -8
  54. data/lib/conceptql/operators/first.rb +14 -3
  55. data/lib/conceptql/operators/from.rb +33 -12
  56. data/lib/conceptql/operators/gender.rb +27 -11
  57. data/lib/conceptql/operators/hospice.rb +19 -0
  58. data/lib/conceptql/operators/hospitalization.rb +19 -0
  59. data/lib/conceptql/operators/information_periods.rb +36 -0
  60. data/lib/conceptql/operators/invalid.rb +4 -5
  61. data/lib/conceptql/operators/last.rb +14 -3
  62. data/lib/conceptql/operators/match.rb +91 -0
  63. data/lib/conceptql/operators/multiple_vocabularies.rb +172 -0
  64. data/lib/conceptql/operators/numeric.rb +52 -29
  65. data/lib/conceptql/operators/numeric_filter.rb +68 -0
  66. data/lib/conceptql/operators/occurrence.rb +133 -48
  67. data/lib/conceptql/operators/one_in_two_out.rb +198 -62
  68. data/lib/conceptql/operators/operator.rb +321 -408
  69. data/lib/conceptql/operators/pass_thru.rb +9 -5
  70. data/lib/conceptql/operators/person.rb +12 -2
  71. data/lib/conceptql/operators/person_filter.rb +5 -3
  72. data/lib/conceptql/operators/place_of_service_filter.rb +11 -15
  73. data/lib/conceptql/operators/provenance.rb +25 -36
  74. data/lib/conceptql/operators/provider_filter.rb +40 -14
  75. data/lib/conceptql/operators/race.rb +48 -7
  76. data/lib/conceptql/operators/read.rb +77 -58
  77. data/lib/conceptql/operators/recall.rb +20 -20
  78. data/lib/conceptql/operators/snf.rb +19 -0
  79. data/lib/conceptql/operators/sum.rb +23 -12
  80. data/lib/conceptql/operators/temporal_operator.rb +80 -54
  81. data/lib/conceptql/operators/time_window.rb +13 -15
  82. data/lib/conceptql/operators/trim_date.rb +71 -0
  83. data/lib/conceptql/operators/trim_date_end.rb +20 -40
  84. data/lib/conceptql/operators/trim_date_start.rb +20 -43
  85. data/lib/conceptql/operators/union.rb +59 -35
  86. data/lib/conceptql/operators/vocabulary.rb +151 -0
  87. data/lib/conceptql/paths.rb +41 -0
  88. data/lib/conceptql/query.rb +168 -46
  89. data/lib/conceptql/query_modifiers/gdm/admission_date_query_modifier.rb +46 -0
  90. data/lib/conceptql/query_modifiers/gdm/drug_query_modifier.rb +54 -0
  91. data/lib/conceptql/query_modifiers/gdm/lab_query_modifier.rb +57 -0
  92. data/lib/conceptql/query_modifiers/gdm/pos_query_modifier.rb +46 -0
  93. data/lib/conceptql/query_modifiers/gdm/provenance_query_modifier.rb +45 -0
  94. data/lib/conceptql/query_modifiers/gdm/provider_query_modifier.rb +53 -0
  95. data/lib/conceptql/query_modifiers/gdm_wide/admission_date_query_modifier.rb +42 -0
  96. data/lib/conceptql/query_modifiers/gdm_wide/drug_query_modifier.rb +52 -0
  97. data/lib/conceptql/query_modifiers/gdm_wide/lab_query_modifier.rb +55 -0
  98. data/lib/conceptql/query_modifiers/gdm_wide/pos_query_modifier.rb +37 -0
  99. data/lib/conceptql/query_modifiers/gdm_wide/provenance_query_modifier.rb +38 -0
  100. data/lib/conceptql/query_modifiers/omopv4_plus/admission_date_query_modifier.rb +45 -0
  101. data/lib/conceptql/query_modifiers/omopv4_plus/drug_query_modifier.rb +80 -0
  102. data/lib/conceptql/query_modifiers/omopv4_plus/pos_query_modifier.rb +47 -0
  103. data/lib/conceptql/query_modifiers/omopv4_plus/provenance_query_modifier.rb +45 -0
  104. data/lib/conceptql/query_modifiers/omopv4_plus/provider_query_modifier.rb +26 -0
  105. data/lib/conceptql/query_modifiers/query_modifier.rb +6 -2
  106. data/lib/conceptql/rdbms/duckdb.rb +21 -0
  107. data/lib/conceptql/rdbms/generic.rb +116 -0
  108. data/lib/conceptql/rdbms/postgres.rb +47 -0
  109. data/lib/conceptql/rdbms/spark.rb +18 -0
  110. data/lib/conceptql/rdbms.rb +22 -0
  111. data/lib/conceptql/scope.rb +353 -41
  112. data/lib/conceptql/utils.rb +70 -0
  113. data/lib/conceptql/utils_cli.rb +17 -0
  114. data/lib/conceptql/version.rb +3 -1
  115. data/lib/conceptql/visitors/metadata_extractor.rb +54 -0
  116. data/lib/conceptql/vocabularies/behaviors/costish.rb +24 -0
  117. data/lib/conceptql/vocabularies/behaviors/gdmish.rb +19 -0
  118. data/lib/conceptql/vocabularies/behaviors/omopish.rb +32 -0
  119. data/lib/conceptql/vocabularies/dynamic_vocabularies.rb +63 -0
  120. data/lib/conceptql/vocabularies/entry.rb +138 -0
  121. data/lib/conceptql/vocabularies/vocabulary_class_factory.rb +85 -0
  122. data/lib/conceptql/window/base.rb +26 -0
  123. data/lib/conceptql/window/date_range.rb +25 -0
  124. data/lib/conceptql/window/table.rb +116 -0
  125. data/lib/conceptql/window.rb +72 -0
  126. data/lib/conceptql.rb +53 -10
  127. data/lib/sequel/extensions/pg_ctas_explain.rb +22 -0
  128. data/lib/sequel/extensions/pg_vacuum_table.rb +23 -0
  129. data/schemas/gdm.yml +882 -0
  130. data/schemas/gdm_wide.yml +757 -0
  131. data/schemas/ohdsi_vocabs.yml +143 -0
  132. data/schemas/omopv4_plus.yml +729 -0
  133. data/schemas/omopv4_plus_more_ignorables.tsv +13 -0
  134. metadata +271 -2065
  135. data/.gitignore +0 -25
  136. data/Gemfile +0 -6
  137. data/Guardfile +0 -56
  138. data/LICENSE.txt +0 -22
  139. data/Rakefile +0 -35
  140. data/conceptql.gemspec +0 -31
  141. data/doc/ConceptQL Specification (alpha).pdf +0 -0
  142. data/doc/converter.rb +0 -33
  143. data/doc/diagram_0.png +0 -0
  144. data/doc/implementation_notes.md +0 -39
  145. data/doc/metadata.md +0 -89
  146. data/doc/spec/02f44ad35d266ddd0a4df1691d26bf4a297b30604fc3f44b0391d6d852d23a9f.png +0 -0
  147. data/doc/spec/0360fc0c2b7a88fd82ffc4d13387b76766649d5d42aa8f9349bbf60a81ac6119.png +0 -0
  148. data/doc/spec/04491942fcbd741982514f9eb12aeecf3d54b5b69a2b50c8331f7700169d5521.png +0 -0
  149. data/doc/spec/05f9b844571ffceeed2def3025fb60c68552817b8b73d3c8a76939dbc08b7c65.png +0 -0
  150. data/doc/spec/067241a3579767a802d4f8e20fd35b60adbe377c9a6512ef135f164a5accfb27.png +0 -0
  151. data/doc/spec/1102fa717b1c2df67af5220bf3ae219afafd79be7bba0c117e301983385ada52.png +0 -0
  152. data/doc/spec/11f57941951bad5a75f9a16f38a31a3c6bf3046a475aac6e398e780892fab4ad.png +0 -0
  153. data/doc/spec/15268bc45993d3f57ccf915877f91e48bdee684f24faa614249915833cac4af9.png +0 -0
  154. data/doc/spec/253845fe6162621af407ebd110296ff4f6d8a3f23ec75dfb4ea8cda30be71262.png +0 -0
  155. data/doc/spec/26fd52b5ac55438dd9f81b4a3f3913f1058c9f225c8a5e129007c1e9413d5881.png +0 -0
  156. data/doc/spec/2b57886a9cba66bb696e4b399c51ad0dc95cd64b952709fafc819a79d573f09e.png +0 -0
  157. data/doc/spec/307a8b5a7edd6e42f8be16523a4c939faf1a0533385c861d7004b6af8addd7d1.png +0 -0
  158. data/doc/spec/328467a6a419c7c05e299b8097e5e000686068ded8dc6d5f2e2de6f51976c315.png +0 -0
  159. data/doc/spec/39d6a8eb71cae51b1d6937c97134e51f04fd47c54535ff0915fe6a8b4f197fb2.png +0 -0
  160. data/doc/spec/3f46dee4d775d1a29d52b68af6552f8ea3abd8303094e749714fc77bd7958155.png +0 -0
  161. data/doc/spec/44ec6743d5d77d15b8a487c2058bf3e455d34adc91c46ea05767f6e0e471a75e.png +0 -0
  162. data/doc/spec/462153be527b28dc2cb5259c0aec62e1f529e8b60dc6e9c23fd1e06e8be933c9.png +0 -0
  163. data/doc/spec/4a3b47ed1c54f96ebdae693d41c36c51884c4546ef799a4108085708fb7b964e.png +0 -0
  164. data/doc/spec/514f263e976d07c0d9e0a86c79bcbdcddc7d444d7b72135294ad78758effd28f.png +0 -0
  165. data/doc/spec/58113a57a37431a402d2547369eba3a481bf1dbbfd82dc384406a5c91f6df01f.png +0 -0
  166. data/doc/spec/5d331d74c460d75814b2d3138a9b7d90b5ddb2dcd85e1f5f260d183745fc3a1e.png +0 -0
  167. data/doc/spec/5d6ff62038b75d6f240d65f35d1520a131c221f47d3801554c8c2be5d528ebb0.png +0 -0
  168. data/doc/spec/62323426e381ec21c967971a67e1f4a6d89dae92154bd937284e00b67f67fdd3.png +0 -0
  169. data/doc/spec/6705af65d728c0d5c50d6c4d46253017a91eb459dbb1f40f92449f05d5562f4a.png +0 -0
  170. data/doc/spec/68fac940a32c7e40caacf8e560c61da552d57633d015ba98f2e98ec040a00c5b.png +0 -0
  171. data/doc/spec/6a34c0ef589c9c976fe41f3e67e799e198499f5b9c3ebfd240fb91f73e893573.png +0 -0
  172. data/doc/spec/6b48534236697d1ccfa1f5403764782f9d228f9eb706789cfa80203882b7b13a.png +0 -0
  173. data/doc/spec/7aa76b4d29874719466c2cbafc9936e9f12e504bf31e1a09d26ca3fffa8ba1a6.png +0 -0
  174. data/doc/spec/7b9db2986ab9ada45cfb9451ef87ff1a2d99c908083334b7ccdceb8a92387fa9.png +0 -0
  175. data/doc/spec/8101d9b89d9ba8070d585432707b43a8acdb4c2a3e9d37c3f7114b5e3ea9e800.png +0 -0
  176. data/doc/spec/886bf85249a704668a55c5161bceaac10be4a41a94b91606f49851dfa017526c.png +0 -0
  177. data/doc/spec/8ed478d8c81a58a202d0c51348fca246df206fc24a0567b163d4e0bdab56ca46.png +0 -0
  178. data/doc/spec/9139440329dcb815df89bc70182c3827868402a74ff64d0253706dcaff723dca.png +0 -0
  179. data/doc/spec/99392f56dfb0e5be3f45a12a7f1ba846d094e430f526dfeaa30b606837cd34c0.png +0 -0
  180. data/doc/spec/a4450e8c0fe0e2fde92fe9bd61952f907b1976c1aa3ba963b809bed079d42b09.png +0 -0
  181. data/doc/spec/a4bc7382a1154ea9856544fd48418f3dd9ce474ca94b8859fc323749c6cc1f55.png +0 -0
  182. data/doc/spec/a79274742cf6fac6f6c9f4a0eb651aeb452f9c43b537c8e6ccaefecd05b7105c.png +0 -0
  183. data/doc/spec/a9b4528726adec2a90f3f00139d8d0492f13c51f03c2f9ed6a5134b1b26b44a9.png +0 -0
  184. data/doc/spec/af5ae3787e80bf0771f18f1a04fe4c5d9291e1e0f963ac408a7bc198d2f1ee28.png +0 -0
  185. data/doc/spec/ba572c4f4dbade65be55f141df16cf7b3e7d09e0aec4e4e5debc4f2075277371.png +0 -0
  186. data/doc/spec/ba90ef705f7be91c53c5eb4a81a439fa0f7c48532214bd3db3cc5c069160543e.png +0 -0
  187. data/doc/spec/c1d0402862221d85aceedc7d76b3f82149b612cbd972f14d0ca9011e1e2c455c.png +0 -0
  188. data/doc/spec/c2157d8a6b73abe4f22ba5042159f32502c74bf6d762be28d2df6831586822c7.png +0 -0
  189. data/doc/spec/c5329a7f4937096a57b2e01efb9d542f84a4e2329a1e9381d08c630583ccad37.png +0 -0
  190. data/doc/spec/c82077b9455d0f9abc2c45ee1a298e38b99c9ce9cd685f65d87b376d7718d7ad.png +0 -0
  191. data/doc/spec/c93dd18894a245a5647f99e1867d3779e4cd34c9c8f8860600ff0c837a5ffa53.png +0 -0
  192. data/doc/spec/cc960a268d51ccf2ebde657d36848f780213834844900018bce3d111843f7b0f.png +0 -0
  193. data/doc/spec/d39452b58257c95a7cba07afed4877417b0c227f3690e2bff22c9eca89eac845.png +0 -0
  194. data/doc/spec/d64993258ffbef9406d9ab9136de7af530626b3a69e9eeb75835e11f11dabf62.png +0 -0
  195. data/doc/spec/da450cdd0c94a1301bd98560339a45caa8041e09974352a56ecfb144e9a5e4d4.png +0 -0
  196. data/doc/spec/dbc66b3ae6bd7123d77dd04b64f8a24498d048725a55c5340b15f5ae0a1ff307.png +0 -0
  197. data/doc/spec/de589af36fa854e006a1563c93e644e2210f2a5616babb779f7f38aadb6c1ed7.png +0 -0
  198. data/doc/spec/defbd0b853d895802663f507761ad297d82e167f516c6082686a2a19b76012c5.png +0 -0
  199. data/doc/spec/e1cb0863b21e14256d61a54200316791f6547c78ba2f0156c110f4500f9bbd49.png +0 -0
  200. data/doc/spec/e8630103287f7c9d28eff40b3b1826e24846e776b877f7b8554257acbe621e1c.png +0 -0
  201. data/doc/spec/e9b384fa7dec5f1a06479c4b289e06b1e60e4f23f7630aff6d03c52595f500f8.png +0 -0
  202. data/doc/spec/ea935ac31f3b57ff373646780a1fba34a38c9e086dc771eb7fc16c65a7e20cfc.png +0 -0
  203. data/doc/spec/eb8f5511f7d88bd0f8ba73420fc10f7c78405db7f4373d778a827058707f888e.png +0 -0
  204. data/doc/spec/ebacbd092e3d1a3c7b745a381e51e8ff9d63a21db23a16940193e18e57bc866f.png +0 -0
  205. data/doc/spec/ed039f82867241393b1a6a7153d3690461103934c72c1f3eaa3d99a12bb40885.png +0 -0
  206. data/doc/spec/ee283d6a4b69cf10da2df703be3a16830be9cd8cd4f68c5f7afdf558ea28fa76.png +0 -0
  207. data/doc/spec/f0c734b099841a754ae0366afb00e992ad4814479b65e4a7de23c6e3dd85c09a.png +0 -0
  208. data/doc/spec/f6b4fc31703cfb6327bbbd4614af8bb72da6d39fa3d53ada63a70157f2fad80e.png +0 -0
  209. data/doc/spec/f766f2e3aa13420e3ba0f823ac7956b311ed7c6c20be26b72324fadd87f36712.png +0 -0
  210. data/doc/spec/ff7d5b5573d09bd7c4cdd3aeda124d18bf82ec46673a62881b399a75d69f3f53.png +0 -0
  211. data/doc/spec.md +0 -2258
  212. data/doc/spec.md.cql +0 -1930
  213. data/lib/conceptql/annotate_grapher.rb +0 -127
  214. data/lib/conceptql/fake_annotater.rb +0 -129
  215. data/lib/conceptql/knitter.rb +0 -221
  216. data/lib/conceptql/logger.rb +0 -10
  217. data/lib/conceptql/operators/complement.rb +0 -43
  218. data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator.rb +0 -34
  219. data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator_union.rb +0 -28
  220. data/lib/conceptql/operators/condition_type.rb +0 -79
  221. data/lib/conceptql/operators/cpt.rb +0 -28
  222. data/lib/conceptql/operators/cpt_or_hcpcs.rb +0 -27
  223. data/lib/conceptql/operators/drg.rb +0 -42
  224. data/lib/conceptql/operators/drug_type_concept.rb +0 -30
  225. data/lib/conceptql/operators/from_seer_visits.rb +0 -29
  226. data/lib/conceptql/operators/hcpcs.rb +0 -28
  227. data/lib/conceptql/operators/icd10.rb +0 -19
  228. data/lib/conceptql/operators/icd10_pcs.rb +0 -28
  229. data/lib/conceptql/operators/icd9.rb +0 -19
  230. data/lib/conceptql/operators/icd9_procedure.rb +0 -28
  231. data/lib/conceptql/operators/intersect.rb +0 -39
  232. data/lib/conceptql/operators/loinc.rb +0 -28
  233. data/lib/conceptql/operators/medcode.rb +0 -17
  234. data/lib/conceptql/operators/medcode_procedure.rb +0 -28
  235. data/lib/conceptql/operators/ndc.rb +0 -32
  236. data/lib/conceptql/operators/observation_by_enttype.rb +0 -32
  237. data/lib/conceptql/operators/observation_period.rb +0 -32
  238. data/lib/conceptql/operators/overlapped_by.rb +0 -26
  239. data/lib/conceptql/operators/overlaps.rb +0 -21
  240. data/lib/conceptql/operators/place_of_service_code.rb +0 -31
  241. data/lib/conceptql/operators/procedure_occurrence.rb +0 -27
  242. data/lib/conceptql/operators/prodcode.rb +0 -32
  243. data/lib/conceptql/operators/revenue_code.rb +0 -40
  244. data/lib/conceptql/operators/rxnorm.rb +0 -28
  245. data/lib/conceptql/operators/snomed.rb +0 -25
  246. data/lib/conceptql/operators/source_vocabulary_operator.rb +0 -88
  247. data/lib/conceptql/operators/standard_vocabulary_operator.rb +0 -66
  248. data/lib/conceptql/operators/started_by.rb +0 -23
  249. data/lib/conceptql/operators/to_seer_visits.rb +0 -29
  250. data/lib/conceptql/operators/visit_occurrence.rb +0 -32
  251. data/lib/conceptql/operators/vocabulary_operator.rb +0 -45
  252. data/lib/conceptql/query_modifiers/drug_query_modifier.rb +0 -45
  253. data/lib/conceptql/query_modifiers/pos_query_modifier.rb +0 -31
  254. data/lib/conceptql/sql_formatter.rb +0 -22
  255. data/test/all.rb +0 -3
  256. data/test/all_operations_test.rb +0 -45
  257. data/test/code_list_test.rb +0 -23
  258. data/test/data/omopv4/care_site.csv +0 -0
  259. data/test/data/omopv4/cohort.csv +0 -0
  260. data/test/data/omopv4/condition_era.csv +0 -0
  261. data/test/data/omopv4/condition_occurrence.csv +0 -34044
  262. data/test/data/omopv4/death.csv +0 -1
  263. data/test/data/omopv4/drug_cost.csv +0 -0
  264. data/test/data/omopv4/drug_era.csv +0 -0
  265. data/test/data/omopv4/drug_exposure.csv +0 -2
  266. data/test/data/omopv4/location.csv +0 -0
  267. data/test/data/omopv4/observation.csv +0 -2
  268. data/test/data/omopv4/observation_period.csv +0 -1
  269. data/test/data/omopv4/organization.csv +0 -0
  270. data/test/data/omopv4/payer_plan_period.csv +0 -0
  271. data/test/data/omopv4/person.csv +0 -250
  272. data/test/data/omopv4/procedure_cost.csv +0 -0
  273. data/test/data/omopv4/procedure_occurrence.csv +0 -35099
  274. data/test/data/omopv4/provider.csv +0 -0
  275. data/test/data/omopv4/visit_occurrence.csv +0 -14931
  276. data/test/data/omopv4_plus/care_site.csv +0 -0
  277. data/test/data/omopv4_plus/cohort.csv +0 -0
  278. data/test/data/omopv4_plus/concept.csv +0 -352
  279. data/test/data/omopv4_plus/condition_era.csv +0 -0
  280. data/test/data/omopv4_plus/condition_occurrence.csv +0 -46673
  281. data/test/data/omopv4_plus/death.csv +0 -9
  282. data/test/data/omopv4_plus/drug_cost.csv +0 -13921
  283. data/test/data/omopv4_plus/drug_era.csv +0 -0
  284. data/test/data/omopv4_plus/drug_exposure.csv +0 -13921
  285. data/test/data/omopv4_plus/headers/care_site.csv +0 -1
  286. data/test/data/omopv4_plus/headers/cohort.csv +0 -1
  287. data/test/data/omopv4_plus/headers/concept.csv +0 -1
  288. data/test/data/omopv4_plus/headers/condition_era.csv +0 -1
  289. data/test/data/omopv4_plus/headers/condition_occurrence.csv +0 -1
  290. data/test/data/omopv4_plus/headers/death.csv +0 -1
  291. data/test/data/omopv4_plus/headers/drug_cost.csv +0 -1
  292. data/test/data/omopv4_plus/headers/drug_era.csv +0 -1
  293. data/test/data/omopv4_plus/headers/drug_exposure.csv +0 -1
  294. data/test/data/omopv4_plus/headers/location.csv +0 -1
  295. data/test/data/omopv4_plus/headers/observation.csv +0 -1
  296. data/test/data/omopv4_plus/headers/observation_period.csv +0 -1
  297. data/test/data/omopv4_plus/headers/organization.csv +0 -1
  298. data/test/data/omopv4_plus/headers/payer_plan_period.csv +0 -1
  299. data/test/data/omopv4_plus/headers/person.csv +0 -1
  300. data/test/data/omopv4_plus/headers/procedure_cost.csv +0 -1
  301. data/test/data/omopv4_plus/headers/procedure_occurrence.csv +0 -1
  302. data/test/data/omopv4_plus/headers/provider.csv +0 -1
  303. data/test/data/omopv4_plus/headers/source_to_concept_map.csv +0 -1
  304. data/test/data/omopv4_plus/headers/visit_occurrence.csv +0 -1
  305. data/test/data/omopv4_plus/headers/vocabulary.csv +0 -1
  306. data/test/data/omopv4_plus/location.csv +0 -0
  307. data/test/data/omopv4_plus/observation.csv +0 -0
  308. data/test/data/omopv4_plus/observation_period.csv +0 -147
  309. data/test/data/omopv4_plus/organization.csv +0 -736
  310. data/test/data/omopv4_plus/payer_plan_period.csv +0 -808
  311. data/test/data/omopv4_plus/person.csv +0 -250
  312. data/test/data/omopv4_plus/procedure_cost.csv +0 -20123
  313. data/test/data/omopv4_plus/procedure_occurrence.csv +0 -27273
  314. data/test/data/omopv4_plus/provider.csv +0 -10193
  315. data/test/data/omopv4_plus/source_to_concept_map.csv +0 -285
  316. data/test/data/omopv4_plus/visit_occurrence.csv +0 -45125
  317. data/test/data/omopv4_plus/vocabulary.csv +0 -60
  318. data/test/db.rb +0 -15
  319. data/test/db_setup.rb +0 -408
  320. data/test/db_teardown.rb +0 -33
  321. data/test/fake_annotater_test.rb +0 -31
  322. data/test/helper.rb +0 -129
  323. data/test/knitter/conceptql.md.cql +0 -39
  324. data/test/knitter/conceptql.md.expect +0 -43
  325. data/test/knitter/empty.md.cql +0 -0
  326. data/test/knitter/except.md.cql +0 -13
  327. data/test/knitter/except.md.expect +0 -14
  328. data/test/knitter/fake.md.cql +0 -10
  329. data/test/knitter/fake.md.expect +0 -13
  330. data/test/knitter/many.md.cql +0 -7
  331. data/test/knitter/many.md.expect +0 -14
  332. data/test/knitter/no_conceptql.md.cql +0 -36
  333. data/test/knitter/title.md.cql +0 -12
  334. data/test/knitter/title.md.expect +0 -15
  335. data/test/knitter/union.md.cql +0 -11
  336. data/test/knitter/union.md.expect +0 -14
  337. data/test/knitter_test.rb +0 -69
  338. data/test/query_test.rb +0 -36
  339. data/test/results/omopv4/after/anno_1 +0 -25
  340. data/test/results/omopv4/after/anno_2 +0 -48
  341. data/test/results/omopv4/after/anno_3 +0 -34
  342. data/test/results/omopv4/after/anno_4 +0 -60
  343. data/test/results/omopv4/after/anno_5 +0 -68
  344. data/test/results/omopv4/after/anno_6 +0 -60
  345. data/test/results/omopv4/after/crit_at_least +0 -7
  346. data/test/results/omopv4/after/crit_basic +0 -32
  347. data/test/results/omopv4/after/crit_occurrences +0 -12
  348. data/test/results/omopv4/after/crit_within +0 -6
  349. data/test/results/omopv4/any_overlap/crit_basic1 +0 -15
  350. data/test/results/omopv4/any_overlap/crit_basic2 +0 -15
  351. data/test/results/omopv4/any_overlap/crit_occurrences1 +0 -2
  352. data/test/results/omopv4/any_overlap/crit_occurrences2 +0 -15
  353. data/test/results/omopv4/any_overlap/crit_within +0 -8
  354. data/test/results/omopv4/before/crit_at_least +0 -6
  355. data/test/results/omopv4/before/crit_basic1 +0 -48
  356. data/test/results/omopv4/before/crit_basic2 +0 -7
  357. data/test/results/omopv4/before/crit_occurrences +0 -13
  358. data/test/results/omopv4/before/crit_within +0 -18
  359. data/test/results/omopv4/co_reported/anno_1 +0 -43
  360. data/test/results/omopv4/co_reported/anno_2 +0 -66
  361. data/test/results/omopv4/complement/anno_duplicate_params +0 -52
  362. data/test/results/omopv4/complement/anno_invalid_params +0 -37
  363. data/test/results/omopv4/complement/anno_no_params +0 -18
  364. data/test/results/omopv4/complement/count_3way_intersect +0 -4
  365. data/test/results/omopv4/complement/count_3way_union +0 -4
  366. data/test/results/omopv4/complement/count_intersect +0 -3
  367. data/test/results/omopv4/complement/count_union +0 -3
  368. data/test/results/omopv4/complement/count_union_and_intersect +0 -4
  369. data/test/results/omopv4/complement/crit_3way_intersect +0 -1
  370. data/test/results/omopv4/complement/crit_3way_union +0 -1
  371. data/test/results/omopv4/complement/crit_basic1 +0 -33998
  372. data/test/results/omopv4/complement/crit_icd9_selector +0 -54
  373. data/test/results/omopv4/complement/crit_intersect +0 -1
  374. data/test/results/omopv4/complement/crit_union +0 -1
  375. data/test/results/omopv4/complement/crit_union_and_intersect +0 -1
  376. data/test/results/omopv4/complex/anno_1 +0 -85
  377. data/test/results/omopv4/complex/crit_1 +0 -2
  378. data/test/results/omopv4/complex/crit_2 +0 -2
  379. data/test/results/omopv4/complex/crit_3 +0 -2
  380. data/test/results/omopv4/complex/crit_4 +0 -5
  381. data/test/results/omopv4/complex/crit_5 +0 -6
  382. data/test/results/omopv4/complex/crit_6 +0 -28
  383. data/test/results/omopv4/complex/crit_7 +0 -46
  384. data/test/results/omopv4/complex/crit_out_of_order_ctes +0 -7
  385. data/test/results/omopv4/complex/scanno_1 +0 -3
  386. data/test/results/omopv4/concurrent_within/crit_icd9 +0 -54
  387. data/test/results/omopv4/concurrent_within/crit_icd9_and_place_of_service +0 -23
  388. data/test/results/omopv4/concurrent_within/crit_negative_start +0 -5
  389. data/test/results/omopv4/condition_type/anno_icd9 +0 -39
  390. data/test/results/omopv4/condition_type/count_condition_era +0 -2
  391. data/test/results/omopv4/condition_type/count_condition_era_30_day_window +0 -2
  392. data/test/results/omopv4/condition_type/count_ehr_problem_list +0 -2
  393. data/test/results/omopv4/condition_type/count_era_0 +0 -2
  394. data/test/results/omopv4/condition_type/count_inpatient +0 -3
  395. data/test/results/omopv4/condition_type/count_inpatient_detail +0 -2
  396. data/test/results/omopv4/condition_type/count_inpatient_header +0 -3
  397. data/test/results/omopv4/condition_type/count_inpatient_header_2 +0 -3
  398. data/test/results/omopv4/condition_type/count_inpatient_header_3 +0 -3
  399. data/test/results/omopv4/condition_type/count_inpatient_header_4 +0 -3
  400. data/test/results/omopv4/condition_type/count_inpatient_header_5 +0 -3
  401. data/test/results/omopv4/condition_type/count_inpatient_outpatient_detail +0 -3
  402. data/test/results/omopv4/condition_type/count_inpatient_primary +0 -2
  403. data/test/results/omopv4/condition_type/count_inpatient_primary_or_first +0 -3
  404. data/test/results/omopv4/condition_type/count_outpatient +0 -3
  405. data/test/results/omopv4/condition_type/count_outpatient_detail +0 -3
  406. data/test/results/omopv4/condition_type/count_outpatient_header +0 -2
  407. data/test/results/omopv4/condition_type/count_outpatient_primary +0 -3
  408. data/test/results/omopv4/condition_type/count_primary +0 -3
  409. data/test/results/omopv4/condition_type/crit_condition_era +0 -1
  410. data/test/results/omopv4/condition_type/crit_condition_era_30_day_window +0 -1
  411. data/test/results/omopv4/condition_type/crit_ehr_problem_list +0 -1
  412. data/test/results/omopv4/condition_type/crit_era_0 +0 -1
  413. data/test/results/omopv4/condition_type/crit_inpatient +0 -1
  414. data/test/results/omopv4/condition_type/crit_inpatient_detail +0 -1
  415. data/test/results/omopv4/condition_type/crit_inpatient_header +0 -1
  416. data/test/results/omopv4/condition_type/crit_inpatient_header_2 +0 -1
  417. data/test/results/omopv4/condition_type/crit_inpatient_header_3 +0 -1
  418. data/test/results/omopv4/condition_type/crit_inpatient_header_4 +0 -1
  419. data/test/results/omopv4/condition_type/crit_inpatient_header_5 +0 -1
  420. data/test/results/omopv4/condition_type/crit_inpatient_primary +0 -1
  421. data/test/results/omopv4/condition_type/crit_inpatient_primary_or_first +0 -1
  422. data/test/results/omopv4/condition_type/crit_outpatient +0 -1
  423. data/test/results/omopv4/condition_type/crit_outpatient_detail +0 -1
  424. data/test/results/omopv4/condition_type/crit_outpatient_header +0 -1
  425. data/test/results/omopv4/condition_type/crit_outpatient_primary +0 -1
  426. data/test/results/omopv4/condition_type/crit_primary +0 -1
  427. data/test/results/omopv4/contains/crit_1 +0 -5
  428. data/test/results/omopv4/contains/crit_2 +0 -2
  429. data/test/results/omopv4/contains/crit_3 +0 -2
  430. data/test/results/omopv4/count/anno_multiple_upstreams +0 -52
  431. data/test/results/omopv4/count/anno_no_upstream1 +0 -18
  432. data/test/results/omopv4/count/anno_no_upstream2 +0 -25
  433. data/test/results/omopv4/count/crit_icd9_ndc +0 -8
  434. data/test/results/omopv4/count/crit_ndc +0 -5
  435. data/test/results/omopv4/count/crit_person +0 -254
  436. data/test/results/omopv4/cpt/anno_icd9_upstream +0 -40
  437. data/test/results/omopv4/cpt/anno_invalid_code +0 -22
  438. data/test/results/omopv4/cpt/count_1 +0 -3
  439. data/test/results/omopv4/cpt/crit_1 +0 -174
  440. data/test/results/omopv4/cpt/crit_2 +0 -1
  441. data/test/results/omopv4/cpt/scanno_1 +0 -17
  442. data/test/results/omopv4/cpt_or_hcpcs/anno_bad_format +0 -25
  443. data/test/results/omopv4/cpt_or_hcpcs/count_1 +0 -3
  444. data/test/results/omopv4/cpt_or_hcpcs/crit_1 +0 -179
  445. data/test/results/omopv4/cpt_or_hcpcs/crit_2 +0 -1
  446. data/test/results/omopv4/date_range/anno_1 +0 -15
  447. data/test/results/omopv4/date_range/anno_extra_argument +0 -24
  448. data/test/results/omopv4/date_range/anno_invalid_argument +0 -25
  449. data/test/results/omopv4/date_range/anno_missing_argument1 +0 -20
  450. data/test/results/omopv4/date_range/anno_missing_argument2 +0 -20
  451. data/test/results/omopv4/date_range/anno_no_upstreams +0 -38
  452. data/test/results/omopv4/date_range/count_1 +0 -3
  453. data/test/results/omopv4/date_range/count_2 +0 -3
  454. data/test/results/omopv4/date_range/crit_1 +0 -1
  455. data/test/results/omopv4/date_range/crit_2 +0 -1
  456. data/test/results/omopv4/death/anno_multiple_upstreams +0 -50
  457. data/test/results/omopv4/death/anno_no_upstreams +0 -22
  458. data/test/results/omopv4/death/crit_basic +0 -5
  459. data/test/results/omopv4/death/crit_person +0 -5
  460. data/test/results/omopv4/drug_type_concept/anno_has_upstreams +0 -37
  461. data/test/results/omopv4/drug_type_concept/anno_no_arguments +0 -18
  462. data/test/results/omopv4/drug_type_concept/crit_basic1 +0 -5
  463. data/test/results/omopv4/drug_type_concept/crit_basic2 +0 -2
  464. data/test/results/omopv4/during/crit_1 +0 -15
  465. data/test/results/omopv4/during/crit_2 +0 -2
  466. data/test/results/omopv4/equal/crit_1 +0 -5
  467. data/test/results/omopv4/equal/crit_2 +0 -5
  468. data/test/results/omopv4/except/anno_1 +0 -42
  469. data/test/results/omopv4/except/anno_2 +0 -43
  470. data/test/results/omopv4/except/count_complex +0 -5
  471. data/test/results/omopv4/except/crit_412_cpt +0 -54
  472. data/test/results/omopv4/except/crit_412_inpatient +0 -46
  473. data/test/results/omopv4/except/crit_complex +0 -1
  474. data/test/results/omopv4/filter/crit_1 +0 -54
  475. data/test/results/omopv4/first/anno_argument +0 -25
  476. data/test/results/omopv4/first/anno_no_upstream +0 -18
  477. data/test/results/omopv4/first/crit_cpt +0 -207
  478. data/test/results/omopv4/first/crit_icd9 +0 -42
  479. data/test/results/omopv4/first/crit_union +0 -45
  480. data/test/results/omopv4/from/anno_has_upstreams +0 -39
  481. data/test/results/omopv4/from/anno_multiple_arguments +0 -24
  482. data/test/results/omopv4/from/count_condition_occurrence +0 -3
  483. data/test/results/omopv4/from/count_observation_period +0 -3
  484. data/test/results/omopv4/from/count_person +0 -3
  485. data/test/results/omopv4/from_seer_visits/anno_multiple_upstreams +0 -78
  486. data/test/results/omopv4/from_seer_visits/anno_no_upstream +0 -18
  487. data/test/results/omopv4/from_seer_visits/crit_1 +0 -6
  488. data/test/results/omopv4/from_seer_visits/crit_2 +0 -5
  489. data/test/results/omopv4/from_seer_visits/crit_3 +0 -5
  490. data/test/results/omopv4/from_seer_visits/crit_4 +0 -6
  491. data/test/results/omopv4/gender/anno_has_upstreams +0 -39
  492. data/test/results/omopv4/gender/crit_male +0 -130
  493. data/test/results/omopv4/hcpcs/anno_bad_format +0 -24
  494. data/test/results/omopv4/hcpcs/crit_A0382 +0 -9
  495. data/test/results/omopv4/icd10/anno_bad_format +0 -22
  496. data/test/results/omopv4/icd10/anno_has_upstreams +0 -40
  497. data/test/results/omopv4/icd10/crit_1 +0 -5
  498. data/test/results/omopv4/icd10pcs/anno_bad_format +0 -28
  499. data/test/results/omopv4/icd10pcs/anno_has_upstreams +0 -40
  500. data/test/results/omopv4/icd10pcs/crit_1 +0 -2
  501. data/test/results/omopv4/icd9/anno_empty_label +0 -15
  502. data/test/results/omopv4/icd9/anno_invalid_code +0 -21
  503. data/test/results/omopv4/icd9/crit_1 +0 -54
  504. data/test/results/omopv4/icd9_procedure/crit_1 +0 -5
  505. data/test/results/omopv4/intersect/anno_412_inpatient +0 -42
  506. data/test/results/omopv4/intersect/anno_has_arguments +0 -25
  507. data/test/results/omopv4/intersect/anno_no_upstream +0 -18
  508. data/test/results/omopv4/intersect/crit_412_inpatient +0 -12
  509. data/test/results/omopv4/intersect/crit_412_male +0 -182
  510. data/test/results/omopv4/intersect/crit_complex +0 -118
  511. data/test/results/omopv4/invalid/anno_bad_op +0 -55
  512. data/test/results/omopv4/invalid/scanno_1 +0 -23
  513. data/test/results/omopv4/last/crit_icd9 +0 -42
  514. data/test/results/omopv4/loinc/crit_basic +0 -5
  515. data/test/results/omopv4/ndc/crit_basic +0 -5
  516. data/test/results/omopv4/numeric/anno_multiple_upstreams +0 -59
  517. data/test/results/omopv4/numeric/num_values_1 +0 -254
  518. data/test/results/omopv4/numeric/num_values_2 +0 -5
  519. data/test/results/omopv4/numeric/num_values_3 +0 -5
  520. data/test/results/omopv4/observation_period/anno_has_arguments +0 -36
  521. data/test/results/omopv4/observation_period/anno_multiple_upstreams +0 -51
  522. data/test/results/omopv4/observation_period/count_all_periods +0 -3
  523. data/test/results/omopv4/observation_period/crit_female +0 -2
  524. data/test/results/omopv4/observation_period/crit_icd9 +0 -5
  525. data/test/results/omopv4/observation_period/crit_male +0 -5
  526. data/test/results/omopv4/occurrence/anno_no_upstream +0 -22
  527. data/test/results/omopv4/occurrence/cc_412_410 +0 -1
  528. data/test/results/omopv4/occurrence/count_412_410 +0 -3
  529. data/test/results/omopv4/occurrence/crit_1 +0 -16
  530. data/test/results/omopv4/occurrence/crit_2 +0 -2
  531. data/test/results/omopv4/occurrence/crit_3 +0 -42
  532. data/test/results/omopv4/one_in_two_out/anno_has_arguments +0 -27
  533. data/test/results/omopv4/one_in_two_out/anno_multiple_upstreams +0 -54
  534. data/test/results/omopv4/one_in_two_out/anno_no_upstream +0 -20
  535. data/test/results/omopv4/one_in_two_out/count_1 +0 -3
  536. data/test/results/omopv4/one_in_two_out/crit_hcpcs +0 -7
  537. data/test/results/omopv4/one_in_two_out/crit_icd9 +0 -21
  538. data/test/results/omopv4/overlapped_by/crit_1 +0 -5
  539. data/test/results/omopv4/overlapped_by/crit_2 +0 -2
  540. data/test/results/omopv4/overlapped_by/crit_3 +0 -5
  541. data/test/results/omopv4/overlapped_by/crit_4 +0 -2
  542. data/test/results/omopv4/overlaps/crit_1 +0 -5
  543. data/test/results/omopv4/overlaps/crit_2 +0 -2
  544. data/test/results/omopv4/overlaps/crit_3 +0 -5
  545. data/test/results/omopv4/overlaps/crit_4 +0 -2
  546. data/test/results/omopv4/person/anno_has_arguments +0 -22
  547. data/test/results/omopv4/person/anno_multiple_upstreams +0 -52
  548. data/test/results/omopv4/person/count_2 +0 -3
  549. data/test/results/omopv4/person/crit_1 +0 -42
  550. data/test/results/omopv4/person/crit_2 +0 -1
  551. data/test/results/omopv4/person_filter/count_1 +0 -4
  552. data/test/results/omopv4/person_filter/crit_1 +0 -54
  553. data/test/results/omopv4/person_filter/crit_2 +0 -5
  554. data/test/results/omopv4/person_filter/crit_3 +0 -32
  555. data/test/results/omopv4/person_filter/crit_4 +0 -52
  556. data/test/results/omopv4/person_filter/crit_5 +0 -1
  557. data/test/results/omopv4/place_of_service_code/anno_has_upstreams +0 -37
  558. data/test/results/omopv4/place_of_service_code/anno_no_arguments +0 -18
  559. data/test/results/omopv4/place_of_service_code/crit_basic +0 -174
  560. data/test/results/omopv4/place_of_service_filter/anno_1 +0 -29
  561. data/test/results/omopv4/procedure_occurrence/anno_has_arguments +0 -37
  562. data/test/results/omopv4/procedure_occurrence/anno_multiple_upstreams +0 -51
  563. data/test/results/omopv4/procedure_occurrence/count_gender +0 -3
  564. data/test/results/omopv4/procedure_occurrence/count_icd9 +0 -3
  565. data/test/results/omopv4/procedure_occurrence/count_started_by +0 -3
  566. data/test/results/omopv4/procedure_occurrence/crit_gender +0 -1
  567. data/test/results/omopv4/procedure_occurrence/crit_icd9 +0 -1
  568. data/test/results/omopv4/procedure_occurrence/crit_started_by +0 -1
  569. data/test/results/omopv4/provenance/anno_1 +0 -29
  570. data/test/results/omopv4/provider_filter/anno_1 +0 -29
  571. data/test/results/omopv4/race/anno_1 +0 -37
  572. data/test/results/omopv4/race/anno_2 +0 -18
  573. data/test/results/omopv4/race/crit_1 +0 -28
  574. data/test/results/omopv4/read/anno_1 +0 -21
  575. data/test/results/omopv4/read/crit_1 +0 -2
  576. data/test/results/omopv4/recall/anno_1 +0 -54
  577. data/test/results/omopv4/recall/anno_2 +0 -66
  578. data/test/results/omopv4/recall/anno_3 +0 -20
  579. data/test/results/omopv4/recall/anno_4 +0 -18
  580. data/test/results/omopv4/recall/anno_5 +0 -24
  581. data/test/results/omopv4/recall/anno_6 +0 -270
  582. data/test/results/omopv4/recall/crit_1 +0 -21
  583. data/test/results/omopv4/recall/crit_2 +0 -54
  584. data/test/results/omopv4/recall/crit_3 +0 -2
  585. data/test/results/omopv4/recall/crit_cte_1 +0 -42
  586. data/test/results/omopv4/recall/crit_cte_2 +0 -42
  587. data/test/results/omopv4/recall/crit_nested_perm_0 +0 -54
  588. data/test/results/omopv4/revenue_code/crit_1 +0 -2
  589. data/test/results/omopv4/revenue_code/crit_basic +0 -2
  590. data/test/results/omopv4/revenue_code/domains_1 +0 -3
  591. data/test/results/omopv4/revenue_code/domains_drg100 +0 -3
  592. data/test/results/omopv4/rxnorm/crit_1 +0 -5
  593. data/test/results/omopv4/snomed/crit_1 +0 -84
  594. data/test/results/omopv4/started_by/crit_1 +0 -5
  595. data/test/results/omopv4/started_by/crit_2 +0 -2
  596. data/test/results/omopv4/started_by/crit_3 +0 -2
  597. data/test/results/omopv4/sum/anno_1 +0 -18
  598. data/test/results/omopv4/sum/anno_2 +0 -36
  599. data/test/results/omopv4/sum/num_1 +0 -5
  600. data/test/results/omopv4/sum/num_2 +0 -8
  601. data/test/results/omopv4/sum/num_3 +0 -254
  602. data/test/results/omopv4/time_window/anno_1 +0 -20
  603. data/test/results/omopv4/time_window/anno_2 +0 -40
  604. data/test/results/omopv4/time_window/anno_3 +0 -36
  605. data/test/results/omopv4/time_window/anno_4 +0 -39
  606. data/test/results/omopv4/time_window/anno_5 +0 -57
  607. data/test/results/omopv4/time_window/crit_1 +0 -54
  608. data/test/results/omopv4/time_window/crit_2 +0 -174
  609. data/test/results/omopv4/time_window/crit_3 +0 -54
  610. data/test/results/omopv4/time_window/crit_4 +0 -174
  611. data/test/results/omopv4/trim_date_end/crit_1 +0 -5
  612. data/test/results/omopv4/trim_date_end/crit_2 +0 -2
  613. data/test/results/omopv4/trim_date_end/crit_3 +0 -6
  614. data/test/results/omopv4/trim_date_end/crit_at_least +0 -5
  615. data/test/results/omopv4/trim_date_end/crit_occurrences_1 +0 -2
  616. data/test/results/omopv4/trim_date_end/crit_occurrences_2 +0 -6
  617. data/test/results/omopv4/trim_date_end/crit_within +0 -5
  618. data/test/results/omopv4/trim_date_start/crit_1 +0 -5
  619. data/test/results/omopv4/trim_date_start/crit_2 +0 -2
  620. data/test/results/omopv4/trim_date_start/crit_3 +0 -6
  621. data/test/results/omopv4/trim_date_start/crit_at_least +0 -5
  622. data/test/results/omopv4/trim_date_start/crit_occurrences_1 +0 -2
  623. data/test/results/omopv4/trim_date_start/crit_occurrences_2 +0 -6
  624. data/test/results/omopv4/trim_date_start/crit_within +0 -5
  625. data/test/results/omopv4/union/anno_1 +0 -43
  626. data/test/results/omopv4/union/anno_2 +0 -74
  627. data/test/results/omopv4/union/anno_3 +0 -18
  628. data/test/results/omopv4/union/anno_4 +0 -25
  629. data/test/results/omopv4/union/anno_5 +0 -33
  630. data/test/results/omopv4/union/anno_6 +0 -46
  631. data/test/results/omopv4/union/cc_1 +0 -1
  632. data/test/results/omopv4/union/cc_2 +0 -1
  633. data/test/results/omopv4/union/cc_3 +0 -1
  634. data/test/results/omopv4/union/cc_4 +0 -1
  635. data/test/results/omopv4/union/cc_5 +0 -1
  636. data/test/results/omopv4/union/count_1 +0 -3
  637. data/test/results/omopv4/union/count_2 +0 -3
  638. data/test/results/omopv4/union/count_3 +0 -3
  639. data/test/results/omopv4/union/count_4 +0 -3
  640. data/test/results/omopv4/union/count_5 +0 -4
  641. data/test/results/omopv4/union/scanno_1 +0 -22
  642. data/test/results/omopv4/union/scanno_2 +0 -36
  643. data/test/results/omopv4/visit_occurrence/anno_1 +0 -52
  644. data/test/results/omopv4/visit_occurrence/anno_2 +0 -37
  645. data/test/results/omopv4/visit_occurrence/crit_1 +0 -54
  646. data/test/results/omopv4/visit_occurrence/crit_2 +0 -7566
  647. data/test/results/omopv4/visit_occurrence/crit_3 +0 -14935
  648. data/test/results/omopv4_plus/after/anno_1 +0 -25
  649. data/test/results/omopv4_plus/after/anno_2 +0 -48
  650. data/test/results/omopv4_plus/after/anno_3 +0 -34
  651. data/test/results/omopv4_plus/after/anno_4 +0 -60
  652. data/test/results/omopv4_plus/after/anno_5 +0 -68
  653. data/test/results/omopv4_plus/after/anno_6 +0 -60
  654. data/test/results/omopv4_plus/after/crit_at_least +0 -7
  655. data/test/results/omopv4_plus/after/crit_basic +0 -32
  656. data/test/results/omopv4_plus/after/crit_occurrences +0 -12
  657. data/test/results/omopv4_plus/after/crit_within +0 -5
  658. data/test/results/omopv4_plus/any_overlap/crit_basic1 +0 -14
  659. data/test/results/omopv4_plus/any_overlap/crit_basic2 +0 -14
  660. data/test/results/omopv4_plus/any_overlap/crit_occurrences1 +0 -2
  661. data/test/results/omopv4_plus/any_overlap/crit_occurrences2 +0 -14
  662. data/test/results/omopv4_plus/any_overlap/crit_within +0 -8
  663. data/test/results/omopv4_plus/before/crit_at_least +0 -6
  664. data/test/results/omopv4_plus/before/crit_basic1 +0 -48
  665. data/test/results/omopv4_plus/before/crit_basic2 +0 -8
  666. data/test/results/omopv4_plus/before/crit_occurrences +0 -13
  667. data/test/results/omopv4_plus/before/crit_within +0 -17
  668. data/test/results/omopv4_plus/co_reported/anno_1 +0 -43
  669. data/test/results/omopv4_plus/co_reported/anno_2 +0 -66
  670. data/test/results/omopv4_plus/co_reported/anno_3 +0 -47
  671. data/test/results/omopv4_plus/complement/anno_duplicate_params +0 -52
  672. data/test/results/omopv4_plus/complement/anno_invalid_params +0 -37
  673. data/test/results/omopv4_plus/complement/anno_no_params +0 -18
  674. data/test/results/omopv4_plus/complement/count_3way_intersect +0 -4
  675. data/test/results/omopv4_plus/complement/count_3way_union +0 -4
  676. data/test/results/omopv4_plus/complement/count_intersect +0 -3
  677. data/test/results/omopv4_plus/complement/count_union +0 -3
  678. data/test/results/omopv4_plus/complement/count_union_and_intersect +0 -4
  679. data/test/results/omopv4_plus/complement/crit_basic1 +0 -52483
  680. data/test/results/omopv4_plus/complement/crit_icd9_selector +0 -52
  681. data/test/results/omopv4_plus/complex/anno_1 +0 -85
  682. data/test/results/omopv4_plus/complex/crit_1 +0 -2
  683. data/test/results/omopv4_plus/complex/crit_2 +0 -2
  684. data/test/results/omopv4_plus/complex/crit_3 +0 -2
  685. data/test/results/omopv4_plus/complex/crit_4 +0 -2
  686. data/test/results/omopv4_plus/complex/crit_5 +0 -2
  687. data/test/results/omopv4_plus/complex/crit_6 +0 -24
  688. data/test/results/omopv4_plus/complex/crit_7 +0 -45
  689. data/test/results/omopv4_plus/complex/crit_out_of_order_ctes +0 -15
  690. data/test/results/omopv4_plus/complex/scanno_1 +0 -108
  691. data/test/results/omopv4_plus/concurrent_within/crit_icd9 +0 -52
  692. data/test/results/omopv4_plus/concurrent_within/crit_icd9_and_place_of_service +0 -21
  693. data/test/results/omopv4_plus/concurrent_within/crit_negative_start +0 -5
  694. data/test/results/omopv4_plus/condition_type/anno_icd9 +0 -39
  695. data/test/results/omopv4_plus/condition_type/count_condition_era +0 -2
  696. data/test/results/omopv4_plus/condition_type/count_condition_era_30_day_window +0 -2
  697. data/test/results/omopv4_plus/condition_type/count_ehr_problem_list +0 -2
  698. data/test/results/omopv4_plus/condition_type/count_era_0 +0 -2
  699. data/test/results/omopv4_plus/condition_type/count_inpatient +0 -3
  700. data/test/results/omopv4_plus/condition_type/count_inpatient_detail +0 -2
  701. data/test/results/omopv4_plus/condition_type/count_inpatient_header +0 -3
  702. data/test/results/omopv4_plus/condition_type/count_inpatient_header_2 +0 -3
  703. data/test/results/omopv4_plus/condition_type/count_inpatient_header_3 +0 -3
  704. data/test/results/omopv4_plus/condition_type/count_inpatient_header_4 +0 -3
  705. data/test/results/omopv4_plus/condition_type/count_inpatient_header_5 +0 -3
  706. data/test/results/omopv4_plus/condition_type/count_inpatient_outpatient_detail +0 -3
  707. data/test/results/omopv4_plus/condition_type/count_inpatient_primary +0 -3
  708. data/test/results/omopv4_plus/condition_type/count_inpatient_primary_or_first +0 -3
  709. data/test/results/omopv4_plus/condition_type/count_outpatient +0 -3
  710. data/test/results/omopv4_plus/condition_type/count_outpatient_detail +0 -2
  711. data/test/results/omopv4_plus/condition_type/count_outpatient_header +0 -3
  712. data/test/results/omopv4_plus/condition_type/count_outpatient_primary +0 -3
  713. data/test/results/omopv4_plus/condition_type/count_primary +0 -3
  714. data/test/results/omopv4_plus/contains/crit_1 +0 -5
  715. data/test/results/omopv4_plus/contains/crit_2 +0 -2
  716. data/test/results/omopv4_plus/contains/crit_3 +0 -2
  717. data/test/results/omopv4_plus/count/anno_multiple_upstreams +0 -52
  718. data/test/results/omopv4_plus/count/anno_no_upstream1 +0 -18
  719. data/test/results/omopv4_plus/count/anno_no_upstream2 +0 -25
  720. data/test/results/omopv4_plus/count/crit_icd9_ndc +0 -5
  721. data/test/results/omopv4_plus/count/crit_ndc +0 -2
  722. data/test/results/omopv4_plus/count/crit_person +0 -254
  723. data/test/results/omopv4_plus/cpt/anno_icd9_upstream +0 -40
  724. data/test/results/omopv4_plus/cpt/anno_invalid_code +0 -22
  725. data/test/results/omopv4_plus/cpt/count_1 +0 -3
  726. data/test/results/omopv4_plus/cpt/crit_1 +0 -158
  727. data/test/results/omopv4_plus/cpt/scanno_1 +0 -17
  728. data/test/results/omopv4_plus/cpt_or_hcpcs/anno_bad_format +0 -25
  729. data/test/results/omopv4_plus/cpt_or_hcpcs/count_1 +0 -3
  730. data/test/results/omopv4_plus/cpt_or_hcpcs/crit_1 +0 -161
  731. data/test/results/omopv4_plus/date_range/anno_1 +0 -15
  732. data/test/results/omopv4_plus/date_range/anno_extra_argument +0 -24
  733. data/test/results/omopv4_plus/date_range/anno_invalid_argument +0 -25
  734. data/test/results/omopv4_plus/date_range/anno_missing_argument1 +0 -20
  735. data/test/results/omopv4_plus/date_range/anno_missing_argument2 +0 -20
  736. data/test/results/omopv4_plus/date_range/anno_no_upstreams +0 -38
  737. data/test/results/omopv4_plus/date_range/count_1 +0 -3
  738. data/test/results/omopv4_plus/date_range/count_2 +0 -3
  739. data/test/results/omopv4_plus/death/anno_multiple_upstreams +0 -50
  740. data/test/results/omopv4_plus/death/anno_no_upstreams +0 -22
  741. data/test/results/omopv4_plus/death/crit_basic +0 -14
  742. data/test/results/omopv4_plus/death/crit_person +0 -14
  743. data/test/results/omopv4_plus/drug_type_concept/anno_has_upstreams +0 -37
  744. data/test/results/omopv4_plus/drug_type_concept/anno_no_arguments +0 -18
  745. data/test/results/omopv4_plus/drug_type_concept/crit_basic1 +0 -2
  746. data/test/results/omopv4_plus/drug_type_concept/crit_basic2 +0 -2
  747. data/test/results/omopv4_plus/during/crit_1 +0 -14
  748. data/test/results/omopv4_plus/during/crit_2 +0 -2
  749. data/test/results/omopv4_plus/equal/crit_1 +0 -2
  750. data/test/results/omopv4_plus/equal/crit_2 +0 -2
  751. data/test/results/omopv4_plus/except/anno_1 +0 -42
  752. data/test/results/omopv4_plus/except/anno_2 +0 -43
  753. data/test/results/omopv4_plus/except/count_complex +0 -5
  754. data/test/results/omopv4_plus/except/crit_412_cpt +0 -52
  755. data/test/results/omopv4_plus/except/crit_412_inpatient +0 -45
  756. data/test/results/omopv4_plus/filter/crit_1 +0 -52
  757. data/test/results/omopv4_plus/first/anno_argument +0 -25
  758. data/test/results/omopv4_plus/first/anno_no_upstream +0 -18
  759. data/test/results/omopv4_plus/first/crit_cpt +0 -180
  760. data/test/results/omopv4_plus/first/crit_icd9 +0 -41
  761. data/test/results/omopv4_plus/first/crit_union +0 -52
  762. data/test/results/omopv4_plus/from/anno_has_upstreams +0 -39
  763. data/test/results/omopv4_plus/from/anno_multiple_arguments +0 -24
  764. data/test/results/omopv4_plus/from/count_condition_occurrence +0 -3
  765. data/test/results/omopv4_plus/from/count_observation_period +0 -3
  766. data/test/results/omopv4_plus/from/count_person +0 -3
  767. data/test/results/omopv4_plus/from_seer_visits/anno_multiple_upstreams +0 -78
  768. data/test/results/omopv4_plus/from_seer_visits/anno_no_upstream +0 -18
  769. data/test/results/omopv4_plus/from_seer_visits/crit_1 +0 -2
  770. data/test/results/omopv4_plus/from_seer_visits/crit_2 +0 -2
  771. data/test/results/omopv4_plus/from_seer_visits/crit_3 +0 -2
  772. data/test/results/omopv4_plus/from_seer_visits/crit_4 +0 -2
  773. data/test/results/omopv4_plus/gender/anno_has_upstreams +0 -39
  774. data/test/results/omopv4_plus/gender/crit_male +0 -128
  775. data/test/results/omopv4_plus/hcpcs/anno_bad_format +0 -24
  776. data/test/results/omopv4_plus/hcpcs/crit_A0382 +0 -7
  777. data/test/results/omopv4_plus/icd10/anno_bad_format +0 -22
  778. data/test/results/omopv4_plus/icd10/anno_has_upstreams +0 -40
  779. data/test/results/omopv4_plus/icd10/crit_1 +0 -2
  780. data/test/results/omopv4_plus/icd10pcs/anno_bad_format +0 -28
  781. data/test/results/omopv4_plus/icd10pcs/anno_has_upstreams +0 -40
  782. data/test/results/omopv4_plus/icd10pcs/crit_1 +0 -2
  783. data/test/results/omopv4_plus/icd9/anno_empty_label +0 -15
  784. data/test/results/omopv4_plus/icd9/anno_invalid_code +0 -21
  785. data/test/results/omopv4_plus/icd9/anno_valid_code +0 -3
  786. data/test/results/omopv4_plus/icd9/crit_1 +0 -52
  787. data/test/results/omopv4_plus/icd9_procedure/crit_1 +0 -5
  788. data/test/results/omopv4_plus/intersect/anno_412_inpatient +0 -42
  789. data/test/results/omopv4_plus/intersect/anno_has_arguments +0 -25
  790. data/test/results/omopv4_plus/intersect/anno_no_upstream +0 -18
  791. data/test/results/omopv4_plus/intersect/crit_412_inpatient +0 -11
  792. data/test/results/omopv4_plus/intersect/crit_412_male +0 -178
  793. data/test/results/omopv4_plus/intersect/crit_complex +0 -110
  794. data/test/results/omopv4_plus/invalid/anno_bad_op +0 -55
  795. data/test/results/omopv4_plus/invalid/scanno_1 +0 -23
  796. data/test/results/omopv4_plus/last/crit_icd9 +0 -41
  797. data/test/results/omopv4_plus/loinc/crit_basic +0 -2
  798. data/test/results/omopv4_plus/ndc/crit_basic +0 -2
  799. data/test/results/omopv4_plus/ndc/results_1 +0 -41
  800. data/test/results/omopv4_plus/numeric/anno_multiple_upstreams +0 -59
  801. data/test/results/omopv4_plus/numeric/num_values_1 +0 -254
  802. data/test/results/omopv4_plus/numeric/num_values_2 +0 -5
  803. data/test/results/omopv4_plus/numeric/num_values_3 +0 -5
  804. data/test/results/omopv4_plus/observation_period/anno_has_arguments +0 -36
  805. data/test/results/omopv4_plus/observation_period/anno_multiple_upstreams +0 -51
  806. data/test/results/omopv4_plus/observation_period/count_all_periods +0 -3
  807. data/test/results/omopv4_plus/observation_period/crit_female +0 -87
  808. data/test/results/omopv4_plus/observation_period/crit_icd9 +0 -28
  809. data/test/results/omopv4_plus/observation_period/crit_male +0 -75
  810. data/test/results/omopv4_plus/occurrence/anno_no_upstream +0 -22
  811. data/test/results/omopv4_plus/occurrence/count_412_410 +0 -3
  812. data/test/results/omopv4_plus/occurrence/crit_1 +0 -15
  813. data/test/results/omopv4_plus/occurrence/crit_2 +0 -2
  814. data/test/results/omopv4_plus/occurrence/crit_3 +0 -41
  815. data/test/results/omopv4_plus/one_in_two_out/anno_has_arguments +0 -27
  816. data/test/results/omopv4_plus/one_in_two_out/anno_multiple_upstreams +0 -54
  817. data/test/results/omopv4_plus/one_in_two_out/anno_no_upstream +0 -20
  818. data/test/results/omopv4_plus/one_in_two_out/count_1 +0 -3
  819. data/test/results/omopv4_plus/one_in_two_out/count_same_as_1 +0 -3
  820. data/test/results/omopv4_plus/one_in_two_out/crit_hcpcs +0 -2
  821. data/test/results/omopv4_plus/one_in_two_out/crit_icd9 +0 -19
  822. data/test/results/omopv4_plus/one_in_two_out/results_1 +0 -803
  823. data/test/results/omopv4_plus/one_in_two_out/results_2 +0 -803
  824. data/test/results/omopv4_plus/overlapped_by/crit_1 +0 -5
  825. data/test/results/omopv4_plus/overlapped_by/crit_2 +0 -2
  826. data/test/results/omopv4_plus/overlapped_by/crit_3 +0 -5
  827. data/test/results/omopv4_plus/overlapped_by/crit_4 +0 -2
  828. data/test/results/omopv4_plus/overlaps/crit_1 +0 -5
  829. data/test/results/omopv4_plus/overlaps/crit_2 +0 -2
  830. data/test/results/omopv4_plus/overlaps/crit_3 +0 -5
  831. data/test/results/omopv4_plus/overlaps/crit_4 +0 -2
  832. data/test/results/omopv4_plus/person/anno_has_arguments +0 -22
  833. data/test/results/omopv4_plus/person/anno_multiple_upstreams +0 -52
  834. data/test/results/omopv4_plus/person/count_2 +0 -3
  835. data/test/results/omopv4_plus/person/crit_1 +0 -41
  836. data/test/results/omopv4_plus/person_filter/count_1 +0 -4
  837. data/test/results/omopv4_plus/person_filter/crit_1 +0 -52
  838. data/test/results/omopv4_plus/person_filter/crit_2 +0 -10
  839. data/test/results/omopv4_plus/person_filter/crit_3 +0 -32
  840. data/test/results/omopv4_plus/person_filter/crit_4 +0 -50
  841. data/test/results/omopv4_plus/place_of_service_code/anno_has_upstreams +0 -37
  842. data/test/results/omopv4_plus/place_of_service_code/anno_no_arguments +0 -18
  843. data/test/results/omopv4_plus/place_of_service_code/crit_basic +0 -157
  844. data/test/results/omopv4_plus/place_of_service_filter/anno_1 +0 -29
  845. data/test/results/omopv4_plus/procedure_occurrence/anno_has_arguments +0 -37
  846. data/test/results/omopv4_plus/procedure_occurrence/anno_multiple_upstreams +0 -51
  847. data/test/results/omopv4_plus/procedure_occurrence/count_gender +0 -3
  848. data/test/results/omopv4_plus/procedure_occurrence/count_icd9 +0 -3
  849. data/test/results/omopv4_plus/procedure_occurrence/count_started_by +0 -3
  850. data/test/results/omopv4_plus/provenance/anno_1 +0 -29
  851. data/test/results/omopv4_plus/provenance/anno_bad_keyword +0 -38
  852. data/test/results/omopv4_plus/provenance/count_1 +0 -3
  853. data/test/results/omopv4_plus/provenance/count_2 +0 -3
  854. data/test/results/omopv4_plus/provider_filter/anno_1 +0 -29
  855. data/test/results/omopv4_plus/race/anno_1 +0 -37
  856. data/test/results/omopv4_plus/race/anno_2 +0 -18
  857. data/test/results/omopv4_plus/race/crit_1 +0 -32
  858. data/test/results/omopv4_plus/read/anno_1 +0 -15
  859. data/test/results/omopv4_plus/read/crit_1 +0 -2
  860. data/test/results/omopv4_plus/recall/anno_1 +0 -54
  861. data/test/results/omopv4_plus/recall/anno_2 +0 -66
  862. data/test/results/omopv4_plus/recall/anno_3 +0 -20
  863. data/test/results/omopv4_plus/recall/anno_4 +0 -18
  864. data/test/results/omopv4_plus/recall/anno_5 +0 -24
  865. data/test/results/omopv4_plus/recall/anno_6 +0 -270
  866. data/test/results/omopv4_plus/recall/crit_1 +0 -19
  867. data/test/results/omopv4_plus/recall/crit_2 +0 -52
  868. data/test/results/omopv4_plus/recall/crit_3 +0 -2
  869. data/test/results/omopv4_plus/recall/crit_cte_1 +0 -41
  870. data/test/results/omopv4_plus/recall/crit_cte_2 +0 -41
  871. data/test/results/omopv4_plus/recall/crit_nested_perm_0 +0 -52
  872. data/test/results/omopv4_plus/revenue_code/crit_1 +0 -2
  873. data/test/results/omopv4_plus/revenue_code/crit_basic +0 -2
  874. data/test/results/omopv4_plus/revenue_code/domains_1 +0 -3
  875. data/test/results/omopv4_plus/revenue_code/domains_drg100 +0 -3
  876. data/test/results/omopv4_plus/rxnorm/crit_1 +0 -2
  877. data/test/results/omopv4_plus/snomed/crit_1 +0 -2
  878. data/test/results/omopv4_plus/started_by/crit_1 +0 -5
  879. data/test/results/omopv4_plus/started_by/crit_2 +0 -2
  880. data/test/results/omopv4_plus/started_by/crit_3 +0 -2
  881. data/test/results/omopv4_plus/sum/anno_1 +0 -18
  882. data/test/results/omopv4_plus/sum/anno_2 +0 -36
  883. data/test/results/omopv4_plus/sum/num_1 +0 -2
  884. data/test/results/omopv4_plus/sum/num_2 +0 -5
  885. data/test/results/omopv4_plus/sum/num_3 +0 -254
  886. data/test/results/omopv4_plus/time_window/anno_1 +0 -20
  887. data/test/results/omopv4_plus/time_window/anno_2 +0 -40
  888. data/test/results/omopv4_plus/time_window/anno_3 +0 -36
  889. data/test/results/omopv4_plus/time_window/anno_4 +0 -39
  890. data/test/results/omopv4_plus/time_window/anno_5 +0 -57
  891. data/test/results/omopv4_plus/time_window/crit_1 +0 -52
  892. data/test/results/omopv4_plus/time_window/crit_2 +0 -157
  893. data/test/results/omopv4_plus/time_window/crit_3 +0 -52
  894. data/test/results/omopv4_plus/time_window/crit_4 +0 -157
  895. data/test/results/omopv4_plus/trim_date_end/crit_1 +0 -5
  896. data/test/results/omopv4_plus/trim_date_end/crit_2 +0 -2
  897. data/test/results/omopv4_plus/trim_date_end/crit_3 +0 -6
  898. data/test/results/omopv4_plus/trim_date_end/crit_at_least +0 -5
  899. data/test/results/omopv4_plus/trim_date_end/crit_occurrences_1 +0 -2
  900. data/test/results/omopv4_plus/trim_date_end/crit_occurrences_2 +0 -6
  901. data/test/results/omopv4_plus/trim_date_end/crit_within +0 -5
  902. data/test/results/omopv4_plus/trim_date_start/crit_1 +0 -5
  903. data/test/results/omopv4_plus/trim_date_start/crit_2 +0 -2
  904. data/test/results/omopv4_plus/trim_date_start/crit_3 +0 -6
  905. data/test/results/omopv4_plus/trim_date_start/crit_at_least +0 -5
  906. data/test/results/omopv4_plus/trim_date_start/crit_occurrences_1 +0 -2
  907. data/test/results/omopv4_plus/trim_date_start/crit_occurrences_2 +0 -6
  908. data/test/results/omopv4_plus/trim_date_start/crit_within +0 -5
  909. data/test/results/omopv4_plus/union/anno_1 +0 -43
  910. data/test/results/omopv4_plus/union/anno_2 +0 -74
  911. data/test/results/omopv4_plus/union/anno_3 +0 -18
  912. data/test/results/omopv4_plus/union/anno_4 +0 -25
  913. data/test/results/omopv4_plus/union/anno_5 +0 -33
  914. data/test/results/omopv4_plus/union/anno_6 +0 -46
  915. data/test/results/omopv4_plus/union/count_1 +0 -3
  916. data/test/results/omopv4_plus/union/count_2 +0 -3
  917. data/test/results/omopv4_plus/union/count_3 +0 -3
  918. data/test/results/omopv4_plus/union/count_4 +0 -3
  919. data/test/results/omopv4_plus/union/count_5 +0 -4
  920. data/test/results/omopv4_plus/union/optcc_1 +0 -3
  921. data/test/results/omopv4_plus/union/optcc_2 +0 -3
  922. data/test/results/omopv4_plus/union/optcc_3 +0 -3
  923. data/test/results/omopv4_plus/union/optcc_4 +0 -3
  924. data/test/results/omopv4_plus/union/optcc_5 +0 -3
  925. data/test/results/omopv4_plus/union/optcc_6 +0 -3
  926. data/test/results/omopv4_plus/union/scanno_1 +0 -22
  927. data/test/results/omopv4_plus/union/scanno_2 +0 -36
  928. data/test/results/omopv4_plus/visit_occurrence/anno_1 +0 -52
  929. data/test/results/omopv4_plus/visit_occurrence/anno_2 +0 -37
  930. data/test/results/omopv4_plus/visit_occurrence/crit_1 +0 -52
  931. data/test/results/omopv4_plus/visit_occurrence/crit_2 +0 -22945
  932. data/test/results/omopv4_plus/visit_occurrence/crit_3 +0 -46851
  933. data/test/statements/after/anno_1 +0 -7
  934. data/test/statements/after/anno_2 +0 -16
  935. data/test/statements/after/anno_3 +0 -9
  936. data/test/statements/after/anno_4 +0 -19
  937. data/test/statements/after/anno_5 +0 -21
  938. data/test/statements/after/anno_6 +0 -16
  939. data/test/statements/after/crit_at_least +0 -21
  940. data/test/statements/after/crit_basic +0 -20
  941. data/test/statements/after/crit_occurrences +0 -21
  942. data/test/statements/after/crit_within +0 -21
  943. data/test/statements/any_overlap/crit_basic1 +0 -16
  944. data/test/statements/any_overlap/crit_basic2 +0 -16
  945. data/test/statements/any_overlap/crit_occurrences1 +0 -17
  946. data/test/statements/any_overlap/crit_occurrences2 +0 -17
  947. data/test/statements/any_overlap/crit_within +0 -17
  948. data/test/statements/before/crit_at_least +0 -14
  949. data/test/statements/before/crit_basic1 +0 -13
  950. data/test/statements/before/crit_basic2 +0 -16
  951. data/test/statements/before/crit_occurrences +0 -14
  952. data/test/statements/before/crit_within +0 -14
  953. data/test/statements/co_reported/anno_1 +0 -13
  954. data/test/statements/co_reported/anno_2 +0 -21
  955. data/test/statements/co_reported/anno_3 +0 -14
  956. data/test/statements/complement/anno_duplicate_params +0 -11
  957. data/test/statements/complement/anno_invalid_params +0 -8
  958. data/test/statements/complement/anno_no_params +0 -3
  959. data/test/statements/complement/count_3way_intersect +0 -24
  960. data/test/statements/complement/count_3way_union +0 -18
  961. data/test/statements/complement/count_intersect +0 -17
  962. data/test/statements/complement/count_union +0 -14
  963. data/test/statements/complement/count_union_and_intersect +0 -27
  964. data/test/statements/complement/crit_basic1 +0 -7
  965. data/test/statements/complement/crit_icd9_selector +0 -10
  966. data/test/statements/complex/anno_1 +0 -29
  967. data/test/statements/complex/crit_1 +0 -278
  968. data/test/statements/complex/crit_2 +0 -43
  969. data/test/statements/complex/crit_3 +0 -54
  970. data/test/statements/complex/crit_4 +0 -17
  971. data/test/statements/complex/crit_5 +0 -17
  972. data/test/statements/complex/crit_6 +0 -20
  973. data/test/statements/complex/crit_7 +0 -14
  974. data/test/statements/complex/crit_out_of_order_ctes +0 -39
  975. data/test/statements/complex/scanno_1 +0 -1508
  976. data/test/statements/concurrent_within/crit_icd9 +0 -11
  977. data/test/statements/concurrent_within/crit_icd9_and_place_of_service +0 -15
  978. data/test/statements/concurrent_within/crit_negative_start +0 -15
  979. data/test/statements/condition_type/anno_icd9 +0 -7
  980. data/test/statements/condition_type/count_condition_era +0 -4
  981. data/test/statements/condition_type/count_condition_era_30_day_window +0 -4
  982. data/test/statements/condition_type/count_ehr_problem_list +0 -4
  983. data/test/statements/condition_type/count_era_0 +0 -4
  984. data/test/statements/condition_type/count_inpatient +0 -4
  985. data/test/statements/condition_type/count_inpatient_detail +0 -4
  986. data/test/statements/condition_type/count_inpatient_header +0 -4
  987. data/test/statements/condition_type/count_inpatient_header_2 +0 -4
  988. data/test/statements/condition_type/count_inpatient_header_3 +0 -4
  989. data/test/statements/condition_type/count_inpatient_header_4 +0 -4
  990. data/test/statements/condition_type/count_inpatient_header_5 +0 -4
  991. data/test/statements/condition_type/count_inpatient_outpatient_detail +0 -5
  992. data/test/statements/condition_type/count_inpatient_primary +0 -4
  993. data/test/statements/condition_type/count_inpatient_primary_or_first +0 -4
  994. data/test/statements/condition_type/count_outpatient +0 -4
  995. data/test/statements/condition_type/count_outpatient_detail +0 -4
  996. data/test/statements/condition_type/count_outpatient_header +0 -4
  997. data/test/statements/condition_type/count_outpatient_primary +0 -4
  998. data/test/statements/condition_type/count_primary +0 -4
  999. data/test/statements/contains/crit_1 +0 -16
  1000. data/test/statements/contains/crit_2 +0 -16
  1001. data/test/statements/contains/crit_3 +0 -16
  1002. data/test/statements/count/anno_multiple_upstreams +0 -11
  1003. data/test/statements/count/anno_no_upstream1 +0 -3
  1004. data/test/statements/count/anno_no_upstream2 +0 -4
  1005. data/test/statements/count/crit_icd9_ndc +0 -15
  1006. data/test/statements/count/crit_ndc +0 -11
  1007. data/test/statements/count/crit_person +0 -7
  1008. data/test/statements/cpt/anno_icd9_upstream +0 -7
  1009. data/test/statements/cpt/anno_invalid_code +0 -5
  1010. data/test/statements/cpt/count_1 +0 -4
  1011. data/test/statements/cpt/crit_1 +0 -4
  1012. data/test/statements/cpt/scanno_1 +0 -4
  1013. data/test/statements/cpt_or_hcpcs/anno_bad_format +0 -7
  1014. data/test/statements/cpt_or_hcpcs/count_1 +0 -5
  1015. data/test/statements/cpt_or_hcpcs/crit_1 +0 -5
  1016. data/test/statements/date_range/anno_1 +0 -7
  1017. data/test/statements/date_range/anno_extra_argument +0 -8
  1018. data/test/statements/date_range/anno_invalid_argument +0 -7
  1019. data/test/statements/date_range/anno_missing_argument1 +0 -6
  1020. data/test/statements/date_range/anno_missing_argument2 +0 -6
  1021. data/test/statements/date_range/anno_no_upstreams +0 -11
  1022. data/test/statements/date_range/count_1 +0 -7
  1023. data/test/statements/date_range/count_2 +0 -7
  1024. data/test/statements/death/anno_multiple_upstreams +0 -10
  1025. data/test/statements/death/anno_no_upstreams +0 -4
  1026. data/test/statements/death/crit_basic +0 -3
  1027. data/test/statements/death/crit_person +0 -7
  1028. data/test/statements/drug_type_concept/anno_has_upstreams +0 -8
  1029. data/test/statements/drug_type_concept/anno_no_arguments +0 -3
  1030. data/test/statements/drug_type_concept/crit_basic1 +0 -4
  1031. data/test/statements/drug_type_concept/crit_basic2 +0 -4
  1032. data/test/statements/during/crit_1 +0 -16
  1033. data/test/statements/during/crit_2 +0 -16
  1034. data/test/statements/equal/crit_1 +0 -17
  1035. data/test/statements/equal/crit_2 +0 -21
  1036. data/test/statements/except/anno_1 +0 -13
  1037. data/test/statements/except/anno_2 +0 -14
  1038. data/test/statements/except/count_complex +0 -31
  1039. data/test/statements/except/crit_412_cpt +0 -13
  1040. data/test/statements/except/crit_412_inpatient +0 -13
  1041. data/test/statements/filter/crit_1 +0 -15
  1042. data/test/statements/first/anno_argument +0 -4
  1043. data/test/statements/first/anno_no_upstream +0 -3
  1044. data/test/statements/first/crit_cpt +0 -7
  1045. data/test/statements/first/crit_icd9 +0 -7
  1046. data/test/statements/first/crit_union +0 -14
  1047. data/test/statements/from/anno_has_upstreams +0 -7
  1048. data/test/statements/from/anno_multiple_arguments +0 -5
  1049. data/test/statements/from_seer_visits/anno_multiple_upstreams +0 -17
  1050. data/test/statements/from_seer_visits/anno_no_upstream +0 -3
  1051. data/test/statements/from_seer_visits/crit_1 +0 -10
  1052. data/test/statements/from_seer_visits/crit_2 +0 -11
  1053. data/test/statements/from_seer_visits/crit_3 +0 -11
  1054. data/test/statements/from_seer_visits/crit_4 +0 -12
  1055. data/test/statements/gender/anno_has_upstreams +0 -7
  1056. data/test/statements/gender/crit_male +0 -4
  1057. data/test/statements/hcpcs/anno_bad_format +0 -6
  1058. data/test/statements/hcpcs/crit_A0382 +0 -4
  1059. data/test/statements/icd10/anno_bad_format +0 -5
  1060. data/test/statements/icd10/anno_has_upstreams +0 -7
  1061. data/test/statements/icd10/crit_1 +0 -4
  1062. data/test/statements/icd10pcs/anno_bad_format +0 -6
  1063. data/test/statements/icd10pcs/anno_has_upstreams +0 -7
  1064. data/test/statements/icd10pcs/crit_1 +0 -4
  1065. data/test/statements/icd9/anno_empty_label +0 -7
  1066. data/test/statements/icd9/anno_invalid_code +0 -4
  1067. data/test/statements/icd9/anno_valid_code +0 -4
  1068. data/test/statements/icd9/crit_1 +0 -4
  1069. data/test/statements/icd9_procedure/crit_1 +0 -4
  1070. data/test/statements/intersect/anno_412_inpatient +0 -11
  1071. data/test/statements/intersect/anno_has_arguments +0 -4
  1072. data/test/statements/intersect/anno_no_upstream +0 -3
  1073. data/test/statements/intersect/crit_412_inpatient +0 -11
  1074. data/test/statements/intersect/crit_412_male +0 -11
  1075. data/test/statements/intersect/crit_complex +0 -19
  1076. data/test/statements/invalid/anno_bad_op +0 -13
  1077. data/test/statements/invalid/scanno_1 +0 -7
  1078. data/test/statements/last/crit_icd9 +0 -7
  1079. data/test/statements/loinc/crit_basic +0 -4
  1080. data/test/statements/ndc/crit_basic +0 -4
  1081. data/test/statements/ndc/results_1 +0 -4
  1082. data/test/statements/numeric/anno_multiple_upstreams +0 -11
  1083. data/test/statements/numeric/num_values_1 +0 -4
  1084. data/test/statements/numeric/num_values_2 +0 -8
  1085. data/test/statements/numeric/num_values_3 +0 -8
  1086. data/test/statements/observation_period/anno_has_arguments +0 -8
  1087. data/test/statements/observation_period/anno_multiple_upstreams +0 -11
  1088. data/test/statements/observation_period/count_all_periods +0 -4
  1089. data/test/statements/observation_period/crit_female +0 -7
  1090. data/test/statements/observation_period/crit_icd9 +0 -7
  1091. data/test/statements/observation_period/crit_male +0 -7
  1092. data/test/statements/occurrence/anno_no_upstream +0 -3
  1093. data/test/statements/occurrence/count_412_410 +0 -17
  1094. data/test/statements/occurrence/crit_1 +0 -8
  1095. data/test/statements/occurrence/crit_2 +0 -11
  1096. data/test/statements/occurrence/crit_3 +0 -11
  1097. data/test/statements/one_in_two_out/anno_has_arguments +0 -8
  1098. data/test/statements/one_in_two_out/anno_multiple_upstreams +0 -15
  1099. data/test/statements/one_in_two_out/anno_no_upstream +0 -7
  1100. data/test/statements/one_in_two_out/count_1 +0 -10
  1101. data/test/statements/one_in_two_out/count_same_as_1 +0 -11
  1102. data/test/statements/one_in_two_out/crit_hcpcs +0 -10
  1103. data/test/statements/one_in_two_out/crit_icd9 +0 -11
  1104. data/test/statements/one_in_two_out/results_1 +0 -9
  1105. data/test/statements/one_in_two_out/results_2 +0 -9
  1106. data/test/statements/overlapped_by/crit_1 +0 -16
  1107. data/test/statements/overlapped_by/crit_2 +0 -16
  1108. data/test/statements/overlapped_by/crit_3 +0 -16
  1109. data/test/statements/overlapped_by/crit_4 +0 -16
  1110. data/test/statements/overlaps/crit_1 +0 -16
  1111. data/test/statements/overlaps/crit_2 +0 -16
  1112. data/test/statements/overlaps/crit_3 +0 -16
  1113. data/test/statements/overlaps/crit_4 +0 -16
  1114. data/test/statements/person/anno_has_arguments +0 -4
  1115. data/test/statements/person/anno_multiple_upstreams +0 -11
  1116. data/test/statements/person/count_2 +0 -3
  1117. data/test/statements/person/crit_1 +0 -7
  1118. data/test/statements/person_filter/count_1 +0 -20
  1119. data/test/statements/person_filter/crit_1 +0 -20
  1120. data/test/statements/person_filter/crit_2 +0 -13
  1121. data/test/statements/person_filter/crit_3 +0 -13
  1122. data/test/statements/person_filter/crit_4 +0 -13
  1123. data/test/statements/place_of_service_code/anno_has_upstreams +0 -8
  1124. data/test/statements/place_of_service_code/anno_no_arguments +0 -3
  1125. data/test/statements/place_of_service_code/crit_basic +0 -4
  1126. data/test/statements/place_of_service_filter/anno_1 +0 -8
  1127. data/test/statements/procedure_occurrence/anno_has_arguments +0 -8
  1128. data/test/statements/procedure_occurrence/anno_multiple_upstreams +0 -11
  1129. data/test/statements/procedure_occurrence/count_gender +0 -7
  1130. data/test/statements/procedure_occurrence/count_icd9 +0 -7
  1131. data/test/statements/procedure_occurrence/count_started_by +0 -19
  1132. data/test/statements/provenance/anno_1 +0 -8
  1133. data/test/statements/provenance/anno_bad_keyword +0 -10
  1134. data/test/statements/provenance/count_1 +0 -8
  1135. data/test/statements/provenance/count_2 +0 -8
  1136. data/test/statements/provider_filter/anno_1 +0 -10
  1137. data/test/statements/race/anno_1 +0 -8
  1138. data/test/statements/race/anno_2 +0 -3
  1139. data/test/statements/race/crit_1 +0 -4
  1140. data/test/statements/read/anno_1 +0 -4
  1141. data/test/statements/read/crit_1 +0 -8
  1142. data/test/statements/recall/anno_1 +0 -16
  1143. data/test/statements/recall/anno_2 +0 -18
  1144. data/test/statements/recall/anno_3 +0 -4
  1145. data/test/statements/recall/anno_4 +0 -3
  1146. data/test/statements/recall/anno_5 +0 -5
  1147. data/test/statements/recall/anno_6 +0 -107
  1148. data/test/statements/recall/crit_1 +0 -17
  1149. data/test/statements/recall/crit_2 +0 -14
  1150. data/test/statements/recall/crit_3 +0 -16
  1151. data/test/statements/recall/crit_cte_1 +0 -17
  1152. data/test/statements/recall/crit_cte_2 +0 -17
  1153. data/test/statements/recall/crit_nested_perm_0 +0 -28
  1154. data/test/statements/revenue_code/crit_1 +0 -4
  1155. data/test/statements/revenue_code/crit_basic +0 -4
  1156. data/test/statements/revenue_code/domains_1 +0 -4
  1157. data/test/statements/revenue_code/domains_drg100 +0 -4
  1158. data/test/statements/rxnorm/crit_1 +0 -4
  1159. data/test/statements/snomed/crit_1 +0 -4
  1160. data/test/statements/started_by/crit_1 +0 -16
  1161. data/test/statements/started_by/crit_2 +0 -16
  1162. data/test/statements/started_by/crit_3 +0 -16
  1163. data/test/statements/sum/anno_1 +0 -3
  1164. data/test/statements/sum/anno_2 +0 -8
  1165. data/test/statements/sum/num_1 +0 -11
  1166. data/test/statements/sum/num_2 +0 -15
  1167. data/test/statements/sum/num_3 +0 -7
  1168. data/test/statements/time_window/anno_1 +0 -7
  1169. data/test/statements/time_window/anno_2 +0 -11
  1170. data/test/statements/time_window/anno_3 +0 -11
  1171. data/test/statements/time_window/anno_4 +0 -12
  1172. data/test/statements/time_window/anno_5 +0 -15
  1173. data/test/statements/time_window/crit_1 +0 -11
  1174. data/test/statements/time_window/crit_2 +0 -11
  1175. data/test/statements/time_window/crit_3 +0 -11
  1176. data/test/statements/time_window/crit_4 +0 -11
  1177. data/test/statements/trim_date_end/crit_1 +0 -16
  1178. data/test/statements/trim_date_end/crit_2 +0 -16
  1179. data/test/statements/trim_date_end/crit_3 +0 -16
  1180. data/test/statements/trim_date_end/crit_at_least +0 -17
  1181. data/test/statements/trim_date_end/crit_occurrences_1 +0 -17
  1182. data/test/statements/trim_date_end/crit_occurrences_2 +0 -17
  1183. data/test/statements/trim_date_end/crit_within +0 -17
  1184. data/test/statements/trim_date_start/crit_1 +0 -16
  1185. data/test/statements/trim_date_start/crit_2 +0 -16
  1186. data/test/statements/trim_date_start/crit_3 +0 -16
  1187. data/test/statements/trim_date_start/crit_at_least +0 -17
  1188. data/test/statements/trim_date_start/crit_occurrences_1 +0 -17
  1189. data/test/statements/trim_date_start/crit_occurrences_2 +0 -17
  1190. data/test/statements/trim_date_start/crit_within +0 -17
  1191. data/test/statements/union/anno_1 +0 -11
  1192. data/test/statements/union/anno_2 +0 -18
  1193. data/test/statements/union/anno_3 +0 -3
  1194. data/test/statements/union/anno_4 +0 -4
  1195. data/test/statements/union/anno_5 +0 -7
  1196. data/test/statements/union/anno_6 +0 -10
  1197. data/test/statements/union/count_1 +0 -11
  1198. data/test/statements/union/count_2 +0 -11
  1199. data/test/statements/union/count_3 +0 -15
  1200. data/test/statements/union/count_4 +0 -18
  1201. data/test/statements/union/count_5 +0 -18
  1202. data/test/statements/union/scanno_1 +0 -3
  1203. data/test/statements/union/scanno_2 +0 -18
  1204. data/test/statements/visit_occurrence/anno_1 +0 -11
  1205. data/test/statements/visit_occurrence/anno_2 +0 -8
  1206. data/test/statements/visit_occurrence/crit_1 +0 -7
  1207. data/test/statements/visit_occurrence/crit_2 +0 -7
  1208. data/test/statements/visit_occurrence/crit_3 +0 -3
@@ -1,20 +1,24 @@
1
- require_relative 'operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "operator"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
7
+ # The base class of operators whose domains and columns are those of their
8
+ # upstreams (union, count, sum, numeric, dedup, episode, time_window and
9
+ # co_reported). It has no query method, so it does not register: pass_thru
10
+ # is not an operator name.
5
11
  class PassThru < Operator
6
- register __FILE__
7
-
8
12
  basic_type :set
9
13
  no_desc
10
14
 
11
15
  def domains(db)
12
16
  doms = upstreams.compact.flat_map { |up| up.domains(db) }.uniq
13
- doms.empty? ? [:invalid] : doms
17
+ doms.empty? ? [ :invalid ] : doms
14
18
  end
15
19
 
16
20
  def query_cols
17
- upstreams.first.query_cols
21
+ upstreams.map(&:query_cols).inject(:|)
18
22
  end
19
23
  end
20
24
  end
@@ -1,11 +1,17 @@
1
- require_relative 'casting_operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "casting_operator"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
5
7
  class Person < CastingOperator
8
+ include ConceptQL::Behaviors::Windowable
9
+ include ConceptQL::Behaviors::Timeless
10
+
6
11
  register __FILE__
7
12
 
8
- desc 'Generates all person records, or, if fed a stream, fetches all person records for the people represented in the incoming result set.'
13
+ desc "Selects all records in the person table."
14
+
9
15
  allows_one_upstream
10
16
  domains :person
11
17
 
@@ -13,6 +19,10 @@ module ConceptQL
13
19
  :person
14
20
  end
15
21
 
22
+ def source_table
23
+ dm.table_by_domain(my_domain)
24
+ end
25
+
16
26
  def i_point_at
17
27
  []
18
28
  end
@@ -1,16 +1,18 @@
1
- require_relative 'binary_operator_operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "binary_operator_operator"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
5
7
  class PersonFilter < BinaryOperatorOperator
6
8
  register __FILE__
7
9
 
8
- desc 'If a result in the left hand results (LHR) matches a person in the right hand results (RHR), it is passed through.'
10
+ desc "Passes along left hand records with a corresponding person_id in the right hand records."
9
11
  default_query_columns
10
12
 
11
13
  def query(db)
12
14
  db.from(left.evaluate(db))
13
- .where(person_id: right.evaluate(db).select_group(:person_id))
15
+ .where(person_id: right.evaluate(db).from_self.select_group(:person_id))
14
16
  end
15
17
  end
16
18
  end
@@ -1,46 +1,42 @@
1
- require_relative 'operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "operator"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
5
- # Filters the incoming stream of events to only those that have a
7
+ # Filters the incoming stream of records to only those that have a
6
8
  # an associated visit_occurrence with the matching place_of_service
7
9
  #
8
10
  # Provenance related concepts are the ones found in the xxx_type_concept_id
9
11
  # field.
10
12
  #
11
- # If the event has NULL for the provenance-related field, they are filtered
13
+ # If the record has NULL for the provenance-related field, they are filtered
12
14
  # out.
13
15
  #
14
16
  # Multiple provenances can be specified at once
15
17
  class PlaceOfServiceFilter < Operator
16
18
  register __FILE__
17
19
 
18
- desc <<-EOF
19
- Filters records to include only those that match one or more of the Medicare Place Of Service values.
20
+ desc "Passes along records that match one or more of the Medicare Place Of Service values."
20
21
 
21
- Common values include 21 (inpatient hospital), 23 (emergency room), and 11 (office).
22
- EOF
23
- argument :places_of_service, type: :codelist, vocab: 'Place of Service'
22
+ argument :places_of_service, type: :codelist, vocab: "Place of Service"
24
23
  category "Filter Single Stream"
25
24
  basic_type :temporal
26
25
  allows_one_upstream
27
26
  validate_one_upstream
28
27
  validate_at_least_one_argument
29
- require_column :place_of_service_concept_id
28
+ require_column :visit_source_concept_id
30
29
  default_query_columns
31
30
 
32
31
  def query(db)
33
32
  db.from(stream.evaluate(db))
34
- .where(place_of_service_concept_id: place_of_service_concept_ids(db))
33
+ .where(visit_source_concept_id: place_of_service_concept_ids(db))
35
34
  end
36
35
 
37
- private
36
+ private
38
37
 
39
38
  def place_of_service_concept_ids(db)
40
- db.from(:concept)
41
- .where(concept_code: arguments.map(&:to_s))
42
- .where(vocabulary_id: 14)
43
- .select(:concept_id)
39
+ dm.concept_ids(db, "Place of Service", arguments.map(&:to_s))
44
40
  end
45
41
  end
46
42
  end
@@ -1,66 +1,55 @@
1
- require_relative 'operator'
2
- require_relative '../behaviors/provenanceable'
3
- require 'facets/kernel/present'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "operator"
4
+ require_relative "../behaviors/provenanceable"
4
5
 
5
6
  module ConceptQL
6
7
  module Operators
7
- # Filters the incoming stream of events to only those that have a
8
+ # Filters the incoming stream of records to only those that have a
8
9
  # provenance-related concept_id.
9
10
  #
10
11
  # Provenance related concepts are the ones found in the xxx_type_concept_id
11
12
  # field.
12
13
  #
13
- # If the event has NULL for the provenance-related field, they are filtered
14
+ # If the record has NULL for the provenance-related field, they are filtered
14
15
  # out.
15
16
  #
16
17
  # Multiple provenances can be specified at once
17
18
  class Provenance < Operator
18
- register __FILE__
19
-
20
- include ConceptQL::Provenanceable
19
+ # GDM only: omopv4_plus has no provenance vocabularies (conceptql-myp).
20
+ register __FILE__, :gdm, :gdm_wide
21
21
 
22
- desc <<-EOF
23
- Filters incoming events to those with the indicated provenance.
22
+ desc "Passes along records with the indicated provenance (e.g. inpatient, outpatient, file type)."
24
23
 
25
- Enter numeric concept id(s), or the corresponding text label(s)
26
- (e.g., "inpatient", "outpatient", "carrier_claim").
27
- EOF
28
- argument :provenance_types, label: 'Provenance Types', type: :codelist
24
+ argument :provenance_types, label: "Provenance Types", type: :codelist
29
25
  category "Filter Single Stream"
30
26
  basic_type :temporal
31
27
  allows_one_upstream
32
28
  validate_one_upstream
33
- require_column :provenance_type
34
29
  default_query_columns
35
30
 
31
+ include ConceptQL::Provenanceable
32
+
33
+ attr_reader :db
34
+
36
35
  def query(db)
37
- db.from(stream.evaluate(db))
38
- .where(provenance_type: provenance_concept_ids)
36
+ @db = db
37
+ db.from(stream.evaluate(db)).where(build_where_from_codes(db, arguments))
39
38
  end
40
39
 
41
- private
40
+ private
42
41
 
43
- def validate(db, opts = {})
44
- super
45
- bad_keywords = all_args.select { |arg| arg.to_i.zero? }
46
- .reject { |arg| concept_ids.keys.include?(arg.to_sym) }
42
+ def additional_validation(db, _opts = {})
43
+ # With no lexicon there are no provenance concepts to check against,
44
+ # and every keyword would be reported as unrecognized. Vocabulary
45
+ # operators skip their unknown-code check in the same situation.
46
+ return if dm.lexicon.strategy == :no_db
47
47
 
48
- if bad_keywords.present?
49
- add_error("unrecognized keywords", *bad_keywords)
50
- end
51
- end
52
-
53
- def provenance_concept_ids
54
- all_args.flat_map do |arg|
55
- to_concept_id(arg)
56
- end
57
- end
48
+ bad_keywords = find_bad_keywords(db, arguments)
49
+ return unless bad_keywords.present?
58
50
 
59
- def all_args
60
- arguments.map(&:to_s).flat_map { |w| w.split(/\s*,\s*/) }.uniq
51
+ add_error("unrecognized keywords", *bad_keywords.uniq)
61
52
  end
62
53
  end
63
54
  end
64
55
  end
65
-
66
-
@@ -1,36 +1,62 @@
1
- require_relative 'operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "operator"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
5
- # Filters incoming events to only those that have been associated with
7
+ # Filters incoming records to only those that have been associated with
6
8
  # providers matching the given criteria.
7
9
  class ProviderFilter < Operator
8
10
  register __FILE__
9
11
 
10
- desc "Filters incoming events to only those that match the associated providers based on provider specialty concept_ids."
12
+ desc "Passes along records where the provider's specialty matches a given set of specialty_concept_ids.\n\nA single record may have multiple specialties, so the operator will return all records that match any of the given specialties, which may lead to duplicate records."
11
13
  option :specialties, type: :string
14
+ option :roles, type: :string
12
15
  category "Filter Single Stream"
13
16
  basic_type :temporal
14
17
  allows_one_upstream
15
18
  validate_one_upstream
16
- validate_required_options :specialties
19
+ validate_required_options :specialties, :roles
17
20
  require_column :provider_id
21
+ require_column :context_specialty_concept_id
22
+ require_column :practitioner_specialty_concept_id
23
+ require_column :role_type_concept_id
18
24
  default_query_columns
19
25
 
20
26
  def query(db)
21
- db.from(stream.evaluate(db))
22
- .where(provider_id: matching_provider_ids(db))
27
+ ds = stream.evaluate(db).from_self(alias: :upstream)
28
+
29
+ specialty_concept_ids = options[:specialties].split(/\s*,\s*/)
30
+ role_type_concept_ids = options[:roles].split(/\s*,\s*/)
31
+
32
+ unless specialty_concept_ids.include?("*")
33
+ spec_con_ids = specialty_concept_ids.map(&:to_i)
34
+ ds = ds.where(
35
+ Sequel.or(
36
+ [
37
+ [ :context_specialty_concept_id, spec_con_ids ],
38
+ [ :practitioner_specialty_concept_id, spec_con_ids ]
39
+ ]
40
+ )
41
+ )
42
+ end
43
+
44
+ unless role_type_concept_ids.include?("*")
45
+ role_con_ids = role_type_concept_ids.map(&:to_i)
46
+ ds = ds.where(role_type_concept_id: role_con_ids)
47
+ end
48
+
49
+ ds
23
50
  end
24
51
 
25
- private
26
- def matching_provider_ids(db)
27
- specialty_concept_ids = options[:specialties].split(/\s*,\s*/).map(&:to_i)
28
- db.from(:provider)
29
- .where(specialty_concept_id: specialty_concept_ids)
30
- .select(:provider_id)
52
+ def query_columns
53
+ default_columns + %i[
54
+ context_specialty_concept_id
55
+ practitioner_specialty_concept_id
56
+ role_type_concept_id
57
+ provider_id
58
+ ]
31
59
  end
32
60
  end
33
61
  end
34
62
  end
35
-
36
-
@@ -1,4 +1,7 @@
1
- require_relative 'operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "operator"
4
+ require "yaml"
2
5
 
3
6
  module ConceptQL
4
7
  module Operators
@@ -11,19 +14,57 @@ module ConceptQL
11
14
  class Race < Operator
12
15
  register __FILE__
13
16
 
14
- desc 'Generates all person records that match the given set of Race codes.'
15
- argument :races, type: :codelist, vocab: 'Race'
17
+ include ConceptQL::Behaviors::Windowable
18
+ include ConceptQL::Behaviors::Timeless
19
+
20
+ desc "Selects person records that match the given set of Race codes."
21
+ argument :races, type: :codelist, vocab: "Race"
16
22
  domains :person
17
23
  category "Select by Property"
18
24
  basic_type :selection
19
- query_columns :person, :concept
20
25
  validate_no_upstreams
21
26
  validate_at_least_one_argument
22
27
 
28
+ def race_descendents
29
+ @race_descendents ||= YAML.load_file(ConceptQL.race_file)
30
+ end
31
+
32
+ def query_cols
33
+ table_columns(table)
34
+ end
35
+
36
+ def table
37
+ source_table
38
+ end
39
+
40
+ def source_table
41
+ if gdm?
42
+ :patients
43
+ else
44
+ :person
45
+ end
46
+ end
47
+
23
48
  def query(db)
24
- db.from(:person___p)
25
- .join(:concept___c, { c__concept_id: :p__race_concept_id })
26
- .where(Sequel.function(:lower, :c__concept_name) => arguments.map(&:downcase))
49
+ words = arguments - actual_ids
50
+
51
+ concept_ids = dm.concept_ids_by_name(db, words)
52
+
53
+ c_ids = (concept_ids + actual_ids).map { |i| [ i, race_descendents[i] ] }.flatten.compact.uniq.sort
54
+
55
+ c_ids = dm.related_concept_ids(db, c_ids) if gdm?
56
+
57
+ q = db.from(source_table)
58
+ if words.any? { |w| w.match(/unknown/i) }
59
+ c_ids += [ 0 ]
60
+ q = q.where(race_concept_id: nil)
61
+ end
62
+
63
+ q.where(race_concept_id: c_ids)
64
+ end
65
+
66
+ def actual_ids
67
+ @actual_ids ||= arguments.select { |i| i.to_s.match(/^\d+$/) }
27
68
  end
28
69
  end
29
70
  end
@@ -1,67 +1,56 @@
1
- require 'sequel'
2
- require 'sequel/adapters/mock'
1
+ # frozen_string_literal: true
2
+
3
+ require "sequel"
4
+ require "sequel/adapters/mock"
5
+ require_relative "../behaviors/labish"
3
6
 
4
7
  module ConceptQL
5
8
  module Operators
6
9
  class Read < Operator
10
+ include ConceptQL::Behaviors::CodeLister
7
11
  register __FILE__
8
12
 
9
13
  preferred_name "READ"
10
- desc "Selects results from the the condition_occurrence, procedure_occurrence, drug_exposure, and observation tables based on the READ codes provided."
14
+ desc "Selects records based on the Read vocabulary."
11
15
  argument :read_codes, type: :codelist, vocab: "Read"
12
16
  basic_type :selection
13
17
  category "Select by Clinical Codes"
14
- default_query_columns
18
+ conceptql_spec_id "vocabulary"
15
19
 
16
20
  def query(db)
17
- ops = codes_by_domain(db).map do |domain, codes|
18
- klasses[domain].new(self.nodifier, *codes)
19
- end
21
+ gdm? ? gdm(db) : omopv4(db)
22
+ end
23
+
24
+ def gdm(db)
25
+ ops(db).first.evaluate(db)
26
+ end
20
27
 
21
- streams = ops.map { |op| op.evaluate(db) }
28
+ def omopv4(db)
29
+ streams = ops(db).map { |op| op.evaluate(db) }
22
30
 
23
31
  streams.inject { |q, query| q.union(query, all: true) }.from_self
24
32
  end
25
33
 
26
34
  def domains(db)
27
- codes_by_domain(db).keys
35
+ ops.first.domains(db)
28
36
  end
29
37
 
30
- private
31
-
32
- def codes_by_domain(db)
33
- @codes_by_domain ||= get_codes_by_domain(db)
38
+ def query_cols
39
+ gdm? ? ops.first.query_cols : ops.map(&:query_cols).flatten.uniq
34
40
  end
35
41
 
36
- def get_codes_by_domain(db)
37
- return { observation: arguments } if db.is_a?(::Sequel::Mock)
38
- codes_and_mapping_types = db[:source_to_concept_map]
39
- .where(source_code: arguments, source_vocabulary_id: 17)
40
- .select_map([:source_code, :mapping_type])
42
+ def required_columns
43
+ ops.flat_map(&:required_columns).uniq
44
+ end
41
45
 
42
- doms_and_codes = codes_and_mapping_types.group_by(&:last).each_with_object({}) do |(mapping_type, codes_and_maps), doms|
43
- dom = mapping_type_to_domain(mapping_type)
44
- doms[dom] ||= []
45
- doms[dom] += codes_and_maps.map(&:first)
46
- end
46
+ private
47
47
 
48
- leftovers = arguments - doms_and_codes.flat_map { |k, v| v }
49
- doms_and_codes[:observation] ||= []
50
- doms_and_codes[:observation] += leftovers
51
- doms_and_codes
48
+ def ops(_db = nil)
49
+ [ ReadGDM.new(nodifier, "read_condition_occurrence", *arguments) ]
52
50
  end
53
51
 
54
- def mapping_type_to_domain(mapping_type)
55
- case mapping_type.downcase.to_sym
56
- when :condition
57
- :condition_occurrence
58
- when :procedure
59
- :procedure_occurrence
60
- when :drug
61
- :drug_exposure
62
- else
63
- :observation
64
- end
52
+ def describe_codes(db, codes)
53
+ ops.flat_map { |op| op.describe_codes(db, codes) }
65
54
  end
66
55
 
67
56
  def klasses
@@ -73,25 +62,65 @@ module ConceptQL
73
62
  }
74
63
  end
75
64
 
76
- class ReadCondition < ConditionOccurrenceSourceVocabularyOperator
65
+ class ReadBase < ConceptQL::Operators::Vocabulary
77
66
  preferred_name "READ"
78
67
  argument :read_codes, type: :codelist, vocab: "Read"
68
+ end
69
+
70
+ class ReadOmopBase < ReadBase
71
+ include ConceptQL::Vocabularies::Behaviors::Omopish
79
72
 
80
73
  def vocabulary_id
81
74
  17
82
75
  end
76
+
77
+ def source_table
78
+ table
79
+ end
80
+
81
+ def domain
82
+ table
83
+ end
84
+
85
+ def domains(_db)
86
+ Array(domain)
87
+ end
83
88
  end
84
89
 
85
- class ReadProcedure < SourceVocabularyOperator
86
- preferred_name "READ"
87
- argument :read_codes, type: :codelist, vocab: "Read"
90
+ class ReadGDM < ReadBase
91
+ include ConceptQL::Vocabularies::Behaviors::Gdmish
92
+ include ConceptQL::Behaviors::Labish
88
93
 
94
+ def vocabulary_id
95
+ "Read"
96
+ end
97
+
98
+ def domain_map(_v_id)
99
+ :condition_occurrence
100
+ end
101
+
102
+ def domains(_db)
103
+ [ :condition_occurrence ]
104
+ end
105
+ end
106
+
107
+ class ReadCondition < ReadOmopBase
89
108
  def table
90
109
  :procedure_occurrence
91
110
  end
92
111
 
93
- def vocabulary_id
94
- 17
112
+ def source_column
113
+ :procedure_source_value
114
+ end
115
+
116
+ def concept_column
117
+ :procedure_concept_id
118
+ end
119
+ end
120
+
121
+ class ReadProcedure < ReadOmopBase
122
+ def table
123
+ :procedure_occurrence
95
124
  end
96
125
 
97
126
  def source_column
@@ -103,18 +132,13 @@ module ConceptQL
103
132
  end
104
133
  end
105
134
 
106
- class ReadObservation < SourceVocabularyOperator
107
- preferred_name "READ"
108
- argument :read_codes, type: :codelist, vocab: "Read"
135
+ class ReadObservation < ReadOmopBase
136
+ include ConceptQL::Behaviors::Labish
109
137
 
110
138
  def table
111
139
  :observation
112
140
  end
113
141
 
114
- def vocabulary_id
115
- 17
116
- end
117
-
118
142
  def source_column
119
143
  :observation_source_value
120
144
  end
@@ -124,18 +148,13 @@ module ConceptQL
124
148
  end
125
149
  end
126
150
 
127
- class ReadDrug < SourceVocabularyOperator
128
- preferred_name "READ"
129
- argument :read_codes, type: :codelist, vocab: "Read"
151
+ class ReadDrug < ReadOmopBase
152
+ include ConceptQL::Behaviors::Drugish
130
153
 
131
154
  def table
132
155
  :drug_exposure
133
156
  end
134
157
 
135
- def vocabulary_id
136
- 17
137
- end
138
-
139
158
  def source_column
140
159
  :drug_source_value
141
160
  end
@@ -1,4 +1,6 @@
1
- require_relative 'pass_thru'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "pass_thru"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
@@ -8,14 +10,12 @@ module ConceptQL
8
10
  # that complex concept into a set of sub-concepts to better understand it.
9
11
  #
10
12
  # This operator will look for a sub-concept that has been created through the
11
- # "define" operator and will fetch the results cached in the corresponding table
13
+ # "define" operator and will fetch the records cached in the corresponding table
12
14
  class Recall < Operator
13
15
  register __FILE__
14
16
 
15
- desc <<-EOF
16
- Recalls a set of named results that were previously stored using the Define operator.
17
- Must be surrounded by the same Let operator as surrounds the corresponding Define operator.
18
- EOF
17
+ desc "Recalls a set of records from a labeled operator in the statement"
18
+
19
19
  argument :name, type: :string
20
20
  category "Get Related Data"
21
21
  basic_type :selection
@@ -37,9 +37,9 @@ Must be surrounded by the same Let operator as surrounds the corresponding Defin
37
37
 
38
38
  def annotate(db, opts = {})
39
39
  @annotate ||= if valid?(db) && replaced?
40
- original.annotate(db, opts)
40
+ original.annotate(db, opts)
41
41
  else
42
- super
42
+ super
43
43
  end
44
44
  end
45
45
 
@@ -47,20 +47,21 @@ Must be surrounded by the same Let operator as surrounds the corresponding Defin
47
47
  nodifier.scope.fetch_operator(source)
48
48
  end
49
49
 
50
+ def code_list(db)
51
+ original.code_list(db)
52
+ end
53
+
50
54
  private
51
55
 
52
- def validate(db, opts = {})
53
- super
54
- if arguments.length == 1
55
- if scope.fetch_operator(source)
56
- scope.recall_dependencies[source].each do |d|
57
- if scope.recall_dependencies[d].include?(source)
58
- add_error("mutually referential recalls", d)
59
- end
60
- end
61
- else
62
- add_error("no matching label", source)
56
+ def additional_validation(_db, _opts = {})
57
+ return unless arguments.length == 1
58
+
59
+ if scope.fetch_operator(source)
60
+ scope.recall_dependencies[source].each do |d|
61
+ add_error("mutually referential recalls", d) if scope.recall_dependencies[d].include?(source)
63
62
  end
63
+ else
64
+ add_error("no matching label", source)
64
65
  end
65
66
  end
66
67
 
@@ -70,4 +71,3 @@ Must be surrounded by the same Let operator as surrounds the corresponding Defin
70
71
  end
71
72
  end
72
73
  end
73
-