KDIGO 2024 vs 2012:我的規則引擎為什麼選新版

ClinCalc 的 CKD 分期判定我選了 KDIGO 2024,不是 2012。本文說明兩版差在哪、為什麼影響系統架構決策、以及實作時踩到的坑。

#kdigo#ckd#clinical-decision-support#rule-engine#medical-informatics

TL;DR

KDIGO 2024 是 KDIGO 自 2012 年以來首次大改的 CKD 臨床指引。差別不只是數字微調 ── 是從單軸(GFR)到雙軸(GFR + 蛋白尿)的範式轉換。我在 ClinCalc 的規則引擎選 2024 版,這個決定讓我重新設計判定卡 UI、回去讀完 CKD-EPI 2021 公式、並準備好向使用者解釋「為什麼跟我去年看的不一樣」。


背景:CKD 分期是什麼

慢性腎臟病(CKD)的臨床分期決定病人接下來要做什麼:定期追蹤、轉腎臟科、考慮透析、或評估腎移植。分期錯,後續整條治療路徑就跑偏。

KDIGO(Kidney Disease: Improving Global Outcomes)是國際腎臟學會主導的全球臨床指引組織。它的指引基本上是全球腎臟科醫師的共同語言

我做 ClinCalc 的時候,第一個要決定的就是:「我要實作哪一版?」


兩版差在哪

KDIGO 2012:單軸分期

2012 版主要看一個指標:eGFR(estimated GFR,估算腎絲球過濾率)

G1: eGFR ≥ 90  (正常或偏高)
G2: 60–89      (輕度下降)
G3a: 45–59     (輕度至中度下降)
G3b: 30–44     (中度至重度下降)
G4: 15–29      (重度下降)
G5: < 15       (腎衰竭)

判定邏輯簡單直接:拿到 eGFR 數值,丟進範圍表,輸出 G1–G5。

KDIGO 2024:雙軸分期

2024 版改成 GFR + 蛋白尿(Albuminuria)兩軸並行。蛋白尿分三級:

A1: 正常或輕微        (ACR < 30 mg/g)
A2: 中度增加          (ACR 30–300 mg/g)
A3: 重度增加          (ACR > 300 mg/g)

最終分期就是兩軸交叉,例如「G3a-A2」「G4-A3」。

為什麼這樣改?因為臨床觀察發現:同樣 eGFR 下,有蛋白尿的病人預後明顯較差。一個 eGFR 50 + A1 的病人跟一個 eGFR 50 + A3 的病人,10 年後的腎衰竭風險可能差好幾倍。單軸分期不能反映這個事實。


對工程實作的影響

對寫規則引擎的人來說,從單軸換雙軸不是「多一個欄位」這麼簡單。實際影響三個層面:

1. 資料模型

// 2012 版只需要一個欄位
type CKDStage_2012 = 'G1' | 'G2' | 'G3a' | 'G3b' | 'G4' | 'G5'

// 2024 版需要組合
type GFRStage = 'G1' | 'G2' | 'G3a' | 'G3b' | 'G4' | 'G5'
type AlbuminuriaStage = 'A1' | 'A2' | 'A3'
type CKDStage_2024 = `${GFRStage}-${AlbuminuriaStage}`
// 共 18 個可能組合(5 GFR levels with CKD × 3 A levels + G1 + G2 cases without proteinuria)

2. UI 設計

單軸分期可以用一個顯示卡。雙軸分期我必須畫一個 5×3 風險表(heat map),讓使用者看到「我在哪一格」。

我最後做了一個簡化版判定卡:上方顯示 eGFR + 數值區段、下方顯示 ACR + 蛋白尿區段、中間顯示交叉後的分期 + 相對應建議。這個 UI 在 ClinCalc 案例研究有截圖

3. 資料缺漏處理

這是最麻煩的部分。多數民眾健檢只測 eGFR、不測 ACR。如果使用者只有 eGFR 數值,系統怎麼辦?

我的解法:

  • 系統先依 eGFR 給單軸分期
  • 顯示提示:「您未提供尿蛋白檢驗,分期可能不完整。建議下次健檢加做尿液 ACR 檢驗。」
  • 不直接套 A1(最低風險),避免低估
  • 不強制要求兩個都填,不然會把使用者擋掉

這個 UX 折衷我糾結很久。最後選「不完整資訊也給判定,但顯眼提示限制」── 因為民眾真的多半只有 eGFR。


計算公式:CKD-EPI 2021 移除種族係數

順帶要說的是:eGFR 怎麼算也改了。

2009 版 CKD-EPI 公式:
  eGFR = ... × (是否黑人) × ...    ← 有種族係數
  
2021 版:
  eGFR = ... (無種族係數)

研究發現原本的「黑人係數」會系統性高估黑人的 eGFR、延遲腎臟病診斷。2021 版移除這個係數,KDIGO 2024 採納這個新公式。

我的實作直接用 2021 版。對台灣人沒影響(亞洲人本來就沒在 2009 版用係數),但這個變化的故事值得寫進系統文件 ── 它示範了「臨床演算法可能含種族偏見、需要更新」。


為什麼選 2024 不選 2012

我考慮過三個選項:

選項優點缺點
只實作 2012簡單、文獻多、醫師熟悉已被新指引取代、未來會過時
只實作 2024跟上最新指引、雙軸更精準醫師可能還沒換、UX 較複雜
兩版並行使用者可選維護成本翻倍、UI 變複雜

選 2024 的關鍵理由:指引的 transition period 通常 1–3 年。如果我 2025 上線只支援 2012,2027 就要重做。寧願現在多花心力做新版,未來省維護

但要避免「使用者拿舊版報告的判定結果跟系統對不上」 ── 我在判定卡明顯位置寫「依 KDIGO 2024 國際指引」、附文獻引用。讓使用者知道版本,比讓系統永遠不變更重要


代價:使用者教育成本

KDIGO 2024 是國際標準,但台灣多數民眾沒聽過。我的對策:

  • 判定卡下方加 collapsible「為什麼是這個分期?」── 展開後顯示 GFR 範圍 + 蛋白尿等級 + 引用條目
  • About 頁加 Reading List 把 KDIGO 2024 原始文獻列出,使用者想求證可以直接點過去
  • 「需醫師確認」標籤永遠掛著 ── 系統不取代醫師

代價是 onboarding 流程比競品慢,但可信度高。我寧願為了精確付這個代價。


開放問題:規則引擎怎麼跟上指引更新?

KDIGO 每幾年更新一次。目前我手動改 referenceRanges.ts 來對接新版。但 ── 這在規模大了不可持續

  • 高血壓指引一直變
  • 糖尿病指引(HbA1c 閾值)也常更新
  • 心臟學會、家醫學會、糖尿病學會各自有指引

每個都手動追?還是用 RAG 把臨床指引當動態 KB,讓 LLM 不只是翻譯,也能對接最新指引?

這是我希望進研究所深入的方向之一。


延伸閱讀