iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0

前言

在上一篇文章中,我們認識了Observation Resource。

Observation可以表示體溫、心跳、血氧、血糖及其他臨床觀察結果。某些Observation只有一個主要結果,例如:

體溫:37.2°C

但是,我們平常看到的血壓通常會包含兩個數值,例如:

120/80 mmHg

其中,120與80分別代表不同的生理意義,不能只記錄成一個沒有結構的文字。

FHIR可以使用Observation的component,將同一次血壓測量中的收縮壓及舒張壓放在同一筆Resource中。

今天不進行實際操作,而是從資料結構的角度,了解血壓為什麼需要兩個數值,以及FHIR如何表示這項資料。

本文中的數值、病人及時間皆為虛構教學範例,不可作為個人健康判斷或疾病診斷依據。


血壓的兩個數值是什麼?

血壓通常會以兩個數值呈現:

收縮壓/舒張壓

例如:

120/80 mmHg

可以拆成:

數值 名稱 基本意義
120 收縮壓 心臟收縮、將血液送出時的動脈壓力
80 舒張壓 心臟舒張、充填血液時的動脈壓力

血壓常使用:

mmHg

作為顯示單位,也就是毫米汞柱。

兩個數值都屬於同一次血壓測量,但代表不同項目,因此需要分開標示。


為什麼不能只記錄成文字?

系統可以把血壓寫成:

{
  "bloodPressure": "120/80"
}

人類看到後可能知道:

  • 120是收縮壓
  • 80是舒張壓

但是,電腦很難只靠這個文字可靠地處理資料。

可能出現以下問題:

  • 沒有測量單位
  • 不知道兩個數值的排列順序
  • 無法單獨查詢收縮壓
  • 無法單獨比較舒張壓
  • 不知道這是血壓還是其他比例
  • 無法驗證每個數值的資料型別
  • 不同系統可能使用不同分隔符號

例如,其他系統可能寫成:

120-80
120/80 mmHg
SBP 120, DBP 80
收縮壓120;舒張壓80

對人類來說都能理解,但電腦需要額外解析文字。

FHIR因此將收縮壓與舒張壓分成兩組結構化的component


血壓Observation的基本概念

一筆血壓Observation可以理解為:

血壓測量
├── 收縮壓:120 mmHg
└── 舒張壓:80 mmHg

最外層Observation代表「這是一次血壓測量」。

component則分別記錄:

  • 收縮壓
  • 舒張壓

兩個component都有自己的:

  • code
  • valueQuantity
  • interpretation
  • referenceRange
  • dataAbsentReason

一份血壓Observation範例

以下是一份簡化的FHIR R4血壓Observation:

{
  "resourceType": "Observation",
  "id": "blood-pressure-001",
  "status": "final",
  "category": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "vital-signs",
          "display": "Vital Signs"
        }
      ],
      "text": "生命徵象"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "85354-9",
        "display": "Blood pressure panel with all children optional"
      }
    ],
    "text": "血壓"
  },
  "subject": {
    "reference": "Patient/patient-001",
    "display": "王小明"
  },
  "encounter": {
    "reference": "Encounter/encounter-001",
    "display": "2026年9月3日門診"
  },
  "effectiveDateTime": "2026-09-03T09:05:00+08:00",
  "performer": [
    {
      "reference": "Practitioner/nurse-001",
      "display": "陳護理師"
    }
  ],
  "component": [
    {
      "code": {
        "coding": [
          {
            "system": "http://loinc.org",
            "code": "8480-6",
            "display": "Systolic blood pressure"
          }
        ],
        "text": "收縮壓"
      },
      "valueQuantity": {
        "value": 120,
        "unit": "mmHg",
        "system": "http://unitsofmeasure.org",
        "code": "mm[Hg]"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system": "http://loinc.org",
            "code": "8462-4",
            "display": "Diastolic blood pressure"
          }
        ],
        "text": "舒張壓"
      },
      "valueQuantity": {
        "value": 80,
        "unit": "mmHg",
        "system": "http://unitsofmeasure.org",
        "code": "mm[Hg]"
      }
    }
  ]
}

這筆Observation表示:

