---
# System prepended metadata

title: FHIR Observation入門

---

# FHIR Observation入門
## 何謂FHIR
在這裡指的是醫護端為了實現數據交換和訊息共享的標準，於不同系統之間的資料能互通且能標準化，而標準化是能基於FHIR官網的規格來訂定JSON格式的資料，能夠把這些資料上傳至FHIR API，這樣便能於不同系統之間進行調閱以及上傳。
## FHIR Observation應用於哪一些方面
1. 生理測量數據：包括血壓、心率、體溫、血糖、血氧飽和度等各種生理參數的測量結果。
2. 實驗室結果：用於表示實驗室檢查的結果，例如血液化驗、尿液檢查、生化指標、細胞學檢查等。
3. 臨床評估：包括醫生對患者身體狀況、症狀、疼痛程度等進行的觀察和評估的結果。
4. 影像檢查結果：包括X射線、CT掃描、MRI等各種影像檢查的結果。

所以基於以上的應用，FHIR Observation可以用於PHR端，如上述的基本血壓或心率量測；反之也可以應用於EMR端，如上述的血液檢查...等在醫院的測量，而PHR端可以上傳生理監測，醫護端也可以，兩者階可以進行上傳與調閱之功能。
## 基於FHIR Observation所確立之基本JSON欄位
在這裡的範例我們以收縮壓作為範例，而在填寫範例之前必須先要有病人的基本資料，故請先填寫完基本資料後再填寫生理監測資料。
#### JSON資料範例
```json=
{
  "resourceType": "Observation",
  "status": "final",
  "category": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "vital-signs",
          "display": "Vital Signs"
        }
      ],
      "text": "Vital Signs"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8480-6",
        "display": "Systolic blood pressure"
      }
    ],
    "text": "Systolic Blood Pressure"
  },
  "subject": {
    "reference": "Patient/1111"
  },
  "effectiveDateTime": "2023-11-11",
  "valueQuantity": {
    "value": 120,
    "unit": "mmHg",
    "system": "http://unitsofmeasure.org",
    "code": "mm[Hg]"
  }
}

```
1. category: 這個欄位包含此觀察值屬於哪種分類，通過 coding 屬性來描述觀察的類別。
2. code: 這個欄位包含了觀察的代碼信息，包括了觀察的名稱和代碼
3. subject: 這個欄位表示此觀察值屬於哪位病人，通過 reference屬性引用了一個特定的患者
4. effectiveDateTime: 這個欄位表示此觀察值於哪一天測量，這裡是"2023-11-11"，表示這個觀察是在 2023 年 11 月 11 日進行的。
5. valueQuantity: 這個欄位包含了觀察的值，以及值的單位信息。在這個示例中，觀察的值是 120，單位是 "mm[hg]"，表示收縮壓。

## 基於JSON物件產生可更動的HTML表單
要基於FHIR Observation來製作網頁表單通常會有以下的元素，這裡以血壓為例子:
1. input標籤: 用來輸入病人ID或者是血壓的生理監測數值。
2. button: 這裡把input標籤以button形式宣告此按鈕，當按出去時會進行上傳至FHIR Server的動作。
    2-1: 將所填寫完的值利用jaascript的方式來把值存入JSON物件中
    2-2: 將物件轉成JSON字串
    2-3: 設定需要上傳的FHIR API網址
    2-4: 建立Https的通訊協定

#### 以下為建立填寫收縮壓之生理監測表單
```htmlembedded=
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
   
	<script src="setting.js"></script>
    <script src="HTTPlink.js"></script>
<body style="height: 780px">
      <h3>新增(上傳)生理監測資料</h3>
      病人ID: <input type="text" id="id" />  <br/> <br/>
      測量時間: <input type="text" id="time" />  <br/>
      收縮壓: <input type="text" id="DFS" />  <br/>
      <br/>
      <input id="Button1" onclick="postData()"  type="button" value="postData" />
</body>

</html>
```
#### 上傳至FHIR Server之程式碼參考
```javascript=
function postData() {
     
       myObj.subject.reference = "Patient/"+document.getElementById("id").value;
       myObj.effectiveDateTime = document.getElementById("time").value;
       myObj.valueQuantity.value =  document.getElementById("DFS").value;

       var jsonStr = JSON.stringify(myObj);
       alert(jsonStr);

       var apiURL;
       apiURL = FHIRrootURL + '/' + "Observation";
       HTTPPostData(apiURL, jsonStr);
	}
```
1. 第一步先把填寫至欄位的值些讀取至myObj的物件中，例如: myObj.subject.reference代表著要存入myObj的物件中subject這欄位裡的reference這位置上，而需要把數值填入哪一個欄位則以此方式取值來類推。
2. 第二步則是把JSON物件變成JSON字串，這步驟很重要，因為在上傳至FHIR Server中需要利用Http協定來進行上傳，而Http上傳只接受字串，故需在此步驟進行轉字串的動作，如: var jsonStr = JSON.stringify(myObj) 這動作。
3. 最後指定上完路徑上傳至指定FHIR Server中，只需要確立好上傳路徑即可，上傳成功與否則是由後端程式去執行。

