專案

一般

配置概況

動作

Feature #385

進行中
SC

醫令外掛 Phase 2:/plugin 前端 — 開窗自動帶入病人脈絡 + 草稿自動暫存/還原(無登入)

Feature #385: 醫令外掛 Phase 2:/plugin 前端 — 開窗自動帶入病人脈絡 + 草稿自動暫存/還原(無登入)

是由 Sashiba Chou5 天 前加入.

狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-07-28
完成日期:
完成比例:

0%

預估工時:

概述

醫令外掛 Phase 2:/plugin 前端 — 開窗自動帶入病人脈絡 + 草稿自動暫存/還原(無登入)

背景

接續 Feature #384(Phase 1 backend 外掛 API)。本票實作外掛版前端:薄殼 exe(WebView2)
將開啟的 /plugin 頁面——無會員登入、無側邊欄、無快查,開窗即自動帶入背景預跑程式暫存的
病人脈絡,並以草稿自動暫存防誤關。設計:his_plugin/DESIGN.md §5(本票同步更新)。

變更內容

1. frontend/src/app/plugin/page.tsx(新)— 外掛入口

  • 啟動 URL 定稿:/plugin#pn=<病歷號>&key=<PLUGIN_API_KEY>[&doctor=<工號>]
    參數放 hash:fragment 不進 HTTP 請求行與伺服器 log,金鑰不落地(query 為開發備援)
  • 並行載入 GET /plugin/context + GET /plugin/draft(X-API-Key)
  • 三種錯誤畫面:缺參數(請從醫令啟動)/ 金鑰錯誤或伺服器未設鑰 / 連不到伺服器
  • 頂欄:病歷號(8 位補零顯示)+ 工號 + 版本徽章「外掛」;無預跑資料時提示手動填寫
  • 深色模式跟隨系統

2. frontend/src/components/PluginAssessment.tsx(新)— 外掛版 4 頁籤容器

  • 與網頁版同構(病史/軟組織/骨骼/檢視與帶回),表單元件全共用
  • context 自動帶入:年齡、性別(M/F/男/女 → Male/Female 正規化)、
    檢傷文字走既有 parseTriageText 自動填欄(病史/過敏/機轉關鍵字判定照舊)
  • 病安:表單病歷號一律以啟動參數為準,檢傷文字內的病歷號不覆蓋
  • 預擷取 ICD 直入檢視頁(免等 AI);兼容完整 predictions 與扁平 [{code, name}] 兩種格式
  • 草稿自動暫存:任何欄位/病歷文字/ICD 結果變動 → debounce 1.5s → PUT /plugin/draft;
    頂部顯示「 已自動暫存 HH:MM」/「暫存失敗」
  • 還原對話框:重開窗發現草稿 → 「還原草稿 / 重新開始」;未決前不啟動 autosave(防互蓋)

3. frontend/src/lib/plugin-session.tsx(新)— 工作階段

  • 啟動參數解析(hash 優先)、X-API-Key header helper、8 位補零顯示
  • usePluginSession():共用元件的外掛模式開關(網頁版回 null,行為零變)
  • 型別備忘落實:patientNo 轉 int("00000451"→451);工號維持字串(前導零有語意)

4. frontend/src/components/ReviewTab.tsx(修改,僅一處)

  • 外掛模式模板改抓 GET /plugin/templates(共用模板 = admin 名下,唯讀)
  • 一般網頁版路徑完全不動;外掛下 token 為 null → 既有邏輯自然跳過病歷儲存(符合「外掛版不做病歷紀錄」)

5. his_plugin/DESIGN.md — §5.1 標記完成 + 啟動 URL/實作細節定稿

驗收標準

  • Playwright e2e 18 項全 PASS(msedge headless,打 dev 3001→8001):
    錯誤畫面×2、頂欄×3、預擷取 ICD 顯示、autosave 落地、context 帶入 draft 驗證×7
    (mrn=451/age=55/sex 正規化/history/機轉自由文字/機轉關鍵字/icdResults)、
    修改欄位後 draft 更新、重開窗還原對話框、還原後內容保留、測試自清
  • 網頁版 / 回歸正常(登入畫面 Playwright 檢查)
  • npm run build production 編譯 + TypeScript 通過,/plugin 路由生成
  • ESLint:本票新增/修改檔案零 error 零 warning(既有 3 error 為他檔舊債,不在本票範圍)
  • backend 零改動 → smoke test 50 項全 PASS 不變

備註

  • smoke_test.py 無需增修:本票未動任何 API endpoint(/plugin/* 已由 #384 第 9 區段覆蓋);
    /plugin 頁為純瀏覽器端流程,以 Playwright e2e 18 項實測替代(維護規約判定:同 #380 前例)
  • 版本號不動:外掛前端待 Phase 3(帶回 UI:pywebview 偵測、ICD checkbox+主診斷、
    單顆帶回鈕)完成才算功能完整,屆時一併調升
  • 手動測試:瀏覽器開 http://<host>:3001/plugin#pn=451&key=<金鑰>&doctor=<工號>
    即可模擬 exe 啟動(先以 POST /plugin/context/451 種資料)

沒有任何資料可供顯示

動作

匯出至 PDF Atom