臺北榮總將IT現代化分為3階段,首先是大型主機階段,程式無法共用,再來是Web 2.0階段,程式可共用,但未有標準介面。最後是Web 3.0階段,程式可共用,也有標準介面,程式也不需直接存取資料庫。

圖片來源: 

攝影/王若樸

歷經5年轉換,臺北榮總終於在2020年底從大型主機走向開放式系統,更緊接著朝新一代Web 3.0微服務和雲原生架構邁進,不只用來優化複雜的癌症資訊系統,也在轉換期間,以世界主流的開源容器平臺K8s、Docker等,來以微服務架構打造藥囑系統。他們除了用微服務開發醫療資訊系統(HIS),還將不少醫療AI應用部署在容器平臺上,像是SMART視覺存活分析、內視鏡病理報告、AI自動訓練平臺等。下一步,也計畫採用FHIR國際醫療資料交換標準,來接軌國際。

從大型主機走向開放式系統,更進一步擁抱Web 3.0和微服務架構

北榮的IT系統轉換藍圖可分為3大階段。首先是大型主機時代,從1982年開始啟用IBM大型主機,「畫面就像PTT,是黑白的,」臺北榮總資訊室高級工程師朱原嘉解釋,這臺主機包含了構成IT系統所需的畫面層、邏輯層、資料存取層和資料來源層,好處是不必顧慮程式是否同步,直接按照排程處理即可。

但這套大型主機系統最讓北榮頭痛的是「畫面不好看、維護成本高,」朱原嘉表示,除了黑白畫面屢遭使用者批評外,大型主機採用老舊的PL1程式語言,現在不只人才難尋,各自獨立運作的程式彼此無法共用,難以應付現今快速變化的IT環境。

因此,北榮在2016年展開HIS再造,將大型主機轉換為Web 2.0的開放式系統架構,進入IT系統轉換藍圖的第2階段。過程中,北榮先盤點應用系統,利用虛擬機器(VM)來執行這100、200個系統,界定各自的服務範圍。同時,北榮也重寫了資料庫的預存程序(Stored procedure),是這次系統轉換時最費功夫的地方。

就架構來說,北榮前端採用Ajax網頁開發技術,提高使用者不中斷的體驗,後端則採用J2EE架構來開發,並以JSON格式檔案來與預存程序溝通。網頁畫面層、邏輯層和資料存取層都在前後端執行,而預存程序則包含了邏輯層、資料存取層和資料來源層。

不過,在北榮Web 2.0階段,雖然做到了各程式間可以共用,但仍沒有一套標準的存取介面。

後來,北榮更進一步擁抱最新的Web 3.0技術(也就是WebApp),進入IT系統轉換藍圖的第3階段。這時,前後端仍採用Ajax和J2EE,但改用API來介接Redis資料庫、Docker容器平臺和專門處理高負載量的程式代理HAProxy等所需的資源,將畫面層、邏輯層置於此處,而原本的資料存取層則以Restful網頁服務來執行,資料來源層則改為開放式資料庫(檔案格式包括XML、JSON)。

到了這個階段,程式不僅可共用,也有了標準存取介面,且程式不必直接存取資料庫。

Web 3.0練兵:藥囑系統

而藥囑系統,就是北榮用Web 3.0技術發展最成熟的系統。這個系統非常複雜,牽涉到數十個步驟流程,為了能以微服務架構開發,北榮IT團隊也重新梳理了作業流程,分為4大步驟。

首先是醫師開藥,其中又可分為綜合處方、全靜脈營養(TPN)注射、緊急治療、化療等類別,最花時間開發的就是綜合處方,共有100項程式,如醫師授權、欄位檢核、缺藥停用警示等。

流程第2步則是藥師確認,其中包含的藥物自動配方機、表單列印、藥袋列印和庫存管理等程式,都部署在Docker容器上來處理。第3步是護理簽收,掃過藥袋條碼才能進行計價,並進入第4步的病人取藥。在這最後一步,則包含了帳務計算、電子簽章和統計報表這3類子步驟。

不只改善畫面,還能記憶關鍵訊息、自動帶入

利用新架構開發的藥囑系統,不只在畫面上一改黑白作風,以網頁式的彩色頁面和清楚欄位來呈現,系統還能記憶關鍵訊息,並在搜尋欄位自動跳出相關訊息,「有如Google搜尋的自動完成功能!」朱原嘉形容。

舉例來說,當使用者在藥囑系統輸入藥名,只輸入NS時,搜尋欄位就會自動跳出與NS相關的藥物,甚至是藥名包含NS的缺藥訊息,方便使用者選擇,進一步查詢資訊。

另一個最有感的差異,則是批次檢核。檢核是查看藥物開給是否正確,像是藥物名稱、劑量、單位、途徑等細節,而舊系統進行檢核時,只能逐一進行,但新系統能讓使用者批次檢核,不必一項一項檢核之外,還會自動以紅框標註有問題之處,來提醒醫師。

