在上一篇文章中,我們認識了Condition Resource,了解FHIR如何表示病人的疾病、健康問題及診斷。
醫師完成評估後,可能會開立藥物。這時系統不只需要記錄藥品名稱,還可能需要知道:
FHIR可以使用MedicationRequest Resource表示一項用藥要求、處方或醫令。
今天不進行實際操作,而是透過一筆虛構的MedicationRequest,認識它的重要欄位,以及它和實際調劑、給藥及服藥紀錄之間的差異。
本文中的藥品、劑量、頻率、病人及時間皆為虛構的資料結構範例,不是用藥建議,也不可作為實際處方或服藥依據。
MedicationRequest用來表示對藥物供應及使用所提出的要求。
它可能出現在:
可以先將MedicationRequest理解為:
有人提出一項「這位病人應該使用某種藥物」的要求或醫令。
它記錄的是用藥要求,不一定代表藥物已經交到病人手上,也不一定代表病人已經實際服用。
一次用藥流程可能包含不同階段:
醫師開立用藥
↓
藥局收到處方
↓
藥師調劑藥物
↓
藥物交付病人
↓
病人服用或醫療人員給藥
FHIR會依照不同階段使用不同Resource。
| 階段 | 可能使用的Resource |
|---|---|
| 醫師開立處方或醫令 | MedicationRequest |
| 描述藥品本身 | Medication |
| 藥局調劑及發藥 | MedicationDispense |
| 實際給藥或用藥事件 | MedicationAdministration |
| 病人陳述或紀錄的用藥情況 | MedicationStatement |
因此,一筆MedicationRequest只代表「已提出用藥要求」,不能單獨證明後續所有流程都已完成。
以下是一份簡化的FHIR R4 MedicationRequest:
{
"resourceType": "MedicationRequest",
"id": "medication-request-001",
"identifier": [
{
"system": "https://hospital.example.org/prescription-number",
"value": "RX20260903001"
}
],
"status": "active",
"intent": "order",
"category": [
{
"text": "門診用藥"
}
],
"priority": "routine",
"medicationCodeableConcept": {
"coding": [
{
"system": "https://hospital.example.org/CodeSystem/medication",
"code": "MED-EXAMPLE-001",
"display": "範例藥品A 500 mg錠劑"
}
],
"text": "範例藥品A 500 mg錠劑"
},
"subject": {
"reference": "Patient/patient-001",
"display": "王小明"
},
"encounter": {
"reference": "Encounter/encounter-001",
"display": "2026年9月3日門診"
},
"authoredOn": "2026-09-03T09:15:00+08:00",
"requester": {
"reference": "Practitioner/doctor-001",
"display": "陳醫師"
},
"reasonReference": [
{
"reference": "Condition/condition-001",
"display": "本次就醫相關Condition"
}
],
"dosageInstruction": [
{
"text": "教學示意:每次1錠,每日3次,使用3天",
"timing": {
"repeat": {
"frequency": 3,
"period": 1,
"periodUnit": "d",
"boundsPeriod": {
"start": "2026-09-03",
"end": "2026-09-05"
}
}
},
"route": {
"text": "口服"
},
"doseAndRate": [
{
"doseQuantity": {
"value": 1,
"unit": "錠",
"system": "http://unitsofmeasure.org",
"code": "{tbl}"
}
}
]
}
],
"dispenseRequest": {
"quantity": {
"value": 9,
"unit": "錠",
"system": "http://unitsofmeasure.org",
"code": "{tbl}"
},
"expectedSupplyDuration": {
"value": 3,
"unit": "天",
"system": "http://unitsofmeasure.org",
"code": "d"
}
},
"note": [
{
"text": "虛構教學資料,非真實處方"
}
]
}
這份範例描述:
陳醫師在王小明的虛構門診Encounter中,開立範例藥品A的MedicationRequest。目前狀態為active,intent為order,並附有示意用法及供應數量。
本文的藥名及代碼都是虛構的,範例劑量也只能用來理解FHIR資料欄位。
"resourceType": "MedicationRequest",
"id": "medication-request-001"
resourceType表示這是一筆MedicationRequest。
id則是這筆Resource在FHIR Server中的邏輯識別碼。
它的邏輯位置可能是:
MedicationRequest/medication-request-001
其他Resource可以透過Reference連結這項用藥要求。
"identifier": [
{
"system": "https://hospital.example.org/prescription-number",
"value": "RX20260903001"
}
]
identifier可以表示實務流程中的:
可以比較:
| 欄位 | 用途 |
|---|---|
id |
FHIR Server中的Resource id |
identifier |
醫療機構使用的處方或醫令編號 |
不同醫院可能使用相同格式的編號,因此Identifier通常要搭配system。
"status": "active"
status是MedicationRequest的重要必填欄位,用來表示這項用藥要求目前的狀態。
FHIR R4常見狀態包括:
| status | 基本意義 |
|---|---|
active |
目前有效 |
on-hold |
暫停 |
cancelled |
已取消 |
completed |
已完成 |
entered-in-error |
誤建資料 |
stopped |
已停止 |
draft |
草稿 |
unknown |
狀態未知 |
active
表示這項MedicationRequest目前有效。
completed
表示這項用藥要求的流程已完成。
stopped
表示原本有效的用藥要求被提前停止。
cancelled
通常表示這項Request在執行前或流程中被取消。
這些狀態不能只從病人是否還剩下藥物來判定,而要依照醫療流程及系統規則更新。
如果MedicationRequest被建立在錯誤病人身上,應使用:
entered-in-error
表示這筆紀錄本身是誤建。
它和:
stopped
不同。
stopped表示用藥要求曾經有效,後來停止。entered-in-error表示這筆紀錄不應被建立。正確區分兩者,對病歷可信度及病人安全非常重要。
"intent": "order"
intent也是MedicationRequest的重要必填欄位,用來表示這項用藥要求的目的及權威程度。
FHIR R4常見代碼包括:
| intent | 基本意義 |
|---|---|
proposal |
建議 |
plan |
計畫 |
order |
正式醫令或要求 |
original-order |
原始醫令 |
reflex-order |
依條件產生的反射性醫令 |
filler-order |
執行者建立的醫令 |
instance-order |
針對特定執行實例的醫令 |
option |
可選擇的醫令 |
本文使用:
order
表示這是一項正式用藥要求,而不是單純建議。
| 欄位 | 回答的問題 |
|---|---|
status |
這項Request目前處於什麼狀態? |
intent |
這項Request的目的或權威程度是什麼? |
例如:
status:active
intent:order
表示這是一項目前有效的正式用藥醫令。
status:draft
intent:proposal
則可能表示尚未完成的用藥建議草稿。
閱讀MedicationRequest時,需要將兩個欄位一起理解。
"category": [
{
"text": "門診用藥"
}
]
category可以表示MedicationRequest所屬的類別,例如:
實際系統應依照Profile及指定ValueSet使用適合的標準代碼,不應只依靠自由文字。
"priority": "routine"
priority表示這項Request的處理優先程度。
FHIR R4常見代碼包括:
| priority | 基本意義 |
|---|---|
routine |
一般 |
urgent |
緊急 |
asap |
儘快 |
stat |
立即 |
本文使用:
routine
表示一般優先程度。
priority不能由一般使用者自行修改,而應反映正式醫療流程中的要求。
MedicationRequest必須說明要求使用哪種藥物。
FHIR R4提供兩種主要表示方式:
medicationCodeableConcept
medicationReference
欄位名稱中的[x]表示要依照選擇的資料型別使用對應名稱,不能直接寫成:
"medication[x]": "..."
如果使用CodeableConcept直接表示藥物,可以寫成:
"medicationCodeableConcept": {
"coding": [
{
"system": "https://hospital.example.org/CodeSystem/medication",
"code": "MED-EXAMPLE-001",
"display": "範例藥品A 500 mg錠劑"
}
],
"text": "範例藥品A 500 mg錠劑"
}
其中:
system說明藥品代碼系統。code是藥品代碼。display是代碼的顯示名稱。text是適合目前情境閱讀的文字。如果藥物已經建立成獨立Medication Resource,也可以使用Reference:
"medicationReference": {
"reference": "Medication/medication-001",
"display": "範例藥品A 500 mg錠劑"
}
可以比較:
| 方式 | 用途 |
|---|---|
medicationCodeableConcept |
直接用代碼及文字表示藥物 |
medicationReference |
指向獨立的Medication Resource |
兩者是不同選擇,不應在同一筆MedicationRequest中同時任意使用。
Medication Resource可以描述藥物本身,例如:
Medication回答:
這是什麼藥?
MedicationRequest則回答:
誰要求哪位病人使用這種藥,以及如何使用?
"subject": {
"reference": "Patient/patient-001",
"display": "王小明"
}
subject表示這項MedicationRequest的對象。
一般情況下會指向Patient,也可能在特定情境中指向Group。
這是高度重要的Reference。如果MedicationRequest連到錯誤病人,可能造成嚴重病人安全問題。
系統不能只依靠display中的姓名,而要使用正確Resource Reference及病人識別流程。
"encounter": {
"reference": "Encounter/encounter-001",
"display": "2026年9月3日門診"
}
encounter表示這項用藥要求與哪一次門診、急診或住院有關。
同一位病人可能在不同Encounter中具有不同MedicationRequest,因此保留就醫情境有助於了解藥物的開立背景。
不過,某些長期用藥計畫不一定只屬於單一Encounter,是否需要連結仍應依使用情境決定。
"authoredOn": "2026-09-03T09:15:00+08:00"
authoredOn表示MedicationRequest最初被建立或撰寫的時間。
它不一定等於:
這些事件可能發生在不同時間,並由不同Resource或欄位表示。
"requester": {
"reference": "Practitioner/doctor-001",
"display": "陳醫師"
}
requester表示提出或負責這項MedicationRequest的個人、角色、機構或裝置。
它可能指向:
在一般醫師開藥情境中,requester通常可能指向Practitioner或PractitionerRole。
MedicationRequest還可以使用performer表示預計負責執行這項Request的對象。
例如,可能指向負責調劑的機構或其他符合規範的執行者。
可以簡化區分:
| 欄位 | 回答的問題 |
|---|---|
requester |
誰提出要求? |
performer |
預計由誰執行? |
兩者可能是不同的醫療人員或機構。
MedicationRequest可以用reasonCode直接表示用藥原因:
"reasonCode": [
{
"text": "與本次健康問題相關"
}
]
reasonCode使用CodeableConcept,實際情境應盡量提供合適的標準代碼。
如果用藥原因已經建立成Condition,可以使用:
"reasonReference": [
{
"reference": "Condition/condition-001",
"display": "本次就醫相關Condition"
}
]
可以比較:
| 欄位 | 用途 |
|---|---|
reasonCode |
直接以代碼或文字表示原因 |
reasonReference |
指向Condition或其他相關Resource |
MedicationRequest的存在不代表特定Condition必然存在,也不能僅根據藥品名稱反推病人的疾病。
同一種藥物可能有不同用途,診斷仍應查看正式Condition及臨床紀錄。
"dosageInstruction": [
{
...
}
]
dosageInstruction表示建議或要求的用藥方式。
它可能包含:
因為用藥方式可能包含多段指示,所以dosageInstruction使用Array。
"text": "教學示意:每次1錠,每日3次,使用3天"
text提供讓人閱讀的完整用藥說明。
不過,如果所有資訊都只放在文字裡,電腦很難單獨判斷每次劑量、頻率及期間。
因此,FHIR也提供timing、route及doseAndRate等結構化欄位。
"timing": {
"repeat": {
"frequency": 3,
"period": 1,
"periodUnit": "d"
}
}
這段資料可以理解為:
每1天發生3次。
其中:
| 欄位 | 內容 | 基本意義 |
|---|---|---|
frequency |
3 | 每個週期發生3次 |
period |
1 | 週期長度為1 |
periodUnit |
d |
週期單位為天 |
不過,「每日3次」不一定等於每8小時一次。用藥時間如何安排,還需要依正式處方及醫療專業指示判斷。
"boundsPeriod": {
"start": "2026-09-03",
"end": "2026-09-05"
}
boundsPeriod表示這項Timing適用的時間範圍。
它和MedicationRequest的authoredOn不同:
| 欄位 | 意義 |
|---|---|
authoredOn |
用藥要求建立時間 |
boundsPeriod |
用藥時間安排的適用期間 |
"route": {
"text": "口服"
}
route表示藥物透過什麼途徑使用,例如:
實際資料應使用Profile指定的標準代碼,不應只靠自由文字。
給藥途徑是用藥安全的重要資訊,同一藥物透過不同途徑使用,可能具有完全不同的劑量與風險。
"doseAndRate": [
{
"doseQuantity": {
"value": 1,
"unit": "錠",
"system": "http://unitsofmeasure.org",
"code": "{tbl}"
}
}
]
doseAndRate可以表示劑量或速率。
範例中的doseQuantity表示每次使用1錠。
| 欄位 | 用途 |
|---|---|
value |
劑量數值 |
unit |
人類閱讀的單位 |
system |
單位代碼系統 |
code |
標準化單位代碼 |
注射或點滴等情境可能需要記錄速率,資料結構會比一般錠劑更複雜。
某些藥物不是固定時間使用,而是在特定需要時使用。
FHIR可以使用:
"asNeededBoolean": true
表示需要時使用。
也可以使用CodeableConcept說明使用條件:
"asNeededCodeableConcept": {
"text": "符合指定症狀時使用"
}
不能直接在JSON中寫成:
"asNeeded[x]": "..."
而要依照實際資料型別使用asNeededBoolean或asNeededCodeableConcept。
是否可以需要時使用,必須依正式處方,不能由病人自行推測。
"dispenseRequest": {
"quantity": {
"value": 9,
"unit": "錠",
"system": "http://unitsofmeasure.org",
"code": "{tbl}"
},
"expectedSupplyDuration": {
"value": 3,
"unit": "天",
"system": "http://unitsofmeasure.org",
"code": "d"
}
}
dispenseRequest描述希望如何供應藥物。
可能包含:
"quantity": {
"value": 9,
"unit": "錠"
}
表示預計供應9錠。
它和doseQuantity不同:
| 欄位 | 意義 |
|---|---|
doseQuantity |
每次使用多少 |
dispenseRequest.quantity |
總共預計供應多少 |
"expectedSupplyDuration": {
"value": 3,
"unit": "天",
"system": "http://unitsofmeasure.org",
"code": "d"
}
表示這次供應量預計使用3天。
供應數量和使用天數應與Dosage內容合理搭配,但實際計算可能受到需要時使用、包裝、劑型及其他醫療因素影響,不能只靠簡單乘法判斷處方是否正確。
dispenseRequest可以包含:
"numberOfRepeatsAllowed": 2
表示除了最初供應外,允許再重複供應的次數。
這項欄位的實際意義及限制,仍要配合當地法規、處方制度及醫療機構規則。
"validityPeriod": {
"start": "2026-09-03",
"end": "2026-09-10"
}
validityPeriod表示Dispense Request有效的時間範圍。
它不一定等於病人實際服藥的開始及結束時間,也不等於MedicationRequest的建立時間。
MedicationRequest可以透過substitution記錄是否允許替代藥物。
簡化範例如下:
"substitution": {
"allowedBoolean": false,
"reason": {
"text": "依正式醫療規則記錄"
}
}
allowedBoolean可以表示是否允許替代。
是否能進行替代,涉及:
FHIR只負責保存交換資料,不能自行決定是否替代藥物。
回答:
醫療人員要求使用什麼藥?
回答:
藥局實際調劑或提供了什麼藥?
兩者可能不同的原因包括:
因此,看到MedicationRequest不能直接認定藥物已經交給病人。
表示用藥要求或醫令。
表示實際執行的給藥事件,例如:
可以簡化成:
MedicationRequest:應該給藥
MedicationAdministration:實際給了藥
一筆MedicationRequest可能對應多次MedicationAdministration。
MedicationStatement通常用來表示某人被認為正在、曾經或將要使用某種藥物的陳述或紀錄。
資料來源可能包括:
可以簡化比較:
| Resource | 主要內容 |
|---|---|
| MedicationRequest | 正式或計畫中的用藥要求 |
| MedicationStatement | 某人用藥情況的陳述 |
| MedicationDispense | 實際調劑或供應 |
| MedicationAdministration | 實際給藥事件 |
MedicationStatement不一定具有一筆對應的MedicationRequest,例如病人可能自行說明在其他醫院取得的藥物。
同一種藥物可能用於:
因此,看到MedicationRequest不能直接推論病人一定患有某項疾病。
如果要了解用藥原因,應查看:
reasonCode
reasonReference
即使有Condition Reference,也需要一起查看診斷的clinicalStatus及verificationStatus。
MedicationRequest可能透露:
正式FHIR系統需要控制:
用藥資料的錯誤連結或未授權修改,都可能造成嚴重病人安全風險。
MedicationRequest
├── identifier:處方或醫令編號
├── status:目前狀態
├── intent:建議、計畫或正式醫令
├── category:用藥分類
├── priority:優先程度
├── medication[x]:要求使用的藥物
├── subject:用藥對象
├── encounter:相關就醫事件
├── authoredOn:建立時間
├── requester:提出要求的人或機構
├── performer:預計執行者
├── reasonCode:用藥原因代碼
├── reasonReference:相關Condition等Resource
├── dosageInstruction
│ ├── text:完整文字說明
│ ├── timing:使用時間及頻率
│ ├── asNeeded[x]:需要時使用
│ ├── route:給藥途徑
│ └── doseAndRate:劑量及速率
├── dispenseRequest
│ ├── quantity:供應數量
│ ├── expectedSupplyDuration:預計供應天數
│ ├── validityPeriod:有效期間
│ └── numberOfRepeatsAllowed:重複供應次數
├── substitution:替代規則
└── note:補充說明
實際MedicationRequest不一定同時包含所有欄位,需要依照FHIR規範、Profile、處方制度及醫療情境決定。
今天認識了FHIR MedicationRequest Resource。
MedicationRequest用來表示一項用藥要求、處方或醫令,重要欄位包括:
status
intent
medication[x]
subject
encounter
authoredOn
requester
reasonCode
reasonReference
dosageInstruction
dispenseRequest
substitution
今天最重要的觀念是:
MedicationRequest代表「要求使用藥物」,不代表藥物已經調劑、交付或實際使用。
不同階段可能使用:
下一篇將認識DiagnosticReport,了解一份檢驗或檢查報告如何連結多筆Observation,並提供報告層級的結論及內容。
Day 25|DiagnosticReport:如何組成一份檢驗或檢查報告?
HL7 FHIR R4:MedicationRequest
https://hl7.org/fhir/R4/medicationrequest.html
HL7 FHIR R4:Medication
https://hl7.org/fhir/R4/medication.html
HL7 FHIR R4:MedicationDispense
https://hl7.org/fhir/R4/medicationdispense.html
HL7 FHIR R4:MedicationAdministration
https://hl7.org/fhir/R4/medicationadministration.html
HL7 FHIR R4:MedicationStatement
https://hl7.org/fhir/R4/medicationstatement.html
HL7 FHIR R4:Dosage
https://hl7.org/fhir/R4/dosage.html