動作
Feature #421
進行中
SC
ICD 出碼管線重構:來源分區(確定/待確認/AI補充)+ 時序防護 + 吸收規則(v0.8.0)
Feature #421:
ICD 出碼管線重構:來源分區(確定/待確認/AI補充)+ 時序防護 + 吸收規則(v0.8.0)
狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-08-06
完成日期:
完成比例:
0%
預估工時:
概述
ICD 出碼管線重構:來源分區(確定/待確認/AI補充)+ 時序防護 + 吸收規則(v0.8.0)¶
背景¶
實測發現三個互相糾纏的問題(2026-08-03~06 與使用者多輪討論定案):
-
快手時序 race:背景查詢與手動「AI 擷取」互不知情、都整批覆蓋結果 ——
手動擷取完成後,較晚回來的背景查詢會把結果(含確定碼)整批蓋掉 -
同傷兩套碼:檢傷文字的背景 AI 與圖上標記的查表對同一傷各自出碼
(實例:頭部挫傷 → 查表 S00.93XA 確定 vs AI 猜 S00.03/S00.83/S00.33/S10.0) -
兩引擎不同步:圖上建議(引擎A查表)與檢視頁碼(引擎B AI)是兩份不完全重合的
清單,醫師要自己心算差集;醫師手標/修正傷情後檢視頁不會跟著動
變更內容¶
時序防護(lib/triage-icd-query.ts)¶
- 世代計數器:每次發起查詢遞增;結果回來時世代已過 → 直接丟棄
-
abortTriageIcd():手動「AI 擷取」按下即中止背景查詢(手動永遠優先) -
lib/icd-extract.ts加signal支援(AbortSignal 貫穿兩段式)
背景查詢改單一兩段式管線¶
- 完整建議(引擎A)→
structured_injuries查表毫秒出碼,前端重標
confidence: certain → table(「確定」only 屬於圖上標記,建議碼掛「待確認」) - AI 只抽查表未涵蓋的文字(backend 既有不重複邏輯生效)→ 同傷兩套碼在源頭消失
- 查表段結果先行送達(progressive),AI 補完再更新
-
觸發點擴充:① 手動貼上(原有)② 外掛開窗套 context 有機轉文字、無 pre_icd
(backend 現抓路徑必然如此;預跑上線後 pre_icd 已備 → 不觸發、零等待)
檢視頁來源分區(ReviewTab)¶
依信任度三區,live 派生、傷情變動 debounce 350ms 自動查表刷新(零 LLM):
- 確定 — 圖上標記查表直出;標記增刪即時同步,免重按擷取
- 待確認 — 尚未採用/忽略的檢傷建議;於軟組織/骨骼頁採用後升級為確定
-
AI 補充(圖上未標記) — 預設摺疊(顯示筆數,點擊展開;無其他分區時自動展開),
附提示「若屬實請至人體圖補標記」
合併/吸收規則(lib/icd-merge.ts,純函式可測試;涵蓋性優先、絕不真刪):
- 吸收:AI 組任一候選碼 = 確定/待確認碼,或其來源文字經引擎A解析出的 partId
命中圖上標記 → 不再顯示(已有更高信任替身) - 變灰:來源文字部位屬「被醫師忽略的建議」→ 弱化顯示+註記「相關建議已被忽略」
- 判不準 → 保留在 AI 補充區(寧多勿漏)
帶回勾選邏輯(外掛模式)¶
- 預設勾選改「確定優先」:原始結果含 certain → 只預勾這些;含 table(未確認)→
不預勾;純 AI(舊路徑)→ 維持預勾首選(相容既有習慣) - live 確定碼變動 → 勾選自動同步(新標記自動勾、刪標記自動退)
- 主診斷防禦:程式化增刪後 primaryCode 落在勾選外 → 帶回時自動回退為第一個勾選
測試安全網(frontend/tests/triage-suggestions.test.ts 新檔)¶
建議引擎 + 合併層迴歸測試 34 項:解析 10 組語句(含 5 反例)、雙側展開、
「手背」不被「背」搶走、pending 消化/忽略、structured 對映(joint 去前綴、
Burn 缺程度排除)、relabel、吸收×3路徑、變灰、不誤殺、certain/table 排除。
執行:cd frontend && npx -y tsx tests/triage-suggestions.test.ts。
維護規約:改詞條表或合併規則必須同票更新本檔案例(詞條擴充的安全網)。
其他¶
-
version.ts→ v0.8.0 + CHANGELOG
驗收標準¶
- 迴歸測試 34 項全 PASS
-
tsc --noEmit過;ESLint 零新增(僅剩既有 6 項舊問題);npm run build過 -
smoke test 全 PASS(backend 零改動;
table_only+ 空 text 實測正常出碼) - 時序:手動擷取中止背景查詢;世代過期結果被丟棄(程式碼路徑)
- 人工情境驗證(dev 3001,請使用者實測):
- 貼檢傷單 → 檢視頁先出「待確認」碼(毫秒)、AI 補充稍後抵達
- 圖上採用建議 → 檢視頁該碼由待確認升級確定、自動勾選
- 手標 AI 已出碼的傷 → AI 組被吸收,只剩確定碼一列
- 忽略建議 → 對應 AI 組變灰註記
- 快手:AI 未回前按「AI 擷取」→ 背景被中止,結果不被蓋掉
- 刪除標記 → 確定碼與勾選同步消失
相關¶
- 設計討論:#413/#418 之後的三輪討論(合併規則 2026-08-06 定案)
- 待辦(另票):幽靈右鍵忽略、帶回按鈕群(全部帶回+部分帶回+醫令)、
兩圖快查帶回 ICD、移除主診斷 radio、詞條擴充(等語料)
沒有任何資料可供顯示
動作