就藥袋列印來說,部署在Docker容器中執行的新系統,不只能應付毫秒級的大量請求,還能儲存列印資訊,方便補印。

除了用來開發HIS,還用容器平臺來部署醫療AI

北榮不少智慧醫療應用,也以當紅的開源容器管理平臺K8s、Docker來部署。比如,團隊用程式語言R開發一套存活分析線上平臺,也靠Docker容器來執行,使用者可以透過Shiny Proxy登入、上傳資料後,自動執行資料預處理、存活分析和機器學習模型運算等工作,最後產出報表給使用者參考。

另一個例子則是大腸內視鏡AI報告。北榮利用Docker部署ElasticSearch叢集,透過Logstash管道讀取csv格式檔的病理報告或內視鏡報告,將資料寫入叢集。當使用者透過Kibana這個視覺化工具查詢時,系統就會讀取ElasticSearch叢集資料,來產出視覺化的報表,像是在大腸鏡畫面上顯示大腸息肉、癌症病灶位置等。

不只如此,北榮還用K8s來部署IBM模型周期自動化管理平臺AutoAI,成為北榮內部的AI訓練平臺。這個AutoAI能自動進行資料預處理、特徵工程、選擇模型並比較模型表現,省下大量人力與調參數的時間。北榮也實際利用這個平臺,來找出聽力治療後恢復的重要因子。

除了IT系統現代化,朱原嘉透露,北榮IT團隊也在去年實作了FHIR疫苗通行證,更要將這個FHIR練兵經驗,進一步擴大到更多醫療應用上。因為,他們看見,全美超過80%的健康照護機構和廠商,都支援FHIR來跨機構互通醫療資料,而且,iPhone也採用FHIR來讓使用者與美國數百家醫療集團互通健康資料,個人還能授權第三方服務單位存取資料。北榮認為,FHIR將成下一代健康照護與AI的關鍵,得即時跟上。

醫療系統有多複雜?光癌症資訊系統就牽連數十個流程

朱原嘉以參與開發數十年的癌症資訊系統為例,來說明單一醫療系統與HIS串接的複雜度。癌症資訊系統「就像IBM的AI癌症治療輔助系統(Watson for Oncology),」他比喻,這套系統可輔助醫生問診、管理治療策略和掌握病患狀態,但在北榮,癌症資訊系統不只服務醫生。

「我們有超多公公、婆婆!」他解釋,這套系統有許多不同類型的服務對象,像是負責病人清單的個管師,以及臨床部內外科、放射科,另外也給提供資料給癌症委員會參考,供他們研議改善策略,甚至還有營養師、癌登師等成員,需利用系統資訊來研討個案最佳處置方式。

在這過程中,癌症資訊系統也得與不同HIS系統串接,比如掛號系統、門診系統、住院系統和癌症治療系統,甚至是會議系統。進一步拆解癌症資訊系統,可分為3大部分,首先是最底層的基礎架構層(如核心資訊系統如HIS、NIS、LIS、行政管理系統等)、中間的平臺服務層(如身份認證平臺、資料服務交換平臺、網站平臺、跨系統服務平臺),以及最上層的應用服務層,包含癌症診斷、新病症登錄、癌症治療規畫書、癌症病歷審核功能、癌症多專科會議等子系統。

為了串聯這些系統,北榮還自建了待辦事項(To do list)工具,就像是會議記錄般,來銜接不同系統的工作。

這麼複雜的系統,北榮有套作法來解決共容性問題。他們將系統層重新劃分,特別設置共用元件基礎架構,將不同系統間的通用元件,如認證授權、快取處理、安控、資料處理等抽取出來,成為獨立的共用元件架構,如此一來,與其他系統串接時,就不必再各自打造這些元件。

再來就是應用系統基礎架構層,包含了各應用系統共用的檢核邏輯模組,以及流程模組和與外部系統介接的模組。而與上一層的使用者介面間,就由應用系統服務介面(Restful service)來串聯。

透過這種共用元件、Web化的服務設計,就讓癌症資訊系統架構更靈活。舉例來說,以新架構開發的資料品管功能來說,系統設置不同顏色的燈號,來標註病人的來處(如門診、急診、住院等),一改過去未分類的作業方式。系統除了能自動登錄病人資訊,還能快速查找病人位置,把原本個管師需人工查找的30分鐘縮短為立即就能完成。又或是,該系統能自動將癌症病人資料自動歸戶至電子病歷系統,將過去需要手動歸戶的20至40分鐘,縮短為0分鐘。

在改善過程中,他們還建立了一套代辦事項平臺,用來管控、追蹤流程,比如提醒醫師治療計畫書還沒撰寫,用這個方式取代原本的紙本作業。甚至,IT團隊還打造了病歷審查服務,將癌症病人以清單式歸類,不只改善病歷品質,也實現醫護間的資料共享。

 


熱門新聞

Advertisement