Skip to content

Commit 228ec39

Browse files
amartinson193andreas-homewardAaron Neiderhiser
authored
Create the HCC Recapture Mart (#1190)
* Add HCC recapture mart * Adding configs * Update naming * Updating chronic conditions + fixing linting issues * fixing linting errors * linting fixes * fixing linting issues * fixing linting * fixing linting * Updating code to fix CI/CD errors * Moving flattened hierarchy to dbt_project as a value set * removing hierarchy * Adding cms_hcc_seed info * Adding file for seed * Fixing mispelling in seed * Updating dbt_project.yml * fixing datatype * Updating comment * updated hcc_recapture to work w/ fabric * fixed linting issue * fixed linting issue * fixed linting issue --------- Co-authored-by: andreas-homeward <andreas.martinson@homewardhealth.com> Co-authored-by: Aaron Neiderhiser <aaronneiderhiser@Aarons-MacBook-Air.local>
1 parent 34b604f commit 228ec39

17 files changed

Lines changed: 1242 additions & 8 deletions

dbt_project.yml

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ vars:
7171
# fhir_preprocessing_enabled: true # defaults to false
7272
# financial_pmpm_enabled: false
7373
# hedis_enabled: true # defaults to false
74+
# hcc_recapture_enabled: true # defaults to false
75+
# hcc_suspecting_enabled: true # defaults to false
7476
# insights_enabled: false
7577
# quality_measures_enabled: false
7678
# readmissions_enabled: true
@@ -138,12 +140,16 @@ seeds:
138140
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','bill_type.csv',compression=true,null_marker=true) }}"
139141
terminology__claim_type:
140142
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','claim_type.csv',compression=true,null_marker=true) }}"
143+
terminology__cms_acceptable_provider_specialty_codes:
144+
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','cms_acceptable_provider_specialty_codes.csv',compression=true,null_marker=true, headers=true) }}"
141145
terminology__cvx:
142146
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','cvx.csv',compression=true,null_marker=true) }}"
143147
terminology__ccs_services_procedures:
144148
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','ccs_services_procedures.csv',compression=true,null_marker=true) }}"
145149
terminology__discharge_disposition:
146150
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','discharge_disposition.csv',compression=true,null_marker=true) }}"
151+
terminology__electing_teaching_hospital_list:
152+
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','electing_teaching_hospital_list.csv',compression=true,null_marker=true, headers=true) }}"
147153
terminology__encounter_type:
148154
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','encounter_type.csv',compression=true,null_marker=true) }}"
149155
terminology__ethnicity:
@@ -180,6 +186,8 @@ seeds:
180186
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','medicare_dual_eligibility.csv',compression=true,null_marker=true) }}"
181187
terminology__medicare_orec:
182188
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','medicare_orec.csv',compression=true,null_marker=true) }}"
189+
terminology__medicare_provider_and_supplier_taxonomy_crosswalk:
190+
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','medicare_provider_and_supplier_taxonomy_crosswalk.csv',compression=true,null_marker=true, headers=true) }}"
183191
terminology__medicare_status:
184192
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','medicare_status.csv',compression=true,null_marker=true) }}"
185193
terminology__ms_drg_weights_los:
@@ -202,6 +210,8 @@ seeds:
202210
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','present_on_admission.csv',compression=true,null_marker=true) }}"
203211
terminology__provider:
204212
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_provider_data/0.16.0','provider.csv',compression=true,null_marker=true) }}"
213+
terminology__provider_taxonomy_unpivot:
214+
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_provider_data/0.16.0','provider_taxonomy_unpivot.csv',compression=true,null_marker=true, headers=true) }}"
205215
terminology__race:
206216
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','race.csv',compression=true,null_marker=true) }}"
207217
terminology__revenue_center:
@@ -216,16 +226,10 @@ seeds:
216226
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','snomed_ct_transitive_closures.csv',compression=true,null_marker=true) }}"
217227
terminology__snomed_icd_10_map:
218228
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','snomed_icd_10_map.csv',compression=true,null_marker=true) }}"
219-
terminology__cms_acceptable_provider_specialty_codes:
220-
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','cms_acceptable_provider_specialty_codes.csv',compression=true,null_marker=true, headers=true) }}"
221-
terminology__electing_teaching_hospital_list:
222-
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','electing_teaching_hospital_list.csv',compression=true,null_marker=true, headers=true) }}"
223-
terminology__medicare_provider_and_supplier_taxonomy_crosswalk:
224-
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','medicare_provider_and_supplier_taxonomy_crosswalk.csv',compression=true,null_marker=true, headers=true) }}"
225229
terminology__ssa_fips_state_county_crosswalk:
226230
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','ssa_fips_state_county_crosswalk.csv',compression=true,null_marker=true, headers=true) }}"
227-
terminology__provider_taxonomy_unpivot:
228-
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_provider_data/0.16.0','provider_taxonomy_unpivot.csv',compression=true,null_marker=true, headers=true) }}"
231+
terminology__:
232+
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_terminology/0.16.0','ssa_fips_state_county_crosswalk.csv',compression=true,null_marker=true, headers=true) }}"
229233

230234
value_sets:
231235
ccsr:
@@ -253,6 +257,8 @@ seeds:
253257
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_value_sets/0.16.0','cms_hcc_disease_factors.csv',compression=true,null_marker=true) }}"
254258
cms_hcc__disease_hierarchy:
255259
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_value_sets/0.16.0','cms_hcc_disease_hierarchy.csv',compression=true,null_marker=true) }}"
260+
cms_hcc__disease_hierarchy_flat:
261+
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_value_sets/0.16.1','cms_hcc_disease_hierarchy_flat.csv',compression=false,null_marker=true,headers=true) }}"
256262
cms_hcc__disease_interaction_factors:
257263
+post-hook: "{{ load_seed(var('custom_bucket_name','tuva-public-resources') ~ '/versioned_value_sets/0.16.0','cms_hcc_disease_interaction_factors.csv',compression=true,null_marker=true) }}"
258264
cms_hcc__enrollment_interaction_factors:
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{{ config(
2+
enabled = var('hcc_recapture_enabled',var('claims_enabled',var('tuva_marts_enabled',False)))) | as_bool
3+
}}
4+
5+
-- Using distinct to remove the hierarchy group and data source
6+
select distinct
7+
person_id
8+
, payer
9+
, hcc_code
10+
, risk_model_code
11+
, model_version
12+
, payment_year
13+
, recapture_flag
14+
, gap_status
15+
, suspect_hcc_flag
16+
from {{ ref('hcc_recapture__int_gap_status') }}
17+
-- Apply hierarchies
18+
where filtered_out_by_hierarchy = 0
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{{ config(
2+
enabled = var('hcc_recapture_enabled',var('claims_enabled',var('tuva_marts_enabled',False)))) | as_bool
3+
}}
4+
5+
select distinct
6+
stg.person_id
7+
, stg.payer
8+
, stg.data_source
9+
, coalesce(gap.payment_year, {{ date_part('year', 'recorded_date') }} + 1) as payment_year
10+
, stg.recorded_date
11+
, stg.claim_id
12+
, stg.rendering_npi
13+
, stg.model_version
14+
, stg.hcc_code
15+
, stg.hcc_description
16+
, stg.hcc_hierarchy_group
17+
, stg.hcc_hierarchy_group_rank
18+
, stg.suspect_hcc_flag
19+
, stg.risk_model_code
20+
, stg.eligible_claim_indicator
21+
, stg.eligible_bene
22+
, stg.reason
23+
, gap.gap_status
24+
, gap.recapture_flag
25+
from {{ ref('hcc_recapture__int_hccs') }} as stg
26+
left outer join {{ ref('hcc_recapture__gap_status') }} as gap
27+
on stg.person_id = gap.person_id
28+
and stg.payer = gap.payer
29+
and stg.model_version = gap.model_version
30+
and stg.hcc_code = gap.hcc_code
31+
and stg.suspect_hcc_flag = gap.suspect_hcc_flag
32+
and (case
33+
when gap.gap_status = 'open' then stg.collection_year + 2
34+
else stg.collection_year + 1
35+
end) = gap.payment_year
36+
where eligible_bene = 1
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{{ config(
2+
enabled = var('hcc_recapture_enabled',var('claims_enabled',var('tuva_marts_enabled',False)))) | as_bool
3+
}}
4+
5+
with monthly_hcc_counts as (
6+
select
7+
payer
8+
, payment_year
9+
, sum(closed_hccs) as closed_hccs
10+
, sum(open_hccs) as open_hccs
11+
, sum(total_hccs) as total_hccs
12+
from {{ ref('hcc_recapture__recapture_rates_monthly') }}
13+
group by
14+
payer
15+
, payment_year
16+
)
17+
18+
select
19+
payer
20+
, payment_year
21+
, closed_hccs
22+
, open_hccs
23+
, total_hccs
24+
, closed_hccs / total_hccs as recapture_rate
25+
from monthly_hcc_counts
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{{ config(
2+
enabled = var('hcc_recapture_enabled',var('claims_enabled',var('tuva_marts_enabled',False)))) | as_bool
3+
}}
4+
5+
with flatten_hccs as (
6+
-- Remove claim ID and rendering NPI
7+
select distinct
8+
person_id
9+
, payer
10+
, payment_year
11+
, cast({{ concat_custom([
12+
"payment_year"
13+
, "'-'"
14+
, date_part('month', 'recorded_date')
15+
, "'-'"
16+
, "'1'"
17+
]) }} as date) as payment_year_month
18+
, recorded_date
19+
, model_version
20+
, hcc_code
21+
, gap_status
22+
, recapture_flag
23+
, row_number() over (partition by person_id, payer, payment_year, model_version, hcc_code order by recorded_date asc) as earliest_hcc_code
24+
from {{ ref('hcc_recapture__hcc_status') }}
25+
where gap_status not in ('inappropriate for recapture', 'new')
26+
and gap_status is not null
27+
and suspect_hcc_flag = 0
28+
)
29+
30+
, monthly_hcc_counts as (
31+
select
32+
payer
33+
, payment_year
34+
, payment_year_month
35+
, sum(case when lower(gap_status) like '%closed%' then 1 else 0 end) as closed_hccs
36+
, sum(case when gap_status = 'open' then 1 else 0 end) as open_hccs
37+
, count(*) as total_hccs
38+
from flatten_hccs
39+
where earliest_hcc_code = 1
40+
group by
41+
payer
42+
, payment_year
43+
, payment_year_month
44+
)
45+
46+
select
47+
payer
48+
, payment_year
49+
, payment_year_month
50+
, closed_hccs
51+
, open_hccs
52+
, total_hccs
53+
, closed_hccs / total_hccs as recapture_rate
54+
from monthly_hcc_counts
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{{ config(
2+
enabled = var('hcc_recapture_enabled',var('claims_enabled',var('tuva_marts_enabled',False)))) | as_bool
3+
}}
4+
5+
with ytd_hccs as (
6+
select
7+
payer
8+
, payment_year
9+
, payment_year_month
10+
, closed_hccs as monthly_closed_hccs
11+
, open_hccs as monthly_open_hccs
12+
, total_hccs as monthly_total_hccs
13+
, recapture_rate as monthly_recapture_rate
14+
, sum(closed_hccs) over (partition by payer, payment_year order by payment_year_month rows between unbounded preceding and current row) as ytd_closed_hccs
15+
, sum(open_hccs) over (partition by payer, payment_year order by payment_year_month rows between unbounded preceding and current row) as ytd_open_hccs
16+
, sum(total_hccs) over (partition by payer, payment_year) as yearly_total_hccs
17+
from {{ ref('hcc_recapture__recapture_rates_monthly') }}
18+
)
19+
20+
select
21+
payer
22+
, payment_year
23+
, payment_year_month
24+
, monthly_closed_hccs
25+
, monthly_open_hccs
26+
, monthly_total_hccs
27+
, monthly_recapture_rate
28+
, ytd_closed_hccs
29+
, ytd_open_hccs
30+
, yearly_total_hccs
31+
, ytd_closed_hccs / yearly_total_hccs as ytd_recapture_rate
32+
from ytd_hccs

0 commit comments

Comments
 (0)