04 · 業務規則與狀態機

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

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


4.1 三軸狀態

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

內容 FHIR 表達
臨床狀態 這張醫囑目前是否有效 MedicationRequest.statusdraftactivestopped / cancelled
本地簽署 醫師是否已簽 存在 Provenance.signaturetargetReference 指向該版本)
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 已停止

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

HIS 狀態不是給藥狀態

規格 S11MedicationChangeStatus 的原文警告:

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 作者身分不可指定。authorperformerrequester 一律取自存取權杖,客戶端送的值被忽略 422 ACTOR-NOT-ASSIGNABLE

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

BR-CTX · 病人與就醫情境

編號 規則 HTTP 錯誤碼
BR-CTX-001 除名單確認、情境切換等系統操作外,所有寫入必須帶有效 subject(Patient) 422 PATIENT-REQUIRED
BR-CTX-002 目標病人必須在操作者的 CareTeam 內(照會醫師:必須有指派給他的照會) 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 引用來源(focusbasedOnrequest)必須屬於同一病人 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 / rejectedaccepted 時臨床狀態轉 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 接受時,自動建立待回 DiagnosticReportstatus=registered)與追蹤 Task
BR-ORD-009 一次批次建立的醫囑共用 orderSet 標記,但各自獨立簽署、送出、執行、回報

BR-MED · 給藥執行

編號 規則 HTTP 錯誤碼
BR-MED-001 藥品碼、給藥途徑必須帶 coding.systemcode,且來自已同步目錄;只給 text 拒絕 422 CODE-REQUIRED
BR-MED-002 建立 MedicationAdministration 前,來源醫囑必須為 activeaccepted 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=completeddosage.dosedosage.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 已簽文件不可修改;更正一律新建 CompositionrelatesTo[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