09|新舊 API 對照清單(以新的 FHIR 為全集,舊的 H13 有缺要補)
08_對照H13端點.md是「舊的每一支 → 新的哪一支」。這一份反過來:新的 64 個 operation 全部列出(2026-09-19 是 43 支,2026-09-20 補了 21 支),每一支對回舊的 H13 REST(用戶需求/H_產品規格/_tools/openapi.yaml,/api/v1/icu);舊的沒有、或只做到一半的,就是要補進 H13 的。新=
openapi/openapi.yaml(FHIR R4,64 operation,2026-09-20);舊=H13(59 path/71 operation,2026-09-06)。
圖例:✅ 舊的有對應 ◐ 舊的只做到一部分 ❌ 舊的沒有,要補 ⊘ 不在 H13 範圍(屬 D1 HIS 介接)
1. 逐支對照
系統
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 1 | GET /metadata 能力宣告 |
— | ❌ | GET /capabilities:伺服器實際支援的資源/互動/錯誤碼清單,前端據此決定按鈕要不要出現。或直接沿用 FHIR 的 metadata |
| 2 | POST / Bundle transaction/batch |
POST /encounters/{id}/orders:batch |
◐ | 舊的只有醫囑整組;缺通用的「一個交易寫多筆」(例:一次建兩件 Task、開醫囑+建追蹤工作)與純讀取的 batch |
病人與就醫
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 3 | GET /Patient?identifier=&name= 搜尋病人 |
— | ❌ | GET /patients?q=:手圈掃碼、病歷查詢(S21)都要按病歷號/姓名找人;舊的只有 /worklist(本班清單)與 /patients/{id}(已知 id) |
| 4 | GET /Patient/{id} |
GET /patients/{id} |
✅ | 舊的要補監護人與健保身分欄(新的放 contact/extension[insuranceText]) |
| 5 | GET /Patient/$roster 本班名單 |
GET /assignments、GET /worklist |
✅ | — |
| 6 | GET /Encounter?status=in-progress 搜尋就醫 |
GET /encounters/{id}(單一) |
◐ | GET /encounters?status=&ward=:全科病人清單(09-10 決議「全院內醫護可查閱」)舊的只能經 /worklist 拿本班的 |
| 7 | GET /CareTeam?patient= |
GET /assignments(只有自己的) |
◐ | 看別人的照護關係(誰是 p1 的主治、哪位護理師):24 項 #1「同人多關係、每病人單一有效主治」要查得到 |
| 8 | POST /CareTeam 建立照護關係 |
— | ❌ | POST /assignments:管理者維護照護關係/指定主治(24 項 #1、#12 維護設定);目前舊的假設分派全由 HIS 推入 |
| 9 | GET /Flag?patient=&category= 特殊註記 |
— | ❌ | GET /encounters/{id}/flags:過敏、隔離、管路天數、嚴重度。舊的 /worklist 沒有這一欄;設計稿清單與病人抽屜都要 |
| 10 | GET /Flag/{id} |
— | ❌ | 同上;嚴重度要能獨立更新、留歷史(F2 回問 #5) |
醫囑
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 11 | GET /MedicationRequest?patient=&status=&_revinclude=… |
GET /encounters/{id}/orders |
◐ | 舊的只能按就醫事件查;跨病人的「全科待簽佇列」(設計稿「醫囑與處方」頁:?status=draft)沒有 |
| 12 | POST /MedicationRequest 開立(草稿) |
POST /encounters/{id}/orders、/order-cart/items |
✅ | — |
| 13 | GET /MedicationRequest/{id} |
GET /orders/{id} |
✅ | — |
| 14 | PUT /MedicationRequest/{id} 更新(草稿全改/簽後只能改狀態) |
— | ❌ | PUT /orders/{id}:改劑量、指定病程來源、停藥(status=stopped)、取消。舊的只有 DELETE /order-cart/items/{key},簽署後就沒有任何修改路徑,但設計稿治療病程有「停藥」 |
| 15 | PATCH /MedicationRequest/{id} 標記誤建(entered-in-error) |
— | ❌ | POST /orders/{id}/void(或 PATCH):誤建不刪、留紀錄;舊的完全沒有 |
| 16 | POST /MedicationRequest/{id}/$sign |
POST /orders/{id}/sign |
✅ | — |
| 17 | POST /MedicationRequest/{id}/$submit |
POST /orders/{id}/send |
✅ | — |
| 18 | GET /ServiceRequest?category= 檢驗/檢查/照護/照會 |
GET /encounters/{id}/orders、GET /encounters/{id}/consultations |
✅ | — |
| 19 | POST /ServiceRequest |
POST /encounters/{id}/orders、POST …/consultations |
✅ | — |
| 20 | GET /ServiceRequest/{id} |
GET /orders/{id} |
✅ | — |
| 21 | PUT /ServiceRequest/{id} |
— | ❌ | 同 #14:檢驗檢查醫令的異動/取消(H8 §4.4 S12「異動取消與部分回應對帳」) |
實際執行
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 22 | GET /MedicationAdministration?patient=&effective-time= |
GET /orders/{id}/executions |
◐ | 舊的只能按一張醫囑查;eMAR 工作表要「這位病人今天全部劑次」、交班要「本班已執行」——缺按病人/時間窗查 |
| 23 | POST /MedicationAdministration(If-None-Exist) |
POST /orders/{id}/executions |
✅ | 舊的要補劑次唯一(同一劑重送回 200 不建第二筆)的說明 |
| 24 | GET /Procedure?patient= |
GET /encounters/{id}/procedures |
◐ | 舊的只有手術/麻醉唯讀;照護/處置的執行紀錄查詢沒有 |
| 25 | POST /Procedure 記錄照護/處置執行 |
POST /orders/{id}/executions |
✅ | — |
檢驗與量測
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 26 | GET /DiagnosticReport?patient=&_include=result |
GET /encounters/{id}/reports、/lab-results |
✅ | — |
| 27 | GET /DiagnosticReport/{id} |
GET /reports/{id} |
✅ | — |
| 28 | PUT /DiagnosticReport/{id}(僅整合服務) |
— | ⊘ | HIS 推入報告走 D1 §3 事件(/his-events/*),本來就不在 H13 的 L1 範圍 |
| 29 | GET /Observation?category=&date=&code= |
GET /encounters/{id}/observations、/observations/series、/lab-results |
✅ | — |
| 30 | POST /Observation 量測/輸注速率 |
POST /encounters/{id}/observations、POST /orders/{id}/infusion-checks |
✅ | — |
病歷文件
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 31 | GET /Composition?patient=&type=&status= |
GET /encounters/{id}/compositions、GET /handovers |
◐ | 跨病人的「待簽表單佇列」(設計稿「表單與電子簽章」頁:?status=preliminary)沒有 |
| 32 | POST /Composition 建立草稿(病程/交班/表單) |
POST /encounters/{id}/compositions、/notes、/handovers |
✅ | — |
| 33 | GET /Composition/{id} |
GET /compositions/{id} |
✅ | — |
| 34 | PUT /Composition/{id} 改草稿(If-Match) |
PUT /drafts/{kind} |
◐ | 舊的草稿是前端暫存格,不是文件本身;缺 PUT /compositions/{id}(草稿可改、簽後不可改) |
| 35 | POST /Composition/{id}/$sign |
POST /compositions/{id}/sign |
✅ | 更正:新的是「建新文件+relatesTo.replaces」,舊的是 /amend,語意一致 |
| 36 | POST /Composition/{id}/$receive 接收交班 |
POST /handovers/{id}/receipts |
✅ | — |
工作與交班
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 37 | GET /Task?owner=&status=&focus= |
GET /tasks |
✅ | — |
| 38 | POST /Task |
POST /tasks |
✅ | — |
| 39 | PUT /Task/{id}(結案要證據、來源報告要已判讀) |
PATCH /tasks/{id} |
✅ | — |
溯源與稽核
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 40 | GET /Provenance?target=&activity=&agent= |
— | ❌ | 舊的能「寫」已閱/判讀/簽署/確認名單,但沒有任何一支能「查」:誰簽的、何時判讀的、名單誰確認過。建議 GET /reports/{id}/reviews、GET /compositions/{id}/signatures 或通用 GET /provenance?target= |
| 41 | POST /Provenance(roster-confirm/clinical-review) |
POST /assignments/confirm、/reports/{id}/seen、/reports/{id}/processed、/executions/{id}/review |
✅ | 舊的拆成四支,新的一支——對照即可 |
| 42 | GET /AuditEvent |
GET /audit-events |
✅ | — |
目錄
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 43 | GET /ValueSet/{id}/$expand?filter= |
GET /catalog/items、/catalog/routes、/catalog/icd10、/catalog/frequencies、/catalog/taxonomy |
✅ | — |
人員(2026-09-20 補)
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 44 | GET /Practitioner/$me 我是誰(人+職稱+科別+班別) |
GET /me、GET /shifts/current |
◐ | 舊的 /me 只有帳號與角色,要補職稱/科別,或把 /shifts/current 併進來 |
| 45 | GET /Practitioner?name=&identifier= 找人員 |
— | ❌ | GET /staff?q=:指定接班者、照會對象、收件人都要找人;舊的假設前端已知 id |
| 46 | GET /Practitioner/{id} |
— | ❌ | GET /staff/{id} |
| 47 | GET /PractitionerRole/{id} 職稱/科別/班別 |
— | ❌ | 併入 /staff/{id} 回職稱/科別/班別即可 |
診斷與溝通(2026-09-20 補)
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 48 | GET /Condition?patient=&encounter=&category=&verification-status= 診斷清單 |
— | ❌ | GET /encounters/{id}/diagnoses?category=:設計稿 ws3「診斷」與總覽問題清單;舊的只有 goals |
| 49 | POST /Condition 新增診斷(ICD-10 自目錄) |
— | ❌ | POST /encounters/{id}/diagnoses:代碼必在 ICD-10 目錄、限醫師 |
| 50 | GET /Condition/{id}(+ /_history/{n} 演變) |
— | ❌ | GET /diagnoses/{id}、GET /diagnoses/{id}/history:診斷演變時間軸要讀得到舊版本 |
| 51 | PUT /Condition/{id} 暫定→確立/排除(代碼不可換) |
— | ❌ | PUT /diagnoses/{id}:只能改狀態與依據;換代碼=另建一筆 |
| 52 | GET /Goal?patient=&encounter=&lifecycle-status= 本日目標 |
GET /encounters/{id}/goals |
✅ | — |
| 53 | POST /Goal |
POST /encounters/{id}/goals |
✅ | 舊的要補「限醫師」與「描述必填」 |
| 54 | GET /Goal/{id} |
— | ❌ | GET /goals/{id} |
| 55 | PUT /Goal/{id} 完成/取消 |
— | ❌ | PUT /goals/{id}:舊的目標建了就不能結案 |
| 56 | GET /Communication?patient=&encounter=&category=&based-on= 照會回覆+必要溝通 |
GET /encounters/{id}/communications |
◐ | 舊的只能按就醫查必要溝通;缺按病人跨就醫、按類別、按照會單查 |
| 57 | POST /Communication(consult-reply 或 essential) |
POST /consultations/{id}/response、POST /encounters/{id}/communications |
✅ | 舊的要補規則:照會回覆必指向照會單、照會醫師不能寫必要溝通 |
| 58 | GET /Communication/{id} |
— | ❌ | GET /communications/{id} |
常用與套組(2026-09-20 補)
| # | 新(FHIR) | 舊(H13) | 狀態 | 要補什麼 |
|---|---|---|---|---|
| 59 | GET /List?code=favorites-personal|favorites-dept&source= |
GET /favorites |
◐ | 舊的只有自己的個人常用;缺科常用 |
| 60 | POST /List 建立常用清單 |
— | ❌ | 舊的假設 /favorites 永遠存在;建科常用要有入口 |
| 61 | GET /List/{id} |
GET /favorites |
✅ | — |
| 62 | PUT /List/{id} 整份送回(If-Match) |
PUT /favorites/{key}(單筆加入/移除) |
◐ | 舊的沒有版本鎖,兩個裝置同時改會互蓋;品項要驗目錄 |
| 63 | GET /PlanDefinition?type=order-set|education-set 套組、衛教組套 |
GET /order-sets、GET /education-sets |
✅ | — |
| 64 | GET /PlanDefinition/{id} |
— | ❌ | GET /order-sets/{id}:舊的只回清單,展開套組內容要單筆 |
ValueSet/icd10、frequency、order-category 走 #43 的 $expand,對應舊的 /catalog/icd10、/catalog/frequencies、/catalog/taxonomy,都 ✅。
另外,新的伺服器還有 GET /{type}/{id}/_history/{n}(讀舊版本) 與 Last-Modified/If-None-Match 304——沒列成 OpenAPI 的 operation,但舊的也沒有版本讀取,補 PUT /orders/{id} 之後就會需要。
2. 統計
| 狀態 | 支數 | 編號 |
|---|---|---|
| ✅ 舊的有對應 | 31 | 4 5 12 13 16 17 18 19 20 23 25 26 27 29 30 32 33 35 36 37 38 39 41 42 43 + 52 53 57 61 63 |
| ◐ 只做到一部分 | 13 | 2 6 7 11 22 24 31 34 + 44 56 59 62 |
| ❌ 舊的沒有,要補 | 19 | 1 3 8 9 10 14 15 21 40 + 45 46 47 48 49 50 51 54 55 58 60 64 |
| ⊘ 屬 D1,不在 H13 範圍 | 1 | 28 |
合計 64 支(#1–43 是 2026-09-19 的原表,#44–64 是 2026-09-20 補的)。
(#1 metadata 若決定直接沿用 FHIR 的,就從 ❌ 移到 ✅;上表先算 ❌。)
3. 要補進 H13 的清單(依急迫排序)
| 順位 | 補什麼 | 為什麼現在就要 | 對應新的 |
|---|---|---|---|
| 1 | PUT /orders/{id}(草稿全改/簽後改狀態:stopped、cancelled) |
設計稿治療病程有「停藥」「取消」,主線已可操作;舊的簽署後零修改路徑 | #14 #21 |
| 2 | GET /encounters/{id}/flags(過敏/隔離/管路天數/嚴重度) |
病人清單每一列都在用;嚴重度規則待院方,但欄位得先有 | #9 #10 |
| 3 | 跨病人佇列:GET /orders?status=draft、GET /compositions?status=preliminary、GET /executions?patient=&from=&to= |
「醫囑與處方」「表單與電子簽章」「eMAR 今日劑次」三個畫面都是跨病人或跨醫囑的 | #11 #31 #22 |
| 4 | GET /provenance?target=(或分散的 reviews/signatures) |
畫面要顯示「誰簽的」「已判讀」章;舊的只能寫不能讀 | #40 |
| 5 | GET /patients?q=、GET /encounters?status= |
手圈掃碼、病歷查詢、全科清單 | #3 #6 |
| 6 | POST /assignments、GET /assignments?patient= |
管理者維護照護關係/主治唯一(24 項 #1、#12) | #7 #8 |
| 7 | POST /orders/{id}/void、POST /compositions/{id}/void |
誤建不刪、留紀錄(稽核上等同刪除) | #15 |
| 8 | 通用 POST /batch(交易)與 GET /capabilities |
多筆同交易、前端依能力表顯示按鈕 | #1 #2 |
| 9 | GET/POST /encounters/{id}/diagnoses、GET/PUT /diagnoses/{id}、GET /diagnoses/{id}/history |
設計稿「診斷」頁與診斷演變時間軸;舊的完全沒有診斷 | #48–#51 |
| 10 | GET /staff?q=、GET /staff/{id}(含職稱/科別/班別) |
指定接班者、照會對象、登入後顯示職稱;舊的 /me 資訊不夠 |
#44–#47 |
| 11 | GET /communications?patient=&category=&consultation=、GET /communications/{id} |
共同照護頁要看某病人所有照會回覆;舊的只能按就醫查 | #56 #58 |
| 12 | PUT /goals/{id}、GET /goals/{id};科常用與 PUT /favorites 版本鎖;GET /order-sets/{id} |
目標要能結案;兩台裝置改常用會互蓋;套組要能展開 | #54 #55 #59 #60 #62 #64 |
4. 怎麼用這份
- 舊規格要更新時,照 §3 的順位補進
H13_API端點目錄.md與_tools/openapi.yaml,補完把本表的 ❌/◐ 改成 ✅。 - 新的 64 支都有參考實作與範例(
openapi/swagger.html、fhir-server),舊的補端點時可以直接拿對應那一支的請求/回應範例改欄位名。 - 2026-09-19 時兩邊共同沒有的六項(Condition/Goal、Communication、Practitioner/$me、ICD-10 目錄、常用/套組、頻率/分類)已於 2026-09-20 補進新的(#44–#64,
08 §3有對照);舊的對應端點列在 §3 的第 9–12 順位。