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

上圖告訴了我們,首先登入進行驗證,驗證完時可以進入此PHR的子系統,而一個人所連結到的帳號可以是多個人的,可能是親朋好友,因此可以拆成N個Patient端,而每個Patient都可以上傳生理監測以及運動處方,當上傳時我們先轉成CSV檔,之後再將此CSV檔轉成FHIR Data的格式這麼做是因為在座HttpPost的動作需要使用JSON的格式上傳。當我們做完轉檔時,可以利用Http協定上傳至FHIR Server中。
## 子系統上傳(Patient)
1. 此為填寫病人資料之介面,能夠填寫病人的姓名、身分證字號、性別以及生日。
2. 以下為設計界面:

3. 上圖如果輸入完時可以將資料存入CSV檔,當出現此彈跳視窗時表示你已成功存入CSV檔了,以下為成功畫面:

4. 當成功上傳時可以點選下載CSV檔將資料調閱回來,就可以進行下載並查看CSV檔,以下為範例:

5. 下載的CSV檔在VS Code所呈現的資料型態如以下所示:

6. 如果要將CSV檔轉成JSON物件我們可以設計另一個網頁進行轉檔,我們可以按選擇檔案的按扭,選擇要轉檔的CSV檔,之後底下即會顯示成果,如下圖所示:

7. 呈現完確認無誤可以點選上傳JSON的按扭將此JSON物件上傳至FHIR Server中,當上傳成功時伺服器會回應病人ID...等資訊,以下為成功之示意圖:

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. 以下為設計界面:

3. 上圖如果輸入完時可以將資料存入CSV檔,當出現此彈跳視窗時表示你已成功存入CSV檔了,以下為成功畫面:

4. 當成功上傳時可以點選下載CSV檔將資料調閱回來,就可以進行下載並查看CSV檔,以下為範例:


5. 下載的CSV檔在VS Code所呈現的資料型態如以下所示:

6. 如果要將CSV檔轉成JSON物件我們可以設計另一個網頁進行轉檔,我們可以按選擇檔案的按扭,選擇要轉檔的CSV檔,之後底下即會顯示成果,如下圖所示:

7. 呈現完確認無誤可以點選上傳JSON的按扭將此JSON物件上傳至FHIR Server中,當上傳成功時伺服器會回應病人ID...等資訊,以下為成功之示意圖:

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中,更甚至建立個人的雲端資料庫,將載好的檔案上傳至雲端,這樣可以達到個人化管理。