conceptql 0.3.0 → 0.4.0

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 (1210) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +208 -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 +165 -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 +25 -0
  107. data/lib/conceptql/rdbms/generic.rb +120 -0
  108. data/lib/conceptql/rdbms/postgres.rb +51 -0
  109. data/lib/conceptql/rdbms/spark.rb +22 -0
  110. data/lib/conceptql/rdbms.rb +22 -0
  111. data/lib/conceptql/scope.rb +353 -41
  112. data/lib/conceptql/sql_formatters/formatter.rb +25 -0
  113. data/lib/conceptql/sql_formatters.rb +22 -0
  114. data/lib/conceptql/utils.rb +113 -0
  115. data/lib/conceptql/utils_cli.rb +17 -0
  116. data/lib/conceptql/version.rb +3 -1
  117. data/lib/conceptql/visitors/metadata_extractor.rb +54 -0
  118. data/lib/conceptql/vocabularies/behaviors/costish.rb +24 -0
  119. data/lib/conceptql/vocabularies/behaviors/gdmish.rb +19 -0
  120. data/lib/conceptql/vocabularies/behaviors/omopish.rb +32 -0
  121. data/lib/conceptql/vocabularies/dynamic_vocabularies.rb +63 -0
  122. data/lib/conceptql/vocabularies/entry.rb +138 -0
  123. data/lib/conceptql/vocabularies/vocabulary_class_factory.rb +85 -0
  124. data/lib/conceptql/window/base.rb +26 -0
  125. data/lib/conceptql/window/date_range.rb +25 -0
  126. data/lib/conceptql/window/table.rb +116 -0
  127. data/lib/conceptql/window.rb +72 -0
  128. data/lib/conceptql.rb +53 -10
  129. data/lib/sequel/extensions/pg_ctas_explain.rb +22 -0
  130. data/lib/sequel/extensions/pg_vacuum_table.rb +23 -0
  131. data/schemas/gdm.yml +882 -0
  132. data/schemas/gdm_wide.yml +757 -0
  133. data/schemas/ohdsi_vocabs.yml +143 -0
  134. data/schemas/omopv4_plus.yml +729 -0
  135. data/schemas/omopv4_plus_more_ignorables.tsv +13 -0
  136. metadata +262 -2068
  137. data/.gitignore +0 -25
  138. data/Gemfile +0 -6
  139. data/Guardfile +0 -56
  140. data/LICENSE.txt +0 -22
  141. data/Rakefile +0 -35
  142. data/conceptql.gemspec +0 -31
  143. data/doc/ConceptQL Specification (alpha).pdf +0 -0
  144. data/doc/converter.rb +0 -33
  145. data/doc/diagram_0.png +0 -0
  146. data/doc/implementation_notes.md +0 -39
  147. data/doc/metadata.md +0 -89
  148. data/doc/spec/02f44ad35d266ddd0a4df1691d26bf4a297b30604fc3f44b0391d6d852d23a9f.png +0 -0
  149. data/doc/spec/0360fc0c2b7a88fd82ffc4d13387b76766649d5d42aa8f9349bbf60a81ac6119.png +0 -0
  150. data/doc/spec/04491942fcbd741982514f9eb12aeecf3d54b5b69a2b50c8331f7700169d5521.png +0 -0
  151. data/doc/spec/05f9b844571ffceeed2def3025fb60c68552817b8b73d3c8a76939dbc08b7c65.png +0 -0
  152. data/doc/spec/067241a3579767a802d4f8e20fd35b60adbe377c9a6512ef135f164a5accfb27.png +0 -0
  153. data/doc/spec/1102fa717b1c2df67af5220bf3ae219afafd79be7bba0c117e301983385ada52.png +0 -0
  154. data/doc/spec/11f57941951bad5a75f9a16f38a31a3c6bf3046a475aac6e398e780892fab4ad.png +0 -0
  155. data/doc/spec/15268bc45993d3f57ccf915877f91e48bdee684f24faa614249915833cac4af9.png +0 -0
  156. data/doc/spec/253845fe6162621af407ebd110296ff4f6d8a3f23ec75dfb4ea8cda30be71262.png +0 -0
  157. data/doc/spec/26fd52b5ac55438dd9f81b4a3f3913f1058c9f225c8a5e129007c1e9413d5881.png +0 -0
  158. data/doc/spec/2b57886a9cba66bb696e4b399c51ad0dc95cd64b952709fafc819a79d573f09e.png +0 -0
  159. data/doc/spec/307a8b5a7edd6e42f8be16523a4c939faf1a0533385c861d7004b6af8addd7d1.png +0 -0
  160. data/doc/spec/328467a6a419c7c05e299b8097e5e000686068ded8dc6d5f2e2de6f51976c315.png +0 -0
  161. data/doc/spec/39d6a8eb71cae51b1d6937c97134e51f04fd47c54535ff0915fe6a8b4f197fb2.png +0 -0
  162. data/doc/spec/3f46dee4d775d1a29d52b68af6552f8ea3abd8303094e749714fc77bd7958155.png +0 -0
  163. data/doc/spec/44ec6743d5d77d15b8a487c2058bf3e455d34adc91c46ea05767f6e0e471a75e.png +0 -0
  164. data/doc/spec/462153be527b28dc2cb5259c0aec62e1f529e8b60dc6e9c23fd1e06e8be933c9.png +0 -0
  165. data/doc/spec/4a3b47ed1c54f96ebdae693d41c36c51884c4546ef799a4108085708fb7b964e.png +0 -0
  166. data/doc/spec/514f263e976d07c0d9e0a86c79bcbdcddc7d444d7b72135294ad78758effd28f.png +0 -0
  167. data/doc/spec/58113a57a37431a402d2547369eba3a481bf1dbbfd82dc384406a5c91f6df01f.png +0 -0
  168. data/doc/spec/5d331d74c460d75814b2d3138a9b7d90b5ddb2dcd85e1f5f260d183745fc3a1e.png +0 -0
  169. data/doc/spec/5d6ff62038b75d6f240d65f35d1520a131c221f47d3801554c8c2be5d528ebb0.png +0 -0
  170. data/doc/spec/62323426e381ec21c967971a67e1f4a6d89dae92154bd937284e00b67f67fdd3.png +0 -0
  171. data/doc/spec/6705af65d728c0d5c50d6c4d46253017a91eb459dbb1f40f92449f05d5562f4a.png +0 -0
  172. data/doc/spec/68fac940a32c7e40caacf8e560c61da552d57633d015ba98f2e98ec040a00c5b.png +0 -0
  173. data/doc/spec/6a34c0ef589c9c976fe41f3e67e799e198499f5b9c3ebfd240fb91f73e893573.png +0 -0
  174. data/doc/spec/6b48534236697d1ccfa1f5403764782f9d228f9eb706789cfa80203882b7b13a.png +0 -0
  175. data/doc/spec/7aa76b4d29874719466c2cbafc9936e9f12e504bf31e1a09d26ca3fffa8ba1a6.png +0 -0
  176. data/doc/spec/7b9db2986ab9ada45cfb9451ef87ff1a2d99c908083334b7ccdceb8a92387fa9.png +0 -0
  177. data/doc/spec/8101d9b89d9ba8070d585432707b43a8acdb4c2a3e9d37c3f7114b5e3ea9e800.png +0 -0
  178. data/doc/spec/886bf85249a704668a55c5161bceaac10be4a41a94b91606f49851dfa017526c.png +0 -0
  179. data/doc/spec/8ed478d8c81a58a202d0c51348fca246df206fc24a0567b163d4e0bdab56ca46.png +0 -0
  180. data/doc/spec/9139440329dcb815df89bc70182c3827868402a74ff64d0253706dcaff723dca.png +0 -0
  181. data/doc/spec/99392f56dfb0e5be3f45a12a7f1ba846d094e430f526dfeaa30b606837cd34c0.png +0 -0
  182. data/doc/spec/a4450e8c0fe0e2fde92fe9bd61952f907b1976c1aa3ba963b809bed079d42b09.png +0 -0
  183. data/doc/spec/a4bc7382a1154ea9856544fd48418f3dd9ce474ca94b8859fc323749c6cc1f55.png +0 -0
  184. data/doc/spec/a79274742cf6fac6f6c9f4a0eb651aeb452f9c43b537c8e6ccaefecd05b7105c.png +0 -0
  185. data/doc/spec/a9b4528726adec2a90f3f00139d8d0492f13c51f03c2f9ed6a5134b1b26b44a9.png +0 -0
  186. data/doc/spec/af5ae3787e80bf0771f18f1a04fe4c5d9291e1e0f963ac408a7bc198d2f1ee28.png +0 -0
  187. data/doc/spec/ba572c4f4dbade65be55f141df16cf7b3e7d09e0aec4e4e5debc4f2075277371.png +0 -0
  188. data/doc/spec/ba90ef705f7be91c53c5eb4a81a439fa0f7c48532214bd3db3cc5c069160543e.png +0 -0
  189. data/doc/spec/c1d0402862221d85aceedc7d76b3f82149b612cbd972f14d0ca9011e1e2c455c.png +0 -0
  190. data/doc/spec/c2157d8a6b73abe4f22ba5042159f32502c74bf6d762be28d2df6831586822c7.png +0 -0
  191. data/doc/spec/c5329a7f4937096a57b2e01efb9d542f84a4e2329a1e9381d08c630583ccad37.png +0 -0
  192. data/doc/spec/c82077b9455d0f9abc2c45ee1a298e38b99c9ce9cd685f65d87b376d7718d7ad.png +0 -0
  193. data/doc/spec/c93dd18894a245a5647f99e1867d3779e4cd34c9c8f8860600ff0c837a5ffa53.png +0 -0
  194. data/doc/spec/cc960a268d51ccf2ebde657d36848f780213834844900018bce3d111843f7b0f.png +0 -0
  195. data/doc/spec/d39452b58257c95a7cba07afed4877417b0c227f3690e2bff22c9eca89eac845.png +0 -0
  196. data/doc/spec/d64993258ffbef9406d9ab9136de7af530626b3a69e9eeb75835e11f11dabf62.png +0 -0
  197. data/doc/spec/da450cdd0c94a1301bd98560339a45caa8041e09974352a56ecfb144e9a5e4d4.png +0 -0
  198. data/doc/spec/dbc66b3ae6bd7123d77dd04b64f8a24498d048725a55c5340b15f5ae0a1ff307.png +0 -0
  199. data/doc/spec/de589af36fa854e006a1563c93e644e2210f2a5616babb779f7f38aadb6c1ed7.png +0 -0
  200. data/doc/spec/defbd0b853d895802663f507761ad297d82e167f516c6082686a2a19b76012c5.png +0 -0
  201. data/doc/spec/e1cb0863b21e14256d61a54200316791f6547c78ba2f0156c110f4500f9bbd49.png +0 -0
  202. data/doc/spec/e8630103287f7c9d28eff40b3b1826e24846e776b877f7b8554257acbe621e1c.png +0 -0
  203. data/doc/spec/e9b384fa7dec5f1a06479c4b289e06b1e60e4f23f7630aff6d03c52595f500f8.png +0 -0
  204. data/doc/spec/ea935ac31f3b57ff373646780a1fba34a38c9e086dc771eb7fc16c65a7e20cfc.png +0 -0
  205. data/doc/spec/eb8f5511f7d88bd0f8ba73420fc10f7c78405db7f4373d778a827058707f888e.png +0 -0
  206. data/doc/spec/ebacbd092e3d1a3c7b745a381e51e8ff9d63a21db23a16940193e18e57bc866f.png +0 -0
  207. data/doc/spec/ed039f82867241393b1a6a7153d3690461103934c72c1f3eaa3d99a12bb40885.png +0 -0
  208. data/doc/spec/ee283d6a4b69cf10da2df703be3a16830be9cd8cd4f68c5f7afdf558ea28fa76.png +0 -0
  209. data/doc/spec/f0c734b099841a754ae0366afb00e992ad4814479b65e4a7de23c6e3dd85c09a.png +0 -0
  210. data/doc/spec/f6b4fc31703cfb6327bbbd4614af8bb72da6d39fa3d53ada63a70157f2fad80e.png +0 -0
  211. data/doc/spec/f766f2e3aa13420e3ba0f823ac7956b311ed7c6c20be26b72324fadd87f36712.png +0 -0
  212. data/doc/spec/ff7d5b5573d09bd7c4cdd3aeda124d18bf82ec46673a62881b399a75d69f3f53.png +0 -0
  213. data/doc/spec.md +0 -2258
  214. data/doc/spec.md.cql +0 -1930
  215. data/lib/conceptql/annotate_grapher.rb +0 -127
  216. data/lib/conceptql/fake_annotater.rb +0 -129
  217. data/lib/conceptql/knitter.rb +0 -221
  218. data/lib/conceptql/logger.rb +0 -10
  219. data/lib/conceptql/operators/complement.rb +0 -43
  220. data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator.rb +0 -34
  221. data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator_union.rb +0 -28
  222. data/lib/conceptql/operators/condition_type.rb +0 -79
  223. data/lib/conceptql/operators/cpt.rb +0 -28
  224. data/lib/conceptql/operators/cpt_or_hcpcs.rb +0 -27
  225. data/lib/conceptql/operators/drg.rb +0 -42
  226. data/lib/conceptql/operators/drug_type_concept.rb +0 -30
  227. data/lib/conceptql/operators/from_seer_visits.rb +0 -29
  228. data/lib/conceptql/operators/hcpcs.rb +0 -28
  229. data/lib/conceptql/operators/icd10.rb +0 -19
  230. data/lib/conceptql/operators/icd10_pcs.rb +0 -28
  231. data/lib/conceptql/operators/icd9.rb +0 -19
  232. data/lib/conceptql/operators/icd9_procedure.rb +0 -28
  233. data/lib/conceptql/operators/intersect.rb +0 -39
  234. data/lib/conceptql/operators/loinc.rb +0 -28
  235. data/lib/conceptql/operators/medcode.rb +0 -17
  236. data/lib/conceptql/operators/medcode_procedure.rb +0 -28
  237. data/lib/conceptql/operators/ndc.rb +0 -32
  238. data/lib/conceptql/operators/observation_by_enttype.rb +0 -32
  239. data/lib/conceptql/operators/observation_period.rb +0 -32
  240. data/lib/conceptql/operators/overlapped_by.rb +0 -26
  241. data/lib/conceptql/operators/overlaps.rb +0 -21
  242. data/lib/conceptql/operators/place_of_service_code.rb +0 -31
  243. data/lib/conceptql/operators/procedure_occurrence.rb +0 -27
  244. data/lib/conceptql/operators/prodcode.rb +0 -32
  245. data/lib/conceptql/operators/revenue_code.rb +0 -40
  246. data/lib/conceptql/operators/rxnorm.rb +0 -28
  247. data/lib/conceptql/operators/snomed.rb +0 -25
  248. data/lib/conceptql/operators/source_vocabulary_operator.rb +0 -88
  249. data/lib/conceptql/operators/standard_vocabulary_operator.rb +0 -66
  250. data/lib/conceptql/operators/started_by.rb +0 -23
  251. data/lib/conceptql/operators/to_seer_visits.rb +0 -29
  252. data/lib/conceptql/operators/visit_occurrence.rb +0 -32
  253. data/lib/conceptql/operators/vocabulary_operator.rb +0 -45
  254. data/lib/conceptql/query_modifiers/drug_query_modifier.rb +0 -45
  255. data/lib/conceptql/query_modifiers/pos_query_modifier.rb +0 -31
  256. data/lib/conceptql/sql_formatter.rb +0 -22
  257. data/test/all.rb +0 -3
  258. data/test/all_operations_test.rb +0 -45
  259. data/test/code_list_test.rb +0 -23
  260. data/test/data/omopv4/care_site.csv +0 -0
  261. data/test/data/omopv4/cohort.csv +0 -0
  262. data/test/data/omopv4/condition_era.csv +0 -0
  263. data/test/data/omopv4/condition_occurrence.csv +0 -34044
  264. data/test/data/omopv4/death.csv +0 -1
  265. data/test/data/omopv4/drug_cost.csv +0 -0
  266. data/test/data/omopv4/drug_era.csv +0 -0
  267. data/test/data/omopv4/drug_exposure.csv +0 -2
  268. data/test/data/omopv4/location.csv +0 -0
  269. data/test/data/omopv4/observation.csv +0 -2
  270. data/test/data/omopv4/observation_period.csv +0 -1
  271. data/test/data/omopv4/organization.csv +0 -0
  272. data/test/data/omopv4/payer_plan_period.csv +0 -0
  273. data/test/data/omopv4/person.csv +0 -250
  274. data/test/data/omopv4/procedure_cost.csv +0 -0
  275. data/test/data/omopv4/procedure_occurrence.csv +0 -35099
  276. data/test/data/omopv4/provider.csv +0 -0
  277. data/test/data/omopv4/visit_occurrence.csv +0 -14931
  278. data/test/data/omopv4_plus/care_site.csv +0 -0
  279. data/test/data/omopv4_plus/cohort.csv +0 -0
  280. data/test/data/omopv4_plus/concept.csv +0 -352
  281. data/test/data/omopv4_plus/condition_era.csv +0 -0
  282. data/test/data/omopv4_plus/condition_occurrence.csv +0 -46673
  283. data/test/data/omopv4_plus/death.csv +0 -9
  284. data/test/data/omopv4_plus/drug_cost.csv +0 -13921
  285. data/test/data/omopv4_plus/drug_era.csv +0 -0
  286. data/test/data/omopv4_plus/drug_exposure.csv +0 -13921
  287. data/test/data/omopv4_plus/headers/care_site.csv +0 -1
  288. data/test/data/omopv4_plus/headers/cohort.csv +0 -1
  289. data/test/data/omopv4_plus/headers/concept.csv +0 -1
  290. data/test/data/omopv4_plus/headers/condition_era.csv +0 -1
  291. data/test/data/omopv4_plus/headers/condition_occurrence.csv +0 -1
  292. data/test/data/omopv4_plus/headers/death.csv +0 -1
  293. data/test/data/omopv4_plus/headers/drug_cost.csv +0 -1
  294. data/test/data/omopv4_plus/headers/drug_era.csv +0 -1
  295. data/test/data/omopv4_plus/headers/drug_exposure.csv +0 -1
  296. data/test/data/omopv4_plus/headers/location.csv +0 -1
  297. data/test/data/omopv4_plus/headers/observation.csv +0 -1
  298. data/test/data/omopv4_plus/headers/observation_period.csv +0 -1
  299. data/test/data/omopv4_plus/headers/organization.csv +0 -1
  300. data/test/data/omopv4_plus/headers/payer_plan_period.csv +0 -1
  301. data/test/data/omopv4_plus/headers/person.csv +0 -1
  302. data/test/data/omopv4_plus/headers/procedure_cost.csv +0 -1
  303. data/test/data/omopv4_plus/headers/procedure_occurrence.csv +0 -1
  304. data/test/data/omopv4_plus/headers/provider.csv +0 -1
  305. data/test/data/omopv4_plus/headers/source_to_concept_map.csv +0 -1
  306. data/test/data/omopv4_plus/headers/visit_occurrence.csv +0 -1
  307. data/test/data/omopv4_plus/headers/vocabulary.csv +0 -1
  308. data/test/data/omopv4_plus/location.csv +0 -0
  309. data/test/data/omopv4_plus/observation.csv +0 -0
  310. data/test/data/omopv4_plus/observation_period.csv +0 -147
  311. data/test/data/omopv4_plus/organization.csv +0 -736
  312. data/test/data/omopv4_plus/payer_plan_period.csv +0 -808
  313. data/test/data/omopv4_plus/person.csv +0 -250
  314. data/test/data/omopv4_plus/procedure_cost.csv +0 -20123
  315. data/test/data/omopv4_plus/procedure_occurrence.csv +0 -27273
  316. data/test/data/omopv4_plus/provider.csv +0 -10193
  317. data/test/data/omopv4_plus/source_to_concept_map.csv +0 -285
  318. data/test/data/omopv4_plus/visit_occurrence.csv +0 -45125
  319. data/test/data/omopv4_plus/vocabulary.csv +0 -60
  320. data/test/db.rb +0 -15
  321. data/test/db_setup.rb +0 -408
  322. data/test/db_teardown.rb +0 -33
  323. data/test/fake_annotater_test.rb +0 -31
  324. data/test/helper.rb +0 -129
  325. data/test/knitter/conceptql.md.cql +0 -39
  326. data/test/knitter/conceptql.md.expect +0 -43
  327. data/test/knitter/empty.md.cql +0 -0
  328. data/test/knitter/except.md.cql +0 -13
  329. data/test/knitter/except.md.expect +0 -14
  330. data/test/knitter/fake.md.cql +0 -10
  331. data/test/knitter/fake.md.expect +0 -13
  332. data/test/knitter/many.md.cql +0 -7
  333. data/test/knitter/many.md.expect +0 -14
  334. data/test/knitter/no_conceptql.md.cql +0 -36
  335. data/test/knitter/title.md.cql +0 -12
  336. data/test/knitter/title.md.expect +0 -15
  337. data/test/knitter/union.md.cql +0 -11
  338. data/test/knitter/union.md.expect +0 -14
  339. data/test/knitter_test.rb +0 -69
  340. data/test/query_test.rb +0 -36
  341. data/test/results/omopv4/after/anno_1 +0 -25
  342. data/test/results/omopv4/after/anno_2 +0 -48
  343. data/test/results/omopv4/after/anno_3 +0 -34
  344. data/test/results/omopv4/after/anno_4 +0 -60
  345. data/test/results/omopv4/after/anno_5 +0 -68
  346. data/test/results/omopv4/after/anno_6 +0 -60
  347. data/test/results/omopv4/after/crit_at_least +0 -7
  348. data/test/results/omopv4/after/crit_basic +0 -32
  349. data/test/results/omopv4/after/crit_occurrences +0 -12
  350. data/test/results/omopv4/after/crit_within +0 -6
  351. data/test/results/omopv4/any_overlap/crit_basic1 +0 -15
  352. data/test/results/omopv4/any_overlap/crit_basic2 +0 -15
  353. data/test/results/omopv4/any_overlap/crit_occurrences1 +0 -2
  354. data/test/results/omopv4/any_overlap/crit_occurrences2 +0 -15
  355. data/test/results/omopv4/any_overlap/crit_within +0 -8
  356. data/test/results/omopv4/before/crit_at_least +0 -6
  357. data/test/results/omopv4/before/crit_basic1 +0 -48
  358. data/test/results/omopv4/before/crit_basic2 +0 -7
  359. data/test/results/omopv4/before/crit_occurrences +0 -13
  360. data/test/results/omopv4/before/crit_within +0 -18
  361. data/test/results/omopv4/co_reported/anno_1 +0 -43
  362. data/test/results/omopv4/co_reported/anno_2 +0 -66
  363. data/test/results/omopv4/complement/anno_duplicate_params +0 -52
  364. data/test/results/omopv4/complement/anno_invalid_params +0 -37
  365. data/test/results/omopv4/complement/anno_no_params +0 -18
  366. data/test/results/omopv4/complement/count_3way_intersect +0 -4
  367. data/test/results/omopv4/complement/count_3way_union +0 -4
  368. data/test/results/omopv4/complement/count_intersect +0 -3
  369. data/test/results/omopv4/complement/count_union +0 -3
  370. data/test/results/omopv4/complement/count_union_and_intersect +0 -4
  371. data/test/results/omopv4/complement/crit_3way_intersect +0 -1
  372. data/test/results/omopv4/complement/crit_3way_union +0 -1
  373. data/test/results/omopv4/complement/crit_basic1 +0 -33998
  374. data/test/results/omopv4/complement/crit_icd9_selector +0 -54
  375. data/test/results/omopv4/complement/crit_intersect +0 -1
  376. data/test/results/omopv4/complement/crit_union +0 -1
  377. data/test/results/omopv4/complement/crit_union_and_intersect +0 -1
  378. data/test/results/omopv4/complex/anno_1 +0 -85
  379. data/test/results/omopv4/complex/crit_1 +0 -2
  380. data/test/results/omopv4/complex/crit_2 +0 -2
  381. data/test/results/omopv4/complex/crit_3 +0 -2
  382. data/test/results/omopv4/complex/crit_4 +0 -5
  383. data/test/results/omopv4/complex/crit_5 +0 -6
  384. data/test/results/omopv4/complex/crit_6 +0 -28
  385. data/test/results/omopv4/complex/crit_7 +0 -46
  386. data/test/results/omopv4/complex/crit_out_of_order_ctes +0 -7
  387. data/test/results/omopv4/complex/scanno_1 +0 -3
  388. data/test/results/omopv4/concurrent_within/crit_icd9 +0 -54
  389. data/test/results/omopv4/concurrent_within/crit_icd9_and_place_of_service +0 -23
  390. data/test/results/omopv4/concurrent_within/crit_negative_start +0 -5
  391. data/test/results/omopv4/condition_type/anno_icd9 +0 -39
  392. data/test/results/omopv4/condition_type/count_condition_era +0 -2
  393. data/test/results/omopv4/condition_type/count_condition_era_30_day_window +0 -2
  394. data/test/results/omopv4/condition_type/count_ehr_problem_list +0 -2
  395. data/test/results/omopv4/condition_type/count_era_0 +0 -2
  396. data/test/results/omopv4/condition_type/count_inpatient +0 -3
  397. data/test/results/omopv4/condition_type/count_inpatient_detail +0 -2
  398. data/test/results/omopv4/condition_type/count_inpatient_header +0 -3
  399. data/test/results/omopv4/condition_type/count_inpatient_header_2 +0 -3
  400. data/test/results/omopv4/condition_type/count_inpatient_header_3 +0 -3
  401. data/test/results/omopv4/condition_type/count_inpatient_header_4 +0 -3
  402. data/test/results/omopv4/condition_type/count_inpatient_header_5 +0 -3
  403. data/test/results/omopv4/condition_type/count_inpatient_outpatient_detail +0 -3
  404. data/test/results/omopv4/condition_type/count_inpatient_primary +0 -2
  405. data/test/results/omopv4/condition_type/count_inpatient_primary_or_first +0 -3
  406. data/test/results/omopv4/condition_type/count_outpatient +0 -3
  407. data/test/results/omopv4/condition_type/count_outpatient_detail +0 -3
  408. data/test/results/omopv4/condition_type/count_outpatient_header +0 -2
  409. data/test/results/omopv4/condition_type/count_outpatient_primary +0 -3
  410. data/test/results/omopv4/condition_type/count_primary +0 -3
  411. data/test/results/omopv4/condition_type/crit_condition_era +0 -1
  412. data/test/results/omopv4/condition_type/crit_condition_era_30_day_window +0 -1
  413. data/test/results/omopv4/condition_type/crit_ehr_problem_list +0 -1
  414. data/test/results/omopv4/condition_type/crit_era_0 +0 -1
  415. data/test/results/omopv4/condition_type/crit_inpatient +0 -1
  416. data/test/results/omopv4/condition_type/crit_inpatient_detail +0 -1
  417. data/test/results/omopv4/condition_type/crit_inpatient_header +0 -1
  418. data/test/results/omopv4/condition_type/crit_inpatient_header_2 +0 -1
  419. data/test/results/omopv4/condition_type/crit_inpatient_header_3 +0 -1
  420. data/test/results/omopv4/condition_type/crit_inpatient_header_4 +0 -1
  421. data/test/results/omopv4/condition_type/crit_inpatient_header_5 +0 -1
  422. data/test/results/omopv4/condition_type/crit_inpatient_primary +0 -1
  423. data/test/results/omopv4/condition_type/crit_inpatient_primary_or_first +0 -1
  424. data/test/results/omopv4/condition_type/crit_outpatient +0 -1
  425. data/test/results/omopv4/condition_type/crit_outpatient_detail +0 -1
  426. data/test/results/omopv4/condition_type/crit_outpatient_header +0 -1
  427. data/test/results/omopv4/condition_type/crit_outpatient_primary +0 -1
  428. data/test/results/omopv4/condition_type/crit_primary +0 -1
  429. data/test/results/omopv4/contains/crit_1 +0 -5
  430. data/test/results/omopv4/contains/crit_2 +0 -2
  431. data/test/results/omopv4/contains/crit_3 +0 -2
  432. data/test/results/omopv4/count/anno_multiple_upstreams +0 -52
  433. data/test/results/omopv4/count/anno_no_upstream1 +0 -18
  434. data/test/results/omopv4/count/anno_no_upstream2 +0 -25
  435. data/test/results/omopv4/count/crit_icd9_ndc +0 -8
  436. data/test/results/omopv4/count/crit_ndc +0 -5
  437. data/test/results/omopv4/count/crit_person +0 -254
  438. data/test/results/omopv4/cpt/anno_icd9_upstream +0 -40
  439. data/test/results/omopv4/cpt/anno_invalid_code +0 -22
  440. data/test/results/omopv4/cpt/count_1 +0 -3
  441. data/test/results/omopv4/cpt/crit_1 +0 -174
  442. data/test/results/omopv4/cpt/crit_2 +0 -1
  443. data/test/results/omopv4/cpt/scanno_1 +0 -17
  444. data/test/results/omopv4/cpt_or_hcpcs/anno_bad_format +0 -25
  445. data/test/results/omopv4/cpt_or_hcpcs/count_1 +0 -3
  446. data/test/results/omopv4/cpt_or_hcpcs/crit_1 +0 -179
  447. data/test/results/omopv4/cpt_or_hcpcs/crit_2 +0 -1
  448. data/test/results/omopv4/date_range/anno_1 +0 -15
  449. data/test/results/omopv4/date_range/anno_extra_argument +0 -24
  450. data/test/results/omopv4/date_range/anno_invalid_argument +0 -25
  451. data/test/results/omopv4/date_range/anno_missing_argument1 +0 -20
  452. data/test/results/omopv4/date_range/anno_missing_argument2 +0 -20
  453. data/test/results/omopv4/date_range/anno_no_upstreams +0 -38
  454. data/test/results/omopv4/date_range/count_1 +0 -3
  455. data/test/results/omopv4/date_range/count_2 +0 -3
  456. data/test/results/omopv4/date_range/crit_1 +0 -1
  457. data/test/results/omopv4/date_range/crit_2 +0 -1
  458. data/test/results/omopv4/death/anno_multiple_upstreams +0 -50
  459. data/test/results/omopv4/death/anno_no_upstreams +0 -22
  460. data/test/results/omopv4/death/crit_basic +0 -5
  461. data/test/results/omopv4/death/crit_person +0 -5
  462. data/test/results/omopv4/drug_type_concept/anno_has_upstreams +0 -37
  463. data/test/results/omopv4/drug_type_concept/anno_no_arguments +0 -18
  464. data/test/results/omopv4/drug_type_concept/crit_basic1 +0 -5
  465. data/test/results/omopv4/drug_type_concept/crit_basic2 +0 -2
  466. data/test/results/omopv4/during/crit_1 +0 -15
  467. data/test/results/omopv4/during/crit_2 +0 -2
  468. data/test/results/omopv4/equal/crit_1 +0 -5
  469. data/test/results/omopv4/equal/crit_2 +0 -5
  470. data/test/results/omopv4/except/anno_1 +0 -42
  471. data/test/results/omopv4/except/anno_2 +0 -43
  472. data/test/results/omopv4/except/count_complex +0 -5
  473. data/test/results/omopv4/except/crit_412_cpt +0 -54
  474. data/test/results/omopv4/except/crit_412_inpatient +0 -46
  475. data/test/results/omopv4/except/crit_complex +0 -1
  476. data/test/results/omopv4/filter/crit_1 +0 -54
  477. data/test/results/omopv4/first/anno_argument +0 -25
  478. data/test/results/omopv4/first/anno_no_upstream +0 -18
  479. data/test/results/omopv4/first/crit_cpt +0 -207
  480. data/test/results/omopv4/first/crit_icd9 +0 -42
  481. data/test/results/omopv4/first/crit_union +0 -45
  482. data/test/results/omopv4/from/anno_has_upstreams +0 -39
  483. data/test/results/omopv4/from/anno_multiple_arguments +0 -24
  484. data/test/results/omopv4/from/count_condition_occurrence +0 -3
  485. data/test/results/omopv4/from/count_observation_period +0 -3
  486. data/test/results/omopv4/from/count_person +0 -3
  487. data/test/results/omopv4/from_seer_visits/anno_multiple_upstreams +0 -78
  488. data/test/results/omopv4/from_seer_visits/anno_no_upstream +0 -18
  489. data/test/results/omopv4/from_seer_visits/crit_1 +0 -6
  490. data/test/results/omopv4/from_seer_visits/crit_2 +0 -5
  491. data/test/results/omopv4/from_seer_visits/crit_3 +0 -5
  492. data/test/results/omopv4/from_seer_visits/crit_4 +0 -6
  493. data/test/results/omopv4/gender/anno_has_upstreams +0 -39
  494. data/test/results/omopv4/gender/crit_male +0 -130
  495. data/test/results/omopv4/hcpcs/anno_bad_format +0 -24
  496. data/test/results/omopv4/hcpcs/crit_A0382 +0 -9
  497. data/test/results/omopv4/icd10/anno_bad_format +0 -22
  498. data/test/results/omopv4/icd10/anno_has_upstreams +0 -40
  499. data/test/results/omopv4/icd10/crit_1 +0 -5
  500. data/test/results/omopv4/icd10pcs/anno_bad_format +0 -28
  501. data/test/results/omopv4/icd10pcs/anno_has_upstreams +0 -40
  502. data/test/results/omopv4/icd10pcs/crit_1 +0 -2
  503. data/test/results/omopv4/icd9/anno_empty_label +0 -15
  504. data/test/results/omopv4/icd9/anno_invalid_code +0 -21
  505. data/test/results/omopv4/icd9/crit_1 +0 -54
  506. data/test/results/omopv4/icd9_procedure/crit_1 +0 -5
  507. data/test/results/omopv4/intersect/anno_412_inpatient +0 -42
  508. data/test/results/omopv4/intersect/anno_has_arguments +0 -25
  509. data/test/results/omopv4/intersect/anno_no_upstream +0 -18
  510. data/test/results/omopv4/intersect/crit_412_inpatient +0 -12
  511. data/test/results/omopv4/intersect/crit_412_male +0 -182
  512. data/test/results/omopv4/intersect/crit_complex +0 -118
  513. data/test/results/omopv4/invalid/anno_bad_op +0 -55
  514. data/test/results/omopv4/invalid/scanno_1 +0 -23
  515. data/test/results/omopv4/last/crit_icd9 +0 -42
  516. data/test/results/omopv4/loinc/crit_basic +0 -5
  517. data/test/results/omopv4/ndc/crit_basic +0 -5
  518. data/test/results/omopv4/numeric/anno_multiple_upstreams +0 -59
  519. data/test/results/omopv4/numeric/num_values_1 +0 -254
  520. data/test/results/omopv4/numeric/num_values_2 +0 -5
  521. data/test/results/omopv4/numeric/num_values_3 +0 -5
  522. data/test/results/omopv4/observation_period/anno_has_arguments +0 -36
  523. data/test/results/omopv4/observation_period/anno_multiple_upstreams +0 -51
  524. data/test/results/omopv4/observation_period/count_all_periods +0 -3
  525. data/test/results/omopv4/observation_period/crit_female +0 -2
  526. data/test/results/omopv4/observation_period/crit_icd9 +0 -5
  527. data/test/results/omopv4/observation_period/crit_male +0 -5
  528. data/test/results/omopv4/occurrence/anno_no_upstream +0 -22
  529. data/test/results/omopv4/occurrence/cc_412_410 +0 -1
  530. data/test/results/omopv4/occurrence/count_412_410 +0 -3
  531. data/test/results/omopv4/occurrence/crit_1 +0 -16
  532. data/test/results/omopv4/occurrence/crit_2 +0 -2
  533. data/test/results/omopv4/occurrence/crit_3 +0 -42
  534. data/test/results/omopv4/one_in_two_out/anno_has_arguments +0 -27
  535. data/test/results/omopv4/one_in_two_out/anno_multiple_upstreams +0 -54
  536. data/test/results/omopv4/one_in_two_out/anno_no_upstream +0 -20
  537. data/test/results/omopv4/one_in_two_out/count_1 +0 -3
  538. data/test/results/omopv4/one_in_two_out/crit_hcpcs +0 -7
  539. data/test/results/omopv4/one_in_two_out/crit_icd9 +0 -21
  540. data/test/results/omopv4/overlapped_by/crit_1 +0 -5
  541. data/test/results/omopv4/overlapped_by/crit_2 +0 -2
  542. data/test/results/omopv4/overlapped_by/crit_3 +0 -5
  543. data/test/results/omopv4/overlapped_by/crit_4 +0 -2
  544. data/test/results/omopv4/overlaps/crit_1 +0 -5
  545. data/test/results/omopv4/overlaps/crit_2 +0 -2
  546. data/test/results/omopv4/overlaps/crit_3 +0 -5
  547. data/test/results/omopv4/overlaps/crit_4 +0 -2
  548. data/test/results/omopv4/person/anno_has_arguments +0 -22
  549. data/test/results/omopv4/person/anno_multiple_upstreams +0 -52
  550. data/test/results/omopv4/person/count_2 +0 -3
  551. data/test/results/omopv4/person/crit_1 +0 -42
  552. data/test/results/omopv4/person/crit_2 +0 -1
  553. data/test/results/omopv4/person_filter/count_1 +0 -4
  554. data/test/results/omopv4/person_filter/crit_1 +0 -54
  555. data/test/results/omopv4/person_filter/crit_2 +0 -5
  556. data/test/results/omopv4/person_filter/crit_3 +0 -32
  557. data/test/results/omopv4/person_filter/crit_4 +0 -52
  558. data/test/results/omopv4/person_filter/crit_5 +0 -1
  559. data/test/results/omopv4/place_of_service_code/anno_has_upstreams +0 -37
  560. data/test/results/omopv4/place_of_service_code/anno_no_arguments +0 -18
  561. data/test/results/omopv4/place_of_service_code/crit_basic +0 -174
  562. data/test/results/omopv4/place_of_service_filter/anno_1 +0 -29
  563. data/test/results/omopv4/procedure_occurrence/anno_has_arguments +0 -37
  564. data/test/results/omopv4/procedure_occurrence/anno_multiple_upstreams +0 -51
  565. data/test/results/omopv4/procedure_occurrence/count_gender +0 -3
  566. data/test/results/omopv4/procedure_occurrence/count_icd9 +0 -3
  567. data/test/results/omopv4/procedure_occurrence/count_started_by +0 -3
  568. data/test/results/omopv4/procedure_occurrence/crit_gender +0 -1
  569. data/test/results/omopv4/procedure_occurrence/crit_icd9 +0 -1
  570. data/test/results/omopv4/procedure_occurrence/crit_started_by +0 -1
  571. data/test/results/omopv4/provenance/anno_1 +0 -29
  572. data/test/results/omopv4/provider_filter/anno_1 +0 -29
  573. data/test/results/omopv4/race/anno_1 +0 -37
  574. data/test/results/omopv4/race/anno_2 +0 -18
  575. data/test/results/omopv4/race/crit_1 +0 -28
  576. data/test/results/omopv4/read/anno_1 +0 -21
  577. data/test/results/omopv4/read/crit_1 +0 -2
  578. data/test/results/omopv4/recall/anno_1 +0 -54
  579. data/test/results/omopv4/recall/anno_2 +0 -66
  580. data/test/results/omopv4/recall/anno_3 +0 -20
  581. data/test/results/omopv4/recall/anno_4 +0 -18
  582. data/test/results/omopv4/recall/anno_5 +0 -24
  583. data/test/results/omopv4/recall/anno_6 +0 -270
  584. data/test/results/omopv4/recall/crit_1 +0 -21
  585. data/test/results/omopv4/recall/crit_2 +0 -54
  586. data/test/results/omopv4/recall/crit_3 +0 -2
  587. data/test/results/omopv4/recall/crit_cte_1 +0 -42
  588. data/test/results/omopv4/recall/crit_cte_2 +0 -42
  589. data/test/results/omopv4/recall/crit_nested_perm_0 +0 -54
  590. data/test/results/omopv4/revenue_code/crit_1 +0 -2
  591. data/test/results/omopv4/revenue_code/crit_basic +0 -2
  592. data/test/results/omopv4/revenue_code/domains_1 +0 -3
  593. data/test/results/omopv4/revenue_code/domains_drg100 +0 -3
  594. data/test/results/omopv4/rxnorm/crit_1 +0 -5
  595. data/test/results/omopv4/snomed/crit_1 +0 -84
  596. data/test/results/omopv4/started_by/crit_1 +0 -5
  597. data/test/results/omopv4/started_by/crit_2 +0 -2
  598. data/test/results/omopv4/started_by/crit_3 +0 -2
  599. data/test/results/omopv4/sum/anno_1 +0 -18
  600. data/test/results/omopv4/sum/anno_2 +0 -36
  601. data/test/results/omopv4/sum/num_1 +0 -5
  602. data/test/results/omopv4/sum/num_2 +0 -8
  603. data/test/results/omopv4/sum/num_3 +0 -254
  604. data/test/results/omopv4/time_window/anno_1 +0 -20
  605. data/test/results/omopv4/time_window/anno_2 +0 -40
  606. data/test/results/omopv4/time_window/anno_3 +0 -36
  607. data/test/results/omopv4/time_window/anno_4 +0 -39
  608. data/test/results/omopv4/time_window/anno_5 +0 -57
  609. data/test/results/omopv4/time_window/crit_1 +0 -54
  610. data/test/results/omopv4/time_window/crit_2 +0 -174
  611. data/test/results/omopv4/time_window/crit_3 +0 -54
  612. data/test/results/omopv4/time_window/crit_4 +0 -174
  613. data/test/results/omopv4/trim_date_end/crit_1 +0 -5
  614. data/test/results/omopv4/trim_date_end/crit_2 +0 -2
  615. data/test/results/omopv4/trim_date_end/crit_3 +0 -6
  616. data/test/results/omopv4/trim_date_end/crit_at_least +0 -5
  617. data/test/results/omopv4/trim_date_end/crit_occurrences_1 +0 -2
  618. data/test/results/omopv4/trim_date_end/crit_occurrences_2 +0 -6
  619. data/test/results/omopv4/trim_date_end/crit_within +0 -5
  620. data/test/results/omopv4/trim_date_start/crit_1 +0 -5
  621. data/test/results/omopv4/trim_date_start/crit_2 +0 -2
  622. data/test/results/omopv4/trim_date_start/crit_3 +0 -6
  623. data/test/results/omopv4/trim_date_start/crit_at_least +0 -5
  624. data/test/results/omopv4/trim_date_start/crit_occurrences_1 +0 -2
  625. data/test/results/omopv4/trim_date_start/crit_occurrences_2 +0 -6
  626. data/test/results/omopv4/trim_date_start/crit_within +0 -5
  627. data/test/results/omopv4/union/anno_1 +0 -43
  628. data/test/results/omopv4/union/anno_2 +0 -74
  629. data/test/results/omopv4/union/anno_3 +0 -18
  630. data/test/results/omopv4/union/anno_4 +0 -25
  631. data/test/results/omopv4/union/anno_5 +0 -33
  632. data/test/results/omopv4/union/anno_6 +0 -46
  633. data/test/results/omopv4/union/cc_1 +0 -1
  634. data/test/results/omopv4/union/cc_2 +0 -1
  635. data/test/results/omopv4/union/cc_3 +0 -1
  636. data/test/results/omopv4/union/cc_4 +0 -1
  637. data/test/results/omopv4/union/cc_5 +0 -1
  638. data/test/results/omopv4/union/count_1 +0 -3
  639. data/test/results/omopv4/union/count_2 +0 -3
  640. data/test/results/omopv4/union/count_3 +0 -3
  641. data/test/results/omopv4/union/count_4 +0 -3
  642. data/test/results/omopv4/union/count_5 +0 -4
  643. data/test/results/omopv4/union/scanno_1 +0 -22
  644. data/test/results/omopv4/union/scanno_2 +0 -36
  645. data/test/results/omopv4/visit_occurrence/anno_1 +0 -52
  646. data/test/results/omopv4/visit_occurrence/anno_2 +0 -37
  647. data/test/results/omopv4/visit_occurrence/crit_1 +0 -54
  648. data/test/results/omopv4/visit_occurrence/crit_2 +0 -7566
  649. data/test/results/omopv4/visit_occurrence/crit_3 +0 -14935
  650. data/test/results/omopv4_plus/after/anno_1 +0 -25
  651. data/test/results/omopv4_plus/after/anno_2 +0 -48
  652. data/test/results/omopv4_plus/after/anno_3 +0 -34
  653. data/test/results/omopv4_plus/after/anno_4 +0 -60
  654. data/test/results/omopv4_plus/after/anno_5 +0 -68
  655. data/test/results/omopv4_plus/after/anno_6 +0 -60
  656. data/test/results/omopv4_plus/after/crit_at_least +0 -7
  657. data/test/results/omopv4_plus/after/crit_basic +0 -32
  658. data/test/results/omopv4_plus/after/crit_occurrences +0 -12
  659. data/test/results/omopv4_plus/after/crit_within +0 -5
  660. data/test/results/omopv4_plus/any_overlap/crit_basic1 +0 -14
  661. data/test/results/omopv4_plus/any_overlap/crit_basic2 +0 -14
  662. data/test/results/omopv4_plus/any_overlap/crit_occurrences1 +0 -2
  663. data/test/results/omopv4_plus/any_overlap/crit_occurrences2 +0 -14
  664. data/test/results/omopv4_plus/any_overlap/crit_within +0 -8
  665. data/test/results/omopv4_plus/before/crit_at_least +0 -6
  666. data/test/results/omopv4_plus/before/crit_basic1 +0 -48
  667. data/test/results/omopv4_plus/before/crit_basic2 +0 -8
  668. data/test/results/omopv4_plus/before/crit_occurrences +0 -13
  669. data/test/results/omopv4_plus/before/crit_within +0 -17
  670. data/test/results/omopv4_plus/co_reported/anno_1 +0 -43
  671. data/test/results/omopv4_plus/co_reported/anno_2 +0 -66
  672. data/test/results/omopv4_plus/co_reported/anno_3 +0 -47
  673. data/test/results/omopv4_plus/complement/anno_duplicate_params +0 -52
  674. data/test/results/omopv4_plus/complement/anno_invalid_params +0 -37
  675. data/test/results/omopv4_plus/complement/anno_no_params +0 -18
  676. data/test/results/omopv4_plus/complement/count_3way_intersect +0 -4
  677. data/test/results/omopv4_plus/complement/count_3way_union +0 -4
  678. data/test/results/omopv4_plus/complement/count_intersect +0 -3
  679. data/test/results/omopv4_plus/complement/count_union +0 -3
  680. data/test/results/omopv4_plus/complement/count_union_and_intersect +0 -4
  681. data/test/results/omopv4_plus/complement/crit_basic1 +0 -52483
  682. data/test/results/omopv4_plus/complement/crit_icd9_selector +0 -52
  683. data/test/results/omopv4_plus/complex/anno_1 +0 -85
  684. data/test/results/omopv4_plus/complex/crit_1 +0 -2
  685. data/test/results/omopv4_plus/complex/crit_2 +0 -2
  686. data/test/results/omopv4_plus/complex/crit_3 +0 -2
  687. data/test/results/omopv4_plus/complex/crit_4 +0 -2
  688. data/test/results/omopv4_plus/complex/crit_5 +0 -2
  689. data/test/results/omopv4_plus/complex/crit_6 +0 -24
  690. data/test/results/omopv4_plus/complex/crit_7 +0 -45
  691. data/test/results/omopv4_plus/complex/crit_out_of_order_ctes +0 -15
  692. data/test/results/omopv4_plus/complex/scanno_1 +0 -108
  693. data/test/results/omopv4_plus/concurrent_within/crit_icd9 +0 -52
  694. data/test/results/omopv4_plus/concurrent_within/crit_icd9_and_place_of_service +0 -21
  695. data/test/results/omopv4_plus/concurrent_within/crit_negative_start +0 -5
  696. data/test/results/omopv4_plus/condition_type/anno_icd9 +0 -39
  697. data/test/results/omopv4_plus/condition_type/count_condition_era +0 -2
  698. data/test/results/omopv4_plus/condition_type/count_condition_era_30_day_window +0 -2
  699. data/test/results/omopv4_plus/condition_type/count_ehr_problem_list +0 -2
  700. data/test/results/omopv4_plus/condition_type/count_era_0 +0 -2
  701. data/test/results/omopv4_plus/condition_type/count_inpatient +0 -3
  702. data/test/results/omopv4_plus/condition_type/count_inpatient_detail +0 -2
  703. data/test/results/omopv4_plus/condition_type/count_inpatient_header +0 -3
  704. data/test/results/omopv4_plus/condition_type/count_inpatient_header_2 +0 -3
  705. data/test/results/omopv4_plus/condition_type/count_inpatient_header_3 +0 -3
  706. data/test/results/omopv4_plus/condition_type/count_inpatient_header_4 +0 -3
  707. data/test/results/omopv4_plus/condition_type/count_inpatient_header_5 +0 -3
  708. data/test/results/omopv4_plus/condition_type/count_inpatient_outpatient_detail +0 -3
  709. data/test/results/omopv4_plus/condition_type/count_inpatient_primary +0 -3
  710. data/test/results/omopv4_plus/condition_type/count_inpatient_primary_or_first +0 -3
  711. data/test/results/omopv4_plus/condition_type/count_outpatient +0 -3
  712. data/test/results/omopv4_plus/condition_type/count_outpatient_detail +0 -2
  713. data/test/results/omopv4_plus/condition_type/count_outpatient_header +0 -3
  714. data/test/results/omopv4_plus/condition_type/count_outpatient_primary +0 -3
  715. data/test/results/omopv4_plus/condition_type/count_primary +0 -3
  716. data/test/results/omopv4_plus/contains/crit_1 +0 -5
  717. data/test/results/omopv4_plus/contains/crit_2 +0 -2
  718. data/test/results/omopv4_plus/contains/crit_3 +0 -2
  719. data/test/results/omopv4_plus/count/anno_multiple_upstreams +0 -52
  720. data/test/results/omopv4_plus/count/anno_no_upstream1 +0 -18
  721. data/test/results/omopv4_plus/count/anno_no_upstream2 +0 -25
  722. data/test/results/omopv4_plus/count/crit_icd9_ndc +0 -5
  723. data/test/results/omopv4_plus/count/crit_ndc +0 -2
  724. data/test/results/omopv4_plus/count/crit_person +0 -254
  725. data/test/results/omopv4_plus/cpt/anno_icd9_upstream +0 -40
  726. data/test/results/omopv4_plus/cpt/anno_invalid_code +0 -22
  727. data/test/results/omopv4_plus/cpt/count_1 +0 -3
  728. data/test/results/omopv4_plus/cpt/crit_1 +0 -158
  729. data/test/results/omopv4_plus/cpt/scanno_1 +0 -17
  730. data/test/results/omopv4_plus/cpt_or_hcpcs/anno_bad_format +0 -25
  731. data/test/results/omopv4_plus/cpt_or_hcpcs/count_1 +0 -3
  732. data/test/results/omopv4_plus/cpt_or_hcpcs/crit_1 +0 -161
  733. data/test/results/omopv4_plus/date_range/anno_1 +0 -15
  734. data/test/results/omopv4_plus/date_range/anno_extra_argument +0 -24
  735. data/test/results/omopv4_plus/date_range/anno_invalid_argument +0 -25
  736. data/test/results/omopv4_plus/date_range/anno_missing_argument1 +0 -20
  737. data/test/results/omopv4_plus/date_range/anno_missing_argument2 +0 -20
  738. data/test/results/omopv4_plus/date_range/anno_no_upstreams +0 -38
  739. data/test/results/omopv4_plus/date_range/count_1 +0 -3
  740. data/test/results/omopv4_plus/date_range/count_2 +0 -3
  741. data/test/results/omopv4_plus/death/anno_multiple_upstreams +0 -50
  742. data/test/results/omopv4_plus/death/anno_no_upstreams +0 -22
  743. data/test/results/omopv4_plus/death/crit_basic +0 -14
  744. data/test/results/omopv4_plus/death/crit_person +0 -14
  745. data/test/results/omopv4_plus/drug_type_concept/anno_has_upstreams +0 -37
  746. data/test/results/omopv4_plus/drug_type_concept/anno_no_arguments +0 -18
  747. data/test/results/omopv4_plus/drug_type_concept/crit_basic1 +0 -2
  748. data/test/results/omopv4_plus/drug_type_concept/crit_basic2 +0 -2
  749. data/test/results/omopv4_plus/during/crit_1 +0 -14
  750. data/test/results/omopv4_plus/during/crit_2 +0 -2
  751. data/test/results/omopv4_plus/equal/crit_1 +0 -2
  752. data/test/results/omopv4_plus/equal/crit_2 +0 -2
  753. data/test/results/omopv4_plus/except/anno_1 +0 -42
  754. data/test/results/omopv4_plus/except/anno_2 +0 -43
  755. data/test/results/omopv4_plus/except/count_complex +0 -5
  756. data/test/results/omopv4_plus/except/crit_412_cpt +0 -52
  757. data/test/results/omopv4_plus/except/crit_412_inpatient +0 -45
  758. data/test/results/omopv4_plus/filter/crit_1 +0 -52
  759. data/test/results/omopv4_plus/first/anno_argument +0 -25
  760. data/test/results/omopv4_plus/first/anno_no_upstream +0 -18
  761. data/test/results/omopv4_plus/first/crit_cpt +0 -180
  762. data/test/results/omopv4_plus/first/crit_icd9 +0 -41
  763. data/test/results/omopv4_plus/first/crit_union +0 -52
  764. data/test/results/omopv4_plus/from/anno_has_upstreams +0 -39
  765. data/test/results/omopv4_plus/from/anno_multiple_arguments +0 -24
  766. data/test/results/omopv4_plus/from/count_condition_occurrence +0 -3
  767. data/test/results/omopv4_plus/from/count_observation_period +0 -3
  768. data/test/results/omopv4_plus/from/count_person +0 -3
  769. data/test/results/omopv4_plus/from_seer_visits/anno_multiple_upstreams +0 -78
  770. data/test/results/omopv4_plus/from_seer_visits/anno_no_upstream +0 -18
  771. data/test/results/omopv4_plus/from_seer_visits/crit_1 +0 -2
  772. data/test/results/omopv4_plus/from_seer_visits/crit_2 +0 -2
  773. data/test/results/omopv4_plus/from_seer_visits/crit_3 +0 -2
  774. data/test/results/omopv4_plus/from_seer_visits/crit_4 +0 -2
  775. data/test/results/omopv4_plus/gender/anno_has_upstreams +0 -39
  776. data/test/results/omopv4_plus/gender/crit_male +0 -128
  777. data/test/results/omopv4_plus/hcpcs/anno_bad_format +0 -24
  778. data/test/results/omopv4_plus/hcpcs/crit_A0382 +0 -7
  779. data/test/results/omopv4_plus/icd10/anno_bad_format +0 -22
  780. data/test/results/omopv4_plus/icd10/anno_has_upstreams +0 -40
  781. data/test/results/omopv4_plus/icd10/crit_1 +0 -2
  782. data/test/results/omopv4_plus/icd10pcs/anno_bad_format +0 -28
  783. data/test/results/omopv4_plus/icd10pcs/anno_has_upstreams +0 -40
  784. data/test/results/omopv4_plus/icd10pcs/crit_1 +0 -2
  785. data/test/results/omopv4_plus/icd9/anno_empty_label +0 -15
  786. data/test/results/omopv4_plus/icd9/anno_invalid_code +0 -21
  787. data/test/results/omopv4_plus/icd9/anno_valid_code +0 -3
  788. data/test/results/omopv4_plus/icd9/crit_1 +0 -52
  789. data/test/results/omopv4_plus/icd9_procedure/crit_1 +0 -5
  790. data/test/results/omopv4_plus/intersect/anno_412_inpatient +0 -42
  791. data/test/results/omopv4_plus/intersect/anno_has_arguments +0 -25
  792. data/test/results/omopv4_plus/intersect/anno_no_upstream +0 -18
  793. data/test/results/omopv4_plus/intersect/crit_412_inpatient +0 -11
  794. data/test/results/omopv4_plus/intersect/crit_412_male +0 -178
  795. data/test/results/omopv4_plus/intersect/crit_complex +0 -110
  796. data/test/results/omopv4_plus/invalid/anno_bad_op +0 -55
  797. data/test/results/omopv4_plus/invalid/scanno_1 +0 -23
  798. data/test/results/omopv4_plus/last/crit_icd9 +0 -41
  799. data/test/results/omopv4_plus/loinc/crit_basic +0 -2
  800. data/test/results/omopv4_plus/ndc/crit_basic +0 -2
  801. data/test/results/omopv4_plus/ndc/results_1 +0 -41
  802. data/test/results/omopv4_plus/numeric/anno_multiple_upstreams +0 -59
  803. data/test/results/omopv4_plus/numeric/num_values_1 +0 -254
  804. data/test/results/omopv4_plus/numeric/num_values_2 +0 -5
  805. data/test/results/omopv4_plus/numeric/num_values_3 +0 -5
  806. data/test/results/omopv4_plus/observation_period/anno_has_arguments +0 -36
  807. data/test/results/omopv4_plus/observation_period/anno_multiple_upstreams +0 -51
  808. data/test/results/omopv4_plus/observation_period/count_all_periods +0 -3
  809. data/test/results/omopv4_plus/observation_period/crit_female +0 -87
  810. data/test/results/omopv4_plus/observation_period/crit_icd9 +0 -28
  811. data/test/results/omopv4_plus/observation_period/crit_male +0 -75
  812. data/test/results/omopv4_plus/occurrence/anno_no_upstream +0 -22
  813. data/test/results/omopv4_plus/occurrence/count_412_410 +0 -3
  814. data/test/results/omopv4_plus/occurrence/crit_1 +0 -15
  815. data/test/results/omopv4_plus/occurrence/crit_2 +0 -2
  816. data/test/results/omopv4_plus/occurrence/crit_3 +0 -41
  817. data/test/results/omopv4_plus/one_in_two_out/anno_has_arguments +0 -27
  818. data/test/results/omopv4_plus/one_in_two_out/anno_multiple_upstreams +0 -54
  819. data/test/results/omopv4_plus/one_in_two_out/anno_no_upstream +0 -20
  820. data/test/results/omopv4_plus/one_in_two_out/count_1 +0 -3
  821. data/test/results/omopv4_plus/one_in_two_out/count_same_as_1 +0 -3
  822. data/test/results/omopv4_plus/one_in_two_out/crit_hcpcs +0 -2
  823. data/test/results/omopv4_plus/one_in_two_out/crit_icd9 +0 -19
  824. data/test/results/omopv4_plus/one_in_two_out/results_1 +0 -803
  825. data/test/results/omopv4_plus/one_in_two_out/results_2 +0 -803
  826. data/test/results/omopv4_plus/overlapped_by/crit_1 +0 -5
  827. data/test/results/omopv4_plus/overlapped_by/crit_2 +0 -2
  828. data/test/results/omopv4_plus/overlapped_by/crit_3 +0 -5
  829. data/test/results/omopv4_plus/overlapped_by/crit_4 +0 -2
  830. data/test/results/omopv4_plus/overlaps/crit_1 +0 -5
  831. data/test/results/omopv4_plus/overlaps/crit_2 +0 -2
  832. data/test/results/omopv4_plus/overlaps/crit_3 +0 -5
  833. data/test/results/omopv4_plus/overlaps/crit_4 +0 -2
  834. data/test/results/omopv4_plus/person/anno_has_arguments +0 -22
  835. data/test/results/omopv4_plus/person/anno_multiple_upstreams +0 -52
  836. data/test/results/omopv4_plus/person/count_2 +0 -3
  837. data/test/results/omopv4_plus/person/crit_1 +0 -41
  838. data/test/results/omopv4_plus/person_filter/count_1 +0 -4
  839. data/test/results/omopv4_plus/person_filter/crit_1 +0 -52
  840. data/test/results/omopv4_plus/person_filter/crit_2 +0 -10
  841. data/test/results/omopv4_plus/person_filter/crit_3 +0 -32
  842. data/test/results/omopv4_plus/person_filter/crit_4 +0 -50
  843. data/test/results/omopv4_plus/place_of_service_code/anno_has_upstreams +0 -37
  844. data/test/results/omopv4_plus/place_of_service_code/anno_no_arguments +0 -18
  845. data/test/results/omopv4_plus/place_of_service_code/crit_basic +0 -157
  846. data/test/results/omopv4_plus/place_of_service_filter/anno_1 +0 -29
  847. data/test/results/omopv4_plus/procedure_occurrence/anno_has_arguments +0 -37
  848. data/test/results/omopv4_plus/procedure_occurrence/anno_multiple_upstreams +0 -51
  849. data/test/results/omopv4_plus/procedure_occurrence/count_gender +0 -3
  850. data/test/results/omopv4_plus/procedure_occurrence/count_icd9 +0 -3
  851. data/test/results/omopv4_plus/procedure_occurrence/count_started_by +0 -3
  852. data/test/results/omopv4_plus/provenance/anno_1 +0 -29
  853. data/test/results/omopv4_plus/provenance/anno_bad_keyword +0 -38
  854. data/test/results/omopv4_plus/provenance/count_1 +0 -3
  855. data/test/results/omopv4_plus/provenance/count_2 +0 -3
  856. data/test/results/omopv4_plus/provider_filter/anno_1 +0 -29
  857. data/test/results/omopv4_plus/race/anno_1 +0 -37
  858. data/test/results/omopv4_plus/race/anno_2 +0 -18
  859. data/test/results/omopv4_plus/race/crit_1 +0 -32
  860. data/test/results/omopv4_plus/read/anno_1 +0 -15
  861. data/test/results/omopv4_plus/read/crit_1 +0 -2
  862. data/test/results/omopv4_plus/recall/anno_1 +0 -54
  863. data/test/results/omopv4_plus/recall/anno_2 +0 -66
  864. data/test/results/omopv4_plus/recall/anno_3 +0 -20
  865. data/test/results/omopv4_plus/recall/anno_4 +0 -18
  866. data/test/results/omopv4_plus/recall/anno_5 +0 -24
  867. data/test/results/omopv4_plus/recall/anno_6 +0 -270
  868. data/test/results/omopv4_plus/recall/crit_1 +0 -19
  869. data/test/results/omopv4_plus/recall/crit_2 +0 -52
  870. data/test/results/omopv4_plus/recall/crit_3 +0 -2
  871. data/test/results/omopv4_plus/recall/crit_cte_1 +0 -41
  872. data/test/results/omopv4_plus/recall/crit_cte_2 +0 -41
  873. data/test/results/omopv4_plus/recall/crit_nested_perm_0 +0 -52
  874. data/test/results/omopv4_plus/revenue_code/crit_1 +0 -2
  875. data/test/results/omopv4_plus/revenue_code/crit_basic +0 -2
  876. data/test/results/omopv4_plus/revenue_code/domains_1 +0 -3
  877. data/test/results/omopv4_plus/revenue_code/domains_drg100 +0 -3
  878. data/test/results/omopv4_plus/rxnorm/crit_1 +0 -2
  879. data/test/results/omopv4_plus/snomed/crit_1 +0 -2
  880. data/test/results/omopv4_plus/started_by/crit_1 +0 -5
  881. data/test/results/omopv4_plus/started_by/crit_2 +0 -2
  882. data/test/results/omopv4_plus/started_by/crit_3 +0 -2
  883. data/test/results/omopv4_plus/sum/anno_1 +0 -18
  884. data/test/results/omopv4_plus/sum/anno_2 +0 -36
  885. data/test/results/omopv4_plus/sum/num_1 +0 -2
  886. data/test/results/omopv4_plus/sum/num_2 +0 -5
  887. data/test/results/omopv4_plus/sum/num_3 +0 -254
  888. data/test/results/omopv4_plus/time_window/anno_1 +0 -20
  889. data/test/results/omopv4_plus/time_window/anno_2 +0 -40
  890. data/test/results/omopv4_plus/time_window/anno_3 +0 -36
  891. data/test/results/omopv4_plus/time_window/anno_4 +0 -39
  892. data/test/results/omopv4_plus/time_window/anno_5 +0 -57
  893. data/test/results/omopv4_plus/time_window/crit_1 +0 -52
  894. data/test/results/omopv4_plus/time_window/crit_2 +0 -157
  895. data/test/results/omopv4_plus/time_window/crit_3 +0 -52
  896. data/test/results/omopv4_plus/time_window/crit_4 +0 -157
  897. data/test/results/omopv4_plus/trim_date_end/crit_1 +0 -5
  898. data/test/results/omopv4_plus/trim_date_end/crit_2 +0 -2
  899. data/test/results/omopv4_plus/trim_date_end/crit_3 +0 -6
  900. data/test/results/omopv4_plus/trim_date_end/crit_at_least +0 -5
  901. data/test/results/omopv4_plus/trim_date_end/crit_occurrences_1 +0 -2
  902. data/test/results/omopv4_plus/trim_date_end/crit_occurrences_2 +0 -6
  903. data/test/results/omopv4_plus/trim_date_end/crit_within +0 -5
  904. data/test/results/omopv4_plus/trim_date_start/crit_1 +0 -5
  905. data/test/results/omopv4_plus/trim_date_start/crit_2 +0 -2
  906. data/test/results/omopv4_plus/trim_date_start/crit_3 +0 -6
  907. data/test/results/omopv4_plus/trim_date_start/crit_at_least +0 -5
  908. data/test/results/omopv4_plus/trim_date_start/crit_occurrences_1 +0 -2
  909. data/test/results/omopv4_plus/trim_date_start/crit_occurrences_2 +0 -6
  910. data/test/results/omopv4_plus/trim_date_start/crit_within +0 -5
  911. data/test/results/omopv4_plus/union/anno_1 +0 -43
  912. data/test/results/omopv4_plus/union/anno_2 +0 -74
  913. data/test/results/omopv4_plus/union/anno_3 +0 -18
  914. data/test/results/omopv4_plus/union/anno_4 +0 -25
  915. data/test/results/omopv4_plus/union/anno_5 +0 -33
  916. data/test/results/omopv4_plus/union/anno_6 +0 -46
  917. data/test/results/omopv4_plus/union/count_1 +0 -3
  918. data/test/results/omopv4_plus/union/count_2 +0 -3
  919. data/test/results/omopv4_plus/union/count_3 +0 -3
  920. data/test/results/omopv4_plus/union/count_4 +0 -3
  921. data/test/results/omopv4_plus/union/count_5 +0 -4
  922. data/test/results/omopv4_plus/union/optcc_1 +0 -3
  923. data/test/results/omopv4_plus/union/optcc_2 +0 -3
  924. data/test/results/omopv4_plus/union/optcc_3 +0 -3
  925. data/test/results/omopv4_plus/union/optcc_4 +0 -3
  926. data/test/results/omopv4_plus/union/optcc_5 +0 -3
  927. data/test/results/omopv4_plus/union/optcc_6 +0 -3
  928. data/test/results/omopv4_plus/union/scanno_1 +0 -22
  929. data/test/results/omopv4_plus/union/scanno_2 +0 -36
  930. data/test/results/omopv4_plus/visit_occurrence/anno_1 +0 -52
  931. data/test/results/omopv4_plus/visit_occurrence/anno_2 +0 -37
  932. data/test/results/omopv4_plus/visit_occurrence/crit_1 +0 -52
  933. data/test/results/omopv4_plus/visit_occurrence/crit_2 +0 -22945
  934. data/test/results/omopv4_plus/visit_occurrence/crit_3 +0 -46851
  935. data/test/statements/after/anno_1 +0 -7
  936. data/test/statements/after/anno_2 +0 -16
  937. data/test/statements/after/anno_3 +0 -9
  938. data/test/statements/after/anno_4 +0 -19
  939. data/test/statements/after/anno_5 +0 -21
  940. data/test/statements/after/anno_6 +0 -16
  941. data/test/statements/after/crit_at_least +0 -21
  942. data/test/statements/after/crit_basic +0 -20
  943. data/test/statements/after/crit_occurrences +0 -21
  944. data/test/statements/after/crit_within +0 -21
  945. data/test/statements/any_overlap/crit_basic1 +0 -16
  946. data/test/statements/any_overlap/crit_basic2 +0 -16
  947. data/test/statements/any_overlap/crit_occurrences1 +0 -17
  948. data/test/statements/any_overlap/crit_occurrences2 +0 -17
  949. data/test/statements/any_overlap/crit_within +0 -17
  950. data/test/statements/before/crit_at_least +0 -14
  951. data/test/statements/before/crit_basic1 +0 -13
  952. data/test/statements/before/crit_basic2 +0 -16
  953. data/test/statements/before/crit_occurrences +0 -14
  954. data/test/statements/before/crit_within +0 -14
  955. data/test/statements/co_reported/anno_1 +0 -13
  956. data/test/statements/co_reported/anno_2 +0 -21
  957. data/test/statements/co_reported/anno_3 +0 -14
  958. data/test/statements/complement/anno_duplicate_params +0 -11
  959. data/test/statements/complement/anno_invalid_params +0 -8
  960. data/test/statements/complement/anno_no_params +0 -3
  961. data/test/statements/complement/count_3way_intersect +0 -24
  962. data/test/statements/complement/count_3way_union +0 -18
  963. data/test/statements/complement/count_intersect +0 -17
  964. data/test/statements/complement/count_union +0 -14
  965. data/test/statements/complement/count_union_and_intersect +0 -27
  966. data/test/statements/complement/crit_basic1 +0 -7
  967. data/test/statements/complement/crit_icd9_selector +0 -10
  968. data/test/statements/complex/anno_1 +0 -29
  969. data/test/statements/complex/crit_1 +0 -278
  970. data/test/statements/complex/crit_2 +0 -43
  971. data/test/statements/complex/crit_3 +0 -54
  972. data/test/statements/complex/crit_4 +0 -17
  973. data/test/statements/complex/crit_5 +0 -17
  974. data/test/statements/complex/crit_6 +0 -20
  975. data/test/statements/complex/crit_7 +0 -14
  976. data/test/statements/complex/crit_out_of_order_ctes +0 -39
  977. data/test/statements/complex/scanno_1 +0 -1508
  978. data/test/statements/concurrent_within/crit_icd9 +0 -11
  979. data/test/statements/concurrent_within/crit_icd9_and_place_of_service +0 -15
  980. data/test/statements/concurrent_within/crit_negative_start +0 -15
  981. data/test/statements/condition_type/anno_icd9 +0 -7
  982. data/test/statements/condition_type/count_condition_era +0 -4
  983. data/test/statements/condition_type/count_condition_era_30_day_window +0 -4
  984. data/test/statements/condition_type/count_ehr_problem_list +0 -4
  985. data/test/statements/condition_type/count_era_0 +0 -4
  986. data/test/statements/condition_type/count_inpatient +0 -4
  987. data/test/statements/condition_type/count_inpatient_detail +0 -4
  988. data/test/statements/condition_type/count_inpatient_header +0 -4
  989. data/test/statements/condition_type/count_inpatient_header_2 +0 -4
  990. data/test/statements/condition_type/count_inpatient_header_3 +0 -4
  991. data/test/statements/condition_type/count_inpatient_header_4 +0 -4
  992. data/test/statements/condition_type/count_inpatient_header_5 +0 -4
  993. data/test/statements/condition_type/count_inpatient_outpatient_detail +0 -5
  994. data/test/statements/condition_type/count_inpatient_primary +0 -4
  995. data/test/statements/condition_type/count_inpatient_primary_or_first +0 -4
  996. data/test/statements/condition_type/count_outpatient +0 -4
  997. data/test/statements/condition_type/count_outpatient_detail +0 -4
  998. data/test/statements/condition_type/count_outpatient_header +0 -4
  999. data/test/statements/condition_type/count_outpatient_primary +0 -4
  1000. data/test/statements/condition_type/count_primary +0 -4
  1001. data/test/statements/contains/crit_1 +0 -16
  1002. data/test/statements/contains/crit_2 +0 -16
  1003. data/test/statements/contains/crit_3 +0 -16
  1004. data/test/statements/count/anno_multiple_upstreams +0 -11
  1005. data/test/statements/count/anno_no_upstream1 +0 -3
  1006. data/test/statements/count/anno_no_upstream2 +0 -4
  1007. data/test/statements/count/crit_icd9_ndc +0 -15
  1008. data/test/statements/count/crit_ndc +0 -11
  1009. data/test/statements/count/crit_person +0 -7
  1010. data/test/statements/cpt/anno_icd9_upstream +0 -7
  1011. data/test/statements/cpt/anno_invalid_code +0 -5
  1012. data/test/statements/cpt/count_1 +0 -4
  1013. data/test/statements/cpt/crit_1 +0 -4
  1014. data/test/statements/cpt/scanno_1 +0 -4
  1015. data/test/statements/cpt_or_hcpcs/anno_bad_format +0 -7
  1016. data/test/statements/cpt_or_hcpcs/count_1 +0 -5
  1017. data/test/statements/cpt_or_hcpcs/crit_1 +0 -5
  1018. data/test/statements/date_range/anno_1 +0 -7
  1019. data/test/statements/date_range/anno_extra_argument +0 -8
  1020. data/test/statements/date_range/anno_invalid_argument +0 -7
  1021. data/test/statements/date_range/anno_missing_argument1 +0 -6
  1022. data/test/statements/date_range/anno_missing_argument2 +0 -6
  1023. data/test/statements/date_range/anno_no_upstreams +0 -11
  1024. data/test/statements/date_range/count_1 +0 -7
  1025. data/test/statements/date_range/count_2 +0 -7
  1026. data/test/statements/death/anno_multiple_upstreams +0 -10
  1027. data/test/statements/death/anno_no_upstreams +0 -4
  1028. data/test/statements/death/crit_basic +0 -3
  1029. data/test/statements/death/crit_person +0 -7
  1030. data/test/statements/drug_type_concept/anno_has_upstreams +0 -8
  1031. data/test/statements/drug_type_concept/anno_no_arguments +0 -3
  1032. data/test/statements/drug_type_concept/crit_basic1 +0 -4
  1033. data/test/statements/drug_type_concept/crit_basic2 +0 -4
  1034. data/test/statements/during/crit_1 +0 -16
  1035. data/test/statements/during/crit_2 +0 -16
  1036. data/test/statements/equal/crit_1 +0 -17
  1037. data/test/statements/equal/crit_2 +0 -21
  1038. data/test/statements/except/anno_1 +0 -13
  1039. data/test/statements/except/anno_2 +0 -14
  1040. data/test/statements/except/count_complex +0 -31
  1041. data/test/statements/except/crit_412_cpt +0 -13
  1042. data/test/statements/except/crit_412_inpatient +0 -13
  1043. data/test/statements/filter/crit_1 +0 -15
  1044. data/test/statements/first/anno_argument +0 -4
  1045. data/test/statements/first/anno_no_upstream +0 -3
  1046. data/test/statements/first/crit_cpt +0 -7
  1047. data/test/statements/first/crit_icd9 +0 -7
  1048. data/test/statements/first/crit_union +0 -14
  1049. data/test/statements/from/anno_has_upstreams +0 -7
  1050. data/test/statements/from/anno_multiple_arguments +0 -5
  1051. data/test/statements/from_seer_visits/anno_multiple_upstreams +0 -17
  1052. data/test/statements/from_seer_visits/anno_no_upstream +0 -3
  1053. data/test/statements/from_seer_visits/crit_1 +0 -10
  1054. data/test/statements/from_seer_visits/crit_2 +0 -11
  1055. data/test/statements/from_seer_visits/crit_3 +0 -11
  1056. data/test/statements/from_seer_visits/crit_4 +0 -12
  1057. data/test/statements/gender/anno_has_upstreams +0 -7
  1058. data/test/statements/gender/crit_male +0 -4
  1059. data/test/statements/hcpcs/anno_bad_format +0 -6
  1060. data/test/statements/hcpcs/crit_A0382 +0 -4
  1061. data/test/statements/icd10/anno_bad_format +0 -5
  1062. data/test/statements/icd10/anno_has_upstreams +0 -7
  1063. data/test/statements/icd10/crit_1 +0 -4
  1064. data/test/statements/icd10pcs/anno_bad_format +0 -6
  1065. data/test/statements/icd10pcs/anno_has_upstreams +0 -7
  1066. data/test/statements/icd10pcs/crit_1 +0 -4
  1067. data/test/statements/icd9/anno_empty_label +0 -7
  1068. data/test/statements/icd9/anno_invalid_code +0 -4
  1069. data/test/statements/icd9/anno_valid_code +0 -4
  1070. data/test/statements/icd9/crit_1 +0 -4
  1071. data/test/statements/icd9_procedure/crit_1 +0 -4
  1072. data/test/statements/intersect/anno_412_inpatient +0 -11
  1073. data/test/statements/intersect/anno_has_arguments +0 -4
  1074. data/test/statements/intersect/anno_no_upstream +0 -3
  1075. data/test/statements/intersect/crit_412_inpatient +0 -11
  1076. data/test/statements/intersect/crit_412_male +0 -11
  1077. data/test/statements/intersect/crit_complex +0 -19
  1078. data/test/statements/invalid/anno_bad_op +0 -13
  1079. data/test/statements/invalid/scanno_1 +0 -7
  1080. data/test/statements/last/crit_icd9 +0 -7
  1081. data/test/statements/loinc/crit_basic +0 -4
  1082. data/test/statements/ndc/crit_basic +0 -4
  1083. data/test/statements/ndc/results_1 +0 -4
  1084. data/test/statements/numeric/anno_multiple_upstreams +0 -11
  1085. data/test/statements/numeric/num_values_1 +0 -4
  1086. data/test/statements/numeric/num_values_2 +0 -8
  1087. data/test/statements/numeric/num_values_3 +0 -8
  1088. data/test/statements/observation_period/anno_has_arguments +0 -8
  1089. data/test/statements/observation_period/anno_multiple_upstreams +0 -11
  1090. data/test/statements/observation_period/count_all_periods +0 -4
  1091. data/test/statements/observation_period/crit_female +0 -7
  1092. data/test/statements/observation_period/crit_icd9 +0 -7
  1093. data/test/statements/observation_period/crit_male +0 -7
  1094. data/test/statements/occurrence/anno_no_upstream +0 -3
  1095. data/test/statements/occurrence/count_412_410 +0 -17
  1096. data/test/statements/occurrence/crit_1 +0 -8
  1097. data/test/statements/occurrence/crit_2 +0 -11
  1098. data/test/statements/occurrence/crit_3 +0 -11
  1099. data/test/statements/one_in_two_out/anno_has_arguments +0 -8
  1100. data/test/statements/one_in_two_out/anno_multiple_upstreams +0 -15
  1101. data/test/statements/one_in_two_out/anno_no_upstream +0 -7
  1102. data/test/statements/one_in_two_out/count_1 +0 -10
  1103. data/test/statements/one_in_two_out/count_same_as_1 +0 -11
  1104. data/test/statements/one_in_two_out/crit_hcpcs +0 -10
  1105. data/test/statements/one_in_two_out/crit_icd9 +0 -11
  1106. data/test/statements/one_in_two_out/results_1 +0 -9
  1107. data/test/statements/one_in_two_out/results_2 +0 -9
  1108. data/test/statements/overlapped_by/crit_1 +0 -16
  1109. data/test/statements/overlapped_by/crit_2 +0 -16
  1110. data/test/statements/overlapped_by/crit_3 +0 -16
  1111. data/test/statements/overlapped_by/crit_4 +0 -16
  1112. data/test/statements/overlaps/crit_1 +0 -16
  1113. data/test/statements/overlaps/crit_2 +0 -16
  1114. data/test/statements/overlaps/crit_3 +0 -16
  1115. data/test/statements/overlaps/crit_4 +0 -16
  1116. data/test/statements/person/anno_has_arguments +0 -4
  1117. data/test/statements/person/anno_multiple_upstreams +0 -11
  1118. data/test/statements/person/count_2 +0 -3
  1119. data/test/statements/person/crit_1 +0 -7
  1120. data/test/statements/person_filter/count_1 +0 -20
  1121. data/test/statements/person_filter/crit_1 +0 -20
  1122. data/test/statements/person_filter/crit_2 +0 -13
  1123. data/test/statements/person_filter/crit_3 +0 -13
  1124. data/test/statements/person_filter/crit_4 +0 -13
  1125. data/test/statements/place_of_service_code/anno_has_upstreams +0 -8
  1126. data/test/statements/place_of_service_code/anno_no_arguments +0 -3
  1127. data/test/statements/place_of_service_code/crit_basic +0 -4
  1128. data/test/statements/place_of_service_filter/anno_1 +0 -8
  1129. data/test/statements/procedure_occurrence/anno_has_arguments +0 -8
  1130. data/test/statements/procedure_occurrence/anno_multiple_upstreams +0 -11
  1131. data/test/statements/procedure_occurrence/count_gender +0 -7
  1132. data/test/statements/procedure_occurrence/count_icd9 +0 -7
  1133. data/test/statements/procedure_occurrence/count_started_by +0 -19
  1134. data/test/statements/provenance/anno_1 +0 -8
  1135. data/test/statements/provenance/anno_bad_keyword +0 -10
  1136. data/test/statements/provenance/count_1 +0 -8
  1137. data/test/statements/provenance/count_2 +0 -8
  1138. data/test/statements/provider_filter/anno_1 +0 -10
  1139. data/test/statements/race/anno_1 +0 -8
  1140. data/test/statements/race/anno_2 +0 -3
  1141. data/test/statements/race/crit_1 +0 -4
  1142. data/test/statements/read/anno_1 +0 -4
  1143. data/test/statements/read/crit_1 +0 -8
  1144. data/test/statements/recall/anno_1 +0 -16
  1145. data/test/statements/recall/anno_2 +0 -18
  1146. data/test/statements/recall/anno_3 +0 -4
  1147. data/test/statements/recall/anno_4 +0 -3
  1148. data/test/statements/recall/anno_5 +0 -5
  1149. data/test/statements/recall/anno_6 +0 -107
  1150. data/test/statements/recall/crit_1 +0 -17
  1151. data/test/statements/recall/crit_2 +0 -14
  1152. data/test/statements/recall/crit_3 +0 -16
  1153. data/test/statements/recall/crit_cte_1 +0 -17
  1154. data/test/statements/recall/crit_cte_2 +0 -17
  1155. data/test/statements/recall/crit_nested_perm_0 +0 -28
  1156. data/test/statements/revenue_code/crit_1 +0 -4
  1157. data/test/statements/revenue_code/crit_basic +0 -4
  1158. data/test/statements/revenue_code/domains_1 +0 -4
  1159. data/test/statements/revenue_code/domains_drg100 +0 -4
  1160. data/test/statements/rxnorm/crit_1 +0 -4
  1161. data/test/statements/snomed/crit_1 +0 -4
  1162. data/test/statements/started_by/crit_1 +0 -16
  1163. data/test/statements/started_by/crit_2 +0 -16
  1164. data/test/statements/started_by/crit_3 +0 -16
  1165. data/test/statements/sum/anno_1 +0 -3
  1166. data/test/statements/sum/anno_2 +0 -8
  1167. data/test/statements/sum/num_1 +0 -11
  1168. data/test/statements/sum/num_2 +0 -15
  1169. data/test/statements/sum/num_3 +0 -7
  1170. data/test/statements/time_window/anno_1 +0 -7
  1171. data/test/statements/time_window/anno_2 +0 -11
  1172. data/test/statements/time_window/anno_3 +0 -11
  1173. data/test/statements/time_window/anno_4 +0 -12
  1174. data/test/statements/time_window/anno_5 +0 -15
  1175. data/test/statements/time_window/crit_1 +0 -11
  1176. data/test/statements/time_window/crit_2 +0 -11
  1177. data/test/statements/time_window/crit_3 +0 -11
  1178. data/test/statements/time_window/crit_4 +0 -11
  1179. data/test/statements/trim_date_end/crit_1 +0 -16
  1180. data/test/statements/trim_date_end/crit_2 +0 -16
  1181. data/test/statements/trim_date_end/crit_3 +0 -16
  1182. data/test/statements/trim_date_end/crit_at_least +0 -17
  1183. data/test/statements/trim_date_end/crit_occurrences_1 +0 -17
  1184. data/test/statements/trim_date_end/crit_occurrences_2 +0 -17
  1185. data/test/statements/trim_date_end/crit_within +0 -17
  1186. data/test/statements/trim_date_start/crit_1 +0 -16
  1187. data/test/statements/trim_date_start/crit_2 +0 -16
  1188. data/test/statements/trim_date_start/crit_3 +0 -16
  1189. data/test/statements/trim_date_start/crit_at_least +0 -17
  1190. data/test/statements/trim_date_start/crit_occurrences_1 +0 -17
  1191. data/test/statements/trim_date_start/crit_occurrences_2 +0 -17
  1192. data/test/statements/trim_date_start/crit_within +0 -17
  1193. data/test/statements/union/anno_1 +0 -11
  1194. data/test/statements/union/anno_2 +0 -18
  1195. data/test/statements/union/anno_3 +0 -3
  1196. data/test/statements/union/anno_4 +0 -4
  1197. data/test/statements/union/anno_5 +0 -7
  1198. data/test/statements/union/anno_6 +0 -10
  1199. data/test/statements/union/count_1 +0 -11
  1200. data/test/statements/union/count_2 +0 -11
  1201. data/test/statements/union/count_3 +0 -15
  1202. data/test/statements/union/count_4 +0 -18
  1203. data/test/statements/union/count_5 +0 -18
  1204. data/test/statements/union/scanno_1 +0 -3
  1205. data/test/statements/union/scanno_2 +0 -18
  1206. data/test/statements/visit_occurrence/anno_1 +0 -11
  1207. data/test/statements/visit_occurrence/anno_2 +0 -8
  1208. data/test/statements/visit_occurrence/crit_1 +0 -7
  1209. data/test/statements/visit_occurrence/crit_2 +0 -7
  1210. data/test/statements/visit_occurrence/crit_3 +0 -3
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "operator"
4
+
5
+ module ConceptQL
6
+ module Operators
7
+ class Snf < Operator
8
+ # GDM only: omopv4_plus has no provenance vocabularies (conceptql-myp).
9
+ register __FILE__, :gdm, :gdm_wide
10
+ include ConceptQL::Behaviors::Utilizable
11
+
12
+ desc "Selects admission records of type 'SNF'"
13
+
14
+ def collection_type
15
+ "SNF"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,13 +1,25 @@
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
5
7
  class Sum < PassThru