王小明在2026年9月3日門診中完成一次血壓測量,收縮壓為120 mmHg,舒張壓為80 mmHg。

它只是在描述一筆虛構資料,不能單靠這個例子判定任何人的血壓是否正常。


最外層code:這是一組血壓測量

"code": {
  "coding": [
    {
      "system": "http://loinc.org",
      "code": "85354-9",
      "display": "Blood pressure panel with all children optional"
    }
  ],
  "text": "血壓"
}

最外層code表示整筆Observation記錄的是血壓Panel。

這裡的Panel可以理解為:

一組彼此相關的測量結果。

血壓不是只靠一個數值表示,而是一組包含收縮壓及舒張壓的結果,因此適合使用Panel概念。


component:多個相關結果

"component": [
  {
    ...
  },
  {
    ...
  }
]

component是一個Array,可以包含一個以上的相關結果。

本例中有兩個component:

component[0]:收縮壓
component[1]:舒張壓

每個component都是獨立結構,也有自己的codevalueQuantity


第一個component:收縮壓

{
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8480-6",
        "display": "Systolic blood pressure"
      }
    ],
    "text": "收縮壓"
  },
  "valueQuantity": {
    "value": 120,
    "unit": "mmHg",
    "system": "http://unitsofmeasure.org",
    "code": "mm[Hg]"
  }
}

這個component可以拆成兩部分。

code

LOINC 8480-6

表示測量項目是收縮壓。

valueQuantity

120 mmHg

表示實際數值及單位。

因此,這個component完整表達:

收縮壓為120 mmHg。


第二個component:舒張壓

{
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8462-4",
        "display": "Diastolic blood pressure"
      }
    ],
    "text": "舒張壓"
  },
  "valueQuantity": {
    "value": 80,
    "unit": "mmHg",
    "system": "http://unitsofmeasure.org",
    "code": "mm[Hg]"
  }
}

同樣可以拆成:

code

LOINC 8462-4

表示測量項目是舒張壓。

valueQuantity

80 mmHg

表示實際數值及單位。

這個component完整表達:

舒張壓為80 mmHg。


三個LOINC代碼的分工

資料層級 LOINC code 基本用途
最外層Observation 85354-9 表示一組血壓Panel
收縮壓component 8480-6 表示收縮壓
舒張壓component 8462-4 表示舒張壓

最外層的code回答:

這整筆Observation在測量什麼?

component中的code則回答:

這個特定數值代表收縮壓還是舒張壓?


unit和code為什麼寫得不一樣?

血壓單位的Quantity如下:

"valueQuantity": {
  "value": 120,
  "unit": "mmHg",
  "system": "http://unitsofmeasure.org",
  "code": "mm[Hg]"
}

其中:

欄位 內容 用途
value 120 測量數值
unit mmHg 顯示給人閱讀的單位
system http://unitsofmeasure.org UCUM單位系統
code mm[Hg] UCUM標準代碼

unitcode看起來不同,但兩者用途也不同:

  • unit主要方便人類閱讀。
  • system+code主要供系統標準化處理。

因此,人類介面可以顯示熟悉的mmHg,電腦則使用UCUM的mm[Hg]辨認單位。


為什麼不建立兩筆獨立Observation?

理論上,收縮壓和舒張壓也可以被視為兩個測量項目。

但是,它們通常是在同一次血壓測量中共同產生,彼此具有緊密關係。

如果拆成兩筆完全獨立的Observation,就需要另外確認:

  • 是否來自同一次測量
  • 測量時間是否相同
  • 使用的設備是否相同
  • 測量部位是否相同
  • 執行人員是否相同
  • 兩個數值是否被錯誤配對

將它們放在同一筆Observation的component中,可以清楚表示:

這兩個數值屬於同一次血壓測量。


component和多筆Observation怎麼選?

不是所有同時出現的檢驗結果都應放入component。

通常適合使用component的情況是:

  • 多個結果共同構成一個觀察概念
  • 各結果共享相同的觀察時間
  • 各結果共享相同的subject
  • 各結果彼此緊密相關
  • Profile明確規定使用component

血壓的收縮壓及舒張壓就是典型例子。

如果兩項檢驗可以分別獨立存在、具有不同時間或不同生命週期,就可能更適合建立不同Observation,再透過DiagnosticReport或其他方式組織。

