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 不只是翻譯,也能對接最新指引?
這是我希望進研究所深入的方向之一。