6
8
  register __FILE__
7
9
 
8
- desc <<-EOF
9
- Sums value_as_number across all results that match on all but start_date, end_date.
10
- For start_date and end_date the min and max of each respectively is returned.'
10
+ def events_per_patient
11
+ :multiple
12
+ end
13
+
14
+ def multiple_vocabularies
15
+ return true if upstreams.any?(&:multiple_vocabularies)
16
+
17
+ vocabularies.length > 1
18
+ end
19
+
20
+ desc <<~EOF
21
+ Sums value_as_number across all records that match on all but start_date, end_date.
22
+ For start_date and end_date the min and max of each respectively is returned.'
11
23
  EOF
12
24
  default_query_columns
13
25
  validate_at_least_one_upstream
@@ -16,20 +28,19 @@ For start_date and end_date the min and max of each respectively is returned.'
16
28
 
17
29
  def query(db)
18
30
  db.from(unioned(db))
19
- .select_group(*(dynamic_columns - [:start_date, :end_date, :criterion_id, :value_as_number]))
20
- .select_append(Sequel.lit('?', 0).as(:criterion_id))
21
- .select_append{ min(start_date).as(:start_date) }
22
- .select_append{ max(end_date).as(:end_date) }
23
- .select_append{sum(value_as_number).as(:value_as_number)}
31
+ .select_group(*(dynamic_columns - %i[start_date end_date criterion_id value_as_number]))
32
+ .select_append(Sequel.lit("?", 0).as(:criterion_id))
33
+ .select_append { min(start_date).as(:start_date) }
34
+ .select_append { max(end_date).as(:end_date) }
35
+ .select_append { sum(value_as_number).as(:value_as_number) }
24
36
  .from_self