#### Http協定之上傳程式碼(參考即可，上傳動作類似，直接複製即可)
```javascript=
function HTTPPostData(urlStr, dataStr ) {
    var HttpObj = new XMLHttpRequest();
    HttpObj.open("POST", urlStr, true);
    HttpObj.setRequestHeader("Content-type", "application/json+fhir");
    HttpObj.onreadystatechange = function () {
        if (HttpObj.readyState === 4) {
            ret = HttpObj.responseText;
          
             alert(ret);
        }
    }

    HttpObj.send(dataStr);
}
```
## 如何進行延伸別的生理監測表單
1. 首先可以更改input之標籤以及填寫內容之標題內容，如下圖框起來所示。
![螢幕擷取畫面 2024-02-28 193420](https://hackmd.io/_uploads/rJsi992ha.png)
2. 之後可以修改JSON物件之category，code及valueQuantity的欄位，因為測量類型可能不一樣，如下圖所示。
![螢幕擷取畫面 2024-02-28 193830](https://hackmd.io/_uploads/rJhti9h3a.png)

![螢幕擷取畫面 2024-02-28 193856](https://hackmd.io/_uploads/S1X9i922a.png)

完成以上兩件事即可修改成新的生理監測之功能，非常簡單。


## 延伸補充(Observation之調閱)

已知我們可以在FHIR Server上查看觀察值的JSON資料，但大多數醫生或者是病人看不懂怎麼樣解析這個資料，所以可以透過網頁產生表格或是摺線圖的方式來讓數據明顯化，以下示例為產生規格化的表格之畫面:
![螢幕擷取畫面 2024-03-11 162853](https://hackmd.io/_uploads/rJ7J-H3ap.png)

#### 產生次畫面之範例程式碼(使用Javascript)
```javascript=
var myObj;
function callBack() { 
    myObj= JSON.parse(ret);  //把JSON格式資料转换为 JavaScript 对象
} 
function showData() 
{
    HTTPGetData("https://fhir.tcumi.com:58443/r5/fhir/Observation?subject="+document.getElementById("ID").value);             
	var tableStr = "<tr> <th >測量日期</th><th>數值(mm[hg])</th></tr>";

    for (i = 0; i <myObj.entry.length; i++) {
        var trStr = "<tr>";

        trStr = trStr + "<td>";
        trStr = trStr + myObj.entry[i].resource.effectiveDateTime;
        trStr = trStr + "</td>";

        trStr = trStr + "<td>";
        trStr = trStr + myObj.entry[i].resource.valueQuantity.value;
        trStr = trStr + "</td>";

        trStr = trStr + "</tr>";
        tableStr = tableStr + trStr;
    }
  
    document.getElementById("t1").innerHTML = tableStr;
    addRowHandlers("t1");   // add event to table t1

    document.getElementById("t1").style.visibility = "visible";
}
```
#### 產生次畫面之範例程式碼(使用HTML)
```htmlembedded=
<body style="height: 780px">
<h2>收縮壓查詢</h2>
      <p>
        <h3>要搜尋的病人的ID: <input id="ID" type="text"/></h3>
        <input id="Button1" onclick="showData();" type="button" value="搜尋" /></p>
        <table id = "t1" style="visibility: hidden;"></table><br/>
</body>
```
## 作業(占總成績20%)
1. 請根據上述的內容修改成自己想測量之生理監測之的表單，並成功上傳至FHIR Server中，請先操作此表單前先填寫完病人資料取的ID，才能進行填寫生理監測表單，之後把成功上傳之作業連結傳到ican上(包含病人ID以及該病人的生理監測資料)，上傳之FHIR Server之連結為(var FHIRrootURL ="https://fhir.tcumi.com:58443/r5/fhir")。(10分)
2. 完成上傳時在設計一個網頁，以表格的樣式讀取已上傳的資料，資料筆數至少為3筆。(10分)

#### 其他之Observation之JSON物件之參考連結
[https://drive.google.com/drive/folders/1RFCAufR0v_8QDfObempBv4MpdYaiRCzK](https://)

## 會議時間
1. 3/31 15:00~17:00 討論FHIR Observation調閱並製成折線圖(視訊討論)
2. 4/8 17:00~19:00 討論FHIR ServiceRequest的規格(與學弟妹在H707討論，可否定餐點?)
3. 4/19 15:00~17:00 與謝組長討論應用於放腫科癌病PHR系統與所需要的FHI規格(視訊討論)

## 作業繳交
1. 病人ID: 6154
2. 上傳病人成功連結: https://fhir.tcumi.com:58443/r5/fhir/Patient/6154
3. 上傳生理監測成功連結: [https://fhir.tcumi.com:58443/r5/fhir/Observation?subject=6154](https://)
4. 成功調閱之頁面: ![螢幕擷取畫面 2024-03-28 103823](https://hackmd.io/_uploads/SyUH_IGkR.png)
