第一支程式 - UD半顆及四級管藥統計程式
艾雷島布納哈本12年單一純麥威士忌, 配上卡魯哇咖啡香甜酒,
極致的黑配黑, 原來鹹鹹的海風和甜甜的咖啡是如此地不搭!!
第一支程式要介紹什麼好呢?
這個問題困擾了我好幾天, 講得過於年代久遠, 就和考古挖土一樣沒有真實感! 若講的是最近正在開發的東西呢, 我手上是有一項計畫屬於全國性的, 不過這是我的個人機密, 尚在開發中不宜爆光. 程式的規模很小, 很slim, 很tiny, 很nano…, 隨便套入你可以想像得到的微小形容詞, 但它的偉大你可以引用尼爾·奧爾登·阿姆斯壯的世紀名言”That's one small step for man, one giant leap for mankind.”
我的目標是可以替十幾家國軍醫院帶來破天荒的資訊整合及人力節省, 更說不定可以為我服務的醫院帶來經費挹注, 所以-我的這一小步嘛…不能說! 不能說!
那麼就說說可以說的吧!
在TOSHO裡頭四級管藥的補藥流程大概是這樣: 每天要包UD之前我們把昨天包藥剩下來裝在瓶子裡的散裝四級藥倒進TOSHO裡, 然後再隨興地抓一把排裝藥擠到藥盤再倒入TOSHO裡, 運氣不好的話TOSHO嗶嗶叫你得要再擠個幾排下去, 運氣好的話它可以順利包完不過同時心裡面也在嘀咕”沒事擠那麼多幹嘛? 手都疼得要死!”
也或許你是個比較有大愛精神的人, 願意替明天包藥的同事做功德讓他不用擠那麼多! 咦~原來明天包藥還是你自己啊! SOGA!
這樣就結束了嗎? 不! 包藥結束後還得要把它全部倒出來裝瓶, 一一清點剩餘數量記錄在清點薄冊中……
以上的情境是不是每天都在上演著? 難道就不能有個比較完美一點的劇本嗎?
如果能夠在包藥之前就能夠”精準地”知道四級管藥的品項和數量呢?
光是這一句話就可以有以下好處:
1. 自己的藥自己擠, 既不會多做, 也不會少做, 同事之間再也不會人前笑臉, 人後變臉!
2. 那些裝四級藥的小瓶子可以丟掉啦! 藥架上又多一個空間可以運用.
3. 由於計算的數量是正確的, 理應剛剛好全部用完. 當有發生不足或多餘的情況, 必定是有包藥錯誤、漏藥、掉藥、卡藥、多擠、少擠…等異常情形, 對於調劑正確性提升有很大的幫助.
各位看倌, 到這裡是不是早已心癢難耐、內心充滿無限遐想了呢?
介紹一支EXCEL, 它開始上線服役的日期我這裡沒記錄已不可考, 但最後穩定版完成於2014.6.25, 之後就沒再修改過, 星期一~五UD藥師每天都會使用, 至今天已有將近兩年的使用經驗了, 而且從未出錯! (這點格外重要.)
_1UD半顆及四級統計程式.xls 設計原理:
在HIS做過UD結轉之後(要勾選轉藥包機DBF檔)會在 C:\DB 之下產生藥包機檔案, 本excel程式(需放在C:\DB之下)讀取&滙入藥包機檔至[匯入的dbf]工作表, 然後分別判斷半顆、四級的藥品, 進而產生五個統計表.
Excel檔內有使用說明如下:
1. 此 Excel 檔必需放在 UD結轉電腦的 C:\DB\ 裡面。
2. 本 Excel 打開後灰色欄會自動取得今天日期並放入黃色欄內,只要直接按下 [統計半顆and四級管藥數量]按鈕即會自動抓取今天結轉的 dbf檔,產生5個統計表,可方便備藥。(註: 四級整顆的量不包括半顆的量)
3. 亦可在黃色欄位手動輸入要查詢的日期,再按下按鈕。
4. 周一~周四只會轉一天量者,請執行 藍色 按鈕;
一天內會結轉兩次的情況: 星期五上午結轉1天、下午結轉2天 或 連續假日區分上午及下午結轉者,請按 綠色 按鈕。
5. 四級管藥的部份,由於資訊安全控管考量,並不是以連線到HIS基本檔的方式去判斷(HIS帳密寫在excel內容易外洩, 遭有心人破壞HIS),而是抓取商品名欄位有 四級 二個字的. 803及816的管制藥品會把一級 二級 三級 四級 寫在商品名欄位, 故由此來判斷.
問題一、為何要做半顆的統計表?
Ans. 很久很久以前, 803和816的UD餐包是要把半顆的藥剝半→把藥包割開→投入半顆量→再用膠帶封好的, 所以會有這樣的設計, 不過這已是過去式了, 現在都不剝半, 改給整顆了, 但仍然保留半顆的統計表。
問題二、HIS藥品檔已經有定義管制藥品級別的欄位了, 為何不使用它?
Ans. 會問這個問題表示您對於藥品檔已經有了一定的了解, 值得讚賞!!
Excel程式要向HIS取得資料, 首先要有HIS資料庫的帳號和密碼, 或是透過ODBC進去, 這麼一來就難保取得Excel程式的人拿到帳密後進入HIS大搞破壞. 許他/她剛好失戀了心情不好, 或許是對醫院心生不滿準備離職了也要拼個魚死網破!
這樣的後果都不是我能承受的, 所以兩權之下放棄對HIS的直接存取, 改而用比較笨一點的方式, 去抓商品名有”級”這個字的.
抓取資料的程式寫法, 我這裡很特別地採用 SQL 方式, 這是比較少見的.
Set loConnection = CreateObject("ADODB.Connection")
Set loRecordset = CreateObject("ADODB.Recordset")
loConnection.Open "Driver={Microsoft Excel Driver (*.xls)}; " & _
"DBQ=" + ActiveWorkbook.FullName + ";" & _
"ReadOnly=True"
'把四級半顆+整顆的醫令輸出到 總包_四級_各病房
loRecordset.Open _
"select 病房別, 品名 , sum(顆數) as '半顆+整顆合計顆數' " & _
"into [Excel 8.0;Database=" & ActiveWorkbook.Path & "\_2統計結果.xls].[總包_四級_各病房] " & _
"from ( " & _
"select BED as 病房別 , BEDNO as 床號 , DIANAME as 品名 , int(sum(PER_QTY)+0.9) as 顆數 " & _
"from [匯入的dbf$] " & _
"where DIANAME like '%級%' " & _
"group by BED , BEDNO , DIANAME " & _
"order by BED , BEDNO , DIANAME ) " & _
"group by 病房別, 品名 " & _
"order by 病房別, 品名 ", _
loConnection
loConnection.Close
對比使用進階篩選的VBA, 可以看到明顯的不同.
'進階篩選,不重覆品名到E1欄
Columns("B:B").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Columns("B:B"), CopyToRange:=Range("E1"), Unique:=True
授人魚不如授人以漁, 本於共享及互相交流的精神, 程式碼我不做保護. 有能力看懂者很好, 能夠做出修改者更佳, 只期望不要把我的名字拿掉就好, 這是對原始開發者的尊重及敬意.
程式裡的VBA寫法不見得高明, 在我現在看來有好些個地方都有改進之處, 只不過程式RUN得好好的也沒問題, 自然也就不想去動它了.
敏感/隱私性的資料, 如: 病人姓名、病歷碼、醫師碼、藥師碼...等等都有做過處理了, 請安心下載使用.
這次介紹的程式是支 EXCEL
目前的用途主要是在計算四級管制藥品在TOSHO包藥之前要投幾顆下去.
小型的地區醫院應該都用得到,
中型區域醫院"可能"適用,
大型的醫學中心則會覺得"雞肋".
不單單只是國軍醫院系統,
只要住院UD有使用TOSHO包藥的醫院都適用.
蛤~~~這麼厲害?!
XD~ 就是這麼厲害!
敢發下豪語, 必定就是有所本!
只是目前手上沒有修改DBF的工具, 所以HIS結轉後產生的TOSHO藥包DBF檔我無法修改, 裡面有病人隱私私不能外洩, 所以暫時不能附上去.
只能先放 _1UD半顆及四級統計程式.xls 及 _2統計結果.xls , 致少可以先看看 _2統計結果.xls 是什麼.
國軍醫院系統下載後直接解壓縮到UD結轉電腦的 C:\DB 裡就可使用.
非國軍醫院也可try try, 也許TOSHO藥包DBF檔都長得一樣.
TOSHO藥包DBF 已經附上, 任何人都可以下載後直接在電腦試用. 在黃色的框框裡輸入 1030414即可.
https://drive.google.com/open?id=0ByE2NUWlUHb4WGM4Um0wVVZudms
如果不能下載了請告訴我, 我會儘快補上連結.