25
37
  end
26
38
 
27
39
  def unioned(db)
28
- upstreams.map { |c| c.evaluate(db) }.inject do |uni, q|
29
- uni.union(q)
40
+ upstreams.map { |c| c.evaluate(db).select(*query_cols) }.inject do |uni, q|
41
+ uni.union(q.from_self)
30
42
  end
31
43
  end
32
44
  end
33
45
  end
34
46
  end
35
-
@@ -1,5 +1,7 @@
1
- require_relative 'binary_operator_operator'
2
- require_relative '../date_adjuster'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "binary_operator_operator"
4
+ require_relative "../date_adjuster"
3
5
 
4
6
  module ConceptQL
5
7
  module Operators
@@ -12,91 +14,115 @@ module ConceptQL
12
14
  category "Filter by Comparing"
13
15
  default_query_columns
14
16
 
15
- option :within, type: :string, instructions: 'Enter a numeric value and specify "d", "m", or "y" for "days", "months", or "years". Negative numbers change dates prior to the existing date. Example: -30d = 30 days before the existing date.'
16
- option :at_least, type: :string, instructions: 'Enter a numeric value and specify "d", "m", or "y" for "days", "months", or "years". Negative numbers change dates prior to the existing date. Example: -30d = 30 days before the existing date.'
17
- option :occurrences, type: :integer, desc: "Number of occurrences that must precede the event of interest, e.g. if you'd like the 4th event in a set of events, set occurrences to 3"
17
+ option :within, type: :string,
18
+ instructions: 'Enter a numeric value and specify "d", "m", or "y" for "days", "months", or "years". Negative numbers change dates prior to the existing date. Example: -30d = 30 days before the existing date.'
19
+
20
+ # The temporal operators read join_columns through
21
+ # BinaryOperatorOperator#join_columns_option, but do not declare it with
22
+ # `option`: only t_shank gives it, and a declared option would appear in
23
+ # ConceptQL.metadata, so the diagram editor would offer it (Ryan,
24
+ # 2026-10-26).
18
25
 
