iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
Software Development

《醫資生的 FHIR 30日入門:用 Postman 讀懂醫療資料交換》系列 第 24

Day 24|MedicationRequest:醫師開藥後資料去哪裡?

  • 分享至 

  • xImage
  •  

前言

在上一篇文章中,我們認識了Condition Resource,了解FHIR如何表示病人的疾病、健康問題及診斷。

醫師完成評估後,可能會開立藥物。這時系統不只需要記錄藥品名稱,還可能需要知道:

  • 藥物是開給哪位病人?
  • 由誰開立?
  • 什麼時候開立?
  • 目前是否仍然有效?
  • 每次使用多少?
  • 一天使用幾次?
  • 透過什麼途徑使用?
  • 預計供應多少藥物?
  • 是否允許替代?

FHIR可以使用MedicationRequest Resource表示一項用藥要求、處方或醫令。

今天不進行實際操作,而是透過一筆虛構的MedicationRequest,認識它的重要欄位,以及它和實際調劑、給藥及服藥紀錄之間的差異。

本文中的藥品、劑量、頻率、病人及時間皆為虛構的資料結構範例,不是用藥建議,也不可作為實際處方或服藥依據。


MedicationRequest是什麼?

MedicationRequest用來表示對藥物供應及使用所提出的要求。

它可能出現在:

  • 門診處方
  • 住院用藥醫令
  • 急診用藥醫令
  • 出院帶藥
  • 慢性病用藥計畫
  • 未來預計執行的用藥
  • 藥物申請或建議

可以先將MedicationRequest理解為:

有人提出一項「這位病人應該使用某種藥物」的要求或醫令。

它記錄的是用藥要求,不一定代表藥物已經交到病人手上,也不一定代表病人已經實際服用。


從醫師開藥到病人用藥

一次用藥流程可能包含不同階段:

醫師開立用藥
      ↓
藥局收到處方
      ↓
藥師調劑藥物
      ↓
藥物交付病人
      ↓
病人服用或醫療人員給藥

FHIR會依照不同階段使用不同Resource。

階段 可能使用的Resource
醫師開立處方或醫令 MedicationRequest
描述藥品本身 Medication
藥局調劑及發藥 MedicationDispense
實際給藥或用藥事件 MedicationAdministration
病人陳述或紀錄的用藥情況 MedicationStatement

因此,一筆MedicationRequest只代表「已提出用藥要求」,不能單獨證明後續所有流程都已完成。


一份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與id

"resourceType": "MedicationRequest",
"id": "medication-request-001"

resourceType表示這是一筆MedicationRequest。

id則是這筆Resource在FHIR Server中的邏輯識別碼。

它的邏輯位置可能是:

MedicationRequest/medication-request-001

其他Resource可以透過Reference連結這項用藥要求。


identifier:處方或醫令編號

"identifier": [
  {
    "system": "https://hospital.example.org/prescription-number",
    "value": "RX20260903001"
  }
]

identifier可以表示實務流程中的:

  • 處方編號
  • 醫令編號
  • 用藥申請編號
  • 其他業務識別資料

可以比較:

欄位 用途
id FHIR Server中的Resource id
identifier 醫療機構使用的處方或醫令編號

不同醫院可能使用相同格式的編號,因此Identifier通常要搭配system


status:用藥要求目前的狀態

"status": "active"

status是MedicationRequest的重要必填欄位,用來表示這項用藥要求目前的狀態。

FHIR R4常見狀態包括:

status 基本意義
active 目前有效
on-hold 暫停
cancelled 已取消
completed 已完成
entered-in-error 誤建資料
stopped 已停止
draft 草稿
unknown 狀態未知

active、completed與stopped不同

active

active

表示這項MedicationRequest目前有效。

completed

completed

表示這項用藥要求的流程已完成。

stopped

stopped

表示原本有效的用藥要求被提前停止。

cancelled

cancelled

通常表示這項Request在執行前或流程中被取消。

這些狀態不能只從病人是否還剩下藥物來判定,而要依照醫療流程及系統規則更新。


