【摘要】
我在某縣衛生健康委員會公共衛生信息中心工作,是信息中心的負責人。2021年5月,我中心受縣瘓病預防控制中心委托,為某種瘓病疫苗3期臨床項日開發受試對象攔截系統。我負責系統架構設計、需求分析以及后期的部分編碼工作。通過與慶病預防控制中心領導、二級醫院和衛生院的信息科負責人溝通后,我們認為該系統存在開發時間緊,預算不高等特點,適合采用數據流批處理的架構,采用快速應用開發方法。
快速應用開發方法將該系統分為規劃階段、設計階段、實現階段、系統版本迭代階段、運行階段等,每個階段完成了該階段的重要任務。系統通過多次迭代,最終順利完成。系統運行后效果很好,得到了瘓病預防控制中心隨訪組負責人和工作人員的高度肯定和贊揚。
【正文】
本人在某縣衛生健康委員會公共衛生信息中心(以下簡稱“衛健委信息中心”)工作,是信息中心的負責人,主要負責整個縣區衛生信息化事業的發展。2021 年5月,我縣疚病預防控制中心與某大型疫苗研發企業合作,開展某種瘓病疫苗的3 期臨床試驗項目。我中心受縣慶病預防控制中心委托,為某種瘓病疫苗3期臨床項目開發受試對象攔截系統(以下簡稱“系統”)。該系統的一個關鍵環節是及時追蹤受試對象在當地2家醫院和5家鄉鎮衛生院的就診情況,從而及時安排對應隨訪工作人員去做相應的現場隨訪。項目初期,疾病預防控制中心采用醫院人工上報的方式追蹤,效率低下且容易漏報,疾病預防控制中心領導與我中心溝通,希望可以通過信息化的手段進一步提高受試對象追蹤效率。
在與族病預防控制中心領導進行面對面的溝通之后,我們獲取到了一些項目的宏觀要求:
(1)受試對象攔截系統最好在2周內開發完成。
(2)由于時間比較緊迫,無法使用正常的信息化項目開發流程來申請預算,所以開發預算不是特別充裕。
(3)受試對象攔截系統需要部署到2家二級醫院和5家鄉鎮衛生院,但攔截系統使用人員指派難度鉸大,所以對系統運行自動化程度要求高。
按照上述情況,我與2家二級醫院和5家鄉鎮衛生院的信息科相關負資人討論之后認為時間緊、預算不高的前提下,受試對象欄截系統適合采用數據流批處理的架構。系統從各家醫院數據庫抽取數據,然后經過轉換后,保存為文件,最后將文件發送給族控中心對應負貴人。并且認為系統開發采用快速應用開發方法比較合適。
快速應用開發(RAD)是基于構件的開發方法,強調用戶參與、開發或復用構件、模塊化要求高。一般不適用于新技術,快速應用開發方法的基本思想為:
(1)讓用戶更主動地參與到系統分析、設計、構造活動中。
(2)組織召開一系列重點突出的研討會,并讓項目投資方、用戶、系統分析師、設計人員和開發人員一起參與。
(3)采取迭代方式加速需求分析和設計。
(4)盡快讓用戶看到一個可以工作的系統。
快速應用開發方法可以分為規劃、設計、實現、系統版本迭代和運行五個階段,而設計和實現一般需要多次迭代,下面我就受試對象攔截系統的開發過程介紹如下:
一、規劃階段
規劃階段初步確定系統架構和系統開發方法之后,我與慶控中心領導溝通,組織召開了一次多方碰頭會。參會人員有縣慶病預防控制中心領導、縣公共衛生信息中心負責人、縣疾病預防控制中心信息維護員、慶病預防控制中心疫苗項目隨訪工作負責人、二級醫院信息科科長以及鄉鎮衛生院信息系統工程師等。在碰頭會上,我們創建了受試對象攔截系統溝通交流工作群,方便以后溝通交流。
碰頭會進一步明確了業務流程,即受試對象攔截系統每天都將昨天在各家醫院就診的受試對象的就診信息反饋到縣慶病預防控制中心,瘓病預防控制中心的隨訪人員按照信息進行相應的隨訪。碰頭會明確了受試對象攔截系統需求:攔截2家二級醫院和5家鄉鎮衛生院的門診患者和住院患者:門診患者需要提供姓名、性別、身份證號碼、家庭住址、就診日期和患者診斷;住院患者需要提供姓名、性別、身份證號碼、家庭住址、入院診斷、入院日期、床號;每天上報昨天的攔截信息到瘓病預防控制中心;攔截對象數據庫在項目初期就已經確定,項目期間發生變動的概率很小。
二、設計階段
該階段依據系統需求,通過認證分析和設計,我們得到受試對象攔截系統統一采用 Python 語言進行開發,并提供以下幾個重要功能:
(1)攔截人員數據庫管理:由于攔截人員數據庫在項目期間幾乎不會發生變動,可以采用導入醫院信息系統數據庫的方式導入人員數據。
(2)數據抓取:可以編寫 SQL 腳本從數據庫抽取數據。
(3)數據清洗:編寫數據清洗模塊,可以依賴 Python 統計框架 Pandas。
(4)報表生成:提供“門診患者攔截信息〞和“住院患者攔截信息〞兩個報表,報表格式為“.xlsx”。
(5)報表加密:報表“xlsx”文件使用 2ip壓縮,在壓縮過程中使用對稱密碼加密,各醫院和疾病預防控制中心事先溝通好使用的加密密鑰。
(6)報表發送:報表壓縮包使用電子郵件發送。
三、實現階段
2家醫院和 5家鄉鎮衛生院信息系統工程師負責編寫數據抓取的 SQL腳本,衛健委信息中心負責實現數據清洗、報表生成、報表打包加密以及報表發送等模塊。系統開發期間,瘓病預防控制中心領導負責完成受試對象攔截系統建設的相關申請,申請書需要縣衛生健康委員會領導批準并加蓋縣衛生健康委員會公章。
四、系統版本迭代階段
(1)第一次系統迭代。
三天之后,鄉鎮衛生院受試對象攔截系統完成編碼工作,我們將一周攔截數據反饋給瘓病預防控制中心隨訪負責人,安排隨訪人員試用,得到如下反饋:鄉鎮衛生院獲取到的患者數據質量不高,許多患者沒有身份證號碼:許多患者的住址和手機號碼也缺失嚴重。
經過進一步研究討論,我們按照是否有身份證號碼等信息分類別處理,進一步生成“門診患者通過身份證號碼攔截信息”“門診患者通過姓名攔截(需人工核實)”“無身份證號碼門診患者人工排查輔助工具”“住院患者通過身份證號碼攔截”“住院患者通過姓名攔截(需人工核實)”無身份證號碼住院患者人工排查輔助表”共6張核心報表。
(2)第二次系統迭代。
第二次系統迭代主要是提高受試對象攔截系統運行的可靠性,優化運行錯誤處理,便于系統在后臺運行。
五、運行階段
經過兩次用戶反饋和開發迭代,我們完成了鄉鎮衛生院受試對象攔截系統開發。通過測試后、系統進入試運行階段,在試運行階段,我每天人工執行一次腳本,觀察是否有測試階段未發現的異常發生,連續運行1周之后,我設置了 Linux服務,讓系統任務自動運行。與此同時,我將攔截系統的相關代碼通過 GitHub 共享給2家二級醫院的信息科,醫院信息系統工程師將代碼中的 SQL 腳本替換為適合自家醫院信息系統的 SQL 腳本后開始測試和手工試運行,1周之后,也采用 Linux cron 的方式自動運行。
受試對象攔截系統經過約 10天的開發,順利完成并開始運行。由于采用快速應用開發的方式,用戶參與早,反饋非常及時,整個系統比較簡單,花費也非常小。系統可以較好地滿足客戶的實際業務需求,極大地提高了族病預防控制中心,隨訪效率,慶病預防控制中心隨訪組的工作人員對這個系統非常滿意。
這次受試患者攔截系統的開發過程,讓我頗有感觸,并不是投資巨大的大型系統才是好系統。這次系統采用批處理的方式,無 Web 界面、無用戶授權,按照與常規信息化系統比較,這個系統頂多算一個初期模型,但在系統實際使用過程中發現,很貼合業務實際需求,雖然系統本身非常簡單,但發揮了極大的價值:另外一個感受就是,信息系統的價值只有在有能力的業務人員手里才能體現出來,沒有人使用,系統就是一個擺設。