臨床資料的完整性和規范性是臨床醫學科研和教學工作的重要基礎。一般而言,患者在接受治療或者手術之后,病情一旦穩定就會立即出院休養,等待完全康復。對于醫療機構而言,科研和教學工作相當重要,需要進一步跟蹤隨訪離院患者的康復情況,以便對其在院期間的治療方案進行結果跟蹤并作出最終評價[1]。
傳統的隨訪方法是由醫生根據患者的診斷、病情、基本健康狀況等特點,制定特定格式的隨訪卡,由負責隨訪的專人收集隨訪信息并填寫隨訪卡。紙質隨訪卡存在整理困難、容易重復和出錯、容易遺失、信息難以檢索統計等問題,并且隨著隨訪患者的增多,隨訪信息越來越復雜。為了適應大量臨床數據的整理、儲存和分析需要,必須使用信息化的管理方式[2]。
目前主流的電子隨訪系統采用C/S結構,部署在醫院的內部網絡上,采用RDBMS+J2EE等傳統的企業級開發架構。這類技術體系對需求響應慢,難以適應復雜的數據模型,無法在外部互聯網訪問。對于隨訪數據格式復雜多變,或者需要隨訪人員隨時隨地錄入隨訪數據的情景,該類技術體系顯然是難以滿足的。對需求和場景進行分析后,我們決定使用基于MEVN(MongoDB+Express.js+Vue.js+Node.js)架構的單頁面應用(Single Page Application,SPA)技術,并且將隨訪系統部署到云服務上。相對于傳統的技術體系,基于MEVN架構的SPA技術具有開發效率高、適應復雜數據模型、并發性能好、易部署等特點,適合隨訪系統這類數據格式復雜多變,需隨時隨地訪問和錄入數據的業務系統。
SPA是一種特殊的Web應用,它將所有的活動限于單個Web頁面中,僅在該Web頁面初次載入時加載所有必需的資源文件,一旦頁面加載完畢,SPA不會因為用戶的任何操作而進行頁面的重新加載或跳轉,從而提供非常流暢的用戶體驗[3]。SPA將主要業務邏輯封裝在前端頁面中,后臺程序只提供必要的接口,是一種典型的“胖客戶端/瘦服務端”(Fat Client/Thin Server),能有效提高用戶交互響應速度和減輕服務器壓力[4]。
MEAN(MongoDB+Express.js+AngularJS+Node.js)架構[5]是一種常用的、基于JavaScript的開源全棧SPA開發架構,能創建輕量高效、容易擴展和維護的SPA應用。MEVN架構是MEAN架構的一個變體,將其中的前端框架Angular.js替換是為了更加簡潔直觀的Vue.js。
MEVN架構的組成技術簡介見表1。

表1 MEVN架構組成技術
系統需實現以下核心需求。 隨訪數據錄入/檢索/導出:隨訪數據錄入后,能按照關鍵字、數據值等條件進行模糊或精確檢索,并且能導出為表格形式(如Excel)。 歷史隨訪記錄對比:按時間維度記錄患者歷次隨訪數據,對比疾病風險的變化情況,從而推斷疾病風險的關鍵影響因素。 疾病風險量表評估:使用疾病風險評估量表對每次隨訪記錄進行疾病風險評估,觀察疾病風險走勢,推斷患者患病風險。 提供互聯網訪問:用戶可隨時隨地在互聯網上訪問和管理隨訪數據。 系統業務邏輯如圖1所示。

圖1 網絡隨訪系統的業務邏輯流程
2.2.1 數據庫設計
隨訪系統主要包括以下數據庫實體。
隨訪表單(Follow-up Form):定義隨訪記錄的內容和格式。
隨訪表單章節(Follow-up Form Section):隨訪記錄的章節。1份隨訪記錄可以包含多個章節。
隨訪表單字段(Follow-up Form Field):隨訪記錄字段。1個隨訪記錄的章節可以包含多個字段。
風險評估表單(Assessment Form):定義風險評估表的內容和格式。
風險評估表單問題(Assessment Form Question):風險評估表的問題。1份風險評估表可以包含多個問題。
隨訪結果(Follow-up Result):患者隨訪結果。格式為數組,包含患者歷次隨訪記錄。
隨訪記錄(Follow-upRecord):患者單次隨訪記錄。記錄患者單次隨訪的結果,首次隨訪記錄包含完整的隨訪信息,后續隨訪記錄僅記錄增量變化。同時,每次隨訪記錄還包含患者該次隨訪的風險評估記錄。
風險評估記錄(Assessment Record):患者單次隨訪的風險評估記錄。
上述數據庫實體中,隨訪表單字段(Follow-up Form Field)的格式較為復雜,原因主要是需支持單選、多選、文本、段落、數字、日期等多種格式,每種字段格式的參數和值的類型都不相同,字段之間存在邏輯規則關聯(如當“性別”為男性時,“是否懷孕”只能為否)。常規的關系型數據庫的字段類型唯一且不可變更,也無法表示數組或者對象等數據結構。如果選用關系型數據庫,至少會有8個數據庫表,并且表間存在復雜的關聯關系。
為了避免上述情況,我們選擇非關系型數據庫MongoDB作為系統數據庫。
MongoDB是一種面向文檔(Document-oriented)的數據庫,能夠儲存類似JSON格式的對象。在傳統關系型數據庫不能滿足需求、且對數據的實時性和一致性要求不高又不需要各種關聯查詢的情況下,MongoDB的表現比關系型數據庫更好。在此我們將隨訪表單看作一個復雜的文檔(Document),所有的隨訪表單章節是它的一個數組成員,每個章節又有一個字段數組,包含這個章節的所有字段。按照這種方式設計,整個數據庫只需要3類文檔:隨訪表單(Follow-up Form)、風險評估表單(Assessment Form)、隨訪結果(Follow-up Result),其他實體都作為文檔成員出現。具體的數據庫設計見圖2(數據庫實體僅列出主要屬性)。僅擁有主鍵的實體才是獨立的文檔。

