在Day 20中,我們認識了Observation Resource。
Observation適合記錄單一或一組相關的觀察結果,例如:
但是,醫院提供的檢驗或檢查報告通常不只有一項數值。
例如,一份血液檢驗報告可能同時包含:
FHIR可以使用DiagnosticReport Resource將多筆Observation、檢體及報告內容組合起來。
今天不進行實際操作,而是透過一份虛構的檢驗報告,認識DiagnosticReport的重要欄位及它和Observation之間的關係。
本文中的病人、檢驗項目、數值、時間及報告結論皆為虛構教學資料,不能用來進行健康判斷或醫療診斷。
DiagnosticReport用來表示診斷性檢驗、檢查或其他評估所產生的報告。
它可能應用於:
DiagnosticReport可以回答:
假設一份檢驗包含三個項目:
白血球結果
血紅素結果
血小板結果
每個項目都可以建立成獨立Observation。
但是,系統還需要知道:
DiagnosticReport提供報告層級的資訊,再透過Reference連結各項Observation。
可以將它想成:
DiagnosticReport:整份報告
├── Observation:檢驗項目A
├── Observation:檢驗項目B
├── Observation:檢驗項目C
└── Specimen:使用的檢體
以下是一份簡化的FHIR R4 DiagnosticReport:
{
"resourceType": "DiagnosticReport",
"id": "diagnostic-report-001",
"identifier": [
{
"system": "https://hospital.example.org/report-number",
"value": "RPT20260903001"
}
],
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0074",
"code": "LAB",
"display": "Laboratory"
}
],
"text": "實驗室檢驗"
}
],
"code": {
"coding": [
{
"system": "https://hospital.example.org/CodeSystem/report-type",
"code": "LAB-PANEL-001",
"display": "範例血液檢驗報告"
}
],
"text": "範例血液檢驗報告"
},
"subject": {
"reference": "Patient/patient-001",
"display": "王小明"
},
"encounter": {
"reference": "Encounter/encounter-001",
"display": "2026年9月3日門診"
},
"effectiveDateTime": "2026-09-03T09:30:00+08:00",
"issued": "2026-09-03T11:00:00+08:00",
"performer": [
{
"reference": "Organization/laboratory-001",
"display": "範例醫院檢驗部門"
}
],
"resultsInterpreter": [
{
"reference": "Practitioner/practitioner-002",
"display": "範例判讀人員"
}
],
"specimen": [
{
"reference": "Specimen/specimen-001",
"display": "血液檢體"
}
],
"result": [
{
"reference": "Observation/lab-result-001",
"display": "範例檢驗項目A"
},
{
"reference": "Observation/lab-result-002",
"display": "範例檢驗項目B"
},
{
"reference": "Observation/lab-result-003",
"display": "範例檢驗項目C"
}
],
"conclusion": "範例報告結論,僅供FHIR資料結構說明。",
"presentedForm": [
{
"contentType": "application/pdf",
"language": "zh-TW",
"title": "範例血液檢驗報告PDF",
"url": "https://hospital.example.org/reports/report-001.pdf"
}
]
}
這份DiagnosticReport表示:
王小明在2026年9月3日門診中接受一項虛構血液檢驗。報告狀態為final,使用一份血液Specimen,並連結三筆Observation結果。
"resourceType": "DiagnosticReport",
"id": "diagnostic-report-001"
resourceType表示這是一筆DiagnosticReport。
id是這筆Resource在FHIR Server中的邏輯識別碼。
它的邏輯位置可能是:
DiagnosticReport/diagnostic-report-001
"identifier": [
{
"system": "https://hospital.example.org/report-number",
"value": "RPT20260903001"
}
]
identifier可以表示醫療機構實務上使用的報告編號。
可以和id比較:
| 欄位 | 用途 |
|---|---|
id |
FHIR Server中的Resource id |
identifier |
醫院或檢驗系統使用的報告編號 |
不同醫療機構可能使用相同格式的報告編號,因此Identifier通常要搭配system。
DiagnosticReport可以使用basedOn連結產生這份報告的要求。
例如:
"basedOn": [
{
"reference": "ServiceRequest/service-request-001",
"display": "血液檢驗醫令"
}
]
這可以表示:
這份報告是依據某一筆ServiceRequest產生。
ServiceRequest可能代表:
basedOn不是報告結果,而是報告所依據的上游要求。
"status": "final"
status是DiagnosticReport的重要必填欄位。
FHIR R4常見狀態包括:
| status | 基本意義 |
|---|---|
registered |
已登錄 |
partial |
只有部分結果 |
preliminary |
初步報告 |
final |
最終報告 |
amended |
最終報告後經修訂 |
corrected |
已更正 |
appended |
增加補充內容 |
cancelled |
已取消 |
entered-in-error |
誤建資料 |
unknown |
狀態未知 |
表示報告仍是初步內容,後續可能修改。
表示報告已完成並正式發布。
不過,final之後仍可能出現:
因此,系統不能因為曾經取得一次final報告,就永遠忽略後續版本。
表示原報告內容有錯誤,後續已經更正。
表示在原報告後增加補充內容,不一定代表原本內容錯誤。
如果報告被更正,醫療系統需要避免繼續使用舊版錯誤內容,也要保留適當的版本及稽核紀錄。
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0074",
"code": "LAB",
"display": "Laboratory"
}
],
"text": "實驗室檢驗"
}
]
category用來表示DiagnosticReport的高階分類,例如:
範例中的:
LAB
表示實驗室類別。
category只提供較大的分類,要知道具體是哪一種報告,還要查看code。
"code": {
"coding": [
{
"system": "https://hospital.example.org/CodeSystem/report-type",
"code": "LAB-PANEL-001",
"display": "範例血液檢驗報告"
}
],
"text": "範例血液檢驗報告"
}
code表示DiagnosticReport實際代表的報告類型。
例如,可能是:
本文使用的是虛構院內代碼。正式資料應依照Profile及醫療機構規範使用適當的標準代碼。
| 欄位 | 回答的問題 | 範例 |
|---|---|---|
category |
這是哪一大類報告? | 實驗室檢驗 |
code |
具體是哪一種報告? | 血液檢驗報告 |
多份不同血液報告可能都屬於LAB category,但各自使用不同的code。
"subject": {
"reference": "Patient/patient-001",
"display": "王小明"
}
subject表示DiagnosticReport的對象。
通常可能指向:
一般病人檢驗及檢查報告通常會指向Patient。
報告必須連結到正確病人,只依靠display中的姓名並不足夠,因為可能有同名病人。
"encounter": {
"reference": "Encounter/encounter-001",
"display": "2026年9月3日門診"
}
encounter表示這份報告與哪次門診、急診或住院有關。
不過,報告可能在Encounter結束後才發布。
例如:
09:00 病人看診
09:30 採集檢體
09:40 門診Encounter結束
11:00 報告發布
所以Encounter已經finished,不代表所有DiagnosticReport都已經完成。
範例使用:
"effectiveDateTime": "2026-09-03T09:30:00+08:00"
effective[x]表示DiagnosticReport在臨床上有效或與檢查相關的時間。
它可以使用:
effectiveDateTime
effectivePeriod
如果檢查發生於某一時間點,可以使用effectiveDateTime。
如果檢查持續一段時間,可以使用:
"effectivePeriod": {
"start": "2026-09-03T09:00:00+08:00",
"end": "2026-09-03T09:30:00+08:00"
}
不能直接將欄位名稱寫成effective[x],而要依照實際型別選擇完整名稱。
"issued": "2026-09-03T11:00:00+08:00"
issued表示這份DiagnosticReport被正式發布或提供的時間。
可以比較:
| 欄位 | 意義 |
|---|---|
effective[x] |
檢查或檢驗發生的時間 |
issued |
報告發布時間 |
檢查發生時間和報告發布時間可能相隔幾分鐘、數小時甚至更久。
"performer": [
{
"reference": "Organization/laboratory-001",
"display": "範例醫院檢驗部門"
}
]
performer表示負責這項診斷服務的角色或機構。
可能指向:
例如,實驗室報告可能由檢驗部門負責,影像檢查則可能由放射部門及相關人員執行。
"resultsInterpreter": [
{
"reference": "Practitioner/practitioner-002",
"display": "範例判讀人員"
}
]
resultsInterpreter表示負責解讀或確認結果的醫療人員或角色。
可以比較:
| 欄位 | 回答的問題 |
|---|---|
performer |
誰執行或負責這項服務? |
resultsInterpreter |
誰負責判讀結果? |
兩者可能是同一個人,也可能不同。
"specimen": [
{
"reference": "Specimen/specimen-001",
"display": "血液檢體"
}
]
specimen用來連結檢驗所使用的Specimen Resource。
Specimen可能記錄:
例如,「血糖」可能來自不同檢體,資料意義及參考範圍也可能不同。因此,保留Specimen資訊有助於正確理解結果。
"result": [
{
"reference": "Observation/lab-result-001",
"display": "範例檢驗項目A"
},
{
"reference": "Observation/lab-result-002",
"display": "範例檢驗項目B"
},
{
"reference": "Observation/lab-result-003",
"display": "範例檢驗項目C"
}
]
result是DiagnosticReport非常重要的欄位,用來連結構成報告的Observation。
因為一份報告可能包含多項結果,所以result使用Array。
DiagnosticReport不需要把每個檢驗數值全部重新複製一遍,而是透過Reference連到各筆Observation。
假設一份報告包含三個檢驗結果:
DiagnosticReport/diagnostic-report-001
├── Observation/lab-result-001
├── Observation/lab-result-002
└── Observation/lab-result-003
因此,DiagnosticReport提供整份報告的情境,Observation提供各項結構化結果。
可能。
例如,一份報告包含三筆Observation:
| Observation | 狀態 |
|---|---|
| 項目A | final |
| 項目B | final |
| 項目C | preliminary |
整份DiagnosticReport可能仍然是:
partial
或:
preliminary
等到所有必要結果完成並審核後,DiagnosticReport才可能變成:
final
因此,不能只看DiagnosticReport的status,也不能只看其中一筆Observation的status。
如果DiagnosticReport屬於影像檢查,可以使用imagingStudy連結ImagingStudy Resource:
"imagingStudy": [
{
"reference": "ImagingStudy/imaging-study-001",
"display": "範例影像檢查"
}
]
ImagingStudy可以描述:
DiagnosticReport則記錄報告及判讀內容。
可以簡化成:
ImagingStudy:影像檢查資料
DiagnosticReport:影像檢查報告及結論
DiagnosticReport可以使用media連結與報告相關的Media。
例如:
"media": [
{
"comment": "範例代表性影像",
"link": {
"reference": "Media/media-001"
}
}
]
這可能用於報告中的代表性圖片、圖表或其他媒體內容。
完整影像檢查資料通常仍會由ImagingStudy或專門的影像系統管理。
"conclusion": "範例報告結論,僅供FHIR資料結構說明。"
conclusion提供報告的文字結論或判讀摘要。
例如,影像報告可能具有放射科醫師的文字結論,病理報告也可能包含診斷性描述。
conclusion適合人類閱讀,但如果結論中包含重要的結構化診斷,也可以進一步使用conclusionCode。
"conclusionCode": [
{
"coding": [
{
"system": "https://hospital.example.org/CodeSystem/report-conclusion",
"code": "EXAMPLE-001",
"display": "範例結論代碼"
}
],
"text": "範例結論"
}
]
conclusionCode使用CodeableConcept,可以將報告結論以標準或院內代碼表示。
可以比較:
| 欄位 | 用途 |
|---|---|
conclusion |
人類可閱讀的文字結論 |
conclusionCode |
結構化、可供系統處理的結論代碼 |
兩者可以同時存在,但必須避免內容互相矛盾。
"presentedForm": [
{
"contentType": "application/pdf",
"language": "zh-TW",
"title": "範例血液檢驗報告PDF",
"url": "https://hospital.example.org/reports/report-001.pdf"
}
]
presentedForm可以保存或連結完整報告,例如:
它使用Attachment資料型別,常見欄位包括:
| 欄位 | 用途 |
|---|---|
contentType |
檔案格式 |
language |
文件語言 |
data |
Base64編碼的檔案內容 |
url |
檔案位置 |
size |
檔案大小 |
hash |
檔案雜湊值 |
title |
文件標題 |
creation |
建立時間 |
一份PDF報告方便醫療人員閱讀,也能保留原始版面。
但是,如果所有結果都只存在PDF中,系統可能不容易:
因此,DiagnosticReport可以同時提供:
result:結構化Observationconclusion:文字結論presentedForm:完整報告附件三者不是互相取代,而是滿足不同用途。
DocumentReference主要用來索引及描述一份文件,例如:
DiagnosticReport則專門表示診斷性檢驗或檢查報告,並能連結結構化Observation結果。
可以簡化比較:
| Resource | 主要用途 |
|---|---|
| DiagnosticReport | 診斷性報告及其結構化結果 |
| DocumentReference | 文件的索引、描述及存取位置 |
一份DiagnosticReport的PDF也可能在特定架構中透過DocumentReference管理,但兩者用途仍不同。
Composition用來定義FHIR文件的結構,例如:
如果FHIR Bundle的type是document,第一筆Entry通常需要是Composition。
DiagnosticReport則專門描述某項診斷性檢驗或檢查的報告。
| Resource | 主要概念 |
|---|---|
| DiagnosticReport | 一份診斷性報告 |
| Composition | 一份FHIR文件的整體結構 |
DiagnosticReport可以成為FHIR文件中的其中一項內容,但不等於Composition。
一份DiagnosticReport可能連結:
ServiceRequest
檢驗或檢查醫令
│
▼
DiagnosticReport
整份檢驗或檢查報告
│
├── Patient
│ 報告所屬病人
│
├── Encounter
│ 相關就醫事件
│
├── Specimen
│ 使用的檢體
│
├── Observation A
│ 第一項結果
│
├── Observation B
│ 第二項結果
│
└── Observation C
第三項結果
各Resource分別處理自己的資料,再透過Reference組成完整報告。
DiagnosticReport可能包含高度敏感的醫療資訊,例如:
正式FHIR系統需要控制:
即使Client有權查看DiagnosticReport,也不一定代表能取得所有附件或相關Resource。
DiagnosticReport
├── identifier:報告編號
├── basedOn:相關醫令或要求
├── status:報告狀態
├── category:報告大類
├── code:具體報告類型
├── subject:病人或其他對象
├── encounter:相關就醫事件
├── effective[x]:檢查或檢驗時間
├── issued:報告發布時間
├── performer:執行者
├── resultsInterpreter:判讀者
├── specimen:使用的檢體
├── result:Observation結果
├── imagingStudy:相關影像檢查
├── media:代表性影像或媒體
├── conclusion:文字結論
├── conclusionCode:代碼化結論
└── presentedForm:完整報告附件
實際DiagnosticReport不一定同時包含所有欄位,仍要依FHIR規範、Profile及檢查情境決定。
今天認識了FHIR DiagnosticReport Resource。
DiagnosticReport可以將多筆Observation、Specimen、報告狀態、判讀人員、文字結論及附件組合成一份完整的檢驗或檢查報告。
其中最重要的分工是:
今天最重要的觀念是:
DiagnosticReport不需要重複保存每一項檢驗數值,而是透過
resultReference連結相關Observation。
下一篇將進一步認識FHIR的Profile與Extension,了解為什麼使用相同的Patient或Observation Resource,不同國家及使用情境仍然需要訂定更明確的規則。
Day 26|Profile與Extension:FHIR為什麼還需要在地規則?
HL7 FHIR R4:DiagnosticReport
https://hl7.org/fhir/R4/diagnosticreport.html
HL7 FHIR R4:DiagnosticReport Definitions
https://hl7.org/fhir/R4/diagnosticreport-definitions.html
HL7 FHIR R4:Observation
https://hl7.org/fhir/R4/observation.html
HL7 FHIR R4:Specimen
https://hl7.org/fhir/R4/specimen.html
HL7 FHIR R4:ServiceRequest
https://hl7.org/fhir/R4/servicerequest.html
HL7 FHIR R4:DocumentReference
https://hl7.org/fhir/R4/documentreference.html
HL7 FHIR R4:Composition
https://hl7.org/fhir/R4/composition.html