04 · 業務規則與狀態機

本章的規則全部來自 icu-vue 原型 src/domain/store.js 的單一 mutation 邊界,以及 29 份 S/N 規格的欄位註記。這些規則必須在伺服器強制,不能只靠前端。

每條規則有唯一編號,可直接作為測試案例編號。錯誤碼對應 05。


4.1 三軸狀態

藥物醫囑同時有三個彼此獨立的狀態。FHIR 的單一 status 裝不下,強行合併會產生臨床安全風險。

軸 內容 FHIR 表達
臨床狀態 這張醫囑目前是否有效 MedicationRequest.status:draft → active → stopped / cancelled
本地簽署 醫師是否已簽 存在 Provenance.signature(targetReference 指向該版本)
HIS 傳輸 是否送出、HIS 是否接受 extension[hisTransmissionStatus]:notSent / sent / accepted / rejected / unknown

合法組合

臨床 簽署 HIS 傳輸 意義 護理端可執行?
draft 無 notSent 草稿 ✗
draft 有 notSent 已簽未送 ✗
draft 有 sent 已送出,等回應 ✗
draft 有 unknown 回應未知 ✗
draft 有 rejected HIS 拒絕 ✗
active 有 accepted 生效中 ✓
stopped 有 accepted 已停止 ✗

只有 active + accepted 才是可執行狀態(BR-MED-002)。任何其他組合,護理端建立 MedicationAdministration 一律拒絕。

HIS 狀態不是給藥狀態

規格 S11 對 MedicationChangeStatus 的原文警告:

D1 §3.10:1 新開立、2 審核、3 匯總領取、4 發放、5 急救車補充;均不是 eMAR 已給藥

因此 MedicationChangeStatus 的回推只能寫入 extension[hisTransmissionEvent],永遠不得建立或修改 MedicationAdministration。這是 BR-INT-004。

unknown 狀態(模擬 HIS 逾時)有特殊約束:禁止重送。必須先查明原請求結果,否則可能重複開立(BR-ORD-007)。


4.2 規則表

BR-AUTH · 角色與授權

編號 規則 HTTP 錯誤碼
BR-AUTH-001 操作者必須是已知的 PractitionerRole 401 UNKNOWN-ACTOR
BR-AUTH-002 開立醫囑、判讀結果、核對執行、撰寫病歷限主責醫師(doctor 且非照會身分) 403 ROLE-DOCTOR-ONLY
BR-AUTH-003 照會醫師可查閱指派病人的資料與回覆照會,不可開立醫囑或修改主治病歷 403 CONSULT-READ-ONLY
BR-AUTH-004 生理量測、給藥執行、輸注觀察限護理師 403 ROLE-NURSE-ONLY
BR-AUTH-005 必要溝通(Communication)醫師與護理師皆可新增 — —
BR-AUTH-006 作者身分不可指定。author/performer/requester 一律取自存取權杖,客戶端送的值被忽略 422 ACTOR-NOT-ASSIGNABLE

BR-AUTH-006 對應規格原文「當次開立醫師帳號;不得任填其他醫師」。

BR-CTX · 病人與就醫情境

