# 情境三:跨院病歷整合管理系統 ## 2.1 主題 **跨院病歷整合管理系統(Cross-Hospital Record Administration and Synchronization System)** > 管理員透過中央 FHIR 平台監控並整合不同醫院的病歷資料(Patient), > 使用 `Person` 建立唯一身份索引,確保資料正確對應並維持系統同步狀態。 > 系統支援審核、授權、資料一致性檢查、以及異常警示。 --- ## 2.2 應用情境(User Story) **主要參與者:** 系統管理員、醫院資訊部門(HIS 管理員)、FHIR 中央伺服器(Central FHIR Server) **使用者故事:** > 作為一名系統管理員,我希望能在中央平台上整合與管理來自多家醫院的病歷資料, > 並確保所有 `Patient` 都正確連結至唯一的 `Person` 身份,避免重複登錄或錯誤配對。 > > 當新醫院加入、病歷更新或異常發生時,我能即時檢視同步狀態、修正連結、或停用不活躍帳號, > 以維持跨院資料的完整性與一致性。 --- ## 2.3 系統流程與 CRUD 對應 | 流程階段 | 管理員操作說明 | CRUD 類型 | 使用的 FHIR 資源 | | ------------- | ------------------------------------------------ | -------------------------- | --------------------------------- | | (1) 醫院註冊與授權 | 管理員建立 `Organization` 並核發授權金鑰,允許其上傳病歷資料。 | **C(Create)** | `Organization`, `Practitioner` | | (2) 身分驗證與資料整合 | 管理員審核新上傳的 `Patient` 資料,並建立或連結對應的 `Person`。 | **C / U(Create / Update)** | `Person`, `Patient` | | (3) 資料查詢與稽核 | 管理員可查詢各醫院同步狀況、資料異常、重複紀錄與更新歷程。 | **R(Read)** | `Patient`, `Person`, `AuditEvent` | | (4) 資料修正與同步 | 管理員可手動修正 `Person.link` 或 `Patient.link`,確保跨院一致性。 | **U(Update)** | `Person`, `Patient` | | (5) 停用或封存資料 | 若發現重複或不合法紀錄,管理員可標記為不活躍狀態。 | **D(Deactivate)** | `Patient`, `Person` | --- ## 2.4 使用的 FHIR 資源 | 資源名稱 | 主要欄位 | 說明 | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------- | | **Person** | `identifier`, `name`, `gender`, `birthDate`, `link`, `active` | 作為中央身分索引,統一連結多院病歷 | | **Patient** | `identifier`, `name`, `gender`, `birthDate`, `managingOrganization`, `generalPractitioner`, `link`, `active` | 來自各醫院的個別病歷資料 | | **Organization** | `id`, `name`, `address`, `type`, `telecom` | 醫療機構資訊與授權來源 | | **Observation** | `code`, `valueQuantity`, `effectiveDateTime`, `subject` | 管理員可查閱同步的病人觀察資料 | | **AuditEvent** | `action`, `recorded`, `agent`, `entity`, `outcome` | 系統稽核事件(登入、修改、資料異常等) | | **Link (Person.link / Patient.link)** | `other`, `type` | 管理員可用於修正或建立跨院關聯 | --- ## 2.5 範例程式碼(FHIR Person、Patient、Observation、Organization) ### ✅ (1) 管理員建立醫院組織(Organization) ```python import requests org = { "resourceType": "Organization", "id": "hospitalA", "name": "台北醫學中心", "type": [{"text": "Hospital"}], "address": [{"city": "台北市", "line": ["仁愛路三段"]}], "telecom": [{"system": "phone", "value": "02-12345678"}] } res = requests.post("http://central.fhir.server/Organization", json=org) print(res.status_code) ``` --- ### ✅ (2) 管理員建立 Person(中央身分索引) ```python person = { "resourceType": "Person", "identifier": [{"system": "http://national-id.tw", "value": "A123456789"}], "name": [{"use": "official", "family": "林", "given": ["小華"]}], "gender": "female", "birthDate": "1985-06-10", "active": True } res = requests.post("http://central.fhir.server/Person", json=person) print(res.status_code) ``` --- ### ✅ (3) 管理員連結多院病人(Person.link) ```python link_update = { "resourceType": "Person", "id": "12345", "link": [ {"target": {"reference": "Patient/HOSP-A-123"}}, {"target": {"reference": "Patient/HOSP-B-456"}} ] } res = requests.put("http://central.fhir.server/Person/12345", json=link_update) print(res.status_code) ``` --- ### ✅ (4) 稽核紀錄查詢(AuditEvent) ```python audit_query = "http://central.fhir.server/AuditEvent?_sort=-recorded&_count=10" result = requests.get(audit_query).json() for entry in result["entry"]: e = entry["resource"] print(f"[{e['recorded']}] {e['action']} by {e['agent'][0]['who']['display']}") ``` --- ### ✅ (5) 停用不活躍病歷 ```python deactivate = { "resourceType": "Patient", "id": "HOSP-A-123", "active": False } requests.put("http://central.fhir.server/Patient/HOSP-A-123", json=deactivate) ``` --- ## 2.6 延伸應用 1. **跨院資料稽核平台**:管理員可視覺化監控各醫院上傳頻率、異常狀況、同步延遲等。 2. **角色權限管理**:區分醫師、護理師、行政人員、資料管理者不同權限層級。 3. **自動比對重複資料**:利用姓名、身分證字號、生日自動比對重複的 `Patient`,自動建立或提示 `Person.link`。 4. **FHIR Subscription 通知**:當新醫院上傳病歷或異常發生時,系統自動通知管理員。 5. **AI 驗證輔助**:可利用 NLP 模型檢測跨院紀錄中可能的資料不一致性。