19
26
  validate_option DateAdjuster::VALID_INPUT, :within, :at_least
20
- validate_option /\A\d+\z/, :occurrences
27
+
28
+ class << self
29
+ def allows_at_least_option
30
+ option :at_least, type: :string,
31
+ instructions: 'Enter a numeric value and specify "d", "m", or "y" for "days", "months", or "years". Negative numbers change dates prior to the existing date. Example: -30d = 30 days before the existing date.'
32
+ end
33
+ end
21
34
 
22
35
  def self.within_skip(type)
23
- define_method(:"within_check_#{type}?"){false}
36
+ define_method(:"within_check_#{type}?") { false }
24
37
  end
25
38
 
26
39
  def query(db)
27
- ds = db.from(left_stream(db))
28
- .join(right_stream(db), l__person_id: :r__person_id)
29
- .where(where_clause)
30
- .select_all(:l)
40
+ right_stream = apply_selectors(right_stream_query(db), function: rhs_function).from_self(alias: :r)
41
+ ds = semi_or_inner_join(left_stream(db), right_stream, *join_columns, where_clause)
42
+
43
+ ds = apply_selectors(ds, qualifier: :r)
31
44
 
32
- ds = add_option_conditions(ds)
33
45
  ds.from_self
34
46
  end
35
47
 
