conceptql 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1208) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +228 -27
  3. data/LICENSE +21 -0
  4. data/README.md +28 -98
  5. data/bin/conceptql +2 -1
  6. data/bin/conceptql_utils +6 -0
  7. data/config/multiple_vocabularies.csv +4 -0
  8. data/config/provenance.yml +471 -436
  9. data/config/race.yml +50 -0
  10. data/config/vocabularies.csv +87 -0
  11. data/lib/conceptql/behaviors/code_lister.rb +23 -0
  12. data/lib/conceptql/behaviors/drugish.rb +13 -8
  13. data/lib/conceptql/behaviors/labish.rb +15 -9
  14. data/lib/conceptql/behaviors/metadatable.rb +102 -34
  15. data/lib/conceptql/behaviors/provenanceable.rb +15 -19
  16. data/lib/conceptql/behaviors/single_event.rb +11 -0
  17. data/lib/conceptql/behaviors/timeless.rb +11 -0
  18. data/lib/conceptql/behaviors/utilizable.rb +206 -0
  19. data/lib/conceptql/behaviors/windowable.rb +27 -0
  20. data/lib/conceptql/cli.rb +99 -134
  21. data/lib/conceptql/columnizer.rb +75 -0
  22. data/lib/conceptql/data_model/base.rb +462 -0
  23. data/lib/conceptql/data_model/gdm.rb +155 -0
  24. data/lib/conceptql/data_model/gdm_wide.rb +42 -0
  25. data/lib/conceptql/data_model/omopv4_plus.rb +12 -0
  26. data/lib/conceptql/data_model.rb +30 -0
  27. data/lib/conceptql/database.rb +195 -23
  28. data/lib/conceptql/date_adjuster.rb +57 -27
  29. data/lib/conceptql/diagram.rb +243 -0
  30. data/lib/conceptql/lexicon/lexicon_gdm.rb +47 -0
  31. data/lib/conceptql/lexicon/lexicon_no_db.rb +49 -0
  32. data/lib/conceptql/lexicon/lexicon_ohdsi.rb +63 -0
  33. data/lib/conceptql/lexicon/lexicon_strategy.rb +116 -0
  34. data/lib/conceptql/lexicon.rb +111 -0
  35. data/lib/conceptql/nodifier.rb +45 -15
  36. data/lib/conceptql/operators/after.rb +24 -21
  37. data/lib/conceptql/operators/any_overlap.rb +6 -6
  38. data/lib/conceptql/operators/before.rb +24 -16
  39. data/lib/conceptql/operators/binary_operator_operator.rb +52 -13
  40. data/lib/conceptql/operators/casting_operator.rb +24 -17
  41. data/lib/conceptql/operators/co_reported.rb +78 -9
  42. data/lib/conceptql/operators/concurrent_within.rb +29 -17
  43. data/lib/conceptql/operators/contains.rb +9 -9
  44. data/lib/conceptql/operators/count.rb +9 -9
  45. data/lib/conceptql/operators/date_range.rb +40 -18
  46. data/lib/conceptql/operators/death.rb +10 -2
  47. data/lib/conceptql/operators/dedup.rb +31 -0
  48. data/lib/conceptql/operators/during.rb +5 -12
  49. data/lib/conceptql/operators/episode.rb +146 -0
  50. data/lib/conceptql/operators/equal.rb +6 -3
  51. data/lib/conceptql/operators/ethnicity.rb +49 -0
  52. data/lib/conceptql/operators/except.rb +15 -20
  53. data/lib/conceptql/operators/filter.rb +20 -8
  54. data/lib/conceptql/operators/first.rb +14 -3
  55. data/lib/conceptql/operators/from.rb +33 -12
  56. data/lib/conceptql/operators/gender.rb +27 -11
  57. data/lib/conceptql/operators/hospice.rb +19 -0
  58. data/lib/conceptql/operators/hospitalization.rb +19 -0
  59. data/lib/conceptql/operators/information_periods.rb +36 -0
  60. data/lib/conceptql/operators/invalid.rb +4 -5
  61. data/lib/conceptql/operators/last.rb +14 -3
  62. data/lib/conceptql/operators/match.rb +91 -0
  63. data/lib/conceptql/operators/multiple_vocabularies.rb +172 -0
  64. data/lib/conceptql/operators/numeric.rb +52 -29
  65. data/lib/conceptql/operators/numeric_filter.rb +68 -0
  66. data/lib/conceptql/operators/occurrence.rb +133 -48
  67. data/lib/conceptql/operators/one_in_two_out.rb +198 -62
  68. data/lib/conceptql/operators/operator.rb +321 -408
  69. data/lib/conceptql/operators/pass_thru.rb +9 -5
  70. data/lib/conceptql/operators/person.rb +12 -2
  71. data/lib/conceptql/operators/person_filter.rb +5 -3
  72. data/lib/conceptql/operators/place_of_service_filter.rb +11 -15
  73. data/lib/conceptql/operators/provenance.rb +25 -36
  74. data/lib/conceptql/operators/provider_filter.rb +40 -14
  75. data/lib/conceptql/operators/race.rb +48 -7
  76. data/lib/conceptql/operators/read.rb +77 -58
  77. data/lib/conceptql/operators/recall.rb +20 -20
  78. data/lib/conceptql/operators/snf.rb +19 -0
  79. data/lib/conceptql/operators/sum.rb +23 -12
  80. data/lib/conceptql/operators/temporal_operator.rb +80 -54
  81. data/lib/conceptql/operators/time_window.rb +13 -15
  82. data/lib/conceptql/operators/trim_date.rb +71 -0
  83. data/lib/conceptql/operators/trim_date_end.rb +20 -40
  84. data/lib/conceptql/operators/trim_date_start.rb +20 -43
  85. data/lib/conceptql/operators/union.rb +59 -35
  86. data/lib/conceptql/operators/vocabulary.rb +151 -0
  87. data/lib/conceptql/paths.rb +41 -0
  88. data/lib/conceptql/query.rb +168 -46
  89. data/lib/conceptql/query_modifiers/gdm/admission_date_query_modifier.rb +46 -0
  90. data/lib/conceptql/query_modifiers/gdm/drug_query_modifier.rb +54 -0
  91. data/lib/conceptql/query_modifiers/gdm/lab_query_modifier.rb +57 -0
  92. data/lib/conceptql/query_modifiers/gdm/pos_query_modifier.rb +46 -0
  93. data/lib/conceptql/query_modifiers/gdm/provenance_query_modifier.rb +45 -0
  94. data/lib/conceptql/query_modifiers/gdm/provider_query_modifier.rb +53 -0
  95. data/lib/conceptql/query_modifiers/gdm_wide/admission_date_query_modifier.rb +42 -0
  96. data/lib/conceptql/query_modifiers/gdm_wide/drug_query_modifier.rb +52 -0
  97. data/lib/conceptql/query_modifiers/gdm_wide/lab_query_modifier.rb +55 -0
  98. data/lib/conceptql/query_modifiers/gdm_wide/pos_query_modifier.rb +37 -0
  99. data/lib/conceptql/query_modifiers/gdm_wide/provenance_query_modifier.rb +38 -0
  100. data/lib/conceptql/query_modifiers/omopv4_plus/admission_date_query_modifier.rb +45 -0
  101. data/lib/conceptql/query_modifiers/omopv4_plus/drug_query_modifier.rb +80 -0
  102. data/lib/conceptql/query_modifiers/omopv4_plus/pos_query_modifier.rb +47 -0
  103. data/lib/conceptql/query_modifiers/omopv4_plus/provenance_query_modifier.rb +45 -0
  104. data/lib/conceptql/query_modifiers/omopv4_plus/provider_query_modifier.rb +26 -0
  105. data/lib/conceptql/query_modifiers/query_modifier.rb +6 -2
  106. data/lib/conceptql/rdbms/duckdb.rb +21 -0
  107. data/lib/conceptql/rdbms/generic.rb +116 -0
  108. data/lib/conceptql/rdbms/postgres.rb +47 -0
  109. data/lib/conceptql/rdbms/spark.rb +18 -0
  110. data/lib/conceptql/rdbms.rb +22 -0
  111. data/lib/conceptql/scope.rb +353 -41
  112. data/lib/conceptql/utils.rb +70 -0
  113. data/lib/conceptql/utils_cli.rb +17 -0
  114. data/lib/conceptql/version.rb +3 -1
  115. data/lib/conceptql/visitors/metadata_extractor.rb +54 -0
  116. data/lib/conceptql/vocabularies/behaviors/costish.rb +24 -0
  117. data/lib/conceptql/vocabularies/behaviors/gdmish.rb +19 -0
  118. data/lib/conceptql/vocabularies/behaviors/omopish.rb +32 -0
  119. data/lib/conceptql/vocabularies/dynamic_vocabularies.rb +63 -0
  120. data/lib/conceptql/vocabularies/entry.rb +138 -0
  121. data/lib/conceptql/vocabularies/vocabulary_class_factory.rb +85 -0
  122. data/lib/conceptql/window/base.rb +26 -0
  123. data/lib/conceptql/window/date_range.rb +25 -0
  124. data/lib/conceptql/window/table.rb +116 -0
  125. data/lib/conceptql/window.rb +72 -0
  126. data/lib/conceptql.rb +53 -10
  127. data/lib/sequel/extensions/pg_ctas_explain.rb +22 -0
  128. data/lib/sequel/extensions/pg_vacuum_table.rb +23 -0
  129. data/schemas/gdm.yml +882 -0
  130. data/schemas/gdm_wide.yml +757 -0
  131. data/schemas/ohdsi_vocabs.yml +143 -0
  132. data/schemas/omopv4_plus.yml +729 -0
  133. data/schemas/omopv4_plus_more_ignorables.tsv +13 -0
  134. metadata +271 -2065
  135. data/.gitignore +0 -25
  136. data/Gemfile +0 -6
  137. data/Guardfile +0 -56
  138. data/LICENSE.txt +0 -22
  139. data/Rakefile +0 -35
  140. data/conceptql.gemspec +0 -31
  141. data/doc/ConceptQL Specification (alpha).pdf +0 -0
  142. data/doc/converter.rb +0 -33
  143. data/doc/diagram_0.png +0 -0
  144. data/doc/implementation_notes.md +0 -39
  145. data/doc/metadata.md +0 -89
  146. data/doc/spec/02f44ad35d266ddd0a4df1691d26bf4a297b30604fc3f44b0391d6d852d23a9f.png +0 -0
  147. data/doc/spec/0360fc0c2b7a88fd82ffc4d13387b76766649d5d42aa8f9349bbf60a81ac6119.png +0 -0
  148. data/doc/spec/04491942fcbd741982514f9eb12aeecf3d54b5b69a2b50c8331f7700169d5521.png +0 -0
  149. data/doc/spec/05f9b844571ffceeed2def3025fb60c68552817b8b73d3c8a76939dbc08b7c65.png +0 -0
  150. data/doc/spec/067241a3579767a802d4f8e20fd35b60adbe377c9a6512ef135f164a5accfb27.png +0 -0
  151. data/doc/spec/1102fa717b1c2df67af5220bf3ae219afafd79be7bba0c117e301983385ada52.png +0 -0
  152. data/doc/spec/11f57941951bad5a75f9a16f38a31a3c6bf3046a475aac6e398e780892fab4ad.png +0 -0
  153. data/doc/spec/15268bc45993d3f57ccf915877f91e48bdee684f24faa614249915833cac4af9.png +0 -0
  154. data/doc/spec/253845fe6162621af407ebd110296ff4f6d8a3f23ec75dfb4ea8cda30be71262.png +0 -0
  155. data/doc/spec/26fd52b5ac55438dd9f81b4a3f3913f1058c9f225c8a5e129007c1e9413d5881.png +0 -0
  156. data/doc/spec/2b57886a9cba66bb696e4b399c51ad0dc95cd64b952709fafc819a79d573f09e.png +0 -0
  157. data/doc/spec/307a8b5a7edd6e42f8be16523a4c939faf1a0533385c861d7004b6af8addd7d1.png +0 -0
  158. data/doc/spec/328467a6a419c7c05e299b8097e5e000686068ded8dc6d5f2e2de6f51976c315.png +0 -0
  159. data/doc/spec/39d6a8eb71cae51b1d6937c97134e51f04fd47c54535ff0915fe6a8b4f197fb2.png +0 -0
  160. data/doc/spec/3f46dee4d775d1a29d52b68af6552f8ea3abd8303094e749714fc77bd7958155.png +0 -0
  161. data/doc/spec/44ec6743d5d77d15b8a487c2058bf3e455d34adc91c46ea05767f6e0e471a75e.png +0 -0
  162. data/doc/spec/462153be527b28dc2cb5259c0aec62e1f529e8b60dc6e9c23fd1e06e8be933c9.png +0 -0
  163. data/doc/spec/4a3b47ed1c54f96ebdae693d41c36c51884c4546ef799a4108085708fb7b964e.png +0 -0
  164. data/doc/spec/514f263e976d07c0d9e0a86c79bcbdcddc7d444d7b72135294ad78758effd28f.png +0 -0
  165. data/doc/spec/58113a57a37431a402d2547369eba3a481bf1dbbfd82dc384406a5c91f6df01f.png +0 -0
  166. data/doc/spec/5d331d74c460d75814b2d3138a9b7d90b5ddb2dcd85e1f5f260d183745fc3a1e.png +0 -0
  167. data/doc/spec/5d6ff62038b75d6f240d65f35d1520a131c221f47d3801554c8c2be5d528ebb0.png +0 -0
  168. data/doc/spec/62323426e381ec21c967971a67e1f4a6d89dae92154bd937284e00b67f67fdd3.png +0 -0
  169. data/doc/spec/6705af65d728c0d5c50d6c4d46253017a91eb459dbb1f40f92449f05d5562f4a.png +0 -0
  170. data/doc/spec/68fac940a32c7e40caacf8e560c61da552d57633d015ba98f2e98ec040a00c5b.png +0 -0
  171. data/doc/spec/6a34c0ef589c9c976fe41f3e67e799e198499f5b9c3ebfd240fb91f73e893573.png +0 -0
  172. data/doc/spec/6b48534236697d1ccfa1f5403764782f9d228f9eb706789cfa80203882b7b13a.png +0 -0
  173. data/doc/spec/7aa76b4d29874719466c2cbafc9936e9f12e504bf31e1a09d26ca3fffa8ba1a6.png +0 -0
  174. data/doc/spec/7b9db2986ab9ada45cfb9451ef87ff1a2d99c908083334b7ccdceb8a92387fa9.png +0 -0
  175. data/doc/spec/8101d9b89d9ba8070d585432707b43a8acdb4c2a3e9d37c3f7114b5e3ea9e800.png +0 -0
  176. data/doc/spec/886bf85249a704668a55c5161bceaac10be4a41a94b91606f49851dfa017526c.png +0 -0
  177. data/doc/spec/8ed478d8c81a58a202d0c51348fca246df206fc24a0567b163d4e0bdab56ca46.png +0 -0
  178. data/doc/spec/9139440329dcb815df89bc70182c3827868402a74ff64d0253706dcaff723dca.png +0 -0
  179. data/doc/spec/99392f56dfb0e5be3f45a12a7f1ba846d094e430f526dfeaa30b606837cd34c0.png +0 -0
  180. data/doc/spec/a4450e8c0fe0e2fde92fe9bd61952f907b1976c1aa3ba963b809bed079d42b09.png +0 -0
  181. data/doc/spec/a4bc7382a1154ea9856544fd48418f3dd9ce474ca94b8859fc323749c6cc1f55.png +0 -0
  182. data/doc/spec/a79274742cf6fac6f6c9f4a0eb651aeb452f9c43b537c8e6ccaefecd05b7105c.png +0 -0
  183. data/doc/spec/a9b4528726adec2a90f3f00139d8d0492f13c51f03c2f9ed6a5134b1b26b44a9.png +0 -0
  184. data/doc/spec/af5ae3787e80bf0771f18f1a04fe4c5d9291e1e0f963ac408a7bc198d2f1ee28.png +0 -0
  185. data/doc/spec/ba572c4f4dbade65be55f141df16cf7b3e7d09e0aec4e4e5debc4f2075277371.png +0 -0
  186. data/doc/spec/ba90ef705f7be91c53c5eb4a81a439fa0f7c48532214bd3db3cc5c069160543e.png +0 -0
  187. data/doc/spec/c1d0402862221d85aceedc7d76b3f82149b612cbd972f14d0ca9011e1e2c455c.png +0 -0
  188. data/doc/spec/c2157d8a6b73abe4f22ba5042159f32502c74bf6d762be28d2df6831586822c7.png +0 -0
  189. data/doc/spec/c5329a7f4937096a57b2e01efb9d542f84a4e2329a1e9381d08c630583ccad37.png +0 -0
  190. data/doc/spec/c82077b9455d0f9abc2c45ee1a298e38b99c9ce9cd685f65d87b376d7718d7ad.png +0 -0
  191. data/doc/spec/c93dd18894a245a5647f99e1867d3779e4cd34c9c8f8860600ff0c837a5ffa53.png +0 -0
  192. data/doc/spec/cc960a268d51ccf2ebde657d36848f780213834844900018bce3d111843f7b0f.png +0 -0
  193. data/doc/spec/d39452b58257c95a7cba07afed4877417b0c227f3690e2bff22c9eca89eac845.png +0 -0
  194. data/doc/spec/d64993258ffbef9406d9ab9136de7af530626b3a69e9eeb75835e11f11dabf62.png +0 -0
  195. data/doc/spec/da450cdd0c94a1301bd98560339a45caa8041e09974352a56ecfb144e9a5e4d4.png +0 -0
  196. data/doc/spec/dbc66b3ae6bd7123d77dd04b64f8a24498d048725a55c5340b15f5ae0a1ff307.png +0 -0
  197. data/doc/spec/de589af36fa854e006a1563c93e644e2210f2a5616babb779f7f38aadb6c1ed7.png +0 -0
  198. data/doc/spec/defbd0b853d895802663f507761ad297d82e167f516c6082686a2a19b76012c5.png +0 -0
  199. data/doc/spec/e1cb0863b21e14256d61a54200316791f6547c78ba2f0156c110f4500f9bbd49.png +0 -0
  200. data/doc/spec/e8630103287f7c9d28eff40b3b1826e24846e776b877f7b8554257acbe621e1c.png +0 -0
  201. data/doc/spec/e9b384fa7dec5f1a06479c4b289e06b1e60e4f23f7630aff6d03c52595f500f8.png +0 -0
  202. data/doc/spec/ea935ac31f3b57ff373646780a1fba34a38c9e086dc771eb7fc16c65a7e20cfc.png +0 -0
  203. data/doc/spec/eb8f5511f7d88bd0f8ba73420fc10f7c78405db7f4373d778a827058707f888e.png +0 -0
  204. data/doc/spec/ebacbd092e3d1a3c7b745a381e51e8ff9d63a21db23a16940193e18e57bc866f.png +0 -0
  205. data/doc/spec/ed039f82867241393b1a6a7153d3690461103934c72c1f3eaa3d99a12bb40885.png +0 -0
  206. data/doc/spec/ee283d6a4b69cf10da2df703be3a16830be9cd8cd4f68c5f7afdf558ea28fa76.png +0 -0
  207. data/doc/spec/f0c734b099841a754ae0366afb00e992ad4814479b65e4a7de23c6e3dd85c09a.png +0 -0
  208. data/doc/spec/f6b4fc31703cfb6327bbbd4614af8bb72da6d39fa3d53ada63a70157f2fad80e.png +0 -0
  209. data/doc/spec/f766f2e3aa13420e3ba0f823ac7956b311ed7c6c20be26b72324fadd87f36712.png +0 -0
  210. data/doc/spec/ff7d5b5573d09bd7c4cdd3aeda124d18bf82ec46673a62881b399a75d69f3f53.png +0 -0
  211. data/doc/spec.md +0 -2258
  212. data/doc/spec.md.cql +0 -1930
  213. data/lib/conceptql/annotate_grapher.rb +0 -127
  214. data/lib/conceptql/fake_annotater.rb +0 -129
  215. data/lib/conceptql/knitter.rb +0 -221
  216. data/lib/conceptql/logger.rb +0 -10
  217. data/lib/conceptql/operators/complement.rb +0 -43
  218. data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator.rb +0 -34
  219. data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator_union.rb +0 -28
  220. data/lib/conceptql/operators/condition_type.rb +0 -79
  221. data/lib/conceptql/operators/cpt.rb +0 -28
  222. data/lib/conceptql/operators/cpt_or_hcpcs.rb +0 -27
  223. data/lib/conceptql/operators/drg.rb +0 -42
  224. data/lib/conceptql/operators/drug_type_concept.rb +0 -30
  225. data/lib/conceptql/operators/from_seer_visits.rb +0 -29
  226. data/lib/conceptql/operators/hcpcs.rb +0 -28
  227. data/lib/conceptql/operators/icd10.rb +0 -19
  228. data/lib/conceptql/operators/icd10_pcs.rb +0 -28
  229. data/lib/conceptql/operators/icd9.rb +0 -19
  230. data/lib/conceptql/operators/icd9_procedure.rb +0 -28
  231. data/lib/conceptql/operators/intersect.rb +0 -39
  232. data/lib/conceptql/operators/loinc.rb +0 -28
  233. data/lib/conceptql/operators/medcode.rb +0 -17
  234. data/lib/conceptql/operators/medcode_procedure.rb +0 -28
  235. data/lib/conceptql/operators/ndc.rb +0 -32
  236. data/lib/conceptql/operators/observation_by_enttype.rb +0 -32
  237. data/lib/conceptql/operators/observation_period.rb +0 -32
  238. data/lib/conceptql/operators/overlapped_by.rb +0 -26
  239. data/lib/conceptql/operators/overlaps.rb +0 -21
  240. data/lib/conceptql/operators/place_of_service_code.rb +0 -31
  241. data/lib/conceptql/operators/procedure_occurrence.rb +0 -27
  242. data/lib/conceptql/operators/prodcode.rb +0 -32
  243. data/lib/conceptql/operators/revenue_code.rb +0 -40
  244. data/lib/conceptql/operators/rxnorm.rb +0 -28
  245. data/lib/conceptql/operators/snomed.rb +0 -25
  246. data/lib/conceptql/operators/source_vocabulary_operator.rb +0 -88
  247. data/lib/conceptql/operators/standard_vocabulary_operator.rb +0 -66
  248. data/lib/conceptql/operators/started_by.rb +0 -23
  249. data/lib/conceptql/operators/to_seer_visits.rb +0 -29
  250. data/lib/conceptql/operators/visit_occurrence.rb +0 -32
  251. data/lib/conceptql/operators/vocabulary_operator.rb +0 -45
  252. data/lib/conceptql/query_modifiers/drug_query_modifier.rb +0 -45
  253. data/lib/conceptql/query_modifiers/pos_query_modifier.rb +0 -31
  254. data/lib/conceptql/sql_formatter.rb +0 -22
  255. data/test/all.rb +0 -3
  256. data/test/all_operations_test.rb +0 -45
  257. data/test/code_list_test.rb +0 -23
  258. data/test/data/omopv4/care_site.csv +0 -0
  259. data/test/data/omopv4/cohort.csv +0 -0
  260. data/test/data/omopv4/condition_era.csv +0 -0
  261. data/test/data/omopv4/condition_occurrence.csv +0 -34044
  262. data/test/data/omopv4/death.csv +0 -1
  263. data/test/data/omopv4/drug_cost.csv +0 -0
  264. data/test/data/omopv4/drug_era.csv +0 -0
  265. data/test/data/omopv4/drug_exposure.csv +0 -2
  266. data/test/data/omopv4/location.csv +0 -0
  267. data/test/data/omopv4/observation.csv +0 -2
  268. data/test/data/omopv4/observation_period.csv +0 -1
  269. data/test/data/omopv4/organization.csv +0 -0
  270. data/test/data/omopv4/payer_plan_period.csv +0 -0
  271. data/test/data/omopv4/person.csv +0 -250
  272. data/test/data/omopv4/procedure_cost.csv +0 -0
  273. data/test/data/omopv4/procedure_occurrence.csv +0 -35099
  274. data/test/data/omopv4/provider.csv +0 -0
  275. data/test/data/omopv4/visit_occurrence.csv +0 -14931
  276. data/test/data/omopv4_plus/care_site.csv +0 -0
  277. data/test/data/omopv4_plus/cohort.csv +0 -0
  278. data/test/data/omopv4_plus/concept.csv +0 -352
  279. data/test/data/omopv4_plus/condition_era.csv +0 -0
  280. data/test/data/omopv4_plus/condition_occurrence.csv +0 -46673
  281. data/test/data/omopv4_plus/death.csv +0 -9
  282. data/test/data/omopv4_plus/drug_cost.csv +0 -13921
  283. data/test/data/omopv4_plus/drug_era.csv +0 -0
  284. data/test/data/omopv4_plus/drug_exposure.csv +0 -13921
  285. data/test/data/omopv4_plus/headers/care_site.csv +0 -1
  286. data/test/data/omopv4_plus/headers/cohort.csv +0 -1
  287. data/test/data/omopv4_plus/headers/concept.csv +0 -1
  288. data/test/data/omopv4_plus/headers/condition_era.csv +0 -1
  289. data/test/data/omopv4_plus/headers/condition_occurrence.csv +0 -1
  290. data/test/data/omopv4_plus/headers/death.csv +0 -1
  291. data/test/data/omopv4_plus/headers/drug_cost.csv +0 -1
  292. data/test/data/omopv4_plus/headers/drug_era.csv +0 -1
  293. data/test/data/omopv4_plus/headers/drug_exposure.csv +0 -1
  294. data/test/data/omopv4_plus/headers/location.csv +0 -1
  295. data/test/data/omopv4_plus/headers/observation.csv +0 -1
  296. data/test/data/omopv4_plus/headers/observation_period.csv +0 -1
  297. data/test/data/omopv4_plus/headers/organization.csv +0 -1
  298. data/test/data/omopv4_plus/headers/payer_plan_period.csv +0 -1
  299. data/test/data/omopv4_plus/headers/person.csv +0 -1
  300. data/test/data/omopv4_plus/headers/procedure_cost.csv +0 -1
  301. data/test/data/omopv4_plus/headers/procedure_occurrence.csv +0 -1
  302. data/test/data/omopv4_plus/headers/provider.csv +0 -1
  303. data/test/data/omopv4_plus/headers/source_to_concept_map.csv +0 -1
  304. data/test/data/omopv4_plus/headers/visit_occurrence.csv +0 -1
  305. data/test/data/omopv4_plus/headers/vocabulary.csv +0 -1
  306. data/test/data/omopv4_plus/location.csv +0 -0
  307. data/test/data/omopv4_plus/observation.csv +0 -0
  308. data/test/data/omopv4_plus/observation_period.csv +0 -147
  309. data/test/data/omopv4_plus/organization.csv +0 -736
  310. data/test/data/omopv4_plus/payer_plan_period.csv +0 -808
  311. data/test/data/omopv4_plus/person.csv +0 -250
  312. data/test/data/omopv4_plus/procedure_cost.csv +0 -20123
  313. data/test/data/omopv4_plus/procedure_occurrence.csv +0 -27273
  314. data/test/data/omopv4_plus/provider.csv +0 -10193
  315. data/test/data/omopv4_plus/source_to_concept_map.csv +0 -285
  316. data/test/data/omopv4_plus/visit_occurrence.csv +0 -45125
  317. data/test/data/omopv4_plus/vocabulary.csv +0 -60
  318. data/test/db.rb +0 -15
  319. data/test/db_setup.rb +0 -408
  320. data/test/db_teardown.rb +0 -33
  321. data/test/fake_annotater_test.rb +0 -31
  322. data/test/helper.rb +0 -129
  323. data/test/knitter/conceptql.md.cql +0 -39
  324. data/test/knitter/conceptql.md.expect +0 -43
  325. data/test/knitter/empty.md.cql +0 -0
  326. data/test/knitter/except.md.cql +0 -13
  327. data/test/knitter/except.md.expect +0 -14
  328. data/test/knitter/fake.md.cql +0 -10
  329. data/test/knitter/fake.md.expect +0 -13
  330. data/test/knitter/many.md.cql +0 -7
  331. data/test/knitter/many.md.expect +0 -14
  332. data/test/knitter/no_conceptql.md.cql +0 -36
  333. data/test/knitter/title.md.cql +0 -12
  334. data/test/knitter/title.md.expect +0 -15
  335. data/test/knitter/union.md.cql +0 -11
  336. data/test/knitter/union.md.expect +0 -14
  337. data/test/knitter_test.rb +0 -69
  338. data/test/query_test.rb +0 -36
  339. data/test/results/omopv4/after/anno_1 +0 -25
  340. data/test/results/omopv4/after/anno_2 +0 -48
  341. data/test/results/omopv4/after/anno_3 +0 -34
  342. data/test/results/omopv4/after/anno_4 +0 -60
  343. data/test/results/omopv4/after/anno_5 +0 -68
  344. data/test/results/omopv4/after/anno_6 +0 -60
  345. data/test/results/omopv4/after/crit_at_least +0 -7
  346. data/test/results/omopv4/after/crit_basic +0 -32
  347. data/test/results/omopv4/after/crit_occurrences +0 -12
  348. data/test/results/omopv4/after/crit_within +0 -6
  349. data/test/results/omopv4/any_overlap/crit_basic1 +0 -15
  350. data/test/results/omopv4/any_overlap/crit_basic2 +0 -15
  351. data/test/results/omopv4/any_overlap/crit_occurrences1 +0 -2
  352. data/test/results/omopv4/any_overlap/crit_occurrences2 +0 -15
  353. data/test/results/omopv4/any_overlap/crit_within +0 -8
  354. data/test/results/omopv4/before/crit_at_least +0 -6
  355. data/test/results/omopv4/before/crit_basic1 +0 -48
  356. data/test/results/omopv4/before/crit_basic2 +0 -7
  357. data/test/results/omopv4/before/crit_occurrences +0 -13
  358. data/test/results/omopv4/before/crit_within +0 -18
  359. data/test/results/omopv4/co_reported/anno_1 +0 -43
  360. data/test/results/omopv4/co_reported/anno_2 +0 -66
  361. data/test/results/omopv4/complement/anno_duplicate_params +0 -52
  362. data/test/results/omopv4/complement/anno_invalid_params +0 -37
  363. data/test/results/omopv4/complement/anno_no_params +0 -18
  364. data/test/results/omopv4/complement/count_3way_intersect +0 -4
  365. data/test/results/omopv4/complement/count_3way_union +0 -4
  366. data/test/results/omopv4/complement/count_intersect +0 -3
  367. data/test/results/omopv4/complement/count_union +0 -3
  368. data/test/results/omopv4/complement/count_union_and_intersect +0 -4
  369. data/test/results/omopv4/complement/crit_3way_intersect +0 -1
  370. data/test/results/omopv4/complement/crit_3way_union +0 -1
  371. data/test/results/omopv4/complement/crit_basic1 +0 -33998
  372. data/test/results/omopv4/complement/crit_icd9_selector +0 -54
  373. data/test/results/omopv4/complement/crit_intersect +0 -1
  374. data/test/results/omopv4/complement/crit_union +0 -1
  375. data/test/results/omopv4/complement/crit_union_and_intersect +0 -1
  376. data/test/results/omopv4/complex/anno_1 +0 -85
  377. data/test/results/omopv4/complex/crit_1 +0 -2
  378. data/test/results/omopv4/complex/crit_2 +0 -2
  379. data/test/results/omopv4/complex/crit_3 +0 -2
  380. data/test/results/omopv4/complex/crit_4 +0 -5
  381. data/test/results/omopv4/complex/crit_5 +0 -6
  382. data/test/results/omopv4/complex/crit_6 +0 -28
  383. data/test/results/omopv4/complex/crit_7 +0 -46
  384. data/test/results/omopv4/complex/crit_out_of_order_ctes +0 -7
  385. data/test/results/omopv4/complex/scanno_1 +0 -3
  386. data/test/results/omopv4/concurrent_within/crit_icd9 +0 -54
  387. data/test/results/omopv4/concurrent_within/crit_icd9_and_place_of_service +0 -23
  388. data/test/results/omopv4/concurrent_within/crit_negative_start +0 -5
  389. data/test/results/omopv4/condition_type/anno_icd9 +0 -39
  390. data/test/results/omopv4/condition_type/count_condition_era +0 -2
  391. data/test/results/omopv4/condition_type/count_condition_era_30_day_window +0 -2
  392. data/test/results/omopv4/condition_type/count_ehr_problem_list +0 -2
  393. data/test/results/omopv4/condition_type/count_era_0 +0 -2
  394. data/test/results/omopv4/condition_type/count_inpatient +0 -3
  395. data/test/results/omopv4/condition_type/count_inpatient_detail +0 -2
  396. data/test/results/omopv4/condition_type/count_inpatient_header +0 -3
  397. data/test/results/omopv4/condition_type/count_inpatient_header_2 +0 -3
  398. data/test/results/omopv4/condition_type/count_inpatient_header_3 +0 -3
  399. data/test/results/omopv4/condition_type/count_inpatient_header_4 +0 -3
  400. data/test/results/omopv4/condition_type/count_inpatient_header_5 +0 -3
  401. data/test/results/omopv4/condition_type/count_inpatient_outpatient_detail +0 -3
  402. data/test/results/omopv4/condition_type/count_inpatient_primary +0 -2
  403. data/test/results/omopv4/condition_type/count_inpatient_primary_or_first +0 -3
  404. data/test/results/omopv4/condition_type/count_outpatient +0 -3
  405. data/test/results/omopv4/condition_type/count_outpatient_detail +0 -3
  406. data/test/results/omopv4/condition_type/count_outpatient_header +0 -2
  407. data/test/results/omopv4/condition_type/count_outpatient_primary +0 -3
  408. data/test/results/omopv4/condition_type/count_primary +0 -3
  409. data/test/results/omopv4/condition_type/crit_condition_era +0 -1
  410. data/test/results/omopv4/condition_type/crit_condition_era_30_day_window +0 -1
  411. data/test/results/omopv4/condition_type/crit_ehr_problem_list +0 -1
  412. data/test/results/omopv4/condition_type/crit_era_0 +0 -1
  413. data/test/results/omopv4/condition_type/crit_inpatient +0 -1
  414. data/test/results/omopv4/condition_type/crit_inpatient_detail +0 -1
  415. data/test/results/omopv4/condition_type/crit_inpatient_header +0 -1
  416. data/test/results/omopv4/condition_type/crit_inpatient_header_2 +0 -1
  417. data/test/results/omopv4/condition_type/crit_inpatient_header_3 +0 -1
  418. data/test/results/omopv4/condition_type/crit_inpatient_header_4 +0 -1
  419. data/test/results/omopv4/condition_type/crit_inpatient_header_5 +0 -1
  420. data/test/results/omopv4/condition_type/crit_inpatient_primary +0 -1
  421. data/test/results/omopv4/condition_type/crit_inpatient_primary_or_first +0 -1
  422. data/test/results/omopv4/condition_type/crit_outpatient +0 -1
  423. data/test/results/omopv4/condition_type/crit_outpatient_detail +0 -1
  424. data/test/results/omopv4/condition_type/crit_outpatient_header +0 -1
  425. data/test/results/omopv4/condition_type/crit_outpatient_primary +0 -1
  426. data/test/results/omopv4/condition_type/crit_primary +0 -1
  427. data/test/results/omopv4/contains/crit_1 +0 -5
  428. data/test/results/omopv4/contains/crit_2 +0 -2
  429. data/test/results/omopv4/contains/crit_3 +0 -2
  430. data/test/results/omopv4/count/anno_multiple_upstreams +0 -52
  431. data/test/results/omopv4/count/anno_no_upstream1 +0 -18
  432. data/test/results/omopv4/count/anno_no_upstream2 +0 -25
  433. data/test/results/omopv4/count/crit_icd9_ndc +0 -8
  434. data/test/results/omopv4/count/crit_ndc +0 -5
  435. data/test/results/omopv4/count/crit_person +0 -254
  436. data/test/results/omopv4/cpt/anno_icd9_upstream +0 -40
  437. data/test/results/omopv4/cpt/anno_invalid_code +0 -22
  438. data/test/results/omopv4/cpt/count_1 +0 -3
  439. data/test/results/omopv4/cpt/crit_1 +0 -174
  440. data/test/results/omopv4/cpt/crit_2 +0 -1
  441. data/test/results/omopv4/cpt/scanno_1 +0 -17
  442. data/test/results/omopv4/cpt_or_hcpcs/anno_bad_format +0 -25
  443. data/test/results/omopv4/cpt_or_hcpcs/count_1 +0 -3
  444. data/test/results/omopv4/cpt_or_hcpcs/crit_1 +0 -179
  445. data/test/results/omopv4/cpt_or_hcpcs/crit_2 +0 -1
  446. data/test/results/omopv4/date_range/anno_1 +0 -15
  447. data/test/results/omopv4/date_range/anno_extra_argument +0 -24
  448. data/test/results/omopv4/date_range/anno_invalid_argument +0 -25
  449. data/test/results/omopv4/date_range/anno_missing_argument1 +0 -20
  450. data/test/results/omopv4/date_range/anno_missing_argument2 +0 -20
  451. data/test/results/omopv4/date_range/anno_no_upstreams +0 -38
  452. data/test/results/omopv4/date_range/count_1 +0 -3
  453. data/test/results/omopv4/date_range/count_2 +0 -3
  454. data/test/results/omopv4/date_range/crit_1 +0 -1
  455. data/test/results/omopv4/date_range/crit_2 +0 -1
  456. data/test/results/omopv4/death/anno_multiple_upstreams +0 -50
  457. data/test/results/omopv4/death/anno_no_upstreams +0 -22
  458. data/test/results/omopv4/death/crit_basic +0 -5
  459. data/test/results/omopv4/death/crit_person +0 -5
  460. data/test/results/omopv4/drug_type_concept/anno_has_upstreams +0 -37
  461. data/test/results/omopv4/drug_type_concept/anno_no_arguments +0 -18
  462. data/test/results/omopv4/drug_type_concept/crit_basic1 +0 -5
  463. data/test/results/omopv4/drug_type_concept/crit_basic2 +0 -2
  464. data/test/results/omopv4/during/crit_1 +0 -15
  465. data/test/results/omopv4/during/crit_2 +0 -2
  466. data/test/results/omopv4/equal/crit_1 +0 -5
  467. data/test/results/omopv4/equal/crit_2 +0 -5
  468. data/test/results/omopv4/except/anno_1 +0 -42
  469. data/test/results/omopv4/except/anno_2 +0 -43
  470. data/test/results/omopv4/except/count_complex +0 -5
  471. data/test/results/omopv4/except/crit_412_cpt +0 -54
  472. data/test/results/omopv4/except/crit_412_inpatient +0 -46
  473. data/test/results/omopv4/except/crit_complex +0 -1
  474. data/test/results/omopv4/filter/crit_1 +0 -54
  475. data/test/results/omopv4/first/anno_argument +0 -25
  476. data/test/results/omopv4/first/anno_no_upstream +0 -18
  477. data/test/results/omopv4/first/crit_cpt +0 -207
  478. data/test/results/omopv4/first/crit_icd9 +0 -42
  479. data/test/results/omopv4/first/crit_union +0 -45
  480. data/test/results/omopv4/from/anno_has_upstreams +0 -39
  481. data/test/results/omopv4/from/anno_multiple_arguments +0 -24
  482. data/test/results/omopv4/from/count_condition_occurrence +0 -3
  483. data/test/results/omopv4/from/count_observation_period +0 -3
  484. data/test/results/omopv4/from/count_person +0 -3
  485. data/test/results/omopv4/from_seer_visits/anno_multiple_upstreams +0 -78
  486. data/test/results/omopv4/from_seer_visits/anno_no_upstream +0 -18
  487. data/test/results/omopv4/from_seer_visits/crit_1 +0 -6
  488. data/test/results/omopv4/from_seer_visits/crit_2 +0 -5
  489. data/test/results/omopv4/from_seer_visits/crit_3 +0 -5
  490. data/test/results/omopv4/from_seer_visits/crit_4 +0 -6
  491. data/test/results/omopv4/gender/anno_has_upstreams +0 -39
  492. data/test/results/omopv4/gender/crit_male +0 -130
  493. data/test/results/omopv4/hcpcs/anno_bad_format +0 -24
  494. data/test/results/omopv4/hcpcs/crit_A0382 +0 -9
  495. data/test/results/omopv4/icd10/anno_bad_format +0 -22
  496. data/test/results/omopv4/icd10/anno_has_upstreams +0 -40
  497. data/test/results/omopv4/icd10/crit_1 +0 -5
  498. data/test/results/omopv4/icd10pcs/anno_bad_format +0 -28
  499. data/test/results/omopv4/icd10pcs/anno_has_upstreams +0 -40
  500. data/test/results/omopv4/icd10pcs/crit_1 +0 -2
  501. data/test/results/omopv4/icd9/anno_empty_label +0 -15
  502. data/test/results/omopv4/icd9/anno_invalid_code +0 -21
  503. data/test/results/omopv4/icd9/crit_1 +0 -54
  504. data/test/results/omopv4/icd9_procedure/crit_1 +0 -5
  505. data/test/results/omopv4/intersect/anno_412_inpatient +0 -42
  506. data/test/results/omopv4/intersect/anno_has_arguments +0 -25
  507. data/test/results/omopv4/intersect/anno_no_upstream +0 -18
  508. data/test/results/omopv4/intersect/crit_412_inpatient +0 -12
  509. data/test/results/omopv4/intersect/crit_412_male +0 -182
  510. data/test/results/omopv4/intersect/crit_complex +0 -118
  511. data/test/results/omopv4/invalid/anno_bad_op +0 -55
  512. data/test/results/omopv4/invalid/scanno_1 +0 -23
  513. data/test/results/omopv4/last/crit_icd9 +0 -42
  514. data/test/results/omopv4/loinc/crit_basic +0 -5
  515. data/test/results/omopv4/ndc/crit_basic +0 -5
  516. data/test/results/omopv4/numeric/anno_multiple_upstreams +0 -59
  517. data/test/results/omopv4/numeric/num_values_1 +0 -254
  518. data/test/results/omopv4/numeric/num_values_2 +0 -5
  519. data/test/results/omopv4/numeric/num_values_3 +0 -5
  520. data/test/results/omopv4/observation_period/anno_has_arguments +0 -36
  521. data/test/results/omopv4/observation_period/anno_multiple_upstreams +0 -51
  522. data/test/results/omopv4/observation_period/count_all_periods +0 -3
  523. data/test/results/omopv4/observation_period/crit_female +0 -2
  524. data/test/results/omopv4/observation_period/crit_icd9 +0 -5
  525. data/test/results/omopv4/observation_period/crit_male +0 -5
  526. data/test/results/omopv4/occurrence/anno_no_upstream +0 -22
  527. data/test/results/omopv4/occurrence/cc_412_410 +0 -1
  528. data/test/results/omopv4/occurrence/count_412_410 +0 -3
  529. data/test/results/omopv4/occurrence/crit_1 +0 -16
  530. data/test/results/omopv4/occurrence/crit_2 +0 -2
  531. data/test/results/omopv4/occurrence/crit_3 +0 -42
  532. data/test/results/omopv4/one_in_two_out/anno_has_arguments +0 -27
  533. data/test/results/omopv4/one_in_two_out/anno_multiple_upstreams +0 -54
  534. data/test/results/omopv4/one_in_two_out/anno_no_upstream +0 -20
  535. data/test/results/omopv4/one_in_two_out/count_1 +0 -3
  536. data/test/results/omopv4/one_in_two_out/crit_hcpcs +0 -7
  537. data/test/results/omopv4/one_in_two_out/crit_icd9 +0 -21
  538. data/test/results/omopv4/overlapped_by/crit_1 +0 -5
  539. data/test/results/omopv4/overlapped_by/crit_2 +0 -2
  540. data/test/results/omopv4/overlapped_by/crit_3 +0 -5
  541. data/test/results/omopv4/overlapped_by/crit_4 +0 -2
  542. data/test/results/omopv4/overlaps/crit_1 +0 -5
  543. data/test/results/omopv4/overlaps/crit_2 +0 -2
  544. data/test/results/omopv4/overlaps/crit_3 +0 -5
  545. data/test/results/omopv4/overlaps/crit_4 +0 -2
  546. data/test/results/omopv4/person/anno_has_arguments +0 -22
  547. data/test/results/omopv4/person/anno_multiple_upstreams +0 -52
  548. data/test/results/omopv4/person/count_2 +0 -3
  549. data/test/results/omopv4/person/crit_1 +0 -42
  550. data/test/results/omopv4/person/crit_2 +0 -1
  551. data/test/results/omopv4/person_filter/count_1 +0 -4
  552. data/test/results/omopv4/person_filter/crit_1 +0 -54
  553. data/test/results/omopv4/person_filter/crit_2 +0 -5
  554. data/test/results/omopv4/person_filter/crit_3 +0 -32
  555. data/test/results/omopv4/person_filter/crit_4 +0 -52
  556. data/test/results/omopv4/person_filter/crit_5 +0 -1
  557. data/test/results/omopv4/place_of_service_code/anno_has_upstreams +0 -37
  558. data/test/results/omopv4/place_of_service_code/anno_no_arguments +0 -18
  559. data/test/results/omopv4/place_of_service_code/crit_basic +0 -174
  560. data/test/results/omopv4/place_of_service_filter/anno_1 +0 -29
  561. data/test/results/omopv4/procedure_occurrence/anno_has_arguments +0 -37
  562. data/test/results/omopv4/procedure_occurrence/anno_multiple_upstreams +0 -51
  563. data/test/results/omopv4/procedure_occurrence/count_gender +0 -3
  564. data/test/results/omopv4/procedure_occurrence/count_icd9 +0 -3
  565. data/test/results/omopv4/procedure_occurrence/count_started_by +0 -3
  566. data/test/results/omopv4/procedure_occurrence/crit_gender +0 -1
  567. data/test/results/omopv4/procedure_occurrence/crit_icd9 +0 -1
  568. data/test/results/omopv4/procedure_occurrence/crit_started_by +0 -1
  569. data/test/results/omopv4/provenance/anno_1 +0 -29
  570. data/test/results/omopv4/provider_filter/anno_1 +0 -29
  571. data/test/results/omopv4/race/anno_1 +0 -37
  572. data/test/results/omopv4/race/anno_2 +0 -18
  573. data/test/results/omopv4/race/crit_1 +0 -28
  574. data/test/results/omopv4/read/anno_1 +0 -21
  575. data/test/results/omopv4/read/crit_1 +0 -2
  576. data/test/results/omopv4/recall/anno_1 +0 -54
  577. data/test/results/omopv4/recall/anno_2 +0 -66
  578. data/test/results/omopv4/recall/anno_3 +0 -20
  579. data/test/results/omopv4/recall/anno_4 +0 -18
  580. data/test/results/omopv4/recall/anno_5 +0 -24
  581. data/test/results/omopv4/recall/anno_6 +0 -270
  582. data/test/results/omopv4/recall/crit_1 +0 -21
  583. data/test/results/omopv4/recall/crit_2 +0 -54
  584. data/test/results/omopv4/recall/crit_3 +0 -2
  585. data/test/results/omopv4/recall/crit_cte_1 +0 -42
  586. data/test/results/omopv4/recall/crit_cte_2 +0 -42
  587. data/test/results/omopv4/recall/crit_nested_perm_0 +0 -54
  588. data/test/results/omopv4/revenue_code/crit_1 +0 -2
  589. data/test/results/omopv4/revenue_code/crit_basic +0 -2
  590. data/test/results/omopv4/revenue_code/domains_1 +0 -3
  591. data/test/results/omopv4/revenue_code/domains_drg100 +0 -3
  592. data/test/results/omopv4/rxnorm/crit_1 +0 -5
  593. data/test/results/omopv4/snomed/crit_1 +0 -84
  594. data/test/results/omopv4/started_by/crit_1 +0 -5
  595. data/test/results/omopv4/started_by/crit_2 +0 -2
  596. data/test/results/omopv4/started_by/crit_3 +0 -2
  597. data/test/results/omopv4/sum/anno_1 +0 -18
  598. data/test/results/omopv4/sum/anno_2 +0 -36
  599. data/test/results/omopv4/sum/num_1 +0 -5
  600. data/test/results/omopv4/sum/num_2 +0 -8
  601. data/test/results/omopv4/sum/num_3 +0 -254
  602. data/test/results/omopv4/time_window/anno_1 +0 -20
  603. data/test/results/omopv4/time_window/anno_2 +0 -40
  604. data/test/results/omopv4/time_window/anno_3 +0 -36
  605. data/test/results/omopv4/time_window/anno_4 +0 -39
  606. data/test/results/omopv4/time_window/anno_5 +0 -57
  607. data/test/results/omopv4/time_window/crit_1 +0 -54
  608. data/test/results/omopv4/time_window/crit_2 +0 -174
  609. data/test/results/omopv4/time_window/crit_3 +0 -54
  610. data/test/results/omopv4/time_window/crit_4 +0 -174
  611. data/test/results/omopv4/trim_date_end/crit_1 +0 -5
  612. data/test/results/omopv4/trim_date_end/crit_2 +0 -2
  613. data/test/results/omopv4/trim_date_end/crit_3 +0 -6
  614. data/test/results/omopv4/trim_date_end/crit_at_least +0 -5
  615. data/test/results/omopv4/trim_date_end/crit_occurrences_1 +0 -2
  616. data/test/results/omopv4/trim_date_end/crit_occurrences_2 +0 -6
  617. data/test/results/omopv4/trim_date_end/crit_within +0 -5
  618. data/test/results/omopv4/trim_date_start/crit_1 +0 -5
  619. data/test/results/omopv4/trim_date_start/crit_2 +0 -2
  620. data/test/results/omopv4/trim_date_start/crit_3 +0 -6
  621. data/test/results/omopv4/trim_date_start/crit_at_least +0 -5
  622. data/test/results/omopv4/trim_date_start/crit_occurrences_1 +0 -2
  623. data/test/results/omopv4/trim_date_start/crit_occurrences_2 +0 -6
  624. data/test/results/omopv4/trim_date_start/crit_within +0 -5
  625. data/test/results/omopv4/union/anno_1 +0 -43
  626. data/test/results/omopv4/union/anno_2 +0 -74
  627. data/test/results/omopv4/union/anno_3 +0 -18
  628. data/test/results/omopv4/union/anno_4 +0 -25
  629. data/test/results/omopv4/union/anno_5 +0 -33
  630. data/test/results/omopv4/union/anno_6 +0 -46
  631. data/test/results/omopv4/union/cc_1 +0 -1
  632. data/test/results/omopv4/union/cc_2 +0 -1
  633. data/test/results/omopv4/union/cc_3 +0 -1
  634. data/test/results/omopv4/union/cc_4 +0 -1
  635. data/test/results/omopv4/union/cc_5 +0 -1
  636. data/test/results/omopv4/union/count_1 +0 -3
  637. data/test/results/omopv4/union/count_2 +0 -3
  638. data/test/results/omopv4/union/count_3 +0 -3
  639. data/test/results/omopv4/union/count_4 +0 -3
  640. data/test/results/omopv4/union/count_5 +0 -4
  641. data/test/results/omopv4/union/scanno_1 +0 -22
  642. data/test/results/omopv4/union/scanno_2 +0 -36
  643. data/test/results/omopv4/visit_occurrence/anno_1 +0 -52
  644. data/test/results/omopv4/visit_occurrence/anno_2 +0 -37
  645. data/test/results/omopv4/visit_occurrence/crit_1 +0 -54
  646. data/test/results/omopv4/visit_occurrence/crit_2 +0 -7566
  647. data/test/results/omopv4/visit_occurrence/crit_3 +0 -14935
  648. data/test/results/omopv4_plus/after/anno_1 +0 -25
  649. data/test/results/omopv4_plus/after/anno_2 +0 -48
  650. data/test/results/omopv4_plus/after/anno_3 +0 -34
  651. data/test/results/omopv4_plus/after/anno_4 +0 -60
  652. data/test/results/omopv4_plus/after/anno_5 +0 -68
  653. data/test/results/omopv4_plus/after/anno_6 +0 -60
  654. data/test/results/omopv4_plus/after/crit_at_least +0 -7
  655. data/test/results/omopv4_plus/after/crit_basic +0 -32
  656. data/test/results/omopv4_plus/after/crit_occurrences +0 -12
  657. data/test/results/omopv4_plus/after/crit_within +0 -5
  658. data/test/results/omopv4_plus/any_overlap/crit_basic1 +0 -14
  659. data/test/results/omopv4_plus/any_overlap/crit_basic2 +0 -14
  660. data/test/results/omopv4_plus/any_overlap/crit_occurrences1 +0 -2
  661. data/test/results/omopv4_plus/any_overlap/crit_occurrences2 +0 -14
  662. data/test/results/omopv4_plus/any_overlap/crit_within +0 -8
  663. data/test/results/omopv4_plus/before/crit_at_least +0 -6
  664. data/test/results/omopv4_plus/before/crit_basic1 +0 -48
  665. data/test/results/omopv4_plus/before/crit_basic2 +0 -8
  666. data/test/results/omopv4_plus/before/crit_occurrences +0 -13
  667. data/test/results/omopv4_plus/before/crit_within +0 -17
  668. data/test/results/omopv4_plus/co_reported/anno_1 +0 -43
  669. data/test/results/omopv4_plus/co_reported/anno_2 +0 -66
  670. data/test/results/omopv4_plus/co_reported/anno_3 +0 -47
  671. data/test/results/omopv4_plus/complement/anno_duplicate_params +0 -52
  672. data/test/results/omopv4_plus/complement/anno_invalid_params +0 -37
  673. data/test/results/omopv4_plus/complement/anno_no_params +0 -18
  674. data/test/results/omopv4_plus/complement/count_3way_intersect +0 -4
  675. data/test/results/omopv4_plus/complement/count_3way_union +0 -4
  676. data/test/results/omopv4_plus/complement/count_intersect +0 -3
  677. data/test/results/omopv4_plus/complement/count_union +0 -3
  678. data/test/results/omopv4_plus/complement/count_union_and_intersect +0 -4
  679. data/test/results/omopv4_plus/complement/crit_basic1 +0 -52483
  680. data/test/results/omopv4_plus/complement/crit_icd9_selector +0 -52
  681. data/test/results/omopv4_plus/complex/anno_1 +0 -85
  682. data/test/results/omopv4_plus/complex/crit_1 +0 -2
  683. data/test/results/omopv4_plus/complex/crit_2 +0 -2
  684. data/test/results/omopv4_plus/complex/crit_3 +0 -2
  685. data/test/results/omopv4_plus/complex/crit_4 +0 -2
  686. data/test/results/omopv4_plus/complex/crit_5 +0 -2
  687. data/test/results/omopv4_plus/complex/crit_6 +0 -24
  688. data/test/results/omopv4_plus/complex/crit_7 +0 -45
  689. data/test/results/omopv4_plus/complex/crit_out_of_order_ctes +0 -15
  690. data/test/results/omopv4_plus/complex/scanno_1 +0 -108
  691. data/test/results/omopv4_plus/concurrent_within/crit_icd9 +0 -52
  692. data/test/results/omopv4_plus/concurrent_within/crit_icd9_and_place_of_service +0 -21
  693. data/test/results/omopv4_plus/concurrent_within/crit_negative_start +0 -5
  694. data/test/results/omopv4_plus/condition_type/anno_icd9 +0 -39
  695. data/test/results/omopv4_plus/condition_type/count_condition_era +0 -2
  696. data/test/results/omopv4_plus/condition_type/count_condition_era_30_day_window +0 -2
  697. data/test/results/omopv4_plus/condition_type/count_ehr_problem_list +0 -2
  698. data/test/results/omopv4_plus/condition_type/count_era_0 +0 -2
  699. data/test/results/omopv4_plus/condition_type/count_inpatient +0 -3
  700. data/test/results/omopv4_plus/condition_type/count_inpatient_detail +0 -2
  701. data/test/results/omopv4_plus/condition_type/count_inpatient_header +0 -3
  702. data/test/results/omopv4_plus/condition_type/count_inpatient_header_2 +0 -3
  703. data/test/results/omopv4_plus/condition_type/count_inpatient_header_3 +0 -3
  704. data/test/results/omopv4_plus/condition_type/count_inpatient_header_4 +0 -3
  705. data/test/results/omopv4_plus/condition_type/count_inpatient_header_5 +0 -3
  706. data/test/results/omopv4_plus/condition_type/count_inpatient_outpatient_detail +0 -3
  707. data/test/results/omopv4_plus/condition_type/count_inpatient_primary +0 -3
  708. data/test/results/omopv4_plus/condition_type/count_inpatient_primary_or_first +0 -3
  709. data/test/results/omopv4_plus/condition_type/count_outpatient +0 -3
  710. data/test/results/omopv4_plus/condition_type/count_outpatient_detail +0 -2
  711. data/test/results/omopv4_plus/condition_type/count_outpatient_header +0 -3
  712. data/test/results/omopv4_plus/condition_type/count_outpatient_primary +0 -3
  713. data/test/results/omopv4_plus/condition_type/count_primary +0 -3
  714. data/test/results/omopv4_plus/contains/crit_1 +0 -5
  715. data/test/results/omopv4_plus/contains/crit_2 +0 -2
  716. data/test/results/omopv4_plus/contains/crit_3 +0 -2
  717. data/test/results/omopv4_plus/count/anno_multiple_upstreams +0 -52
  718. data/test/results/omopv4_plus/count/anno_no_upstream1 +0 -18
  719. data/test/results/omopv4_plus/count/anno_no_upstream2 +0 -25
  720. data/test/results/omopv4_plus/count/crit_icd9_ndc +0 -5
  721. data/test/results/omopv4_plus/count/crit_ndc +0 -2
  722. data/test/results/omopv4_plus/count/crit_person +0 -254
  723. data/test/results/omopv4_plus/cpt/anno_icd9_upstream +0 -40
  724. data/test/results/omopv4_plus/cpt/anno_invalid_code +0 -22
  725. data/test/results/omopv4_plus/cpt/count_1 +0 -3
  726. data/test/results/omopv4_plus/cpt/crit_1 +0 -158
  727. data/test/results/omopv4_plus/cpt/scanno_1 +0 -17
  728. data/test/results/omopv4_plus/cpt_or_hcpcs/anno_bad_format +0 -25
  729. data/test/results/omopv4_plus/cpt_or_hcpcs/count_1 +0 -3
  730. data/test/results/omopv4_plus/cpt_or_hcpcs/crit_1 +0 -161
  731. data/test/results/omopv4_plus/date_range/anno_1 +0 -15
  732. data/test/results/omopv4_plus/date_range/anno_extra_argument +0 -24
  733. data/test/results/omopv4_plus/date_range/anno_invalid_argument +0 -25
  734. data/test/results/omopv4_plus/date_range/anno_missing_argument1 +0 -20
  735. data/test/results/omopv4_plus/date_range/anno_missing_argument2 +0 -20
  736. data/test/results/omopv4_plus/date_range/anno_no_upstreams +0 -38
  737. data/test/results/omopv4_plus/date_range/count_1 +0 -3
  738. data/test/results/omopv4_plus/date_range/count_2 +0 -3
  739. data/test/results/omopv4_plus/death/anno_multiple_upstreams +0 -50
  740. data/test/results/omopv4_plus/death/anno_no_upstreams +0 -22
  741. data/test/results/omopv4_plus/death/crit_basic +0 -14
  742. data/test/results/omopv4_plus/death/crit_person +0 -14
  743. data/test/results/omopv4_plus/drug_type_concept/anno_has_upstreams +0 -37
  744. data/test/results/omopv4_plus/drug_type_concept/anno_no_arguments +0 -18
  745. data/test/results/omopv4_plus/drug_type_concept/crit_basic1 +0 -2
  746. data/test/results/omopv4_plus/drug_type_concept/crit_basic2 +0 -2
  747. data/test/results/omopv4_plus/during/crit_1 +0 -14
  748. data/test/results/omopv4_plus/during/crit_2 +0 -2
  749. data/test/results/omopv4_plus/equal/crit_1 +0 -2
  750. data/test/results/omopv4_plus/equal/crit_2 +0 -2
  751. data/test/results/omopv4_plus/except/anno_1 +0 -42
  752. data/test/results/omopv4_plus/except/anno_2 +0 -43
  753. data/test/results/omopv4_plus/except/count_complex +0 -5
  754. data/test/results/omopv4_plus/except/crit_412_cpt +0 -52
  755. data/test/results/omopv4_plus/except/crit_412_inpatient +0 -45
  756. data/test/results/omopv4_plus/filter/crit_1 +0 -52
  757. data/test/results/omopv4_plus/first/anno_argument +0 -25
  758. data/test/results/omopv4_plus/first/anno_no_upstream +0 -18
  759. data/test/results/omopv4_plus/first/crit_cpt +0 -180
  760. data/test/results/omopv4_plus/first/crit_icd9 +0 -41
  761. data/test/results/omopv4_plus/first/crit_union +0 -52
  762. data/test/results/omopv4_plus/from/anno_has_upstreams +0 -39
  763. data/test/results/omopv4_plus/from/anno_multiple_arguments +0 -24
  764. data/test/results/omopv4_plus/from/count_condition_occurrence +0 -3
  765. data/test/results/omopv4_plus/from/count_observation_period +0 -3
  766. data/test/results/omopv4_plus/from/count_person +0 -3
  767. data/test/results/omopv4_plus/from_seer_visits/anno_multiple_upstreams +0 -78
  768. data/test/results/omopv4_plus/from_seer_visits/anno_no_upstream +0 -18
  769. data/test/results/omopv4_plus/from_seer_visits/crit_1 +0 -2
  770. data/test/results/omopv4_plus/from_seer_visits/crit_2 +0 -2
  771. data/test/results/omopv4_plus/from_seer_visits/crit_3 +0 -2
  772. data/test/results/omopv4_plus/from_seer_visits/crit_4 +0 -2
  773. data/test/results/omopv4_plus/gender/anno_has_upstreams +0 -39
  774. data/test/results/omopv4_plus/gender/crit_male +0 -128
  775. data/test/results/omopv4_plus/hcpcs/anno_bad_format +0 -24
  776. data/test/results/omopv4_plus/hcpcs/crit_A0382 +0 -7
  777. data/test/results/omopv4_plus/icd10/anno_bad_format +0 -22
  778. data/test/results/omopv4_plus/icd10/anno_has_upstreams +0 -40
  779. data/test/results/omopv4_plus/icd10/crit_1 +0 -2
  780. data/test/results/omopv4_plus/icd10pcs/anno_bad_format +0 -28
  781. data/test/results/omopv4_plus/icd10pcs/anno_has_upstreams +0 -40
  782. data/test/results/omopv4_plus/icd10pcs/crit_1 +0 -2
  783. data/test/results/omopv4_plus/icd9/anno_empty_label +0 -15
  784. data/test/results/omopv4_plus/icd9/anno_invalid_code +0 -21
  785. data/test/results/omopv4_plus/icd9/anno_valid_code +0 -3
  786. data/test/results/omopv4_plus/icd9/crit_1 +0 -52
  787. data/test/results/omopv4_plus/icd9_procedure/crit_1 +0 -5
  788. data/test/results/omopv4_plus/intersect/anno_412_inpatient +0 -42
  789. data/test/results/omopv4_plus/intersect/anno_has_arguments +0 -25
  790. data/test/results/omopv4_plus/intersect/anno_no_upstream +0 -18
  791. data/test/results/omopv4_plus/intersect/crit_412_inpatient +0 -11
  792. data/test/results/omopv4_plus/intersect/crit_412_male +0 -178
  793. data/test/results/omopv4_plus/intersect/crit_complex +0 -110
  794. data/test/results/omopv4_plus/invalid/anno_bad_op +0 -55
  795. data/test/results/omopv4_plus/invalid/scanno_1 +0 -23
  796. data/test/results/omopv4_plus/last/crit_icd9 +0 -41
  797. data/test/results/omopv4_plus/loinc/crit_basic +0 -2
  798. data/test/results/omopv4_plus/ndc/crit_basic +0 -2
  799. data/test/results/omopv4_plus/ndc/results_1 +0 -41
  800. data/test/results/omopv4_plus/numeric/anno_multiple_upstreams +0 -59
  801. data/test/results/omopv4_plus/numeric/num_values_1 +0 -254
  802. data/test/results/omopv4_plus/numeric/num_values_2 +0 -5
  803. data/test/results/omopv4_plus/numeric/num_values_3 +0 -5
  804. data/test/results/omopv4_plus/observation_period/anno_has_arguments +0 -36
  805. data/test/results/omopv4_plus/observation_period/anno_multiple_upstreams +0 -51
  806. data/test/results/omopv4_plus/observation_period/count_all_periods +0 -3
  807. data/test/results/omopv4_plus/observation_period/crit_female +0 -87
  808. data/test/results/omopv4_plus/observation_period/crit_icd9 +0 -28
  809. data/test/results/omopv4_plus/observation_period/crit_male +0 -75
  810. data/test/results/omopv4_plus/occurrence/anno_no_upstream +0 -22
  811. data/test/results/omopv4_plus/occurrence/count_412_410 +0 -3
  812. data/test/results/omopv4_plus/occurrence/crit_1 +0 -15
  813. data/test/results/omopv4_plus/occurrence/crit_2 +0 -2
  814. data/test/results/omopv4_plus/occurrence/crit_3 +0 -41
  815. data/test/results/omopv4_plus/one_in_two_out/anno_has_arguments +0 -27
  816. data/test/results/omopv4_plus/one_in_two_out/anno_multiple_upstreams +0 -54
  817. data/test/results/omopv4_plus/one_in_two_out/anno_no_upstream +0 -20
  818. data/test/results/omopv4_plus/one_in_two_out/count_1 +0 -3
  819. data/test/results/omopv4_plus/one_in_two_out/count_same_as_1 +0 -3
  820. data/test/results/omopv4_plus/one_in_two_out/crit_hcpcs +0 -2
  821. data/test/results/omopv4_plus/one_in_two_out/crit_icd9 +0 -19
  822. data/test/results/omopv4_plus/one_in_two_out/results_1 +0 -803
  823. data/test/results/omopv4_plus/one_in_two_out/results_2 +0 -803
  824. data/test/results/omopv4_plus/overlapped_by/crit_1 +0 -5
  825. data/test/results/omopv4_plus/overlapped_by/crit_2 +0 -2
  826. data/test/results/omopv4_plus/overlapped_by/crit_3 +0 -5
  827. data/test/results/omopv4_plus/overlapped_by/crit_4 +0 -2
  828. data/test/results/omopv4_plus/overlaps/crit_1 +0 -5
  829. data/test/results/omopv4_plus/overlaps/crit_2 +0 -2
  830. data/test/results/omopv4_plus/overlaps/crit_3 +0 -5
  831. data/test/results/omopv4_plus/overlaps/crit_4 +0 -2
  832. data/test/results/omopv4_plus/person/anno_has_arguments +0 -22
  833. data/test/results/omopv4_plus/person/anno_multiple_upstreams +0 -52
  834. data/test/results/omopv4_plus/person/count_2 +0 -3
  835. data/test/results/omopv4_plus/person/crit_1 +0 -41
  836. data/test/results/omopv4_plus/person_filter/count_1 +0 -4
  837. data/test/results/omopv4_plus/person_filter/crit_1 +0 -52
  838. data/test/results/omopv4_plus/person_filter/crit_2 +0 -10
  839. data/test/results/omopv4_plus/person_filter/crit_3 +0 -32
  840. data/test/results/omopv4_plus/person_filter/crit_4 +0 -50
  841. data/test/results/omopv4_plus/place_of_service_code/anno_has_upstreams +0 -37
  842. data/test/results/omopv4_plus/place_of_service_code/anno_no_arguments +0 -18
  843. data/test/results/omopv4_plus/place_of_service_code/crit_basic +0 -157
  844. data/test/results/omopv4_plus/place_of_service_filter/anno_1 +0 -29
  845. data/test/results/omopv4_plus/procedure_occurrence/anno_has_arguments +0 -37
  846. data/test/results/omopv4_plus/procedure_occurrence/anno_multiple_upstreams +0 -51
  847. data/test/results/omopv4_plus/procedure_occurrence/count_gender +0 -3
  848. data/test/results/omopv4_plus/procedure_occurrence/count_icd9 +0 -3
  849. data/test/results/omopv4_plus/procedure_occurrence/count_started_by +0 -3
  850. data/test/results/omopv4_plus/provenance/anno_1 +0 -29
  851. data/test/results/omopv4_plus/provenance/anno_bad_keyword +0 -38
  852. data/test/results/omopv4_plus/provenance/count_1 +0 -3
  853. data/test/results/omopv4_plus/provenance/count_2 +0 -3
  854. data/test/results/omopv4_plus/provider_filter/anno_1 +0 -29
  855. data/test/results/omopv4_plus/race/anno_1 +0 -37
  856. data/test/results/omopv4_plus/race/anno_2 +0 -18
  857. data/test/results/omopv4_plus/race/crit_1 +0 -32
  858. data/test/results/omopv4_plus/read/anno_1 +0 -15
  859. data/test/results/omopv4_plus/read/crit_1 +0 -2
  860. data/test/results/omopv4_plus/recall/anno_1 +0 -54
  861. data/test/results/omopv4_plus/recall/anno_2 +0 -66
  862. data/test/results/omopv4_plus/recall/anno_3 +0 -20
  863. data/test/results/omopv4_plus/recall/anno_4 +0 -18
  864. data/test/results/omopv4_plus/recall/anno_5 +0 -24
  865. data/test/results/omopv4_plus/recall/anno_6 +0 -270
  866. data/test/results/omopv4_plus/recall/crit_1 +0 -19
  867. data/test/results/omopv4_plus/recall/crit_2 +0 -52
  868. data/test/results/omopv4_plus/recall/crit_3 +0 -2
  869. data/test/results/omopv4_plus/recall/crit_cte_1 +0 -41
  870. data/test/results/omopv4_plus/recall/crit_cte_2 +0 -41
  871. data/test/results/omopv4_plus/recall/crit_nested_perm_0 +0 -52
  872. data/test/results/omopv4_plus/revenue_code/crit_1 +0 -2
  873. data/test/results/omopv4_plus/revenue_code/crit_basic +0 -2
  874. data/test/results/omopv4_plus/revenue_code/domains_1 +0 -3
  875. data/test/results/omopv4_plus/revenue_code/domains_drg100 +0 -3
  876. data/test/results/omopv4_plus/rxnorm/crit_1 +0 -2
  877. data/test/results/omopv4_plus/snomed/crit_1 +0 -2
  878. data/test/results/omopv4_plus/started_by/crit_1 +0 -5
  879. data/test/results/omopv4_plus/started_by/crit_2 +0 -2
  880. data/test/results/omopv4_plus/started_by/crit_3 +0 -2
  881. data/test/results/omopv4_plus/sum/anno_1 +0 -18
  882. data/test/results/omopv4_plus/sum/anno_2 +0 -36
  883. data/test/results/omopv4_plus/sum/num_1 +0 -2
  884. data/test/results/omopv4_plus/sum/num_2 +0 -5
  885. data/test/results/omopv4_plus/sum/num_3 +0 -254
  886. data/test/results/omopv4_plus/time_window/anno_1 +0 -20
  887. data/test/results/omopv4_plus/time_window/anno_2 +0 -40
  888. data/test/results/omopv4_plus/time_window/anno_3 +0 -36
  889. data/test/results/omopv4_plus/time_window/anno_4 +0 -39
  890. data/test/results/omopv4_plus/time_window/anno_5 +0 -57
  891. data/test/results/omopv4_plus/time_window/crit_1 +0 -52
  892. data/test/results/omopv4_plus/time_window/crit_2 +0 -157
  893. data/test/results/omopv4_plus/time_window/crit_3 +0 -52
  894. data/test/results/omopv4_plus/time_window/crit_4 +0 -157
  895. data/test/results/omopv4_plus/trim_date_end/crit_1 +0 -5
  896. data/test/results/omopv4_plus/trim_date_end/crit_2 +0 -2
  897. data/test/results/omopv4_plus/trim_date_end/crit_3 +0 -6
  898. data/test/results/omopv4_plus/trim_date_end/crit_at_least +0 -5
  899. data/test/results/omopv4_plus/trim_date_end/crit_occurrences_1 +0 -2
  900. data/test/results/omopv4_plus/trim_date_end/crit_occurrences_2 +0 -6
  901. data/test/results/omopv4_plus/trim_date_end/crit_within +0 -5
  902. data/test/results/omopv4_plus/trim_date_start/crit_1 +0 -5
  903. data/test/results/omopv4_plus/trim_date_start/crit_2 +0 -2
  904. data/test/results/omopv4_plus/trim_date_start/crit_3 +0 -6
  905. data/test/results/omopv4_plus/trim_date_start/crit_at_least +0 -5
  906. data/test/results/omopv4_plus/trim_date_start/crit_occurrences_1 +0 -2
  907. data/test/results/omopv4_plus/trim_date_start/crit_occurrences_2 +0 -6
  908. data/test/results/omopv4_plus/trim_date_start/crit_within +0 -5
  909. data/test/results/omopv4_plus/union/anno_1 +0 -43
  910. data/test/results/omopv4_plus/union/anno_2 +0 -74
  911. data/test/results/omopv4_plus/union/anno_3 +0 -18
  912. data/test/results/omopv4_plus/union/anno_4 +0 -25
  913. data/test/results/omopv4_plus/union/anno_5 +0 -33
  914. data/test/results/omopv4_plus/union/anno_6 +0 -46
  915. data/test/results/omopv4_plus/union/count_1 +0 -3
  916. data/test/results/omopv4_plus/union/count_2 +0 -3
  917. data/test/results/omopv4_plus/union/count_3 +0 -3
  918. data/test/results/omopv4_plus/union/count_4 +0 -3
  919. data/test/results/omopv4_plus/union/count_5 +0 -4
  920. data/test/results/omopv4_plus/union/optcc_1 +0 -3
  921. data/test/results/omopv4_plus/union/optcc_2 +0 -3
  922. data/test/results/omopv4_plus/union/optcc_3 +0 -3
  923. data/test/results/omopv4_plus/union/optcc_4 +0 -3
  924. data/test/results/omopv4_plus/union/optcc_5 +0 -3
  925. data/test/results/omopv4_plus/union/optcc_6 +0 -3
  926. data/test/results/omopv4_plus/union/scanno_1 +0 -22
  927. data/test/results/omopv4_plus/union/scanno_2 +0 -36
  928. data/test/results/omopv4_plus/visit_occurrence/anno_1 +0 -52
  929. data/test/results/omopv4_plus/visit_occurrence/anno_2 +0 -37
  930. data/test/results/omopv4_plus/visit_occurrence/crit_1 +0 -52
  931. data/test/results/omopv4_plus/visit_occurrence/crit_2 +0 -22945
  932. data/test/results/omopv4_plus/visit_occurrence/crit_3 +0 -46851
  933. data/test/statements/after/anno_1 +0 -7
  934. data/test/statements/after/anno_2 +0 -16
  935. data/test/statements/after/anno_3 +0 -9
  936. data/test/statements/after/anno_4 +0 -19
  937. data/test/statements/after/anno_5 +0 -21
  938. data/test/statements/after/anno_6 +0 -16
  939. data/test/statements/after/crit_at_least +0 -21
  940. data/test/statements/after/crit_basic +0 -20
  941. data/test/statements/after/crit_occurrences +0 -21
  942. data/test/statements/after/crit_within +0 -21
  943. data/test/statements/any_overlap/crit_basic1 +0 -16
  944. data/test/statements/any_overlap/crit_basic2 +0 -16
  945. data/test/statements/any_overlap/crit_occurrences1 +0 -17
  946. data/test/statements/any_overlap/crit_occurrences2 +0 -17
  947. data/test/statements/any_overlap/crit_within +0 -17
  948. data/test/statements/before/crit_at_least +0 -14
  949. data/test/statements/before/crit_basic1 +0 -13
  950. data/test/statements/before/crit_basic2 +0 -16
  951. data/test/statements/before/crit_occurrences +0 -14
  952. data/test/statements/before/crit_within +0 -14
  953. data/test/statements/co_reported/anno_1 +0 -13
  954. data/test/statements/co_reported/anno_2 +0 -21
  955. data/test/statements/co_reported/anno_3 +0 -14
  956. data/test/statements/complement/anno_duplicate_params +0 -11
  957. data/test/statements/complement/anno_invalid_params +0 -8
  958. data/test/statements/complement/anno_no_params +0 -3
  959. data/test/statements/complement/count_3way_intersect +0 -24
  960. data/test/statements/complement/count_3way_union +0 -18
  961. data/test/statements/complement/count_intersect +0 -17
  962. data/test/statements/complement/count_union +0 -14
  963. data/test/statements/complement/count_union_and_intersect +0 -27
  964. data/test/statements/complement/crit_basic1 +0 -7
  965. data/test/statements/complement/crit_icd9_selector +0 -10
  966. data/test/statements/complex/anno_1 +0 -29
  967. data/test/statements/complex/crit_1 +0 -278
  968. data/test/statements/complex/crit_2 +0 -43
  969. data/test/statements/complex/crit_3 +0 -54
  970. data/test/statements/complex/crit_4 +0 -17
  971. data/test/statements/complex/crit_5 +0 -17
  972. data/test/statements/complex/crit_6 +0 -20
  973. data/test/statements/complex/crit_7 +0 -14
  974. data/test/statements/complex/crit_out_of_order_ctes +0 -39
  975. data/test/statements/complex/scanno_1 +0 -1508
  976. data/test/statements/concurrent_within/crit_icd9 +0 -11
  977. data/test/statements/concurrent_within/crit_icd9_and_place_of_service +0 -15
  978. data/test/statements/concurrent_within/crit_negative_start +0 -15
  979. data/test/statements/condition_type/anno_icd9 +0 -7
  980. data/test/statements/condition_type/count_condition_era +0 -4
  981. data/test/statements/condition_type/count_condition_era_30_day_window +0 -4
  982. data/test/statements/condition_type/count_ehr_problem_list +0 -4
  983. data/test/statements/condition_type/count_era_0 +0 -4
  984. data/test/statements/condition_type/count_inpatient +0 -4
  985. data/test/statements/condition_type/count_inpatient_detail +0 -4
  986. data/test/statements/condition_type/count_inpatient_header +0 -4
  987. data/test/statements/condition_type/count_inpatient_header_2 +0 -4
  988. data/test/statements/condition_type/count_inpatient_header_3 +0 -4
  989. data/test/statements/condition_type/count_inpatient_header_4 +0 -4
  990. data/test/statements/condition_type/count_inpatient_header_5 +0 -4
  991. data/test/statements/condition_type/count_inpatient_outpatient_detail +0 -5
  992. data/test/statements/condition_type/count_inpatient_primary +0 -4
  993. data/test/statements/condition_type/count_inpatient_primary_or_first +0 -4
  994. data/test/statements/condition_type/count_outpatient +0 -4
  995. data/test/statements/condition_type/count_outpatient_detail +0 -4
  996. data/test/statements/condition_type/count_outpatient_header +0 -4
  997. data/test/statements/condition_type/count_outpatient_primary +0 -4
  998. data/test/statements/condition_type/count_primary +0 -4
  999. data/test/statements/contains/crit_1 +0 -16
  1000. data/test/statements/contains/crit_2 +0 -16
  1001. data/test/statements/contains/crit_3 +0 -16
  1002. data/test/statements/count/anno_multiple_upstreams +0 -11
  1003. data/test/statements/count/anno_no_upstream1 +0 -3
  1004. data/test/statements/count/anno_no_upstream2 +0 -4
  1005. data/test/statements/count/crit_icd9_ndc +0 -15
  1006. data/test/statements/count/crit_ndc +0 -11
  1007. data/test/statements/count/crit_person +0 -7
  1008. data/test/statements/cpt/anno_icd9_upstream +0 -7
  1009. data/test/statements/cpt/anno_invalid_code +0 -5
  1010. data/test/statements/cpt/count_1 +0 -4
  1011. data/test/statements/cpt/crit_1 +0 -4
  1012. data/test/statements/cpt/scanno_1 +0 -4
  1013. data/test/statements/cpt_or_hcpcs/anno_bad_format +0 -7
  1014. data/test/statements/cpt_or_hcpcs/count_1 +0 -5
  1015. data/test/statements/cpt_or_hcpcs/crit_1 +0 -5
  1016. data/test/statements/date_range/anno_1 +0 -7
  1017. data/test/statements/date_range/anno_extra_argument +0 -8
  1018. data/test/statements/date_range/anno_invalid_argument +0 -7
  1019. data/test/statements/date_range/anno_missing_argument1 +0 -6
  1020. data/test/statements/date_range/anno_missing_argument2 +0 -6
  1021. data/test/statements/date_range/anno_no_upstreams +0 -11
  1022. data/test/statements/date_range/count_1 +0 -7
  1023. data/test/statements/date_range/count_2 +0 -7
  1024. data/test/statements/death/anno_multiple_upstreams +0 -10
  1025. data/test/statements/death/anno_no_upstreams +0 -4
  1026. data/test/statements/death/crit_basic +0 -3
  1027. data/test/statements/death/crit_person +0 -7
  1028. data/test/statements/drug_type_concept/anno_has_upstreams +0 -8
  1029. data/test/statements/drug_type_concept/anno_no_arguments +0 -3
  1030. data/test/statements/drug_type_concept/crit_basic1 +0 -4
  1031. data/test/statements/drug_type_concept/crit_basic2 +0 -4
  1032. data/test/statements/during/crit_1 +0 -16
  1033. data/test/statements/during/crit_2 +0 -16
  1034. data/test/statements/equal/crit_1 +0 -17
  1035. data/test/statements/equal/crit_2 +0 -21
  1036. data/test/statements/except/anno_1 +0 -13
  1037. data/test/statements/except/anno_2 +0 -14
  1038. data/test/statements/except/count_complex +0 -31
  1039. data/test/statements/except/crit_412_cpt +0 -13
  1040. data/test/statements/except/crit_412_inpatient +0 -13
  1041. data/test/statements/filter/crit_1 +0 -15
  1042. data/test/statements/first/anno_argument +0 -4
  1043. data/test/statements/first/anno_no_upstream +0 -3
  1044. data/test/statements/first/crit_cpt +0 -7
  1045. data/test/statements/first/crit_icd9 +0 -7
  1046. data/test/statements/first/crit_union +0 -14
  1047. data/test/statements/from/anno_has_upstreams +0 -7
  1048. data/test/statements/from/anno_multiple_arguments +0 -5
  1049. data/test/statements/from_seer_visits/anno_multiple_upstreams +0 -17
  1050. data/test/statements/from_seer_visits/anno_no_upstream +0 -3
  1051. data/test/statements/from_seer_visits/crit_1 +0 -10
  1052. data/test/statements/from_seer_visits/crit_2 +0 -11
  1053. data/test/statements/from_seer_visits/crit_3 +0 -11
  1054. data/test/statements/from_seer_visits/crit_4 +0 -12
  1055. data/test/statements/gender/anno_has_upstreams +0 -7
  1056. data/test/statements/gender/crit_male +0 -4
  1057. data/test/statements/hcpcs/anno_bad_format +0 -6
  1058. data/test/statements/hcpcs/crit_A0382 +0 -4
  1059. data/test/statements/icd10/anno_bad_format +0 -5
  1060. data/test/statements/icd10/anno_has_upstreams +0 -7
  1061. data/test/statements/icd10/crit_1 +0 -4
  1062. data/test/statements/icd10pcs/anno_bad_format +0 -6
  1063. data/test/statements/icd10pcs/anno_has_upstreams +0 -7
  1064. data/test/statements/icd10pcs/crit_1 +0 -4
  1065. data/test/statements/icd9/anno_empty_label +0 -7
  1066. data/test/statements/icd9/anno_invalid_code +0 -4
  1067. data/test/statements/icd9/anno_valid_code +0 -4
  1068. data/test/statements/icd9/crit_1 +0 -4
  1069. data/test/statements/icd9_procedure/crit_1 +0 -4
  1070. data/test/statements/intersect/anno_412_inpatient +0 -11
  1071. data/test/statements/intersect/anno_has_arguments +0 -4
  1072. data/test/statements/intersect/anno_no_upstream +0 -3
  1073. data/test/statements/intersect/crit_412_inpatient +0 -11
  1074. data/test/statements/intersect/crit_412_male +0 -11
  1075. data/test/statements/intersect/crit_complex +0 -19
  1076. data/test/statements/invalid/anno_bad_op +0 -13
  1077. data/test/statements/invalid/scanno_1 +0 -7
  1078. data/test/statements/last/crit_icd9 +0 -7
  1079. data/test/statements/loinc/crit_basic +0 -4
  1080. data/test/statements/ndc/crit_basic +0 -4
  1081. data/test/statements/ndc/results_1 +0 -4
  1082. data/test/statements/numeric/anno_multiple_upstreams +0 -11
  1083. data/test/statements/numeric/num_values_1 +0 -4
  1084. data/test/statements/numeric/num_values_2 +0 -8
  1085. data/test/statements/numeric/num_values_3 +0 -8
  1086. data/test/statements/observation_period/anno_has_arguments +0 -8
  1087. data/test/statements/observation_period/anno_multiple_upstreams +0 -11
  1088. data/test/statements/observation_period/count_all_periods +0 -4
  1089. data/test/statements/observation_period/crit_female +0 -7
  1090. data/test/statements/observation_period/crit_icd9 +0 -7
  1091. data/test/statements/observation_period/crit_male +0 -7
  1092. data/test/statements/occurrence/anno_no_upstream +0 -3
  1093. data/test/statements/occurrence/count_412_410 +0 -17
  1094. data/test/statements/occurrence/crit_1 +0 -8
  1095. data/test/statements/occurrence/crit_2 +0 -11
  1096. data/test/statements/occurrence/crit_3 +0 -11
  1097. data/test/statements/one_in_two_out/anno_has_arguments +0 -8
  1098. data/test/statements/one_in_two_out/anno_multiple_upstreams +0 -15
  1099. data/test/statements/one_in_two_out/anno_no_upstream +0 -7
  1100. data/test/statements/one_in_two_out/count_1 +0 -10
  1101. data/test/statements/one_in_two_out/count_same_as_1 +0 -11
  1102. data/test/statements/one_in_two_out/crit_hcpcs +0 -10
  1103. data/test/statements/one_in_two_out/crit_icd9 +0 -11
  1104. data/test/statements/one_in_two_out/results_1 +0 -9
  1105. data/test/statements/one_in_two_out/results_2 +0 -9
  1106. data/test/statements/overlapped_by/crit_1 +0 -16
  1107. data/test/statements/overlapped_by/crit_2 +0 -16
  1108. data/test/statements/overlapped_by/crit_3 +0 -16
  1109. data/test/statements/overlapped_by/crit_4 +0 -16
  1110. data/test/statements/overlaps/crit_1 +0 -16
  1111. data/test/statements/overlaps/crit_2 +0 -16
  1112. data/test/statements/overlaps/crit_3 +0 -16
  1113. data/test/statements/overlaps/crit_4 +0 -16
  1114. data/test/statements/person/anno_has_arguments +0 -4
  1115. data/test/statements/person/anno_multiple_upstreams +0 -11
  1116. data/test/statements/person/count_2 +0 -3
  1117. data/test/statements/person/crit_1 +0 -7
  1118. data/test/statements/person_filter/count_1 +0 -20
  1119. data/test/statements/person_filter/crit_1 +0 -20
  1120. data/test/statements/person_filter/crit_2 +0 -13
  1121. data/test/statements/person_filter/crit_3 +0 -13
  1122. data/test/statements/person_filter/crit_4 +0 -13
  1123. data/test/statements/place_of_service_code/anno_has_upstreams +0 -8
  1124. data/test/statements/place_of_service_code/anno_no_arguments +0 -3
  1125. data/test/statements/place_of_service_code/crit_basic +0 -4
  1126. data/test/statements/place_of_service_filter/anno_1 +0 -8
  1127. data/test/statements/procedure_occurrence/anno_has_arguments +0 -8
  1128. data/test/statements/procedure_occurrence/anno_multiple_upstreams +0 -11
  1129. data/test/statements/procedure_occurrence/count_gender +0 -7
  1130. data/test/statements/procedure_occurrence/count_icd9 +0 -7
  1131. data/test/statements/procedure_occurrence/count_started_by +0 -19
  1132. data/test/statements/provenance/anno_1 +0 -8
  1133. data/test/statements/provenance/anno_bad_keyword +0 -10
  1134. data/test/statements/provenance/count_1 +0 -8
  1135. data/test/statements/provenance/count_2 +0 -8
  1136. data/test/statements/provider_filter/anno_1 +0 -10
  1137. data/test/statements/race/anno_1 +0 -8
  1138. data/test/statements/race/anno_2 +0 -3
  1139. data/test/statements/race/crit_1 +0 -4
  1140. data/test/statements/read/anno_1 +0 -4
  1141. data/test/statements/read/crit_1 +0 -8
  1142. data/test/statements/recall/anno_1 +0 -16
  1143. data/test/statements/recall/anno_2 +0 -18
  1144. data/test/statements/recall/anno_3 +0 -4
  1145. data/test/statements/recall/anno_4 +0 -3
  1146. data/test/statements/recall/anno_5 +0 -5
  1147. data/test/statements/recall/anno_6 +0 -107
  1148. data/test/statements/recall/crit_1 +0 -17
  1149. data/test/statements/recall/crit_2 +0 -14
  1150. data/test/statements/recall/crit_3 +0 -16
  1151. data/test/statements/recall/crit_cte_1 +0 -17
  1152. data/test/statements/recall/crit_cte_2 +0 -17
  1153. data/test/statements/recall/crit_nested_perm_0 +0 -28
  1154. data/test/statements/revenue_code/crit_1 +0 -4
  1155. data/test/statements/revenue_code/crit_basic +0 -4
  1156. data/test/statements/revenue_code/domains_1 +0 -4
  1157. data/test/statements/revenue_code/domains_drg100 +0 -4
  1158. data/test/statements/rxnorm/crit_1 +0 -4
  1159. data/test/statements/snomed/crit_1 +0 -4
  1160. data/test/statements/started_by/crit_1 +0 -16
  1161. data/test/statements/started_by/crit_2 +0 -16
  1162. data/test/statements/started_by/crit_3 +0 -16
  1163. data/test/statements/sum/anno_1 +0 -3
  1164. data/test/statements/sum/anno_2 +0 -8
  1165. data/test/statements/sum/num_1 +0 -11
  1166. data/test/statements/sum/num_2 +0 -15
  1167. data/test/statements/sum/num_3 +0 -7
  1168. data/test/statements/time_window/anno_1 +0 -7
  1169. data/test/statements/time_window/anno_2 +0 -11
  1170. data/test/statements/time_window/anno_3 +0 -11
  1171. data/test/statements/time_window/anno_4 +0 -12
  1172. data/test/statements/time_window/anno_5 +0 -15
  1173. data/test/statements/time_window/crit_1 +0 -11
  1174. data/test/statements/time_window/crit_2 +0 -11
  1175. data/test/statements/time_window/crit_3 +0 -11
  1176. data/test/statements/time_window/crit_4 +0 -11
  1177. data/test/statements/trim_date_end/crit_1 +0 -16
  1178. data/test/statements/trim_date_end/crit_2 +0 -16
  1179. data/test/statements/trim_date_end/crit_3 +0 -16
  1180. data/test/statements/trim_date_end/crit_at_least +0 -17
  1181. data/test/statements/trim_date_end/crit_occurrences_1 +0 -17
  1182. data/test/statements/trim_date_end/crit_occurrences_2 +0 -17
  1183. data/test/statements/trim_date_end/crit_within +0 -17
  1184. data/test/statements/trim_date_start/crit_1 +0 -16
  1185. data/test/statements/trim_date_start/crit_2 +0 -16
  1186. data/test/statements/trim_date_start/crit_3 +0 -16
  1187. data/test/statements/trim_date_start/crit_at_least +0 -17
  1188. data/test/statements/trim_date_start/crit_occurrences_1 +0 -17
  1189. data/test/statements/trim_date_start/crit_occurrences_2 +0 -17
  1190. data/test/statements/trim_date_start/crit_within +0 -17
  1191. data/test/statements/union/anno_1 +0 -11
  1192. data/test/statements/union/anno_2 +0 -18
  1193. data/test/statements/union/anno_3 +0 -3
  1194. data/test/statements/union/anno_4 +0 -4
  1195. data/test/statements/union/anno_5 +0 -7
  1196. data/test/statements/union/anno_6 +0 -10
  1197. data/test/statements/union/count_1 +0 -11
  1198. data/test/statements/union/count_2 +0 -11
  1199. data/test/statements/union/count_3 +0 -15
  1200. data/test/statements/union/count_4 +0 -18
  1201. data/test/statements/union/count_5 +0 -18
  1202. data/test/statements/union/scanno_1 +0 -3
  1203. data/test/statements/union/scanno_2 +0 -18
  1204. data/test/statements/visit_occurrence/anno_1 +0 -11
  1205. data/test/statements/visit_occurrence/anno_2 +0 -8
  1206. data/test/statements/visit_occurrence/crit_1 +0 -7
  1207. data/test/statements/visit_occurrence/crit_2 +0 -7
  1208. data/test/statements/visit_occurrence/crit_3 +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 41a911f8bcafa0d691e093e990fe37bfdd6a9b40
