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