36
- def add_option_conditions(ds)
37
- if within = options[:within]
38
- ds = add_within_condition(ds, within)
39
- end
48
+ def r_start_date
49
+ Sequel[:r][:start_date]
50
+ end
40
51
 
41
- if at_least = options[:at_least]
42
- ds = add_within_condition(ds, at_least, :exclude)
43
- end
52
+ def r_end_date
53
+ Sequel[:r][:end_date]
54
+ end
44
55
 
45
- if occurrences = options[:occurrences]
46
- ds = add_occurrences_condition(ds, occurrences)
47
- end
56
+ def l_start_date
57
+ Sequel[:l][:start_date]
58
+ end
48
59
 
49
- ds
60
+ def l_end_date
61
+ Sequel[:l][:end_date]
62
+ end
63
+
64
+ def within_option
65
+ return unless (v = options[:within])
66
+ return if v.strip.empty?
67
+
68
+ v
69
+ end
70
+
71
+ def at_least_option
72
+ return unless (v = options[:at_least])
73
+ return if v.strip.empty?
74
+
75
+ v
50
76
  end
51
77
 
52
- def add_within_condition(ds, within, meth=:where)
53
- within = DateAdjuster.new(within)
54
- after = within.adjust(:r__start_date, true)
55
- before = within.adjust(:r__end_date)
56
- within_col = Sequel.expr(within_column)
57
- ds = ds.send(meth){within_col >= after} if within_check_after?
58
- ds = ds.send(meth){within_col <= before} if within_check_before?
59
- ds.distinct
78
+ def within_source_table
79
+ Sequel[:r]
60
80
  end