entered-in-error不是stopped

如果MedicationRequest被建立在錯誤病人身上,應使用:

entered-in-error

表示這筆紀錄本身是誤建。

它和:

stopped

不同。

  • stopped表示用藥要求曾經有效,後來停止。
  • entered-in-error表示這筆紀錄不應被建立。

正確區分兩者,對病歷可信度及病人安全非常重要。


intent:這是建議、計畫還是正式醫令?

"intent": "order"

intent也是MedicationRequest的重要必填欄位,用來表示這項用藥要求的目的及權威程度。

FHIR R4常見代碼包括:

intent 基本意義
proposal 建議
plan 計畫
order 正式醫令或要求
original-order 原始醫令
reflex-order 依條件產生的反射性醫令
filler-order 執行者建立的醫令
instance-order 針對特定執行實例的醫令
option 可選擇的醫令

本文使用:

order

表示這是一項正式用藥要求,而不是單純建議。


status和intent有什麼不同?

欄位 回答的問題
status 這項Request目前處於什麼狀態?
intent 這項Request的目的或權威程度是什麼?

例如:

status:active
intent:order

表示這是一項目前有效的正式用藥醫令。

status:draft
intent:proposal

則可能表示尚未完成的用藥建議草稿。

閱讀MedicationRequest時,需要將兩個欄位一起理解。


category:用藥要求的分類

"category": [
  {
    "text": "門診用藥"
  }
]

category可以表示MedicationRequest所屬的類別,例如:

  • 門診用藥
  • 住院用藥
  • 社區用藥
  • 出院帶藥
  • 其他使用情境

實際系統應依照Profile及指定ValueSet使用適合的標準代碼,不應只依靠自由文字。


priority:處理優先程度

"priority": "routine"

priority表示這項Request的處理優先程度。

FHIR R4常見代碼包括:

priority 基本意義
routine 一般
urgent 緊急
asap 儘快
stat 立即

本文使用:

routine

表示一般優先程度。

priority不能由一般使用者自行修改,而應反映正式醫療流程中的要求。


medication[x]:開立的是哪種藥物?

MedicationRequest必須說明要求使用哪種藥物。

FHIR R4提供兩種主要表示方式:

  • medicationCodeableConcept
  • medicationReference

欄位名稱中的[x]表示要依照選擇的資料型別使用對應名稱,不能直接寫成:

"medication[x]": "..."

medicationCodeableConcept

如果使用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是適合目前情境閱讀的文字。

medicationReference

如果藥物已經建立成獨立Medication Resource,也可以使用Reference:

"medicationReference": {
  "reference": "Medication/medication-001",
  "display": "範例藥品A 500 mg錠劑"
}

可以比較:

方式 用途
medicationCodeableConcept 直接用代碼及文字表示藥物
medicationReference 指向獨立的Medication Resource

兩者是不同選擇,不應在同一筆MedicationRequest中同時任意使用。


Medication Resource負責什麼?

Medication Resource可以描述藥物本身,例如:

  • 藥物代碼
  • 商品或一般名稱
  • 劑型
  • 成分
  • 包裝
  • 製造商
  • 批次資訊
  • 藥物是否有效

Medication回答:

這是什麼藥?

MedicationRequest則回答:

誰要求哪位病人使用這種藥,以及如何使用?


subject:藥物開給誰?

"subject": {
  "reference": "Patient/patient-001",
  "display": "王小明"
}

subject表示這項MedicationRequest的對象。

一般情況下會指向Patient,也可能在特定情境中指向Group。

這是高度重要的Reference。如果MedicationRequest連到錯誤病人,可能造成嚴重病人安全問題。

系統不能只依靠display中的姓名,而要使用正確Resource Reference及病人識別流程。


encounter:在哪次就醫中開立?

"encounter": {
  "reference": "Encounter/encounter-001",
  "display": "2026年9月3日門診"
}

encounter表示這項用藥要求與哪一次門診、急診或住院有關。

同一位病人可能在不同Encounter中具有不同MedicationRequest,因此保留就醫情境有助於了解藥物的開立背景。