4
- data.tar.gz: c9d90541f263d84795b24e3ad38c0d55fd704474
2
+ SHA256:
3
+ metadata.gz: 1958ad620e733aede026fc74e0c21f06a2376031b514d6a7736ef287eda9afc5
4
+ data.tar.gz: 0ed440d679a23994a83237d54120eabac40bbcd9d9b7499e8cfff18c076aabd8
5
5
  SHA512:
6
- metadata.gz: 83afc484b1486e2c21e5c120b4fcd18b09ad085564f0d856033607bd8979291aa986cf93c403fe75684181898878180eeead220418d427238deebb3be05886d9
7
- data.tar.gz: aa5ef37c3a85638a4cf93e1a648dce558fb84c86145f1a1b982eaccba68d104c07a4ad2979bfe951e3d05f32eb1d363ed4f300d6e4182ce3d8caa6d50953f6e0
6
+ metadata.gz: f42b9ec69eefd01041c9eab5f3aa421aaf8fc63df0933df1e0ab79a9919f4e4da06f48338c96f6af51226fb567ce15f3355116a962dd757d111efd14bdf262da
7
+ data.tar.gz: c50c2a4934b10f457ea25fb317f7844ab98f5816f55ea09aad50f1cb9a24424b567f67abf4ec9585ac677435641db986947b2b78b33f388b4f46a1bdb6f9bcd8
data/CHANGELOG.md CHANGED
@@ -1,51 +1,222 @@
1
1
  # Changelog
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
5
+ ## [Unreleased]
6
+
7
+ ## [0.4.1] - 2026-10-28
8
+
9
+ ### Changed
10
+
11
+ - `Query#sql(:formatted)` formats SQL inside the Ruby process with the new runtime dependency
12
+ sequel-sqlformat (`~> 0.1`), a binding to the Rust `sqlformat` crate. It no longer starts
13
+ sql-formatter, pg_format or sqlformat once per statement. A large algorithm (78 statements)
14
+ now formats in about 0.13 s instead of about 8.3 s. Formatting changes only whitespace and
15
+ keyword case, for Postgres, DuckDB and Spark SQL. sequel-sqlformat ships precompiled gems
16
+ for Linux and macOS, so no Rust toolchain is needed.
17
+ - The development dependency sequel-duckdb is now `~> 0.4.2` (was `~> 0.4.1`). 0.4.2 fixes
18
+ `create_or_replace_view` and drops support for the duckdb gem 1.5.x, which conceptql
19
+ already did not use.
20
+
21
+ ### Removed
22
+
23
+ - `ConceptQL::SqlFormatters`, every adapter's `preferred_formatter`, and
24
+ `ConceptQL::Utils.timed_capture`. The external formatter programs are no longer used.
25
+ - The test Docker image no longer installs the `sqlformat` package.
26
+
27
+ ## [0.4.0] - 2026-10-26
28
+
29
+ ### Added
30
+
31
+ - `conceptql render_json STATEMENT_FILE [--counts] [--data-model=...]` prints statements as a
32
+ `conceptql-diagram/v1` render tree for the diagram renderer (`ConceptQL::Diagram`), plus
33
+ `ConceptQL::Diagram::JigsawTree`, a port of the diagram editor's ConceptqlAdapter
34
+ - `ConceptQL::Database#operators(data_model = own)`: each Database's own operator registry, with
35
+ vocabulary operators built from that Database's lexicon and the built-in operators merged over
36
+ them. Every operator lookup goes through it.
37
+ - `ConceptQL::Database.new(db, name_concepts_table: name)` and
38
+ `ConceptQL::Database#create_name_concepts_table`: the display-name joins (drug name and dose
39
+ units, lab units and result concept, admission source and discharge location) read a table of
40
+ only the concept rows that the data references, instead of the whole concept table. The caller
41
+ builds the table once, before its queries run, and drops it afterwards. Off by default.
42
+ - `ConceptQL::Database.new(db, share_utilization: true)` and `ConceptQL::Database#shared_tables`:
43
+ the statements of one Database share each hospitalization, SNF and hospice list (the
44
+ `Utilizable` operators) as a table named `<table_prefix>_util_<hash>`, in `scratch_database`
45
+ when that is set. While the table does not exist, `Query#sql_statements` lists it as an entry
46
+ before the entries that read it, so a caller that runs the entries in order (as CREATE TABLE AS,
47
+ then the query) creates it first. A caller that reads rows through conceptql gets the table
48
+ created at the first read. Building SQL creates no table. Two threads that generate SQL on one
49
+ Database at the same time can both list the same table: this is not handled. The key is the SQL
50
+ of the list, so each window gets its own table, and a list shares only when its lookup ids come
51
+ in one order: use the option with `cache_lookups: true`. The option needs a `table_prefix` in
52
+ `scope_opts`. conceptql never drops these tables: the caller drops `shared_tables`. Off by
53
+ default. On DuckDB, a t_shank prototype of this change cut one export with 40 hospitalization
54
+ criteria from 6.85 to 5.10 minutes. Spark and Postgres timing are not measured.
55
+ - `ConceptQL::Database.new(db, cache_lookups: true)`: each vocabulary lookup reaches the database
56
+ once per distinct argument list for the life of the Database. This includes the empty-vocabulary
57
+ check behind the unknown-code warnings, the Race operator's name lookup, the Provenance
58
+ operator's keyword check, and the checks that the data model's source tables and the concept
59
+ table exist (once per table and database). Off by default.
60
+ - Tag-based releases: pushing a `v*` tag runs `.github/workflows/release.yml`, which publishes the
61
+ gem to rubygems.org through RubyGems trusted publishing (no stored API key). It refuses unless the
62
+ tag equals `v` + `ConceptQL::VERSION`, the commit is on `main`, and the `Run Tests` workflow passed
63
+ on a push to `main` for that commit. Before publishing, it installs the built gem into an empty
64
+ `GEM_HOME` and checks that it loads and ships `config/` and `schemas/`. After publishing, it checks
65
+ that rubygems.org lists the version. See "Releasing" in `CLAUDE.md`.
66
+
67
+ ### Fixed
68
+
69
+ - `ConceptQL.metadata` marks every option that an operator requires as `required`, not only the
70
+ first. `right` on each two-stream operator, `end` on `date_range` and `roles` on
71
+ `provider_filter` were not marked. Marking a subclass's options no longer changes its parent
72
+ class's option hashes
73
+ - `trim_date_end` and `trim_date_start` accept `join_columns` from a JSON statement. The column
74
+ names arrived as strings and became string literals in the SQL, so the query failed
75
+ - `Query#code_list` on a statement with validation errors raises `Query::InvalidStatementError`
76
+ (a `Query::QueryError` that names the errors) instead of NoMethodError or a partial code list
77
+ - `require 'conceptql'` no longer connects to a database. It used to connect to whatever
78
+ Sequelizer was configured for, to register an operator per vocabulary, so it crashed with no
79
+ database configured and, on DuckDB, a second process could not load the library while another
80
+ held the file
81
+ - Bug with PlaceOfServiceFilter and other procedure_cost-based operators (#84)
82
+ - Spark CI downloads its test data from the repo variable `SPARK_TEST_DATA_URL` and checks it
83
+ against `.github/synpuf_test_data.tgz.sha256` before it extracts it. The hardcoded Dropbox link
84
+ it used was dead
85
+ - CLI: `conceptql metadata` raised ArgumentError when it wrote metadata.json, and
86
+ `CONCEPTQL_PARQUET_TEST_DIR` raised NoMethodError (`String#glob`) for every command that
87
+ connects to a database. It now makes the parquet files of each directory in its glob ready.
88
+ `conceptql scope_annotate` ignored the connection options, and `conceptql help` listed
89
+ `simple_visit` as `extract_metadata`
90
+ - A vocabulary statement with `*` no longer warns about the format of its other codes. The check
91
+ for `*` never ran, because `Vocabulary#select_all?` is private
92
+ - `occurrence` with a blank or whitespace-only `at_least` or `within` (as an editor can send for
93
+ an empty field) gives the same rows as without the option. It used to take the timed query,
94
+ which returns other rows
95
+ - `match` without `only_columns` compared every column with `=`, so two NULL values never matched
96
+ and a stream matched with itself kept nothing. It now compares the key columns (`person_id`,
97
+ `criterion_id`, `criterion_table`, `criterion_domain`, `start_date`, `uuid`, `window_id`) with
98
+ `=` and the other columns NULL-safe (`IS NOT DISTINCT FROM`, `<=>` on Spark). `match` also
99
+ ignored `join_columns`. It now compares only the person and the listed columns, as the other
100
+ two-stream operators do, and rejects `join_columns` next to `only_columns` or `except_columns`
101
+ - An option that lists columns (`only_columns`, `except_columns` and `join_columns` on `match`,
102
+ and `join_columns` on the temporal operators and `trim_date_start`/`trim_date_end`) also
103
+ accepts a comma-separated string, such as `"uuid, start_date"`. A blank string is an unset
104
+ option. Before, a string raised NoMethodError
105
+ - `match` with `invert_match` set to the string `"false"` (in any case), or to an empty string,
106
+ no longer inverts the match. Before, any value other than `false` and `nil` inverted it
107
+
108
+ ### Changed
109
+
110
+ - Set RUNTIME_FILTER_MODE only if asked
111
+ - `ConceptQL::Operators.operators` is removed. Built-in operators are in
112
+ `ConceptQL::Operators.static_operators`; vocabulary operators come from each Database
113
+ (`ConceptQL::Database#operators`). `ConceptQL::Database.lexicon` (class method) is removed;
114
+ use `Database#lexicon`
115
+ - The sequelizer dependency now admits 0.4.x (`>= 0.3.0, < 0.5`). The previous `< 0.4` bound
116
+ rejected the released sequelizer 0.4.0. Gemfile.lock now resolves sequelizer 0.4.0.
117
+ - Development dependencies are updated to their newest releases (2026-10-26), including the
118
+ duckdb gem 2.0.0.1, pg 1.7.0, rubocop 1.92.1, and the newest sequelizer, sequel-duckdb 0.4.1
119
+ and sequel-hexspace 2.1.0. The test suites pass on Postgres and DuckDB. `just test-duckdb`
120
+ pins the libduckdb library to 1.5.6 (override with `LIBDUCKDB_VERSION`). GitHub CI runs the
121
+ DuckDB suite against libduckdb 1.5.6 and 2.0.0
122
+ - `just release-check` fails when a dependency is behind its newest allowed release. The release
123
+ procedure runs it first
124
+ - Docker test runs use the ghcr `test_data.jumper` image pinned by digest, the same one as CI, and
125
+ run as the calling user, so they leave no root-owned files. The runner image drops Chrome's libraries
126
+ - On DuckDB, operator CTEs are now `AS MATERIALIZED`, as on Postgres
127
+ (`ConceptQL::Rdbms::DuckDB#supports_materialized?` is true). DuckDB accepts the keyword since
128
+ v0.8.0. `just test-duckdb` passes against libduckdb 1.5.6
129
+ - The provenance and utilization operators (`provenance`, `one_in_two_out`, `hospitalization`,
130
+ `hospice`, `snf`) are now GDM-only. On omopv4_plus they fail validation as an invalid operator
131
+ instead of raising NoMethodError, and they are not in its metadata
132
+ - Code format checks ("improperly formatted code") use the vocabulary_formats validator patterns.
133
+ CPT4, CPT4_HCPCS, HCPCS, ICD10, ICD10CM and ICD9Proc changed: CPT4 now accepts M0201, HCPCS
134
+ needs a leading letter, and the ICD patterns need a real dot. ATC, DRG, ICD03_Morphology,
135
+ ICD03_Topography, NDC, RxNorm and SNOMED are checked for the first time. ICD10PCS accepts only 7-character billable codes
136
+ with a real section character first (row ICD10PCS.BILLABLE), so Z561123 is now improperly
137
+ formatted
138
+ - A `cpt_or_hcpcs` code gets a warning when every vocabulary rejects it, for any reason. It is
139
+ "improperly formatted" only when every vocabulary says so, and otherwise "unknown"
140
+ - `first` and `last` reject the `at_least` and `within` options with the validation error
141
+ "unsupported option". With either option they returned every upstream row instead of one row
142
+ per person. The two options are no longer in the `first` and `last` metadata. A blank value
143
+ counts as not set. `occurrence` keeps both options
144
+
145
+ ### Removed
146
+
147
+ - Presto support (breaking). `ConceptQL::Rdbms::Presto` and `database_type: :presto` are gone, so
148
+ `ConceptQL::Rdbms.generate(:presto)` raises "Unknown database_type". Its `primary_concepts`
149
+ emitted `DISTINCT ON`, which Presto does not support. The Rakefile's Presto scaffolding
150
+ (`test_script` and `driftr_script` namespaces, `convert`, `prestofy`, the Presto `cdb`) is
151
+ removed too. The default rake task is now `test` instead of `test_omopv4_plus`
152
+ - The `conceptql selection_operators` command, which had raised NameError since 2016.
153
+ - The unused query optimizer (breaking for a caller of these methods). `Query#optimized`,
154
+ `Operator#optimized`, `Operator#unionable?`, `Operator#dup_values` and the
155
+ `ConceptQL::Vocabularies::Behaviors::Sourcish` module are gone. Nothing in conceptql called
156
+ `optimized`, so its union merging never ran, and the generated SQL does not change.
157
+ - The `pass_thru` operator name, which never worked. `PassThru` had no query method, so a
158
+ statement that used it failed to generate SQL. A `pass_thru` statement is now an invalid
159
+ operator. The `PassThru` class stays as the base class of union, count, sum, numeric, dedup,
160
+ episode, time_window and co_reported.
161
+ - `ConceptQL::Vocabularies::Entry#is_source?`, `Entry#is_standard?` and `Entry::STANDARD_VOCABS`
162
+ (breaking for a caller of these). Their only use was the `Sourcish` include removed with the
163
+ query optimizer. Neither t_shank nor jigsaw-diagram-editor calls them.
164
+ - The `only_columns`, `except_columns` and `query_columns` options of `dedup` (breaking). No
165
+ statement could use them: with any column left out, the query failed, and from JSON they did
166
+ nothing or broke the SQL. Like any option an operator does not read, they are now ignored, and
167
+ dedup groups by every column.
168
+
4
169
  ## [0.3.0] - 2016-11-08
170
+
5
171
  ### Added
172
+
6
173
  - New operators
7
- - PlaceOfServiceFilter
8
- - Provenance
9
- - ProviderFilter
10
- - CoReported
174
+ - PlaceOfServiceFilter
175
+ - Provenance
176
+ - ProviderFilter
177
+ - CoReported
11
178
  - Support for :impala_mem_limit option
12
179
  - Initial support for dynamic columns
13
180
  - Additional columns for observation domains and drug domains
14
181
  - Support for :within, :occurrences, :at_least
15
182
 
16
183
  ### Changed
184
+
17
185
  - Format of this [CHANGELOG](http://keepachangelog.com/en/0.3.0/)
18
186
  - Read searches Condition, Procedure, Drug, Observation
19
187
  - Rewrote OneInTwoOut to produce faster queries
20
188
  - Except operator uses different strategy under Impala
21
189
 
22
190
  ### Fixed
191
+
23
192
  - Fixed date casting and other issues for Impala compatibility.
24
193
  - Fixed ConditionType to accept concept_ids
25
194
 
26
195
  ## [0.2.0] - 2015-12-11
196
+
27
197
  ### Added
198
+
28
199
  - Optimized After/Before nodes when multi-person results are in the right stream.
29
200
  - Set end_date as coalesce(end_date, start_date) to make range if end_date missing.
30
201
  - Nodes
31
- - AnyOverlap
32
- - Contains
33
- - Filter
34
- - Ndc
35
- - ObservationPeriod
36
- - OneInTwoOut
37
- - OverlappedBy
38
- - Overlaps
39
- - TrimDateEnd
40
- - TrimDateStart
202
+ - AnyOverlap
203
+ - Contains
204
+ - Filter
205
+ - Ndc
206
+ - ObservationPeriod
207
+ - OneInTwoOut
208
+ - OverlappedBy
209
+ - Overlaps
210
+ - TrimDateEnd
211
+ - TrimDateStart
41
212
  - Nodes for CPRD
42
- - Medcode
43
- - MedcodeProcedure
44
- - ObservationByEnttype
45
- - Prodcode
213
+ - Medcode
214
+ - MedcodeProcedure
215
+ - ObservationByEnttype
216
+ - Prodcode
46
217
  - Nodes for SEER
47
- - FromSeerVisits
48
- - ToSeerVisits
218
+ - FromSeerVisits
219
+ - ToSeerVisits
49
220
  - Ability to limit results to a set of patients by setting Tree#person_ids
50
221
  - "units_source_value" and "source_value" columns in results
51
222
  - TimeWindow supports date literals
@@ -53,8 +224,9 @@ All notable changes to this project will be documented in this file.
53
224
  - Nodifier#to_metadata
54
225
 
55
226
  ### Changed
227
+
56
228
  - Except now allows :ignore_date option
57
- - Comparison is only done on criterion_id/type
229
+ - Comparison is only done on criterion_id/type
58
230
  - DateRange START/END use observation_period instead of visit_occurrence
59
231
  - Operator#columns value_as_numeric => value_as_number
60
232
  - Syntax is now more "lispy"
@@ -62,53 +234,69 @@ All notable changes to this project will be documented in this file.
62
234
  - Nodes now called Operators
63
235
 
64
236
  ### Removed
237
+
65
238
  - Let/Define operators
66
239
 
67
240
  ### Fixed
241
+
68
242
  - Many broken specs.
69
243
  - Union calls #from_self on incoming streams to avoid column issues
70
244
  - Concept node now works again
71
245
  - Define ensures tables are built
72
246
 
73
247
  ## [0.1.1] - 2014-09-18
248
+
74
249
  ### Fixed
250
+
75
251
  - Calling Query#sql no longer creates a bunch of temporary tables.
76
252
 
77
253
  ## [0.1.0] - 2014-09-04
254
+
78
255
  ### Added
256
+
79
257
  - Support for numeric, string, and concept_ids returned in results.
80
258
  - Many updates to the ConceptQL Specification document.
81
259
  - Added doc/implementation_notes.md to capture thoughts and bad ideas.
82
260
 
83
261
  ### Fixed
262
+
84
263
  - "Fake" graphs are now drawn correctly.
85
264
  - bin/conceptql doesn't bomb out drawing "fake" graphs
86
265
 
87
266
  ## [0.0.9] - 2014-09-03
267
+
88
268
  ### Added
269
+
89
270
  - Support for MSSQL (SQL Server).
90
271
 
91
272
  ### Fixed
273
+
92
274
  - Removed debug output from Node#namify
93
275
 
94
276
  ## [0.0.8] - 2014-08-28
277
+
95
278
  ### Added
279
+
96
280
  - Support for Oracle.
97
281
 
98
282
  ### Fixed
283
+
99
284
  - DateAdjuster/TimeWindow use Sequel's date_arithmetic extension to produce database agnostic date manipulation.
100
285
  - Breakage from Node#tree in GraphNodifier.
101
286
  - All tests are back to passing.
102
287
  - Changed from SHA1 to CRC32 hash since Oracle can't handle table names longer than 30 characters.
103
288
 
104
289
  ## [0.0.6] - 2014-08-23
290
+
105
291
  ### Added
292
+
106
293
  - Support for Oracle
107
294
  - Tree#defined to pass type information between Define and Recall.
108
295
  - Node#sql to produce SQL for each node.
109
296
  - Graph includes row count on each edge in the diagram.
110
297
 
111
298
  ### Fixed
299
+
112
300
  - Bug in CastingNode that generate SQL returning multiple columns in a subquery.
113
301
  - Made ruby-graphviz a dependency so calling programs don't bomb out.
114
302
  - Define now passes rows on through like any other node!
@@ -116,41 +304,54 @@ All notable changes to this project will be documented in this file.
116
304
  - All tests are back to passing.
117
305
 
118
306
  ## [0.0.5] - 2014-08-19
307
+
119
308
  ### Fixed
309
+
120
310
  - Bug in GraphNodifier not displaying types for `recall` nodes.
121
311
 
122
312
  ## [0.0.4] - 2014-08-19
313
+
123
314
  ### Added
315
+
124
316
  - Support for 5 instead of 13 column internal representation of results.
125
317
  - `define` node, used to create "variables" in ConceptQL.
126
318
  - `recall` node, used to pull results from "variables" in ConceptQL.
127
319
 
128
320
  ### Removed
321
+
129
322
  - Support for 13 column results.
130
323
  - Dependency on a set of views to run SQL queries.
131
324
 
132
325
  ### Fixed
326
+
133
327
  - Bug where `place_of_service_code` wasn't limited to vocabulary_id 14
134
328
 
135
329
  ## [0.0.3] - 2014-08-12
330
+
136
331
  ### Added
332
+
137
333
  - FakeGrapher class to make it easier to generate diagrams with experimental nodes
138
334
  - fake_graph command has returned to the `conceptql` program
139
335
  - GraphNodifier now supports:
140
- - condition_type as condition_occurrence
141
- - drg as procedure_occurrence
142
- - vsac as misc
336
+ - condition_type as condition_occurrence
337
+ - drg as procedure_occurrence
338
+ - vsac as misc
143
339
 
144
340
  ### Fixed
341
+
145
342
  - Tree now runs #deep_symbolize_keys on incoming statements
146
343
 
147
344
  ## [0.0.2] - 2014-07-11
345
+
148
346
  ### Removed
347
+
149
348
  - Several commands from `conceptql` program
150
- - fake_graph
151
- - show_db_graph
152
- - show_and_tell_db
349
+ - fake_graph
350
+ - show_db_graph
351
+ - show_and_tell_db
153
352
 
154
353
  ## [0.0.1] - 2014-07-11
354
+
155
355
  ### Added
356
+
156
357
  - This project.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2014-2026 Outcomes Insights, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -1,32 +1,32 @@
1
- # ConceptQL
1
+ # ConceptQL [![Run Tests](https://github.com/outcomesinsights/conceptql/actions/workflows/run_tests.yml/badge.svg)](https://github.com/outcomesinsights/conceptql/actions/workflows/run_tests.yml)
2
2
 
3
3
  ConceptQL (pronounced concept-Q-L) is a high-level language that allows researchers to unambiguously define their research algorithms.
4
4
 
5
- This gem interprets the ConceptQL language and translates it into SQL queries compatible with OMOP CDM-structured data. The ConceptQL "language" is a set of nested hashes and arrays representing search criteria and some set operations and temporal operations to glue those criteria together.
5
+ This gem interprets the ConceptQL language and translates it into SQL queries compatible with [Generalized Data Model (GDM)](https://github.com/outcomesinsights/generalized_data_model#contexts)-structured data. The ConceptQL "language" is a set of nested arrays and hashes representing search criteria with some set operations and temporal operations to glue those criteria together.
6
6
 
7
7
  ## Further Reading
8
8
 
9
- If you're interested in reading up on ConceptQL, a rough draft of the specifications document is [available in markdown format](https://github.com/outcomesinsights/conceptql_spec).
9
+ If you're interested in reading up on ConceptQL, a the specifications document is [available in markdown format](https://github.com/outcomesinsights/conceptql_spec).
10
10
 
11
11
  ## Motivation for ConceptQL
12
12
 
13
- Outcomes Insights intends to build a vast library of research algorithms and apply those algorithms to large databases of claims data. Early into building the library, we realized we had to overcome two major issues:
13
+ Outcomes Insights has built a vast library of research algorithms and applied those algorithms to large databases of claims data. Early into building the library, we realized we had to overcome two major issues:
14
14
 
15
15
  1. Methods sections of research papers commonly use natural language to specify the criteria used to build cohorts from a claims database.
16
- - Algorithms defined in natural language are often imprecise, open to multiple interpretations, and generally difficult to reproduce.
17
- - Researchers could benefit from a language that removes the ambiguity of natural language while increasing the reproducibility of their research algorithms.
18
- 1. Querying against claims databases is often difficult.
19
- - Hand-coding algorithms to extract cohorts from datasets is time-consuming, error-prone, and opaque.
20
- - Researchers could benefit from a language that allows algorithms to be defined at a high-level and then gets translated into the appropriate queries against a database.
16
+ - Algorithms defined in natural language are often imprecise, open to multiple interpretations, and generally difficult to reproduce.
17
+ - Researchers could benefit from a language that removes the ambiguity of natural language while increasing the reproducibility of their research algorithms.
18
+ 2. Querying against claims databases is often difficult.
19
+ - Hand-coding algorithms to extract cohorts from datasets is time-consuming, error-prone, and opaque.
20
+ - Researchers could benefit from a language that allows algorithms to be defined at a high-level and then gets translated into the appropriate queries against a database.
21
21
 
22
22
  We developed ConceptQL to address these two issues.
23
23
 
24
- We are writing a tool that can read research algorithms defined in ConceptQL. The tool can create a diagram for the algorithm which makes it easy to visualize and understand. The tool can also translate the algorithm into a SQL query which runs against data structured in [OMOP's Common Data Model (CDM)](http://omop.org/CDM). The purpose of the CDM is to standardize the format and content of observational data, so standardized applications, tools and methods can be applied to them.
24
+ We have written a tool that can read research algorithms defined in ConceptQL. The tool can create a diagram for the algorithm which makes it easy to visualize and understand. The tool can also translate the algorithm into a SQL query which runs against data structured in the [Generalized Data Model (GDM)](https://github.com/outcomesinsights/generalized_data_model). The purpose of the GDM is to standardize the format and content of observational data, so standardized applications, tools and methods can be applied to them.
25
25
 
26
26
  For instance, using ConceptQL we can take a statement that looks like this:
27
27
 
28
- ```YAML
29
- :icd9: '412'
28
+ ```JSON
29
+ [ "icd9", "412" ]
30
30
  ```
31
31
 
32
32
  And generate a diagram that looks like this:
@@ -37,101 +37,31 @@ And generate SQL that looks like this:
37
37
 
38
38
  ```SQL
39
39
  SELECT *
40
- FROM cdm_data.condition_occurrence AS co
41
- JOIN vocabulary.source_to_concept_map AS scm ON (c.condition_concept_id = scm.target_concept_id)
42
- WHERE scm.source_code IN ('412')
43
- AND scm.source_vocabulary_id = 2
44
- AND scm.source_code = co.condition_source_value
40
+ FROM gdm_data.clinical_codes AS cc
41
+ WHERE cc.clinical_code_concept_id IN (
42
+ SELECT id
43
+ FROM concepts
44
+ WHERE vocabulary_id = 'ICD9CM'
45
+ AND concept_code = '412'
46
+ )
45
47
  ```
46
48
 
47
- As stated above, one of the goals of ConceptQL is to make it easy to assemble fairly complex queries without having to roll up our sleeves and write raw SQL. To accommodate this complexity, ConceptQL itself has some complexities of its own. That said, we believe ConceptQL will help researchers define, hone, and share their research algorithms.
48
-
49
- ## Try Before You Buy
50
-
51
- If you'd like to interact with ConceptQL a bit before deciding to dive in, head over to the [ConceptQL Sandbox](http://sandbox.cohortjigsaw.com) for an online demonstration of the language and its features.
49
+ As stated above, one of the goals of ConceptQL is to make it easy to assemble fairly complex queries without having to roll up our sleeves and write raw SQL. We believe ConceptQL will help researchers define, hone, and share their research algorithms.
52
50
 
53
51
  ## Requirements
54
52
 
55
- ConceptQL is in an early-alpha state. For now it is limited to working with [OMOP CDM](http://omop.org/CDM)-structured data stored in the [PostgreSQL](http://www.postgresql.org/) database. It has been tested under [Ubuntu Linux](http://www.ubuntu.com/) and Mac OS X 10.8+. The interpreter is written in Ruby and theoretically should be platform independent, but your mileage may vary.
56
-
57
- Specifically, ConceptQL needs:
58
-
59
- - Ruby 2.0+
60
- - PostgresQL 9.3+
61
- - Ruby's [Bundler](http://bundler.io/) gem
62
- - A PostgreSQL database with
63
- - OMOP CDM-structured data stored in the public schema
64
- - The OMOP Vocabularies stored in a schema named 'vocabulary'
65
- - You may want to use [loadmop](http://github.com/outcomesinsights/loadmop) to quickly create the OMOP vocabulary schema
66
-
67
- ## Installation
68
-
69
- Add this line to your application's Gemfile:
70
-
71
- gem 'conceptql'
72
-
73
- And then execute:
74
-
75
- bundle
76
-
77
- Or install it yourself as:
78
-
79
- gem install conceptql
80
-
81
- ## Usage
82
-
83
- ConceptQL comes with a [Thor](http://whatisthor.com/)-based command-line program: `conceptql`
84
-
85
- `conceptql` allows you to translate a ConceptQL statement into a SQL statement or a graph depicting the ConceptQL statement.
86
-
87
- `conceptql` will print a basic help menu for each command if you run `conceptql`
88
-
89
- ## Writing Your Own ConceptQL
90
-
91
- Right now, the only way to create a new ConceptQL statement is to write it out by hand in either Ruby, JSON, or YAML.
92
-
93
- If you're feeling bold, feel free to try your hand at authoring a ConceptQL statement.
94
-
95
- ## Testing
96
-
97
- ### Setup
98
-
99
- In order to run the tests for ConceptQL, you first have to create a database and load the OMOP vocabularies into it. You can use [loadmop](https://github.com/outcomesinsights/loadmop/tree/develop) do to so.
100
-
101
- Follow the instructions in [loadmop](https://github.com/outcomesinsights/loadmop/#preparation) to setup the vocabulary files correctly.
102
-
103
- After loading the vocabulary data file into the database,
104
- create an .env file in the root of the conceptql directory,
105
- similar or identical to the one used for loadmop. Then
106
- run `rake test_db_setup`. This will load the ConceptQL test
107
- data into the database. This only needs to be done once, not
108
- every time you run the tests.
109
-
110
- ### Running
111
-
112
- If any of the CSV files in `test/data` has been updated since you
113
- last updated the database, you should run `rake test_db_teardown test_db_setup`
114
- to reset the data in the database. Updates to the CSV files in
115
- `test/data` should be infrequent.
116
-
117
- After the test database has been setup, you can run the tests
118
- using `rake`, as the default task is set to run the tests.
119
-
120
- ## Contributing
53
+ ConceptQL works best with data stored in the [GDM](https://github.com/outcomesinsights/generalized_data_model#contexts) using [PostgreSQL](http://www.postgresql.org/) as the RDBMS engine. It has been tested under [Ubuntu Linux](http://www.ubuntu.com/). The interpreter is written in Ruby and theoretically should be platform independent, but your mileage may vary.
121
54
 
122
- 1. Fork it ( [http://github.com/outcomesinsights/conceptql/fork](http://github.com/outcomesinsights/conceptql/fork) )
123
- 1. Create your feature branch (`git checkout -b my-new-feature`)
124
- 1. Commit your changes (`git commit -am 'Add some feature'`)
125
- 1. Push to the branch (`git push origin my-new-feature`)
126
- 1. Create new Pull Request
55
+ Specifically, ConceptQL is tested against:
127
56
 
128
- Or, use the [conceptql-dev-box](https://github.com/outcomesinsights/conceptql-dev-box) to get yourself setup and hack on ConceptQL that way.
57
+ - Ruby 3.2
58
+ - PostgresQL 14
129
59
 
130
60
  ## Thanks
131
61
 
132
62
  - [Outcomes Insights, Inc.](http://outins.com)
133
- - Many thanks for allowing me to release a portion of my work as Open Source Software!
134
- - [OMOP](http://omop.org)/[OHDSI](http://www.ohdsi.org/)
135
- - Thank you for providing a great [Common Data Model](http://omop.org/CDM) and fantastic set of standardized [Vocabularies](http://omop.org/Vocabularies) upon which ConceptQL rests.
63
+ - Many thanks for allowing me to release a portion of my work as Open Source Software!
64
+ - [OHDSI](http://www.ohdsi.org/)
65
+ - Thank you for providing the original inspiration for ConceptQL.
136
66
  - [Jeremy Evans](http://code.jeremyevans.net/)
137
- - Thank you for the great contributions, ideas, and commits.
67
+ - Thank you for the great contributions, ideas, and commits.
data/bin/conceptql CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require_relative '../lib/conceptql/cli.rb'
4
+ require_relative '../lib/conceptql/cli'
4
5
 
5
6
  ConceptQL::CLI.start(ARGV)
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/conceptql/utils_cli'
5
+
6
+ ConceptQL::UtilsCLI.start(ARGV)
@@ -0,0 +1,4 @@
1
+ operator,vocabulary_id,domain,optional
2
+ CPT or HCPCS,CPT4,procedure_occurrence,
3
+ CPT or HCPCS,HCPCS,procedure_occurrence,
4
+ CPT or HCPCS,CPT4_HCPCS,procedure_occurrence,yes