CREATE OR REPLACE FUNCTION SF_YJ_YWCX00_CXSL00 --对单个项目进行冲销,冲销YJ_YW0000,YJ_YWMX00,YJ_YWJJ00,不冲销费用表 ( Pyjdjh0 in number, --医技单据号 Psfcxfy in number, --是否直接退费 0:否,1:是 Perrmsg out varchar2, --错误信息 Pczy000 in number, --操作员 Pczyks0 in number, --操作员科室 Pcxsl00 in number, --冲消数量 Pmxxmid in number default -1, --冲销明细项目ID pcxshr0 in number default 0 --重新审核人 ) return number --1:成功 ,0:失败 as Vyjdjh0 number; Vdjh000 number; --收费单据号 Vcounter number; Vjzdh00 number; --结帐单号 Vparams varchar2(500); Ecustom EXCEPTION; Verrmsg CHAR(255); --错误描述 Yw_Row YJ_YW0000%ROWTYPE; Vzldccf YJ_YW0000.ZLDCCF%type; Vcflsh2 yf_mzcf00.cflsh0%type; Ls_Czyxm0 BM_YGBM00.ZWXM00%TYPE; --操作员姓名 Ls_Zwxm00 BM_YGBM00.ZWXM00%TYPE; ld_fbbh00 BM_BRFBB0.FBBH00%type; ld_jflbid BM_BRJFLB.JFLBID%type; ls_cxzje0 yj_yw0000.zje000%type; lsSSHJSFQYGZHCJK XT_XTCS00.VALUE0%type; --lvMXID00 SF_FYMX00.MXID00%type; lvSFSFCG number; lsSFJGSM varchar2(250); LS_DBZCWF ZY_BRZHXX.DBZCWF%type;--单病种超标床位费 LS_DBZHCF ZY_BRZHXX.DBZHCF%type;--单病种可另收材料 VFSWBJKSJ varchar2(10); LS_COU number(5); V_YBCXJZRQ XT_XTCS00.VALUE0%TYPE; --医保限制冲销日期(默认为20010101) VFBBH00 BM_BRFBB0.FBBH00%TYPE; --病人费别(自费,公费,医保等) V_JZRQ00 ZY_BRFY00.CZRQ00%type; VZYID00 ZY_BRXXB0.ZYID00%type; LS_SQL varchar2(500); LS_ZXJG00 varchar2(10); VSJZXYS SF_FYMX00.SJZXYS%type; CURSOR YWJJ IS select * from YJ_YWJJ00 where YJDJH0=Pyjdjh0; CURSOR YWMX_CURSOR IS select * from YJ_YWMX00 where YJDJH0=Pyjdjh0; -- MODIFICATION HISTORY -- Person Date Comments -- qks 2008.05.30 公费病人在分次冲销时候计算JZJE00错误,-JZJE00应该也要*Pcxsl00/Yw_Row.SL0000,YJ-20080523-001 -- CSF 2009.07.17 YJ_YW0000.ZXYS00不为空时候,冲销时候的zxys00应该取原有医生。 -- qks 2009.10.23 插入zy_fymx00表时增加(flag00,djid00)字段,值为(1,YJ_YWJJ00.ID0000) -- qks 2009.11.26 插入YJ_YWJJ00表时增加JMJE00字段值;插入sf_fymx00、zy_fymx00表时增加YJ_YWJJ00.JMJE00,以及JMBZ00字段值 -- chenqw 2010.03.08 增加计价项目退费申请 -- LIUJ 2011.01.11 对项目带出两张处方的情况做适应性扩展 for YJ-20101126-001 -- zhangwz 2011.06.17 相关业务表增加YEXM00数据的插入. -- chenyw 2013.02.20 修改费用多扣问题 for YJ-20130111-001 -- daihq 2013.05.29 增加在YJ_YWMX00中记录设备代码 for YJ-20130416-002 -- liuj 2013.08.09 解决明细冲销后再整单冲销报错问题 for BQ-20130807-001 -- csf 2013.09.17 解决多次冲销,冲销数量及金额体现不准确问题 FOR YJ-20130917-002 -- daihq 2016.04.13 冲销记录YJ_YWJJ00增加记录WZDWM0、高值记录号,增加参数SS_SSHJSFQYGZHCJK控制,是否启用智业高值耗材接口 for SSMZ-20160406-001 -- daihq 2016.05.12 修正SSMZ-20160406-001改后出现的问题 for MZSF-20160512-003 -- dsm 2016.12.22 增加参数pcxshr0 for YJ-20161212-001 -- zhangyc 2017.03.23 单病种修改 by ZYSF-20170324-002 -- dsm 2018.05.02 增加调用过程SP_JK_INSJKB0 for YJ-20180502-001 -- dsm 2018.05.15 当附加费已经被退过(记帐管理--退费申请)的不能重复退费 for BQ-20180507-001 -- dsm 2018.05.29 如果有优惠的更正时也要处理 for ZYSF-20171020-001 -- dsm 2018.12.05 病区按项目明细退过的不能再按执行项目退 for YJ-20181112-001 -- zhuyr 2019.01.24 增加判断,如果冲销的费用已经发送过日清单,就不让冲销 by ZYSF-20190122-003 -- dsm 2019.05.11 退费申请YJ_YW0000.DJID00,DJMXID写入数据 YJ-20190511-001 -- dsm 2019.08.17 调用接口过程增加异常处理 for MZSF-20190817-001 -- dsm 2019.10.17 冲销的ZFFSBZ也要写入 for ZYSF-20190919-001 -- dsm 2019.12.26 跨年结算退费限制 for ZYSF-20191225-007 -- dsm 2020.06.24 冲销ZTM00,CTM00写入 for YJ-20200624-001 -- dsm 2020.08.11 医信库存物资系统接口 for YJ-20200811-001 -- dsm 2020.09.04 去掉HRP_DFSHC0 for BQ-20200825-001 -- huangjy 2020.09.10 修正V_JZRQ00赋值类型不同导致报错 for YJ-20200910-002 -- dsm 2020.09.23 增加ZXYSZ0 for BQ-20200916-001 -- dsm 2020.11.26 退费时SF_FYMX00,ZY_FYMX00的ZXYSZ0,SJZXYS要写入 for YJ-20201126-001 -- qiulf 2021.04.16 修正报错还返回成功1的问题,增加判断择日住院允许冲销收费处开的项目 by BQ-20210416-001 -- dsm 2021.11.17 YJ_YW0000.ZXR000写入与正单一样的值 for YJ-20211025-001 -- dsm 2022.01.27 MXID00写入 for YJ-20220125-001 -- dsm 2022.03.31 JZDH00>0时直接返回,不限制 for YJ-20220331-001 -- dsm 2022.09.01 增加调用SP_BQ_CREATEKDSJ for BQ-20220901-002 -- huangjy 2022.11.29 优化提示报错信息 by BQ-20221121-002 -- dsm 2023.02.22 增加调用SF_BQ_PDCFTF 判断重复退费 for BQ-20230222-002 -- dsm 2023.07.03 1.负单的执行日期,时间不能直接引用正单的,2.判断被"病区普通费用退费"退过的写法改变 for YJ-20230628-001 BEGin Vparams:='参数:Pyjdjh0='||Pyjdjh0||',Psfcxfy='||Psfcxfy||',Perrmsg out,Pczy000='||Pczy000||',PCZYKS0='||PCZYKS0; --2016.04.13 daihq 是否启用智业高值耗材接口 begin select nvl(max(trim(VALUE0)),'N') into lsSSHJSFQYGZHCJK from XT_XTCS00 where NAME00='SS_SSHJSFQYGZHCJK'; exception when others then lsSSHJSFQYGZHCJK:='N'; end; select SF_SF_TYZD00('发送外部接口数据','Open') into VFSWBJKSJ from dual; select ZWXM00 into Ls_Zwxm00 from BM_YGBM00 where YGBH00=Pczy000; select * into Yw_Row from YJ_YW0000 where YJDJH0=Pyjdjh0; if Yw_Row.MZZYBZ='1' then select count(*) into Vcounter from ZY_BRFY00 a,YJ_YW0000 b where a.DJH000=b.SFDJH0 and b.YJDJH0=Pyjdjh0 and a.YBFSDH<>0 and b.MZZYBZ='1'; if Vcounter > 0 then Verrmsg:='本项目已发送医保日清单,无法冲销,请先将日清单冲销之后再进行相关操作!'; Raise Ecustom; end if; end if; --ZYSF-20191225-007 --医保限制冲销日期(默认为20010101) Select nvl(max(trim(Value0)),'20010101') Into V_YBCXJZRQ From XT_XTCS00 Where Name00='ZY_YBCXJZRQ'; select to_char(min(CzRQ00)) into V_JZRQ00 from zy_brfy00 WHERE DJH000=Yw_Row.SFDJH0; select min(ZYID00) into VZYID00 from zy_brfy00 WHERE DJH000=Yw_Row.SFDJH0; --ZY_YBCXJZRQ 根据不同的YBZXLB获取不同的 YBCXJZRQ by liuj BQ-20120113-001 on 20120116 begin select SF_ZY_GETXTCS(c.YBZXLB,V_YBCXJZRQ,a.ZYID00) YBCXJZRQ,b.FBBH00 into V_YBCXJZRQ,VFBBH00 from ZY_BRXXB0 a,BM_BRXXB0 b,IC_YBBRLB c where a.ZYID00=Yw_Row.zyghid and a.BRID00=b.BRID00 and b.FBBH00=3 and b.FBBH00=c.FBBH00 and b.YBLB00=c.YBLB00; exception when others then V_YBCXJZRQ:='20010101'; end; --除了新农合病人和异地医保病人,其他医保病人都要限制不能冲销某个时间段之前的费用 if (VFBBH00=3) and (V_YBCXJZRQ<>'20010101') and (V_JZRQ00<>'20991231') then if (V_YBCXJZRQ >= V_JZRQ00) then Verrmsg:='不能冲销'||substr(V_YBCXJZRQ,1,4)||'年'||substr(V_YBCXJZRQ,5,2)||'月'||substr(V_YBCXJZRQ,7,2)||'日之前的费用'; raise Ecustom; end if; end if; if Pmxxmid<>-1 then select round(jjje00*sfcs00*Pcxsl00, 2) into ls_cxzje0 from yj_ywjj00 where yjdjh0 = Pyjdjh0 and id0000= Pmxxmid; end if; if Yw_Row.XMZT00='6' then Verrmsg:='该项目已经作废*'; return 0; ELSif Yw_Row.XMZT00='7' then Verrmsg:='该项目已经退费*'; return 0; end if; if Yw_Row.MZZYBZ='1' then select max(ZYID00) into Vcounter from ZY_BRXXB0 where ZYH000=Yw_Row.ZYHGHH and brzt00<>'9'; if Yw_Row.ZYGHID<>Vcounter then Perrmsg:='不能冲销病人上次住院的诊疗项目*'; return 0; end if; end if; if yw_row.MZZYBZ='1' then --20181205 --select count(*) into LS_COU from yj_yw0000 where zyghid=yw_row.ZYGHID and SFDJH0=yw_row.SFDJH0 and ZLXMID=0 and ZLXMJC='病区普通费用退费'; select count(*) into LS_COU from YJ_YW0000 a,YJ_YWJJ00 b where zyghid=yw_row.ZYGHID and zlxmid+0=0 and zlxmjc='病区普通费用退费' and a.YJDJH0=b.YJDJH0 and b.SL0000<0 and b.MXID00 in ( select c.MXID00 from ZY_FYMX00 c,YJ_YWJJ00 d where c.DJH000=yw_row.SFDJH0 and d.YJDJH0=Pyjdjh0 and d.SL0000>0 and c.DJID00=d.ID0000 ); if LS_COU>0 then --说明有按收费项目退费过,所以不能按申请来退费,剩余的也只能继续从项目退费走 Perrmsg:='此单有按费用明细退费过,所以剩余的也只能继续按项目明细退费'; return 0; end if; end if; --新的YJDJH0 select SQ_YJ_YW0000_YJDJH0.NEXTVAL into Vyjdjh0 from DUAL; --冲销YJ_YW0000 --ZXRQ00,ZXSJ00不能用正单的日期时间YJ-20230628-001 insert into YJ_YW0000 (YJDJH0, YJFZH0, YJKSBH, BRID00, ZYGHID, BRXM00, YEXM00, ZLXMJC, KDYS00, KDKSBH, KDRQ00, KDSJ00, LRXM00, JZBZ00, FBZXBZ, BWMC00, APRXM0, APRQ00, APSJ00, ZXR000, ZXRXM0, ZXRQ00, ZXSJ00, JGLR00, ZDMC00, JGBGRQ, JGBGYS, BGYSXM, XMZT00, MZZYBZ, CXDJH0, BZ0000, XB0000, CSRQ00, ZDID00, ZLXMID, SL0000, ZXSL00, DW0000, YZCFID, YPNM00, DCBZ00, ZYHGHH, ZJE000, TQPC00, YJLRBZ, ZXYS00, CXSHR0,DJID00,DJMXID,ZFFSBZ,YSZID0,ZXYSZ0) VALUES (Vyjdjh0, Yw_Row.YJFZH0,Yw_Row.YJKSBH, Yw_Row.BRID00, Yw_Row.ZYGHID , Yw_Row.BRXM00, Yw_Row.YEXM00, Yw_Row.ZLXMJC, Yw_Row.KDYS00, Yw_Row.KDKSBH, TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'), LS_ZWXM00, Yw_Row.JZBZ00, Yw_Row.FBZXBZ, Yw_Row.BWMC00, Yw_Row.APRXM0, Yw_Row.APRQ00, Yw_Row.APSJ00, Yw_Row.ZXR000, Yw_Row.ZXRXM0, decode(Yw_Row.ZXRQ00,null,Yw_Row.ZXRQ00,TO_CHAR(SYSDATE,'YYYYMMDD')), decode(Yw_Row.ZXSJ00,null,Yw_Row.ZXSJ00,TO_CHAR(SYSDATE,'HH24:MI:SS')), Yw_Row.JGLR00, Yw_Row.ZDMC00, Yw_Row.JGBGRQ, Yw_Row.JGBGYS, Yw_Row.BGYSXM, '1', Yw_Row.MZZYBZ, Pyjdjh0, Yw_Row.BZ0000,Yw_Row.XB0000, Yw_Row.CSRQ00, Yw_Row.ZDID00, Yw_Row.ZLXMID, decode(Pmxxmid, -1, -Pcxsl00, 0), decode(Pmxxmid, -1, -Pcxsl00, 0), Yw_Row.DW0000, Yw_Row.YZCFID, Yw_Row.YPNM00, Yw_Row.DCBZ00, Yw_Row.ZYHGHH, decode(Pmxxmid, -1, (-Yw_Row.ZJE000*Pcxsl00/Yw_Row.SL0000), (-ls_cxzje0)), Yw_Row.TQPC00, Yw_Row.YJLRBZ,Yw_Row.ZXYS00,pcxshr0,Yw_Row.DJID00,Yw_Row.DJMXID,Yw_Row.ZFFSBZ,Yw_Row.YSZID0,Yw_Row.ZXYSZ0); --执行记录增加负记录 if Yw_Row.ZXRQ00<>null or Yw_Row.ZXSJ00<>null then insert into yj_ywzxjl(yjdjh0,zxrq00,zxsj00,zxcs00,zxr000) values(Vyjdjh0,Yw_Row.ZXRQ00,Yw_Row.ZXSJ00,-Yw_Row.ZXSL00,Yw_Row.ZXR000); end if; --CHANGE BY DXD 20010410 --UPDATE YJ_YW0000 SET XMZT00='6' where YJDJH0=Pyjdjh0; --end CHANGE --冲销YJ_YWMX00 insert into YJ_YWMX00 (ID0000,YJDJH0,XMMC00,JGDW00,CKZ000,JGMS00,BZ0000,ZXRXM0,ZXRQ00,ZXSJ00,ZLXMID,SL0000,DW0000,DAXXID) select SQ_YJ_YWMX00_ID0000.NEXTVAL,Vyjdjh0,XMMC00,JGDW00,CKZ000,JGMS00,BZ0000,ZXRXM0,ZXRQ00,ZXSJ00,ZLXMID,decode(Pmxxmid, -1, SL0000*Pcxsl00/Yw_Row.SL0000, 0),DW0000,DAXXID from yj_ywmx00 where yjdjh0=Pyjdjh0 ; insert into YJ_YWJJ00 (ID0000,YJDJH0,YJFZH0,SFXMID,SFXX00,JJJE00,GFJE00,ZFJE00,QZFJE0,SFSX00,YBBZ00, JZJE00,CXBZ00,SL0000,SFCS00,GDBZ00,FJFYBZ,ZFBL00,SFLB00,GJBM00,JMJE00,WZDWM0,GZJLH0 ,MXID00,CXLB00,DJID00,DJMXID,ZFFSBZ,ZTM000,CTM000) select SQ_YJ_YWJJ00_ID0000.NEXTVAL,Vyjdjh0,YJFZH0,SFXMID,SFXX00,JJJE00,-GFJE00*Pcxsl00/decode(Pmxxmid, -1, Yw_Row.SL0000,SL0000),-ZFJE00*Pcxsl00/decode(Pmxxmid, -1, Yw_Row.SL0000,SL0000),-QZFJE0*Pcxsl00/decode(Pmxxmid, -1, Yw_Row.SL0000,SL0000),SFSX00,YBBZ00, -JZJE00*Pcxsl00/decode(Pmxxmid, -1, Yw_Row.SL0000,SL0000),'-',decode(Pmxxmid, -1, (-SL0000*Pcxsl00/Yw_Row.SL0000),-Pcxsl00),SFCS00,GDBZ00,FJFYBZ,ZFBL00,SFLB00,GJBM00,-JMJE00*Pcxsl00/decode(Pmxxmid, -1, Yw_Row.SL0000,SL0000),WZDWM0,GZJLH0 ,decode(yw_row.MZZYBZ,'0',(select MXID00 from SF_FYMX00 where DJH000=Yw_Row.SFDJH0 and DJID00=a.ID0000 and rownum=1),(select MXID00 from ZY_FYMX00 where DJH000=Yw_Row.SFDJH0 and DJID00=a.ID0000 and rownum=1)) ,'0' ,DJID00,DJMXID,a.ZFFSBZ,ZTM000,CTM000 from YJ_YWJJ00 a where YJDJH0=Pyjdjh0 and (id0000=Pmxxmid or Pmxxmid=-1) and (id0000=Pmxxmid or ((Pmxxmid=-1) and (nvl(CXSL00,0)<=SL0000-(SL0000*Pcxsl00/Yw_Row.SL0000)))); --and not exists(select 1 from YJ_YWJJ00 b,ZY_FYMX00 c where c.DJH000=Yw_Row.SFDJH0 and c.DJID00=a.ID0000 and b.SFXMID=a.SFXMID and b.MXID00=c.MXID00 and b.SL0000<0); --从项目退费菜单退过的不再退否则会重复退20180515 update YJ_YWJJ00 SET CXBZ00='+', cxsl00= cxsl00 + decode(Pmxxmid, -1, (SL0000*Pcxsl00/Yw_Row.SL0000),Pcxsl00) where YJDJH0=Pyjdjh0 and (id0000=Pmxxmid or ((Pmxxmid=-1) and (nvl(CXSL00,0)<=SL0000-(SL0000*Pcxsl00/Yw_Row.SL0000)))); if Pmxxmid=-1 then begin select nvl(round(sum(jjje00*sfcs00*SL0000), 2),0) into ls_cxzje0 from yj_ywjj00 where yjdjh0 = Vyjdjh0; exception when others then ls_cxzje0:=0; end; update YJ_YW0000 set ZJE000=ls_cxzje0 where yjdjh0 = Vyjdjh0; update YJ_YW0000 SET CXSL00=nvl(CXSL00,0)+Pcxsl00 where yjdjh0=Pyjdjh0; end if ; if Psfcxfy=0 then return 1; end if; --不直接冲销退费 if Yw_Row.BRID00=0 then return 1; end if; if Yw_Row.SFDJH0 IS NULL then Perrmsg:='没有相关连的收费单据号'; return 0; end if; if Yw_Row.MZZYBZ<>'1' then--门诊 select count(*) into Vcounter from SF_BRFY00 where DJH000=Yw_Row.SFDJH0; else--住院 select count(*) into Vcounter from ZY_BRFY00 where DJH000=Yw_Row.SFDJH0; end if; if Vcounter <1 then Perrmsg:='病人费用表中没有相关连的收费单据号'; return 0; end if; if Yw_Row.MZZYBZ<>'1' then select JZDH00 into Vjzdh00 from SF_BRFY00 where DJH000=Yw_Row.SFDJH0 ; else select JZDH00 into Vjzdh00 from ZY_BRFY00 where DJH000=Yw_Row.SFDJH0; end if; if VJZDH00>0 then --直接按成功返回,去收费处做退款 --Perrmsg:='已经结帐,不能直接退费'; return 1; end if; if Yw_Row.MZZYBZ<>'1' then --门诊 --择日住院都可以冲销 select count(*) into Vcounter from SF_BRXXB0 where GHID00=yw_row.ZYGHID and SFZRZY='Y'; if Vcounter > 0 then Vcounter := 0; else select count(*) into Vcounter from SF_FYMX00 where DJH000=Yw_Row.SFDJH0 AND SFYDJ0='1'; end if; else select count(*) into Vcounter from ZY_FYMX00 where DJH000=Yw_Row.SFDJH0 AND SFYDJ0='1'; end if; if Vcounter >0 then Perrmsg:='该项目由收费处收费,不能冲销费用表'; return 0; end if; --操作员姓名 select ZWXM00 into Ls_Czyxm0 from BM_YGBM00 where YGBH00=Pczy000; if Yw_Row.MZZYBZ<>'1' then--门诊 select SQ_SF_BRJFB0_DJH000.NEXTVAL into Vdjh000 from DUAL; --select SQ_SF_FYMX00_MXID00.NEXTVAL into lvMXID00 from dual; --修改YJ_YW0000的SFDJH0,2004.07.28brfy00的触发器要求在插入费用时能找到医技业务记录,所以需要提前做本操作 UPDATE YJ_YW0000 SET SFDJH0=Vdjh000,xmzt00=Yw_Row.xmzt00 where YJDJH0=Vyjdjh0; select SJZXYS into VSJZXYS from SF_FYMX00 where DJH000=Yw_Row.SFDJH0 and rownum=1; insert into SF_FYMX00(mxid00,djh000,xmbh00,xmmc00,xmgg00,xmdw00,xmdj00,xmsl00,hjje00,zfje00, QZFJE0,ZFBL00,gfje00,jzje00,czrq00,czsj00, zxrq00,zxsj00,cxbz00,sfydj0,kdks00,ysks00,kdys00,zxks00,zxys00, jmje00,jmbz00,WZDWM0,GZJLH0,DJID00,DJMXID,ZFFSBZ,ZXYSZ0,SJZXYS,OMXID0) select SQ_SF_FYMX00_MXID00.NEXTVAL,Vdjh000,a.SFXMID,b.XMMC00,b.GG0000,b.DW0000,a.JJJE00,a.SL0000*a.SFCS00,round(a.JJJE00*a.SL0000*a.SFCS00,2),a.ZFJE00, a.QZFJE0,ZFBL00,a.GFJE00,(round(a.JJJE00*a.SL0000*a.SFCS00,2)-a.ZFJE00-a.GFJE00), TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'), TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'),'-','0',Yw_Row.KDKSBH,Yw_Row.YSSZKS,Yw_Row.KDYS00,Yw_Row.YJKSBH,nvl(Yw_Row.ZXR000,0), nvl(a.JMJE00,0),DECODE(NVL(a.JMJE00,0),0,'0','4'),a.WZDWM0,a.GZJLH0,a.ID0000,a.DJMXID,a.ZFFSBZ,Yw_Row.ZXYSZ0,VSJZXYS,a.MXID00 from YJ_YWJJ00 a,BM_YYSFXM b where a.SFXMID=b.SFXMID and YJDJH0=Vyjdjh0 ; --2016.04.13 daihq add 调用智业高值耗材接口 莆田附属医院 if trim(lsSSHJSFQYGZHCJK)='Y' then for VR in (select A.SFXMID,A.SL0000,A.WZDWM0,A.GZJLH0, (select MXID00 from SF_FYMX00 C where C.DJH000=Vdjh000 and C.XMBH00=B.SFXMID and C.GZJLH0=A.GZJLH0 and rownum=1) MXID00 from YJ_YWJJ00 A,BM_YYSFXM B where A.SFXMID = B.SFXMID and A.YJDJH0=Vyjdjh0 and A.WZDWM0 is not null ) loop SP_SS_GZHCJK(VR.SFXMID,1,VR.WZDWM0,VR.GZJLH0,'0',Yw_Row.ZYGHID,Yw_Row.ZYHGHH,Ls_Czyxm0,PCZYKS0,Vdjh000,VR.MXID00,lsSFJGSM,lvSFSFCG); if lvSFSFCG=-1 then Perrmsg:=substrb(lsSFJGSM,1,240); return 0; end if; end loop; end if; select brfb00,jflbid into ld_fbbh00,ld_jflbid from sf_brfy00 where djh000=Yw_Row.SFDJH0; insert into SF_BRFY00(djh000, mzid00,mzh000,jflbid ,brid00 ,xm0000 , brfb00,hjje00,zfje00,QZFJE0,gfje00,jzje00, czrq00,czsj00, czy000,czyxm0,czyks0,cxdjh0,cxpjr0,cxyy00) select Vdjh000,Yw_Row.ZYGHID,Yw_Row.ZYHGHH,ld_jflbid,Yw_Row.BRID00,Yw_Row.BRXM00, ld_fbbh00,sum(HJJE00),sum(ZFJE00),sum(QZFJE0),sum(GFJE00),sum(JZJE00), TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'), Pczy000,Ls_Czyxm0,PCZYKS0,Yw_Row.SFDJH0,Ls_Czyxm0,'医技项目冲销' from SF_FYMX00 where DJH000=Vdjh000; --UPDATE SF_FYMX00 SET CXBZ00='+' where DJH000=Yw_Row.SFDJH0; if nvl(Yw_Row.DJID00,0)>0 then --套餐数量加回去 update SF_TCDJMX set YKSL00=YKSL00-Yw_Row.SL0000,SYSL00=SYSL00+Yw_Row.SL0000 where DJID00=Yw_Row.DJID00 and DJMXID=Yw_Row.DJMXID; end if; else--住院 select SQ_ZY_BRJFB0_DJH000.NEXTVAL into Vdjh000 from DUAL; --select SQ_ZY_FYMX00_MXID00.NEXTVAL into lvMXID00 from dual; --修改YJ_YW0000的SFDJH0,2004.07.28brfy00的触发器要求在插入费用时能找到医技业务记录,所以需要提前做本操作 UPDATE YJ_YW0000 SET SFDJH0=Vdjh000,xmzt00=Yw_Row.xmzt00 where YJDJH0=Vyjdjh0; select SJZXYS into VSJZXYS from ZY_FYMX00 where DJH000=Yw_Row.SFDJH0 and rownum=1; insert into ZY_FYMX00(MXid00,djh000,xmbh00,xmmc00,xmgg00,xmdw00,xmdj00,xmsl00,hjje00,ZFBL00, zfje00,QZFJE0,gfje00,jzje00, czrq00,czsj00, zxrq00,zxsj00,cxbz00,sfydj0,kdks00,ysks00,kdys00,kdbq00,zxks00,zxys00,flag00,djid00, jmje00,jmbz00,YEXM00,WZDWM0,GZJLH0,ZFFSBZ,YSZID0,ZXYSZ0,SJZXYS,OMXID0) select SQ_ZY_FYMX00_MXID00.NEXTVAL,Vdjh000,a.SFXMID,b.XMMC00,b.GG0000,b.DW0000,a.JJJE00,a.SL0000*a.SFCS00,round(a.JJJE00*a.SL0000*a.SFCS00,2),ZFBL00, a.ZFJE00,a.QZFJE0,a.GFJE00,(round(a.JJJE00*a.SL0000*a.SFCS00,2)-a.ZFJE00-a.GFJE00), TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'), TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'),'-','0',Yw_Row.KDKSBH,Yw_Row.YSSZKS,Yw_Row.KDYS00,Yw_Row.KDBQ00,Yw_Row.YJKSBH,nvl(Yw_Row.ZXR000,0),'1',a.ID0000, nvl(a.JMJE00,0),DECODE(NVL(a.JMJE00,0),0,'0','4'),Yw_Row.YEXM00,a.WZDWM0,a.GZJLH0,a.ZFFSBZ,Yw_Row.YSZID0 ,Yw_Row.ZXYSZ0,VSJZXYS,a.MXID00 from YJ_YWJJ00 a,BM_YYSFXM b where a.SFXMID=b.SFXMID and YJDJH0=Vyjdjh0 ; --如果原来有优惠的也要冲回来2018.05.17 ZYSF-20171020-001 insert into ZY_FYMX00(MXid00,djh000,xmbh00,xmmc00,xmgg00,xmdw00,xmdj00,xmsl00,hjje00,ZFBL00, zfje00,QZFJE0,gfje00,jzje00, czrq00,czsj00, zxrq00,zxsj00,cxbz00,sfydj0,kdks00,ysks00,kdys00,kdbq00,zxks00,zxys00,flag00,djid00, jmje00,jmbz00,YEXM00,WZDWM0,GZJLH0,ZFFSBZ,ZXYSZ0,SJZXYS) select SQ_ZY_FYMX00_MXID00.NEXTVAL,Vdjh000,a.XMBH00,a.XMMC00,a.XMGG00,a.XMDW00,a.XMDJ00,-a.XMSL00,-a.HJJE00,a.ZFBL00, -a.ZFJE00,-a.QZFJE0,-a.GFJE00,-jzje00, TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'), TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'),'-','0',kdks00,ysks00,kdys00,a.kdbq00,a.zxks00,a.zxys00,'1',a.DJID00, a.jmje00,a.jmbz00,a.YEXM00,a.WZDWM0,a.GZJLH0,ZFFSBZ,a.ZXYSZ0,VSJZXYS from ZY_FYMX00 a where a.MXID00 in(select YHMXID from YJ_YWJJ00 b,ZY_FYYHMX c where YJDJH0=Vyjdjh0 and b.MXID00=c.MXID00 and c.YXBZ00='1'); update ZY_FYYHMX set YXBZ00='0',CXBZ00='-' where MXID00 in(select MXID00 from YJ_YWJJ00 where YJDJH0=Vyjdjh0 and YXBZ00='1') ; --2016.04.13 daihq add 调用智业高值耗材接口 莆田附属医院 if trim(lsSSHJSFQYGZHCJK)='Y' then for VR in (select A.SFXMID,A.SL0000,A.WZDWM0,A.GZJLH0, (select MXID00 from ZY_FYMX00 C where C.DJH000=Vdjh000 and C.XMBH00=B.SFXMID and C.GZJLH0=A.GZJLH0 and rownum=1) MXID00 from YJ_YWJJ00 A,BM_YYSFXM B where A.SFXMID = B.SFXMID and A.YJDJH0=Vyjdjh0 and A.WZDWM0 is not null ) loop SP_SS_GZHCJK(VR.SFXMID,1,VR.WZDWM0,VR.GZJLH0,'1',Yw_Row.ZYGHID,Yw_Row.ZYHGHH,Ls_Czyxm0,PCZYKS0,Vdjh000,VR.MXID00,lsSFJGSM,lvSFSFCG); if lvSFSFCG=-1 then Perrmsg:=substrb(lsSFJGSM,1,240); return 0; end if; end loop; end if; select brfb00,jflbid into ld_fbbh00,ld_jflbid from zy_brfy00 where djh000=Yw_Row.SFDJH0; SP_ZY_UPDATE_DBZFY0(Yw_Row.ZYGHID,Vdjh000,'N',LS_DBZCWF,LS_DBZHCF);--修改超标床位费和除外耗材费 SP_BQ_CREATEKDSJ(Vdjh000,Vyjdjh0,pczy000,pczyks0,4); insert into ZY_BRFY00(djh000, zyid00,zyh000,jflbid ,brid00 ,xm0000 , brfb00,hjje00,zfje00,QZFJE0,gfje00,jzje00, czrq00,czsj00, czy000,czyxm0,czyks0,cxdjh0,cxpjr0,cxyy00,YEXM00,DBZCWF,DBZHCF,ZXYSZ0) select Vdjh000,Yw_Row.ZYGHID,Yw_Row.ZYHGHH,ld_jflbid,Yw_Row.BRID00,Yw_Row.BRXM00, ld_fbbh00,sum(HJJE00),sum(ZFJE00),sum(QZFJE0),sum(GFJE00),sum(JZJE00), TO_CHAR(sysdate,'YYYYMMDD'),TO_CHAR(sysdate,'HH24:MI:SS'), Pczy000,Ls_Czyxm0,PCZYKS0,Yw_Row.SFDJH0,Ls_Czyxm0,'医技项目冲销',Yw_Row.YEXM00,sum(nvl(DBZCWF,0)) ,sum(nvl(DBZHCF,0)) ,Yw_Row.ZXYSZ0 from ZY_FYMX00 where DJH000=Vdjh000; --判断是否存在重复退费 Vcounter:=SF_BQ_PDCFTF(Vdjh000,Yw_Row.ZYGHID); if Vcounter>0 then --rollback; Perrmsg:='存在重复退费'; return 0; --Raise Ecustom; end if; end if; --自动退诊疗费的同时,也自动退诊疗项目带出的处方 if (Yw_Row.ZLDCCF is not null) and Pmxxmid=-1 then select ZLDCCF into Vzldccf from YJ_YW0000 where YJDJH0=Vyjdjh0; for i in 0..1 loop if (instrb(Vzldccf,',')<>0) then if i=0 then Vcflsh2:=substrb(trim(Vzldccf),1,instrb(trim(Vzldccf),',')-1); end if; if i=1 then Vcflsh2:=substrb(trim(Vzldccf),instrb(trim(Vzldccf),',')+1); end if; else if i=0 then Vcflsh2:=trim(Vzldccf); end if; if i=1 then Vcflsh2:='0'; end if; end if; if Vcflsh2<>'0' then SP_YJ_ZLDCCF_TF0000(Vcflsh2,Yw_Row.MZZYBZ,PCZY000); end if ; end loop; end if; if substr(trim(lsSSHJSFQYGZHCJK),1,1)='F' and Yw_Row.MZZYBZ='1' and nvl(Vdjh000,0)>0 then LS_SQL:='begin SP_HRPJK_GZHCCX(:v1,:v2,:v3,:v4); end;'; execute immediate LS_SQL using in PYJDJH0,in Vdjh000,in VYJDJH0,out LS_ZXJG00; if LS_ZXJG00='1' then raise Ecustom; end if; begin execute immediate 'begin SP_HRPJK_WZCK00('||Vdjh000||','||Vyjdjh0||'); end; '; exception when others then Vcounter:=0; end; end if; if VYJDJH0>0 and VFSWBJKSJ='Y' then --VXMZT00:='3'; --SP_JK_INSJKB0(YW_ROW.MZZYBZ,YW_ROW.ZYGHID,YW_ROW.BRID00,null,null,VDJH000,VYJDJH0,'1',YW_ROW.XMZT00,PCZY000,PCZYKS0,YW_ROW.YJDJH0,null); begin execute immediate 'begin SP_JK_INSJKB0('||YW_ROW.MZZYBZ||','||YW_ROW.ZYGHID||','||YW_ROW.BRID00||',null,null,'||VDJH000||','||PYJDJH0||',''1'','||YW_ROW.XMZT00||','||PCZY000||','||PCZYKS0||','||YW_ROW.YJDJH0||',null); end; '; exception when others then Vcounter:=0; end; end if; return 1; exception when Ecustom then raise; when no_data_found then raise; when others then raise; rollback; end SF_YJ_YWCX00_CXSL00;