不過,某些長期用藥計畫不一定只屬於單一Encounter,是否需要連結仍應依使用情境決定。


authoredOn:何時建立這項要求?

"authoredOn": "2026-09-03T09:15:00+08:00"

authoredOn表示MedicationRequest最初被建立或撰寫的時間。

它不一定等於:

  • 病人第一次服藥時間
  • 藥局完成調劑時間
  • 藥物實際發放時間
  • MedicationRequest最後更新時間

這些事件可能發生在不同時間,並由不同Resource或欄位表示。


requester:誰提出用藥要求?

"requester": {
  "reference": "Practitioner/doctor-001",
  "display": "陳醫師"
}

requester表示提出或負責這項MedicationRequest的個人、角色、機構或裝置。

它可能指向:

  • Practitioner
  • PractitionerRole
  • Organization
  • Patient
  • RelatedPerson
  • Device

在一般醫師開藥情境中,requester通常可能指向Practitioner或PractitionerRole。


performer:預計由誰執行?

MedicationRequest還可以使用performer表示預計負責執行這項Request的對象。

例如,可能指向負責調劑的機構或其他符合規範的執行者。

可以簡化區分:

欄位 回答的問題
requester 誰提出要求?
performer 預計由誰執行?

兩者可能是不同的醫療人員或機構。


reasonCode:為什麼開立?

MedicationRequest可以用reasonCode直接表示用藥原因:

"reasonCode": [
  {
    "text": "與本次健康問題相關"
  }
]

reasonCode使用CodeableConcept,實際情境應盡量提供合適的標準代碼。


reasonReference:連結相關Condition

如果用藥原因已經建立成Condition,可以使用:

"reasonReference": [
  {
    "reference": "Condition/condition-001",
    "display": "本次就醫相關Condition"
  }
]

可以比較:

欄位 用途
reasonCode 直接以代碼或文字表示原因
reasonReference 指向Condition或其他相關Resource

MedicationRequest的存在不代表特定Condition必然存在,也不能僅根據藥品名稱反推病人的疾病。

同一種藥物可能有不同用途,診斷仍應查看正式Condition及臨床紀錄。


dosageInstruction:藥物如何使用?

"dosageInstruction": [
  {
    ...
  }
]

dosageInstruction表示建議或要求的用藥方式。

它可能包含:

  • 文字說明
  • 使用時間
  • 使用頻率
  • 每次劑量
  • 給藥途徑
  • 使用部位
  • 是否需要時使用
  • 最大劑量
  • 其他病人指示

因為用藥方式可能包含多段指示,所以dosageInstruction使用Array。


dosageInstruction.text

"text": "教學示意:每次1錠,每日3次,使用3天"

text提供讓人閱讀的完整用藥說明。

不過,如果所有資訊都只放在文字裡,電腦很難單獨判斷每次劑量、頻率及期間。

因此,FHIR也提供timingroutedoseAndRate等結構化欄位。


timing:使用時間與頻率

"timing": {
  "repeat": {
    "frequency": 3,
    "period": 1,
    "periodUnit": "d"
  }
}

這段資料可以理解為:

每1天發生3次。

其中:

欄位 內容 基本意義
frequency 3 每個週期發生3次
period 1 週期長度為1
periodUnit d 週期單位為天

不過,「每日3次」不一定等於每8小時一次。用藥時間如何安排,還需要依正式處方及醫療專業指示判斷。


boundsPeriod:用藥指示的時間範圍

"boundsPeriod": {
  "start": "2026-09-03",
  "end": "2026-09-05"
}

boundsPeriod表示這項Timing適用的時間範圍。

它和MedicationRequest的authoredOn不同:

欄位 意義
authoredOn 用藥要求建立時間
boundsPeriod 用藥時間安排的適用期間

route:給藥途徑

"route": {
  "text": "口服"
}

route表示藥物透過什麼途徑使用,例如:

  • 口服
  • 靜脈注射
  • 肌肉注射
  • 皮下注射
  • 外用
  • 吸入
  • 其他給藥途徑

