Skip to content
Snippets Groups Projects
Commit 4e2788b4 authored by Josef Hardi's avatar Josef Hardi
Browse files

feature: adding observation_period table

parent 7ffa6726
No related branches found
No related tags found
No related merge requests found
......@@ -109,6 +109,20 @@ class Optum:
}
}
_OBSERVATION_PERIOD = """
observation_period AS (
SELECT DISTINCT
t0.Patid AS person_id,
t0.Eligeff AS observation_period_start_date,
t0.Eligend AS observation_period_end_date,
CAST(CASE
WHEN (STRPOS(t0.Zipcode_5, '_') = 0) THEN t0.Zipcode_5
ELSE SUBSTR(t0.Zipcode_5, 1, STRPOS(t0.Zipcode_5, '_') - 1)
END AS INT64) AS zip
FROM
{person_table} AS t0
)"""
_PERSON = """
person AS (
SELECT *
......@@ -117,8 +131,6 @@ class Optum:
t0.Patid AS person_id,
t0.Gdr_Cd AS gender_source_value,
t0.Yrdob AS year_of_birth,
t0.Eligeff AS observation_period_start_date,
t0.Eligend AS observation_period_end_date,
CAST(CASE
WHEN (STRPOS(t0.Zipcode_5, '_') = 0) THEN t0.Zipcode_5
ELSE SUBSTR(t0.Zipcode_5, 1, STRPOS(t0.Zipcode_5, '_') - 1)
......@@ -159,9 +171,9 @@ class Optum:
p.observation_period_end_date
FROM (
SELECT op.person_id, op.zip, op.observation_period_start_date, op.observation_period_end_date, e.condition_start_date
FROM person AS op
FROM observation_period AS op
JOIN (
SELECT p.person_id, c.condition_start_date
SELECT p.person_id, p.zip, c.condition_start_date
FROM person AS p
JOIN (
SELECT *, row_number() OVER (PARTITION BY person_id ORDER BY condition_start_date) AS ordinal
......@@ -171,7 +183,7 @@ class Optum:
ON p.person_id = c.person_id
{event_occurrence_filters}
) AS e
ON op.person_id = e.person_id
ON op.person_id = e.person_id AND op.zip = e.zip
AND e.condition_start_date >= op.observation_period_start_date
AND e.condition_start_date <= op.observation_period_end_date
{continuous_observation_filters}
......@@ -223,22 +235,23 @@ class Optum:
SELECT p.person_id, p.zip
FROM qualifying_event AS p
JOIN (
SELECT op.person_id, op.zip, c.condition_start_date
FROM person AS op
SELECT pe.person_id, pe.zip, c.condition_start_date
FROM person AS pe
JOIN (
SELECT *
FROM condition_occurrence
WHERE condition_source_value IN ({event_valueset})
) AS c
ON op.person_id = c.person_id
ON pe.person_id = c.person_id
{event_occurrence_filters}
) AS e
ON p.person_id = e.person_id
ON p.person_id = e.person_id AND p.zip = e.zip
AND e.condition_start_date >= p.observation_period_start_date
AND e.condition_start_date <= p.observation_period_end_date
{event_occurrence_before_index_date}
{event_occurrence_after_index_date}
)"""
_INCLUSION_EVENT = """
inclusion_event AS (
......@@ -258,7 +271,7 @@ class Optum:
# SQL template for getting a cohort population
_GET_COHORT_POPULATIONS = """
WITH {person}, {condition_occurrence}, {qualifying_event}, {inclusion_criteria}, {inclusion_event},
WITH {observation_period}, {person}, {condition_occurrence}, {qualifying_event}, {inclusion_criteria}, {inclusion_event},
cohort AS (
SELECT mg.person_id,
mg.zip,
......@@ -503,6 +516,8 @@ class Optum:
query = textwrap.dedent(
self._GET_COHORT_POPULATIONS.format(
observation_period=self._OBSERVATION_PERIOD.format(
person_table=self._member_table_id),
person=self._PERSON.format(
person_table=self._member_table_id,
zipcode_valueset=",".join(str(z) for z in zips)),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment