CREATE OR REPLACE TRIGGER TR_YF_ZYCFMX_BINS_UPD BEFORE INSERT OR UPDATE OF YPZSL0, LSDJ00, YPNM00 ON SD_MZ.YF_ZYCFMX REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW declare VCOUNTER NUMBER; VYBZXLB BM_BRXXB0.YBLB00%type; --医保中心类别 VFBBH00 BM_BRXXB0.FBBH00%type; --医保费别编号 VYBBRLB BM_BRXXB0.YBBRLB%type; --医保病人类别 VZYID00 ZY_BRXXB0.ZYID00%type; --住院ID V_CFZJE_SRWS_YB NUMBER(1); --处方总金额(医保)--舍入位数(小数位保留位数) V_CFZJE_CZFS_YB NUMBER(1); --处方总金额(医保)--取整方式0--四舍五入,1--向前取整 V_ERROR varchar2(200); E_custom exception; -- MODIFICATION HISTORY -- Person Date Comments -- JETHUA 2003.06.01 自费病人和医保病人单独处理 -- JETHUA 2003.06.10 增加插入项目医保类别 -- JETHUA 2003.09.24 JZJE00、GFJE00、QZFJE0应该是四舍五入到分 -- JETHUA 2004.03.30 为适应多零售价,计算自负金额时,用当前零售价 -- JETHUA 2004.05.21 因为部分退药,负方也计算 -- JETHUA 2004.09.15 为避免病人更改费别,导致扣费与退费不一致,插入过滤负方 -- daihq 2013.12.13 SPACK_YF_BRXX00.PACK_ZYID00=0时不重新计算报销比例 for YJ-20131210-002 -- dsm 2015.02.04 读取SPACK_YF_BRXX00.PACK_ZYID00后不清空 for BQ-20150129-002 -- liuj 2016.01.10 修复未明确定义列 -- dsm 2020.11.20 写入HJJE00,HJJE01 for BQ-20201119-001 -- --------- ---------- ------------------------------------------- begin BEGIN SELECT VALUE0 INTO V_CFZJE_SRWS_YB FROM XT_XTCS00 WHERE NAME00='YF_CFZJE_SRWS_YB'; SELECT VALUE0 INTO V_CFZJE_CZFS_YB FROM XT_XTCS00 WHERE NAME00='YF_CFZJE_CZFS_YB'; EXCEPTION WHEN OTHERS THEN V_CFZJE_CZFS_YB:=0; V_CFZJE_SRWS_YB:=2; END; if :NEW.CXBZ00<>'-' then --if SPACK_YF_BRXX00.PACK_ZYID00>0 then -- VZYID00:=SPACK_YF_BRXX00.PACK_ZYID00; -- SPACK_YF_BRXX00.PACK_ZYID00:=0; --2013.12.13 daihq 注释 for YJ-20131210-002 --ELSE --select ZYID00 into VZYID00 from YF_ZYCF00 where CFLSH0=:NEW.CFLSH0; --end if; begin select ZYGHID into VZYID00 from YF_PARAMS where CFLSH0=:new.CFLSH0 and MZZYBZ='1'; exception when others then V_ERROR:='获取住院ID错误'; end; if VZYID00 is not null then select B.YBZXLB,A.YBBRLB,A.FBBH00 into VYBZXLB,VYBBRLB,VFBBH00 from ZY_BRXXB0 C,BM_BRXXB0 A,IC_YBBRLB B where C.ZYID00=VZYID00 and C.BRID00=A.BRID00 and B.YBLB00=A.YBLB00 and B.FBBH00=a.FBBH00; --重新计算报销比例 select decode(:new.ZFFSBZ,'Y',1,b.ZFBL00), 0, decode(:new.ZFFSBZ,'Y',7,b.YBLB00), --b.YBLB00, 0, ROUND(B.ZFBL00*:NEW.LSDJ00*:NEW.YPZSL0,2) into :NEW.ZFBL00,:NEW.GFJE00,:NEW.YBLB00,:NEW.QZFJE0,:NEW.ZFJE00 from VW_BM_YBSFDY B,BM_YD0000 A where B.SFXMID=:NEW.YPNM00 and B.SFYP00='Y' and B.SFXMID=A.YPNM00 and B.YBZXLB=VYBZXLB and B.YBBRLB=VYBBRLB and B.FBBH00=VFBBH00 ; else if :NEW.ZFBL00 is null then :NEW.ZFBL00:=1; end if; if :NEW.GFJE00 is null then :NEW.GFJE00:=0; end if; end if; --出入药品大类 select LBBH00 into :NEW.YPDLBH from BM_YD0000 where YPNM00= :NEW.YPNM00; -- JETHUA 2003.06.01 自费病人和医保病人单独处理 if VFBBH00=1 or VFBBH00=3 or Vfbbh00=90 then select ROUND(:NEW.YPZSL0*:NEW.LSDJ00,2) into :NEW.ZFJE00 from VW_BM_YBSFDY B,BM_YD0000 A where B.SFXMID=:NEW.YPNM00 and B.SFYP00='Y' and B.SFXMID=A.YPNM00 and B.YBZXLB=VYBZXLB and B.YBBRLB=VYBBRLB and B.FBBH00=VFBBH00 ; end if; :new.HJJE00:=SF_YF_EXROUND(:NEW.YPZSL0*:NEW.LSDJ00,V_CFZJE_CZFS_YB,V_CFZJE_SRWS_YB); :new.HJJE01:=SF_YF_EXROUND(:NEW.YPZSL0*:NEW.LSDJ00,V_CFZJE_CZFS_YB,4); end if; if :NEW.CXBZ00='-' then :new.HJJE00:=SF_YF_EXROUND(:NEW.YPZSL0*:NEW.LSDJ00,V_CFZJE_CZFS_YB,V_CFZJE_SRWS_YB); :new.HJJE01:=SF_YF_EXROUND(:NEW.YPZSL0*:NEW.LSDJ00,V_CFZJE_CZFS_YB,4); end if; exception WHEN E_custom THEN RAISE_APPLICATION_ERROR(-20010,substrb(V_ERROR||'!*',1,120)); when others then RAISE_APPLICATION_ERROR(-20266,substrb(nvl(SQLERRM, '原因不明出错')||'!*',1,120)); End; /