... | ... | @@ -2,21 +2,21 @@ |
|
|
|
|
|
:information_source: This table records the very first visit and very last visit of a person. The information is retrieved from Encounter resources.
|
|
|
|
|
|
:information_source: The original data is written in the `cds_etl_helper.DATA_PERSISTANT_MAP` table, which was read from Encounter FHIR resource.
|
|
|
:information_source: The original data is written in the `cds_etl_helper.POST_PROCESS_MAP` table, which was read from Encounter FHIR resource.
|
|
|
|
|
|
## Encounter to OBSERVATION_PERIOD
|
|
|
## POST_PROCESS_MAP to OBSERVATION_PERIOD
|
|
|
| Source | Target | Comments |
|
|
|
| :---------------- | :---------------------- | :------------------------------------------------- |
|
|
|
||observation_period_id|This id is generated automatically.|
|
|
|
|omop_id|person_id|This id represents the person_id of the person table.|
|
|
|
|data_one|observation_period_start_date |the very first visit|
|
|
|
|data_two|observation_period_end_date| the very last visit |
|
|
|
||period_type_concept_id|default value: 44818701 (Period covering healthcare encounters)|
|
|
|
||period_type_concept_id|default value: 44814724 (Period covering healthcare encounters)|
|
|
|
|
|
|
## Example
|
|
|
|observation_period_id|person_id|observation_period_start_date|observation_period_end_date|period_type_concept_id|
|
|
|
|-----|-----|-----|-----|-----|
|
|
|
|1|1|2018-09-17|2018-09-26|44818701|
|
|
|
|1|1|2018-09-17|2018-09-26|44814724|
|
|
|
|
|
|
## SQL Script
|
|
|
```sql
|
... | ... | @@ -24,13 +24,13 @@ DO |
|
|
$$
|
|
|
DECLARE v_rowCount int;
|
|
|
BEGIN
|
|
|
WITH data_persistant
|
|
|
WITH post_process
|
|
|
AS (
|
|
|
SELECT omop_id,
|
|
|
TO_DATE(min(data_one), 'YYYY-MM-DD') AS startDate,
|
|
|
TO_DATE(max(data_two), 'YYYY-MM-DD') AS endDate,
|
|
|
44818701
|
|
|
FROM cds_etl_helper.data_persistant_map
|
|
|
44814724
|
|
|
FROM cds_etl_helper.post_process_map
|
|
|
WHERE type = 'ENCOUNTER'
|
|
|
AND omop_table = 'observation_period'
|
|
|
GROUP BY omop_id
|
... | ... | @@ -39,17 +39,17 @@ upsert |
|
|
AS (
|
|
|
UPDATE observation_period op
|
|
|
SET observation_period_start_date = CASE
|
|
|
WHEN observation_period_start_date > dp.startDate
|
|
|
THEN dp.startDate
|
|
|
WHEN observation_period_start_date > pp.startDate
|
|
|
THEN pp.startDate
|
|
|
ELSE observation_period_start_date
|
|
|
END,
|
|
|
observation_period_end_date = CASE
|
|
|
WHEN observation_period_end_date < dp.endDate
|
|
|
THEN dp.endDate
|
|
|
WHEN observation_period_end_date < pp.endDate
|
|
|
THEN pp.endDate
|
|
|
ELSE observation_period_end_date
|
|
|
END
|
|
|
FROM data_persistant dp
|
|
|
WHERE dp.omop_id = op.person_id RETURNING op.*
|
|
|
FROM post_process pp
|
|
|
WHERE pp.omop_id = op.person_id RETURNING op.*
|
|
|
)
|
|
|
INSERT INTO Observation_Period (
|
|
|
person_id,
|
... | ... | @@ -58,11 +58,11 @@ INSERT INTO Observation_Period ( |
|
|
period_type_concept_id
|
|
|
)
|
|
|
SELECT *
|
|
|
FROM data_persistant
|
|
|
FROM post_process
|
|
|
WHERE NOT EXISTS (
|
|
|
SELECT 1
|
|
|
FROM upsert
|
|
|
WHERE upsert.person_id = data_persistant.omop_id
|
|
|
WHERE upsert.person_id = post_process.omop_id
|
|
|
);
|
|
|
|
|
|
GET DIAGNOSTICS v_rowCount = ROW_COUNT;
|
... | ... | |