conceptql 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/CHANGELOG.md +32 -104
- data/Gemfile +2 -0
- data/README.md +43 -21
- data/Rakefile +34 -0
- data/conceptql.gemspec +3 -4
- data/config/provenance.yml +454 -0
- data/doc/converter.rb +33 -0
- data/doc/metadata.md +89 -0
- data/doc/spec.md +1775 -861
- data/doc/spec.md.cql +1930 -0
- data/doc/spec/02f44ad35d266ddd0a4df1691d26bf4a297b30604fc3f44b0391d6d852d23a9f.png +0 -0
- data/doc/spec/0360fc0c2b7a88fd82ffc4d13387b76766649d5d42aa8f9349bbf60a81ac6119.png +0 -0
- data/doc/spec/04491942fcbd741982514f9eb12aeecf3d54b5b69a2b50c8331f7700169d5521.png +0 -0
- data/doc/spec/05f9b844571ffceeed2def3025fb60c68552817b8b73d3c8a76939dbc08b7c65.png +0 -0
- data/doc/spec/067241a3579767a802d4f8e20fd35b60adbe377c9a6512ef135f164a5accfb27.png +0 -0
- data/doc/spec/1102fa717b1c2df67af5220bf3ae219afafd79be7bba0c117e301983385ada52.png +0 -0
- data/doc/spec/11f57941951bad5a75f9a16f38a31a3c6bf3046a475aac6e398e780892fab4ad.png +0 -0
- data/doc/spec/15268bc45993d3f57ccf915877f91e48bdee684f24faa614249915833cac4af9.png +0 -0
- data/doc/spec/253845fe6162621af407ebd110296ff4f6d8a3f23ec75dfb4ea8cda30be71262.png +0 -0
- data/doc/spec/26fd52b5ac55438dd9f81b4a3f3913f1058c9f225c8a5e129007c1e9413d5881.png +0 -0
- data/doc/spec/2b57886a9cba66bb696e4b399c51ad0dc95cd64b952709fafc819a79d573f09e.png +0 -0
- data/doc/spec/307a8b5a7edd6e42f8be16523a4c939faf1a0533385c861d7004b6af8addd7d1.png +0 -0
- data/doc/spec/328467a6a419c7c05e299b8097e5e000686068ded8dc6d5f2e2de6f51976c315.png +0 -0
- data/doc/spec/39d6a8eb71cae51b1d6937c97134e51f04fd47c54535ff0915fe6a8b4f197fb2.png +0 -0
- data/doc/spec/3f46dee4d775d1a29d52b68af6552f8ea3abd8303094e749714fc77bd7958155.png +0 -0
- data/doc/spec/44ec6743d5d77d15b8a487c2058bf3e455d34adc91c46ea05767f6e0e471a75e.png +0 -0
- data/doc/spec/462153be527b28dc2cb5259c0aec62e1f529e8b60dc6e9c23fd1e06e8be933c9.png +0 -0
- data/doc/spec/4a3b47ed1c54f96ebdae693d41c36c51884c4546ef799a4108085708fb7b964e.png +0 -0
- data/doc/spec/514f263e976d07c0d9e0a86c79bcbdcddc7d444d7b72135294ad78758effd28f.png +0 -0
- data/doc/spec/58113a57a37431a402d2547369eba3a481bf1dbbfd82dc384406a5c91f6df01f.png +0 -0
- data/doc/spec/5d331d74c460d75814b2d3138a9b7d90b5ddb2dcd85e1f5f260d183745fc3a1e.png +0 -0
- data/doc/spec/5d6ff62038b75d6f240d65f35d1520a131c221f47d3801554c8c2be5d528ebb0.png +0 -0
- data/doc/spec/62323426e381ec21c967971a67e1f4a6d89dae92154bd937284e00b67f67fdd3.png +0 -0
- data/doc/spec/6705af65d728c0d5c50d6c4d46253017a91eb459dbb1f40f92449f05d5562f4a.png +0 -0
- data/doc/spec/68fac940a32c7e40caacf8e560c61da552d57633d015ba98f2e98ec040a00c5b.png +0 -0
- data/doc/spec/6a34c0ef589c9c976fe41f3e67e799e198499f5b9c3ebfd240fb91f73e893573.png +0 -0
- data/doc/spec/6b48534236697d1ccfa1f5403764782f9d228f9eb706789cfa80203882b7b13a.png +0 -0
- data/doc/spec/7aa76b4d29874719466c2cbafc9936e9f12e504bf31e1a09d26ca3fffa8ba1a6.png +0 -0
- data/doc/spec/7b9db2986ab9ada45cfb9451ef87ff1a2d99c908083334b7ccdceb8a92387fa9.png +0 -0
- data/doc/spec/8101d9b89d9ba8070d585432707b43a8acdb4c2a3e9d37c3f7114b5e3ea9e800.png +0 -0
- data/doc/spec/886bf85249a704668a55c5161bceaac10be4a41a94b91606f49851dfa017526c.png +0 -0
- data/doc/spec/8ed478d8c81a58a202d0c51348fca246df206fc24a0567b163d4e0bdab56ca46.png +0 -0
- data/doc/spec/9139440329dcb815df89bc70182c3827868402a74ff64d0253706dcaff723dca.png +0 -0
- data/doc/spec/99392f56dfb0e5be3f45a12a7f1ba846d094e430f526dfeaa30b606837cd34c0.png +0 -0
- data/doc/spec/a4450e8c0fe0e2fde92fe9bd61952f907b1976c1aa3ba963b809bed079d42b09.png +0 -0
- data/doc/spec/a4bc7382a1154ea9856544fd48418f3dd9ce474ca94b8859fc323749c6cc1f55.png +0 -0
- data/doc/spec/a79274742cf6fac6f6c9f4a0eb651aeb452f9c43b537c8e6ccaefecd05b7105c.png +0 -0
- data/doc/spec/a9b4528726adec2a90f3f00139d8d0492f13c51f03c2f9ed6a5134b1b26b44a9.png +0 -0
- data/doc/spec/af5ae3787e80bf0771f18f1a04fe4c5d9291e1e0f963ac408a7bc198d2f1ee28.png +0 -0
- data/doc/spec/ba572c4f4dbade65be55f141df16cf7b3e7d09e0aec4e4e5debc4f2075277371.png +0 -0
- data/doc/spec/ba90ef705f7be91c53c5eb4a81a439fa0f7c48532214bd3db3cc5c069160543e.png +0 -0
- data/doc/spec/c1d0402862221d85aceedc7d76b3f82149b612cbd972f14d0ca9011e1e2c455c.png +0 -0
- data/doc/spec/c2157d8a6b73abe4f22ba5042159f32502c74bf6d762be28d2df6831586822c7.png +0 -0
- data/doc/spec/c5329a7f4937096a57b2e01efb9d542f84a4e2329a1e9381d08c630583ccad37.png +0 -0
- data/doc/spec/c82077b9455d0f9abc2c45ee1a298e38b99c9ce9cd685f65d87b376d7718d7ad.png +0 -0
- data/doc/spec/c93dd18894a245a5647f99e1867d3779e4cd34c9c8f8860600ff0c837a5ffa53.png +0 -0
- data/doc/spec/cc960a268d51ccf2ebde657d36848f780213834844900018bce3d111843f7b0f.png +0 -0
- data/doc/spec/d39452b58257c95a7cba07afed4877417b0c227f3690e2bff22c9eca89eac845.png +0 -0
- data/doc/spec/d64993258ffbef9406d9ab9136de7af530626b3a69e9eeb75835e11f11dabf62.png +0 -0
- data/doc/spec/da450cdd0c94a1301bd98560339a45caa8041e09974352a56ecfb144e9a5e4d4.png +0 -0
- data/doc/spec/dbc66b3ae6bd7123d77dd04b64f8a24498d048725a55c5340b15f5ae0a1ff307.png +0 -0
- data/doc/spec/de589af36fa854e006a1563c93e644e2210f2a5616babb779f7f38aadb6c1ed7.png +0 -0
- data/doc/spec/defbd0b853d895802663f507761ad297d82e167f516c6082686a2a19b76012c5.png +0 -0
- data/doc/spec/e1cb0863b21e14256d61a54200316791f6547c78ba2f0156c110f4500f9bbd49.png +0 -0
- data/doc/spec/e8630103287f7c9d28eff40b3b1826e24846e776b877f7b8554257acbe621e1c.png +0 -0
- data/doc/spec/e9b384fa7dec5f1a06479c4b289e06b1e60e4f23f7630aff6d03c52595f500f8.png +0 -0
- data/doc/spec/ea935ac31f3b57ff373646780a1fba34a38c9e086dc771eb7fc16c65a7e20cfc.png +0 -0
- data/doc/spec/eb8f5511f7d88bd0f8ba73420fc10f7c78405db7f4373d778a827058707f888e.png +0 -0
- data/doc/spec/ebacbd092e3d1a3c7b745a381e51e8ff9d63a21db23a16940193e18e57bc866f.png +0 -0
- data/doc/spec/ed039f82867241393b1a6a7153d3690461103934c72c1f3eaa3d99a12bb40885.png +0 -0
- data/doc/spec/ee283d6a4b69cf10da2df703be3a16830be9cd8cd4f68c5f7afdf558ea28fa76.png +0 -0
- data/doc/spec/f0c734b099841a754ae0366afb00e992ad4814479b65e4a7de23c6e3dd85c09a.png +0 -0
- data/doc/spec/f6b4fc31703cfb6327bbbd4614af8bb72da6d39fa3d53ada63a70157f2fad80e.png +0 -0
- data/doc/spec/f766f2e3aa13420e3ba0f823ac7956b311ed7c6c20be26b72324fadd87f36712.png +0 -0
- data/doc/spec/ff7d5b5573d09bd7c4cdd3aeda124d18bf82ec46673a62881b399a75d69f3f53.png +0 -0
- data/lib/conceptql.rb +21 -1
- data/lib/conceptql/annotate_grapher.rb +127 -0
- data/lib/conceptql/behaviors/drugish.rb +12 -0
- data/lib/conceptql/behaviors/labish.rb +13 -0
- data/lib/conceptql/behaviors/metadatable.rb +156 -71
- data/lib/conceptql/behaviors/provenanceable.rb +30 -0
- data/lib/conceptql/cli.rb +81 -37
- data/lib/conceptql/database.rb +42 -0
- data/lib/conceptql/date_adjuster.rb +22 -4
- data/lib/conceptql/fake_annotater.rb +129 -0
- data/lib/conceptql/knitter.rb +221 -0
- data/lib/conceptql/nodifier.rb +34 -23
- data/lib/conceptql/operators/after.rb +20 -3
- data/lib/conceptql/operators/any_overlap.rb +3 -1
- data/lib/conceptql/operators/before.rb +19 -3
- data/lib/conceptql/operators/binary_operator_operator.rb +24 -20
- data/lib/conceptql/operators/casting_operator.rb +39 -31
- data/lib/conceptql/operators/co_reported.rb +42 -0
- data/lib/conceptql/operators/complement.rb +21 -16
- data/lib/conceptql/operators/concurrent_within.rb +57 -0
- data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator.rb +34 -0
- data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator_union.rb +28 -0
- data/lib/conceptql/operators/condition_type.rb +12 -4
- data/lib/conceptql/operators/contains.rb +6 -2
- data/lib/conceptql/operators/count.rb +10 -2
- data/lib/conceptql/operators/cpt.rb +5 -2
- data/lib/conceptql/operators/cpt_or_hcpcs.rb +27 -0
- data/lib/conceptql/operators/date_range.rb +20 -8
- data/lib/conceptql/operators/death.rb +4 -2
- data/lib/conceptql/operators/drg.rb +42 -0
- data/lib/conceptql/operators/drug_type_concept.rb +11 -2
- data/lib/conceptql/operators/during.rb +4 -2
- data/lib/conceptql/operators/equal.rb +4 -1
- data/lib/conceptql/operators/except.rb +16 -4
- data/lib/conceptql/operators/filter.rb +6 -3
- data/lib/conceptql/operators/first.rb +3 -1
- data/lib/conceptql/operators/from.rb +32 -5
- data/lib/conceptql/operators/from_seer_visits.rb +11 -5
- data/lib/conceptql/operators/gender.rb +9 -2
- data/lib/conceptql/operators/hcpcs.rb +5 -2
- data/lib/conceptql/operators/icd10.rb +6 -15
- data/lib/conceptql/operators/icd10_pcs.rb +28 -0
- data/lib/conceptql/operators/icd9.rb +6 -15
- data/lib/conceptql/operators/icd9_procedure.rb +5 -2
- data/lib/conceptql/operators/intersect.rb +15 -10
- data/lib/conceptql/operators/invalid.rb +36 -0
- data/lib/conceptql/operators/last.rb +3 -1
- data/lib/conceptql/operators/loinc.rb +5 -2
- data/lib/conceptql/operators/medcode.rb +5 -16
- data/lib/conceptql/operators/medcode_procedure.rb +3 -2
- data/lib/conceptql/operators/ndc.rb +5 -2
- data/lib/conceptql/operators/numeric.rb +30 -11
- data/lib/conceptql/operators/observation_by_enttype.rb +5 -2
- data/lib/conceptql/operators/observation_period.rb +6 -4
- data/lib/conceptql/operators/occurrence.rb +47 -11
- data/lib/conceptql/operators/one_in_two_out.rb +96 -33
- data/lib/conceptql/operators/operator.rb +628 -95
- data/lib/conceptql/operators/overlapped_by.rb +8 -5
- data/lib/conceptql/operators/overlaps.rb +7 -5
- data/lib/conceptql/operators/pass_thru.rb +12 -2
- data/lib/conceptql/operators/person.rb +7 -5
- data/lib/conceptql/operators/person_filter.rb +5 -1
- data/lib/conceptql/operators/place_of_service_code.rb +12 -5
- data/lib/conceptql/operators/place_of_service_filter.rb +47 -0
- data/lib/conceptql/operators/procedure_occurrence.rb +4 -2
- data/lib/conceptql/operators/prodcode.rb +5 -2
- data/lib/conceptql/operators/provenance.rb +66 -0
- data/lib/conceptql/operators/provider_filter.rb +36 -0
- data/lib/conceptql/operators/race.rb +11 -4
- data/lib/conceptql/operators/read.rb +149 -0
- data/lib/conceptql/operators/recall.rb +42 -7
- data/lib/conceptql/operators/revenue_code.rb +40 -0
- data/lib/conceptql/operators/rxnorm.rb +5 -1
- data/lib/conceptql/operators/snomed.rb +3 -2
- data/lib/conceptql/operators/source_vocabulary_operator.rb +44 -14
- data/lib/conceptql/operators/standard_vocabulary_operator.rb +36 -15
- data/lib/conceptql/operators/started_by.rb +2 -1
- data/lib/conceptql/operators/sum.rb +7 -1
- data/lib/conceptql/operators/temporal_operator.rb +75 -9
- data/lib/conceptql/operators/time_window.rb +13 -23
- data/lib/conceptql/operators/to_seer_visits.rb +6 -1
- data/lib/conceptql/operators/trim_date_end.rb +20 -12
- data/lib/conceptql/operators/trim_date_start.rb +22 -12
- data/lib/conceptql/operators/union.rb +39 -2
- data/lib/conceptql/operators/visit_occurrence.rb +5 -3
- data/lib/conceptql/operators/vocabulary_operator.rb +45 -0
- data/lib/conceptql/query.rb +68 -22
- data/lib/conceptql/query_modifiers/drug_query_modifier.rb +45 -0
- data/lib/conceptql/query_modifiers/pos_query_modifier.rb +31 -0
- data/lib/conceptql/query_modifiers/query_modifier.rb +16 -0
- data/lib/conceptql/scope.rb +169 -31
- data/lib/conceptql/sql_formatter.rb +22 -0
- data/lib/conceptql/version.rb +1 -1
- data/test/all.rb +3 -0
- data/test/all_operations_test.rb +45 -0
- data/test/code_list_test.rb +23 -0
- data/test/data/omopv4/care_site.csv +0 -0
- data/test/data/omopv4/cohort.csv +0 -0
- data/test/data/omopv4/condition_era.csv +0 -0
- data/test/data/omopv4/condition_occurrence.csv +34044 -0
- data/test/data/omopv4/death.csv +1 -0
- data/test/data/omopv4/drug_cost.csv +0 -0
- data/test/data/omopv4/drug_era.csv +0 -0
- data/test/data/omopv4/drug_exposure.csv +2 -0
- data/test/data/omopv4/location.csv +0 -0
- data/test/data/omopv4/observation.csv +2 -0
- data/test/data/omopv4/observation_period.csv +1 -0
- data/test/data/omopv4/organization.csv +0 -0
- data/test/data/omopv4/payer_plan_period.csv +0 -0
- data/test/data/omopv4/person.csv +250 -0
- data/test/data/omopv4/procedure_cost.csv +0 -0
- data/test/data/omopv4/procedure_occurrence.csv +35099 -0
- data/test/data/omopv4/provider.csv +0 -0
- data/test/data/omopv4/visit_occurrence.csv +14931 -0
- data/test/data/omopv4_plus/care_site.csv +0 -0
- data/test/data/omopv4_plus/cohort.csv +0 -0
- data/test/data/omopv4_plus/concept.csv +352 -0
- data/test/data/omopv4_plus/condition_era.csv +0 -0
- data/test/data/omopv4_plus/condition_occurrence.csv +46673 -0
- data/test/data/omopv4_plus/death.csv +9 -0
- data/test/data/omopv4_plus/drug_cost.csv +13921 -0
- data/test/data/omopv4_plus/drug_era.csv +0 -0
- data/test/data/omopv4_plus/drug_exposure.csv +13921 -0
- data/test/data/omopv4_plus/headers/care_site.csv +1 -0
- data/test/data/omopv4_plus/headers/cohort.csv +1 -0
- data/test/data/omopv4_plus/headers/concept.csv +1 -0
- data/test/data/omopv4_plus/headers/condition_era.csv +1 -0
- data/test/data/omopv4_plus/headers/condition_occurrence.csv +1 -0
- data/test/data/omopv4_plus/headers/death.csv +1 -0
- data/test/data/omopv4_plus/headers/drug_cost.csv +1 -0
- data/test/data/omopv4_plus/headers/drug_era.csv +1 -0
- data/test/data/omopv4_plus/headers/drug_exposure.csv +1 -0
- data/test/data/omopv4_plus/headers/location.csv +1 -0
- data/test/data/omopv4_plus/headers/observation.csv +1 -0
- data/test/data/omopv4_plus/headers/observation_period.csv +1 -0
- data/test/data/omopv4_plus/headers/organization.csv +1 -0
- data/test/data/omopv4_plus/headers/payer_plan_period.csv +1 -0
- data/test/data/omopv4_plus/headers/person.csv +1 -0
- data/test/data/omopv4_plus/headers/procedure_cost.csv +1 -0
- data/test/data/omopv4_plus/headers/procedure_occurrence.csv +1 -0
- data/test/data/omopv4_plus/headers/provider.csv +1 -0
- data/test/data/omopv4_plus/headers/source_to_concept_map.csv +1 -0
- data/test/data/omopv4_plus/headers/visit_occurrence.csv +1 -0
- data/test/data/omopv4_plus/headers/vocabulary.csv +1 -0
- data/test/data/omopv4_plus/location.csv +0 -0
- data/test/data/omopv4_plus/observation.csv +0 -0
- data/test/data/omopv4_plus/observation_period.csv +147 -0
- data/test/data/omopv4_plus/organization.csv +736 -0
- data/test/data/omopv4_plus/payer_plan_period.csv +808 -0
- data/test/data/omopv4_plus/person.csv +250 -0
- data/test/data/omopv4_plus/procedure_cost.csv +20123 -0
- data/test/data/omopv4_plus/procedure_occurrence.csv +27273 -0
- data/test/data/omopv4_plus/provider.csv +10193 -0
- data/test/data/omopv4_plus/source_to_concept_map.csv +285 -0
- data/test/data/omopv4_plus/visit_occurrence.csv +45125 -0
- data/test/data/omopv4_plus/vocabulary.csv +60 -0
- data/test/db.rb +15 -0
- data/test/db_setup.rb +408 -0
- data/test/db_teardown.rb +33 -0
- data/test/fake_annotater_test.rb +31 -0
- data/test/helper.rb +129 -0
- data/test/knitter/conceptql.md.cql +39 -0
- data/test/knitter/conceptql.md.expect +43 -0
- data/test/knitter/empty.md.cql +0 -0
- data/test/knitter/except.md.cql +13 -0
- data/test/knitter/except.md.expect +14 -0
- data/test/knitter/fake.md.cql +10 -0
- data/test/knitter/fake.md.expect +13 -0
- data/test/knitter/many.md.cql +7 -0
- data/test/knitter/many.md.expect +14 -0
- data/test/knitter/no_conceptql.md.cql +36 -0
- data/test/knitter/title.md.cql +12 -0
- data/test/knitter/title.md.expect +15 -0
- data/test/knitter/union.md.cql +11 -0
- data/test/knitter/union.md.expect +14 -0
- data/test/knitter_test.rb +69 -0
- data/test/query_test.rb +36 -0
- data/test/results/omopv4/after/anno_1 +25 -0
- data/test/results/omopv4/after/anno_2 +48 -0
- data/test/results/omopv4/after/anno_3 +34 -0
- data/test/results/omopv4/after/anno_4 +60 -0
- data/test/results/omopv4/after/anno_5 +68 -0
- data/test/results/omopv4/after/anno_6 +60 -0
- data/test/results/omopv4/after/crit_at_least +7 -0
- data/test/results/omopv4/after/crit_basic +32 -0
- data/test/results/omopv4/after/crit_occurrences +12 -0
- data/test/results/omopv4/after/crit_within +6 -0
- data/test/results/omopv4/any_overlap/crit_basic1 +15 -0
- data/test/results/omopv4/any_overlap/crit_basic2 +15 -0
- data/test/results/omopv4/any_overlap/crit_occurrences1 +2 -0
- data/test/results/omopv4/any_overlap/crit_occurrences2 +15 -0
- data/test/results/omopv4/any_overlap/crit_within +8 -0
- data/test/results/omopv4/before/crit_at_least +6 -0
- data/test/results/omopv4/before/crit_basic1 +48 -0
- data/test/results/omopv4/before/crit_basic2 +7 -0
- data/test/results/omopv4/before/crit_occurrences +13 -0
- data/test/results/omopv4/before/crit_within +18 -0
- data/test/results/omopv4/co_reported/anno_1 +43 -0
- data/test/results/omopv4/co_reported/anno_2 +66 -0
- data/test/results/omopv4/complement/anno_duplicate_params +52 -0
- data/test/results/omopv4/complement/anno_invalid_params +37 -0
- data/test/results/omopv4/complement/anno_no_params +18 -0
- data/test/results/omopv4/complement/count_3way_intersect +4 -0
- data/test/results/omopv4/complement/count_3way_union +4 -0
- data/test/results/omopv4/complement/count_intersect +3 -0
- data/test/results/omopv4/complement/count_union +3 -0
- data/test/results/omopv4/complement/count_union_and_intersect +4 -0
- data/test/results/omopv4/complement/crit_3way_intersect +1 -0
- data/test/results/omopv4/complement/crit_3way_union +1 -0
- data/test/results/omopv4/complement/crit_basic1 +33998 -0
- data/test/results/omopv4/complement/crit_icd9_selector +54 -0
- data/test/results/omopv4/complement/crit_intersect +1 -0
- data/test/results/omopv4/complement/crit_union +1 -0
- data/test/results/omopv4/complement/crit_union_and_intersect +1 -0
- data/test/results/omopv4/complex/anno_1 +85 -0
- data/test/results/omopv4/complex/crit_1 +2 -0
- data/test/results/omopv4/complex/crit_2 +2 -0
- data/test/results/omopv4/complex/crit_3 +2 -0
- data/test/results/omopv4/complex/crit_4 +5 -0
- data/test/results/omopv4/complex/crit_5 +6 -0
- data/test/results/omopv4/complex/crit_6 +28 -0
- data/test/results/omopv4/complex/crit_7 +46 -0
- data/test/results/omopv4/complex/crit_out_of_order_ctes +7 -0
- data/test/results/omopv4/complex/scanno_1 +3 -0
- data/test/results/omopv4/concurrent_within/crit_icd9 +54 -0
- data/test/results/omopv4/concurrent_within/crit_icd9_and_place_of_service +23 -0
- data/test/results/omopv4/concurrent_within/crit_negative_start +5 -0
- data/test/results/omopv4/condition_type/anno_icd9 +39 -0
- data/test/results/omopv4/condition_type/count_condition_era +2 -0
- data/test/results/omopv4/condition_type/count_condition_era_30_day_window +2 -0
- data/test/results/omopv4/condition_type/count_ehr_problem_list +2 -0
- data/test/results/omopv4/condition_type/count_era_0 +2 -0
- data/test/results/omopv4/condition_type/count_inpatient +3 -0
- data/test/results/omopv4/condition_type/count_inpatient_detail +2 -0
- data/test/results/omopv4/condition_type/count_inpatient_header +3 -0
- data/test/results/omopv4/condition_type/count_inpatient_header_2 +3 -0
- data/test/results/omopv4/condition_type/count_inpatient_header_3 +3 -0
- data/test/results/omopv4/condition_type/count_inpatient_header_4 +3 -0
- data/test/results/omopv4/condition_type/count_inpatient_header_5 +3 -0
- data/test/results/omopv4/condition_type/count_inpatient_outpatient_detail +3 -0
- data/test/results/omopv4/condition_type/count_inpatient_primary +2 -0
- data/test/results/omopv4/condition_type/count_inpatient_primary_or_first +3 -0
- data/test/results/omopv4/condition_type/count_outpatient +3 -0
- data/test/results/omopv4/condition_type/count_outpatient_detail +3 -0
- data/test/results/omopv4/condition_type/count_outpatient_header +2 -0
- data/test/results/omopv4/condition_type/count_outpatient_primary +3 -0
- data/test/results/omopv4/condition_type/count_primary +3 -0
- data/test/results/omopv4/condition_type/crit_condition_era +1 -0
- data/test/results/omopv4/condition_type/crit_condition_era_30_day_window +1 -0
- data/test/results/omopv4/condition_type/crit_ehr_problem_list +1 -0
- data/test/results/omopv4/condition_type/crit_era_0 +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_detail +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_header +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_header_2 +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_header_3 +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_header_4 +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_header_5 +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_primary +1 -0
- data/test/results/omopv4/condition_type/crit_inpatient_primary_or_first +1 -0
- data/test/results/omopv4/condition_type/crit_outpatient +1 -0
- data/test/results/omopv4/condition_type/crit_outpatient_detail +1 -0
- data/test/results/omopv4/condition_type/crit_outpatient_header +1 -0
- data/test/results/omopv4/condition_type/crit_outpatient_primary +1 -0
- data/test/results/omopv4/condition_type/crit_primary +1 -0
- data/test/results/omopv4/contains/crit_1 +5 -0
- data/test/results/omopv4/contains/crit_2 +2 -0
- data/test/results/omopv4/contains/crit_3 +2 -0
- data/test/results/omopv4/count/anno_multiple_upstreams +52 -0
- data/test/results/omopv4/count/anno_no_upstream1 +18 -0
- data/test/results/omopv4/count/anno_no_upstream2 +25 -0
- data/test/results/omopv4/count/crit_icd9_ndc +8 -0
- data/test/results/omopv4/count/crit_ndc +5 -0
- data/test/results/omopv4/count/crit_person +254 -0
- data/test/results/omopv4/cpt/anno_icd9_upstream +40 -0
- data/test/results/omopv4/cpt/anno_invalid_code +22 -0
- data/test/results/omopv4/cpt/count_1 +3 -0
- data/test/results/omopv4/cpt/crit_1 +174 -0
- data/test/results/omopv4/cpt/crit_2 +1 -0
- data/test/results/omopv4/cpt/scanno_1 +17 -0
- data/test/results/omopv4/cpt_or_hcpcs/anno_bad_format +25 -0
- data/test/results/omopv4/cpt_or_hcpcs/count_1 +3 -0
- data/test/results/omopv4/cpt_or_hcpcs/crit_1 +179 -0
- data/test/results/omopv4/cpt_or_hcpcs/crit_2 +1 -0
- data/test/results/omopv4/date_range/anno_1 +15 -0
- data/test/results/omopv4/date_range/anno_extra_argument +24 -0
- data/test/results/omopv4/date_range/anno_invalid_argument +25 -0
- data/test/results/omopv4/date_range/anno_missing_argument1 +20 -0
- data/test/results/omopv4/date_range/anno_missing_argument2 +20 -0
- data/test/results/omopv4/date_range/anno_no_upstreams +38 -0
- data/test/results/omopv4/date_range/count_1 +3 -0
- data/test/results/omopv4/date_range/count_2 +3 -0
- data/test/results/omopv4/date_range/crit_1 +1 -0
- data/test/results/omopv4/date_range/crit_2 +1 -0
- data/test/results/omopv4/death/anno_multiple_upstreams +50 -0
- data/test/results/omopv4/death/anno_no_upstreams +22 -0
- data/test/results/omopv4/death/crit_basic +5 -0
- data/test/results/omopv4/death/crit_person +5 -0
- data/test/results/omopv4/drug_type_concept/anno_has_upstreams +37 -0
- data/test/results/omopv4/drug_type_concept/anno_no_arguments +18 -0
- data/test/results/omopv4/drug_type_concept/crit_basic1 +5 -0
- data/test/results/omopv4/drug_type_concept/crit_basic2 +2 -0
- data/test/results/omopv4/during/crit_1 +15 -0
- data/test/results/omopv4/during/crit_2 +2 -0
- data/test/results/omopv4/equal/crit_1 +5 -0
- data/test/results/omopv4/equal/crit_2 +5 -0
- data/test/results/omopv4/except/anno_1 +42 -0
- data/test/results/omopv4/except/anno_2 +43 -0
- data/test/results/omopv4/except/count_complex +5 -0
- data/test/results/omopv4/except/crit_412_cpt +54 -0
- data/test/results/omopv4/except/crit_412_inpatient +46 -0
- data/test/results/omopv4/except/crit_complex +1 -0
- data/test/results/omopv4/filter/crit_1 +54 -0
- data/test/results/omopv4/first/anno_argument +25 -0
- data/test/results/omopv4/first/anno_no_upstream +18 -0
- data/test/results/omopv4/first/crit_cpt +207 -0
- data/test/results/omopv4/first/crit_icd9 +42 -0
- data/test/results/omopv4/first/crit_union +45 -0
- data/test/results/omopv4/from/anno_has_upstreams +39 -0
- data/test/results/omopv4/from/anno_multiple_arguments +24 -0
- data/test/results/omopv4/from/count_condition_occurrence +3 -0
- data/test/results/omopv4/from/count_observation_period +3 -0
- data/test/results/omopv4/from/count_person +3 -0
- data/test/results/omopv4/from_seer_visits/anno_multiple_upstreams +78 -0
- data/test/results/omopv4/from_seer_visits/anno_no_upstream +18 -0
- data/test/results/omopv4/from_seer_visits/crit_1 +6 -0
- data/test/results/omopv4/from_seer_visits/crit_2 +5 -0
- data/test/results/omopv4/from_seer_visits/crit_3 +5 -0
- data/test/results/omopv4/from_seer_visits/crit_4 +6 -0
- data/test/results/omopv4/gender/anno_has_upstreams +39 -0
- data/test/results/omopv4/gender/crit_male +130 -0
- data/test/results/omopv4/hcpcs/anno_bad_format +24 -0
- data/test/results/omopv4/hcpcs/crit_A0382 +9 -0
- data/test/results/omopv4/icd10/anno_bad_format +22 -0
- data/test/results/omopv4/icd10/anno_has_upstreams +40 -0
- data/test/results/omopv4/icd10/crit_1 +5 -0
- data/test/results/omopv4/icd10pcs/anno_bad_format +28 -0
- data/test/results/omopv4/icd10pcs/anno_has_upstreams +40 -0
- data/test/results/omopv4/icd10pcs/crit_1 +2 -0
- data/test/results/omopv4/icd9/anno_empty_label +15 -0
- data/test/results/omopv4/icd9/anno_invalid_code +21 -0
- data/test/results/omopv4/icd9/crit_1 +54 -0
- data/test/results/omopv4/icd9_procedure/crit_1 +5 -0
- data/test/results/omopv4/intersect/anno_412_inpatient +42 -0
- data/test/results/omopv4/intersect/anno_has_arguments +25 -0
- data/test/results/omopv4/intersect/anno_no_upstream +18 -0
- data/test/results/omopv4/intersect/crit_412_inpatient +12 -0
- data/test/results/omopv4/intersect/crit_412_male +182 -0
- data/test/results/omopv4/intersect/crit_complex +118 -0
- data/test/results/omopv4/invalid/anno_bad_op +55 -0
- data/test/results/omopv4/invalid/scanno_1 +23 -0
- data/test/results/omopv4/last/crit_icd9 +42 -0
- data/test/results/omopv4/loinc/crit_basic +5 -0
- data/test/results/omopv4/ndc/crit_basic +5 -0
- data/test/results/omopv4/numeric/anno_multiple_upstreams +59 -0
- data/test/results/omopv4/numeric/num_values_1 +254 -0
- data/test/results/omopv4/numeric/num_values_2 +5 -0
- data/test/results/omopv4/numeric/num_values_3 +5 -0
- data/test/results/omopv4/observation_period/anno_has_arguments +36 -0
- data/test/results/omopv4/observation_period/anno_multiple_upstreams +51 -0
- data/test/results/omopv4/observation_period/count_all_periods +3 -0
- data/test/results/omopv4/observation_period/crit_female +2 -0
- data/test/results/omopv4/observation_period/crit_icd9 +5 -0
- data/test/results/omopv4/observation_period/crit_male +5 -0
- data/test/results/omopv4/occurrence/anno_no_upstream +22 -0
- data/test/results/omopv4/occurrence/cc_412_410 +1 -0
- data/test/results/omopv4/occurrence/count_412_410 +3 -0
- data/test/results/omopv4/occurrence/crit_1 +16 -0
- data/test/results/omopv4/occurrence/crit_2 +2 -0
- data/test/results/omopv4/occurrence/crit_3 +42 -0
- data/test/results/omopv4/one_in_two_out/anno_has_arguments +27 -0
- data/test/results/omopv4/one_in_two_out/anno_multiple_upstreams +54 -0
- data/test/results/omopv4/one_in_two_out/anno_no_upstream +20 -0
- data/test/results/omopv4/one_in_two_out/count_1 +3 -0
- data/test/results/omopv4/one_in_two_out/crit_hcpcs +7 -0
- data/test/results/omopv4/one_in_two_out/crit_icd9 +21 -0
- data/test/results/omopv4/overlapped_by/crit_1 +5 -0
- data/test/results/omopv4/overlapped_by/crit_2 +2 -0
- data/test/results/omopv4/overlapped_by/crit_3 +5 -0
- data/test/results/omopv4/overlapped_by/crit_4 +2 -0
- data/test/results/omopv4/overlaps/crit_1 +5 -0
- data/test/results/omopv4/overlaps/crit_2 +2 -0
- data/test/results/omopv4/overlaps/crit_3 +5 -0
- data/test/results/omopv4/overlaps/crit_4 +2 -0
- data/test/results/omopv4/person/anno_has_arguments +22 -0
- data/test/results/omopv4/person/anno_multiple_upstreams +52 -0
- data/test/results/omopv4/person/count_2 +3 -0
- data/test/results/omopv4/person/crit_1 +42 -0
- data/test/results/omopv4/person/crit_2 +1 -0
- data/test/results/omopv4/person_filter/count_1 +4 -0
- data/test/results/omopv4/person_filter/crit_1 +54 -0
- data/test/results/omopv4/person_filter/crit_2 +5 -0
- data/test/results/omopv4/person_filter/crit_3 +32 -0
- data/test/results/omopv4/person_filter/crit_4 +52 -0
- data/test/results/omopv4/person_filter/crit_5 +1 -0
- data/test/results/omopv4/place_of_service_code/anno_has_upstreams +37 -0
- data/test/results/omopv4/place_of_service_code/anno_no_arguments +18 -0
- data/test/results/omopv4/place_of_service_code/crit_basic +174 -0
- data/test/results/omopv4/place_of_service_filter/anno_1 +29 -0
- data/test/results/omopv4/procedure_occurrence/anno_has_arguments +37 -0
- data/test/results/omopv4/procedure_occurrence/anno_multiple_upstreams +51 -0
- data/test/results/omopv4/procedure_occurrence/count_gender +3 -0
- data/test/results/omopv4/procedure_occurrence/count_icd9 +3 -0
- data/test/results/omopv4/procedure_occurrence/count_started_by +3 -0
- data/test/results/omopv4/procedure_occurrence/crit_gender +1 -0
- data/test/results/omopv4/procedure_occurrence/crit_icd9 +1 -0
- data/test/results/omopv4/procedure_occurrence/crit_started_by +1 -0
- data/test/results/omopv4/provenance/anno_1 +29 -0
- data/test/results/omopv4/provider_filter/anno_1 +29 -0
- data/test/results/omopv4/race/anno_1 +37 -0
- data/test/results/omopv4/race/anno_2 +18 -0
- data/test/results/omopv4/race/crit_1 +28 -0
- data/test/results/omopv4/read/anno_1 +21 -0
- data/test/results/omopv4/read/crit_1 +2 -0
- data/test/results/omopv4/recall/anno_1 +54 -0
- data/test/results/omopv4/recall/anno_2 +66 -0
- data/test/results/omopv4/recall/anno_3 +20 -0
- data/test/results/omopv4/recall/anno_4 +18 -0
- data/test/results/omopv4/recall/anno_5 +24 -0
- data/test/results/omopv4/recall/anno_6 +270 -0
- data/test/results/omopv4/recall/crit_1 +21 -0
- data/test/results/omopv4/recall/crit_2 +54 -0
- data/test/results/omopv4/recall/crit_3 +2 -0
- data/test/results/omopv4/recall/crit_cte_1 +42 -0
- data/test/results/omopv4/recall/crit_cte_2 +42 -0
- data/test/results/omopv4/recall/crit_nested_perm_0 +54 -0
- data/test/results/omopv4/revenue_code/crit_1 +2 -0
- data/test/results/omopv4/revenue_code/crit_basic +2 -0
- data/test/results/omopv4/revenue_code/domains_1 +3 -0
- data/test/results/omopv4/revenue_code/domains_drg100 +3 -0
- data/test/results/omopv4/rxnorm/crit_1 +5 -0
- data/test/results/omopv4/snomed/crit_1 +84 -0
- data/test/results/omopv4/started_by/crit_1 +5 -0
- data/test/results/omopv4/started_by/crit_2 +2 -0
- data/test/results/omopv4/started_by/crit_3 +2 -0
- data/test/results/omopv4/sum/anno_1 +18 -0
- data/test/results/omopv4/sum/anno_2 +36 -0
- data/test/results/omopv4/sum/num_1 +5 -0
- data/test/results/omopv4/sum/num_2 +8 -0
- data/test/results/omopv4/sum/num_3 +254 -0
- data/test/results/omopv4/time_window/anno_1 +20 -0
- data/test/results/omopv4/time_window/anno_2 +40 -0
- data/test/results/omopv4/time_window/anno_3 +36 -0
- data/test/results/omopv4/time_window/anno_4 +39 -0
- data/test/results/omopv4/time_window/anno_5 +57 -0
- data/test/results/omopv4/time_window/crit_1 +54 -0
- data/test/results/omopv4/time_window/crit_2 +174 -0
- data/test/results/omopv4/time_window/crit_3 +54 -0
- data/test/results/omopv4/time_window/crit_4 +174 -0
- data/test/results/omopv4/trim_date_end/crit_1 +5 -0
- data/test/results/omopv4/trim_date_end/crit_2 +2 -0
- data/test/results/omopv4/trim_date_end/crit_3 +6 -0
- data/test/results/omopv4/trim_date_end/crit_at_least +5 -0
- data/test/results/omopv4/trim_date_end/crit_occurrences_1 +2 -0
- data/test/results/omopv4/trim_date_end/crit_occurrences_2 +6 -0
- data/test/results/omopv4/trim_date_end/crit_within +5 -0
- data/test/results/omopv4/trim_date_start/crit_1 +5 -0
- data/test/results/omopv4/trim_date_start/crit_2 +2 -0
- data/test/results/omopv4/trim_date_start/crit_3 +6 -0
- data/test/results/omopv4/trim_date_start/crit_at_least +5 -0
- data/test/results/omopv4/trim_date_start/crit_occurrences_1 +2 -0
- data/test/results/omopv4/trim_date_start/crit_occurrences_2 +6 -0
- data/test/results/omopv4/trim_date_start/crit_within +5 -0
- data/test/results/omopv4/union/anno_1 +43 -0
- data/test/results/omopv4/union/anno_2 +74 -0
- data/test/results/omopv4/union/anno_3 +18 -0
- data/test/results/omopv4/union/anno_4 +25 -0
- data/test/results/omopv4/union/anno_5 +33 -0
- data/test/results/omopv4/union/anno_6 +46 -0
- data/test/results/omopv4/union/cc_1 +1 -0
- data/test/results/omopv4/union/cc_2 +1 -0
- data/test/results/omopv4/union/cc_3 +1 -0
- data/test/results/omopv4/union/cc_4 +1 -0
- data/test/results/omopv4/union/cc_5 +1 -0
- data/test/results/omopv4/union/count_1 +3 -0
- data/test/results/omopv4/union/count_2 +3 -0
- data/test/results/omopv4/union/count_3 +3 -0
- data/test/results/omopv4/union/count_4 +3 -0
- data/test/results/omopv4/union/count_5 +4 -0
- data/test/results/omopv4/union/scanno_1 +22 -0
- data/test/results/omopv4/union/scanno_2 +36 -0
- data/test/results/omopv4/visit_occurrence/anno_1 +52 -0
- data/test/results/omopv4/visit_occurrence/anno_2 +37 -0
- data/test/results/omopv4/visit_occurrence/crit_1 +54 -0
- data/test/results/omopv4/visit_occurrence/crit_2 +7566 -0
- data/test/results/omopv4/visit_occurrence/crit_3 +14935 -0
- data/test/results/omopv4_plus/after/anno_1 +25 -0
- data/test/results/omopv4_plus/after/anno_2 +48 -0
- data/test/results/omopv4_plus/after/anno_3 +34 -0
- data/test/results/omopv4_plus/after/anno_4 +60 -0
- data/test/results/omopv4_plus/after/anno_5 +68 -0
- data/test/results/omopv4_plus/after/anno_6 +60 -0
- data/test/results/omopv4_plus/after/crit_at_least +7 -0
- data/test/results/omopv4_plus/after/crit_basic +32 -0
- data/test/results/omopv4_plus/after/crit_occurrences +12 -0
- data/test/results/omopv4_plus/after/crit_within +5 -0
- data/test/results/omopv4_plus/any_overlap/crit_basic1 +14 -0
- data/test/results/omopv4_plus/any_overlap/crit_basic2 +14 -0
- data/test/results/omopv4_plus/any_overlap/crit_occurrences1 +2 -0
- data/test/results/omopv4_plus/any_overlap/crit_occurrences2 +14 -0
- data/test/results/omopv4_plus/any_overlap/crit_within +8 -0
- data/test/results/omopv4_plus/before/crit_at_least +6 -0
- data/test/results/omopv4_plus/before/crit_basic1 +48 -0
- data/test/results/omopv4_plus/before/crit_basic2 +8 -0
- data/test/results/omopv4_plus/before/crit_occurrences +13 -0
- data/test/results/omopv4_plus/before/crit_within +17 -0
- data/test/results/omopv4_plus/co_reported/anno_1 +43 -0
- data/test/results/omopv4_plus/co_reported/anno_2 +66 -0
- data/test/results/omopv4_plus/co_reported/anno_3 +47 -0
- data/test/results/omopv4_plus/complement/anno_duplicate_params +52 -0
- data/test/results/omopv4_plus/complement/anno_invalid_params +37 -0
- data/test/results/omopv4_plus/complement/anno_no_params +18 -0
- data/test/results/omopv4_plus/complement/count_3way_intersect +4 -0
- data/test/results/omopv4_plus/complement/count_3way_union +4 -0
- data/test/results/omopv4_plus/complement/count_intersect +3 -0
- data/test/results/omopv4_plus/complement/count_union +3 -0
- data/test/results/omopv4_plus/complement/count_union_and_intersect +4 -0
- data/test/results/omopv4_plus/complement/crit_basic1 +52483 -0
- data/test/results/omopv4_plus/complement/crit_icd9_selector +52 -0
- data/test/results/omopv4_plus/complex/anno_1 +85 -0
- data/test/results/omopv4_plus/complex/crit_1 +2 -0
- data/test/results/omopv4_plus/complex/crit_2 +2 -0
- data/test/results/omopv4_plus/complex/crit_3 +2 -0
- data/test/results/omopv4_plus/complex/crit_4 +2 -0
- data/test/results/omopv4_plus/complex/crit_5 +2 -0
- data/test/results/omopv4_plus/complex/crit_6 +24 -0
- data/test/results/omopv4_plus/complex/crit_7 +45 -0
- data/test/results/omopv4_plus/complex/crit_out_of_order_ctes +15 -0
- data/test/results/omopv4_plus/complex/scanno_1 +108 -0
- data/test/results/omopv4_plus/concurrent_within/crit_icd9 +52 -0
- data/test/results/omopv4_plus/concurrent_within/crit_icd9_and_place_of_service +21 -0
- data/test/results/omopv4_plus/concurrent_within/crit_negative_start +5 -0
- data/test/results/omopv4_plus/condition_type/anno_icd9 +39 -0
- data/test/results/omopv4_plus/condition_type/count_condition_era +2 -0
- data/test/results/omopv4_plus/condition_type/count_condition_era_30_day_window +2 -0
- data/test/results/omopv4_plus/condition_type/count_ehr_problem_list +2 -0
- data/test/results/omopv4_plus/condition_type/count_era_0 +2 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_detail +2 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_header +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_2 +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_3 +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_4 +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_5 +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_outpatient_detail +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_primary +3 -0
- data/test/results/omopv4_plus/condition_type/count_inpatient_primary_or_first +3 -0
- data/test/results/omopv4_plus/condition_type/count_outpatient +3 -0
- data/test/results/omopv4_plus/condition_type/count_outpatient_detail +2 -0
- data/test/results/omopv4_plus/condition_type/count_outpatient_header +3 -0
- data/test/results/omopv4_plus/condition_type/count_outpatient_primary +3 -0
- data/test/results/omopv4_plus/condition_type/count_primary +3 -0
- data/test/results/omopv4_plus/contains/crit_1 +5 -0
- data/test/results/omopv4_plus/contains/crit_2 +2 -0
- data/test/results/omopv4_plus/contains/crit_3 +2 -0
- data/test/results/omopv4_plus/count/anno_multiple_upstreams +52 -0
- data/test/results/omopv4_plus/count/anno_no_upstream1 +18 -0
- data/test/results/omopv4_plus/count/anno_no_upstream2 +25 -0
- data/test/results/omopv4_plus/count/crit_icd9_ndc +5 -0
- data/test/results/omopv4_plus/count/crit_ndc +2 -0
- data/test/results/omopv4_plus/count/crit_person +254 -0
- data/test/results/omopv4_plus/cpt/anno_icd9_upstream +40 -0
- data/test/results/omopv4_plus/cpt/anno_invalid_code +22 -0
- data/test/results/omopv4_plus/cpt/count_1 +3 -0
- data/test/results/omopv4_plus/cpt/crit_1 +158 -0
- data/test/results/omopv4_plus/cpt/scanno_1 +17 -0
- data/test/results/omopv4_plus/cpt_or_hcpcs/anno_bad_format +25 -0
- data/test/results/omopv4_plus/cpt_or_hcpcs/count_1 +3 -0
- data/test/results/omopv4_plus/cpt_or_hcpcs/crit_1 +161 -0
- data/test/results/omopv4_plus/date_range/anno_1 +15 -0
- data/test/results/omopv4_plus/date_range/anno_extra_argument +24 -0
- data/test/results/omopv4_plus/date_range/anno_invalid_argument +25 -0
- data/test/results/omopv4_plus/date_range/anno_missing_argument1 +20 -0
- data/test/results/omopv4_plus/date_range/anno_missing_argument2 +20 -0
- data/test/results/omopv4_plus/date_range/anno_no_upstreams +38 -0
- data/test/results/omopv4_plus/date_range/count_1 +3 -0
- data/test/results/omopv4_plus/date_range/count_2 +3 -0
- data/test/results/omopv4_plus/death/anno_multiple_upstreams +50 -0
- data/test/results/omopv4_plus/death/anno_no_upstreams +22 -0
- data/test/results/omopv4_plus/death/crit_basic +14 -0
- data/test/results/omopv4_plus/death/crit_person +14 -0
- data/test/results/omopv4_plus/drug_type_concept/anno_has_upstreams +37 -0
- data/test/results/omopv4_plus/drug_type_concept/anno_no_arguments +18 -0
- data/test/results/omopv4_plus/drug_type_concept/crit_basic1 +2 -0
- data/test/results/omopv4_plus/drug_type_concept/crit_basic2 +2 -0
- data/test/results/omopv4_plus/during/crit_1 +14 -0
- data/test/results/omopv4_plus/during/crit_2 +2 -0
- data/test/results/omopv4_plus/equal/crit_1 +2 -0
- data/test/results/omopv4_plus/equal/crit_2 +2 -0
- data/test/results/omopv4_plus/except/anno_1 +42 -0
- data/test/results/omopv4_plus/except/anno_2 +43 -0
- data/test/results/omopv4_plus/except/count_complex +5 -0
- data/test/results/omopv4_plus/except/crit_412_cpt +52 -0
- data/test/results/omopv4_plus/except/crit_412_inpatient +45 -0
- data/test/results/omopv4_plus/filter/crit_1 +52 -0
- data/test/results/omopv4_plus/first/anno_argument +25 -0
- data/test/results/omopv4_plus/first/anno_no_upstream +18 -0
- data/test/results/omopv4_plus/first/crit_cpt +180 -0
- data/test/results/omopv4_plus/first/crit_icd9 +41 -0
- data/test/results/omopv4_plus/first/crit_union +52 -0
- data/test/results/omopv4_plus/from/anno_has_upstreams +39 -0
- data/test/results/omopv4_plus/from/anno_multiple_arguments +24 -0
- data/test/results/omopv4_plus/from/count_condition_occurrence +3 -0
- data/test/results/omopv4_plus/from/count_observation_period +3 -0
- data/test/results/omopv4_plus/from/count_person +3 -0
- data/test/results/omopv4_plus/from_seer_visits/anno_multiple_upstreams +78 -0
- data/test/results/omopv4_plus/from_seer_visits/anno_no_upstream +18 -0
- data/test/results/omopv4_plus/from_seer_visits/crit_1 +2 -0
- data/test/results/omopv4_plus/from_seer_visits/crit_2 +2 -0
- data/test/results/omopv4_plus/from_seer_visits/crit_3 +2 -0
- data/test/results/omopv4_plus/from_seer_visits/crit_4 +2 -0
- data/test/results/omopv4_plus/gender/anno_has_upstreams +39 -0
- data/test/results/omopv4_plus/gender/crit_male +128 -0
- data/test/results/omopv4_plus/hcpcs/anno_bad_format +24 -0
- data/test/results/omopv4_plus/hcpcs/crit_A0382 +7 -0
- data/test/results/omopv4_plus/icd10/anno_bad_format +22 -0
- data/test/results/omopv4_plus/icd10/anno_has_upstreams +40 -0
- data/test/results/omopv4_plus/icd10/crit_1 +2 -0
- data/test/results/omopv4_plus/icd10pcs/anno_bad_format +28 -0
- data/test/results/omopv4_plus/icd10pcs/anno_has_upstreams +40 -0
- data/test/results/omopv4_plus/icd10pcs/crit_1 +2 -0
- data/test/results/omopv4_plus/icd9/anno_empty_label +15 -0
- data/test/results/omopv4_plus/icd9/anno_invalid_code +21 -0
- data/test/results/omopv4_plus/icd9/anno_valid_code +3 -0
- data/test/results/omopv4_plus/icd9/crit_1 +52 -0
- data/test/results/omopv4_plus/icd9_procedure/crit_1 +5 -0
- data/test/results/omopv4_plus/intersect/anno_412_inpatient +42 -0
- data/test/results/omopv4_plus/intersect/anno_has_arguments +25 -0
- data/test/results/omopv4_plus/intersect/anno_no_upstream +18 -0
- data/test/results/omopv4_plus/intersect/crit_412_inpatient +11 -0
- data/test/results/omopv4_plus/intersect/crit_412_male +178 -0
- data/test/results/omopv4_plus/intersect/crit_complex +110 -0
- data/test/results/omopv4_plus/invalid/anno_bad_op +55 -0
- data/test/results/omopv4_plus/invalid/scanno_1 +23 -0
- data/test/results/omopv4_plus/last/crit_icd9 +41 -0
- data/test/results/omopv4_plus/loinc/crit_basic +2 -0
- data/test/results/omopv4_plus/ndc/crit_basic +2 -0
- data/test/results/omopv4_plus/ndc/results_1 +41 -0
- data/test/results/omopv4_plus/numeric/anno_multiple_upstreams +59 -0
- data/test/results/omopv4_plus/numeric/num_values_1 +254 -0
- data/test/results/omopv4_plus/numeric/num_values_2 +5 -0
- data/test/results/omopv4_plus/numeric/num_values_3 +5 -0
- data/test/results/omopv4_plus/observation_period/anno_has_arguments +36 -0
- data/test/results/omopv4_plus/observation_period/anno_multiple_upstreams +51 -0
- data/test/results/omopv4_plus/observation_period/count_all_periods +3 -0
- data/test/results/omopv4_plus/observation_period/crit_female +87 -0
- data/test/results/omopv4_plus/observation_period/crit_icd9 +28 -0
- data/test/results/omopv4_plus/observation_period/crit_male +75 -0
- data/test/results/omopv4_plus/occurrence/anno_no_upstream +22 -0
- data/test/results/omopv4_plus/occurrence/count_412_410 +3 -0
- data/test/results/omopv4_plus/occurrence/crit_1 +15 -0
- data/test/results/omopv4_plus/occurrence/crit_2 +2 -0
- data/test/results/omopv4_plus/occurrence/crit_3 +41 -0
- data/test/results/omopv4_plus/one_in_two_out/anno_has_arguments +27 -0
- data/test/results/omopv4_plus/one_in_two_out/anno_multiple_upstreams +54 -0
- data/test/results/omopv4_plus/one_in_two_out/anno_no_upstream +20 -0
- data/test/results/omopv4_plus/one_in_two_out/count_1 +3 -0
- data/test/results/omopv4_plus/one_in_two_out/count_same_as_1 +3 -0
- data/test/results/omopv4_plus/one_in_two_out/crit_hcpcs +2 -0
- data/test/results/omopv4_plus/one_in_two_out/crit_icd9 +19 -0
- data/test/results/omopv4_plus/one_in_two_out/results_1 +803 -0
- data/test/results/omopv4_plus/one_in_two_out/results_2 +803 -0
- data/test/results/omopv4_plus/overlapped_by/crit_1 +5 -0
- data/test/results/omopv4_plus/overlapped_by/crit_2 +2 -0
- data/test/results/omopv4_plus/overlapped_by/crit_3 +5 -0
- data/test/results/omopv4_plus/overlapped_by/crit_4 +2 -0
- data/test/results/omopv4_plus/overlaps/crit_1 +5 -0
- data/test/results/omopv4_plus/overlaps/crit_2 +2 -0
- data/test/results/omopv4_plus/overlaps/crit_3 +5 -0
- data/test/results/omopv4_plus/overlaps/crit_4 +2 -0
- data/test/results/omopv4_plus/person/anno_has_arguments +22 -0
- data/test/results/omopv4_plus/person/anno_multiple_upstreams +52 -0
- data/test/results/omopv4_plus/person/count_2 +3 -0
- data/test/results/omopv4_plus/person/crit_1 +41 -0
- data/test/results/omopv4_plus/person_filter/count_1 +4 -0
- data/test/results/omopv4_plus/person_filter/crit_1 +52 -0
- data/test/results/omopv4_plus/person_filter/crit_2 +10 -0
- data/test/results/omopv4_plus/person_filter/crit_3 +32 -0
- data/test/results/omopv4_plus/person_filter/crit_4 +50 -0
- data/test/results/omopv4_plus/place_of_service_code/anno_has_upstreams +37 -0
- data/test/results/omopv4_plus/place_of_service_code/anno_no_arguments +18 -0
- data/test/results/omopv4_plus/place_of_service_code/crit_basic +157 -0
- data/test/results/omopv4_plus/place_of_service_filter/anno_1 +29 -0
- data/test/results/omopv4_plus/procedure_occurrence/anno_has_arguments +37 -0
- data/test/results/omopv4_plus/procedure_occurrence/anno_multiple_upstreams +51 -0
- data/test/results/omopv4_plus/procedure_occurrence/count_gender +3 -0
- data/test/results/omopv4_plus/procedure_occurrence/count_icd9 +3 -0
- data/test/results/omopv4_plus/procedure_occurrence/count_started_by +3 -0
- data/test/results/omopv4_plus/provenance/anno_1 +29 -0
- data/test/results/omopv4_plus/provenance/anno_bad_keyword +38 -0
- data/test/results/omopv4_plus/provenance/count_1 +3 -0
- data/test/results/omopv4_plus/provenance/count_2 +3 -0
- data/test/results/omopv4_plus/provider_filter/anno_1 +29 -0
- data/test/results/omopv4_plus/race/anno_1 +37 -0
- data/test/results/omopv4_plus/race/anno_2 +18 -0
- data/test/results/omopv4_plus/race/crit_1 +32 -0
- data/test/results/omopv4_plus/read/anno_1 +15 -0
- data/test/results/omopv4_plus/read/crit_1 +2 -0
- data/test/results/omopv4_plus/recall/anno_1 +54 -0
- data/test/results/omopv4_plus/recall/anno_2 +66 -0
- data/test/results/omopv4_plus/recall/anno_3 +20 -0
- data/test/results/omopv4_plus/recall/anno_4 +18 -0
- data/test/results/omopv4_plus/recall/anno_5 +24 -0
- data/test/results/omopv4_plus/recall/anno_6 +270 -0
- data/test/results/omopv4_plus/recall/crit_1 +19 -0
- data/test/results/omopv4_plus/recall/crit_2 +52 -0
- data/test/results/omopv4_plus/recall/crit_3 +2 -0
- data/test/results/omopv4_plus/recall/crit_cte_1 +41 -0
- data/test/results/omopv4_plus/recall/crit_cte_2 +41 -0
- data/test/results/omopv4_plus/recall/crit_nested_perm_0 +52 -0
- data/test/results/omopv4_plus/revenue_code/crit_1 +2 -0
- data/test/results/omopv4_plus/revenue_code/crit_basic +2 -0
- data/test/results/omopv4_plus/revenue_code/domains_1 +3 -0
- data/test/results/omopv4_plus/revenue_code/domains_drg100 +3 -0
- data/test/results/omopv4_plus/rxnorm/crit_1 +2 -0
- data/test/results/omopv4_plus/snomed/crit_1 +2 -0
- data/test/results/omopv4_plus/started_by/crit_1 +5 -0
- data/test/results/omopv4_plus/started_by/crit_2 +2 -0
- data/test/results/omopv4_plus/started_by/crit_3 +2 -0
- data/test/results/omopv4_plus/sum/anno_1 +18 -0
- data/test/results/omopv4_plus/sum/anno_2 +36 -0
- data/test/results/omopv4_plus/sum/num_1 +2 -0
- data/test/results/omopv4_plus/sum/num_2 +5 -0
- data/test/results/omopv4_plus/sum/num_3 +254 -0
- data/test/results/omopv4_plus/time_window/anno_1 +20 -0
- data/test/results/omopv4_plus/time_window/anno_2 +40 -0
- data/test/results/omopv4_plus/time_window/anno_3 +36 -0
- data/test/results/omopv4_plus/time_window/anno_4 +39 -0
- data/test/results/omopv4_plus/time_window/anno_5 +57 -0
- data/test/results/omopv4_plus/time_window/crit_1 +52 -0
- data/test/results/omopv4_plus/time_window/crit_2 +157 -0
- data/test/results/omopv4_plus/time_window/crit_3 +52 -0
- data/test/results/omopv4_plus/time_window/crit_4 +157 -0
- data/test/results/omopv4_plus/trim_date_end/crit_1 +5 -0
- data/test/results/omopv4_plus/trim_date_end/crit_2 +2 -0
- data/test/results/omopv4_plus/trim_date_end/crit_3 +6 -0
- data/test/results/omopv4_plus/trim_date_end/crit_at_least +5 -0
- data/test/results/omopv4_plus/trim_date_end/crit_occurrences_1 +2 -0
- data/test/results/omopv4_plus/trim_date_end/crit_occurrences_2 +6 -0
- data/test/results/omopv4_plus/trim_date_end/crit_within +5 -0
- data/test/results/omopv4_plus/trim_date_start/crit_1 +5 -0
- data/test/results/omopv4_plus/trim_date_start/crit_2 +2 -0
- data/test/results/omopv4_plus/trim_date_start/crit_3 +6 -0
- data/test/results/omopv4_plus/trim_date_start/crit_at_least +5 -0
- data/test/results/omopv4_plus/trim_date_start/crit_occurrences_1 +2 -0
- data/test/results/omopv4_plus/trim_date_start/crit_occurrences_2 +6 -0
- data/test/results/omopv4_plus/trim_date_start/crit_within +5 -0
- data/test/results/omopv4_plus/union/anno_1 +43 -0
- data/test/results/omopv4_plus/union/anno_2 +74 -0
- data/test/results/omopv4_plus/union/anno_3 +18 -0
- data/test/results/omopv4_plus/union/anno_4 +25 -0
- data/test/results/omopv4_plus/union/anno_5 +33 -0
- data/test/results/omopv4_plus/union/anno_6 +46 -0
- data/test/results/omopv4_plus/union/count_1 +3 -0
- data/test/results/omopv4_plus/union/count_2 +3 -0
- data/test/results/omopv4_plus/union/count_3 +3 -0
- data/test/results/omopv4_plus/union/count_4 +3 -0
- data/test/results/omopv4_plus/union/count_5 +4 -0
- data/test/results/omopv4_plus/union/optcc_1 +3 -0
- data/test/results/omopv4_plus/union/optcc_2 +3 -0
- data/test/results/omopv4_plus/union/optcc_3 +3 -0
- data/test/results/omopv4_plus/union/optcc_4 +3 -0
- data/test/results/omopv4_plus/union/optcc_5 +3 -0
- data/test/results/omopv4_plus/union/optcc_6 +3 -0
- data/test/results/omopv4_plus/union/scanno_1 +22 -0
- data/test/results/omopv4_plus/union/scanno_2 +36 -0
- data/test/results/omopv4_plus/visit_occurrence/anno_1 +52 -0
- data/test/results/omopv4_plus/visit_occurrence/anno_2 +37 -0
- data/test/results/omopv4_plus/visit_occurrence/crit_1 +52 -0
- data/test/results/omopv4_plus/visit_occurrence/crit_2 +22945 -0
- data/test/results/omopv4_plus/visit_occurrence/crit_3 +46851 -0
- data/test/statements/after/anno_1 +7 -0
- data/test/statements/after/anno_2 +16 -0
- data/test/statements/after/anno_3 +9 -0
- data/test/statements/after/anno_4 +19 -0
- data/test/statements/after/anno_5 +21 -0
- data/test/statements/after/anno_6 +16 -0
- data/test/statements/after/crit_at_least +21 -0
- data/test/statements/after/crit_basic +20 -0
- data/test/statements/after/crit_occurrences +21 -0
- data/test/statements/after/crit_within +21 -0
- data/test/statements/any_overlap/crit_basic1 +16 -0
- data/test/statements/any_overlap/crit_basic2 +16 -0
- data/test/statements/any_overlap/crit_occurrences1 +17 -0
- data/test/statements/any_overlap/crit_occurrences2 +17 -0
- data/test/statements/any_overlap/crit_within +17 -0
- data/test/statements/before/crit_at_least +14 -0
- data/test/statements/before/crit_basic1 +13 -0
- data/test/statements/before/crit_basic2 +16 -0
- data/test/statements/before/crit_occurrences +14 -0
- data/test/statements/before/crit_within +14 -0
- data/test/statements/co_reported/anno_1 +13 -0
- data/test/statements/co_reported/anno_2 +21 -0
- data/test/statements/co_reported/anno_3 +14 -0
- data/test/statements/complement/anno_duplicate_params +11 -0
- data/test/statements/complement/anno_invalid_params +8 -0
- data/test/statements/complement/anno_no_params +3 -0
- data/test/statements/complement/count_3way_intersect +24 -0
- data/test/statements/complement/count_3way_union +18 -0
- data/test/statements/complement/count_intersect +17 -0
- data/test/statements/complement/count_union +14 -0
- data/test/statements/complement/count_union_and_intersect +27 -0
- data/test/statements/complement/crit_basic1 +7 -0
- data/test/statements/complement/crit_icd9_selector +10 -0
- data/test/statements/complex/anno_1 +29 -0
- data/test/statements/complex/crit_1 +278 -0
- data/test/statements/complex/crit_2 +43 -0
- data/test/statements/complex/crit_3 +54 -0
- data/test/statements/complex/crit_4 +17 -0
- data/test/statements/complex/crit_5 +17 -0
- data/test/statements/complex/crit_6 +20 -0
- data/test/statements/complex/crit_7 +14 -0
- data/test/statements/complex/crit_out_of_order_ctes +39 -0
- data/test/statements/complex/scanno_1 +1508 -0
- data/test/statements/concurrent_within/crit_icd9 +11 -0
- data/test/statements/concurrent_within/crit_icd9_and_place_of_service +15 -0
- data/test/statements/concurrent_within/crit_negative_start +15 -0
- data/test/statements/condition_type/anno_icd9 +7 -0
- data/test/statements/condition_type/count_condition_era +4 -0
- data/test/statements/condition_type/count_condition_era_30_day_window +4 -0
- data/test/statements/condition_type/count_ehr_problem_list +4 -0
- data/test/statements/condition_type/count_era_0 +4 -0
- data/test/statements/condition_type/count_inpatient +4 -0
- data/test/statements/condition_type/count_inpatient_detail +4 -0
- data/test/statements/condition_type/count_inpatient_header +4 -0
- data/test/statements/condition_type/count_inpatient_header_2 +4 -0
- data/test/statements/condition_type/count_inpatient_header_3 +4 -0
- data/test/statements/condition_type/count_inpatient_header_4 +4 -0
- data/test/statements/condition_type/count_inpatient_header_5 +4 -0
- data/test/statements/condition_type/count_inpatient_outpatient_detail +5 -0
- data/test/statements/condition_type/count_inpatient_primary +4 -0
- data/test/statements/condition_type/count_inpatient_primary_or_first +4 -0
- data/test/statements/condition_type/count_outpatient +4 -0
- data/test/statements/condition_type/count_outpatient_detail +4 -0
- data/test/statements/condition_type/count_outpatient_header +4 -0
- data/test/statements/condition_type/count_outpatient_primary +4 -0
- data/test/statements/condition_type/count_primary +4 -0
- data/test/statements/contains/crit_1 +16 -0
- data/test/statements/contains/crit_2 +16 -0
- data/test/statements/contains/crit_3 +16 -0
- data/test/statements/count/anno_multiple_upstreams +11 -0
- data/test/statements/count/anno_no_upstream1 +3 -0
- data/test/statements/count/anno_no_upstream2 +4 -0
- data/test/statements/count/crit_icd9_ndc +15 -0
- data/test/statements/count/crit_ndc +11 -0
- data/test/statements/count/crit_person +7 -0
- data/test/statements/cpt/anno_icd9_upstream +7 -0
- data/test/statements/cpt/anno_invalid_code +5 -0
- data/test/statements/cpt/count_1 +4 -0
- data/test/statements/cpt/crit_1 +4 -0
- data/test/statements/cpt/scanno_1 +4 -0
- data/test/statements/cpt_or_hcpcs/anno_bad_format +7 -0
- data/test/statements/cpt_or_hcpcs/count_1 +5 -0
- data/test/statements/cpt_or_hcpcs/crit_1 +5 -0
- data/test/statements/date_range/anno_1 +7 -0
- data/test/statements/date_range/anno_extra_argument +8 -0
- data/test/statements/date_range/anno_invalid_argument +7 -0
- data/test/statements/date_range/anno_missing_argument1 +6 -0
- data/test/statements/date_range/anno_missing_argument2 +6 -0
- data/test/statements/date_range/anno_no_upstreams +11 -0
- data/test/statements/date_range/count_1 +7 -0
- data/test/statements/date_range/count_2 +7 -0
- data/test/statements/death/anno_multiple_upstreams +10 -0
- data/test/statements/death/anno_no_upstreams +4 -0
- data/test/statements/death/crit_basic +3 -0
- data/test/statements/death/crit_person +7 -0
- data/test/statements/drug_type_concept/anno_has_upstreams +8 -0
- data/test/statements/drug_type_concept/anno_no_arguments +3 -0
- data/test/statements/drug_type_concept/crit_basic1 +4 -0
- data/test/statements/drug_type_concept/crit_basic2 +4 -0
- data/test/statements/during/crit_1 +16 -0
- data/test/statements/during/crit_2 +16 -0
- data/test/statements/equal/crit_1 +17 -0
- data/test/statements/equal/crit_2 +21 -0
- data/test/statements/except/anno_1 +13 -0
- data/test/statements/except/anno_2 +14 -0
- data/test/statements/except/count_complex +31 -0
- data/test/statements/except/crit_412_cpt +13 -0
- data/test/statements/except/crit_412_inpatient +13 -0
- data/test/statements/filter/crit_1 +15 -0
- data/test/statements/first/anno_argument +4 -0
- data/test/statements/first/anno_no_upstream +3 -0
- data/test/statements/first/crit_cpt +7 -0
- data/test/statements/first/crit_icd9 +7 -0
- data/test/statements/first/crit_union +14 -0
- data/test/statements/from/anno_has_upstreams +7 -0
- data/test/statements/from/anno_multiple_arguments +5 -0
- data/test/statements/from_seer_visits/anno_multiple_upstreams +17 -0
- data/test/statements/from_seer_visits/anno_no_upstream +3 -0
- data/test/statements/from_seer_visits/crit_1 +10 -0
- data/test/statements/from_seer_visits/crit_2 +11 -0
- data/test/statements/from_seer_visits/crit_3 +11 -0
- data/test/statements/from_seer_visits/crit_4 +12 -0
- data/test/statements/gender/anno_has_upstreams +7 -0
- data/test/statements/gender/crit_male +4 -0
- data/test/statements/hcpcs/anno_bad_format +6 -0
- data/test/statements/hcpcs/crit_A0382 +4 -0
- data/test/statements/icd10/anno_bad_format +5 -0
- data/test/statements/icd10/anno_has_upstreams +7 -0
- data/test/statements/icd10/crit_1 +4 -0
- data/test/statements/icd10pcs/anno_bad_format +6 -0
- data/test/statements/icd10pcs/anno_has_upstreams +7 -0
- data/test/statements/icd10pcs/crit_1 +4 -0
- data/test/statements/icd9/anno_empty_label +7 -0
- data/test/statements/icd9/anno_invalid_code +4 -0
- data/test/statements/icd9/anno_valid_code +4 -0
- data/test/statements/icd9/crit_1 +4 -0
- data/test/statements/icd9_procedure/crit_1 +4 -0
- data/test/statements/intersect/anno_412_inpatient +11 -0
- data/test/statements/intersect/anno_has_arguments +4 -0
- data/test/statements/intersect/anno_no_upstream +3 -0
- data/test/statements/intersect/crit_412_inpatient +11 -0
- data/test/statements/intersect/crit_412_male +11 -0
- data/test/statements/intersect/crit_complex +19 -0
- data/test/statements/invalid/anno_bad_op +13 -0
- data/test/statements/invalid/scanno_1 +7 -0
- data/test/statements/last/crit_icd9 +7 -0
- data/test/statements/loinc/crit_basic +4 -0
- data/test/statements/ndc/crit_basic +4 -0
- data/test/statements/ndc/results_1 +4 -0
- data/test/statements/numeric/anno_multiple_upstreams +11 -0
- data/test/statements/numeric/num_values_1 +4 -0
- data/test/statements/numeric/num_values_2 +8 -0
- data/test/statements/numeric/num_values_3 +8 -0
- data/test/statements/observation_period/anno_has_arguments +8 -0
- data/test/statements/observation_period/anno_multiple_upstreams +11 -0
- data/test/statements/observation_period/count_all_periods +4 -0
- data/test/statements/observation_period/crit_female +7 -0
- data/test/statements/observation_period/crit_icd9 +7 -0
- data/test/statements/observation_period/crit_male +7 -0
- data/test/statements/occurrence/anno_no_upstream +3 -0
- data/test/statements/occurrence/count_412_410 +17 -0
- data/test/statements/occurrence/crit_1 +8 -0
- data/test/statements/occurrence/crit_2 +11 -0
- data/test/statements/occurrence/crit_3 +11 -0
- data/test/statements/one_in_two_out/anno_has_arguments +8 -0
- data/test/statements/one_in_two_out/anno_multiple_upstreams +15 -0
- data/test/statements/one_in_two_out/anno_no_upstream +7 -0
- data/test/statements/one_in_two_out/count_1 +10 -0
- data/test/statements/one_in_two_out/count_same_as_1 +11 -0
- data/test/statements/one_in_two_out/crit_hcpcs +10 -0
- data/test/statements/one_in_two_out/crit_icd9 +11 -0
- data/test/statements/one_in_two_out/results_1 +9 -0
- data/test/statements/one_in_two_out/results_2 +9 -0
- data/test/statements/overlapped_by/crit_1 +16 -0
- data/test/statements/overlapped_by/crit_2 +16 -0
- data/test/statements/overlapped_by/crit_3 +16 -0
- data/test/statements/overlapped_by/crit_4 +16 -0
- data/test/statements/overlaps/crit_1 +16 -0
- data/test/statements/overlaps/crit_2 +16 -0
- data/test/statements/overlaps/crit_3 +16 -0
- data/test/statements/overlaps/crit_4 +16 -0
- data/test/statements/person/anno_has_arguments +4 -0
- data/test/statements/person/anno_multiple_upstreams +11 -0
- data/test/statements/person/count_2 +3 -0
- data/test/statements/person/crit_1 +7 -0
- data/test/statements/person_filter/count_1 +20 -0
- data/test/statements/person_filter/crit_1 +20 -0
- data/test/statements/person_filter/crit_2 +13 -0
- data/test/statements/person_filter/crit_3 +13 -0
- data/test/statements/person_filter/crit_4 +13 -0
- data/test/statements/place_of_service_code/anno_has_upstreams +8 -0
- data/test/statements/place_of_service_code/anno_no_arguments +3 -0
- data/test/statements/place_of_service_code/crit_basic +4 -0
- data/test/statements/place_of_service_filter/anno_1 +8 -0
- data/test/statements/procedure_occurrence/anno_has_arguments +8 -0
- data/test/statements/procedure_occurrence/anno_multiple_upstreams +11 -0
- data/test/statements/procedure_occurrence/count_gender +7 -0
- data/test/statements/procedure_occurrence/count_icd9 +7 -0
- data/test/statements/procedure_occurrence/count_started_by +19 -0
- data/test/statements/provenance/anno_1 +8 -0
- data/test/statements/provenance/anno_bad_keyword +10 -0
- data/test/statements/provenance/count_1 +8 -0
- data/test/statements/provenance/count_2 +8 -0
- data/test/statements/provider_filter/anno_1 +10 -0
- data/test/statements/race/anno_1 +8 -0
- data/test/statements/race/anno_2 +3 -0
- data/test/statements/race/crit_1 +4 -0
- data/test/statements/read/anno_1 +4 -0
- data/test/statements/read/crit_1 +8 -0
- data/test/statements/recall/anno_1 +16 -0
- data/test/statements/recall/anno_2 +18 -0
- data/test/statements/recall/anno_3 +4 -0
- data/test/statements/recall/anno_4 +3 -0
- data/test/statements/recall/anno_5 +5 -0
- data/test/statements/recall/anno_6 +107 -0
- data/test/statements/recall/crit_1 +17 -0
- data/test/statements/recall/crit_2 +14 -0
- data/test/statements/recall/crit_3 +16 -0
- data/test/statements/recall/crit_cte_1 +17 -0
- data/test/statements/recall/crit_cte_2 +17 -0
- data/test/statements/recall/crit_nested_perm_0 +28 -0
- data/test/statements/revenue_code/crit_1 +4 -0
- data/test/statements/revenue_code/crit_basic +4 -0
- data/test/statements/revenue_code/domains_1 +4 -0
- data/test/statements/revenue_code/domains_drg100 +4 -0
- data/test/statements/rxnorm/crit_1 +4 -0
- data/test/statements/snomed/crit_1 +4 -0
- data/test/statements/started_by/crit_1 +16 -0
- data/test/statements/started_by/crit_2 +16 -0
- data/test/statements/started_by/crit_3 +16 -0
- data/test/statements/sum/anno_1 +3 -0
- data/test/statements/sum/anno_2 +8 -0
- data/test/statements/sum/num_1 +11 -0
- data/test/statements/sum/num_2 +15 -0
- data/test/statements/sum/num_3 +7 -0
- data/test/statements/time_window/anno_1 +7 -0
- data/test/statements/time_window/anno_2 +11 -0
- data/test/statements/time_window/anno_3 +11 -0
- data/test/statements/time_window/anno_4 +12 -0
- data/test/statements/time_window/anno_5 +15 -0
- data/test/statements/time_window/crit_1 +11 -0
- data/test/statements/time_window/crit_2 +11 -0
- data/test/statements/time_window/crit_3 +11 -0
- data/test/statements/time_window/crit_4 +11 -0
- data/test/statements/trim_date_end/crit_1 +16 -0
- data/test/statements/trim_date_end/crit_2 +16 -0
- data/test/statements/trim_date_end/crit_3 +16 -0
- data/test/statements/trim_date_end/crit_at_least +17 -0
- data/test/statements/trim_date_end/crit_occurrences_1 +17 -0
- data/test/statements/trim_date_end/crit_occurrences_2 +17 -0
- data/test/statements/trim_date_end/crit_within +17 -0
- data/test/statements/trim_date_start/crit_1 +16 -0
- data/test/statements/trim_date_start/crit_2 +16 -0
- data/test/statements/trim_date_start/crit_3 +16 -0
- data/test/statements/trim_date_start/crit_at_least +17 -0
- data/test/statements/trim_date_start/crit_occurrences_1 +17 -0
- data/test/statements/trim_date_start/crit_occurrences_2 +17 -0
- data/test/statements/trim_date_start/crit_within +17 -0
- data/test/statements/union/anno_1 +11 -0
- data/test/statements/union/anno_2 +18 -0
- data/test/statements/union/anno_3 +3 -0
- data/test/statements/union/anno_4 +4 -0
- data/test/statements/union/anno_5 +7 -0
- data/test/statements/union/anno_6 +10 -0
- data/test/statements/union/count_1 +11 -0
- data/test/statements/union/count_2 +11 -0
- data/test/statements/union/count_3 +15 -0
- data/test/statements/union/count_4 +18 -0
- data/test/statements/union/count_5 +18 -0
- data/test/statements/union/scanno_1 +3 -0
- data/test/statements/union/scanno_2 +18 -0
- data/test/statements/visit_occurrence/anno_1 +11 -0
- data/test/statements/visit_occurrence/anno_2 +8 -0
- data/test/statements/visit_occurrence/crit_1 +7 -0
- data/test/statements/visit_occurrence/crit_2 +7 -0
- data/test/statements/visit_occurrence/crit_3 +3 -0
- metadata +2016 -150
- data/lib/conceptql/behaviors/debuggable.rb +0 -70
- data/lib/conceptql/behaviors/dottable.rb +0 -103
- data/lib/conceptql/behaviors/preppable.rb +0 -20
- data/lib/conceptql/converter.rb +0 -65
- data/lib/conceptql/debugger.rb +0 -48
- data/lib/conceptql/fake_grapher.rb +0 -20
- data/lib/conceptql/graph.rb +0 -52
- data/lib/conceptql/graph_nodifier.rb +0 -203
- data/lib/conceptql/operators/concept.rb +0 -70
- data/lib/conceptql/operators/snomed_condition.rb +0 -26
- data/lib/conceptql/operators/visit.rb +0 -15
- data/lib/conceptql/tree.rb +0 -53
- data/lib/conceptql/utils/temp_table.rb +0 -72
- data/spec/conceptql/behaviors/dottable_spec.rb +0 -99
- data/spec/conceptql/converter_spec.rb +0 -51
- data/spec/conceptql/date_adjuster_spec.rb +0 -68
- data/spec/conceptql/operators/after_spec.rb +0 -16
- data/spec/conceptql/operators/before_spec.rb +0 -16
- data/spec/conceptql/operators/casting_operator_spec.rb +0 -68
- data/spec/conceptql/operators/complement_spec.rb +0 -15
- data/spec/conceptql/operators/concept_spec.rb +0 -40
- data/spec/conceptql/operators/condition_type_spec.rb +0 -128
- data/spec/conceptql/operators/contains_spec.rb +0 -19
- data/spec/conceptql/operators/cpt_spec.rb +0 -29
- data/spec/conceptql/operators/date_range_spec.rb +0 -33
- data/spec/conceptql/operators/death_spec.rb +0 -10
- data/spec/conceptql/operators/during_spec.rb +0 -30
- data/spec/conceptql/operators/except_spec.rb +0 -15
- data/spec/conceptql/operators/first_spec.rb +0 -35
- data/spec/conceptql/operators/from_spec.rb +0 -13
- data/spec/conceptql/operators/gender_spec.rb +0 -27
- data/spec/conceptql/operators/hcpcs_spec.rb +0 -29
- data/spec/conceptql/operators/icd10_spec.rb +0 -34
- data/spec/conceptql/operators/icd9_procedure_spec.rb +0 -29
- data/spec/conceptql/operators/icd9_spec.rb +0 -34
- data/spec/conceptql/operators/intersect_spec.rb +0 -28
- data/spec/conceptql/operators/last_spec.rb +0 -36
- data/spec/conceptql/operators/loinc_spec.rb +0 -29
- data/spec/conceptql/operators/medcode_procedure_spec.rb +0 -34
- data/spec/conceptql/operators/medcode_spec.rb +0 -34
- data/spec/conceptql/operators/observation_period_spec.rb +0 -10
- data/spec/conceptql/operators/occurrence_spec.rb +0 -87
- data/spec/conceptql/operators/overlapped_by_spec.rb +0 -32
- data/spec/conceptql/operators/overlaps_spec.rb +0 -21
- data/spec/conceptql/operators/person_filter_spec.rb +0 -15
- data/spec/conceptql/operators/person_spec.rb +0 -10
- data/spec/conceptql/operators/place_of_service_code_spec.rb +0 -24
- data/spec/conceptql/operators/procedure_occurrence_spec.rb +0 -10
- data/spec/conceptql/operators/prodcode_spec.rb +0 -35
- data/spec/conceptql/operators/query_double.rb +0 -20
- data/spec/conceptql/operators/query_double_spec.rb +0 -7
- data/spec/conceptql/operators/race_spec.rb +0 -21
- data/spec/conceptql/operators/rxnorm_spec.rb +0 -29
- data/spec/conceptql/operators/snomed_spec.rb +0 -29
- data/spec/conceptql/operators/source_vocabulary_operator_spec.rb +0 -35
- data/spec/conceptql/operators/standard_vocabulary_operator_spec.rb +0 -35
- data/spec/conceptql/operators/started_by_spec.rb +0 -22
- data/spec/conceptql/operators/temporal_operator_spec.rb +0 -51
- data/spec/conceptql/operators/time_window_spec.rb +0 -77
- data/spec/conceptql/operators/union_spec.rb +0 -21
- data/spec/conceptql/operators/visit_occurrence_spec.rb +0 -10
- data/spec/conceptql/query_spec.rb +0 -22
- data/spec/conceptql/tree_spec.rb +0 -50
- data/spec/doubles/stream_for_casting_double.rb +0 -9
- data/spec/doubles/stream_for_occurrence_double.rb +0 -25
- data/spec/doubles/stream_for_temporal_double.rb +0 -6
- data/spec/spec_helper.rb +0 -102
@@ -0,0 +1,30 @@
|
|
1
|
+
module ConceptQL
|
2
|
+
module Provenanceable
|
3
|
+
def to_concept_id(ctype)
|
4
|
+
ctype = ctype.to_s.downcase
|
5
|
+
return ctype.to_i unless ctype.to_i.zero?
|
6
|
+
position = nil
|
7
|
+
if ctype =~ /(\d|_primary)$/ && ctype.count('_') > 1
|
8
|
+
parts = ctype.split('_')
|
9
|
+
position = parts.pop.to_i
|
10
|
+
position -= 1 if needs_adjustment?(ctype)
|
11
|
+
ctype = parts.join('_')
|
12
|
+
end
|
13
|
+
retval = concept_ids[ctype.to_sym]
|
14
|
+
return retval[position] if position
|
15
|
+
return retval
|
16
|
+
end
|
17
|
+
|
18
|
+
def concept_ids
|
19
|
+
@concept_ids ||= Psych.load_file(config_dir + 'provenance.yml')
|
20
|
+
end
|
21
|
+
|
22
|
+
def config_dir
|
23
|
+
Pathname.new(__FILE__).dirname + '..' + '..' + '..' + 'config'
|
24
|
+
end
|
25
|
+
|
26
|
+
def needs_adjustment?(ctype)
|
27
|
+
ctype =~ /^outpatient/ || ctype =~ /^carrier/
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/conceptql/cli.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
+
$: << "lib"
|
2
|
+
|
1
3
|
require 'thor'
|
2
4
|
require 'sequelizer'
|
3
|
-
require 'psych'
|
4
5
|
require 'json'
|
5
6
|
require 'pp'
|
7
|
+
require 'csv'
|
6
8
|
require_relative 'query'
|
9
|
+
require_relative 'knitter'
|
7
10
|
|
8
11
|
module ConceptQL
|
9
12
|
class CLI < Thor
|
@@ -36,16 +39,23 @@ module ConceptQL
|
|
36
39
|
|
37
40
|
desc 'run_statement statement_file', 'Reads the ConceptQL statement from the statement file and executes it against the DB'
|
38
41
|
def run_statement(statement_file)
|
39
|
-
q =
|
42
|
+
q = cdb(options).query(criteria_from_file(statement_file))
|
40
43
|
puts q.sql
|
41
|
-
puts q.statement
|
42
|
-
pp q.all
|
44
|
+
puts JSON.pretty_generate(q.statement)
|
45
|
+
pp q.query.all
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "annotate_statement", "Reads in a statement and annotates it"
|
49
|
+
def annotate_statement(statement_file)
|
50
|
+
q = ConceptQL::Query.new(db(options), criteria_from_file(statement_file))
|
51
|
+
pp q.annotate
|
43
52
|
end
|
44
53
|
|
45
54
|
desc 'show_graph statement_file', 'Reads the ConceptQL statement from the file and shows the contents as a ConceptQL graph'
|
46
55
|
option :watch_file
|
47
56
|
def show_graph(file)
|
48
57
|
graph_it(criteria_from_file(file))
|
58
|
+
system('open /tmp/graph.pdf')
|
49
59
|
end
|
50
60
|
|
51
61
|
desc 'show_and_tell_file statement_file', 'Reads the ConceptQL statement from the file and shows the contents as a ConceptQL graph, then executes the statement against the DB'
|
@@ -57,26 +67,68 @@ module ConceptQL
|
|
57
67
|
|
58
68
|
desc 'fake_graph file', 'Reads the ConceptQL statement from the file and shows the contents as a ConceptQL graph'
|
59
69
|
def fake_graph(file)
|
60
|
-
require_relative '
|
61
|
-
ConceptQL::
|
70
|
+
require_relative 'fake_annotater'
|
71
|
+
annotated = ConceptQL::FakeAnnotater.new(criteria_from_file(file)).annotate
|
72
|
+
pp annotated
|
73
|
+
ConceptQL::AnnotateGrapher.new.graph_it(annotated, '/tmp/graph.pdf')
|
62
74
|
system('open /tmp/graph.pdf')
|
63
75
|
end
|
64
76
|
|
65
77
|
desc 'metadata', 'Generates the metadata.js file for the JAM'
|
66
78
|
def metadata
|
67
|
-
File.write('
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
79
|
+
File.write('metadata.js', "$metadata = #{ConceptQL.metadata(warn: true).to_json};")
|
80
|
+
File.write('metadata.json', ConceptQL.metadata.to_json)
|
81
|
+
if system("which", "json_pp", out: File::NULL, err: File::NULL)
|
82
|
+
system("cat metadata.json | json_pp", out: "metadata_pp.json")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
desc 'selection_operators', 'Generates a TSV of all the selection operators'
|
87
|
+
def selection_operators
|
88
|
+
require 'csv'
|
89
|
+
CSV.open('selection_operators.tsv', 'w', col_sep: "\t") do |csv|
|
90
|
+
csv << ["name"]
|
91
|
+
ConceptQL.metadata[:operators].values.select { |v| v[:basic_type] == :selection }.map { |v| v[:preferred_name] }.each do |name|
|
92
|
+
csv << [name]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
CSV.open('domains.tsv', 'w', col_sep: "\t") do |csv|
|
97
|
+
csv << ["name"]
|
98
|
+
ConceptQL::Operators::TABLE_COLUMNS.each do |domain, columns|
|
99
|
+
next unless columns.include?(:person_id)
|
100
|
+
next if domain.to_s =~ /era\Z/
|
101
|
+
csv << [domain]
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
desc 'knit', 'Processes ConceptQL fenced code segments and produces a Markdown file'
|
107
|
+
option :ignore_cache, type: :boolean
|
108
|
+
def knit(file)
|
109
|
+
opts = {}
|
110
|
+
if options[:ignore_cache]
|
111
|
+
opts[:cache_options] = { ignore: true }
|
112
|
+
end
|
113
|
+
ConceptQL::Knitter.new(ConceptQL::Database.new(db), file, opts).knit
|
114
|
+
end
|
115
|
+
|
116
|
+
desc 'dumpit', 'Dumps out test data into CSVs'
|
117
|
+
def dumpit(path)
|
118
|
+
path = Pathname.new(path)
|
119
|
+
path.mkpath unless path.exist?
|
120
|
+
headers_path = path + 'headers'
|
121
|
+
headers_path.mkpath unless headers_path.exist?
|
122
|
+
db.tables.each do |table|
|
123
|
+
puts "Dumping #{table}..."
|
124
|
+
ds = db[table]
|
125
|
+
rows = ds.select_map(ds.columns)
|
126
|
+
CSV.open(path + "#{table}.csv", "wb") do |csv|
|
127
|
+
rows.each { |row| csv << row }
|
128
|
+
end
|
129
|
+
CSV.open(headers_path + "#{table}.csv", "wb") do |csv|
|
130
|
+
csv << ds.columns
|
131
|
+
end
|
80
132
|
end
|
81
133
|
end
|
82
134
|
|
@@ -93,7 +145,7 @@ module ConceptQL
|
|
93
145
|
desc 'show_db_graph conceptql_id', 'Shows a graph for the conceptql statement represented by conceptql_id in the db specified by db_url'
|
94
146
|
def show_db_graph(conceptql_id)
|
95
147
|
result = fetch_conceptql(conceptql_id, options)
|
96
|
-
graph_it(result[:statement]
|
148
|
+
graph_it(result[:statement], db, result[:label])
|
97
149
|
end
|
98
150
|
|
99
151
|
def fetch_conceptql(conceptql_id)
|
@@ -105,10 +157,9 @@ module ConceptQL
|
|
105
157
|
def show_and_tell(statement, options, title = nil)
|
106
158
|
my_db = db(options)
|
107
159
|
q = ConceptQL::Query.new(my_db, statement)
|
108
|
-
|
109
|
-
puts q.statement.to_yaml
|
160
|
+
statement = q.annotate
|
110
161
|
puts 'JSON'
|
111
|
-
puts JSON.pretty_generate(
|
162
|
+
puts JSON.pretty_generate(statement)
|
112
163
|
graph_it(statement, title)
|
113
164
|
STDIN.gets
|
114
165
|
puts q.sql
|
@@ -123,20 +174,9 @@ module ConceptQL
|
|
123
174
|
end
|
124
175
|
|
125
176
|
def graph_it(statement, title = nil)
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
ConceptQL::Graph.new(statement,
|
130
|
-
dangler: true,
|
131
|
-
title: title,
|
132
|
-
db: conn
|
133
|
-
).graph_it('/tmp/graph')
|
134
|
-
system('open /tmp/graph.pdf')
|
135
|
-
if options[:watch_file]
|
136
|
-
require_relative 'debugger'
|
137
|
-
debugger = ConceptQL::Debugger.new(statement, db: conn, watch_ids: File.readlines(options[:watch_file]).map(&:to_i))
|
138
|
-
debugger.capture_results('/tmp/debug.xlsx')
|
139
|
-
end
|
177
|
+
my_db = db(options)
|
178
|
+
q = ConceptQL::Query.new(my_db, statement).annotate
|
179
|
+
ConceptQL::AnnotateGrapher.new.graph_it(q, '/tmp/graph.pdf')
|
140
180
|
end
|
141
181
|
|
142
182
|
def criteria_from_file(file)
|
@@ -151,6 +191,10 @@ module ConceptQL
|
|
151
191
|
def filtered(results)
|
152
192
|
results.each { |r| r.delete_if { |k,v| v.nil? } }
|
153
193
|
end
|
194
|
+
|
195
|
+
def cdb(options)
|
196
|
+
ConceptQL::Database.new(db(options))
|
197
|
+
end
|
154
198
|
end
|
155
199
|
end
|
156
200
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'facets/hash/revalue'
|
2
|
+
|
3
|
+
module ConceptQL
|
4
|
+
class Database
|
5
|
+
attr :db, :opts
|
6
|
+
|
7
|
+
def initialize(db, opts={})
|
8
|
+
@db = db
|
9
|
+
db_type = :impala
|
10
|
+
if db
|
11
|
+
extensions.each do |extension|
|
12
|
+
db.extension extension
|
13
|
+
end
|
14
|
+
db_type = db.database_type.to_sym
|
15
|
+
end
|
16
|
+
|
17
|
+
@opts = opts.revalue { |v| v ? v.to_sym : v }
|
18
|
+
@opts[:data_model] ||= :omopv4
|
19
|
+
@opts[:database_type] ||= db_type
|
20
|
+
db.set(db_opts) if db.respond_to?(:set)
|
21
|
+
end
|
22
|
+
|
23
|
+
def query(statement, opts={})
|
24
|
+
Query.new(db, statement, @opts.merge(opts))
|
25
|
+
end
|
26
|
+
|
27
|
+
def db_opts
|
28
|
+
db_opts = {}
|
29
|
+
if opts[:database_type] == :impala
|
30
|
+
db_opts.merge!(runtime_filter_mode: "OFF")
|
31
|
+
if mem_limit = (opts[:impala_mem_limit] || ENV['IMPALA_MEM_LIMIT'])
|
32
|
+
db_opts.merge!(mem_limit: mem_limit)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
db_opts
|
36
|
+
end
|
37
|
+
|
38
|
+
def extensions
|
39
|
+
[:date_arithmetic, :error_sql]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -3,9 +3,13 @@ require_relative '../conceptql'
|
|
3
3
|
module ConceptQL
|
4
4
|
# Used to translate a string of terse date adjustments into a set of adjustments that are compatible with most RDBMSs
|
5
5
|
class DateAdjuster
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
|
7
|
+
VALID_INPUT = /\A#{Regexp.union([/START/i, /END/i, /\d{4}-\d{2}-\d{2}/, /([-+]?\d+[dmy]?)+/, /\s*/])}\z/
|
8
|
+
|
9
|
+
attr :str, :manipulator
|
10
|
+
def initialize(str, opts = {})
|
11
|
+
@str = str || ""
|
12
|
+
@manipulator = opts[:manipulator] || Sequel
|
9
13
|
end
|
10
14
|
|
11
15
|
# Returns an array of strings that represent date modifiers
|
@@ -13,6 +17,21 @@ module ConceptQL
|
|
13
17
|
@adjustments ||= parse(str)
|
14
18
|
end
|
15
19
|
|
20
|
+
def adjust(column, reverse=false)
|
21
|
+
return Sequel.expr(:end_date) if str.downcase == 'end'
|
22
|
+
return Sequel.expr(:start_date) if str.downcase == 'start'
|
23
|
+
return Sequel.cast(Date.parse(str).strftime('%Y-%m-%d'), Date) if str =~ /^\d{4}-\d{2}-\d{2}$/
|
24
|
+
adjusted_date = adjustments.inject(Sequel.expr(column)) do |sql, (units, quantity)|
|
25
|
+
quantity *= -1 if reverse
|
26
|
+
if quantity > 0
|
27
|
+
manipulator.date_add(sql, units => quantity)
|
28
|
+
else
|
29
|
+
manipulator.date_sub(sql, units => quantity.abs)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
Sequel.cast(adjusted_date, Date)
|
33
|
+
end
|
34
|
+
|
16
35
|
private
|
17
36
|
def lookup
|
18
37
|
{
|
@@ -23,7 +42,6 @@ module ConceptQL
|
|
23
42
|
end
|
24
43
|
|
25
44
|
def parse(str)
|
26
|
-
ConceptQL.logger.debug(str)
|
27
45
|
return [] if str.nil? || str.empty?
|
28
46
|
return [[lookup['d'], str.to_i]] if str.match(/^[-+]?\d+$/)
|
29
47
|
str.downcase.scan(/([-+]?\d*[dmy])/).map do |adjustment|
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'facets/array/recurse'
|
2
|
+
require 'facets/hash/deep_rekey'
|
3
|
+
|
4
|
+
module ConceptQL
|
5
|
+
class FakeAnnotater
|
6
|
+
attr :statement
|
7
|
+
|
8
|
+
DOMAINS = {
|
9
|
+
# Conditions
|
10
|
+
condition: :condition_occurrence,
|
11
|
+
primary_diagnosis: :condition_occurrence,
|
12
|
+
icd9: :condition_occurrence,
|
13
|
+
icd10: :condition_occurrence,
|
14
|
+
condition_type: :condition_occurrence,
|
15
|
+
medcode: :condition_occurrence,
|
16
|
+
|
17
|
+
# Procedures
|
18
|
+
procedure: :procedure_occurrence,
|
19
|
+
cpt: :procedure_occurrence,
|
20
|
+
drg: :procedure_occurrence,
|
21
|
+
hcpcs: :procedure_occurrence,
|
22
|
+
icd9_procedure: :procedure_occurrence,
|
23
|
+
medcode_procedure: :procedure_occurrence,
|
24
|
+
|
25
|
+
# Procedure Cost
|
26
|
+
procedure_cost: :procedure_cost,
|
27
|
+
|
28
|
+
# Visits
|
29
|
+
visit_occurrence: :visit_occurrence,
|
30
|
+
place_of_service_code: :visit_occurrence,
|
31
|
+
|
32
|
+
# Person
|
33
|
+
person: :person,
|
34
|
+
gender: :person,
|
35
|
+
race: :person,
|
36
|
+
|
37
|
+
# Payer
|
38
|
+
payer: :payer_plan_period,
|
39
|
+
|
40
|
+
# Death
|
41
|
+
death: :death,
|
42
|
+
|
43
|
+
# Observation
|
44
|
+
loinc: :observation,
|
45
|
+
from_seer_visits: :observation,
|
46
|
+
to_seer_visits: :observation,
|
47
|
+
|
48
|
+
# Drug
|
49
|
+
drug_exposure: :drug_exposure,
|
50
|
+
rxnorm: :drug_exposure,
|
51
|
+
drug_cost: :drug_cost,
|
52
|
+
drug_type_concept_id: :drug_exposure,
|
53
|
+
drug_type_concept: :drug_exposure,
|
54
|
+
prodcode: :drug_exposure,
|
55
|
+
|
56
|
+
# Date Operators
|
57
|
+
date_range: :date,
|
58
|
+
|
59
|
+
# Miscelaneous operators
|
60
|
+
concept: :misc,
|
61
|
+
vsac: :misc,
|
62
|
+
numeric: :person,
|
63
|
+
algorithm: :misc,
|
64
|
+
}
|
65
|
+
|
66
|
+
def initialize(statement)
|
67
|
+
@statement = statement
|
68
|
+
end
|
69
|
+
|
70
|
+
def annotate
|
71
|
+
traverse(statement)
|
72
|
+
end
|
73
|
+
|
74
|
+
def traverse(stmt)
|
75
|
+
stmt.recurse(Array, Hash) do |arr_or_hash|
|
76
|
+
if arr_or_hash.is_a?(Array)
|
77
|
+
arr_or_hash.unshift(arr_or_hash.shift.to_sym)
|
78
|
+
domains = DOMAINS[arr_or_hash.first.to_sym]
|
79
|
+
unless domains
|
80
|
+
domains = previous_domains(arr_or_hash)
|
81
|
+
else
|
82
|
+
domains = [domains].flatten
|
83
|
+
end
|
84
|
+
annotate_hash = if arr_or_hash.last.is_a?(Hash)
|
85
|
+
arr_or_hash.last[:annotation] ||= {}
|
86
|
+
else
|
87
|
+
annotate_hash = {}
|
88
|
+
arr_or_hash.push(annotation: annotate_hash)
|
89
|
+
annotate_hash
|
90
|
+
end
|
91
|
+
annotate_hash[:counts] = {}
|
92
|
+
domains.each do |domain|
|
93
|
+
annotate_hash[:counts][domain] = {}
|
94
|
+
end
|
95
|
+
save_domains(arr_or_hash)
|
96
|
+
else
|
97
|
+
arr_or_hash.deep_rekey!
|
98
|
+
arr_or_hash[:annotation] ||= {}
|
99
|
+
end
|
100
|
+
arr_or_hash
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def previous_domains(arr)
|
105
|
+
extract = if arr.first == :recall
|
106
|
+
[fetch_domains(arr[1])].compact
|
107
|
+
elsif arr.last.is_a?(Hash) && arr.last[:left]
|
108
|
+
[arr.last[:left]]
|
109
|
+
else
|
110
|
+
arr.select { |e| e.is_a?(Array) }
|
111
|
+
end
|
112
|
+
extract.map { |e| e.last[:annotation][:counts].keys }.flatten.compact.uniq
|
113
|
+
end
|
114
|
+
|
115
|
+
def fetch_domains(label)
|
116
|
+
recorded_domains[label]
|
117
|
+
end
|
118
|
+
|
119
|
+
def save_domains(op)
|
120
|
+
label = op.last[:label]
|
121
|
+
return unless label
|
122
|
+
recorded_domains[label] = op
|
123
|
+
end
|
124
|
+
|
125
|
+
def recorded_domains
|
126
|
+
@recorded_domains ||= {}
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,221 @@
|
|
1
|
+
require 'digest'
|
2
|
+
require 'json'
|
3
|
+
require_relative 'annotate_grapher'
|
4
|
+
require_relative 'fake_annotater'
|
5
|
+
|
6
|
+
module ConceptQL
|
7
|
+
class Knitter
|
8
|
+
attr :file, :db, :options
|
9
|
+
CONCEPTQL_CHUNK_START = /```ConceptQL/
|
10
|
+
RESULT_KEYS = %i(person_id criterion_id criterion_domain start_date end_date source_value)
|
11
|
+
|
12
|
+
def initialize(db, file, options = {})
|
13
|
+
@file = Pathname.new(file)
|
14
|
+
raise "File must end in .md.cql!" unless file =~ /\.md\.cql$/
|
15
|
+
@db = db
|
16
|
+
@options = options.dup
|
17
|
+
end
|
18
|
+
|
19
|
+
def knit
|
20
|
+
lines = file.readlines
|
21
|
+
chunks = lines.slice_before { |l| l =~ CONCEPTQL_CHUNK_START }.to_a
|
22
|
+
outputs = []
|
23
|
+
outputs << chunks.shift unless chunks.first =~ CONCEPTQL_CHUNK_START
|
24
|
+
outputs += chunks.map do |chunk|
|
25
|
+
cql, *remainder = chunk.slice_after { |l| l =~ /^```\n$/ }.to_a
|
26
|
+
cql = ConceptQLChunk.new(cql, cache, self)
|
27
|
+
[cql.output, remainder].flatten
|
28
|
+
end.flatten
|
29
|
+
File.write(file.to_s.sub(/.cql$/, ''), outputs.join)
|
30
|
+
end
|
31
|
+
|
32
|
+
def diagram_dir
|
33
|
+
@diagram_dir ||= (dir + file.basename('.md.cql')).tap { |d| d.rmtree if d.exist? ; d.mkpath }
|
34
|
+
end
|
35
|
+
|
36
|
+
def diagram_relative_path
|
37
|
+
@diagram_relative_path ||= diagram_dir.basename
|
38
|
+
end
|
39
|
+
|
40
|
+
def diagram_path(stmt, &block)
|
41
|
+
png_contents = cache.fetch_or_create(stmt.inspect, &block)
|
42
|
+
file_name = (cache.hash_it(stmt) + ".png")
|
43
|
+
new_path = (diagram_dir + file_name)
|
44
|
+
new_path.write(png_contents)
|
45
|
+
diagram_relative_path + file_name
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
class ConceptQLChunk
|
50
|
+
attr :lines, :cache, :knitter
|
51
|
+
def initialize(lines, cache, knitter)
|
52
|
+
@cache = cache
|
53
|
+
@lines = lines.to_a
|
54
|
+
@knitter = knitter
|
55
|
+
end
|
56
|
+
|
57
|
+
def output
|
58
|
+
diagram_markup
|
59
|
+
cache.fetch_or_create(lines.join) do
|
60
|
+
create_output
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def titleize(title)
|
65
|
+
return '' unless title
|
66
|
+
title.map(&:strip).join(" ").gsub('#', '')
|
67
|
+
end
|
68
|
+
|
69
|
+
def make_statement_and_title
|
70
|
+
lines.shift
|
71
|
+
lines.pop
|
72
|
+
title, statement = lines.slice_before { |l| l =~ /^\s*#/ }.to_a
|
73
|
+
if statement.nil?
|
74
|
+
statement = title
|
75
|
+
title = nil
|
76
|
+
end
|
77
|
+
@statement = eval(statement.join)
|
78
|
+
@title = titleize(title)
|
79
|
+
end
|
80
|
+
|
81
|
+
def statement
|
82
|
+
@statement || make_statement_and_title
|
83
|
+
@statement
|
84
|
+
end
|
85
|
+
|
86
|
+
def title
|
87
|
+
@title || make_statement_and_title
|
88
|
+
@title
|
89
|
+
end
|
90
|
+
|
91
|
+
def create_output
|
92
|
+
output = []
|
93
|
+
output << title unless title.empty?
|
94
|
+
output << '' unless title.empty?
|
95
|
+
output << "```JSON"
|
96
|
+
output << ''
|
97
|
+
output << statement.to_json
|
98
|
+
output << ''
|
99
|
+
output << "```"
|
100
|
+
output << ''
|
101
|
+
output << diagram_markup
|
102
|
+
output << ''
|
103
|
+
output << table
|
104
|
+
output << ''
|
105
|
+
output.compact.join("\n")
|
106
|
+
end
|
107
|
+
|
108
|
+
def diagram_markup
|
109
|
+
diagram_path = diagram(statement)
|
110
|
+
return "![#{title}](#{diagram_path})" if diagram_path
|
111
|
+
nil
|
112
|
+
end
|
113
|
+
|
114
|
+
def table
|
115
|
+
results = nil
|
116
|
+
begin
|
117
|
+
results = query(statement).query.limit(10).all
|
118
|
+
rescue
|
119
|
+
puts $!.message
|
120
|
+
puts $!.backtrace.join("\n")
|
121
|
+
end
|
122
|
+
|
123
|
+
if results.nil?
|
124
|
+
"```No Results. Statement is experimental.```"
|
125
|
+
else
|
126
|
+
if results.empty?
|
127
|
+
"```No Results found.```"
|
128
|
+
else
|
129
|
+
resultify(results)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def resultify(results)
|
135
|
+
rows = []
|
136
|
+
rows << rowify(RESULT_KEYS)
|
137
|
+
rows << rowify(RESULT_KEYS.map { |c| c.to_s.gsub(/./, '-')})
|
138
|
+
results.each do |result|
|
139
|
+
rows << rowify(result.values_at(*RESULT_KEYS))
|
140
|
+
end
|
141
|
+
rows.join("\n")
|
142
|
+
end
|
143
|
+
|
144
|
+
def rowify(columns)
|
145
|
+
"| #{columns.join(" | ")} |"
|
146
|
+
end
|
147
|
+
|
148
|
+
def diagram(stmt)
|
149
|
+
knitter.diagram_path(stmt) do |path_name|
|
150
|
+
annotated = nil
|
151
|
+
begin
|
152
|
+
annotated = query(stmt).annotate
|
153
|
+
rescue
|
154
|
+
puts $!.message
|
155
|
+
puts $!.backtrace.join("\n")
|
156
|
+
p stmt
|
157
|
+
annotated = FakeAnnotater.new(stmt).annotate
|
158
|
+
end
|
159
|
+
ConceptQL::AnnotateGrapher.new.graph_it(annotated, path_name, output_type: 'png')
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def query(stmt)
|
164
|
+
knitter.db.query(stmt)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
class Cache
|
169
|
+
attr :db, :options, :file
|
170
|
+
|
171
|
+
def initialize(db, file, options = {})
|
172
|
+
@db = db
|
173
|
+
@file = file
|
174
|
+
@options = options.nil? ? {} : options.dup
|
175
|
+
remove_cache if @options[:ignore]
|
176
|
+
end
|
177
|
+
|
178
|
+
def remove_cache
|
179
|
+
cache_dir.rmtree
|
180
|
+
@cache_dir = nil
|
181
|
+
end
|
182
|
+
|
183
|
+
def cache_file_path(str)
|
184
|
+
cache_dir + hash_it(str)
|
185
|
+
end
|
186
|
+
|
187
|
+
def fetch_or_create(str, &block)
|
188
|
+
cache_file = cache_file_path(str)
|
189
|
+
return cache_file.read if cache_file.exist?
|
190
|
+
#p ["cache miss for", str, cache_file]
|
191
|
+
output = block.call(cache_file)
|
192
|
+
cache_file.write(output) unless cache_file.exist?
|
193
|
+
cache_file.read
|
194
|
+
end
|
195
|
+
|
196
|
+
def cache_dir
|
197
|
+
@cache_dir ||= (file.dirname + ".#{hash_it(hash_fodder)}").tap { |d| d.mkpath }
|
198
|
+
end
|
199
|
+
|
200
|
+
def hash_fodder
|
201
|
+
(db_opts.inspect + file.basename.to_s)
|
202
|
+
end
|
203
|
+
|
204
|
+
def db_opts
|
205
|
+
db.opts.values_at(*%i(adapter user password host database search_path))
|
206
|
+
end
|
207
|
+
|
208
|
+
def hash_it(str)
|
209
|
+
Digest::SHA256.hexdigest("#{str}")
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def dir
|
214
|
+
file.dirname
|
215
|
+
end
|
216
|
+
|
217
|
+
def cache
|
218
|
+
@cache ||= Cache.new(db.db, file, options[:cache_options])
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|