實際資料應使用Profile指定的標準代碼,不應只靠自由文字。

給藥途徑是用藥安全的重要資訊,同一藥物透過不同途徑使用,可能具有完全不同的劑量與風險。


doseAndRate:每次使用多少?

"doseAndRate": [
  {
    "doseQuantity": {
      "value": 1,
      "unit": "錠",
      "system": "http://unitsofmeasure.org",
      "code": "{tbl}"
    }
  }
]

doseAndRate可以表示劑量或速率。

範例中的doseQuantity表示每次使用1錠。

欄位 用途
value 劑量數值
unit 人類閱讀的單位
system 單位代碼系統
code 標準化單位代碼

注射或點滴等情境可能需要記錄速率,資料結構會比一般錠劑更複雜。


asNeeded[x]:需要時使用

某些藥物不是固定時間使用,而是在特定需要時使用。

FHIR可以使用:

"asNeededBoolean": true

表示需要時使用。

也可以使用CodeableConcept說明使用條件:

"asNeededCodeableConcept": {
  "text": "符合指定症狀時使用"
}

不能直接在JSON中寫成:

"asNeeded[x]": "..."

而要依照實際資料型別使用asNeededBooleanasNeededCodeableConcept

是否可以需要時使用,必須依正式處方,不能由病人自行推測。


dispenseRequest:預計如何供應藥物?

"dispenseRequest": {
  "quantity": {
    "value": 9,
    "unit": "錠",
    "system": "http://unitsofmeasure.org",
    "code": "{tbl}"
  },
  "expectedSupplyDuration": {
    "value": 3,
    "unit": "天",
    "system": "http://unitsofmeasure.org",
    "code": "d"
  }
}

dispenseRequest描述希望如何供應藥物。

可能包含:

  • 供應數量
  • 預計供應天數
  • 有效領藥期間
  • 允許重複領藥次數
  • 指定調劑機構
  • 最短調劑間隔

quantity:供應數量

"quantity": {
  "value": 9,
  "unit": "錠"
}

表示預計供應9錠。

它和doseQuantity不同:

欄位 意義
doseQuantity 每次使用多少
dispenseRequest.quantity 總共預計供應多少

expectedSupplyDuration:預計使用天數

"expectedSupplyDuration": {
  "value": 3,
  "unit": "天",
  "system": "http://unitsofmeasure.org",
  "code": "d"
}

表示這次供應量預計使用3天。

供應數量和使用天數應與Dosage內容合理搭配,但實際計算可能受到需要時使用、包裝、劑型及其他醫療因素影響,不能只靠簡單乘法判斷處方是否正確。


numberOfRepeatsAllowed:允許重複供應次數

dispenseRequest可以包含:

"numberOfRepeatsAllowed": 2

表示除了最初供應外,允許再重複供應的次數。

這項欄位的實際意義及限制,仍要配合當地法規、處方制度及醫療機構規則。


validityPeriod:可以領藥的期間

"validityPeriod": {
  "start": "2026-09-03",
  "end": "2026-09-10"
}

validityPeriod表示Dispense Request有效的時間範圍。

它不一定等於病人實際服藥的開始及結束時間,也不等於MedicationRequest的建立時間。


substitution:是否允許替代?

MedicationRequest可以透過substitution記錄是否允許替代藥物。

簡化範例如下:

"substitution": {
  "allowedBoolean": false,
  "reason": {
    "text": "依正式醫療規則記錄"
  }
}

allowedBoolean可以表示是否允許替代。

是否能進行替代,涉及:

  • 處方內容
  • 藥師專業判斷
  • 法規
  • 醫療機構政策
  • 藥品供應狀況
  • 病人臨床需求

FHIR只負責保存交換資料,不能自行決定是否替代藥物。


MedicationRequest和MedicationDispense的差異

MedicationRequest

回答:

醫療人員要求使用什麼藥?

MedicationDispense

回答:

藥局實際調劑或提供了什麼藥?