61
81
 
62
- def add_occurrences_condition(ds, occurrences)
63
- occurrences_col = occurrences_column
64
- ds.distinct.from_self
65
- .select_append{row_number{}.over(:partition => :person_id, :order => occurrences_col).as(:occurrence)}
66
- .from_self
67
- .select(*query_columns(ds))
68
- .where{occurrence > occurrences.to_i}
82
+ def within_start
83
+ within_start = within_source_table[:start_date]
84
+ within_start = adjust_date(within_option, within_start, true) if within_option
85
+ within_start
69
86
  end
70
87
 
71
- def within_column
72
- :l__start_date
88
+ def within_end
89
+ within_end = within_source_table[:end_date]
90
+ within_end = adjust_date(within_option, within_end) if within_option
91
+ within_end
73
92
  end
74
93
 
75
- def occurrences_column
76
- :start_date
94
+ def adjust_date(adjustment, column, reverse = false)
95
+ adjuster = DateAdjuster.new(self, adjustment)
96
+ adjuster.adjust(column, reverse)
77
97
  end
78
98
 
79
- def within_check_after?
80
- true
99
+ def apply_selectors(ds, opts = {})
100
+ return ds unless include_rhs_columns
101
+
102
+ ds = ds.select_remove(*include_rhs_columns).select_append(*rhs_columns(opts)) if include_rhs_columns
103
+ ds
81
104
  end
