CREATE OR REPLACE PROCEDURE SP_YJ_YWZX00 --项目执行 ( PYJDJH0 IN NUMBER , --单据号 PZLXMID IN NUMBER default 0 , --子项目ID PZXSL00 IN NUMBER , --执行数量 PZXMBZ IN NUMBER , --子项目标志,1:执行子项目,2:大项目 PXKH000 IN BM_YGBM00.XKH000%TYPE , --执行人胸卡号 PZXKS00 IN NUMBER , --执行科室 PCOMMIT IN varchar2 default 'Y' , --提交标志 PSFXKCS IN NUMBER DEFAULT 0 , --标识是否输血系统执行过程 PZXMSXM IN NUMBER default 0, --是否执行描述性项目,1:允许执行,0:不允许执行 PZXYS00 in number default 0, --执行医生 PZXYSZ0 in number default 0, --执行医生组 PBYRC00 in char default '' --备用入参以后如果增加,以分割符形式传入 ) AS VID0000 NUMBER ; --ID号 VYJDJH0 NUMBER ; --医技单据流水号 VYJFZH0 NUMBER ; --分组号(一个标本多个检查项目用,不同的单据号,相同的分组号) VSFXMID NUMBER ; --收费项目ID VSFXX00 NUMBER ; --收费金额下限 VJJJE00 NUMBER ; --业务科室自定收费金额 VSFSX00 NUMBER ; --收费金额上限 LS_YBBZ00 CHAR ; --医保标志 'Y'医保,'N'非医保,显示用 VDJH000 NUMBER ; --医技收费单据号 Vcounter NUMBER ; --临时变量 VTEMP NUMBER ; --临时变量 VZLXMID NUMBER ; --诊疗项目ID VSL0000 NUMBER ; --数量 VZXSL00 NUMBER ; --执行数量 VCXSL00 NUMBER ; --冲消数量 Verrmsg CHAR(255) ; --错误描述 VZXLMID NUMBER ; --诊疗项目ID VBRID00 NUMBER ; --病人ID VFBBH00 NUMBER ; --费别号码 VGFBL00 NUMBER ; --公费报销比例 0-100 LS_YBLB00 CHAR ; --病人医保类别,'0':非医保'1':省直医保,'2':市医保(对应病人所属分中心名称) LS_XMZT00 CHAR ; --项目状态 LS_FBZXBZ CHAR ; --分步执行标志 VZXR000 NUMBER ; --执行人编号 LS_YZCFID CHAR(16) ; --相关处方号 LS_PSFJGSM CHAR(255) ; --收费结果说明 VPSFSFCG NUMBER ; --收费是否成功,1:成功,0:失败 Vparams VARCHAR2(200) ; LS_MZZYBZ CHAR ; --门诊住院标志 Vpsxzbz char(1) ; --皮试处方是否限制 LS_ZXRXM0 YJ_YWMX00.ZXRXM0%TYPE; --执行人姓名 LS_ZLXMJC YJ_YW0000.ZLXMJC%TYPE; --诊疗项目简称 LS_DCBZ00 YJ_YW0000.DCBZ00%TYPE; --带出标志 LS_ZLDCCF YJ_YW0000.ZLDCCF%TYPE; --诊疗带出处方 Vzje000 YJ_YW0000.ZJE000%TYPE; --总金额 L_YJYW_ROW YJ_YW0000%ROWTYPE ; --返回医技业务表中的行 R_YF_MZCF00 YF_MZCF00%ROWTYPE ; --门诊处方行变量 R_YF_ZYCF00 YF_ZYCF00%ROWTYPE ; --住院处方行变量 LS_CFZT00 YF_MZCF00.CFZT00%TYPE; --处方状态 LS_SFKSLY YF_MZCF00.CFZT00%TYPE; --是否科室领药 E_NOTONE EXCEPTION ; --记录数不唯一 E_NOT_JJ EXCEPTION ; --没定价 E_CANNOT_ZX EXCEPTION ; --不能执行 Ecustom EXCEPTION ; --自定义错误 Vboolean char ;--是否允许金额为0的项目执行 vCfzxsfcfsf Char(1) ;--拆分执行是否拆分收费 Y 是N不是 默认为N VYJKSBH YJ_YW0000.YJKSBH%TYPE; Vcflsh2 yf_mzcf00.CFLSH0%type; E_YEWFS EXCEPTION; --余额为负数 e_yebz00 EXCEPTION; --余额不足 e_brfyts EXCEPTION; --对应费用主表,明细表提示 PMZYE00 NUMBER ; --门诊帐户余额 PZYYE00 NUMBER ; --住院帐户余额 vzje001 YJ_YW0000.ZJE000%TYPE; --诊疗项目+带出处方总金额 Vyyid00 xt_yyxx00.yyid00%TYPE; LS_COU number(10); LS_YZMXID BQ_YJYZ00.YZMXID%type; LS_YZLX00 YJ_YW0000.YZLX00%type; CURSOR YWMX00 IS select ZLXMID from YJ_YWMX00 where YJDJH0=PYJDJH0; Vzxsj00 yj_ywzxjl.zxsj00%type; LS_LRRBH0 BM_YGBM00.YGBH00%type; JY_TJBRJYXMCGDSSJBYXZX number(5); YJ_TJBRXMZXSJSX number(5); JY_TJBRZJEWNSFYXZX xt_xtcs00.value0%type; LS_ZYGHID YJ_YW0000.ZYGHID%type; LS_BZ0000 YJ_YW0000.BZ0000%type; VXMZT00 YJ_YW0000.XMZT00%type; VFSWBJKSJ varchar2(10); VZXMSXM number(5); LS_SFDJH0 YJ_YW0000.SFDJH0%type; LS_CZRQ00 SF_BRFY00.CZRQ00%type; YJ_CFWFYSFKZXDCXM varchar2(10); YJ_MSFZLXM XT_XTCS00.VALUE0%type; LS_ERRPOS varchar2(50); LS_YJLRBZ YJ_YW0000.YJLRBZ%type; LS_YYID00 XT_YYXX00.YYID00%type; -- MODIFICATION HISTORY -- Person Date Comments -- qks 2008.06.17 省二项目执行时提示字符到数值转换出错,修改:传入参数PZLXMID增加默认值0 --chenyw 2009.08.18 库存物资通过医技执行收病人费用,这个判断的时候绕过一个判断; -- CSF 2009.12.28 拆分执行用参数控制也拆分收费 -- zhanghr 2010.08.03 执行科室合法性判断,非本科室的不能执行(2010.10.19做了修正,允许抢执行的医院不做此判断) -- liuj 2010.08.31 增加默认参数PSFXKCS判断是否血库系统项目执行,医保病人绕过提示到收费处结算 -- LIUJ 2011.01.11 对项目带出两张处方的情况做适应性扩展 for YJ-20101126-001 -- csf 2011.01.20 处方带出的项目又带出处方时候,执行时候,无法自动扣费,现纠正。 -- csf 2011.01.24 病人账户余额为负数,不允许发药 -- liuj 2011.06.03 带处方的项目执行前预先判断是否账户余额足够,参数YJ_DCFXMZXSFYXPDYE -- csf 2011.06.23 病人账户余额为负数,不允许发药,改成只控制门诊 -- zhanghr 2011.11.10 YF_ZHWFSBYXFYZX判断余额时要考虑担保金额 -- liuj 2012.04.27 执行科室合法性判断条件修正 for YJ-20120427-001 -- dsm 2012.08.14 医生执行很慢 for MZYS-20120728-001 -- csf 2013.04.23 归档规程,去掉过程(SP_YJ_YWZX00、SP_YJ_CFJZ00、SP_YJ_YWSF00、SP_YJ_XMZXCF)的COMMIT。YJ-20130419-001 -- dsm 2013.05.13 SF_QZJSFB 强制结算费别,要求能设置到该费别底下的具体类别,可以按YBLB00来设置。for YJ-20130510-001 -- dsm 2013.05.26 修改费用明细执行科室时加YJDJH0的条件 for YJ-20130524-001 -- jinfl 2013.06.27 医技执行记录碰到同一医技,日期和时间相同时,第二条加1秒 归档LIS-20130613-003 -- dsm 2013.10.22 会诊录入的医嘱(YZLX00=4)执行后生成医嘱 for YJ-20131012-001 -- dsm 2013.10.29 会诊录入的医嘱(YZLX00=4)执行后生成医嘱,录入人应该默认为会诊科室的操作员 for BQ-20131024-001 -- chenyw 2014.05.26 增加参数来控制体检病人检验项目超过多少时间不允许执行 for LIS-20140512-001 -- chenyw 2015.04.22 增加判断体检病人总金额是否允许执行 for LIS-20150323-001 -- dsm 2016.11.29 预判金额时YF_MZCF00加GHID00条件 for MZYS-20161129-001 -- xuzw 2017.03.29 限制余额为负数 不允许执行需增加SF_BRZHXX.YKTYE0 YJ-20170330-003 -- dsm 2018.01.30 门诊处方发药,皮试药品发药时,如果又有药事服务费时报错 for YF-20180130-001 -- hetf 2018.03.15 增加参数控制体检病人体检录入项目(YJLRBZ='T')超过指定天数则不能执行 for YJ-20180129-001 -- dsm 2018.05.02 增加调用过程SP_JK_INSJKB0 for YJ-20180502-001 -- hetf 2018.09.17 是否允许执行描述性诊疗项目(金额为0的项目) for YJ-20180126-001 -- pwt 2018.12.04 医技项目执行之前,先判断对应的费用主表,明细表记录是否存在 for YJ-20181126-001 -- dsm 2019.05.20 增加 YJ_CFWFYSFKZXDCXM 控制处方未发药是否可以执行带出项目 YJ-20190522-002 -- dsm 2019.08.17 调用接口过程增加异常处理 for MZSF-20190817-001 -- dsm 2020.10.23 增加SF_FYMX00,ZY_FYMX00.ZXYSZ0的写入 for YJ-20201022-001 -- dsm 2020.11.18 to_char(sysdate,'YYYYMM')同月修改修正 for YJ-20201118-001 -- dsm 2020.11.26 SF_FYMX00,ZY_FYMX00增加SJZXYS for YJ-20201126-001 -- dsm 2020.12.30 增加YJ_MSFZLXM参数控制哪些项目0费用可以执行 for YJ-20201201-001 -- chenxz 2021.08.09 归档需求 for YJ-20210709-001 BEGIN Vparams:='参数:PYJDJH0='||to_char(PYJDJH0)||',PZLXMID='||to_char(PZLXMID)||',PZXSL00='||to_char(PZXSL00)||',PZXMBZ='||to_char(PZXMBZ)||',PXKH000='||PXKH000||',PZXKS00='||to_char(PZXKS00); --单据号是否存在 LS_ERRPOS:='1@'; select YYID00 into LS_YYID00 from xt_yyxx00 where rownum=1; select SF_SF_TYZD00('发送外部接口数据','Open') into VFSWBJKSJ from dual; select count(*) INTO Vcounter from YJ_YW0000 where YJDJH0=PYJDJH0; IF Vcounter<1 THEN RAISE NO_DATA_FOUND; END IF; select ZLXMID,YJFZH0,BRID00,SL0000,XMZT00,YZCFID,FBZXBZ,MZZYBZ,DCBZ00,ZLXMJC,SFDJH0,ZJE000,ZLDCCF,ZXSL00,CXSL00,YJKSBH,YZLX00,ZYGHID,BZ0000 INTO VZLXMID,VYJFZH0,VBRID00,VSL0000,LS_XMZT00,LS_YZCFID,LS_FBZXBZ,LS_MZZYBZ, LS_DCBZ00,LS_ZLXMJC,VDJH000,Vzje000,LS_ZLDCCF,VZXSL00,VCXSL00,VYJKSBH,LS_YZLX00,LS_ZYGHID,LS_BZ0000 from YJ_YW0000 where YJDJH0=PYJDJH0; --取参数 拆分执行是否拆分收费 Y 是N不是 默认为N begin select trim(VALUE0) into vCfzxsfcfsf from XT_XTCS00 where NAME00='YJ_CFZXSFCFSF'; exception when others then vCfzxsfcfsf:='N'; end; LS_ERRPOS:='2@'; --只有描述性项目才能跳过定价提示 省二 begin select count(1) into VZXMSXM from BM_ZLZD00 a where ZLXMID=VZLXMID and LBBH00='9' and PZXMSXM=1 and exists(select 1 from yj_yw0000 b where a.zlxmid=b.zlxmid and b.yjdjh0=PYJDJH0 and nvl(ZJE000,0)=0); exception when others then VZXMSXM:=0; end; begin select trim(value0) into JY_TJBRZJEWNSFYXZX from xt_xtcs00 where name00 ='JY_TJBRZJEWNSFYXZX'; exception when others then JY_TJBRZJEWNSFYXZX:='N'; end; begin select VALUE0 into YJ_MSFZLXM from XT_XTCS00 where NAME00='YJ_MSFZLXM'; YJ_MSFZLXM:=','||trim(YJ_MSFZLXM)||','; exception when others then YJ_MSFZLXM:='a'; end; select count(*) INTO Vcounter from YJ_YW0000 where BRID00=VBRID00 and CXDJH0=PYJDJH0; --IF Vcounter>0 THEN -- Verrmsg:='该项目已经被冲销'; -- RAISE Ecustom; --END IF; --修正冲消数量 UPDATE YJ_YW0000 a SET CXSL00=(select -1*nvl(sum(SL0000),0) from YJ_YW0000 where BRID00=a.BRID00 and CXDJH0=a.YJDJH0 and XMZT00<>'6') where YJDJH0=PYJDJH0; --增加参数来控制体检病人检验项目超过多少时间不允许执行 begin begin select to_number(value0) into JY_TJBRJYXMCGDSSJBYXZX from xt_xtcs00 where name00 in ('JY_TJBRJYXMCGDSSJBYXZX'); exception when others then JY_TJBRJYXMCGDSSJBYXZX:=0; end; LS_ERRPOS:='3@'; if JY_TJBRJYXMCGDSSJBYXZX<>0 then select count(*) into Vcounter from YJ_YW0000 a ,BM_BRXXB0 b,BM_ZLZD00 c where a.brid00=b.brid00 and b.FBBH00='99' and a.YJDJH0=PYJDJH0 and a.zlxmid= c.zlxmid and c.LBBH00='4' and to_char(sysdate-JY_TJBRJYXMCGDSSJBYXZX,'YYYYMMDD')>KDRQ00; if Vcounter>0 then Verrmsg:='该体检病人的检验项目开单时间超过'||to_char(JY_TJBRJYXMCGDSSJBYXZX)||'天,不允许执行!'; RAISE Ecustom; end if; end if ; --增加参数来控制体检病人检验项目超过多少时间不允许执行 end --增加参数来控制体检病人体检录入项目(YJLRBZ='T')超过多少时间不允许执行 begin begin select to_number(value0) into YJ_TJBRXMZXSJSX from xt_xtcs00 where name00 in ('YJ_TJBRXMZXSJSX'); exception when others then YJ_TJBRXMZXSJSX:=0; end; if YJ_TJBRXMZXSJSX<>0 then select count(*) into Vcounter from YJ_YW0000 a where a.YJDJH0=PYJDJH0 and a.YJLRBZ='T' and to_char(sysdate-YJ_TJBRXMZXSJSX,'YYYYMMDD')>KDRQ00; if Vcounter>0 then Verrmsg:='该体检病人的检验项目开单时间超过'||to_char(YJ_TJBRXMZXSJSX)||'天,不允许执行!*'; RAISE Ecustom; end if; end if ; --增加参数来控制体检病人体检录入项目(YJLRBZ='T')超过多少时间不允许执行 end if JY_TJBRZJEWNSFYXZX='Y' then begin select count(*) into Vcounter from YJ_YW0000 a ,BM_BRXXB0 b where a.brid00=b.brid00 and b.FBBH00='99' and a.YJDJH0=PYJDJH0 ; exception when others then Vcounter:=0; end; end if; --诊疗项目ID,分组号,病人ID,项目状态,相关处方号,分步执行标志,门诊住院标志 if Vzje000=0 then if (Vcounter=0) or (JY_TJBRZJEWNSFYXZX<>'Y') then --体检病人总金额为0的项目允许执行 begin select 1 into Vboolean from xt_xtcs00 where name00='YJ_LSFXMZX'; exception when others then Vboolean:='0'; end; if Vboolean='1' then select count(1) into Vcounter from vw_BM_ZLZD00 a,vw_BM_YYSFXM b,XT_ZLSFGX c where c.ZLXMID = a.ZLXMID and b.SFXMID = c.SFXMID and a.zlxmid=VZLXMID and ((b.SFXX00=0 and b.SFSX00=0) or exists (select 1 from xt_xtcs00 where Instr(','||trim(Value0)||',',','||trim(b.bh0000)||',')>0 AND trim(NAME00)='YJ_LSFXMZX')); else select count(1) into Vcounter from vw_BM_ZLZD00 a,vw_BM_YYSFXM b,XT_ZLSFGX c where c.ZLXMID = a.ZLXMID and b.SFXMID = c.SFXMID and a.zlxmid=VZLXMID and b.SFXX00=0 and b.SFSX00=0; end if; -- if Vcounter=0 and VZXMSXM=0 and instr(YJ_MSFZLXM,','||VZLXMID||',')=0 then-----------------zjb -- Verrmsg:='该诊疗单的收费金额为0,不能执行,请先估价。'; -- RAISE Ecustom; -- end if; end if; end if; LS_ERRPOS:='11@'; --参数设定有的病人必须结算后才能执行 if ls_mzzybz='0' then select count(*) into LS_COU from XT_XTCS00 where NAME00='SF_QZJSFB' and instr(VALUE0,'-')>0; if LS_COU>0 then select count(*) INTO Vcounter from BM_BRXXB0 a,XT_XTCS00 b where BRID00=VBRID00 AND NAME00='SF_QZJSFB' and Instrb(','||trim(Value0)||',',','||to_char(FBBH00)||'-'||a.YBLB00||',')>0 and (Vdjh000=0 or exists (select 1 from sf_brfy00 where djh000=Vdjh000 and jzdh00=0)); else select count(*) INTO Vcounter from BM_BRXXB0 a,XT_XTCS00 b where BRID00=VBRID00 AND NAME00='SF_QZJSFB' and Instrb(','||trim(Value0)||',',','||to_char(FBBH00)||',')>0 and (Vdjh000=0 or exists (select 1 from sf_brfy00 where djh000=Vdjh000 and jzdh00=0)); end if; IF Vcounter>0 and PSFXKCS=0 THEN Verrmsg:='该类费别的病人必须到收费处先记账并结算,才能执行诊疗单'; RAISE Ecustom; END IF; end if; --限制余额为负数 不允许执行 LS_ERRPOS:='12@'; select count(*) into Vcounter from XT_XTCS00 where NAME00='YF_ZHWFSBYXFYZX' and TRIM(VALUE0)='Y'; if (Vcounter>0) and (LS_MZZYBZ='0') then select count(*) into Vcounter from SF_BRZHXX where BRID00=VBRID00 and JFLBID in (0,1) and ZYE000+nvl(DBJE00,0)+nvl(YKTYE0,0)<0; if Vcounter>0 then raise E_YEWFS; end if; end if; LS_ERRPOS:='13@'; --------------------------预先判断余额不足 begin------------------------------------- select count(*) into Vcounter from XT_XTCS00 where NAME00='YJ_DCFXMZXSFYXPDYE' and TRIM(VALUE0)='Y'; if Vcounter>0 then if LS_MZZYBZ='0' then select count(YKZYE0) INTO Vcounter from SF_BRZHXX where ROWNUM=1 AND BRID00=VBRID00 AND JFLBID IN (select JFLBID from BM_BRJFLB where SYBZ00='0')AND SFDJ00='0'; IF Vcounter=0 THEN PMZYE00:=0; ELSE select YKZYE0 INTO PMZYE00 from SF_BRZHXX where BRID00=VBRID00 AND JFLBID IN (select JFLBID from BM_BRJFLB where SYBZ00='0')AND SFDJ00='0'; END IF; select sum(cfzje0) into vzje001 from yf_mzcf00 where GHID00=LS_ZYGHID and ((cflsh0=ls_YZCFID) or Instr(','||LS_ZLDCCF||',',','||cflsh0||',')>0) and SFKSLY='Y' and cfzt00 in ('0','4'); vzje001:=vzje001+vzje000; if vzje001>pmzye00 then raise e_yebz00; end if; end if; if LS_MZZYBZ='1' then select count(YKZYE0) INTO Vcounter from ZY_BRZHXX where ROWNUM=1 AND BRID00=VBRID00 AND JFLBID IN (select JFLBID from BM_BRJFLB where SYBZ00='1')AND SFDJ00='0' ; IF Vcounter=0 THEN PZYYE00:=0; ELSE select SF_SF_GETYYID00 into Vyyid00 from dual; IF Vyyid00='221678' then --福州闽侯县二院 PZYYE00:=sf_bq_kyje00(0,VBRID00); ELSE select YKZYE0 INTO PZYYE00 from ZY_BRZHXX where BRID00=VBRID00 AND JFLBID IN (select JFLBID from BM_BRJFLB where SYBZ00='1')AND SFDJ00='0' ; END IF; END IF; select sum(cfzje0) into vzje001 from yf_zycf00 where ZYID00=LS_ZYGHID and ((cflsh0=ls_YZCFID) or Instr(','||LS_ZLDCCF||',',','||cflsh0||',')>0) and SFKSLY='Y' and cfzt00 in ('0','4'); vzje001:=vzje001+vzje000; if vzje001>pmzye00 then raise e_yebz00; end if; end if; end if; --------------------------预先判断余额不足 end------------------------------------- LS_ERRPOS:='14@'; --冲消数量判定 if Vsl0000-nvl(Vcxsl00,0)pZXKS00 then--2010.10.19 zhr 修改 2012.04.27 liuj修改 --允许抢执行 select count(*) into Vcounter from XT_XTCS00 where name00='YJ_RHXMLYKSZX' and (Value0='Y' or Value0='M'); if Vcounter=0 then Verrmsg:='非本科室的项目,不能执行!'; RAISE Ecustom; end if; end if; --执行人 LS_ERRPOS:='15@'; select YGBH00,ZWXM00 INTO VZXR000,LS_ZXRXM0 from BM_YGBM00 where UPPER(XKH000)=UPPER(PXKH000) AND ROWNUM=1; --相关的处方判定和处理 IF ls_YZCFID > '0' AND LS_DCBZ00 IN ('1','2') THEN IF LS_MZZYBZ='0' THEN--退回判定,相关处方的所有药品都退回,则项目不能执行 select count(*) INTO Vcounter from YF_MZCFMX where CFLSH0=LS_YZCFID AND THBZ00='0'; ELSE select count(*) INTO Vcounter from YF_ZYCFMX where CFLSH0=LS_YZCFID AND THBZ00='0'; END IF; IF Vcounter=0 THEN Verrmsg:='处方已经被药房退回,项目不能执行'; RAISE Ecustom; END IF; IF LS_MZZYBZ='0' THEN--退回判定,相关处方的所有药品都退回,则项目不能执行 select count(*) INTO Vcounter from (select count(*) from YF_MZCFMX a,YF_MZCF00 b where b.BRID00=Vbrid00 and a.CFLSH0=b.CFLSH0 and (b.CFLSH0=LS_YZCFID or b.BCCFH0=LS_YZCFID) and b.CFZT00<>'3' group by a.YPNM00 having sum(a.YPZSL0)>0); ELSE select count(*) INTO Vcounter from (select count(*) from YF_ZYCFMX a,YF_ZYCF00 b where b.BRID00=Vbrid00 and a.CFLSH0=b.CFLSH0 and (b.CFLSH0=LS_YZCFID or b.BCCFH0=LS_YZCFID) and b.CFZT00<>'3' group by a.YPNM00 having sum(a.YPZSL0)>0); END IF; IF Vcounter=0 THEN Verrmsg:='处方已经被退药,项目不能执行'; RAISE Ecustom; END IF; --发药判定 --相关处方的所有药品都自备,则不判定处方是否已发药,可直接执行项目;否则 --如果相关处方的药品医技科室都有备药,则进行处方收费并继续执行项目, --如果科室都不备药,那么判定处方是否发药,如果已发,项目可执行,否则停止执行项目 select nvl(max(trim(VALUE0)),'N') into YJ_CFWFYSFKZXDCXM from XT_XTCS00 where NAME00='YJ_CFWFYSFKZXDCXM' and VALUE0='Y'; IF LS_MZZYBZ='0' THEN select count(*) INTO VTEMP from YF_MZCFMX where CFLSH0=LS_YZCFID AND NVL(SFZBY0,'N')='N'; if YJ_CFWFYSFKZXDCXM='Y' then VTEMP:=0; end if; ELSE select count(*) INTO VTEMP from YF_ZYCFMX where CFLSH0=LS_YZCFID AND NVL(SFZBY0,'N')='N'; END IF; IF VTEMP>0 THEN --需要领药的处方 IF LS_MZZYBZ='0' THEN select * INTO R_YF_MZCF00 from YF_MZCF00 where CFLSH0=LS_YZCFID; IF R_YF_MZCF00.CFZT00='3' THEN--处方被作废 Verrmsg:='处方已被作废,项目不能执行'; RAISE Ecustom; ELSIF R_YF_MZCF00.CFZT00 IN ('0','1','4') THEN--处方未发药 IF LS_DCBZ00<>'2' THEN--非皮试项目 Verrmsg:='处方未发药,项目不能执行'; RAISE Ecustom; END IF; --处理皮试 select count(*) INTO VTEMP from YF_MZCFMX C where CFLSH0=LS_YZCFID AND SFZBY0<>'Y' AND NOT EXISTS ( select 1 from YJ_KSBYYP B where C.YPNM00=B.YPNM00 AND BMBH00=PZXKS00); IF VTEMP=0 THEN--判定是否科室备药 --所有的药品,医技科室都有备药,(收取处方标志,并把处方改为科室领药)------->项目冲销时,药费要退回 --收费 UPDATE YF_MZCF00 SET SFKSLY='Y',LYKS00=PZXKS00 where CFLSH0=LS_YZCFID; IF R_YF_MZCF00.CFZT00 IN ('0','4') THEN SP_YJ_CFJZ00('0',LS_YZCFID,VZXR000,PZXKS00,VZXR000); END IF; --ELSE--不能科室备药 -- Verrmsg:='处方未发药,项目不能执行'; -- RAISE Ecustom; END IF; END IF; ELSE--住院病人需要领药的处方 select * INTO R_YF_ZYCF00 from YF_ZYCF00 where CFLSH0=LS_YZCFID; IF R_YF_ZYCF00.CFZT00='3' THEN--处方被作废 Verrmsg:='处方已被作废,项目不能执行'; RAISE Ecustom; ELSIF R_YF_ZYCF00.CFZT00 IN ('0','1','4') THEN--处方未发药 IF LS_DCBZ00<>'2' THEN--非皮试项目 Verrmsg:='处方未发药,项目不能执行'; RAISE Ecustom; END IF; select count(*) INTO VTEMP from YF_ZYCFMX C where CFLSH0=LS_YZCFID AND SFZBY0<>'Y' AND NOT EXISTS ( select 1 from YJ_KSBYYP B where C.YPNM00=B.YPNM00 AND BMBH00=PZXKS00); IF VTEMP=0 THEN--判定是否科室备药 --所有的药品,医技科室都有备药,(收取处方标志,并把处方改为科室领药)------->项目冲销时,药费要退回 UPDATE YF_ZYCF00 SET SFKSLY='Y',LYKS00=PZXKS00 where CFLSH0=LS_YZCFID; --收费 IF R_YF_MZCF00.CFZT00 IN ('0','4') THEN SP_YJ_CFJZ00('1',LS_YZCFID,VZXR000,PZXKS00,VZXR000); END IF; --ELSE --不能科室备药 -- Verrmsg:='处方未发药,项目不能执行'; -- RAISE Ecustom; END IF; END IF; END IF; END IF; ELSIF ls_YZCFID > '0' AND LS_DCBZ00='0' and LS_MZZYBZ='0' and VZLXMID<>99999 THEN--诊疗带出的处方判定和处理 LS_ERRPOS:='16@'; IF LS_MZZYBZ='0' THEN--退回判定,相关处方的所有药品都退回,则项目不能执行 select count(*) INTO Vcounter from YF_MZCFMX where CFLSH0=LS_YZCFID AND THBZ00='0'; ELSE select count(*) INTO Vcounter from YF_ZYCFMX where CFLSH0=LS_YZCFID AND THBZ00='0'; END IF; IF Vcounter=0 THEN Verrmsg:='处方已经被药房退回,项目不能执行'; RAISE Ecustom; END IF; IF LS_MZZYBZ='0' THEN--退回判定,相关处方的所有药品都退回,则项目不能执行 select count(*) INTO Vcounter from (select count(*) from YF_MZCFMX a,YF_MZCF00 b where b.BRID00=Vbrid00 and a.CFLSH0=b.CFLSH0 and (b.CFLSH0=LS_YZCFID or b.BCCFH0=LS_YZCFID) and b.CFZT00<>'3' group by a.YPNM00 having sum(a.YPZSL0)>0); ELSE select count(*) INTO Vcounter from (select count(*) from YF_ZYCFMX a,YF_ZYCF00 b where b.BRID00=Vbrid00 and a.CFLSH0=b.CFLSH0 and (b.CFLSH0=LS_YZCFID or b.BCCFH0=LS_YZCFID) and b.CFZT00<>'3' group by a.YPNM00 having sum(a.YPZSL0)>0); END IF; IF Vcounter=0 THEN --部分冲消,不能再这样判定 2006.04.26 zhr Verrmsg:='处方已经被退药,项目不能执行'; RAISE Ecustom; END IF; --发药判定 --相关处方的所有药品都自备,则不判定处方是否已发药,可直接执行项目;否则 --如果相关处方的药品医技科室都有备药,则进行处方收费并继续执行项目,如果科室都不备药 --那么判定处方是否发药,如果已发,项目可执行,否则停止执行项目 IF LS_MZZYBZ='0' THEN select count(*) INTO VTEMP from YF_MZCFMX where CFLSH0=LS_YZCFID AND NVL(SFZBY0,'N')='N'; ELSE select count(*) INTO VTEMP from YF_ZYCFMX where CFLSH0=LS_YZCFID AND NVL(SFZBY0,'N')='N'; END IF; IF VTEMP>0 THEN --需要领药的处方 LS_ERRPOS:='17@'; IF LS_MZZYBZ='0' THEN select * INTO R_YF_MZCF00 from YF_MZCF00 where CFLSH0=LS_YZCFID; IF R_YF_MZCF00.CFZT00='3' THEN--处方被作废 Verrmsg:='处方已被作废,项目不能执行'; RAISE Ecustom; ELSIF R_YF_MZCF00.CFZT00 IN ('0','1','4') AND R_YF_MZCF00.SFKSLY='N' and nvl(LS_BZ0000,' ')<>'药事服务' THEN--非基数药,处方必须发药 Verrmsg:='处方未发药,项目不能执行'; RAISE Ecustom; ELSIF R_YF_MZCF00.CFZT00 IN ('0','4') AND R_YF_MZCF00.SFKSLY='Y' THEN--基数药,处方必须记账 --如果是预交金病人病人,自动记账,否则报告错误 select count(*) INTO VcountER from SF_BRZHXX where BRID00=VBRID00 AND SFDJ00='0' AND ZYE000>0; IF VcountER>0 THEN SP_YJ_CFJZ00('0',LS_YZCFID,VZXR000,PZXKS00,VZXR000); ELSE Verrmsg:='处方未收费,项目不能执行'; RAISE Ecustom; END IF; END IF; ELSE--住院病人需要领药的处方 LS_ERRPOS:='18@'; select * INTO R_YF_ZYCF00 from YF_ZYCF00 where CFLSH0=LS_YZCFID; IF R_YF_ZYCF00.CFZT00='3' THEN--处方被作废 Verrmsg:='处方已被作废,项目不能执行'; RAISE Ecustom; ELSIF R_YF_ZYCF00.CFZT00 IN ('0','1','4') AND R_YF_ZYCF00.SFKSLY='N' THEN--非基数药,处方必须发药 Verrmsg:='处方未发药,项目不能执行'; RAISE Ecustom; ELSIF R_YF_ZYCF00.CFZT00 IN ('0','4') AND R_YF_ZYCF00.SFKSLY='Y' THEN--基数药,处方必须记账 --如果是预交金病人病人,自动记账,否侧报告错误 select count(*) INTO VcountER from ZY_BRZHXX where BRID00=VBRID00 AND SFDJ00='0' AND ZYE000>0; IF Vcounter>0 THEN SP_YJ_CFJZ00('0',LS_YZCFID,VZXR000,PZXKS00,VZXR000); ELSE Verrmsg:='处方未收费,项目不能执行'; RAISE Ecustom; END IF; END IF; END IF; END IF; END IF; IF (LS_ZLDCCF is not null) AND (LS_DCBZ00 in ('0','1','2')) THEN--诊疗带出的处方判定和处理_ for i in 0..1 loop if (instrb(LS_ZLDCCF,',')<>0) then if i=0 then Vcflsh2:=substrb(trim(LS_ZLDCCF),1,instrb(trim(LS_ZLDCCF),',')-1); end if; if i=1 then Vcflsh2:=substrb(trim(LS_ZLDCCF),instrb(trim(LS_ZLDCCF),',')+1); end if; else if i=0 then Vcflsh2:=trim(LS_ZLDCCF); end if; if i=1 then Vcflsh2:='0'; end if; end if; LS_ERRPOS:='19@'; if Vcflsh2>'0' then IF LS_MZZYBZ='0' THEN--退回判定,相关处方的所有药品都退回,则项目不能执行 select count(*) INTO Vcounter from YF_MZCFMX where CFLSH0=Vcflsh2 AND THBZ00='0'; ELSE select count(*) INTO Vcounter from YF_ZYCFMX where CFLSH0=Vcflsh2 AND THBZ00='0'; END IF; IF Vcounter=0 THEN Verrmsg:='处方已经被药房退回,项目不能执行 (fdsdsfds)'; RAISE Ecustom; END IF; IF LS_MZZYBZ='0' THEN--退回判定,相关处方的所有药品都退回,则项目不能执行 select count(*) INTO Vcounter from (select count(*) from YF_MZCFMX a,YF_MZCF00 b where b.BRID00=Vbrid00 and a.CFLSH0=b.CFLSH0 and (b.CFLSH0=Vcflsh2 or b.BCCFH0=Vcflsh2) and b.CFZT00<>'3' group by a.YPNM00 having sum(a.YPZSL0)>0); ELSE select count(*) INTO Vcounter from (select count(*) from YF_ZYCFMX a,YF_ZYCF00 b where b.BRID00=Vbrid00 and a.CFLSH0=b.CFLSH0 and (b.CFLSH0=Vcflsh2 or b.BCCFH0=Vcflsh2) and b.CFZT00<>'3' group by a.YPNM00 having sum(a.YPZSL0)>0); END IF; IF Vcounter=0 THEN Verrmsg:='处方已经被退药,项目不能执行'; RAISE Ecustom; END IF; --记帐判定 --相关处方是科室领药的,尝试记帐,成功后方可执行项目 --病人自领处方,发药后才能执行诊疗项目 IF LS_MZZYBZ='0' THEN select CFZT00,SFKSLY INTO LS_CFZT00,LS_SFKSLY from YF_MZCF00 where CFLSH0=Vcflsh2; ELSE select CFZT00,SFKSLY INTO LS_CFZT00,LS_SFKSLY from YF_ZYCF00 where CFLSH0=Vcflsh2; END IF; IF LS_SFKSLY='Y' THEN --处方科室领药 IF LS_CFZT00='3' THEN--处方被作废 Verrmsg:='处方已被作废,项目不能执行'; RAISE Ecustom; ELSIF LS_CFZT00='4' THEN--处方需要审核 Verrmsg:='处方需要审核,项目不能执行'; RAISE Ecustom; ELSIF LS_CFZT00='5' THEN--处方需要审核 Verrmsg:='处方已退药,项目不能执行'; RAISE Ecustom; ELSIF LS_CFZT00='6' THEN--处方需要审核 Verrmsg:='处方已退费,项目不能执行'; RAISE Ecustom; END IF; IF LS_CFZT00='0' THEN IF LS_MZZYBZ='0' THEN --0未记账,1已记账,2已发药,3作废'4'需要审核'5'退药 '6'退费 SP_YJ_CFJZ00('0',Vcflsh2,VZXR000,PZXKS00,VZXR000); ELSE--住院病人需要领药的处方 SP_YJ_CFJZ00('1',Vcflsh2,VZXR000,PZXKS00,VZXR000); END IF; END IF; ELSE --病人自领药处方 IF LS_CFZT00 <>'2' THEN Verrmsg:='诊疗项目自动带出的处方(处方号:'||Vcflsh2||')未领药,项目不能执行'; RAISE Ecustom; END IF; END IF; end if; end loop; END IF; LS_ERRPOS:='20@'; /* --1.这样修改会导致如果是住院的医技单时,即使是扣费成功的,如下语句从SF_BRXXB0查找记录 ,Vcounter肯定是为0的所以,直接就会抛错误了 --2.判断还是应该往下移,因为sp_yj_ywsf00也是扣费的过程 select count(*) INTO Vcounter from YJ_YW0000 a, SF_BRFY00 b where a.SFDJH0 = b.DJH000 and a.YJDJH0=PYJDJH0; IF Vcounter<1 THEN RAISE e_brfyts; END IF; select count(*) INTO Vcounter from YJ_YW0000 a, SF_FYMX00 b where a.SFDJH0 = b.DJH000 and a.YJDJH0=PYJDJH0; IF Vcounter<1 THEN RAISE e_brfyts; END IF; select count(*) INTO Vcounter from YJ_YW0000 a, ZY_BRFY00 b where a.SFDJH0 = b.DJH000 and a.YJDJH0=PYJDJH0; IF Vcounter<1 THEN RAISE e_brfyts; END IF; select count(*) INTO Vcounter from YJ_YW0000 a, ZY_FYMX00 b where a.SFDJH0 = b.DJH000 and a.YJDJH0=PYJDJH0; IF Vcounter<1 THEN RAISE e_brfyts; END IF; */ --是否收费 IF LS_XMZT00='0' THEN--0申请 --Verrmsg:='该项目还没有定价,请先定价'; --RAISE Ecustom; if VZXMSXM=0 then SP_YJ_YWJJ00(PYJDJH0,0); IF VBRID00=0 THEN--非门诊住院病人,一定要到收费处交费 Verrmsg:='没有收费,请先到收费处收费'; RAISE Ecustom; END IF; sp_yj_ywsf00(PYJDJH0,PZXKS00,VZXR000,LS_PSFJGSM,VPSFSFCG); IF VPSFSFCG<>1 THEN Verrmsg:=LS_PSFJGSM; RAISE Ecustom; END IF; end if; ELSIF LS_XMZT00='1' THEN --1定价 if VZXMSXM=0 then IF VBRID00=0 THEN Verrmsg:='没有收费,请先到收费处收费'; RAISE Ecustom; END IF; --先收费 sp_yj_ywsf00(PYJDJH0,PZXKS00,VZXR000,LS_PSFJGSM,VPSFSFCG); IF VPSFSFCG<>1 THEN Verrmsg:=LS_PSFJGSM; RAISE Ecustom; END IF; end if; ELSIF LS_XMZT00='2' THEN --已经收费的项目,执行科室不一样的进行拆分处理 if VZXMSXM=0 then if (vCfzxsfcfsf='Y') and (LS_MZZYBZ='0') and (VYJKSBH<>PZXKS00) and (LS_DCBZ00='1') THEN SP_YJ_XMZXCF(PYJDJH0,PZLXMID,PZXSL00,PXKH000,PZXKS00); RETURN; END IF; end if; ELSIF LS_XMZT00<>'2' THEN --不能执行 Verrmsg:='该项目不能执行'; RAISE Ecustom; END IF; --‘2’已收费,可以执行 --执行人 LS_ERRPOS:='21@'; --select YGBH00,ZWXM00 INTO VZXR000,LS_ZXRXM0 from BM_YGBM00 where UPPER(XKH000)=PXKH000 AND ROWNUM=1; --费用校验移到此处 select nvl(SFDJH0,0),yjlrbz into LS_SFDJH0,LS_YJLRBZ from YJ_YW0000 where YJDJH0=PYJDJH0; if LS_MZZYBZ='0' and (instr(nvl(YJ_MSFZLXM,'a'),','||VZLXMID||',')=0 or LS_SFDJH0>0) then select nvl(SFDJH0,0) into LS_SFDJH0 from YJ_YW0000 where YJDJH0=PYJDJH0; select count(*) into Vcounter from SF_BRFY00 where DJH000=LS_SFDJH0; IF (Vcounter<1 or LS_SFDJH0=0) and (LS_YJLRBZ<>'T' or LS_YYID00<>'225898') THEN RAISE e_brfyts; END IF; if (LS_YJLRBZ<>'T' or LS_YYID00<>'225898') then select CZRQ00 into LS_CZRQ00 from SF_BRFY00 where DJH000=LS_SFDJH0; end if; elsif LS_MZZYBZ='1' and instr(nvl(YJ_MSFZLXM,'a'),','||VZLXMID||',')=0 then select nvl(SFDJH0,0) into LS_SFDJH0 from YJ_YW0000 where YJDJH0=PYJDJH0; select count(*) into Vcounter from ZY_BRFY00 where DJH000=LS_SFDJH0; if (Vcounter<1 or LS_SFDJH0=0) and (LS_YJLRBZ<>'T' or LS_YYID00<>'225898') then raise e_brfyts; end if; select CZRQ00 into LS_CZRQ00 from ZY_BRFY00 where DJH000=LS_SFDJH0; end if; LS_ERRPOS:='22@'; --分步执行标志 IF LS_FBZXBZ='Y' AND PZXMBZ=1 THEN --执行子项目 --是否 已经执行 select count(*) INTO Vcounter from YJ_YWMX00 where YJDJH0=PYJDJH0 AND ZLXMID=PZLXMID AND ZXRQ00 IS NULL AND ZXSJ00 IS NULL ; IF Vcounter<1 THEN Verrmsg:='该项目已经执行'; RAISE Ecustom; END IF; --修改YJ_YWMX00的执行人和执行时间 UPDATE YJ_YWMX00 SET ZXRXM0=LS_ZXRXM0,ZXRQ00=TO_CHAR(SYSDATE,'YYYYMMDD'),ZXSJ00=TO_CHAR(SYSDATE,'HH24:MI:SS') where YJDJH0=PYJDJH0 AND ZLXMID=PZLXMID; select count(*) INTO Vcounter from YJ_YWMX00 where YJDJH0=PYJDJH0 AND --ZXRXM0 IS NOT NULL AND ZXRQ00 IS NULL AND ZXSJ00 IS NULL; IF Vcounter<1 THEN --所有子项目都已经执行,修改YJ_YW0000的执行人,执行日期时间,状态 UPDATE YJ_YW0000 SET ZXR000=VZXR000,YJKSBH=PZXKS00,ZXRQ00=TO_CHAR(SYSDATE,'YYYYMMDD'), ZXSJ00=TO_CHAR(SYSDATE,'HH24:MI:SS'),XMZT00='3' where YJDJH0=PYJDJH0 ; END IF; ELSE --执行大项目 --修改YJ_YW0000的执行人,执行日期时间,状态 UPDATE YJ_YW0000 SET ZXR000=VZXR000,YJKSBH=PZXKS00,ZXRXM0=LS_ZXRXM0,ZXRQ00=TO_CHAR(SYSDATE,'YYYYMMDD'), ZXSJ00=TO_CHAR(SYSDATE,'HH24:MI:SS'), ZXSL00=NVL(ZXSL00,0)+PZXSL00 where YJDJH0=PYJDJH0; --归档LIS-20130613-003 SELECT NVL(MAX(ZXSJ00),'0') INTO Vzxsj00 FROM YJ_YWZXJL WHERE YJDJH0=PYJDJH0; IF Vzxsj00=TO_CHAR(SYSDATE,'HH24:MI:SS') THEN INSERT INTO YJ_YWZXJL(yjdjh0,zxrq00,zxsj00,zxcs00,zxr000,ZXYSZ0,SJZXYS,SFDJH0) VALUES (PYJDJH0,TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE+1/60/60/24,'HH24:MI:SS'),PZXSL00,VZXR000,PZXYSZ0,PZXYS00,LS_SFDJH0); else --IF PZXSL00 < VSL0000 THEN INSERT INTO YJ_YWZXJL(yjdjh0,zxrq00,zxsj00,zxcs00,zxr000,ZXYSZ0,SJZXYS,SFDJH0) VALUES (PYJDJH0,TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'),PZXSL00,VZXR000,PZXYSZ0,PZXYS00,LS_SFDJH0); --END IF; END IF; select zxsl00 INTO VZXSL00 from YJ_YW0000 where YJDJH0=PYJDJH0; IF VZXSL00>=VSL0000 THEN UPDATE YJ_YW0000 SET XMZT00='3' where YJDJH0=PYJDJH0; UPDATE YJ_YWMX00 SET ZXRXM0=LS_ZXRXM0,ZXRQ00=TO_CHAR(SYSDATE,'YYYYMMDD'),ZXSJ00=TO_CHAR(SYSDATE,'HH24:MI:SS') where YJDJH0=PYJDJH0; END IF; IF NVL(VDJH000,0)>0 THEN--如果费用已经收过的话,得考虑费用明细表得执行医生是否正确 IF LS_MZZYBZ='1' THEN UPDATE ZY_FYMX00 SET ZXYS00=VZXR000,ZXKS00=PZXKS00,ZXRQ00=to_char(sysdate,'YYYYMMDD'),ZXSJ00=to_char(sysdate,'HH24:mi:ss') where DJH000=VDJH000 AND --NVL(ZXYS00,0)<=0 AND XMBH00 IN (select SFXMID from YJ_YWJJ00 b where YJDJH0=PYJDJH0); ELSE UPDATE SF_FYMX00 SET ZXYS00=VZXR000,ZXKS00=PZXKS00,ZXRQ00=to_char(sysdate,'YYYYMMDD'),ZXSJ00=to_char(sysdate,'HH24:mi:ss') where DJH000=VDJH000 AND --NVL(ZXYS00,0)<=0 AND XMBH00 IN (select SFXMID from YJ_YWJJ00 where YJDJH0=PYJDJH0) and (YJDJH0=PYJDJH0 or YJDJH0 is null) ; END IF; END IF; END IF; LS_ERRPOS:='23@'; --commit; --if Upper(PCOMMIT)<>'M' then -- commit; --end if; if LS_MZZYBZ='1' and LS_YZLX00='4' then --生成医嘱 LS_YZMXID:=0; select * into L_YJYW_ROW from YJ_YW0000 where YJDJH0=PYJDJH0; if L_YJYW_ROW.YZCFID is null then select YGBH00 into LS_LRRBH0 from BM_YGBM00 where ZWXM00=L_YJYW_ROW.LRXM00 and CZBZ00<>'2' and rownum=1; SP_ZS_YJYZ00(0,LS_YZMXID,L_YJYW_ROW.ZYGHID,'','1',to_char(sysdate,'HH24:MI:SS'),L_YJYW_ROW.ZLXMID,L_YJYW_ROW.ZLXMJC,L_YJYW_ROW.YJKSBH,L_YJYW_ROW.KDYS00,L_YJYW_ROW.LRXM00,to_char(sysdate,'YYYYMMDD'),to_char(sysdate,'HH24:MI:SS'),1, '0',L_YJYW_ROW.SL0000,'0','正常',L_YJYW_ROW.BZ0000,L_YJYW_ROW.ZDID00,L_YJYW_ROW.ZDMC00,'',L_YJYW_ROW.BWMC00,'','','N',0); update YJ_YW0000 set YZCFID=LS_YZMXID where YJDJH0=PYJDJH0; update BQ_YJYZ00 set YZLX00='4' where YZMXID=LS_YZMXID; end if; end if; if PYJDJH0>0 and VFSWBJKSJ='Y' then VXMZT00:='3'; --SP_JK_INSJKB0(LS_MZZYBZ,LS_ZYGHID,VBRID00,null,null,VDJH000,PYJDJH0,'1',VXMZT00,VZXR000,PZXKS00,0,null); begin execute immediate 'begin SP_JK_INSJKB0('||LS_MZZYBZ||','||LS_ZYGHID||','||VBRID00||',null,null,'||VDJH000||','||PYJDJH0||',''1'','||VXMZT00||','||VZXR000||','||PZXKS00||',0,null); end; '; exception when others then Vcounter:=0; end; end if; if LS_XMZT00 in('1','2') and substr(LS_CZRQ00,1,6)= to_char(sysdate,'YYYYMM') then --同一个自然月可以修改 if LS_MZZYBZ='0' then update SF_FYMX00 set ZXYSZ0=PZXYSZ0,SJZXYS=nvl(PZXYS00,0) where DJH000=LS_SFDJH0; else update ZY_FYMX00 set ZXYSZ0=PZXYSZ0,SJZXYS=nvl(PZXYS00,0) where DJH000=LS_SFDJH0; end if; end if; if Upper(PCOMMIT)='Y' then commit; end if; EXCEPTION WHEN E_YEWFS THEN ROLLBACK; RAISE_APPLICATION_ERROR(-20010,substrb('病人账户余额为负数,请先到收费处交钱后,再来执行!*'||Verrmsg,1,120)); WHEN e_yebz00 THEN ROLLBACK; RAISE_APPLICATION_ERROR(-20010,substrb('病人账户余额不足扣费,请先到收费处交钱后,再来执行!*'||Verrmsg,1,120)); WHEN Ecustom THEN RAISE_APPLICATION_ERROR(-20011,substrb(Verrmsg||'!*'||Verrmsg,1,180)); WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20010, substrb('数据没有找到!*'||Verrmsg||'LS_YZMXID='||LS_YZMXID||'PYJDJH0='||PYJDJH0,1,180)); WHEN e_brfyts THEN RAISE_APPLICATION_ERROR(-20010, substrb('对应的费用主表,明细表数据没有找到!*'||Verrmsg||'LS_YZMXID='||LS_YZMXID||'PYJDJH0='||PYJDJH0,1,180)); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20020, substrb(NVL(SQLERRM, '原因不明出错!*'||Verrmsg||'LS_YZMXID='||LS_YZMXID||'PYJDJH0='||PYJDJH0),1,120)); ROLLBACK; END SP_YJ_YWZX00;