圖2 網絡隨訪系統數據庫設計
2.2.2 系統設計
系統劃分為用戶界面層、業務接口層和數據存儲層3層。
用戶界面層:基于Vue.js進行開發構建,將用戶界面拆解為若干獨立的、可復用的圖層組件。組件已封裝好主要的業務邏輯,組件之間使用屬性和事件進行通訊。
業務接口層:采用Express.js作為Web應用服務器,接收和處理各類HTTP訪問請求,為用戶界面層提供必要的數據接口。接口代碼采用Javascript編寫,由Node.js提供的V8 Javascript引擎[9]提供運行環境。
數據存儲層:采用MongoDB作為數據庫服務器,存儲各類復雜的數據結構,為業務接口層提供數據訪問服務。
系統部署在第三方云服務上。整體架構見圖3。

圖3 網絡隨訪系統整體架構
2.2.3 系統部署
我們選用Heroku作為本文隨訪系統的云服務提供商。Heroku是一個“平臺即服務”(Platform as a Service,PaaS)平臺,為開發人員提供構建、運行和操作Web應用的云服務環境[10]。Heroku支持Ruby、Node.js、Python、Java、PHP、Go等幾乎所有市面上主流的Web編程語言。Heroku的部署和配置非常簡潔明了,甚至只需要一行代碼就能完成Web應用的部署。
本文隨訪系統的部署步驟如下。
編譯前端工程:將編譯好的SPA模板文件復制到后端服務器目錄下。
在后端服務器中添加對SPA模板文件的托管,僅需一行代碼即可實現:app.use(express.static(‘frontend’))。其中app為后端服務器運行實例,frontend為SPA模板文件所在目錄。
添加Heroku運行配置文件:在后端源文件目錄下添加Procfile文件,最基本的運行配置也僅需一行代碼:web: node server.js。其中server.js文件為后端服務器啟動程序。
綁定Heroku Git源:Heroku會為每一個Web應用提供一個遠程Git源,綁定之后,每一次Git提交代碼操作都會自動觸發Web應用的重新編譯和部署行為,簡化了Web應用重新發布的流程。
2.2.4 系統實現
系統主界面以列表的形式展示所有隨訪結果,提供隨訪結果的搜索/導出/查看/新增/修改/刪除功能(圖4)。

圖4 網絡隨訪系統主界面
隨訪結果錄入界面以時間軸的形式展示患者的所有隨訪記錄和疾病風險評估記錄。如果本次隨訪記錄的某字段與上次隨訪記錄的某字段存在差異,將會標黃顯示。風險評估走勢直觀地展示了疾病風險的走勢情況。鼠標懸浮在某個時間點上方還會顯示本次隨訪記錄與上次隨訪記錄的不同之處,可以用于估測對患者疾病風險影響較高的因素(圖5)。
疾病風險評估表由若干評估問題組成(圖6),每個問題的選項均對應一定的分值,選擇相應的選項可實時計算評估總分并計算出風險分級結果。

圖5隨訪結果錄入界面

圖6 疾病風險評估表截圖
系統完成研發后,在院內神經內科進行了應用,制作了重癥肌無力病種的隨訪數據表單,醫生可在院內外方便地訪問本系統并錄入隨訪數據。上線數月后,已完成對2 000多名患者的隨訪管理,每名患者平均錄入3~4條隨訪跟蹤信息。系統界面友好,操作方便,用戶體驗流暢,能方便地對患者病情進行評估并查看風險走勢和影響因素,得到了科室醫生的一致認可。醫生可以使用本系統篩選特定條件的患者,并將結果以Excel的格式導出,導入統計分析軟件(如SPSS)進行統計學分析,有力地輔助了醫學研究工作。
本文針對網絡隨訪系統的需求,采用基于MEVN架構的SPA技術設計和實現了一種簡潔靈活、開發效率高、用戶體驗好的隨訪系統單頁面應用,并將其部署到云服務上。相對于其他針對隨訪系統的研究,本文采用了一種基于文檔的非關系型數據庫和全新的MEVN技術架構,具有適應復雜數據結構、擴展性好,并發性能強、用戶體驗流暢、易部署等優點,適合快速響應用戶需求并高效開發Web應用。在下一步工作中,本系統將與院內HIS系統進行對接,導入HIS系統中的患者信息,形成更加完整的患者健康視圖,并且集成數據分析模塊,實時對隨訪數據進行統計分析和匯總展示。可以預見,SPA技術作為一種新興的Web開發技術,將會在各行業信息化中得到越來越廣泛的應用。