82
105
 
83
- def within_check_before?
84
- true
106
+ def rhs_columns(opts)
107
+ cols = include_rhs_columns
108
+ return cols if opts.empty?
109
+
110
+ cols = cols.map { |c| Sequel.function(opts[:function], c).as(c) } if opts[:function]
111
+ cols = cols.map { |c| Sequel[opts[:qualifier]][c].as(c) } if opts[:qualifier]
112
+ cols
85
113
  end
86
114
 
87
- def inclusive?
88
- options[:inclusive]
115
+ def include_rhs_columns
116
+ options[:include_rhs_columns]&.map(&:to_sym)
89
117
  end
90
118
 
91
- def left_stream(db)
92
- Sequel.expr(left.evaluate(db).from_self).as(:l)
119
+ def rhs_function
120
+ nil
93
121
  end
94
122
 
95
- def right_stream(db)
96
- Sequel.expr(right.evaluate(db).from_self).as(:r)
123
+ def use_inner_join?
124
+ super || options[:include_rhs_columns]
97
125
  end
98
126
  end
99
127
  end
100
128
  end
101
-
102
-
@@ -1,5 +1,7 @@
1
- require_relative 'operator'
2
- require_relative '../date_adjuster'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "pass_thru"
4
+ require_relative "../date_adjuster"
3
5
 
4
6
  module ConceptQL
5
7
  module Operators
@@ -19,30 +21,28 @@ module ConceptQL
19
21
  # Both start and end arguments must be provided, but if you do not wish to adjust a date just
20
22
  # pass '', '0', or nil as that argument. E.g.:
21
23
  # start: 'd', end: '' # Only adjust start_date by positive 1 day and leave end_date uneffected
22
- class TimeWindow < Operator
24
+ class TimeWindow < PassThru
23
25
  register __FILE__
24
26
 
25
- desc 'Adjusts the start_date and end_date to create a new window of time for each result.'
26
- option :start, type: :string
27
- option :end, type: :string
27
+ desc "Adjusts start_date and end_date to create a new window of time for each record."
28
+ option :start, type: :string,
29
+ instructions: 'Enter a numeric value and specify "d", "m", or "y" for "days", "months", or "years". Negative numbers change dates prior to the existing date.'
30
+ option :end, type: :string,
31
+ instructions: 'Enter a numeric value and specify "d", "m", or "y" for "days", "months", or "years". Negative numbers change dates prior to the existing date.'
28
32
  allows_one_upstream
29
33
  validate_one_upstream