兩者可能不同的原因包括:

  • 處方被取消
  • 藥物缺貨
  • 經允許後使用替代藥品
  • 實際供應數量不同
  • 病人未領藥
  • 處方尚未完成調劑

因此,看到MedicationRequest不能直接認定藥物已經交給病人。


MedicationRequest和MedicationAdministration的差異

MedicationRequest

表示用藥要求或醫令。

MedicationAdministration

表示實際執行的給藥事件,例如:

  • 護理師完成給藥
  • 藥物在某時間被注射
  • 某次給藥被跳過
  • 給藥後停止
  • 實際使用的劑量及途徑

可以簡化成:

MedicationRequest:應該給藥
MedicationAdministration:實際給了藥

一筆MedicationRequest可能對應多次MedicationAdministration。


MedicationRequest和MedicationStatement的差異

MedicationStatement通常用來表示某人被認為正在、曾經或將要使用某種藥物的陳述或紀錄。

資料來源可能包括:

  • 病人自己描述
  • 家屬提供
  • 醫療人員整理
  • 外部用藥紀錄
  • 病人攜帶的藥袋

可以簡化比較:

Resource 主要內容
MedicationRequest 正式或計畫中的用藥要求
MedicationStatement 某人用藥情況的陳述
MedicationDispense 實際調劑或供應
MedicationAdministration 實際給藥事件

MedicationStatement不一定具有一筆對應的MedicationRequest,例如病人可能自行說明在其他醫院取得的藥物。


為什麼不能只看藥名反推疾病?

同一種藥物可能用於:

  • 不同疾病
  • 不同症狀
  • 不同治療階段
  • 不同適應症
  • 不同預防用途

因此,看到MedicationRequest不能直接推論病人一定患有某項疾病。

如果要了解用藥原因,應查看:

  • reasonCode
  • reasonReference
  • 相關Condition
  • Encounter
  • 正式臨床紀錄

即使有Condition Reference,也需要一起查看診斷的clinicalStatusverificationStatus


用藥資料的安全與隱私

MedicationRequest可能透露:

  • 病人正在接受的治療
  • 可能的疾病或症狀
  • 開立處方的醫師
  • 就醫機構
  • 用藥時間及劑量
  • 特殊或敏感的健康狀況

正式FHIR系統需要控制:

  • 誰可以讀取MedicationRequest
  • 誰可以建立或修改醫令
  • 誰可以停止或取消用藥
  • 是否與病人具有合法照護關係
  • 是否保留版本及稽核紀錄
  • 是否符合病人同意及法規
  • 是否只回傳完成工作所需的資料

用藥資料的錯誤連結或未授權修改,都可能造成嚴重病人安全風險。


MedicationRequest結構整理

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代表「要求使用藥物」,不代表藥物已經調劑、交付或實際使用。

不同階段可能使用:

  • Medication
  • MedicationRequest
  • MedicationDispense
  • MedicationAdministration
  • MedicationStatement

下一篇將認識DiagnosticReport,了解一份檢驗或檢查報告如何連結多筆Observation,並提供報告層級的結論及內容。

明日預告

Day 25|DiagnosticReport:如何組成一份檢驗或檢查報告?

參考資料

  1. HL7 FHIR R4:MedicationRequest
    https://hl7.org/fhir/R4/medicationrequest.html

  2. HL7 FHIR R4:Medication
    https://hl7.org/fhir/R4/medication.html

  3. HL7 FHIR R4:MedicationDispense
    https://hl7.org/fhir/R4/medicationdispense.html

  4. HL7 FHIR R4:MedicationAdministration
    https://hl7.org/fhir/R4/medicationadministration.html

  5. HL7 FHIR R4:MedicationStatement
    https://hl7.org/fhir/R4/medicationstatement.html

  6. HL7 FHIR R4:Dosage
    https://hl7.org/fhir/R4/dosage.html


上一篇
Day 23|Condition:疾病與診斷如何表示?
下一篇
Day 25|DiagnosticReport:如何組成一份檢驗或檢查報告?
系列文
《醫資生的 FHIR 30日入門:用 Postman 讀懂醫療資料交換》30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言