diff --git a/CHANGELOG.md b/CHANGELOG.md index 3343af6..93dfb42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -198,4 +198,7 @@ - adding separate distinct handling for joining surgeries in with episodes when there is an explicit link to a specific diagnosis ## 0.5.4 -- fix for episode intent - this actually modifies procedure, not episode \ No newline at end of file +- fix for episode intent - this actually modifies procedure, not episode + +# 0.5.5 +- actual fix for episode intent via parent \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 435d8ed..f692f6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "omop-constructs" -version = "0.5.4" +version = "0.5.5" description = "For building complex constructs on top of the omop-alchemy library." readme = "README.md" authors = [ diff --git a/src/omop_constructs/alchemy/episodes/modality_intent_join.py b/src/omop_constructs/alchemy/episodes/modality_intent_join.py index e10e7db..5fa3140 100644 --- a/src/omop_constructs/alchemy/episodes/modality_intent_join.py +++ b/src/omop_constructs/alchemy/episodes/modality_intent_join.py @@ -1,8 +1,11 @@ import sqlalchemy as sa -from omop_alchemy.cdm.model import Episode, Episode_Event, Drug_Exposure, Procedure_Occurrence +import sqlalchemy.orm as so +from omop_alchemy.cdm.model import Episode, Episode_Event, Measurement, Drug_Exposure, Procedure_Occurrence, Concept from omop_semantics.runtime.default_valuesets import runtime from ...semantics import registry -from ..modifiers.procedure_modifier_mv import ModifiedProcedure + +intent_concept = so.aliased(Concept, name='intent_concept') +regimen_or_parent = so.aliased(Episode, name='regimen_or_parent') modality_sact = ( sa.select( @@ -44,20 +47,27 @@ Episode.episode_id, Episode.episode_start_date, Episode.episode_end_date, - Episode.episode_parent_id, - ModifiedProcedure.intent_concept_id.label('measurement_concept_id'), - ModifiedProcedure.intent_concept.label('concept_name'), + sa.case( + ( + regimen_or_parent.episode_concept_id == runtime.types.treatment_episode_types.treatment_regimen, + regimen_or_parent.episode_parent_id + ), + else_=regimen_or_parent.episode_id + ).label('episode_parent_id'), + Measurement.measurement_concept_id, + intent_concept.concept_name, ) .join( - Episode_Event, + Measurement, sa.and_( - Episode_Event.episode_id==Episode.episode_id, - Episode_Event.episode_event_field_concept_id==runtime.modifiers.modifier_fields.procedure_occurrence_id + Measurement.measurement_event_id==Episode.episode_id, + Measurement.meas_event_field_concept_id==runtime.modifiers.modifier_fields.episode_id ) ) - .join(ModifiedProcedure, ModifiedProcedure.procedure_occurrence_id==Episode_Event.event_id) + .join(intent_concept, intent_concept.concept_id==Measurement.measurement_concept_id) + .join(regimen_or_parent, regimen_or_parent.episode_id==Episode.episode_parent_id, isouter=True) .filter( - ModifiedProcedure.intent_concept_id.in_(runtime.treatment_modifiers.treatment_intent.ids) + Measurement.measurement_concept_id.in_(runtime.treatment_modifiers.treatment_intent.ids) ) .subquery() ) diff --git a/uv.lock b/uv.lock index 8015143..ebae11e 100644 --- a/uv.lock +++ b/uv.lock @@ -1542,7 +1542,7 @@ postgres = [ [[package]] name = "omop-constructs" -version = "0.5.4" +version = "0.5.5" source = { editable = "." } dependencies = [ { name = "oa-configurator" },