Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
為醫療加裝Python的引擎
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Max Lai
September 20, 2024
Programming
480
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
為醫療加裝Python的引擎
PyCon TW 2024 演講簡報
Max Lai
September 20, 2024
More Decks by Max Lai
See All by Max Lai
童醫院敏捷轉型的實踐經驗
cclai999
0
370
為醫療加裝敏捷的引擎
cclai999
0
450
Python Design Patterns @PyCon APAC 2022
cclai999
0
620
Other Decks in Programming
See All in Programming
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
500
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
160
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
420
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
What's New in Android 2026
veronikapj
0
240
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
480
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
290
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
150
霧の中の代数的エフェクト
funnyycat
1
450
継続モナドとリアクティブプログラミング
yukikurage
3
670
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
3.3k
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
340
GitHub's CSS Performance
jonrohan
1033
470k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
My Coaching Mixtape
mlcsv
0
180
We Are The Robots
honzajavorek
0
290
A better future with KSS
kneath
240
18k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
410
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.2k
Transcript
為醫療加裝Python的引擎 Max Lai 童綜合醫院 2024/09/21 PyConTW 2024
About Me • Max Lai • 童綜合醫院資訊部 • 副主任 •
負責智慧醫療系統研發 • 社群經歷 • 2014年6月共同發起「Taichung.py 」Meetup • 2014年12月發起並主持「台中敏捷社群」活動 • 2015~2018年「台中敏捷之旅研討會 」主辦人 • PyCon TW 2018, 2020, 2021, 2022 投稿分享
童綜合醫院 • 位於臺中市梧棲區 • 臺中市海線大型區域教學綜合醫院 • 連續6次獲得 JCI 國際醫療認證 •
通過 HIMSS EMRAM 六級國際認證
大綱 • 在既有醫療資訊系統加入新功能的挑戰與策略 • 新舊系統資料互通 • 新舊系統無縫串接 • 以Strangler pattern
重構系統
醫師 門急住 電子 病歷 護理 收費 行政 管理 藥劑 教學
研究 檢驗 HIS 上百個子功能 !!! 醫院資訊系統 (HIS)
• 醫院的資訊系統已運行著許多既有系統 • 有些延用幾10年的技術(ex. Informix DB, Delphi, 4GL); • 新舊系統如何無縫介接通常需要特別設計。
• 因為醫療活動持續24小時在進行 • 全部打掉重練重新開發一套系統, • 依過往業界的案例很難達成無痛轉移, • 對管理階層來說不可能投入如此龐大的資金及人力。 加入新功能或重構的挑戰
管路 門診護理(Delphi) 管路 住院護理(Delphi) 管路 急診護理(Delphi) 生命 徵象 管路 整合護理
管路 微服務(Flask+Vue.js) 生命 徵象 生命 徵象 生命 徵象 • Informix + Pyodbc • 中文罕見字編碼 • Repository Pattern • 內嵌Web • 抽取共用元件 • 呼叫Delphi Python Socket Server 批價系統 4GL 部份 負擔 部份 負擔 Informix • 抽取 4GL 模組到 Socket Server Flask + Vue.js • 串連跨系統流程 1.新舊系統資料互通 2.新舊系統無縫串接 逐步增加Python新功能/舊系統抽取共用模組 3.以Strangler Pattern 漸進式重構
1.新舊系統資料互通
• OpenInformix/IfxPy • 以 pyodbc 連線 Informix DB • IBM
Informix ODBC Driver + unixODBC + pyodbc 1)新舊系統資料互通 1.1 如何用 Python 查詢 Infomix DB
Informix DB informix client UnixOdbc Pyodbc CP950 codec 0x92D1, '廔'
Image source: Text balloon icons created by Md Tanvirul Haque - Flaticon 1)新舊系統資料互通 1.2 中文罕見字自訂編碼之解譯處理
Informix DB informix client UnixOdbc Pyodbc tung-big5- codec 0x92D1, '廔'
\u5ED4, '廔' 1)新舊系統資料互通 Python App 1.2 中文罕見字自訂編碼之解譯處理 自訂 Big5 UTF8 CNS 0x92D1 \u5ED4 2-4A24 廔 0xFA40 \u26C40 4-346A 𦱀 0x9041 \u741F 3-3D35 琟 reference: 中文全字庫 https://www.cns11643.gov.tw/index.jsp
https://github.com/cclai999/pycontw2024/
Before After Informix 1)新舊系統資料互通 reference: https://www.cosmicpython.com/book/chapter_02_repository.html 1.3 以 Repository 隔離
Informix 存取 Layer
Before Future MariaDB/PostgreSQL 1)新舊系統資料互通 reference: https://www.cosmicpython.com/book/chapter_02_repository.html 1.3 以 Repository 隔離
Informix 存取 Layer
https://github.com/cclai999/pycontw2024/
https://github.com/cclai999/pycontw2024/
2.新舊系統無縫串接 以病人為中心 後端-抽取微服務、前端-界面混搭
2)新舊系統無縫串接 APIFlask FastAPI Underlying framework/libs Flask + Marshmallow Starlette +
Pydantic HTTP methods @app.input(), @app.output(), @app.get(), @app.post(), etc @app.input(), @app.output(), @app.get(), @app.post(), etc Data validation built-in built-in Error message JSON format JSON format Async support Yes (less performant) Yes OpenAPI document Automatic generation Automatic generation Community Rich Smaller Download(PyPI Stats) last month: 97,448,895 last month: 60,543,770 2.0 Web Framework 的選擇
① PACS/影像資料庫 報告資料庫 RIS + 即時輔助診斷 醫師產出報告 HIS Dicom PNG
AI Inference AI Model NAS ② ③ ④ ⑤ ⑥ ⑦ PyConTW20 PyConTW22 2)新舊系統無縫串接 Medical AI Inference Pipeline
2.1『放射報告系統』 內嵌 『AI 辨識(Web)』 2)新舊系統無縫串接 放射報告系統 AI 辨識結果
把 Delphi 核心邏輯抽取成微服務 2)新舊系統無縫串接 2.2『護理執行』 內嵌 『管路資訊 (Web)』 護理執行登錄系統 管路資訊系統
跳窗
住院醫囑 2)新舊系統無縫串接 2.2各既有系統內嵌管路微服務(Web) 手術護理 護理過程 整合護理系統
麻醉護理 (Web) 病歷查詢(Delphi) 2.3 新Web系統 開啟舊 Delphi APP 2)新舊系統無縫串接
報告延遲, 無法追蹤 是否通報, 無法追蹤 報告完成無主動通知:等待 2.4 健檢報告流程事件之串連 2)新舊系統無縫串接 報告延遲, 無法追蹤
Kafka Rest Proxy X光報告 系統 Delphi 分派系統 PHP 檢驗報告 系統
報告項目 確認系統 總評報告 系統 PHP PHP 2)新舊系統無縫串接 2.4 以事件訊息串連跨系統醫療流程 事件趨勢架構 ⑴分派X光報告 2023/7/24 16:14 ⑵X光報告完成 2023/7/25 09:43 ⑷檢驗報告完成 2023/8/08 11:09 ⑸各報告確認完成 2023/8/09 10:38 ⑶X光報告翻譯完 2023/7/25 09:45 ⑹總評報告完宬 2023/8/14 16:03 ⑺總評校稿完宬 2023/8/14 16:36 ⑴分派X光報告 2023/7/24 16:14 ⑵X光報告完成 2023/7/25 09:43 ⑷檢驗報告完成 2023/8/08 11:09 ⑸各報告確認完成 2023/8/09 10:38 ⑶X光報告翻譯完 2023/7/25 09:45 ⑹總評報告完宬 2023/8/14 16:03 ⑺總評校稿完宬 2023/8/14 16:36 Python(Web) 事件時序記錄
3.以Strangler Pattern 漸進式重構 逐漸抽取 HIS 子功能成為「微服務」
https://bit.ly/3KwdvmO 新HIS (微服務) 舊HIS(單體式) 3)以Strangler Pattern 漸進式重構 逐漸抽取 HIS 子功能成為「微服務」
上游系統/ 使用者介面 HTTP Proxy 部份負擔 部份負擔 單體系統 上游系統/ 使用者介面 HTTP
Proxy 部份負擔 部份負擔 單體系統 H T T P Source: 單體式系統到微服務 Web常見的漸進式轉換 3)以Strangler Pattern 漸進式重構
• 介面與DB資料高度耦合 • 大量的 global variables • 不支援 HTTP request
4GL 重構的難題 3)以Strangler Pattern 漸進式重構
上游系統/ 使用者介面 部份負擔 部份負擔 共享 資料 4GL 批價系統 global variables
db index Socket: function name, db index Python Socket Server global variables db index Informix DB db index 3)以Strangler Pattern 漸進式重構 以Socket Server & 共享表格抽取新模組
https://github.com/cclai999/pycontw2024/
總結
管路 門診護理(Delphi) 管路 住院護理(Delphi) 管路 急診護理(Delphi) 生命 徵象 管路 整合護理
管路 微服務(Flask+Vue.js) 生命 徵象 生命 徵象 生命 徵象 • Informix + Pyodbc • 中文罕見字編碼 • Repository Pattern • 內嵌Web • 抽取共用元件 • 呼叫Delphi Python Socket Server 批價系統 4GL 部份 負擔 部份 負擔 Informix • 抽取 4GL 模組到 Socket Server Flask + Vue.js • 串連跨系統流程 逐步增加Python新功能/舊系統抽取共用模組
麻醉 護理 系統 ICU 護理 系統 個案 管理 系統 整合
護理 系統 CXR AI辨識 管路 微服務 輸血 登錄 門診 給藥 健檢 問卷 健檢 總評 整合 醫囑 Python Based 新系統的擴散
使用者 滿意度 什麼地方好用 User1 非常滿意 • 這個系統不只是麻醉紀錄,也是一個流程系統, • 而且於個案討論時,可以很清楚的看到處置的時間用藥。 User2
滿意 • 省去手寫診斷跟術式,疾病史自行帶入。 • 免去交接班上一個人字跡潦草看不懂的窘境 • 也會自己累積水量尿量那些,整體來說系統還不錯用 User3 非常滿意 • 不用在手寫診斷跟術式,病人基本資料也都幫我們帶入了,在上小 刀省了很多時間,還不用趁長刀時抓緊寫麻單 User4 滿意 • 不用手寫術式跟診斷,自動帶入病人資料真的很棒 ,對於短刀真 的很方便,也有很多片語可以使用,省去打字紀錄的時間 User5 非常滿意 • 在交班面~版面設計井然有序,交班不掉落 • 在製作PFT檔~異常個素報告字體顯示清晰 User6 滿意 • 接病人時,按照ORMS左側排列順序,一一核對各關卡,井然有序 • 提升病人安全,減少各項疏失的錯誤率 User7 非常滿意 • 節省很多寫麻單的時間, • 一個頁面就可以滿足所有需求,都有各個連結點 麻醉護理系統使用者回饋 一年節省 8人月(護理師)
協助醫護的日常工作 讓病人得到更多關注 HIS的價值:
歡迎加入 Taichung.py