Skip to content

Commit dd62801

Browse files
authored
923 align los calculation with cms definition (#1246)
* Align LOS calculation with CMS definition: datediff + 1 (#923) CMS defines length of stay as discharge_date - admit_date + 1, where the admission day counts as day 1. A same-day admit/discharge = LOS 1. Previously datediff alone returned 0 for same-day stays. Updated across all 9 encounter grain models and readmissions. * Fix LOS calculation to use max(1, datediff) instead of datediff + 1 Per CMS definition, the day of admission counts but not the day of discharge, with same-day cases counting as 1 day. The datediff already gives the correct result for multi-day stays; only same-day (datediff=0) needs the floor to 1. The previous datediff + 1 overcounted by 1 for every multi-day stay. Applied across all 9 encounter grain models and the readmissions encounter_augmented model.
1 parent f2e223c commit dd62801

10 files changed

Lines changed: 50 additions & 10 deletions

models/claims_preprocessing/encounters/final/acute_inpatient__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,11 @@ select
157157
, tot.claim_count
158158
, tot.inst_claim_count
159159
, tot.prof_claim_count
160-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
160+
, case
161+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
162+
then 1
163+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
164+
end as length_of_stay
161165
, case
162166
when c.discharge_disposition_code = '20' then 1
163167
else 0

models/claims_preprocessing/encounters/final/asc__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,11 @@ select d.encounter_id
117117
, tot.encounter_type
118118
, tot.encounter_group
119119
, {{ dbt.datediff("birth_date","d.encounter_start_date","day") }} / 365 as admit_age
120-
, {{ dbt.datediff("d.encounter_start_date","d.encounter_end_date","day") }} as length_of_stay
120+
, case
121+
when {{ dbt.datediff("d.encounter_start_date","d.encounter_end_date","day") }} = 0
122+
then 1
123+
else {{ dbt.datediff("d.encounter_start_date","d.encounter_end_date","day") }}
124+
end as length_of_stay
121125
, e.gender
122126
, e.race
123127
, hp.diagnosis_code_type as primary_diagnosis_code_type

models/claims_preprocessing/encounters/final/emergency_department__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,11 @@ select
152152
, tot.claim_count
153153
, tot.inst_claim_count
154154
, tot.prof_claim_count
155-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
155+
, case
156+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
157+
then 1
158+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
159+
end as length_of_stay
156160
, case
157161
when c.discharge_disposition_code = '20' then 1
158162
else 0

models/claims_preprocessing/encounters/final/inpatient_hospice__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,11 @@ select
145145
, tot.claim_count
146146
, tot.inst_claim_count
147147
, tot.prof_claim_count
148-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
148+
, case
149+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
150+
then 1
151+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
152+
end as length_of_stay
149153
, case
150154
when c.discharge_disposition_code = '20' then 1
151155
else 0

models/claims_preprocessing/encounters/final/inpatient_long_term__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,11 @@ select
146146
, tot.claim_count
147147
, tot.inst_claim_count
148148
, tot.prof_claim_count
149-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
149+
, case
150+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
151+
then 1
152+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
153+
end as length_of_stay
150154
, case
151155
when c.discharge_disposition_code = '20' then 1
152156
else 0

models/claims_preprocessing/encounters/final/inpatient_psych__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,11 @@ select
146146
, tot.claim_count
147147
, tot.inst_claim_count
148148
, tot.prof_claim_count
149-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
149+
, case
150+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
151+
then 1
152+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
153+
end as length_of_stay
150154
, case
151155
when c.discharge_disposition_code = '20' then 1
152156
else 0

models/claims_preprocessing/encounters/final/inpatient_rehab__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,11 @@ select
146146
, tot.claim_count
147147
, tot.inst_claim_count
148148
, tot.prof_claim_count
149-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
149+
, case
150+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
151+
then 1
152+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
153+
end as length_of_stay
150154
, case
151155
when c.discharge_disposition_code = '20' then 1
152156
else 0

models/claims_preprocessing/encounters/final/inpatient_snf__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,11 @@ select
147147
, tot.claim_count
148148
, tot.inst_claim_count
149149
, tot.prof_claim_count
150-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
150+
, case
151+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
152+
then 1
153+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
154+
end as length_of_stay
151155
, case
152156
when c.discharge_disposition_code = '20' then 1
153157
else 0

models/claims_preprocessing/encounters/final/inpatient_substance_use__encounter_grain.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,11 @@ select
146146
, tot.claim_count
147147
, tot.inst_claim_count
148148
, tot.prof_claim_count
149-
, {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} as length_of_stay
149+
, case
150+
when {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }} = 0
151+
then 1
152+
else {{ dbt.datediff("a.encounter_start_date","a.encounter_end_date","day") }}
153+
end as length_of_stay
150154
, case
151155
when c.discharge_disposition_code = '20' then 1
152156
else 0

models/readmissions/final/readmissions__encounter_augmented.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ select
1616
, aa.drg_code_type
1717
, aa.drg_code
1818
, aa.paid_amount
19-
, {{ dbt.datediff("aa.admit_date", "aa.discharge_date","day") }} as length_of_stay
19+
, case
20+
when {{ dbt.datediff("aa.admit_date", "aa.discharge_date","day") }} = 0
21+
then 1
22+
else {{ dbt.datediff("aa.admit_date", "aa.discharge_date","day") }}
23+
end as length_of_stay
2024
, case
2125
when bb.encounter_id is not null then 1
2226
else 0

0 commit comments

Comments
 (0)