diff --git a/CHANGELOG.md b/CHANGELOG.md index d407954..ece3bdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -190,3 +190,4 @@ ## 0.5.0 - integrated oa-configurator package configuration and adapted omop-constructs to current orm-loader / omop-alchemy compatibility changes + diff --git a/pyproject.toml b/pyproject.toml index cd72a67..67ca320 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "omop-constructs" -version = "0.5.0" +version = "0.5.1" 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_mv.py b/src/omop_constructs/alchemy/episodes/modality_intent_mv.py index 950bd02..2e76eff 100644 --- a/src/omop_constructs/alchemy/episodes/modality_intent_mv.py +++ b/src/omop_constructs/alchemy/episodes/modality_intent_mv.py @@ -6,6 +6,7 @@ from ...core.constructs import register_construct from ...core.sql import select_all_columns from .modality_intent_join import episode_join +from .treatment_envelope_mv import TreatmentEnvelopeMV @register_construct class TreatmentIntentMV( @@ -58,12 +59,20 @@ class TreatmentIntentMV( sa.func.coalesce(TreatmentIntentMV.rt, False).label("rt"), sa.func.coalesce(TreatmentIntentMV.sact, False).label("sact"), sa.func.coalesce(TreatmentIntentMV.concurrent, False).label("concurrent"), + sa.and_( + sa.func.coalesce(TreatmentIntentMV.rt, False), + sa.func.coalesce(TreatmentEnvelopeMV.concurrent_chemort, False) + ).label("concurrent_rt"), ) .outerjoin( TreatmentIntentMV, TreatmentIntentMV.treatment_episode_parent_id == ConditionEpisodeMV.episode_id ) + .outerjoin( + TreatmentEnvelopeMV, + TreatmentEnvelopeMV.condition_episode == ConditionEpisodeMV.episode_id + ) ) @register_construct @@ -74,7 +83,11 @@ class ConditionTreatmentIntentMV( __mv_name__ = "condition_episode_intent_mv" __mv_select__ = episode_summary_select __mv_index__ = "episode_id" - __deps__ = (ConditionEpisodeMV.__mv_name__, TreatmentIntentMV.__mv_name__) + __deps__ = ( + ConditionEpisodeMV.__mv_name__, + TreatmentIntentMV.__mv_name__, + TreatmentEnvelopeMV.__mv_name__, + ) __tablename__ = __mv_name__ __table_args__ = {"extend_existing": True} @@ -98,3 +111,4 @@ class ConditionTreatmentIntentMV( rt: so.Mapped[bool | None] = so.mapped_column(sa.Boolean, nullable=True) sact: so.Mapped[bool | None] = so.mapped_column(sa.Boolean, nullable=True) concurrent: so.Mapped[bool | None] = so.mapped_column(sa.Boolean, nullable=True) + concurrent_rt: so.Mapped[bool | None] = so.mapped_column(sa.Boolean, nullable=True) diff --git a/tests/artifacts/construct_registry_schema.csv b/tests/artifacts/construct_registry_schema.csv index ccb6b12..874f999 100644 --- a/tests/artifacts/construct_registry_schema.csv +++ b/tests/artifacts/construct_registry_schema.csv @@ -20,21 +20,22 @@ bsa_dx_mv,omop_constructs.alchemy.events.dx_linked_event_mv,BSADxMV,materialized bsa_dx_mv,omop_constructs.alchemy.events.dx_linked_event_mv,BSADxMV,materialized_view,condition_episode_mv,person_id,,12,episode_start_date,DATE,true,false bsa_dx_mv,omop_constructs.alchemy.events.dx_linked_event_mv,BSADxMV,materialized_view,condition_episode_mv,person_id,,13,episode_end_date,DATE,true,false bsa_dx_mv,omop_constructs.alchemy.events.dx_linked_event_mv,BSADxMV,materialized_view,condition_episode_mv,person_id,,14,episode_delta_days,INTEGER,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,1,mv_id,INTEGER,false,true -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,2,episode_id,INTEGER,false,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,3,person_id,INTEGER,false,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,4,episode_concept_id,INTEGER,false,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,5,episode_label,VARCHAR,false,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,6,episode_start_date,DATE,false,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,7,episode_end_date,DATE,false,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,8,treatment_episode_id,INTEGER,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,9,treatment_episode_start_date,DATE,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,10,treatment_episode_end_date,DATE,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,11,treatment_intent_concept_id,INTEGER,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,12,treatment_intent_name,VARCHAR,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,13,rt,BOOLEAN,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,14,sact,BOOLEAN,true,false -condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv,episode_id,,15,concurrent,BOOLEAN,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,1,mv_id,INTEGER,false,true +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,2,episode_id,INTEGER,false,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,3,person_id,INTEGER,false,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,4,episode_concept_id,INTEGER,false,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,5,episode_label,VARCHAR,false,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,6,episode_start_date,DATE,false,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,7,episode_end_date,DATE,false,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,8,treatment_episode_id,INTEGER,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,9,treatment_episode_start_date,DATE,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,10,treatment_episode_end_date,DATE,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,11,treatment_intent_concept_id,INTEGER,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,12,treatment_intent_name,VARCHAR,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,13,rt,BOOLEAN,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,14,sact,BOOLEAN,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,15,concurrent,BOOLEAN,true,false +condition_episode_intent_mv,omop_constructs.alchemy.episodes.modality_intent_mv,ConditionTreatmentIntentMV,materialized_view,condition_episode_mv|episode_treatment_mv|treatment_envelope_mv,episode_id,,16,concurrent_rt,BOOLEAN,true,false condition_episode_mv,omop_constructs.alchemy.episodes.condition_episode_mv,ConditionEpisodeMV,materialized_view,,episode_id,,1,episode_id,INTEGER,false,true condition_episode_mv,omop_constructs.alchemy.episodes.condition_episode_mv,ConditionEpisodeMV,materialized_view,,episode_id,,2,person_id,INTEGER,false,false condition_episode_mv,omop_constructs.alchemy.episodes.condition_episode_mv,ConditionEpisodeMV,materialized_view,,episode_id,,3,episode_concept_id,INTEGER,false,false