本函數 of_zy_yzfy 用於住院醫囑執行後,將費用明細(藥品、診療項目)組裝為醫保介接標準格式,透過交易介面 f_UserBargaingApply 上傳至醫保中心,並處理回傳結果與錯誤碼。
FUNCTION of_zy_yzfy (astr_jyxx IN S_yb_zy_yzfy) RETURN BOOLEAN;
-- 參數結構包含:住院號陣列 inzyhm、輸出失敗住院號 outzyhm、醫囑流水號 outyzls、費用流水號 outfyls
of_get_tradeid(33) 申請交易 ID,失敗則回傳 False。ZY_SFMX(住院費用明細)中 YBTJ='0'(非退費)的筆數。SFMX 逐筆擷取流水號 LSXH。XMLX(項目類別:1=藥品, 2=診療)關聯 GY_YPML(藥品主檔)、GY_FYML(費用主檔)、GY_YSML(醫師主檔)取得名稱、規格、單位、單複方標志等欄位。%% 分隔,包含:流水號、就診類型(21住院)、退藥標志、類別標志、中心端編號、醫院端編碼/名稱/規格/單位、醫囑日期、醫師姓名、單價、數量、貼數、金額、自負比例、單複方標志。lpData[1..3] 陣列,格式為 $$~~~~~~住院號~~筆數~~明細內容。FOR k = 1 TO 3
IF NOT ISNULL(lpData[k]) THEN
li_Rtn = f_UserBargaingApply(33, uniquelytradeid, lpData[k], lpMessage, ls_data2)
lpMessage = of_dataunwrap(lpMessage) -- 解封裝
of_checkout(lpMessage, REF ls_checkdata) -- 解析回傳結構
-- 依回傳碼處理:
-- -1: 上傳失敗
-- -2: 住院號不在住院中校驗失敗
-- -3: 費用明細無法儲存
-- 解析失敗清單寫入 astr_jyxx 輸出參數
END IF
NEXT
| 欄位 | 來源表/欄位 | 說明 |
|---|---|---|
| LSXH | ZY_SFMX.LSXH | 明細流水號 |
| JZLX | 固定 '21' | 就診類型:住院 |
| TYBZ | 固定 '0' | 退藥標志:正常 |
| LBBZ | ZY_SFMX.XMLX | 類別:1藥品/2診療 |
| XMZXBH | ZY_SFMX.YBXH | 醫保中心項目編號 |
| XMYYBM | ZY_SFMX.XMXH | 醫院端項目編號 |
| XMYYMC | GY_YPML.YPMC / GY_FYML.FYMC | 項目名稱 |
| XMYYGG | GY_YPML.YPGG | 規格(費用類為 '無') |
| XMYYDW | GY_YPML.ZYDW | 單位(費用類為 '無') |
| YZRQ | ZY_SFMX.FYRQ | 醫囑日期 (YYYY.MM.DD) |
| YSXM | GY_YSML.YSXM | 醫師姓名 |
| XMDJ | ZY_SFMX.FYDJ | 單價 (99999990.0000) |
| XMSL | ZY_SFMX.FYSL | 數量(退藥為負) |
| XMTS | 固定 '1' | 貼數 |
| XMJE | FYDJ*FYSL | 金額 (999990.0000) |
| ZFBL | ZY_SFMX.ZFBL | 自負比例 (0.0000) |
| DFFBZ | GY_YPML.DFFBZ | 單複方標志(費用類為 '0') |
NVL 處理可能為 NULL 的名稱/規格欄位,預設值 '無'。ls_wfbc_zyhlb(失敗住院號)、ls_wfbc_yzlslb(失敗醫囑流水號)、ls_wfbc_fylslb(失敗費用流水號),寫回輸出結構供上層重試或人工處理。i+int(j/10)+1+h-1-1 確保多批次資料不覆蓋。SFMX 游標改用 BULK COLLECT LIMIT 1000 分批擷取,減少 Context Switch。UNION ALL 或單一查詢搭配 LEFT JOIN 一次取回,避免迴圈內逐筆 SELECT。EXCEPTION WHEN OTHERS THEN 記錄錯誤堆疊至 Log 表,避免靜默失敗。此函數展示了醫療資訊系統中核心的醫保介接邏輯:資料蒐集、格式轉換、批次傳輸、錯誤回寫。透過現代化 PL/SQL 技術(BULK COLLECT、FORALL、集合操作)可大幅提升處理效能與穩定性。