在上一篇文章中,我們認識了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 mmHg
SBP 120, DBP 80
收縮壓120;舒張壓80
對人類來說都能理解,但電腦需要額外解析文字。
FHIR因此將收縮壓與舒張壓分成兩組結構化的component。
一筆血壓Observation可以理解為:
血壓測量
├── 收縮壓:120 mmHg
└── 舒張壓:80 mmHg
最外層Observation代表「這是一次血壓測量」。
component則分別記錄:
兩個component都有自己的:
code
valueQuantity
interpretation
referenceRange
dataAbsentReason
以下是一份簡化的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": {
"coding": [
{
"system": "http://loinc.org",
"code": "85354-9",
"display": "Blood pressure panel with all children optional"
}
],
"text": "血壓"
}
最外層code表示整筆Observation記錄的是血壓Panel。
這裡的Panel可以理解為:
一組彼此相關的測量結果。
血壓不是只靠一個數值表示,而是一組包含收縮壓及舒張壓的結果,因此適合使用Panel概念。
"component": [
{
...
},
{
...
}
]
component是一個Array,可以包含一個以上的相關結果。
本例中有兩個component:
component[0]:收縮壓
component[1]:舒張壓
每個component都是獨立結構,也有自己的code及valueQuantity。
{
"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可以拆成兩部分。
LOINC 8480-6
表示測量項目是收縮壓。
120 mmHg
表示實際數值及單位。
因此,這個component完整表達:
收縮壓為120 mmHg。
{
"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]"
}
}
同樣可以拆成:
LOINC 8462-4
表示測量項目是舒張壓。
80 mmHg
表示實際數值及單位。
這個component完整表達:
舒張壓為80 mmHg。
| 資料層級 | LOINC code | 基本用途 |
|---|---|---|
| 最外層Observation | 85354-9 |
表示一組血壓Panel |
| 收縮壓component | 8480-6 |
表示收縮壓 |
| 舒張壓component | 8462-4 |
表示舒張壓 |
最外層的code回答:
這整筆Observation在測量什麼?
component中的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標準代碼 |
unit和code看起來不同,但兩者用途也不同:
unit主要方便人類閱讀。system+code主要供系統標準化處理。因此,人類介面可以顯示熟悉的mmHg,電腦則使用UCUM的mm[Hg]辨認單位。
理論上,收縮壓和舒張壓也可以被視為兩個測量項目。
但是,它們通常是在同一次血壓測量中共同產生,彼此具有緊密關係。
如果拆成兩筆完全獨立的Observation,就需要另外確認:
將它們放在同一筆Observation的component中,可以清楚表示:
這兩個數值屬於同一次血壓測量。
不是所有同時出現的檢驗結果都應放入component。
通常適合使用component的情況是:
血壓的收縮壓及舒張壓就是典型例子。
如果兩項檢驗可以分別獨立存在、具有不同時間或不同生命週期,就可能更適合建立不同Observation,再透過DiagnosticReport或其他方式組織。
實際選擇仍應依FHIR規範及使用的Profile決定。
體溫Observation可能直接使用:
"valueQuantity": {
"value": 37.2,
"unit": "°C"
}
因為體溫通常只有一個主要數值。
血壓則包含收縮壓及舒張壓,因此通常將數值放在:
component.valueQuantity
而不是最外層:
Observation.valueQuantity
可以比較:
| Observation | 結果位置 |
|---|---|
| 體溫 | 最外層valueQuantity |
| 心跳 | 最外層valueQuantity |
| 血氧 | 最外層valueQuantity |
| 血壓 | component.valueQuantity |
每個component可以擁有自己的結果解讀。
例如,收縮壓可能包含:
"interpretation": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
"code": "H",
"display": "High"
}
],
"text": "偏高"
}
]
舒張壓則可能有不同的interpretation。
這是因為收縮壓和舒張壓需要分別判讀,不能只替整筆Observation放入一個模糊的「異常」。
不過,interpretation應由醫療或檢驗系統依照正確臨床規則產生,不能只看到單一數值就自行填寫。
每個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而完全不說明更清楚。
血壓Observation仍然需要:
"status": "final"
status表示整筆Observation目前的狀態,例如:
如果一筆血壓Observation被標記為:
entered-in-error
代表它被判定為錯誤輸入,不應和一般final結果同等使用。
即使收縮壓及舒張壓的數值都有填寫,也必須一起查看status。
"effectiveDateTime": "2026-09-03T09:05:00+08:00"
血壓可能隨時間變化,因此量測時間非常重要。
同一位病人可能在短時間內具有多筆不同血壓:
09:00 第一次測量
09:05 休息後再次測量
09:15 第三次測量
如果資料只有數值,沒有時間,就無法了解測量順序及變化。
"subject": {
"reference": "Patient/patient-001"
}
表示血壓屬於哪一位病人。
"encounter": {
"reference": "Encounter/encounter-001"
}
表示血壓與哪次就醫有關。
同一位Patient可能有許多次門診、急診及住院紀錄,透過Encounter可以保留血壓產生時的就醫情境。
Observation可以使用bodySite表示測量部位。
例如:
"bodySite": {
"text": "左上臂"
}
血壓可能在:
進行測量。
如果測量部位對資料解讀有影響,就應該保留這項資訊,並盡量使用合適的標準代碼。
Observation可以使用method記錄測量方法,例如:
"method": {
"text": "自動血壓計測量"
}
可能的測量方式包括:
FHIR提供欄位保存這些情境,但具體需要哪些欄位,仍應依使用目的及Profile決定。
如果需要記錄使用的血壓計,可以透過Reference連結Device:
"device": {
"reference": "Device/blood-pressure-device-001",
"display": "範例自動血壓計"
}
Device Resource可以包含:
當結果品質可能受到設備影響時,保留Device資訊有助於追蹤資料來源。
血壓Observation記錄的是:
某個時間點或期間內測量到的血壓結果。
高血壓Condition記錄的則是:
病人被確認或記錄具有高血壓這項健康問題或診斷。
兩者不能直接畫上等號。
| Resource | 表示內容 |
|---|---|
| Observation | 血壓測量結果 |
| Condition | 高血壓疾病或診斷 |
一筆血壓數值受到許多因素影響,診斷通常需要結合多次測量、病史、臨床情境及專業判斷。
FHIR負責保存及交換資料,但不會僅憑一筆Observation自動形成Condition。
如果只寫:
120/80
資訊仍然不足。
較完整的血壓資料可能需要說明:
FHIR 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:記錄病人的一次就醫過程
HL7 FHIR R4:Observation
https://hl7.org/fhir/R4/observation.html
HL7 FHIR R4:Vital Signs Profile
https://hl7.org/fhir/R4/vital-signs.html
HL7 FHIR R4:Blood Pressure Profile
https://hl7.org/fhir/R4/bp.html
LOINC:Blood Pressure Panel
https://loinc.org/85354-9
LOINC:Systolic Blood Pressure
https://loinc.org/8480-6
LOINC:Diastolic Blood Pressure
https://loinc.org/8462-4
UCUM:The Unified Code for Units of Measure
https://ucum.org/