實際選擇仍應依FHIR規範及使用的Profile決定。


血壓Observation通常不使用最外層valueQuantity

體溫Observation可能直接使用:

"valueQuantity": {
  "value": 37.2,
  "unit": "°C"
}

因為體溫通常只有一個主要數值。

血壓則包含收縮壓及舒張壓,因此通常將數值放在:

component.valueQuantity

而不是最外層:

Observation.valueQuantity

可以比較:

Observation 結果位置
體溫 最外層valueQuantity
心跳 最外層valueQuantity
血氧 最外層valueQuantity
血壓 component.valueQuantity

component也能有interpretation

每個component可以擁有自己的結果解讀。

例如,收縮壓可能包含:

"interpretation": [
  {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
        "code": "H",
        "display": "High"
      }
    ],
    "text": "偏高"
  }
]

舒張壓則可能有不同的interpretation。

這是因為收縮壓和舒張壓需要分別判讀,不能只替整筆Observation放入一個模糊的「異常」。

不過,interpretation應由醫療或檢驗系統依照正確臨床規則產生,不能只看到單一數值就自行填寫。


component也能有referenceRange

每個component也可以有自己的參考範圍:

"referenceRange": [
  {
    "text": "依醫療機構及病人情境判定"
  }
]

收縮壓和舒張壓是不同項目,因此可能具有不同的參考或判讀規則。

此外,血壓判讀還可能受到以下因素影響:

  • 年齡
  • 懷孕狀態
  • 測量姿勢
  • 測量部位
  • 使用設備
  • 是否休息
  • 是否重複測量
  • 是否在醫療院所測量
  • 病人的疾病及用藥狀況

所以本文不提供固定的正常值或診斷界線。FHIR負責表達資料,不負責單獨決定臨床診斷。


如果只測到其中一個數值呢?

有時候資料可能不完整,例如:

  • 儀器只回傳其中一項
  • 舊系統遺失部分資料
  • 測量失敗
  • 資料無法判讀
  • 轉換過程缺少欄位

如果某個component沒有結果,可以使用dataAbsentReason說明原因。

例如:

{
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8462-4",
        "display": "Diastolic blood pressure"
      }
    ],
    "text": "舒張壓"
  },
  "dataAbsentReason": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/data-absent-reason",
        "code": "unknown",
        "display": "Unknown"
      }
    ],
    "text": "結果未知"
  }
}

這比直接刪除舒張壓component而完全不說明更清楚。


status仍然不可忽略

血壓Observation仍然需要:

"status": "final"

status表示整筆Observation目前的狀態,例如:

  • preliminary
  • final
  • amended
  • corrected
  • cancelled
  • entered-in-error

如果一筆血壓Observation被標記為:

entered-in-error

代表它被判定為錯誤輸入,不應和一般final結果同等使用。

即使收縮壓及舒張壓的數值都有填寫,也必須一起查看status。


effectiveDateTime:什麼時候量測?

"effectiveDateTime": "2026-09-03T09:05:00+08:00"

血壓可能隨時間變化,因此量測時間非常重要。

同一位病人可能在短時間內具有多筆不同血壓:

09:00 第一次測量
09:05 休息後再次測量
09:15 第三次測量

如果資料只有數值,沒有時間,就無法了解測量順序及變化。


subject與encounter

"subject": {
  "reference": "Patient/patient-001"
}

表示血壓屬於哪一位病人。

"encounter": {
  "reference": "Encounter/encounter-001"
}

表示血壓與哪次就醫有關。

同一位Patient可能有許多次門診、急診及住院紀錄,透過Encounter可以保留血壓產生時的就醫情境。


bodySite與測量部位

Observation可以使用bodySite表示測量部位。

例如:

"bodySite": {
  "text": "左上臂"
}

血壓可能在:

  • 左上臂
  • 右上臂
  • 手腕
  • 其他部位

進行測量。

如果測量部位對資料解讀有影響,就應該保留這項資訊,並盡量使用合適的標準代碼。


method與測量方式

Observation可以使用method記錄測量方法,例如:

"method": {
  "text": "自動血壓計測量"
}