編號 規則 HTTP 錯誤碼
BR-CTX-001 除名單確認、情境切換等系統操作外,所有寫入必須帶有效 subject(Patient) 422 PATIENT-REQUIRED
BR-CTX-002 寫入時目標病人必須在操作者的 CareTeam 內(照會醫師:必須有指派給他的照會)。讀取自 2026-09-19 起放寬(09-10 會議承接 #1「全院內醫護可查閱」):醫師與護理師可讀全科病人,照會醫師仍只能讀有照會單的病人 403 PATIENT-OUT-OF-SCOPE
BR-CTX-003 encounter 必須與 subject 一致;不一致時拒絕且不帶入任何草稿 422 ENCOUNTER-MISMATCH
BR-CTX-004 除名單確認本身外,寫入前必須已確認本班照護名單(存在該班別的 CareTeam 確認 Provenance) 409 ROSTER-NOT-CONFIRMED
BR-CTX-005 引用來源(focus/basedOn/request)必須屬於同一病人 422 SOURCE-PATIENT-MISMATCH

BR-ORD · 醫囑生命週期

編號 規則 HTTP 錯誤碼
BR-ORD-001 建立醫囑必須指定病程來源:同病人、同作者、已存在的 Composition 422 PROGRESS-NOTE-REQUIRED
BR-ORD-002 $sign 只能簽自己建立且尚未簽署的醫囑 403 SIGN-OWN-DRAFT-ONLY
BR-ORD-003 $sign 時把病程來源的當下版本快照寫入 supportingInformation(帶版本 Reference) — —
BR-ORD-004 $submit 僅接受「已簽署且 hisTransmissionStatus=notSent」 409 SUBMIT-STATE-INVALID
BR-ORD-005 HIS 回應僅接受 accepted / rejected;accepted 時臨床狀態轉 active 422 HIS-RESPONSE-INVALID
BR-ORD-006 已送出的醫囑不可就地修改內容;須取消後重新開立 409 ORDER-IMMUTABLE-AFTER-SUBMIT
BR-ORD-007 hisTransmissionStatus=unknown 時禁止重送,必須先查明原請求 409 RESEND-BLOCKED-UNKNOWN
BR-ORD-008 檢驗/檢查醫囑被 HIS 接受時,自動建立待回 DiagnosticReport(status=registered)與追蹤 Task — —
BR-ORD-009 一次批次建立的醫囑共用 orderSet 標記,但各自獨立簽署、送出、執行、回報 — —

BR-MED · 給藥執行

編號 規則 HTTP 錯誤碼
BR-MED-001 藥品碼、給藥途徑必須帶 coding.system+code,且來自已同步目錄;只給 text 拒絕 422 CODE-REQUIRED
BR-MED-002 建立 MedicationAdministration 前,來源醫囑必須為 active + accepted 409 ORDER-NOT-EXECUTABLE
BR-MED-003 status=completed 的藥物執行,verificationChecklist 五項必須全部為 true;不可由單次掃碼推定 422 FIVE-RIGHTS-INCOMPLETE
BR-MED-004 實際劑量或途徑與醫囑不同、或狀態非 completed 時,note(原因)必填 422 VARIANCE-REASON-REQUIRED
BR-MED-005 同一劑次(occurrence-id)至多一筆 completed。以 If-None-Exist 強制 200 DOSE-ALREADY-ADMINISTERED
BR-MED-006 實際執行時間必須落在該醫囑版本的有效期間 [period.start, period.end) 422 TIME-OUT-OF-ORDER-PERIOD
BR-MED-007 status=completed 時 dosage.dose 與 dosage.route 必填;不得以醫囑預定值當作事實 422 ACTUAL-VALUE-REQUIRED
BR-MED-008 醫師核對(Provenance activity=clinical-review)的 reviewNote 必填;前次核對結論全部保留 422 REVIEW-NOTE-REQUIRED

BR-OBS · 生理量測

編號 規則 HTTP 錯誤碼
BR-OBS-001 量測項目必須在支援清單內,數值必須為非負有限數 422 VALUE-INVALID
BR-OBS-002 血壓必須以單一 Observation 的兩個 component 表達,且兩子項同時提供 422 BP-COMPONENTS-REQUIRED
BR-OBS-003 缺值一律 dataAbsentReason,禁止送 0 代替 422 ZERO-AS-MISSING
BR-OBS-004 輸注速率觀察必須 partOf 一筆 accepted 醫囑的執行,且 notCountedAsIntake=true 422 INFUSION-SOURCE-REQUIRED
BR-OBS-005 出入量平衡只在入量與出量都有紀錄時計算;缺一不計 — —

BR-RPT · 檢驗結果

編號 規則 HTTP 錯誤碼
BR-RPT-001 DiagnosticReport 與其 Observation 一律由 HIS 同步;EMR 端不可建立或修改 422 READ-ONLY-SOURCE
BR-RPT-002 記錄已閱/判讀時,報告必須已回報(status=final 以上)且來源未缺漏 409 REPORT-NOT-AVAILABLE
BR-RPT-003 判讀(clinical-review)限主責醫師,reviewNote 必填 403 / 422 ROLE-DOCTOR-ONLY / REVIEW-NOTE-REQUIRED
BR-RPT-004 已閱、判讀、工作結案彼此獨立;任一項完成不影響其他待回項目 — —
BR-RPT-005 無 interpretation 的結果不得歸類為正常 — —

BR-DOC · 病歷文件

編號 規則 HTTP 錯誤碼
BR-DOC-001 Progress Note 的 S/O/A/P 四段皆必填 422 SECTION-REQUIRED
BR-DOC-002 Admission Note 必填 CC/PI/PH/入院生命徵象/初步評估 422 SECTION-REQUIRED
BR-DOC-003 Discharge Summary 必填入出院日期與診斷、檢驗檢查、手術處置、已執行醫囑、住院經過、追蹤計畫、轉診建議 422 SECTION-REQUIRED
BR-DOC-004 $sign 只能簽自己的 preliminary 文件 403 SIGN-OWN-DRAFT-ONLY
BR-DOC-005 已簽文件不可修改;更正一律新建 Composition + relatesTo[replaces] + 更正原因必填 409 / 422 SIGNED-IMMUTABLE / AMEND-REASON-REQUIRED
BR-DOC-006 複製前一日病程時,來源必須是已簽且具完整 SOAP 的前一日病程 409 NO-COPYABLE-PROGRESS
BR-DOC-007 複製產生的草稿必須帶 copyTrace,保存時記錄哪些段落被修改。複製不視為已核對 — —
BR-DOC-008 自動帶入的內容一律保留來源編號(section.entry 帶版本 Reference) — —
BR-DOC-009 診斷碼必須是 active 的 ICD-10 目錄項 422 CATALOG-INACTIVE
BR-DOC-010 草稿依作者、病人、文件類型分開儲存,彼此不覆寫 — —

BR-TASK · 臨床工作

編號 規則 HTTP 錯誤碼
BR-TASK-001 只有目前 owner 可更新工作狀態 403 TASK-NOT-OWNER
BR-TASK-002 結案(completed)必填 output(完成證據);若 focus 是檢驗報告,該報告必須已回報且已有判讀紀錄 422 / 409 EVIDENCE-REQUIRED / SOURCE-NOT-PROCESSED
BR-TASK-003 狀態異動一律追加歷程,不覆寫 — —

BR-HO · 交班

編號 規則 HTTP 錯誤碼
BR-HO-001 交班摘要必填 422 SUMMARY-REQUIRED
BR-HO-002 只能更正自己且尚未被更正的最新交出版本;更正原因必填 409 / 422 HANDOVER-SUPERSEDED / AMEND-REASON-REQUIRED
BR-HO-003 接收者角色必須與交班角色相符(醫師交醫師、護理交護理) 403 HANDOVER-ROLE-MISMATCH
BR-HO-004 接收後,交出者名下未完成的工作 owner 轉移給接收者;已完成的不動 — —
BR-HO-005 已被更正的版本不可接收;必須接收最新版本 409 HANDOVER-SUPERSEDED
BR-HO-006 同一版本不可重複接收 409 HANDOVER-ALREADY-RECEIVED
BR-HO-007 交班內容包含交出當下未結工作的快照;快照不隨後續變動而改 — —

BR-CONS · 照會

編號 規則 HTTP 錯誤碼
BR-CONS-001 建立照會限主責醫師;受照會者必須是具科別的照會身分 403 / 422 ROLE-DOCTOR-ONLY / ASSIGNEE-INVALID
BR-CONS-002 只有被指派的照會醫師可回覆 403 CONSULT-NOT-ASSIGNEE
BR-CONS-003 已回覆的照會不可重複回覆 409 CONSULT-ALREADY-ANSWERED
BR-CONS-004 照會回覆內容必填 422 RECOMMENDATION-REQUIRED

BR-CAT · 目錄

編號 規則 HTTP 錯誤碼
BR-CAT-001 active=false 的品項不可用於新開立;既有醫囑仍可讀回 422 CATALOG-INACTIVE
BR-CAT-002 開立時寫入 catalogSnapshot(含目錄版本與來源 SHA256) — —
BR-CAT-003 簽署前重新驗證品項仍有效;已停用則阻擋並要求重選 409 CATALOG-CHANGED
BR-CAT-004 中文譯名未核定,不得作為送 HIS 的識別依據 — —

BR-TIME · 時間

編號 規則 HTTP 錯誤碼
BR-TIME-001 所有臨床時間必須帶時區位移 422 TIMEZONE-REQUIRED
BR-TIME-002 時間格式必須可解析為有效時點 422 TIME-INVALID
BR-TIME-003 記錄時間(recorded)由伺服器產生,與臨床時間(effective)分開儲存 — —

BR-TIME-003 很重要:原型的執行紀錄同時存 at(實際執行時間,護理師填)與 recorded(記錄時間,系統產生)。兩者混用會讓補登紀錄看起來像即時紀錄。


4.3 狀態機

藥物醫囑

                 $sign              $submit          HIS accepted
  [draft] ─────────────────► [signed] ──────► [sent] ──────────► [active]
     │                          │                │                  │
     │ cancel                   │ cancel         │ HIS rejected     │ stop
     ▼                          ▼                ▼                  ▼
 [cancelled]               [cancelled]      [rejected]          [stopped]
                                                 │
                                       HIS timeout │
                                                 ▼
                                            [unknown] ──╳ 禁止重送
                                                        必須先查明原請求

給藥執行

  醫囑 active+accepted
        │
        ├─ 五對全核對 + 實際劑量/途徑 ──► [completed]  (每劑次至多一筆)
        ├─ 原因必填 ─────────────────────► [on-hold](延遲)
        └─ 原因必填 ─────────────────────► [not-done](未執行)

  無任何紀錄 ≠ not-done。沒建立資源就是「尚未記錄」。

執行紀錄建立後不可修改(03 §3.2.2)。醫師核對以 Provenance 追加:

  [completed] ──► Provenance(clinical-review, outcome=reviewed)
              └─► Provenance(clinical-review, outcome=difference) → 產生追蹤 Task

檢驗醫囑 → 報告

 ServiceRequest                    DiagnosticReport
   [draft]
     │ $sign / $submit
   [active] ── HIS accepted ──► 自動建立 [registered](待回)
                                      │ HIS 回報
                                      ▼
                                   [final]
                                      │
                        ┌─────────────┼─────────────┐
                        ▼             ▼             ▼
            Provenance(READ)  Provenance(review)  Task[completed]
                  已閱             判讀/處理          結案(需證據)

三者獨立,不互相觸發。

病歷文件

  [preliminary] ── $sign ──► [final] ── 更正 ──► 新 Composition [preliminary]
                                 │                      │ relatesTo[replaces]
                                 └──────────────────────┘
                                 舊版轉 [amended],內容保留

交班

  交出 v1 [final] ──► Provenance(接收) ──► Task.owner 轉移
     │
     │ 更正(限自己、限未被更正)
     ▼
  交出 v2 [final] relatesTo[replaces]→v1
     │
     └─► v1 不可再接收(BR-HO-005);v2 需重新接收

4.4 規則來源追溯

規則群 原型來源 規格畫面
BR-AUTH store.js requireRole / requirePrimaryDoctor S01, S02
BR-CTX store.js dispatch 前置檢查、confirmed S02, S03, N01
BR-ORD order, catalogOrder, signOrder, sendOrder, hisResponse S11, S12
BR-MED execute, reviewExecution N02, N07, S11
BR-OBS measure, measureBP, infusion N03, N04, N05, N08
BR-RPT reportReturn, readReport, processReport S13
BR-DOC note, recordNote, signNote, amendNote, copyPreviousProgress S07, S08, S20, N09
BR-TASK task, taskStatus S03, N01, S18
BR-HO handover, receive N06
BR-CONS consultRequest, consultRespond S15
BR-CAT clinical.js search, snapshot S11, S12