---
# System prepended metadata

title: 期末project

---

# 期末project
## 題目: 癌病PHR系統
## 整體架構
1. 目前規劃有FHIR Person系統與侯柏志合作開發，將註冊資料上傳志FHIR Server中。
2. 可以搭配陳明昕的運動醫療處方來當作FHIR ServiceRequest的模板，因為病人可能會需要藉由運動來改善身體狀況。
3. 本人架設FHIR Patient以及FHIR Observation之系統，可以讓病人填寫基本資料以及生理監測數值。
以下為此架構圖: 
![癌病PHR系統 (1)](https://hackmd.io/_uploads/Hy-9JiUBA.png)

上圖告訴了我們，首先登入進行驗證，驗證完時可以進入此PHR的子系統，而一個人所連結到的帳號可以是多個人的，可能是親朋好友，因此可以拆成N個Patient端，而每個Patient都可以上傳生理監測以及運動處方，當上傳時我們先轉成CSV檔，之後再將此CSV檔轉成FHIR Data的格式這麼做是因為在座HttpPost的動作需要使用JSON的格式上傳。當我們做完轉檔時，可以利用Http協定上傳至FHIR Server中。

## 子系統上傳(Patient)
1. 此為填寫病人資料之介面，能夠填寫病人的姓名、身分證字號、性別以及生日。
2. 以下為設計界面: 
![螢幕擷取畫面 2024-06-12 121509](https://hackmd.io/_uploads/HkWQWoLHC.png)
3. 上圖如果輸入完時可以將資料存入CSV檔，當出現此彈跳視窗時表示你已成功存入CSV檔了，以下為成功畫面: 
![螢幕擷取畫面 2024-06-12 121835](https://hackmd.io/_uploads/ByPgfoUrC.png)
4. 當成功上傳時可以點選下載CSV檔將資料調閱回來，就可以進行下載並查看CSV檔，以下為範例:
![螢幕擷取畫面 2024-06-12 122117](https://hackmd.io/_uploads/SkfjMoIrR.png)
5. 下載的CSV檔在VS Code所呈現的資料型態如以下所示: 
![螢幕擷取畫面 2024-06-12 122404](https://hackmd.io/_uploads/BJcXXs8SC.png)
6. 如果要將CSV檔轉成JSON物件我們可以設計另一個網頁進行轉檔，我們可以按選擇檔案的按扭，選擇要轉檔的CSV檔，之後底下即會顯示成果，如下圖所示: 
![螢幕擷取畫面 2024-06-12 122848](https://hackmd.io/_uploads/r1gD4oIrR.png)
7. 呈現完確認無誤可以點選上傳JSON的按扭將此JSON物件上傳至FHIR Server中，當上傳成功時伺服器會回應病人ID...等資訊，以下為成功之示意圖: 
![螢幕擷取畫面 2024-06-12 123109](https://hackmd.io/_uploads/ryDCVo8SA.png)
8. 範例程式碼，只需要複製貼上即可以執行:
(1) 上傳CSV檔程式碼: https://bossonyen.github.io/sportproject/patientCSV.txt
(2) 轉成JSON物件並上傳至FHIR Server程式碼:https://bossonyen.github.io/sportproject/patientJSON.txt

## 子系統上傳(Observation)
1. 此為填寫生理監測之介面，能夠填寫病人的ID、收縮壓、舒張壓、以及心率。
2. 以下為設計界面: 
![螢幕擷取畫面 2024-06-12 181431](https://hackmd.io/_uploads/ryJ8rePSA.png)
3. 上圖如果輸入完時可以將資料存入CSV檔，當出現此彈跳視窗時表示你已成功存入CSV檔了，以下為成功畫面:
![螢幕擷取畫面 2024-06-12 181817](https://hackmd.io/_uploads/BykVUxDSA.png)
4. 當成功上傳時可以點選下載CSV檔將資料調閱回來，就可以進行下載並查看CSV檔，以下為範例:
![螢幕擷取畫面 2024-06-12 181936](https://hackmd.io/_uploads/ryLTIlwBA.png)

![螢幕擷取畫面 2024-06-12 181955](https://hackmd.io/_uploads/BJUpIePH0.png)

5. 下載的CSV檔在VS Code所呈現的資料型態如以下所示: 
![螢幕擷取畫面 2024-06-12 182200](https://hackmd.io/_uploads/rJefDevrC.png)
6. 如果要將CSV檔轉成JSON物件我們可以設計另一個網頁進行轉檔，我們可以按選擇檔案的按扭，選擇要轉檔的CSV檔，之後底下即會顯示成果，如下圖所示: 
![螢幕擷取畫面 2024-06-19 182640](https://hackmd.io/_uploads/S1sZ7EeUA.png)

7. 呈現完確認無誤可以點選上傳JSON的按扭將此JSON物件上傳至FHIR Server中，當上傳成功時伺服器會回應病人ID...等資訊，以下為成功之示意圖:
![螢幕擷取畫面 2024-06-19 182927](https://hackmd.io/_uploads/SyGDmNg80.png)
8. 範例程式碼，只需要複製貼上即可以執行:
(1) 上傳CSV檔程式碼: https://bossonyen.github.io/sportproject/ObservationCSV.txt
(2) 轉成JSON物件並上傳至FHIR Server程式碼:https://bossonyen.github.io/sportproject/ObservationJSON.txt

## 子系統連結
1. Patient上傳CSV: https://bossonyen.github.io/sportproject/patientCSV.html
2. PatientCSV轉JSON並上傳: https://bossonyen.github.io/sportproject/patientJSON.html
3. Observation上傳CSV: https://bossonyen.github.io/sportproject/ObservationCSV.html
4. ObservationCSV轉JSON並上傳: https://bossonyen.github.io/sportproject/ObservationJSON.html

## 子系統格式化規格(Patient)
```json=
 var myObj = 
    {
        "resourceType": "Patient",
        "name": [
          {  
            "text": "林小妹"
          }
         ],
        "gender": "male",
        "birthDate": "1980-01-01",
        "identifier": [
            {
            "use": "official",
            "system": "http://hl7.org/fhir/sid/us-ssn",
            "value": "A123456789"
            }
        ],
        "managingOrganization": {
            "reference": "Organization/98a6f5c5-af58-41b5-bd6f-d8ca996b5580"
         } 
    };
```
以上FHIR Patient可以由以下探討: 
1. resourceType: 標識這個資源類型為Patient。
2. name: 病人的姓名，包含姓氏（family）和名字（given）。
3. gender: 病人的性別，可以是 male（男性）、female（女性）、other（其他）或 unknown（未知）。
4. birthDate: 病人的出生日期，以ISO 8601格式表示（例如：YYYY-MM-DD）。
5. identifier: 病人的識別信息，包含身分證字號。
## 子系統格式化規格(Observation)
```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": "85354-9",
        "display": "Blood pressure panel with all children optional"
      }
    ],
    "text": "Blood Pressure and Heart Rate"
  },
  "subject": {
    "reference": "Patient/1234",
  },
  "effectiveDateTime": "2024-06-02T14:00:00Z",
  "component": [
    {
      "code": {
        "coding": [
          {
            "system": "http://loinc.org",
            "code": "8480-6",
            "display": "Systolic blood pressure"
          }
        ],
        "text": "Systolic Blood Pressure"
      },
      "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": "Diastolic Blood Pressure"
      },
      "valueQuantity": {
        "value": 80,
        "unit": "mmHg",
        "system": "http://unitsofmeasure.org",
        "code": "mm[Hg]"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system": "http://loinc.org",
            "code": "8867-4",
            "display": "Heart rate"
          }
        ],
        "text": "Heart Rate"
      },
      "valueQuantity": {
        "value": 72,
        "unit": "beats/minute",
        "system": "http://unitsofmeasure.org",
        "code": "/min"
      }
    }
  ]
}

```
以上欄位的意義下面探討:
1. resourceType: 資源類型，在這裡是Observation，表示這是一個觀察記錄。
2. status: 觀察記錄的狀態，例如"final"表示已經完成的最終結果。
3. category: 觀察的類別，包括一個編碼系統和顯示名稱。在這裡是"vital-signs"，表示生命體徵。
4. code: 描述觀察記錄的類型，包括編碼系統和顯示名稱。在這裡使用了LOINC代碼"85354-9"來表示“Blood pressure panel with all children optional”。
5. subject: 觀察對象，這裡是對應一個患者，包括患者的參考ID和顯示名稱。
6. effectiveDateTime: 觀察的實際時間，這裡是"2024-06-02T14:00:00Z"。
7. component: 包含各個觀察數值的陣列，每個元素代表一個特定的測量項目，例如收縮壓、舒張壓和心率。
8. valueQuantity: 每個測量項目的數值，包括測量值、單位、單位系統和單位代碼。例如，收縮壓的值是120，單位是“mmHg”。

## 合作規劃
1. 目前與侯柏志合作FHIR Person的部分，侯柏志會在flutter建立Person的註冊及登入介面，然後當民眾註冊時可以將茲輛存入CSV檔，之後再利用後端將整個CSV檔傳到我的主機IP地址，而我主要是能夠製作前端的接收端JS程式碼，能夠設定好連線並能成功接收他傳的CSV檔。
2. 能夠幫這堂課的學弟妹期末project所建立的FHIR規格之錯誤的地方做出提醒以及修正，並約視訊開會討論。
3. 

## 討論及修正
1. Patient的設計，其他有需要哪一些個人資料填寫需要於之後課堂或視訊討論，以便之後做出更好的PHR系統。
2. Person之link欄位可能連到病人的帳號及親友的帳號，可以參考FHIR官網。
3. 此期末project要跟不熟FHIR的資訊人員合作，不是介紹知識。
4. 需要教學弟妹如何將CSV檔轉成JSON data的格式上傳至FHIR Server中。
5. CSV可以做到場域管理。
6. CSV檔有可能由穿戴式裝置輸入，可以使用物聯網的方式呈現。
7. 穿戴式裝置可以輸入病人ID，或者運動器材也可以直接輸入。
## 未來展望
1. 能夠搭配APP來做出隨身攜帶式的系統，目前是只能以網頁的方式填寫不方便，如果能夠用APP內嵌瀏覽器，將網頁在APP中呈現，這樣民眾即可在APP以及網頁中動手做輸入，增加便利性。
2. 可以整合CSV資料庫以及FHIR Server，讓資料達到統一，可以從FHIR Server中調閱資料並下載以及可以從CSV檔上傳至FHIR Server中，更甚至建立個人的雲端資料庫，將載好的檔案上傳至雲端，這樣可以達到個人化管理。