可能的測量方式包括:

  • 自動血壓計
  • 手動聽診
  • 居家測量
  • 連續監測
  • 其他方式

FHIR提供欄位保存這些情境,但具體需要哪些欄位,仍應依使用目的及Profile決定。


device與量測設備

如果需要記錄使用的血壓計,可以透過Reference連結Device:

"device": {
  "reference": "Device/blood-pressure-device-001",
  "display": "範例自動血壓計"
}

Device Resource可以包含:

  • 製造商
  • 型號
  • 序號
  • 裝置識別資料
  • 使用狀態

當結果品質可能受到設備影響時,保留Device資訊有助於追蹤資料來源。


血壓Observation不等於高血壓診斷

血壓Observation記錄的是:

某個時間點或期間內測量到的血壓結果。

高血壓Condition記錄的則是:

病人被確認或記錄具有高血壓這項健康問題或診斷。

兩者不能直接畫上等號。

Resource 表示內容
Observation 血壓測量結果
Condition 高血壓疾病或診斷

一筆血壓數值受到許多因素影響,診斷通常需要結合多次測量、病史、臨床情境及專業判斷。

FHIR負責保存及交換資料,但不會僅憑一筆Observation自動形成Condition。


一筆血壓資料需要哪些資訊?

如果只寫:

120/80

資訊仍然不足。

較完整的血壓資料可能需要說明:

  • 病人是誰
  • 測量時間
  • 與哪次就醫有關
  • 收縮壓數值
  • 舒張壓數值
  • 測量單位
  • 測量部位
  • 測量方式
  • 使用裝置
  • 執行人員
  • 結果狀態
  • 資料是否經過修正

FHIR Observation提供結構化欄位,讓系統能更完整地保存這些資訊。


血壓Observation結構整理

Observation
├── status:結果狀態
├── category:生命徵象
├── code:血壓Panel
├── subject:病人
├── encounter:就醫事件
├── effectiveDateTime:量測時間
├── performer:執行人員
├── bodySite:量測部位
├── method:量測方式
├── device:量測設備
└── component
    ├── 收縮壓
    │   ├── code:8480-6
    │   ├── valueQuantity
    │   ├── interpretation
    │   └── referenceRange
    └── 舒張壓
        ├── code:8462-4
        ├── valueQuantity
        ├── interpretation
        └── referenceRange

今日小結

今天以血壓為例,認識Observation的component

血壓包含兩個彼此相關的結果:

  • 收縮壓
  • 舒張壓

FHIR可以使用最外層Observation表示一組血壓測量,再使用兩個component分別記錄數值。

常見代碼包括:

項目 LOINC
血壓Panel 85354-9
收縮壓 8480-6
舒張壓 8462-4

血壓單位可使用UCUM:

mm[Hg]

今天最重要的觀念是:

component適合表示同一次觀察中,多個彼此緊密相關的結果。

另外,Observation只負責記錄血壓測量結果,不等於高血壓診斷。FHIR能將資料結構化,但臨床解讀仍需要考慮病人的整體情況及醫療專業判斷。

下一篇將介紹Encounter Resource,了解FHIR如何表示病人的一次門診、急診或住院事件。

明日預告

Day 22|Encounter:記錄病人的一次就醫過程

參考資料

  1. HL7 FHIR R4:Observation
    https://hl7.org/fhir/R4/observation.html

  2. HL7 FHIR R4:Vital Signs Profile
    https://hl7.org/fhir/R4/vital-signs.html

  3. HL7 FHIR R4:Blood Pressure Profile
    https://hl7.org/fhir/R4/bp.html

  4. LOINC:Blood Pressure Panel
    https://loinc.org/85354-9

  5. LOINC:Systolic Blood Pressure
    https://loinc.org/8480-6

  6. LOINC:Diastolic Blood Pressure
    https://loinc.org/8462-4

  7. UCUM:The Unified Code for Units of Measure
    https://ucum.org/


上一篇
Day 20|Observation:用FHIR表示檢驗與生命徵象
下一篇
Day 22|Encounter:記錄病人的一次就醫過程
系列文
《醫資生的 FHIR 30日入門:用 Postman 讀懂醫療資料交換》30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言