| Acute kidney injury |
✓Criteria met |
↑Specificity gap |
Documented “worsening renal function” (N28.9); criteria support the more specific Acute kidney injury (KDIGO stage 3) (N17.9).Trace
Rule trace (rule aki v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: meets_definition |
creat_ratio >= t.ratio_s1 or creat_rise_48h >= t.rise_abs or coalesce(uo_hours_lt_0_5 >= t.uo_s1_h, false) |
creat_ratio=2.368, t.ratio_s1=1.5, creat_rise_48h=1.01, t.rise_abs=0.3, uo_hours_lt_0_5=unknown, t.uo_s1_h=6 |
true |
| derived: stage3 |
meets_definition and (creat_ratio >= t.ratio_s3 or creat_peak >= t.scr_s3 or rrt_started or coalesce(uo_hours_lt_0_3 >= t.uo_s3_h, false) or coalesce(anuria_hours >= t.anuria_h, false)) |
meets_definition=True, creat_ratio=2.368, t.ratio_s3=3.0, creat_peak=4.57, t.scr_s3=4.0, rrt_started=False, uo_hours_lt_0_3=unknown, t.uo_s3_h=24, anuria_hours=unknown, t.anuria_h=12 |
true |
| derived: stage2 |
creat_ratio >= t.ratio_s2 or coalesce(uo_hours_lt_0_5 >= t.uo_s2_h, false) |
creat_ratio=2.368, t.ratio_s2=2.0, uo_hours_lt_0_5=unknown, t.uo_s2_h=12 |
true |
| derived: stage |
case(stage3, 3, stage2, 2, meets_definition, 1, 0) |
stage3=True, stage2=True, meets_definition=True |
3 |
| derived: baseline_independent |
creat_baseline_known or creat_rise_48h >= t.rise_abs or rrt_started |
creat_baseline_known=True, creat_rise_48h=1.01, t.rise_abs=0.3, rrt_started=False |
true |
| outcome: aki_staged |
stage >= 1 and baseline_independent |
stage=3, baseline_independent=True |
true |
|
| Acute blood loss anaemia |
✓Criteria met |
✓No gap |
Supported as documented (D62).Trace
Rule trace (rule blood_loss_anemia v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: anaemic |
case(sex == 'M', hgb_nadir < t.hb_m, sex == 'F', hgb_nadir < t.hb_f, null) |
sex=M, hgb_nadir=9.62, t.hb_m=13, t.hb_f=12 |
true |
| derived: acute_fall |
hgb_drop >= t.drop_major or prbc_units >= t.prbc_major |
hgb_drop=3.3, t.drop_major=2.0, prbc_units=2, t.prbc_major=2 |
true |
| outcome: met |
bleeding_documented and anaemic and acute_fall |
bleeding_documented=True, anaemic=True, acute_fall=True |
true |
|
| Chronic kidney disease |
✓Criteria met |
!Clinical validation gap |
Documented “CKD stage 4” (N18.4) conflicts with what the criteria support (Chronic kidney disease stage 3b, N18.32).Trace
Rule trace (rule ckd v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: chronic |
egfr_n >= 2 and egfr_span_days >= t.chronic_days |
egfr_n=2, egfr_span_days=323, t.chronic_days=90 |
true |
| derived: staging_egfr |
max(egfr_early, egfr_late) |
egfr_early=39.9, egfr_late=40.1 |
40.1 |
| derived: both_below_60 |
egfr_early < t.g2 and egfr_late < t.g2 |
egfr_early=39.9, t.g2=60, egfr_late=40.1 |
true |
| derived: category |
case(staging_egfr >= t.g2, 'G1-G2', staging_egfr >= t.g3a, 'G3a', staging_egfr >= t.g3b, 'G3b', staging_egfr >= t.g4, 'G4', 'G5') |
staging_egfr=40.1, t.g2=60, t.g3a=45, t.g3b=30, t.g4=15 |
G3b |
| outcome: duration_not_shown |
not chronic |
chronic=True |
false |
| outcome: straddles_60 |
not both_below_60 and min(egfr_early, egfr_late) < t.g2 |
both_below_60=True, egfr_early=39.9, egfr_late=40.1, t.g2=60 |
false |
| outcome: g1_g2 |
staging_egfr >= t.g2 |
staging_egfr=40.1, t.g2=60 |
false |
| outcome: g3a |
category == 'G3a' |
category=G3b |
false |
| outcome: g3b |
category == 'G3b' |
category=G3b |
true |
|
| Heart failure |
∅Insufficient data |
✓No gap |
Insufficient data: the criteria could not be applied.Trace
Rule trace (rule heart_failure v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: np_elevated |
coalesce(bnp_max >= t.bnp, false) or coalesce(ntprobnp_max >= t.ntprobnp, false) |
bnp_max=unknown, t.bnp=100, ntprobnp_max=unknown, t.ntprobnp=300 |
false |
| derived: acute_count |
count(iv_loop_diuretic, np_elevated, new_o2) |
iv_loop_diuretic=False, np_elevated=False, new_o2=False |
0 |
| derived: hf_type |
case(lvef <= t.ref, 'systolic', lvef >= t.pres, 'diastolic', 'midrange') |
lvef=unknown, t.ref=40, t.pres=50 |
unknown |
| derived: improved |
coalesce(lvef_prior_min <= t.ref and lvef > t.ref and lvef - lvef_prior_min >= t.improved_rise, false) |
lvef_prior_min=unknown, t.ref=40, lvef=unknown, t.improved_rise=10 |
false |
| derived: acuity |
case(acute_count >= 2 and hf_history, 'acute on chronic', acute_count >= 2, 'acute', acute_count == 0 and hf_history, 'chronic', null) |
acute_count=0, hf_history=False |
unknown |
| outcome: improved_ef |
improved |
improved=False |
false |
| outcome: midrange |
hf_type == 'midrange' |
hf_type=unknown |
unknown |
| outcome: sys_aoc |
hf_type == 'systolic' and acuity == 'acute on chronic' |
hf_type=unknown, acuity=unknown |
unknown |
| outcome: sys_acute |
hf_type == 'systolic' and acuity == 'acute' |
hf_type=unknown, acuity=unknown |
unknown |
| outcome: sys_chronic |
hf_type == 'systolic' and acuity == 'chronic' |
hf_type=unknown, acuity=unknown |
unknown |
| outcome: dia_aoc |
hf_type == 'diastolic' and acuity == 'acute on chronic' |
hf_type=unknown, acuity=unknown |
unknown |
| outcome: dia_acute |
hf_type == 'diastolic' and acuity == 'acute' |
hf_type=unknown, acuity=unknown |
unknown |
| outcome: dia_chronic |
hf_type == 'diastolic' and acuity == 'chronic' |
hf_type=unknown, acuity=unknown |
unknown |
| outcome: one_indicator |
acute_count == 1 |
acute_count=0 |
false |
|
| Hyponatraemia |
✕Criteria not met |
✓No gap |
Not documented and not supported.Trace
Rule trace (rule hyponatremia v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: severity |
case(na_min < t.profound, 'profound', na_min < t.moderate, 'moderate', na_min < t.low, 'mild', 'none') |
na_min=137.0, t.profound=125, t.moderate=130, t.low=135 |
none |
| outcome: met |
na_min < t.low and na_low_count >= t.repeat and na_treated |
na_min=137.0, t.low=135, na_low_count=0, t.repeat=2, na_treated=False |
false |
| outcome: untreated |
na_min < t.low |
na_min=137.0, t.low=135 |
false |
| outcome: not_met |
na_min >= t.low |
na_min=137.0, t.low=135 |
true |
|
| Malnutrition |
✕Criteria not met |
✓No gap |
Not documented and not supported.Trace
Rule trace (rule malnutrition v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: a_sev_intake |
intake_pct <= t.a_sev_intake_pct and intake_days >= t.a_sev_intake_days |
intake_pct=100.0, t.a_sev_intake_pct=50, intake_days=unknown, t.a_sev_intake_days=5 |
false |
| derived: a_mod_intake |
intake_pct < t.a_mod_intake_pct and intake_days > t.a_mod_intake_days |
intake_pct=100.0, t.a_mod_intake_pct=75, intake_days=unknown, t.a_mod_intake_days=7 |
false |
| derived: a_sev_wt |
(wt_loss_days <= 7 and wt_loss_pct > 2) or (wt_loss_days <= 31 and wt_loss_pct > 5) or (wt_loss_days <= 92 and wt_loss_pct > 7.5) |
wt_loss_days=unknown, wt_loss_pct=unknown |
unknown |
| derived: a_mod_wt |
(wt_loss_days <= 7 and wt_loss_pct >= 1) or (wt_loss_days <= 31 and wt_loss_pct >= 5) or (wt_loss_days <= 92 and wt_loss_pct >= 7.5) |
wt_loss_days=unknown, wt_loss_pct=unknown |
unknown |
| derived: c_sev_intake |
intake_pct <= t.c_intake_pct and intake_days >= t.c_intake_days |
intake_pct=100.0, t.c_intake_pct=75, intake_days=unknown, t.c_intake_days=30 |
false |
| derived: c_mod_intake |
intake_pct < t.c_intake_pct and intake_days >= t.c_intake_days |
intake_pct=100.0, t.c_intake_pct=75, intake_days=unknown, t.c_intake_days=30 |
false |
| derived: c_sev_wt |
(wt_loss_days <= 31 and wt_loss_pct > 5) or (wt_loss_days <= 92 and wt_loss_pct > 7.5) or (wt_loss_days <= 183 and wt_loss_pct > 10) or (wt_loss_days <= 366 and wt_loss_pct > 20) |
wt_loss_days=unknown, wt_loss_pct=unknown |
unknown |
| derived: c_mod_wt |
(wt_loss_days <= 31 and wt_loss_pct >= 5) or (wt_loss_days <= 92 and wt_loss_pct >= 7.5) or (wt_loss_days <= 183 and wt_loss_pct >= 10) or (wt_loss_days <= 366 and wt_loss_pct >= 20) |
wt_loss_days=unknown, wt_loss_pct=unknown |
unknown |
| derived: n_assessed |
known(intake_pct, wt_loss_pct, fat_loss, muscle_loss, fluid, grip_reduced) |
intake_pct=100.0, wt_loss_pct=unknown, fat_loss=0, muscle_loss=0, fluid=0, grip_reduced=unknown |
4 |
| derived: n_severe |
case(nutr_context == 'acute', count(a_sev_intake, a_sev_wt, fat_loss >= 2, muscle_loss >= 2, fluid >= 2, grip_reduced), nutr_context == 'chronic', count(c_sev_intake, c_sev_wt, fat_loss >= 3, muscle_loss >= 3, fluid >= 3, grip_reduced), null) |
nutr_context=acute, a_sev_intake=False, a_sev_wt=unknown, fat_loss=0, muscle_loss=0, fluid=0, grip_reduced=unknown, c_sev_intake=False, c_sev_wt=unknown |
0 |
| derived: n_moderate |
case(nutr_context == 'acute', count(a_sev_intake or a_mod_intake, a_sev_wt or a_mod_wt, fat_loss >= 1, muscle_loss >= 1, fluid >= 1, grip_reduced), nutr_context == 'chronic', count(c_sev_intake or c_mod_intake, c_sev_wt or c_mod_wt, fat_loss >= 1, muscle_loss >= 1, fluid >= 1, grip_reduced), null) |
nutr_context=acute, a_sev_intake=False, a_mod_intake=False, a_sev_wt=unknown, a_mod_wt=unknown, fat_loss=0, muscle_loss=0, fluid=0, grip_reduced=unknown, c_sev_intake=False, c_mod_intake=False, c_sev_wt=unknown, c_mod_wt=unknown |
0 |
| outcome: severe |
n_severe >= 2 |
n_severe=0 |
false |
| outcome: moderate |
n_moderate >= 2 |
n_moderate=0 |
false |
| outcome: one_characteristic |
n_moderate == 1 |
n_moderate=0 |
false |
| outcome: not_met |
n_moderate == 0 and n_assessed >= 2 |
n_moderate=0, n_assessed=4 |
true |
|
| Obesity |
✕Criteria not met |
✓No gap |
Not documented and not supported.Trace
Rule trace (rule obesity v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| outcome: not_adult |
age < t.adult |
age=56, t.adult=20 |
false |
| outcome: class3 |
bmi >= t.c3 |
bmi=26.9, t.c3=40 |
false |
| outcome: class2 |
bmi >= t.c2 |
bmi=26.9, t.c2=35 |
false |
| outcome: class1 |
bmi >= t.c1 |
bmi=26.9, t.c1=30 |
false |
| outcome: not_met |
bmi < t.c1 |
bmi=26.9, t.c1=30 |
true |
|
| Pressure injury |
✓Criteria met |
↑Specificity gap |
Criteria support Pressure injury of sacral region, stage 4 (L89.154); no corresponding diagnosis is documented.Trace
Rule trace (rule pressure_injury v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: sacral |
wound_site == 'sacral' |
wound_site=sacral |
true |
| outcome: no_wound_note |
not present(wound_stage) |
wound_stage=4 |
false |
| outcome: other_site |
wound_site != 'sacral' |
wound_site=sacral |
false |
| outcome: stage1 |
sacral and wound_stage == '1' |
sacral=True, wound_stage=4 |
false |
| outcome: stage2 |
sacral and wound_stage == '2' |
sacral=True, wound_stage=4 |
false |
| outcome: stage3 |
sacral and wound_stage == '3' |
sacral=True, wound_stage=4 |
false |
| outcome: stage4 |
sacral and wound_stage == '4' |
sacral=True, wound_stage=4 |
true |
|
| Acute respiratory failure |
✕Criteria not met |
✓No gap |
Not documented and not supported.Trace
Rule trace (rule respiratory_failure v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: measured |
present(spo2_min_ra) or present(pao2_min_ra) or present(pf_min) |
spo2_min_ra=94.0, pao2_min_ra=unknown, pf_min=unknown |
true |
| derived: hypoxemia |
coalesce(spo2_min_ra < t.spo2_ra, false) or coalesce(pao2_min_ra < t.pao2, false) or coalesce(pf_min < t.pf, false) |
spo2_min_ra=94.0, t.spo2_ra=88, pao2_min_ra=unknown, t.pao2=60, pf_min=unknown, t.pf=300 |
false |
| derived: distress |
coalesce(rr_max >= t.rr_distress, false) or coalesce(wob_increased, false) or adv_resp_support |
rr_max=20.0, t.rr_distress=28, wob_increased=unknown, adv_resp_support=False |
false |
| outcome: chronic_baseline |
home_o2 and hypoxemia |
home_o2=False, hypoxemia=False |
false |
| outcome: met |
hypoxemia and distress |
hypoxemia=False, distress=False |
false |
| outcome: hypoxemia_only |
hypoxemia |
hypoxemia=False |
false |
| outcome: not_met |
measured and not hypoxemia and o2_max_lpm <= t.o2_low and not adv_resp_support |
measured=True, hypoxemia=False, o2_max_lpm=0.0, t.o2_low=2, adv_resp_support=False |
true |
|
| Sepsis |
✕Criteria not met |
✓No gap |
Not documented and not supported.Trace
Rule trace (rule sepsis v2026.11-1; evaluated in order, first true outcome wins; "unknown" = missing input)
| Step | Expression | Inputs and thresholds read | Result |
| derived: sirs_temp |
coalesce(temp_max_48h > t.t_hi, false) or coalesce(temp_min_48h < t.t_lo, false) |
temp_max_48h=37.5, t.t_hi=38, temp_min_48h=36.5, t.t_lo=36 |
false |
| derived: sirs_hr |
coalesce(hr_max_48h > t.hr, false) |
hr_max_48h=88.0, t.hr=90 |
false |
| derived: sirs_rr |
coalesce(rr_max_48h > t.rr, false) or coalesce(paco2_min_48h < t.paco2, false) |
rr_max_48h=19.0, t.rr=20, paco2_min_48h=unknown, t.paco2=32 |
false |
| derived: sirs_wbc |
coalesce(wbc_max_48h > t.wbc_hi, false) or coalesce(wbc_min_48h < t.wbc_lo, false) or coalesce(bands_max_48h > t.bands, false) |
wbc_max_48h=8.98, t.wbc_hi=12, wbc_min_48h=7.29, t.wbc_lo=4, bands_max_48h=unknown, t.bands=10 |
false |
| derived: sirs_count |
count(sirs_temp, sirs_hr, sirs_rr, sirs_wbc) |
sirs_temp=False, sirs_hr=False, sirs_rr=False, sirs_wbc=False |
0 |
| derived: sofa_resp |
coalesce(case(pf_min_48h < 100 and adv_resp_support, 4, pf_min_48h < 200 and adv_resp_support, 3, pf_min_48h < 300, 2, pf_min_48h < 400, 1, 0), 0) |
pf_min_48h=unknown, adv_resp_support=False |
0 |
| derived: sofa_coag |
coalesce(case(platelets_min_48h < 20, 4, platelets_min_48h < 50, 3, platelets_min_48h < 100, 2, platelets_min_48h < 150, 1, 0), 0) |
platelets_min_48h=175.0 |
0 |
| derived: sofa_liver |
coalesce(case(bili_max_48h >= 12, 4, bili_max_48h >= 6, 3, bili_max_48h >= 2, 2, bili_max_48h >= 1.2, 1, 0), 0) |
bili_max_48h=0.65 |
0 |
| derived: sofa_cardio |
coalesce(case(norepi_max_48h > 0.1, 4, norepi_max_48h > 0, 3, map_min_48h < 70, 1, 0), 0) |
norepi_max_48h=0.0, map_min_48h=77.0 |
0 |
| derived: sofa_cns |
coalesce(case(gcs_min_48h < 6, 4, gcs_min_48h < 10, 3, gcs_min_48h < 13, 2, gcs_min_48h < 15, 1, 0), 0) |
gcs_min_48h=15.0 |
0 |
| derived: sofa_renal |
coalesce(case(creat_max_48h >= 5, 4, creat_max_48h >= 3.5, 3, creat_max_48h >= 2, 2, creat_max_48h >= 1.2, 1, 0), 0) |
creat_max_48h=4.57 |
3 |
| derived: sofa_renal_baseline |
coalesce(case(creat_baseline >= 5, 4, creat_baseline >= 3.5, 3, creat_baseline >= 2, 2, creat_baseline >= 1.2, 1, 0), 0) |
creat_baseline=1.93 |
1 |
| derived: sofa_delta |
sofa_resp + sofa_coag + sofa_liver + sofa_cardio + sofa_cns + sofa_renal - sofa_renal_baseline |
sofa_resp=0, sofa_coag=0, sofa_liver=0, sofa_cardio=0, sofa_cns=0, sofa_renal=3, sofa_renal_baseline=1 |
2 |
| derived: sepsis3 |
infection_documented and sofa_delta >= t.sofa_delta |
infection_documented=False, sofa_delta=2, t.sofa_delta=2 |
false |
| derived: sepsis2 |
infection_documented and sirs_count >= t.sirs_min |
infection_documented=False, sirs_count=0, t.sirs_min=2 |
false |
| derived: shock |
sepsis3 and norepi_max_48h > 0 and coalesce(lactate_max_48h > t.lactate, false) |
sepsis3=False, norepi_max_48h=0.0, lactate_max_48h=unknown, t.lactate=2 |
false |
| outcome: no_infection |
not infection_documented |
infection_documented=False |
true |
|