30
34
  validate_no_arguments
31
35
  validate_option DateAdjuster::VALID_INPUT, :start, :end
32
36
  category "Modify Data"
33
37
  basic_type :temporal
34
- default_query_columns
35
38
 
36
39
  def query(db)
37
- db.from(stream.evaluate(db))
40
+ dm.selectify(db.from(stream.evaluate(db)).from_self,
41
+ replace: { start_date: adjusted_start_date, end_date: adjusted_end_date })
38
42
  end
39
43
 
40
44
  private
41
45
 
42
- def date_columns(query, domain = nil)
43
- [adjusted_start_date, adjusted_end_date]
44
- end
45
-
46
46
  def adjusted_start_date
47
47
  adjusted_date(:start, :start_date)
48
48
  end
@@ -52,10 +52,8 @@ module ConceptQL
52
52
  end
53
53
 
54
54
  def adjusted_date(option_arg, column)
55
- adjusted_date = DateAdjuster.new(options[option_arg], manipulator: options[:manipulator]).adjust(column)
56
- adjusted_date.as(column)
55
+ DateAdjuster.new(self, options[option_arg], manipulator: options[:manipulator]).adjust(column)
57
56
  end
58
57
  end
59
58
  end
60
59
  end
61
-
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "temporal_operator"
4
+
5
+ module ConceptQL
6
+ module Operators
7
+ # Trims the end_date of the LHS set of records by the RHS's earliest
8
+ # start_date (per person)
9
+ # If a the RHS contains a start_date that comes before the LHS's start_date
10
+ # that LHS record is completely discarded.
11
+ #
12
+ # If there is no RHS record for an LHS record, the LHS record is passed
13
+ # thru unaffected.
14
+ #
15
+ # If the RHS record's start_date is later than the LHS end_date, the LHS
16
+ # record is passed thru unaffected.
17
+ class TrimDate < TemporalOperator
18
+ desc <<~EOF
19
+ Trims the end_date of the left hand records (LHR) by the earliest
20
+ start_date (per person) in the right hand records (RHR)
21
+ If the RHR contains a start_date that comes before the start_date in the LHR
22
+ that record in the LHR is completely discarded.
23
+
24
+ If there is no record in the RHR for a record in the LHR, the record in the LHR is passed
25
+ through unaffected.
26
+
27
+ If the start_date of the record in the RHR is later than the end_date of the record in the LHR, the record in the LHR
28
+ is passed through unaffected.
29
+ EOF
30
+
31
+ allows_one_upstream
32
+
33
+ def query(db)
34
+ # If the RHS's min start date is less than the LHS start date,
35
+ # the entire LHS date range is truncated, which implies the row itself
36
+ # is ineligible to pass thru
37
+ ds = db.from(left_stream(db)).from_self(alias: :l)
38
+ .left_join(Sequel.as(right_stream_query(db), :r), join_columns.inject(&:&))
39
+ .where(where_criteria)
40
+
41
+ ds = dm.selectify(ds, qualifier: :l, replace: replacement_columns)
42
+
43
+ ds = apply_selectors(ds)
44
+
45
+ ds.from_self
46
+ end
47
+
48
+ private
49
+
50
+ def compare_all?
51
+ options[:compare_all]
52
+ end
53
+
54
+ def right_stream_query(db)
55
+ rh = if compare_all?
56
+ super
57
+ else
58
+ occ = to_op([ :occurrence, occurrence_number, right ])
59
+ occ.evaluate(db)
60
+ end
61
+ columnizer.apply(rh)
62
+ end
63
+
64
+ def columnizer
65
+ columnizer = Columnizer.new
66
+ columnizer.add_columns(:person_id, trim_date, *join_columns_option)
67
+ columnizer
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,63 +1,43 @@
1
- require_relative 'temporal_operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "trim_date"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
5
- # Trims the end_date of the LHS set of results by the RHS's earliest
7
+ # Trims the end_date of the LHS set of records by the RHS's earliest
6
8
  # start_date (per person)
7
9
  # If a the RHS contains a start_date that comes before the LHS's start_date
8
- # that LHS result is completely discarded.
10
+ # that LHS record is completely discarded.
9
11
  #
10
- # If there is no RHS result for an LHS result, the LHS result is passed
12
+ # If there is no RHS record for an LHS record, the LHS record is passed
11
13
  # thru unaffected.
12
14
  #
13
- # If the RHS result's start_date is later than the LHS end_date, the LHS
14
- # result is passed thru unaffected.
15
- class TrimDateEnd < TemporalOperator
15
+ # If the RHS record's start_date is later than the LHS end_date, the LHS
16
+ # record is passed thru unaffected.
17
+ class TrimDateEnd < TrimDate
16
18
  register __FILE__
17
19
 
18
- desc <<-EOF
19
- Trims the end_date of the left hand results (LHR) by the earliest
20
- start_date (per person) in the right hand results (RHR)
21
- If the RHR contain a start_date that comes before the start_date in the LHR
22
- that result in the LHR is completely discarded.
23
-
24
- If there is no result in the RHR for a result in the LHR, the result in the LHR is passed
25
- through unaffected.
20
+ desc "For each person, trims the end_date of all left hand records by the earliest start_date in the right hand records."
26
21
 
27
- If the start_date of the result in the RHR is later than the end_date of the result in the LHR, the result in the LHR
28
- is passed through unaffected.
29
- EOF
30
22
  allows_one_upstream
31
- within_skip :before
32
23
 
33
- def query(db)
34
- grouped_right = db.from(right_stream(db)).select_group(:person_id).select_append(Sequel.as(Sequel.function(:min, :start_date), :start_date))
35
-
36
- where_criteria = Sequel.expr { l__start_date <= r__start_date }
37
- where_criteria = where_criteria.|(r__start_date: nil)
24
+ private
38
25
 
39
- # If the RHS's min start date is less than the LHS start date,
40
- # the entire LHS date range is truncated, which implies the row itself
41
- # is ineligible to pass thru
42
- ds = db.from(left_stream(db))
43
- .left_join(Sequel.as(grouped_right, :r), l__person_id: :r__person_id)
44
- .where(where_criteria)
45
- .select(*new_columns)
46
- .select_append(Sequel.as(Sequel.function(:least, :l__end_date, :r__start_date), :end_date))
26
+ def trim_date
27
+ :start_date
28
+ end
47
29
 
48
- ds = add_option_conditions(ds)
49
- ds.from_self
30
+ def where_criteria
31
+ (l_start_date <= within_start) | { r_start_date => nil }
50
32
  end
51
33
 
52
- def within_column
53
- :l__end_date
34
+ def replacement_columns
35
+ { end_date: Sequel.function(:least, l_end_date, Sequel.function(:coalesce, within_start, l_end_date)) }
54
36
  end
55
37
 
56
- private
57
- def new_columns
58
- (dynamic_columns - [:end_date]).map { |col| "l__#{col}".to_sym }
38
+ def occurrence_number
39
+ 1
59
40
  end
60
41
  end
61
42
  end
62
43
  end
63
-
@@ -1,66 +1,43 @@
1
- require_relative 'temporal_operator'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "trim_date"
2
4
 
3
5
  module ConceptQL
4
6
  module Operators
5
- # Trims the start_date of the LHS set of results by the RHS's latest
7
+ # Trims the start_date of the LHS set of records by the RHS's latest
6
8
  # end_date (per person)
7
9
  # If a the RHS contains an end_date that comes after the LHS's end_date
8
- # that LHS result is completely discarded.
10
+ # that LHS record is completely discarded.
9
11
  #
10
- # If there is no RHS result for an LHS result, the LHS result is passed
12
+ # If there is no RHS record for an LHS record, the LHS record is passed
11
13
  # thru unaffected.
12
14
  #
13
- # If the RHS result's end_date is earlier than the LHS start_date, the LHS
14
- # result is passed thru unaffected.
15
- class TrimDateStart < TemporalOperator
15
+ # If the RHS record's end_date is earlier than the LHS start_date, the LHS
16
+ # record is passed thru unaffected.
17
+ class TrimDateStart < TrimDate
16
18
  register __FILE__
17
19
 
18
- desc <<-EOF
19
- Trims the start_date of the left hand results (LHR) by the final
20
- end_date (per person) in the right hand results (RHR)
21
- If the RHR contain an end_date that comes after the end_date in the LHR
22
- that result in the LHR is completely discarded.
23
-
24
- If there is no result in the RHR for a result in the LHR, the result in the LHR is passed
25
- through unaffected.
26
-
27
- If the end_date of the result in the RHR is earlier than the start_date of the result in the LHR, the result in the LHR
28
- is passed through unaffected.
29
- EOF
20
+ desc "For each person, trims the start_date of all left hand records by the most recent end_date in the right hand records."
30
21
 
31
22
  allows_one_upstream
32
- within_skip :after
33
23
 
34
- def query(db)
35
- grouped_right = db.from(right_stream(db)).select_group(:person_id).select_append(Sequel.as(Sequel.function(:max, :end_date), :end_date))
36
-
37
- where_criteria = Sequel.expr { l__end_date >= r__end_date }
38
- where_criteria = where_criteria.|(r__end_date: nil)
39
-
40
- # If the RHS's min start date is less than the LHS start date,
41
- # the entire LHS date range is truncated, which implies the row itself
42
- # is ineligible to pass thru
43
- ds = db.from(left_stream(db))
44
- .join(Sequel.as(grouped_right, :r), l__person_id: :r__person_id)
45
- .where(where_criteria)
46
- .select(*new_columns)
47
- .select_append(Sequel.as(Sequel.function(:greatest, :l__start_date, :r__end_date), :start_date))
24
+ private
48
25
 
49
- ds = add_option_conditions(ds)
50
- ds.from_self
26
+ def trim_date
27
+ :end_date
51
28
  end
52
29
 
53
- private
30
+ def where_criteria
31
+ (l_end_date >= within_end) | { r_end_date => nil }
32
+ end
54
33
 
55
- def occurrences_column
56
- :end_date
34
+ def replacement_columns
35
+ { start_date: Sequel.function(:greatest, l_start_date, Sequel.function(:coalesce, within_end, l_start_date)) }
57
36
  end
58
37
 
59
- def new_columns
60
- (dynamic_columns - [:start_date]).map { |col| "l__#{col}".to_sym }
38
+ def occurrence_number
39
+ -1
61
40
  end
62
41
  end
63
42
  end
64
43
  end
65
-
66
-
@@ -1,11 +1,60 @@
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
5
7
  class Union < PassThru
6
8
  register __FILE__
7
9
 
8
- desc 'Pools sets of incoming results into a single large set of results.'
10
+ class Combiner
11
+ attr_reader :combinables
12
+
13
+ def initialize(combinables)
14
+ @combinables = combinables
15
+ end
16
+
17
+ def queries(db)
18
+ combinables.group_by(&:domain).map do |domain, combos|
19
+ include_uuid = combos.any? { |c| c.options[:uuid] }
20
+ criteria = combos.map do |combo|
21
+ combo.filter_clause(db)
22
+ end.inject(&:|)
23
+
24
+ criteria = Sequel.&(vocabularies_in(combos), criteria) if combos.length > 1
25
+
26
+ table = combos.first.criterion_table
27
+ ds = db[table]
28
+ .where(criteria)
29
+ combos.first.select_it(ds, specific_table: table, domain: domain, uuid: include_uuid)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ # Every OR'd criterion already requires its own vocabulary, so this IN
36
+ # list selects no new rows and drops none. It is explicit because a
37
+ # plain OR stopped DuckDB's Parquet filter pushdown (bead conceptql-agx).
38
+ def vocabularies_in(combos)
39
+ conditions = combos.map(&:vocabulary_condition)
40
+ columns = conditions.flat_map(&:keys).uniq
41
+ raise "Merged vocabularies use more than one vocabulary column: #{columns}" unless columns.length == 1
42
+
43
+ { columns.first => conditions.map { |c| c[columns.first] }.uniq }
44
+ end
45
+ end
46
+
47
+ def events_per_patient
48
+ upstreams.all? { |u| u.events_per_patient == :single } ? :single : :multiple
49
+ end
50
+
51
+ def multiple_vocabularies
52
+ return true if upstreams.any?(&:multiple_vocabularies)
53
+
54
+ vocabularies.length > 1
55
+ end
56
+
57
+ desc "Combines sets of incoming records into a single large set of records."
9
58
  allows_many_upstreams
10
59
  category "Combine Streams"
11
60
  default_query_columns
@@ -13,43 +62,18 @@ module ConceptQL
13
62
  validate_no_arguments
14
63
 
15
64
  def query(db)
16
- upstreams.map do |expression|
17
- expression.evaluate(db).from_self
18
- end.inject do |q, query|
19
- q.union(query, all: true)
20
- end
21
- end
65
+ combinables, individuals = upstreams.partition { |upstream| upstream.is_a?(Vocabulary) }
22
66
 
23
- def flattened
24
- exprs = []
25
- upstreams.each do |x|
26
- if x.is_a?(Union)
27
- exprs.concat x.flattened.upstreams
28
- else
29
- exprs << x
30
- end
67
+ queries = individuals.map do |expression|
68
+ expression.evaluate(db)
31
69
  end
32
- dup_values(exprs)
33
- end
34
70
 
35
- def optimized
36
- first, *rest = flattened.upstreams
37
- exprs = [first]
38
-
39
- rest.each do |expression|
40
- add = true
41
- exprs.length.times do |i|
42
- exp = exprs[i]
43
- if exprs[i].unionable?(expression)
44
- exprs[i] = exp.union(expression, all: true)
45
- add = false
46
- break
47
- end
48
- end
49
- exprs << expression if add
50
- end
71
+ queries += Combiner.new(combinables).queries(db)
51
72
 
52
- dup_values(exprs.map{|x| x.is_a?(Operator) ? x.optimized : x})
73
+ queries.map! { |ds| ds.from_self.select(*query_cols).from_self }
74
+ queries.inject do |q, query|
75
+ q.union(query, all: true)
76
+ end
53
77
  end
54
78
  end
55
79
  end