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
460
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
350
為醫療加裝敏捷的引擎
cclai999
0
440
Python Design Patterns @PyCon APAC 2022
cclai999
0
620
Other Decks in Programming
See All in Programming
AI時代のUIはどこへ行く?その2!
yusukebe
21
7k
Webフレームワークの ベンチマークについて
yusukebe
0
160
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
110
Oxlintのカスタムルールの現況
syumai
6
1.1k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.3k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
200
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
530
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
240
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
500
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.6k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
270
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
3
400
Crafting Experiences
bethany
1
180
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
The Spectacular Lies of Maps
axbom
PRO
1
800
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
400
The Cult of Friendly URLs
andyhume
79
6.9k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Bash Introduction
62gerente
615
220k
Facilitating Awesome Meetings
lara
57
7k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
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