prompt 75.1、保存南平医保日清单发送的结果信息对应的存储过程 SP_ZY_NPYBFS_YBJG00 create or replace procedure SP_ZY_NPYBFS_YBJG00 ( ad_brid00 in number, ad_ZYID00 in number, --住院ID ad_qsdjh0 in number, ad_zzdjh0 in number, as_ybfsdh in char, --日清单日期 ad_grzfe0 in number, --个人支付额 ad_grzhzf in number, ad_tcjjzf in number, ad_sbgrzh in number, ad_sbtcjj in number, ad_hjje00 in number, ad_dbgrzf in number, --大病保险(商业保险)个人现金支付额 ad_Gsjjzf in number, --工伤统筹基金支付 ad_Gszfje in number, --工伤个人自付(个人按比例自付部分) ad_Fgsfy0 in number, --非工伤费用 ad_bjjjzf in number, --保健基金支付 ad_gwybz0 in number, --公务员补助 ad_sybxzf in number, --商业保险支付 ad_fybfy0 in number, --非医保金额 ad_ylzfje in number, --乙类药品自负金额 ad_cfdxje in number, --超封顶线金额 ad_sbzfe0 in number, --商保基金支付 ad_bjzfe0 in number, --保健基金支付 ad_grzhye in number, --医保个人账户余额 ad_YPWQZF in number, --药品完全支付 ad_YPBFZF in number, --药品部分支付 ad_XMWQZF in number, --项目完全支付 ad_XMBFZF in number, --项目部分支付 as_BJJBIE in char , --保健级别 as_YBJZRQ in char , --医保记账日期 as_YBJZSJ in char , --医保记账时间 as_TSBZBH in char , --医保特殊病种编号 ad_YBYL01 in number default 0, --医保预留01 --民政救助总额 ad_YBYL02 in number default 0, --医保预留02 --计生救助总额 ad_YBYL03 in number default 0, --医保预留03 --残联救助总额 ad_YBYL04 in number default 0, --医保预留04 单病种限额 ad_YBYL05 in number default 0, --医保预留05 医院支付(医保无返回) ad_YBYL06 in number default 0, --医保预留06 低保基金支付 ad_YBYL07 in number default 0, --医保预留07 一般诊疗费补偿金额 ad_YBYL08 in number default 0, --医保预留08 一般诊疗费费个人支付金额 ad_YBYL09 in number default 0, --医保预留09 特殊门诊起付线累计 ad_YBYL10 in number default 0, --医保预留00 特殊门诊基金累计 ad_YBYL11 in number default 0, --医保预留11 费用明细总金额 ad_YBYL12 in number default 0, --医保预留12 医保自付金额 ad_YBYL13 in number default 0, --医保预留13 ad_CFXMS0 in number default 0, --本次住院处方项目总数 od_ybzfje out number, --个人自付合计 od_ybzhzf out number, --医保账户支付合计 od_ybjjzf out number, --医保基金支付合计 as_YHMSG0 OUT VARCHAR, --存储过程提示的错误信息 as_SYSMSG OUT VARCHAR, --系统提示的错误信息 as_DBZBM0 in char default '', --单病种编码 as_DBZMC0 in char default '' --单病种名称 ) as ls_CZRQ00 char(8); ls_CZSJ00 char(8); --ls_YBBHHS char(1); ls_YBBHSB IC_YBBRLB.YBBHSB%TYPE; ls_YBID00 varchar2(30); ls_YBKH00 varchar2(30); ad_YBYL00 ZY_JZB000.YBYL01%TYPE; --医保其他基金支付 LS_SFXNH0 IC_YBBRLB.SFXNH0%TYPE; LS_DBZJK0 varchar2(100); LS_HJJE00 number(12,4); LS_BCBXF0 number(12,4); LS_YBYL04 number(12,4); LS_YBYL05 number(12,4); LS_SFQYBZ varchar2(10);--单病种启用 1:启用 0:不启用 LS_DBZBM0 ZY_BRXXB0.DBZBM0%TYPE; LS_DBZMC0 ZY_BRXXB0.DBZMC0%TYPE; LS_DBZBL0 ZY_BRXXB0.DBZBL0%TYPE; LS_CSLX00 ZY_BRXXB0.CSLX00%TYPE; LS_GRZFJE number(12,4);--个人支付金额 LS_YPWQZF number(12,2);--药品完全支付 LS_YPBFZF number(12,2);--药品部分支付 LS_XMWQZF number(12,2);--项目完全支付 LS_XMBFZF number(12,2);--项目部分支付 -- Person Date Comments -- ZHR 2009.12.27 增加医保其他字段 -- qks 2010.12.02 增加ad_YBYL01--ad_YBYL13以及ad_BCBXF0,ad_ls_CFXMS0共15个传入参数 --zhangyc 2012.10.25 增加参数(ZY_YBDBZJSJK)控制是否启用单病种 医院支付(YBYL05)=单病种定额(bcbxf0)-费用明细总额(YBYL11) by ZYSF-20121025-001 --zhangyc 2013.10.10 增加单病种结算功能 by ZYSF-20131011-001 --zhangyc 2014.04.03 ad_YBYL13(大病补偿金额)不包含在统筹中独立出来 by ZYSF-20140403-001 --dsm 2015.01.22 修改YBYZF0时要加JZDH00=0 for ZYSF-20150107-002 --zhangyc 2015.02.27 参数ZY_YBDBZJSJK='Q',新农合病人统筹+个人>总费用 按单病种结算方式处理 by ZYSF-20150226-001 --zhangyc 2015.12.23 修正ad_YPWQZF,ad_YPBFZF,ad_XMWQZF,ad_XMBFZF四个字段取值方式 by ZYSF-20150925-001 --zhangyc 2016.05.13 增加入参as_DBZBM0 by ZYSF-20160510-001 --zhangyc 2016.07.08 增加行政区号对应单病种处理 by ZYSF-20160623-002 --zhangyc 2016.09.06 单病种支付修改 by ZYSF-20160901-001 --zhangyc 2017.07.07 修改商保统筹或商保账户支付根据 IC_YBBRLB.YBBHSB=14 判断 BEGIN ls_CZRQ00 := to_char(sysdate,'YYYYMMDD'); ls_CZSJ00 := to_char(sysdate,'HH24:MI:SS'); LS_HJJE00 :=ad_hjje00; LS_BCBXF0 :=ad_hjje00; --该过程前台ad_hjje00是取医保接口bcbxf0 LS_YBYL04 :=ad_YBYL04; LS_YBYL05 :=ad_YBYL05; begin LS_YPWQZF:=ad_YPWQZF;--药品完全支付 exception when others then LS_YPWQZF:=0; end; if nvl(LS_YPWQZF,0)>nvl(AD_HJJE00,0) then LS_YPWQZF:=0; end if; begin LS_YPBFZF:=ad_YPBFZF;--药品部分支付 exception when others then LS_YPBFZF:=0; end; if nvl(LS_YPBFZF,0)>nvl(AD_HJJE00,0) then LS_YPBFZF:=0; end if; begin LS_XMWQZF:=ad_XMWQZF;--项目完全支付 exception when others then LS_XMWQZF:=0; end; if nvl(LS_XMWQZF,0)>nvl(AD_HJJE00,0) then LS_XMWQZF:=0; end if; begin LS_XMBFZF:=ad_XMBFZF;--项目完全支付 exception when others then LS_XMBFZF:=0; end; if nvl(LS_XMBFZF,0)>nvl(AD_HJJE00,0) then LS_XMBFZF:=0; end if; select Trim(nvl(max(value0),'N')) into LS_DBZJK0 from xt_xtcs00 where name00='ZY_YBDBZJSJK'; select trim(c.YBBHSB),trim(b.YBKH00),trim(d.YBID00),trim(SFXNH0),b.DBZBM0,b.DBZMC0,b.DBZBL0,b.CSLX00 into ls_YBBHSB,ls_YBKH00,ls_YBID00,LS_SFXNH0,LS_DBZBM0,LS_DBZMC0,LS_DBZBL0,LS_CSLX00 from ZY_BRXXB0 b,IC_YBBRLB c,BM_BRXXB0 d where b.ZYID00=ad_ZYID00 and c.FBBH00=b.FBBH00 and c.YBLB00=b.YBLB00 and b.BRID00=d.BRID00; select substrb(SF_ZY_DBZJBXX('0',ad_ZYID00,0),1,1) into LS_SFQYBZ from dual; /* if (LS_SFQYBZ='0') or (ad_YBYL12=0) or (ad_YBYL04=0) then --非单病种结算时 LS_DBZBM0:=''; LS_DBZMC0:=''; LS_DBZBL0:=''; end if; */ select decode(sign(Instrb(','||ls_YBBHSB||',',',1,')),1,ad_YBYL01,0)+ --民政救助 decode(sign(Instrb(','||ls_YBBHSB||',',',2,')),1,ad_YBYL02,0)+ --计生救助 decode(sign(Instrb(','||ls_YBBHSB||',',',3,')),1,ad_YBYL03,0)+ --残联救助 --decode(sign(Instrb(','||ls_YBBHSB||',',',4,')),1,ad_YBYL04,0)+ --单病种限额 --decode(sign(Instrb(','||ls_YBBHSB||',',',5,')),1,ad_YBYL05,0)+ --医院支付(医保无返回) decode(sign(Instrb(','||ls_YBBHSB||',',',4,')),1,0,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',5,')),1,0,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',6,')),1,ad_YBYL06,0)+--低保基金支付 decode(sign(Instrb(','||ls_YBBHSB||',',',7,')),1,ad_YBYL07,0)+--一般诊疗费补偿金额 decode(sign(Instrb(','||ls_YBBHSB||',',',8,')),1,ad_YBYL08,0)+--一般诊疗费费个人支付金额 decode(sign(Instrb(','||ls_YBBHSB||',',',9,')),1,ad_YBYL09,0)+--特殊门诊起付线累计 decode(sign(Instrb(','||ls_YBBHSB||',',',10,')),1,ad_YBYL10,0)+ --特殊门诊基金累计 --decode(sign(Instrb(','||ls_YBBHSB||',',',11,')),1,ad_YBYL11,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',11,')),1,0,0)+ --费用明细总金额 --decode(sign(Instrb(','||ls_YBBHSB||',',',12,')),1,ad_YBYL12,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',12,')),1,0,0)+ --医保自付金额 --decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,ad_YBYL13,0) decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,0,ad_YBYL13) --2014.04.03 into ad_YBYL00 from dual; --if ls_YBBHHS='Y' then if Instrb(','||LS_YBBHSB||',',',14,')>0 then --统筹中是否包含商宝 od_ybzfje := LS_BCBXF0 - ad_tcjjzf - ad_grzhzf - ad_bjjjzf - ad_sybxzf - ad_YBYL00; od_ybzhzf := ad_grzhzf + ad_sybxzf; od_ybjjzf := ad_tcjjzf + ad_bjjjzf + ad_YBYL00; else od_ybzfje := LS_BCBXF0 - ad_tcjjzf - ad_grzhzf - ad_sbgrzh - ad_sbtcjj - ad_bjjjzf - ad_sybxzf - ad_YBYL00; od_ybzhzf := ad_grzhzf + ad_sbgrzh + ad_sybxzf; od_ybjjzf := ad_tcjjzf + ad_sbtcjj + ad_bjjjzf + ad_YBYL00; end if; /* dbgrzf 大病个人支付额,是指超过基本医疗保险最高封顶线后的费用,目前是让病人先自付后再到医保中心报销,因此这一部份金额也是要医院跟病人收现金的,也就是说,医院与病人清算的范围是grzfe0与dbgrzf,其他的(zhzfe0,jjzfe0)都是与医保中心进行结算。 Dbjjzf 大病账户支付额,部分地区包含Zhzfe0帐户支付额中,部分地区没有 Dbzhzf 大病基金支付额,部分地区包含在Jjzfe0基金支付额,部分地区没有 bjjjzf 保健基金支付额(后面好像撤销了),厦门医保接口增加,包含在医保个人支付额(grzfe0)中, 病人应支付给医院的费用为医保个人支付额(grzfe0)减去保健基金支付额(bjjjzf)。 Gwybz0 公务员补助,泉州地区不包含在Jjzfe0内,由医保机构再支付,其他地区包含在Jjzfe0内 sybxzf 商业保险支付, 厦门医保接口增加,不包含在Jjzfe0内,由医保机构支付 sbzfe0:商保基金支付,省属三家市属九家医疗机构医院接口增加,包含在Jjzfe0内, 铁保除外 bjzfe0:保健基金支付,省属三家市属九家医疗机构医院接口增加,包含在Jjzfe0内,铁保除外。 bcyljz 民政救助总额,新农合增加,包含在了基金支付额Jjzfe0内 jsjzze 计生救助总额,新农合增加,包含在了基金支付额Jjzfe0内 cljzze 残联救助总额,新农合增加,包含在了基金支付额Jjzfe0内 */ --/* ------------------单病种处理--YBYL11:费用明细总额 YBYL05:医院支付 BCBXF0:单病种定额------------------begin------------------ --ZY_YBDBZJSJK=Y:医保病人启用(农合病人除外) M:农合病人启用(医保病人除外) YM:医保和农合都启用 N:医保和农合病人都不启用 if ((LS_DBZJK0='Y') and (LS_SFXNH0<>'1')) or ((LS_DBZJK0='M') and (LS_SFXNH0='1')) or (LS_DBZJK0='YM') then if nvl(ad_YBYL11,0)<>0 then LS_HJJE00:=nvl(ad_YBYL11,0); end if; od_ybzfje:=ad_grzfe0+ad_dbgrzf-ad_bjjjzf; LS_YBYL05:=LS_BCBXF0-LS_HJJE00; end if; ------------------单病种处理--YBYL11:费用明细总额 YBYL05:医院支付 BCBXF0:单病种定额------------------end------------------ if (LS_SFQYBZ='1') and (LS_DBZBM0 is not null) and (LS_BCBXF0>=ad_YBYL04) then --总费用》=病种限额 od_ybzfje:=ad_grzfe0; end if; if (LS_SFQYBZ='1') and (LS_DBZBM0 is not null) and (LS_BCBXF0=0 then --未超额时如果医院支付大于0 个人支付按原来算 od_ybzfje:=od_ybzfje; else od_ybzfje:=ad_grzfe0; end if; end if; --2015.02.13 if (LS_DBZJK0='Q') and (LS_SFXNH0='1') then if LS_BCBXF0<>ad_tcjjzf+ad_grzhzf+ad_grzfe0 then od_ybzfje:=ad_grzfe0; LS_YBYL05:=LS_BCBXF0-(ad_tcjjzf+ad_grzhzf+ad_grzfe0); LS_YBYL04:=ad_tcjjzf+ad_grzhzf+ad_grzfe0; if nvl(LS_YBYL05,0)>=0 then --有医院支付时,把医院支付累加到个人支付中 od_ybzfje:=ad_grzfe0+nvl(LS_YBYL05,0); else od_ybzfje:=ad_grzfe0; end if; end if; end if; -- */ --单病种 by ZYSF-20160510-001 LS_DBZBM0:=as_DBZBM0; LS_DBZMC0:=as_DBZMC0; if trim(LS_DBZBM0) is not null then if (SF_ZY_DBZXZQH(ad_ZYID00)='1') and (ad_YBYL04>ad_hjje00) then --0:不启用 1:启用 od_ybzfje:=ad_grzfe0; LS_YBYL04:=ad_YBYL04; LS_YBYL05:=ad_YBYL05; else LS_YBYL05:=LS_BCBXF0-(ad_tcjjzf+ad_grzhzf+ad_grzfe0); LS_YBYL04:=ad_tcjjzf+ad_grzhzf+ad_grzfe0; if nvl(LS_YBYL05,0)>=0 then --有医院支付时,把医院支付累加到个人支付中 od_ybzfje:=ad_grzfe0+nvl(LS_YBYL05,0); else od_ybzfje:=ad_grzfe0; end if; end if; --ZY_DBZYYZF:住院单病种结算病种差额(医院支付)是否由病人实际支付 Y:病人支付 N:医院支付 默认值:Y if SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N' then --by ZYSF-20160901-001 od_ybzfje:=ad_grzfe0; end if; end if; insert into ZY_YBFS00(BRID00,ZYID00,QSDJH0,ZZDJH0,YBFSDH,FSRQ00,FSSJ00,GRZFE0,GRZHZF,TCJJZF, SBGRZH,SBTCJJ,HJJE00,DBGRZF,GSJJZF,GSZFJE,FGSFY0,BJJJZF,GWYBZ0,SYBXZF, FYBFY0,YLZFJE,CFDXJE,SBZFE0,BJZFE0,GRZHYE,YPWQZF,YPBFZF,XMWQZF,XMBFZF, ZFJE00,GRZHHJ,TCJJHJ,CXBZ00,YBID00,YBKH00,BJJBIE,YBJZRQ,YBJZSJ,TSBZBH, YBYL01,YBYL02,YBYL03,YBYL04,YBYL05,YBYL06,YBYL07,YBYL08,YBYL09,YBYL10, YBYL11,YBYL12,YBYL13,CFXMS0,BCBXF0,DBZBM0,DBZMC0,DBZBL0,CSLX00) values(ad_brid00,ad_ZYID00,ad_qsdjh0,ad_zzdjh0,as_ybfsdh,ls_CZRQ00,ls_CZSJ00,ad_grzfe0,ad_grzhzf,ad_tcjjzf, ad_sbgrzh,ad_sbtcjj,LS_HJJE00,ad_dbgrzf,ad_Gsjjzf,ad_Gszfje,ad_Fgsfy0,ad_bjjjzf,ad_gwybz0,ad_sybxzf, ad_fybfy0,ad_ylzfje,ad_cfdxje,ad_sbzfe0,ad_bjzfe0,ad_grzhye,LS_ypwqzf,LS_ypbfzf,LS_xmwqzf,LS_xmbfzf, od_ybzfje,od_ybzhzf,od_ybjjzf,'0',ls_YBID00,ls_YBKH00,as_BJJBIE,as_YBJZRQ,as_YBJZSJ,as_TSBZBH, ad_YBYL01,ad_YBYL02,ad_YBYL03,LS_YBYL04,LS_YBYL05,ad_YBYL06,ad_YBYL07,ad_YBYL08,ad_YBYL09,ad_YBYL10, ad_YBYL11,ad_YBYL12,ad_YBYL13,ad_CFXMS0,LS_BCBXF0,LS_DBZBM0,LS_DBZMC0,LS_DBZBL0,LS_CSLX00); update ZY_BRFY00 set YBFSDH=as_ybfsdh where DJH000>=ad_qsdjh0 and DJH000<=ad_zzdjh0 and ZYID00=ad_zyid00 and YBFSDH='0'; update ZY_BRZHXX a set (YBYJS0,YBYZF0,YBZFJE)=(select nvl(sum(HJJE00),0), nvl(sum(GRZHHJ+TCJJHJ),0), nvl(sum(ZFJE00),0) from ZY_YBFS00 a where a.ZYID00=ad_ZYID00 and a.CXBZ00='0' and JZDH00=0) --add JZDH00=0 for ZYSF-20150107-002 where BRID00=ad_brid00; commit; EXCEPTION WHEN OTHERS THEN as_YHMSG0:='出错原因未知!请记录此信息并和系统管理员联系!'; as_SYSMSG:=substr(SQLERRM||'执行存储过程错误:SP_ZY_NPYBFS_YBJG00',1,150); ROLLBACK; END; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prompt 11、住院病人的中途结算 SP_ZY_BRFY00_JS0000 create or replace procedure SP_ZY_BRFY00_JS0000 ( as_QSDJH0 in number, as_ZZDJH0 in number, ad_ZYID00 in number, --病人住院信息表ID ad_JZY000 in number, --结账操作员编码 as_JZYXM0 in char, --结账操作员姓名 as_JMYY00 in varchar2, --减免原因 as_YJJXH0 in char, --打印在发票上的序号 as_CZBZ00 in char, --结算标志,'0':中途结算,'1':出院结算 as_SFYB00 in char, --是否呆账结算 as_JFDJHS in char, --本次结算所使用的预交金的对应的交费单据号 as_JSZZRQ in char, --中途结算截止日期 as_TSBZBH in char, --结算的特殊病种编号 ad_XJDJH0 out number, --病人现金的退款单据号 ad_ZZDJH0 out number, --病人转账的退款单据号 ad_XJYE00 out number, --病人账户上的现金余额 ad_ZZYE00 out number, --病人账户上的转账余额 ad_JZDH00 out number, --病人结账单号 as_YHMSG0 out varchar, --存储过程提示的错误信息 as_SYSMSG out varchar, --系统提示的错误信息 as_DBZBM0 in char default '', --单病种编码 as_DBZMC0 in char default '' --单病种名称 ) as ls_PJH000 ZY_PJSYQK.PJH000%TYPE; --票据流水号 ls_PJH001 ZY_PJSYQK.PJH000%TYPE; --票据流水号 ls_TMPPJH ZY_PJSYQK.PJH000%TYPE; --临时使用的票据号 ls_FZPJH0 ZY_PJSYQK.PJH000%TYPE; ls_SFXMID BM_YYSFXM.SFXMID%TYPE; --收费项目ID ls_CYQKJE ZY_BRZHXX.ZYE000%TYPE; --病人账户总余额 ls_XJJFJE ZY_BRJFB0.JFJE00%TYPE; --病人现金交费金额 ls_ZZJFJE ZY_BRJFB0.JFJE00%TYPE; --病人转账交费金额 ls_SFJSDW IC_YBBRLB.SFJSDW%TYPE; --是否结算单位标志 ls_GRZHZF ZY_JZB000.GRZHZF%TYPE; --个人医疗账户支付(医保返回) ls_TCJJZF ZY_JZB000.TCJJZF%TYPE; --统筹基金支付(医保返回) ls_SBGRZH ZY_JZB000.GRZHZF%TYPE; --商保个人医疗账户支付(医保返回) ls_SBTCJJ ZY_JZB000.TCJJZF%TYPE; --商保统筹基金支付(医保返回) ls_BJJJZF ZY_JZB000.TCJJZF%TYPE; --保健基金支付(医保返回) ls_SYBXZF ZY_JZB000.TCJJZF%TYPE; --商业保险支付(医保返回) ls_gwybz0 ZY_JZB000.gwybz0%TYPE; LS_ZFJE00 ZY_JZB000.ZFJE00%TYPE; ls_YBYL01 ZY_JZB000.YBYL01%TYPE; --医保预留01 --民政救助总额 ls_YBYL02 ZY_JZB000.YBYL01%TYPE; --医保预留02 --计生救助总额 ls_YBYL03 ZY_JZB000.YBYL01%TYPE; --医保预留03 --残联救助总额 ls_YBYL04 ZY_JZB000.YBYL01%TYPE; --医保预留04 ls_YBYL05 ZY_JZB000.YBYL01%TYPE; --医保预留05 ls_YBYL06 ZY_JZB000.YBYL01%TYPE; --医保预留06 ls_YBYL07 ZY_JZB000.YBYL01%TYPE; --医保预留07 ls_YBYL08 ZY_JZB000.YBYL01%TYPE; --医保预留08 ls_YBYL09 ZY_JZB000.YBYL01%TYPE; --医保预留09 ls_YBYL10 ZY_JZB000.YBYL01%TYPE; --医保预留00 ls_YBYL11 ZY_JZB000.YBYL01%TYPE; --医保预留11 ls_YBYL12 ZY_JZB000.YBYL01%TYPE; --医保预留12 ls_YBYL13 ZY_JZB000.YBYL01%TYPE; --医保预留13 ls_BCBXF0 ZY_JZB000.BCBXF0%TYPE; --本次住院医疗费总额 ls_CFXMS0 ZY_JZB000.CFXMS0%TYPE; --本次住院处方项目总数 ls_HJJE00 ZY_BRFY00.HJJE00%TYPE; --合计金额 ls_HJZFJE ZY_BRFY00.ZFJE00%TYPE; --自付金额 ls_JZJE00 ZY_BRFY00.JZJE00%TYPE; --记帐金额 ls_GFJE00 ZY_BRFY00.GFJE00%TYPE; --公费金额 ls_SSWR00 ZY_BRFY00.HJJE00%TYPE; --四舍五入金额 ls_HSHJJE ZY_BRFY00.HJJE00%TYPE; --伙食合计金额 ls_JMJE00 ZY_BRFY00.HJJE00%TYPE; --减免金额 ls_TEMPJE ZY_BRFY00.HJJE00%TYPE; --临时变量金额 ls_CYYTK0 ZY_BRZHXX.ZYE000%TYPE; --出院应退款 ls_YBZHYE ZY_BRFY00.HJJE00%TYPE; --医保个人账户余额 ld_BRID00 BM_BRXXB0.BRID00%TYPE; --病人ID ls_ZPH000 ZY_BRJFB0.ZPH000%TYPE; ls_ZPKHYH ZY_BRJFB0.ZPKHYH%TYPE; ls_ZPDWMC ZY_BRJFB0.ZPDWMC%TYPE; ls_PLBH00 BM_PJLXB0.PLBH00%TYPE; ls_FBBH00 BM_BRXXB0.FBBH00%TYPE; ls_XM0000 ZY_BRXXB0.XM0000%TYPE; ls_XB0000 ZY_BRXXB0.XB0000%TYPE; ls_BQH000 ZY_BRXXB0.DQBQ00%TYPE; ls_FYQSRQ ZY_JZB000.FYQSRQ%TYPE; ls_FYJZRQ ZY_JZB000.FYJZRQ%TYPE; ls_JZMX00 ZY_JZMX00%ROWTYPE; ls_TMPDJH VARCHAR2(20); ls_COUNT0 NUMBER(10); ls_JFDJHS VARCHAR2(2000); ls_CZRQ00 CHAR(8); ls_CZSJ00 CHAR(8); ls_SSWUTSCL char(1); LS_SFCFFP char(1); --是否拆分发票 LS_ZY_FFJJ CHAR(1); ZY_JSTKAYJJFS char(1); ls_YJJPJ0 char(1); ls_ZFQFJS char(1); --是否允许(自费病人)欠费情况下直接出院结算并补交余额,非逃跑结算 --ls_YBBHSB char(1); ls_YBBHSB IC_YBBRLB.YBBHSB%TYPE; ad_YBYL00 ZY_JZB000.YBYL01%TYPE; --医保其他基金支付 LS_DBZJK0 varchar2(100); LS_SFXNH0 IC_YBBRLB.SFXNH0%TYPE; LS_SFDBZ0 varchar2(1);--是否单病种结算 Y:是 N:否 --ls_YBZXLB IC_YBBRLB.YBZXLB%TYPE; --ls_YBLB00 IC_YBBRLB.YBLB00%TYPE; --ls_YBBRLB BM_BRXXB0.YBBRLB%TYPE; ls_YBZXLB ZY_BRXXB0.ybzxlb%TYPE; ls_YBBRLB ZY_BRXXB0.ybbrlb%TYPE; ls_YBLB00 ZY_BRXXB0.yblb00%TYPE; LS_SFQYBZ varchar2(10);--单病种启用 1:启用 0:不启用 LS_DBZBM0 ZY_BRXXB0.DBZBM0%TYPE; LS_DBZMC0 ZY_BRXXB0.DBZMC0%TYPE; LS_DBZBL0 ZY_BRXXB0.DBZBL0%TYPE; LS_CSLX00 ZY_BRXXB0.CSLX00%TYPE; LS_GRZFJE number(12,4);--个人支付金额 LS_CYJSLX char(1);--出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 LS_SBGRZH_TEMP00 ZY_JZB000.GRZHZF%TYPE; --商保个人医疗账户支付(医保返回) LS_SBTCJJ_TEMP00 ZY_JZB000.TCJJZF%TYPE; --商保统筹基金支付(医保返回) CURSOR CUR_ZY_JZMX00_ZFBL00 IS SELECT * from ZY_JZMX00 where JZDH00 = ad_JZDH00 AND nvl(ZFBL00,1)<>0 and SFYLXM='Y' order by ZFBL00; -- MODIFICATION HISTORY -- Person Date Comments -- xzw 2007.06.20 传递参数增加保健基金单据流水号; -- jlg 2007.08.07 增加商业保险支付金额的处理ZYSF-20070806-004 -- ZHR 2008.03.26 农合和医保病人,写入zy_pjsyqk时,ZZJE00应该为0 -- zhr 2009.09.06 允许(自费病人)欠费情况下直接出院结算并补交余额,非逃跑结算 -- zhr 2009.10.29 判定病人未结的费用主表和清单明细表是否一致 -- zhr 2009.12.27 过程做了较大调整,医保的发送记录全部写入ZY_YBFS00 -- qks 2009.12.29 伙食费用有往医保发送,不参与 发送给医保总费用<>院内总费用 判断 -- yangy 2010.03.09 医保病人允许欠费结算 -- zhr 2010.03.10 脚本做了整理 -- zhr 2010.03.10 填写ZY_JZB000的医保账户余额 -- yangy 2010.03.30 出院应收款变成负数 -- zhr 2010.03.31 脚本做了整理 -- zhr 2010.05.07 个人自付部分如果<0,要报错保护。 -- yangy 2010.07.02 呆账病人出院结算,如果病人有欠费无法进行结算 -- zhangwz 2010.07.07 变量 ls_COUNT0 由 NUMBER(5) 变更为 NUMBER(10). -- qks 2010.12.06 表ZY_YBFS00以及ZY_JZB000增加15个字段 YBYL01--YBYL13,以及BCBXF0、CFXMS0;结帐表保留SBGRZH,SBTCJJ值 --zhangyc 2012.10.25 表ZY_YBFS00增加字段BCBXF0 by ZYSF-20121025-001 --zhangyc 2013.04.17 ZY_JZB000增加字段YBZXLB BY ZYSF-20130417-001 --zhangyc 2013.10.10 增加单病种结算功能 by ZYSF-20131011-001 --zhangyc 2014.04.03 ad_YBYL13(大病补偿金额)不包含在统筹中独立出来 by ZYSF-20140403-001 --zhangyc 2014.05.21 修改ls_YBZXLB,ls_YBBRLB,ls_YBLB00变量取值 by ZYSF-20140521-001 --zhangyc 2015.02.27 参数ZY_YBDBZJSJK='Q',新农合病人统筹+个人>总费用 按单病种结算方式处理 by ZYSF-20150226-001 --zhangyc 2015.10.08 显示公务员补助 by ZYSF-20151008-001 --zhangyc 2015.10.28 修正插入GWYBZ0为空 报错 by ZYSF-20151015-002 --zhangyc 2015.11.10 增加字段ZY_JZB000.CYJSLX 出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 by ZYSF-20151106-001 --zhangyc 2016.05.13 增加入参as_DBZBM0 by ZYSF-20160510-001 --zhangyc 2016.07.08 增加行政区号对应单病种处理 by ZYSF-20160623-002 --zhangyc 2016.09.06 单病种支付修改 by ZYSF-20160901-001 --zhangyc 2016.10.13 增加SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N'判断 by ZYSF-20161013-001 --zhangyc 2017.07.07 修改商保统筹或商保账户支付根据 IC_YBBRLB.YBBHSB=14 判断 BEGIN ls_CZRQ00 := to_char(sysdate,'YYYYMMDD'); ls_CZSJ00 := to_char(sysdate,'HH24:MI:SS'); ls_CYQKJE := 0; --余额 ls_CYYTK0 := 0; ls_GRZHZF := 0; ls_TCJJZF := 0; ls_SBGRZH := 0; ls_SBTCJJ := 0; ls_BJJJZF := 0; ls_SYBXZF := 0; ls_XJJFJE := 0; ls_ZZJFJE := 0; LS_ZFJE00 := 0; ls_SSWR00 := 0; ls_YBZHYE := 0; ls_YBYL01 := 0; ls_YBYL02 := 0; ls_YBYL03 := 0; ls_YBYL04 := 0; ls_YBYL05 := 0; ls_YBYL06 := 0; ls_YBYL07 := 0; ls_YBYL08 := 0; ls_YBYL09 := 0; ls_YBYL10 := 0; ls_YBYL11 := 0; ls_YBYL12 := 0; ls_YBYL13 := 0; ls_BCBXF0 := 0; ls_CFXMS0 := 0; LS_CYJSLX:='1'; LS_SBGRZH_TEMP00:=0; --商保个人医疗账户支付(医保返回) LS_SBTCJJ_TEMP00:=0; --商保统筹基金支付(医保返回) --出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 if as_CZBZ00='0' then --结算标志,'0':中途结算,'1':出院结算 if as_SFYB00='Y' then LS_CYJSLX:='3'; else LS_CYJSLX:='0'; end if; else if as_SFYB00='Y' then LS_CYJSLX:='4'; else LS_CYJSLX:='1'; end if; end if; select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into LS_ZY_FFJJ from XT_XTCS00 where name00='SF_ZY_FFJJ';--逢分进角 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_YJJPJ0 from XT_XTCS00 where name00 = 'ZY_YJJPJ0';--退预交金使用预交金票据 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ZY_JSTKAYJJFS from XT_XTCS00 where name00='ZY_JSTKAYJJFS';--结余款以预交金形式退出 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_SFCFFP from XT_XTCS00 where name00='SF_SFCFFP'; --公费病人是否拆分发票 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_SSWUTSCL from XT_XTCS00 where name00 = 'SF_SSWUTSCL'; select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_ZFQFJS from XT_XTCS00 where name00 = 'ZY_QFJS'; select Trim(nvl(max(value0),'N')) into LS_DBZJK0 from xt_xtcs00 where name00='ZY_YBDBZJSJK'; if trim(ls_YJJPJ0)='Y' then ls_plbh00:=8; else ls_plbh00:=4; end if; if as_SFYB00='Y' and as_CZBZ00='0' then as_YHMSG0:='中途结算不允许做呆账处理,请与系统管理员联系!'; as_SYSMSG:=''; ROLLBACK; RETURN; end if; select SFJSDW,A.FBBH00,a.BRID00,a.DQBQ00,b.YBBHSB,a.XM0000,a.XB0000,b.SFXNH0,a.ybzxlb,a.ybbrlb,a.yblb00, a.DBZBM0,a.DBZMC0,a.DBZBL0,a.CSLX00 into ls_SFJSDW,ls_FBBH00,ld_BRID00,ls_BQH000,ls_YBBHSB,ls_XM0000,ls_XB0000,LS_SFXNH0,ls_ybzxlb,ls_ybbrlb,ls_yblb00, LS_DBZBM0,LS_DBZMC0,LS_DBZBL0,LS_CSLX00 from ZY_BRXXB0 A,IC_YBBRLB B where A.FBBH00 = B.FBBH00 and A.YBLB00 = B.YBLB00 and A.ZYID00 = ad_ZYID00; --select substrb(SF_ZY_DBZJBXX('0',ad_ZYID00,0),1,1) into LS_SFQYBZ from dual; --单病种 by ZYSF-20160510-001 LS_DBZBM0:=as_DBZBM0; LS_DBZMC0:=as_DBZMC0; IF as_SFYB00 = 'Y' THEN --呆账结算 select count(*) into ls_COUNT0 from BM_BRZFFS where ZFFSBH = 9; if ls_COUNT0 <> 1 then as_YHMSG0:='系统字典表维护不完整,请先维护系统字典表BM_BRZFFS后再进行本操作,请与系统管理员联系!'; as_SYSMSG:='NOT EXISTS (select * from bm_brzffs where zffsbh = 9 )'||SQLERRM; ROLLBACK; RETURN; end if; END IF; --判定病人未结的费用主表和清单明细表是否一致2009.10.28 zhr 费别转换的数据不参与判断 SELECT nvl(max(DJH000),0) into ls_COUNT0 FROM ZY_BRFY00 a WHERE ZYID00=ad_ZYID00 and JZDH00+0=0 and HJJE00<>(SELECT nvl(SUM(HJJE00),0) FROM VW_ZY_ZYFYMX b WHERE a.DJH000=b.DJH000) and nvl(instrb(a.CXYY00,'FBZH'),0)<1 and rownum=1; if ls_COUNT0>0 then as_YHMSG0:='病人的费用异常,明细与合计的不符,请与系统管理员联系!'; as_SYSMSG:='收费单据号'||to_char(ls_COUNT0)||'的明细表与主表合计不符'; ROLLBACK; RETURN; end if; --先判断一下要结算的项目是否有对应的发票项目 select nvl(MIN(SFXMID),0) into ls_SFXMID from ZY_FYMX00 A,BM_YYSFXM C,ZY_BRFY00 D where A.XMBH00 = C.SFXMID and A.DJH000 = D.DJH000 and D.ZYID00 =ad_ZYID00 and D.JZDH00+0=0 and ((c.ZYFPID is null) or C.ZYFPID not in (select fpxmid from BM_FPXM00 )); IF ls_SFXMID > 0 THEN --若有存在没有发票项目对应的项目,则提示信息! as_YHMSG0:='病人结算操作失败,发票项目不完整,请记录本信息并与系统管理员联系!'; as_SYSMSG:='BM_YYSFXM.SFXMID='||to_char(ls_SFXMID)||'的ZYFPID的值非法!'; ROLLBACK; RETURN; END IF; --0.判断病人是否可以进行出院结算 if as_CZBZ00 = '1' then select count(*) into ls_COUNT0 from ZY_BRZHXX where BRID00 = ld_BRID00 and SFDJ00 <> '2' and JFLBID <> 0 ; if ls_COUNT0 > 1 then as_YHMSG0:='病人有多个账户,不能办理出院结算!请将其它账户结清后,再进行本操作!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; end if; --计算病人本次结算的费用总额 select NVL(sum(HJJE00),0),NVL(sum(ZFJE00),0),NVL(sum(GFJE00),0),NVL(sum(JZJE00),0),min(trim(CZRQ00)),max(trim(CZRQ00)) into ls_HJJE00,ls_HJZFJE,ls_GFJE00,ls_JZJE00,ls_FYQSRQ,ls_FYJZRQ from ZY_BRFY00 where JZDH00+0=0 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and DJH000>=as_QSDJH0 and DJH000<=as_ZZDJH0 and ZYID00 = ad_ZYID00; if ls_HJJE00<>ls_HJZFJE+ls_GFJE00+ls_JZJE00 then as_YHMSG0:='病人费用异常,请与系统管理员联系!'; as_SYSMSG:='表ZY_BRFY00.HJJE00<>ZFJE00+GFJE00+JZJE00'; ROLLBACK; RETURN; end if; --如果本次结算费用合计为0,直接UPDATE后返回 if ls_HJJE00=0 then Update ZY_BRFY00 set JZDH00=1 where JZDH00+0=0 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and DJH000>=as_QSDJH0 and DJH000<=as_ZZDJH0 and ZYID00 = ad_ZYID00; return; end if; --计算病人本次结算的伙食费用和减免费用 select nvl(sum(decode(d.SFYLXM,'Y',0,b.ZFJE00)),0),nvl(sum(decode(b.JMJE00,'3',b.JMJE00,'4',b.JMJE00,0)),0) into ls_HSHJJE,ls_JMJE00 from ZY_BRFY00 a,ZY_FYMX00 b,BM_YYSFXM c,BM_FPXM00 d where a.JZDH00+0=0 and a.DJH000=b.DJH000 and b.XMBH00=c.SFXMID and c.ZYFPID=d.FPXMID and (a.CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and a.DJH000>=as_QSDJH0 and a.DJH000<=as_ZZDJH0 and a.ZYID00 = ad_ZYID00; select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --考虑实施人员由于安装问题,与系统保留的关键值有冲突,所以故意再本处添加了如小处理 if ad_JZDH00 = 1 then select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --2 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --3 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --4 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --5 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --6 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --7 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --8 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --9 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --10 end if; --0、若医保有返回金额,还应该添加病人的交费信息或逃跑病人出院结算 IF ls_FBBH00 =3 THEN --医保病人 select count(*),nvl(sum(HJJE00),0),nvl(sum(GRZHZF),0),nvl(sum(TCJJZF),0), nvl(sum(SBGRZH),0),nvl(sum(SBTCJJ),0),nvl(sum(BJJJZF),0),nvl(sum(SYBXZF),0),nvl(sum(BCBXF0),0),nvl(sum(CFXMS0),0), nvl(sum(YBYL01),0),nvl(sum(YBYL02),0),nvl(sum(YBYL03),0),nvl(sum(YBYL04),0),nvl(sum(YBYL05),0),nvl(sum(YBYL06),0), nvl(sum(YBYL07),0),nvl(sum(YBYL08),0),nvl(sum(YBYL09),0), nvl(sum(YBYL10),0),nvl(sum(YBYL11),0),nvl(sum(YBYL12),0),nvl(sum(YBYL13),0),nvl(sum(ZFJE00),0),nvl(sum(gwybz0),0) into ls_COUNT0,ls_TEMPJE,ls_GRZHZF,ls_TCJJZF,ls_SBGRZH,ls_SBTCJJ,ls_BJJJZF,ls_SYBXZF,ls_BCBXF0,ls_CFXMS0, ls_YBYL01,ls_YBYL02,ls_YBYL03,ls_YBYL04,ls_YBYL05,ls_YBYL06,ls_YBYL07,ls_YBYL08,ls_YBYL09, ls_YBYL10,ls_YBYL11,ls_YBYL12,ls_YBYL13,LS_ZFJE00,ls_gwybz0 from ZY_YBFS00 where ZYID00=ad_ZYID00 and CXBZ00='0' and JZDH00=0 and YBFSDH in (select distinct YBFSDH from ZY_BRFY00 where JZDH00+0=0 --未结算的病人 and djh000>=as_qsdjh0 and djh000<=as_zzdjh0 and JFLBID = '2' --有预交金账户的病人 and ZYID00 = ad_ZYID00 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1')); /* if (LS_SFQYBZ='0') or (ls_YBYL04=0) then --非单病种结算时 LS_DBZBM0:=''; LS_DBZMC0:=''; LS_DBZBL0:=''; end if; */ select nvl(max(GRZHYE),0) into ls_YBZHYE from ZY_YBFS00 where ZYID00=ad_ZYID00 and FSRQ00||FSSJ00=(select max(FSRQ00||FSSJ00) from ZY_YBFS00 where ZYID00=ad_ZYID00); select decode(sign(Instrb(','||ls_YBBHSB||',',',1,')),1,ls_YBYL01,0)+ --民政救助 decode(sign(Instrb(','||ls_YBBHSB||',',',2,')),1,ls_YBYL02,0)+ --计生救助 decode(sign(Instrb(','||ls_YBBHSB||',',',3,')),1,ls_YBYL03,0)+ --残联救助 decode(sign(Instrb(','||ls_YBBHSB||',',',4,')),1,0,0)+ --单病种限额 decode(sign(Instrb(','||ls_YBBHSB||',',',5,')),1,0,0)+ --医院支付(医保无返回) -- decode(sign(Instrb(','||ls_YBBHSB||',',',4,')),1,ls_YBYL04,0)+ -- decode(sign(Instrb(','||ls_YBBHSB||',',',5,')),1,ls_YBYL05,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',6,')),1,ls_YBYL06,0)+ --低保基金支付 decode(sign(Instrb(','||ls_YBBHSB||',',',7,')),1,ls_YBYL07,0)+ --一般诊疗费补偿金额 decode(sign(Instrb(','||ls_YBBHSB||',',',8,')),1,ls_YBYL08,0)+ --一般诊疗费费个人支付金额 decode(sign(Instrb(','||ls_YBBHSB||',',',9,')),1,ls_YBYL09,0)+ --特殊门诊起付线累计 decode(sign(Instrb(','||ls_YBBHSB||',',',10,')),1,ls_YBYL10,0)+ --特殊门诊基金累计 decode(sign(Instrb(','||ls_YBBHSB||',',',11,')),1,0,0)+ --费用明细总金额 -- decode(sign(Instrb(','||ls_YBBHSB||',',',11,')),1,ls_YBYL11,0)+ --decode(sign(Instrb(','||ls_YBBHSB||',',',12,')),1,ls_YBYL12,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',12,')),1,0,0)+ --个人自付金额 --decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,ls_YBYL13,0) decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,0,ls_YBYL13) --2014.04.03 into ad_YBYL00 from dual; --add by qks 2010.12.02 合计到统筹基金支付中 ls_TCJJZF:= ls_TCJJZF + ad_YBYL00; if ls_COUNT0 =0 then as_YHMSG0:='医保发送异常,找不到医保的发送记录!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; if ls_TEMPJE+ls_HSHJJE-ls_JMJE00<>ls_HJJE00 then --伙食金额和减免的金额是不往医保接口发送的 as_YHMSG0:='医保发送异常,发送给医保总费用<>院内总费用!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; --if ls_YBBHSB='Y' then LS_SBGRZH_TEMP00:=nvl(LS_SBGRZH,0); --商保个人医疗账户支付(医保返回) LS_SBTCJJ_TEMP00:=nvl(LS_SBTCJJ,0); --商保统筹基金支付(医保返回) --统筹基金中已经包含(商保统筹和商保账户支付) if instrb(','||LS_YBBHSB||',',',14,')>0 then ls_SBGRZH:=0; ls_SBTCJJ:=0; end if; LS_GRZFJE:=ls_TEMPJE-ls_GRZHZF-ls_TCJJZF-ls_SBGRZH-ls_SBTCJJ-ls_BJJJZF-ls_SYBXZF; --/* if (((LS_DBZJK0='Y') and (LS_SFXNH0<>'1')) or ((LS_DBZJK0='M') and (LS_SFXNH0='1')) or (LS_DBZJK0='YM') ) and (ls_TEMPJE<>ls_BCBXF0) then LS_SFDBZ0:='Y'; else LS_SFDBZ0:='N'; end if; if (LS_DBZJK0='Q') and (LS_SFXNH0='1') then LS_GRZFJE:=LS_ZFJE00; end if; if (ls_JMJE00>LS_GRZFJE) and (LS_SFDBZ0='N') and ((LS_SFQYBZ='0') or (ls_YBYL04=0)) then as_YHMSG0:='该病人的减免总金额'||to_char(ls_JMJE00)||'大于医保返回的自付金额'||to_char(LS_GRZFJE)||',系统操作中止,请重新进行费用优惠减免!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; --*/ --个人账户的单据流水号 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_GRZHZF,3,'医保个人账户','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00); --统筹基金的单据流水号 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_TCJJZF,4,'医保统筹基金','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00); --商保个人帐户单据流水号 if ls_SBGRZH<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_SBGRZH,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=10; end if; --商保统筹基金单据流水号 if ls_SBTCJJ<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_SBTCJJ,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=11; end if; --保健基金单据流水号 if ls_BJJJZF<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_BJJJZF,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=6; end if; --商业保险支付单据号 if ls_SYBXZF<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_SYBXZF,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=13; end if; --医院支付 if ls_YBYL05<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_YBYL05,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=20; end if; end if ; --1、回收预交金处理 ls_JFDJHS:=as_JFDJHS; --由于中途结算或出院结算时,还应该同时将病人的交费信息做结算处理 LOOP ls_TMPDJH:=substr(ls_JFDJHS,1,instr(ls_JFDJHS,',')-1); IF ls_TMPDJH <> '0' THEN select PJH000 into ls_TMPPJH from ZY_BRJFB0 where DJH000 = ls_TMPDJH; Update ZY_PJSYQK set HSCZY0 = ad_JZY000,HSCZXM = as_JZYXM0,HSRQ00 = ls_CZRQ00,HSSJ00 = ls_CZSJ00 where PJH000 = ls_TMPPJH; if SQL%NOTFOUND then as_YHMSG0:='病人预交金票据回收操作不成功,请与系统管理员联系!'; as_SYSMSG:='update zy_pjsyqk set hsczy0= where pjh000 ='||to_char(ls_TMPPJH)||SQLERRM; ROLLBACK; RETURN; end if; Update ZY_BRJFB0 set JZDH00 = ad_JZDH00 where ZYID00 = ad_ZYID00 and JZDH00+0=0 and DJH000 = ls_TMPDJH; if SQL%NOTFOUND then as_YHMSG0:='病人交费信息结算不成功,请与系统管理员联系!'; as_SYSMSG:='update zy_brjfb0 set jzdh00= where brid00 ='||to_char(ld_brid00)||' and jzdh00=0 and djh000='||ls_TMPDJH||SQLERRM; ROLLBACK; RETURN; end if; END IF; ls_JFDJHS:=substr(ls_JFDJHS,instr(ls_JFDJHS,',')+1,length(ls_JFDJHS)); EXIT WHEN instr(ls_JFDJHS,',') = 0; END LOOP; --累计的现金交费金额 select NVL(sum(JFJE00),0) into ls_XJJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 in (1,8); --现金 --累计的转帐交费金额 select NVL(sum(JFJE00),0) into ls_ZZJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 = 2; --转帐 --病人自付金额 ls_HJZFJE:=ls_HJZFJE -(ls_GRZHZF + ls_TCJJZF +ls_SBGRZH + ls_SBTCJJ + ls_BJJJZF + ls_SYBXZF ); --/* if LS_SFDBZ0='Y' then ls_HJZFJE:=LS_ZFJE00; end if; if (LS_SFQYBZ='1') and (LS_DBZBM0 is not null) and (LS_BCBXF0>=ls_YBYL04) then ls_HJZFJE:=LS_ZFJE00; end if; if (LS_SFQYBZ='1') and (LS_DBZBM0 is not null) and (LS_BCBXF0=0 then --未超额时如果医院支付大于0 个人支付按原来算 ls_HJZFJE:=ls_HJZFJE; else ls_HJZFJE:=LS_ZFJE00; end if; end if; if (LS_DBZJK0='Q') and (LS_SFXNH0='1') then if ls_TEMPJE<>ls_TCJJZF+ls_GRZHZF+LS_ZFJE00 then ls_HJZFJE:=LS_ZFJE00; end if; end if; --*/ /* -- by ZYSF-20160510-001 if trim(LS_DBZBM0) is not null then ls_HJZFJE:=LS_ZFJE00; end if; */ if (SF_ZY_DBZXZQH(ad_ZYID00)='1') and (ls_YBYL04>LS_BCBXF0) and (LS_DBZBM0 is not null) then --0:不启用 1:启用 ls_HJZFJE:=LS_ZFJE00; end if; if (SF_ZY_DBZXZQH(ad_ZYID00)='1') and (LS_DBZBM0 is not null) then --0:不启用 1:启用 ls_HJZFJE:=LS_ZFJE00; end if; --ZY_DBZYYZF:住院单病种结算病种差额(医院支付)是否由病人实际支付 Y:病人支付 N:医院支付 默认值:Y if (SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N') and (LS_DBZBM0 is not null) then --by ZYSF-20160901-001 ls_HJZFJE:=LS_ZFJE00; end if; if ls_HJZFJE<0 then as_YHMSG0:='个人自付部分金额小于0,数据不正常,请与管理员联系!'||ls_YBYL05; as_SYSMSG:=''; rollback; return; end if; ls_CYQKJE := ls_XJJFJE + ls_ZZJFJE - ls_HJZFJE ; --计算病人的剩余金额 if ls_CYQKJE<0 and as_SFYB00 = 'Y' then --欠费呆账 Update BM_BRXXB0 set ZYZT00 = '2' where BRID00 = ld_BRID00; --'4':病人欠费 elsif (ls_CYQKJE<0) and (ls_ZFQFJS='N') and (ls_FBBH00<>3) then--不允许欠费情况下直接结算并补交余额,非逃跑结算 as_YHMSG0:='病人账户金额不够,请先补交足够的金额,'||'至少要交'||to_char(-ls_CYQKJE)||'元,再进行本操作!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; if as_SFYB00 = 'Y' then ls_CYYTK0:=ls_CYQKJE; end if; if ls_ZZJFJE > ls_HJZFJE then ad_XJYE00 := ls_XJJFJE; ad_ZZYE00 := ls_ZZJFJE - ls_HJZFJE; else ad_XJYE00 := ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE; --现金交费金额+转帐交费金额-合计自付金额 ad_ZZYE00 := 0; end if; --2、添加病人结账表信息 --商保统筹和商保账户支付写入到结账表 BY zhangyc 20170706 Insert into ZY_JZB000(JZDH00,BRID00,ZYID00,FBBH00,YBZXLB,YBBRLB,YBLB00, BRZJE0,JZJE00,GFJE00,HJJE00,JMJE00,GRZHZF,TCJJZF,ZFJE00,PJH000,YBZHYE, JZRQ00,JZSJ00,XJFKJE,ZZFKJE,JZY000,JMYY00,YSZJE0,ZZZJE0,CYYSK0,CYYTK0,JZBQH0,TSBZBH,FYQSRQ,FYJZRQ,BJZFE0,SYBXZF, YBYL01,YBYL02,YBYL03,YBYL04,YBYL05,YBYL06,YBYL07,YBYL08,YBYL09,YBYL10,YBYL11,YBYL12,YBYL13,BCBXF0,CFXMS0,SBGRZH, SBTCJJ,DBZBM0,DBZMC0,DBZBL0,CSLX00,gwybz0,CYJSLX) values(AD_JZDH00,LD_BRID00,AD_ZYID00,LS_FBBH00,LS_YBZXLB,LS_YBBRLB,LS_YBLB00, LS_HJJE00,LS_JZJE00,LS_GFJE00,LS_HJJE00,LS_JMJE00,LS_GRZHZF,LS_TCJJZF,LS_HJZFJE,LS_PJH000,LS_YBZHYE, LS_CZRQ00,LS_CZSJ00,AD_XJYE00,AD_ZZYE00,AD_JZY000,AS_JMYY00,LS_XJJFJE,LS_ZZJFJE,-LEAST(LS_CYYTK0,0), greatest(ls_CYYTK0,0),LS_BQH000,AS_TSBZBH,LS_FYQSRQ,LS_FYJZRQ,LS_BJJJZF,LS_SYBXZF, ls_YBYL01,ls_YBYL02,ls_YBYL03,ls_YBYL04,ls_YBYL05,ls_YBYL06,ls_YBYL07,ls_YBYL08,ls_YBYL09, ls_YBYL10,ls_YBYL11,ls_YBYL12,ls_YBYL13,ls_BCBXF0,LS_CFXMS0,nvl(LS_SBGRZH_TEMP00,0), nvl(LS_SBTCJJ_TEMP00,0),LS_DBZBM0,LS_DBZMC0,LS_DBZBL0,LS_CSLX00,nvl(ls_gwybz0,0),LS_CYJSLX); if SQL%NOTFOUND then as_YHMSG0:='生成账户表出错,请记录此信息并和系统管理员联系!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; --3、填写病人结账明细表信息 if (ls_SFCFFP='Y') AND (ls_FBBH00 not in (1,3,90)) then --拆分发票只是把自付和公费部分的金额分开,发票是没有分开处理的 Insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM,ZFJE00,QZFJE0) select ad_JZDH00,B.FPXMID,B.XMMC00,NVL(sum(A.HJJE00),0),NVL(sum(A.JMJE00),0),null,null,A.ZFBL00,B.SFYLXM,NVL(SUM(A.ZFJE00),0),NVL(SUM(A.QZFJE0),0) from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C,ZY_BRFY00 D where A.XMBH00 = C.SFXMID and C.ZYFPID = B.FPXMID and (D.CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and A.DJH000 = D.DJH000 and D.JZDH00+0=0 and D.JFLBID = '2' and d.djh000>=as_qsdjh0 and d.djh000<=as_zzdjh0 and D.ZYID00 = ad_ZYID00 group by B.FPXMID,B.XMMC00,A.ZFBL00,B.SFYLXM; OPEN CUR_ZY_JZMX00_ZFBL00; LOOP FETCH CUR_ZY_JZMX00_ZFBL00 INTO ls_JZMX00; EXIT WHEN CUR_ZY_JZMX00_ZFBL00%NOTFOUND; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) values(ls_PJH000,ls_JZMX00.XMBH00,ls_JZMX00.XMMC00,ls_JZMX00.XMJE00,0,ls_JZMX00.ZFBL00,ls_JZMX00.QZFJE0,LS_JZMX00.SFYLXM); Update ZY_PJSYQK set XJJE00 = NVL(XJJE00,0)+ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00, --自付 ZZJE00 = NVL(ZZJE00,0)+ls_JZMX00.XMJE00 - ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00--记账 where PJH000 = ls_PJH000; if SQL%NOTFOUND then Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0) select ls_PJH000,PLBH00,PLMC00,SF_SF_GETPJXH(ad_JZY000,3),ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ls_JZMX00.XMJE00-ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_PJH000 from bm_pjlxb0 where PLBH00 = 3;--PLBH00=3是住院发票 end if; END LOOP; CLOSE CUR_ZY_JZMX00_ZFBL00; else Insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM,ZFJE00,QZFJE0) select ad_JZDH00,B.FPXMID,B.XMMC00,NVL(sum(A.HJJE00),0),NVL(sum(A.JMJE00),0),null,null,1,B.SFYLXM,NVL(sum(a.ZFJE00),0),nvl(sum(a.QZFJE0),0) from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C,ZY_BRFY00 D where A.XMBH00 = C.SFXMID and C.ZYFPID = B.FPXMID and A.DJH000 = D.DJH000 and D.JZDH00+0=0 and D.JFLBID = '2' and (D.CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and d.djh000>=as_qsdjh0 and d.djh000<=as_zzdjh0 and D.ZYID00 = ad_ZYID00 group by B.FPXMID,B.XMMC00,B.SFYLXM; select NVL(sum(XMJE00),0) INTO ls_TEMPJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y'; --Delete from ZY_PJSYMX where PJH000 = ls_PJH000 and sfylxm='N'; --旧票据明细删除 --3、填写病人票据信息表的内容 Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000) select ls_PJH000,PLBH00,PLMC00,decode(ls_TEMPJE,0,'0',SF_SF_GETPJXH(ad_JZY000,3)),ls_TEMPJE,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000 from BM_PJLXB0 where PLBH00 = 3; --PLBH00=3是住院发票 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 3)'; ROLLBACK; RETURN; end if; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH000,XMBH00,XMMC00,XMJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y'; end if; --处理伙食发票 IF ls_HSHJJE<>0 THEN select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH001 from dual; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH001,XMBH00,XMMC00,XMJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_jzdh00 and SFYLXM='N'; insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0) select ls_PJH001,PLBH00,PLMC00,SF_SF_GETPJXH(ad_JZY000,10),ls_HSHJJE,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_PJH000 from BM_PJLXB0 where PLBH00 = 10;--PLBH00=10是住院伙食发票 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: select * from bm_pjlxb0 where PLBH00 = 10)'; rollback; return; end if; END IF; --填写结账单号 Update ZY_BRFY00 set YBDJH0 = YBFSDH, --医保的单据流水号 JZDH00 = ad_JZDH00 --结算单号 where JZDH00+0=0 --未结算的病人 and djh000>=as_qsdjh0 and djh000<=as_zzdjh0 and JFLBID = '2' --有预交金账户的病人 and ZYID00 = ad_ZYID00 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1'); Update ZY_YBFS00 set JZDH00=ad_JZDH00 where ZYID00=ad_ZYID00 and YBFSDH in (select distinct YBFSDH from ZY_BRFY00 where ZYID00=ad_ZYID00 and JZDH00 = ad_JZDH00); if as_SFYB00='Y' and as_CZBZ00 ='1' then --呆账病人出院结算 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,PLBH00) values(SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,0,-1*ls_CYYTK0,9,'逃跑欠费','0',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,ad_ZYID00,3); END IF; --6.若病人账户上有剩余金额,还应该将该剩余金额退还给病人(由于医保病人还有医保帐户退回的,可以在医保接口完成后再Update..where DJH000=ad_XJDJH0) IF as_CZBZ00 ='1' and (ls_SSWUTSCL = 'Y')AND(LS_ZY_FFJJ='Y') and (as_SFYB00<>'Y')THEN --非呆账出院结算,可能需要进行四舍五入 ls_SSWR00:=ad_XJYE00-round(ad_XJYE00+0.04,1); ad_XJYE00:=round(ad_XJYE00+0.04,1); if abs(ls_SSWR00) > 0.1 then as_YHMSG0:='系统结算四舍五入金额发生错误,该部分的金额不能为大于1的值!'; as_SYSMSG:='退还金额:'||to_char(ad_XJYE00)||',四舍五入后金额:'||to_char(round(ad_XJYE00,1)); ROLLBACK; RETURN; end if; end if; if ls_SSWR00<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ad_XJDJH0 from dual; --病人现金的退款单据号 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_XJDJH0,ld_BRID00,'2',-ls_SSWR00,5,'四舍五入金额','','','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,'3',ad_ZYID00); end if; ad_XJDJH0:=0; if ad_XJYE00<>0 and as_SFYB00<>'Y' then--非呆账病人现金余额退出 select SQ_ZY_BRJFB0_DJH000.nextval into ad_XJDJH0 from dual; --病人现金的退款单据号 if (ZY_JSTKAYJJFS='Y')and (ad_XJYE00>0)and (as_CZBZ00='0') then select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,HSCZY0,HSCZXM,HSRQ00,HSSJ00) select ls_PJH000,PLBH00,PLMC00,SF_ZY_GETPJXH(ad_JZY000,ls_plbh00),-ad_XJYE00,0,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ad_JZY000,as_JZYXM0,ls_CZRQ00,ls_CZSJ00 from BM_PJLXB0 where PLBH00 = ls_plbh00 ; --退预交金时使用收款票据 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = '||ls_plbh00||')'; ROLLBACK; RETURN; end if; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_XJDJH0,ld_BRID00,'2',-ad_XJYE00,1,'现金','','','中途结算退预交金',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,ls_plbh00,ad_ZYID00); else Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_XJDJH0,ld_BRID00,'2',-ad_XJYE00,1,'现金','','','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,3,ad_ZYID00); end if; end if; IF ad_ZZYE00 <> 0 and as_SFYB00<>'Y' THEN --若病人有剩余转账金额,进行退款,同时退款对应的打印票据号是发票号 select ZPH000,ZPKHYH,ZPDWMC into ls_ZPH000,ls_ZPKHYH,ls_ZPDWMC from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 = 2 and djh000=(select max(djh000) from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 = 2); select SQ_ZY_BRJFB0_DJH000.nextval into ad_ZZDJH0 from dual; --病人转账的退款单据号 if (ZY_JSTKAYJJFS='Y')and (ad_ZZYE00>0) and (as_CZBZ00='0') then select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,HSCZY0,HSCZXM,HSRQ00,HSSJ00) select ls_PJH000,PLBH00,PLMC00,SF_ZY_GETPJXH(ad_JZY000,ls_plbh00),0,-ad_ZZYE00,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ad_JZY000,as_JZYXM0,ls_CZRQ00,ls_CZSJ00 from BM_PJLXB0 where PLBH00 = ls_plbh00 ; --退预交金时使用收款票据 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 8)'; ROLLBACK; RETURN; end if; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_ZZDJH0,ld_BRID00,'2',-ad_ZZYE00,2,'转账','','','中途结算退预交金',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,ls_plbh00,ad_ZYID00); else Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_ZZDJH0,ld_BRID00,'2',-ad_ZZYE00,2,'转账',ls_ZPH000,ls_ZPKHYH,ls_ZPDWMC,ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,3,ad_ZYID00); end if; END IF; if (ZY_JSTKAYJJFS='Y') and(as_CZBZ00='0') then if ad_XJYE00>0 then update ZY_JZB000 set XJYE00=0,YSZJE0=YSZJE0-ad_XJYE00 where JZDH00=ad_JZDH00; end if; if ad_ZZYE00>0 then update ZY_JZB000 set ZZYE00=0,ZZZJE0=ZZZJE0-ad_ZZYE00 where JZDH00=ad_JZDH00; end if; if (ad_XJYE00<0) then update ZY_JZB000 set XJYE00=ad_XJYE00 where JZDH00=ad_JZDH00; end if; else--出院结算 update ZY_JZB000 set XJYE00=ad_XJYE00+ls_SSWR00,ZZYE00=ad_ZZYE00 where JZDH00=ad_JZDH00; end if; --1、补充: Update ZY_BRZHXX set WJSJE0 = (select nvl(sum(ZFJE00),0) from ZY_BRFY00 where ZYID00=ad_ZYID00 and JZDH00=0) --YBTCJE = , --本次入院发生的医保统筹部分总金额,费用登记时,已添加了 --YBZFJE = , --本次入院发生的医保自付部分总金额 --YZYBJE = NVL(YZYBJE,0)+ls_JZJE00 where BRID00 = ld_BRID00 and JFLBID = '2'; if as_CZBZ00='1' then --由于出现出院登记不成功ZJF ADD 20030821 Update ZY_BRZHXX set XJYE00=0,ZZYE00=0,ZYE000=0,YKZYE0=0 where BRID00 = ld_BRID00 and JFLBID = '2'; else--中途结算,可能未回收所有预交金单,仍然有 --累计未回收的现金交费金额 select NVL(sum(JFJE00),0) into ls_XJJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = 0 and JFLBID = '2' and ZFFS00 in (1,8); --现金 --累计未回收的转帐交费金额 select NVL(sum(JFJE00),0) into ls_ZZJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = 0 and JFLBID = '2' and ZFFS00 = 2; --转帐 select nvl(sum(ZFJE00),0) into ls_HJZFJE from ZY_BRFY00 where ZYID00=ad_ZYID00 and JZDH00=0; if ls_ZZJFJE>ls_HJZFJE then Update ZY_BRZHXX set ZZYE00=ls_ZZJFJE-ls_HJZFJE, XJYE00=ls_XJJFJE, ZYE000=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE, YKZYE0=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE where BRID00 = ld_BRID00 and JFLBID = '2'; else Update ZY_BRZHXX set ZZYE00=0, XJYE00=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE, ZYE000=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE, YKZYE0=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE where BRID00 = ld_BRID00 and JFLBID = '2'; end if; end if; SP_ZY_JZMXXM_SJZL00; --修改单病种担保金额 Select count(1) into ls_COUNT0 from ZY_BRDB00 where BRID00=ld_BRID00 and DBYY00='单病种欠费' and SFYX00='Y'; if ls_COUNT0>0 then update ZY_BRDB00 set SFYX00='N',JSCZY0=ad_JZY000, JSRXM0=as_JZYXM0 where BRID00=ld_BRID00 and DBYY00='单病种欠费'; end if; --病人费用结算结束,若病人是出院结算,还应该再调用出院登记的存储过程 --COMMIT,由于本存储过程与有共用,所以放在Delphi中控制 EXCEPTION WHEN OTHERS THEN as_YHMSG0:='出错原因不详,请记录此信息并和系统管理员联系!'; as_SYSMSG:=substr(SQLERRM||'执行存储过程错误:SP_ZY_BRFY00_JS0000('||to_char(ad_ZYID00)||','|| to_char(ad_JZY000)||','||as_JZYXM0||','||as_JMYY00||','||as_YJJXH0||','||as_CZBZ00||','|| as_SFYB00||','||as_JFDJHS||','||to_char(ad_XJYE00)||','||to_char(ad_ZZYE00)||','||to_char(ad_JZDH00)||',as_YHMSG0,as_SYSMSG)',1,150); ROLLBACK; END; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prompt 87.1、住院收费重新结算 SP_ZY_CXJS00_REG000 create or replace procedure SP_ZY_CXJS00_REG000 ( AS_QSDJH0 in number, --起始单据号 AS_ZZDJH0 in number, --终止单据号 ad_JZDH00 in number, --病人结账单号(旧) ad_CZY000 in number, --操作员 as_CZYXM0 in char, --操作员姓名 ad_CZYKS0 in number, --操作员所在科室名称 as_YJJXH0 in char, --发票上的序号 as_CXJSYY in char, --重新结算原因 as_SFDZ00 in char, --是否呆账结算 as_JFDJHS in char, --本次结算所使用的预交金的对应的交费单据号 as_TSBZBH in char, --特殊病种编号 ad_NEWJZH out number, --退款后的新的结账单号 as_YHMSG0 out varchar, --存储过程提示的错误信息 as_SYSMSG out varchar, --系统提示的错误信息 as_DBZBM0 in char default '', --单病种编码 as_DBZMC0 in char default '' --单病种名称 ) as ls_BRID00 ZY_BRFY00.BRID00%TYPE; --病人ID ls_ZYID00 ZY_BRXXB0.ZYID00%TYPE; --ZYID00 ls_XM0000 ZY_BRXXB0.XM0000%TYPE; --姓名 ls_XB0000 ZY_BRXXB0.XB0000%TYPE; --性别 ls_YBKH00 ZY_BRXXB0.YBKH00%TYPE; --医保卡号 ls_SHBZH0 ZY_BRXXB0.SHBZH0%TYPE; --社会保障号 ls_DQBQ00 ZY_BRXXB0.DQBQ00%type; --当前病区 ls_FBBH00 ZY_BRXXB0.FBBH00%TYPE; --费别编号 ls_GRZHZF ZY_JZB000.HJJE00%TYPE; --个人医疗账户支付(医保返回) ls_TCJJZF ZY_JZB000.HJJE00%TYPE; --统筹基金支付(医保返回) ls_SBGRZH ZY_JZB000.HJJE00%TYPE; --商保个人医疗账户支付(医保返回) ls_SBTCJJ ZY_JZB000.HJJE00%TYPE; --商保统筹基金支付(医保返回) ls_BJJJZF ZY_JZB000.HJJE00%TYPE; --保健基金支付(医保返回) ls_SYBXZF ZY_JZB000.HJJE00%TYPE; --商业保险支付(医保返回) ls_OLDYE0 ZY_JZB000.HJJE00%TYPE; --旧结算的余额 ls_HJJE00 ZY_JZB000.HJJE00%TYPE; --合计金额 ls_HSHJJE ZY_JZB000.HJJE00%TYPE; --伙食金额 ls_ZFJE00 ZY_JZB000.HJJE00%TYPE; --自费金额 ls_JZJE00 ZY_JZB000.HJJE00%TYPE; --记账金额 ls_GFJE00 ZY_JZB000.HJJE00%TYPE; --公费金额 ls_JMJE00 ZY_JZB000.HJJE00%type; --减免金额 ls_CYQKJE ZY_JZB000.HJJE00%TYPE; --出院欠费金额 ls_CYYTK0 ZY_JZB000.HJJE00%TYPE; --出院应退款 ls_XJJFJE ZY_JZB000.HJJE00%TYPE; --现金交费金额 ls_ZZJFJE ZY_JZB000.HJJE00%TYPE; --转账交费金额 ls_SSWR00 ZY_JZB000.HJJE00%TYPE; --四舍五入 ls_XJYE00 ZY_JZB000.HJJE00%TYPE; --现金余额 ls_ZZYE00 ZY_JZB000.HJJE00%TYPE; --转账余额 ls_TEMPJE ZY_JZB000.HJJE00%TYPE; --临时 ls_YBZHYE ZY_BRFY00.HJJE00%TYPE; --医保个人账户余额 ls_gwybz0 ZY_JZB000.gwybz0%TYPE; ls_YBYL01 ZY_JZB000.YBYL01%TYPE; --医保预留01 --民政救助总额 ls_YBYL02 ZY_JZB000.YBYL01%TYPE; --医保预留02 --计生救助总额 ls_YBYL03 ZY_JZB000.YBYL01%TYPE; --医保预留03 --残联救助总额 ls_YBYL04 ZY_JZB000.YBYL01%TYPE; --医保预留04 ls_YBYL05 ZY_JZB000.YBYL01%TYPE; --医保预留05 ls_YBYL06 ZY_JZB000.YBYL01%TYPE; --医保预留06 ls_YBYL07 ZY_JZB000.YBYL01%TYPE; --医保预留07 ls_YBYL08 ZY_JZB000.YBYL01%TYPE; --医保预留08 ls_YBYL09 ZY_JZB000.YBYL01%TYPE; --医保预留09 ls_YBYL10 ZY_JZB000.YBYL01%TYPE; --医保预留00 ls_YBYL11 ZY_JZB000.YBYL01%TYPE; --医保预留11 ls_YBYL12 ZY_JZB000.YBYL01%TYPE; --医保预留12 ls_YBYL13 ZY_JZB000.YBYL01%TYPE; --医保预留13 ls_BCBXF0 ZY_JZB000.BCBXF0%TYPE; --本次住院医疗费总额 ls_CFXMS0 ZY_JZB000.CFXMS0%TYPE; --本次住院处方项目总数 ls_PJH000 ZY_PJSYQK.PJH000%TYPE; --票据号 ls_NEWPJH ZY_PJSYQK.PJH000%TYPE; --票据号 ls_FZPJH0 ZY_PJSYQK.PJH000%TYPE; --票据号 ls_PJH001 ZY_PJSYQK.PJH000%TYPE; --票据号 ls_OLDPJH ZY_PJSYQK.PJH000%TYPE; --旧的票据号 ls_TMPPJH ZY_PJSYQK.PJH000%TYPE; --旧的票据号 ls_ZPKHYH ZY_BRJFB0.ZPKHYH%TYPE; --支票开户行 ls_ZPDWMC ZY_BRJFB0.ZPDWMC%TYPE; --支票单位名称 ls_YBBHSB IC_YBBRLB.YBBHSB%TYPE; --医保包含商保 ls_FYQSRQ ZY_JZB000.FYQSRQ%TYPE; --费用起始日期 ls_FYJZRQ ZY_JZB000.FYJZRQ%TYPE; --费用截至日期 ls_JZMX00 ZY_JZMX00%ROWTYPE; --结账明细 ls_JFDJHS varchar2(800); --临时 ls_TMPDJH varchar2(100); --临时 ls_COUNT0 number(10); --计数器 ls_CZRQ00 char(8); --操作日期 ls_CZSJ00 char(8); --操作时间 LS_ZY_FFJJ char(1); --逢分进角 LS_SFCFFP char(1); --是否拆分发票 ls_SSWUTSCL char(1); --四舍五入 ad_YBYL00 ZY_JZB000.YBYL01%TYPE; --医保其他基金支付 LS_SFQYBZ varchar2(10);--单病种启用 1:启用 0:不启用 LS_DBZBM0 ZY_BRXXB0.DBZBM0%TYPE; LS_DBZMC0 ZY_BRXXB0.DBZMC0%TYPE; LS_DBZBL0 ZY_BRXXB0.DBZBL0%TYPE; LS_CSLX00 ZY_BRXXB0.CSLX00%TYPE; LS_CYJSLX char(1);--出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 LS_GRZFE0 number(12,2); LS_SBGRZH_TEMP00 ZY_JZB000.GRZHZF%TYPE; --商保个人医疗账户支付(医保返回) LS_SBTCJJ_TEMP00 ZY_JZB000.TCJJZF%TYPE; --商保统筹基金支付(医保返回) cursor CUR_ZY_PJSYQK_PJH000 is select * from ZY_PJSYQK where FZPJH0=ls_OLDPJH and PLBH00 in ('3','10'); cursor CUR_ZY_JZMX00_ZFBL00 is select * from ZY_JZMX00 where JZDH00=ad_NEWJZH and nvl(ZFBL00,1)<>0 and SFYLXM='Y' order by ZFBL00; -- MODifICATION HISTORY -- Person Date Comments -- jlg 2007.07.30 增加对公务员补助的处理ZY_JZB000.GWYBZ0; -- jlg 2007.08.07 增加商业保险支付金额的处理ZYSF-20070806-004 -- zhr 2009.12.27 判定病人未结的费用主表和清单明细表是否一致 -- zhr 2010.01.03 过程做了较大修改 -- zhr 2010.03.10 填写ZY_JZB000的医保账户余额 -- zhr 2010.04.14 修正算法变更之前已经进行重新结算的结账单,更新算法后再次进行重新结算,现金金额不对 -- qks 2010.12.06 表ZY_YBFS00以及ZY_JZB000增加15个字段 YBYL01--YBYL13,以及BCBXF0、CFXMS0;结帐表保留SBGRZH,SBTCJJ值 -- zhangyc 2011.05.18 修正重新结算时发票项目金额被拆分 by ZYSF-20110518-001 -- zhangyc 2011.10.27 modify by ZYSF-20111024-002 经查找2010.01.06 05:46 提交归档的脚本ad_NEWJZH-->ad_JZDH00---- --zhangyc 2013.10.10 增加单病种结算功能 by ZYSF-20131011-001 --zhangyc 2013.10.29 修正单病种重新结算报错 by ZYSF-20131022-001 --zhangyc 2014.04.03 ad_YBYL13(大病补偿金额)不包含在统筹中独立出来 by ZYSF-20140403-001 -- zhangyc 2014.08.22 ZY_JZMX00增加字段YBZFJE by ZYSF-20140807-001 --zhangyc 2015.10.08 显示公务员补助 by ZYSF-20151008-001 --zhangyc 2015.10.28 修正插入GWYBZ0为空 报错 by ZYSF-20151015-002 --zhangyc 2015.11.10 增加字段ZY_JZB000.CYJSLX 出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 by ZYSF-20151106-001 --zhangyc 2015.12.24 修正重新单病种结算 by ZYSF-20150925-001 --zhangyc 2016.05.13 修改重新结算单病种结算错误 by ZYSF-20160510-001 --zhangyc 2016.07.08 增加行政区号对应单病种处理 by ZYSF-20160623-002 --zhangyc 2016.09.06 单病种支付修改 by ZYSF-20160901-001 --zhangyc 2016.11.03 修正自助机缴费ZY_BRJFB0.PLBH00=null 时,重新结算预收款错误问题。修改PLBH00->nvl(PLBH00,'8') by ZYSF-20161024-001 --zhangyc 2017.07.07 修改商保统筹或商保账户支付根据 IC_YBBRLB.YBBHSB=14 判断 BEGIN --====================2010.01.05冲销做了较大修改================================== --==新发票的退补金额=上次回收+本次回收预交金+医保支付-医疗费用 == --==冲销时,直冲发票对应的交费记录(包括医保),预交金记录不再冲销 == --==医保支付当作预交金处理 == --==重新结算退补现金=新发票的退补金额-旧发票的退补金额 == --================================================================================ ls_CZRQ00 := to_char(sysdate,'YYYYMMDD'); ls_CZSJ00 := to_char(sysdate,'HH24:MI:SS'); ls_CYQKJE := 0; --余额 ls_CYYTK0 := 0; ls_GRZHZF := 0; ls_TCJJZF := 0; ls_SBGRZH := 0; ls_SBTCJJ := 0; ls_BJJJZF := 0; ls_SYBXZF := 0; ls_XJJFJE := 0; ls_ZZJFJE := 0; ls_SSWR00 := 0; ad_NEWJZH := 0; ls_YBZHYE := 0; ls_YBYL01 := 0; ls_YBYL02 := 0; ls_YBYL03 := 0; ls_YBYL04 := 0; ls_YBYL05 := 0; ls_YBYL06 := 0; ls_YBYL07 := 0; ls_YBYL08 := 0; ls_YBYL09 := 0; ls_YBYL10 := 0; ls_YBYL11 := 0; ls_YBYL12 := 0; ls_YBYL13 := 0; ls_BCBXF0 := 0; ls_CFXMS0 := 0; LS_CYJSLX:='2';--出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 select substrb(upper(trim(nvl(max(VALUE0),'N'))),1,1) into LS_ZY_FFJJ from XT_XTCS00 where NAME00 = 'SF_ZY_FFJJ'; --逢分进角 select substrb(upper(trim(nvl(max(VALUE0),'N'))),1,1) into LS_SFCFFP from XT_XTCS00 where NAME00 = 'SF_SFCFFP'; --公费病人是否拆分发票 select substrb(upper(trim(nvl(max(VALUE0),'N'))),1,1) into ls_SSWUTSCL from XT_XTCS00 where NAME00 = 'SF_SSWUTSCL'; --四舍五入 select BRID00,ZYID00,PJH000,XJYE00+ZZYE00,CYJSLX into ls_BRID00,ls_ZYID00,ls_OLDPJH,ls_OLDYE0,LS_CYJSLX from ZY_JZB000 where JZDH00 = ad_JZDH00; select substrb(SF_ZY_DBZJBXX('0',ls_ZYID00,0),1,1) into LS_SFQYBZ from dual; select A.FBBH00,a.DQBQ00,b.YBBHSB,a.XM0000,a.XB0000,a.YBKH00,a.SHBZH0,a.DBZBM0,a.DBZMC0,a.DBZBL0,a.CSLX00 into ls_FBBH00,ls_DQBQ00,ls_YBBHSB,ls_XM0000,ls_XB0000,ls_YBKH00,ls_SHBZH0,LS_DBZBM0,LS_DBZMC0,LS_DBZBL0,LS_CSLX00 from ZY_BRXXB0 A,IC_YBBRLB B where A.FBBH00 = B.FBBH00 and A.YBLB00 = B.YBLB00 and A.ZYID00 = ls_ZYID00; select substrb(SF_ZY_DBZJBXX('0',LS_ZYID00,0),1,1) into LS_SFQYBZ from dual; /* if (LS_SFQYBZ='0') then --非单病种结算时 LS_DBZBM0:=''; LS_DBZMC0:=''; LS_DBZBL0:=''; end if; */ LS_DBZBM0:=as_DBZBM0; LS_DBZMC0:=as_DBZMC0; if LS_CYJSLX in ('3','4','5') then LS_CYJSLX:='5'; else LS_CYJSLX:='2'; end if; if as_SFDZ00 = 'Y' THEN --呆账结算 select count(*) into ls_COUNT0 from BM_BRZFFS where ZFFSBH = 9; if ls_COUNT0 <> 1 then as_YHMSG0:='系统字典表维护不完整,请先维护系统字典表BM_BRZFFS后再进行本操作,请与系统管理员联系!'; as_SYSMSG:='NOT EXISTS (select * from bm_brzffs where zffsbh = 9 )'||SQLERRM; rollback; return; end if; end if; --2009.10.29 zhr 判定病人未结的费用主表和清单明细表是否一致 select nvl(max(DJH000),0) into ls_COUNT0 from ZY_BRFY00 a where ZYID00=ls_ZYID00 and HJJE00<>(select nvl(sum(HJJE00),0) from VW_ZY_ZYFYMX b where a.DJH000=b.DJH000)and rownum=1; if ls_COUNT0>0 then as_YHMSG0:='病人的费用明细与合计的不符,请与系统管理员联系!'; as_SYSMSG:='收费单据号'||to_char(ls_COUNT0)||'的明细表与主表合计不符'; rollback; return; end if; --判断要结算的收费项目是否有对应的发票项目 select nvl(min(SFXMID),0) into ls_COUNT0 from ZY_FYMX00 A,BM_YYSFXM C,ZY_BRFY00 D where A.XMBH00 = C.SFXMID and A.DJH000 = D.DJH000 and D.ZYID00 = ls_ZYID00 and D.JZDH00+0=0 and ((c.ZYFPID is null) or C.ZYFPID not in (select FPXMID from BM_FPXM00 )); if ls_COUNT0 > 0 THEN --若有存在没有发票项目对应的项目,则提示信息! as_YHMSG0:='病人结算操作失败,发票项目不完整,请记录本信息并与系统管理员联系!'; as_SYSMSG:='BM_YYSFXM.SFXMID='||to_char(ls_COUNT0)||'的ZYFPID的值非法!'; rollback; return; end if; --计算病人本次结算的费用总额 select nvl(sum(HJJE00),0),nvl(sum(ZFJE00),0),nvl(sum(GFJE00),0),nvl(sum(JZJE00),0),min(trim(CZRQ00)),max(trim(CZRQ00)) into ls_HJJE00,ls_ZFJE00,ls_GFJE00,ls_JZJE00,ls_FYQSRQ,ls_FYJZRQ from ZY_BRFY00 d where (d.JZDH00 in (select k.JZDH00 from ZY_JZB000 k where k.ZYID00 = ls_ZYID00 start with k.JZDH00=ad_JZDH00 connect by prior k.CXJZDH=k.JZDH00) or d.JZDH00+0=0) and d.DJH000 >= as_QSDJH0 and d.DJH000 <= as_ZZDJH0 and d.ZYID00 = ls_ZYID00; if ls_HJJE00<>ls_ZFJE00+ls_GFJE00+ls_JZJE00 then as_YHMSG0:='病人费用异常,请与系统管理员联系!'; as_SYSMSG:='表ZY_BRFY00.HJJE00<>ZFJE00+GFJE00+JZJE00'; rollback; return; end if; --计算病人本次结算的伙食费用和减免费用 select nvl(sum(decode(d.SFYLXM,'Y',0,b.ZFJE00)),0),nvl(sum(decode(b.JMJE00,'3',b.JMJE00,'4',b.JMJE00,0)),0) into ls_HSHJJE,ls_JMJE00 from ZY_BRFY00 a,ZY_FYMX00 b,BM_YYSFXM c,BM_FPXM00 d where a.DJH000=b.DJH000 and b.XMBH00=c.SFXMID and c.ZYFPID=d.FPXMID and (a.JZDH00 in (select k.JZDH00 from ZY_JZB000 k where k.ZYID00 = ls_ZYID00 start with k.JZDH00=ad_JZDH00 connect by prior k.CXJZDH=k.JZDH00) or a.JZDH00+0=0) and a.DJH000 >= as_QSDJH0 and a.DJH000 <= as_ZZDJH0 and a.ZYID00 = ls_ZYID00; if as_CXJSYY<>'出院登记' then --##2.1.冲销 select SQ_ZY_JZB000_JZDH00.nextval into ad_NEWJZH from dual; select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; --2.1.1冲结账表 Insert into ZY_JZB000(JZDH00,YBDJH0,BRID00,ZYID00,BRZJE0,JZJE00,GFJE00,HJJE00,JMJE00,GRZHZF, TCJJZF,ZFJE00,JZRQ00,JZSJ00,JZY000,PJH000,XJFKJE,ZZFKJE,CYYSK0,CYYTK0,YSZJE0,ZZZJE0,CXJZDH ,XJYE00,ZZYE00,FBBH00,YBBRLB,YBLB00,YPWQZF,XMWQZF,YPBFZF,XMBFZF,YBQFJE,SBGRZH,SBTCJJ,TSBZBH,FYQSRQ,FYJZRQ,GWYBZ0,JJZFE0,FYBJE0,SYBXZF, YBYL01,YBYL02,YBYL03,YBYL04,YBYL05,YBYL06,YBYL07,YBYL08,YBYL09,YBYL10,YBYL11,YBYL12,YBYL13, BCBXF0,CFXMS0,DBZBM0,DBZMC0,DBZBL0,CSLX00,CYJSLX) select ad_NEWJZH,YBDJH0,BRID00,ZYID00,-BRZJE0,-JZJE00,-GFJE00,-HJJE00,-JMJE00,-GRZHZF, -TCJJZF,-ZFJE00,ls_CZRQ00,ls_CZSJ00,ad_CZY000,ls_PJH000,-XJFKJE,-ZZFKJE,-CYYSK0,-CYYTK0,-YSZJE0,-ZZZJE0,JZDH00 ,-XJYE00,-ZZYE00,FBBH00,YBBRLB,YBLB00,-YPWQZF,-XMWQZF,-YPBFZF,-XMBFZF,-YBQFJE,-SBGRZH,-SBTCJJ,TSBZBH,FYQSRQ,FYJZRQ,-nvl(GWYBZ0,0),-JJZFE0,-FYBJE0,-SYBXZF, -YBYL01,-YBYL02,-YBYL03,-YBYL04,-YBYL05,-YBYL06,-YBYL07,-YBYL08,-YBYL09,-YBYL10,-YBYL11,-YBYL12,-YBYL13, -BCBXF0,-CFXMS0,DBZBM0,DBZMC0,DBZBL0,CSLX00,CYJSLX from ZY_JZB000 where JZDH00 = ad_JZDH00; Insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM,QZFJE0,ZFJE00,YBZFJE) select ad_NEWJZH,XMBH00,XMMC00,-XMJE00,-JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM,-QZFJE0,-ZFJE00,-YBZFJE from ZY_JZMX00 where JZDH00 = ad_JZDH00; --2.1.2冲交费表 -- zhr 2010.04.14 修正算法变更之前已经进行重新结算的结账单,更新算法后再次进行重新结算,现金金额不对 --旧算法,先冲预交金和退款,再全额收票面金额,新算法,只冲退款,再重新退款。 select count(*) into ls_COUNT0 from ZY_JZB000 where JZDH00 = ad_JZDH00 and CXJZDH>0 and HJJE00=(select sum(JFJE00) from ZY_BRJFB0 where JZDH00 = ad_JZDH00); if ls_COUNT0>0 then--旧算法时重新结算过 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) select SQ_ZY_BRJFB0_DJH000.nextval,BRID00,0,ls_OLDYE0,1,'现金','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,JFBZ00,0,ad_NEWJZH,ZYID00,DQBQ00,3 from ZY_BRJFB0 where JZDH00 = ad_JZDH00 and PLBH00='3' and rownum=1; else--新算法 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) select SQ_ZY_BRJFB0_DJH000.nextval,BRID00,0,-JFJE00,ZFFS00,ZFFSMC,ZPZH00,ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,JFBZ00,0,ad_NEWJZH,ZYID00,DQBQ00,3 from ZY_BRJFB0 where JZDH00 = ad_JZDH00 and PLBH00='3'; end if; --2010.01.03银行卡改现金,不然因为重新结算的费用,全部用现金表示,所以收费员的现金流水表会不正常 update ZY_BRJFB0 set ZFFS00='1',ZFFSMC='现金' where ZYID00=ls_ZYID00 and JZDH00=ad_NEWJZH and ZFFS00 in ('8'); --2.1.3冲住院发票表 ls_COUNT0:=0; ls_FZPJH0:=ls_PJH000; for PJ in CUR_ZY_PJSYQK_PJH000 loop if ls_COUNT0>0 then select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; end if; Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0) select ls_PJH000,PLBH00,PLMC00,'-'||trim(PJXH00),-XJJE00,-ZZJE00,ad_CZY000,as_CZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','2',ls_XM0000,ls_XB0000,ls_FZPJH0 from ZY_PJSYQK where PJH000=PJ.PJH000; if SQL%NOTFOUND then as_YHMSG0:='找不到旧票据(PJH000='||to_char(PJ.PJH000)||')!'; as_SYSMSG:=SQLERRM; rollback; return; end if; insert into ZY_PJSYMX (PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH000,XMBH00,XMMC00,-XMJE00,XMBZ00,ZFBL00,-QZFJE0,SFYLXM from ZY_PJSYMX where PJH000=PJ.PJH000; ls_COUNT0:=ls_COUNT0+1; end loop; select SQ_ZY_JZB000_JZDH00.nextval into ad_NEWJZH from dual; select SQ_ZY_PJSYQK_PJH000.nextval into ls_NEWPJH from dual; --2.1.3处理旧票据 Update ZY_PJSYQK set PJZT00 = '1',HSCZY0 =ad_CZY000, HSCZXM =as_CZYXM0, HSRQ00 =ls_CZRQ00,HSSJ00 =ls_CZSJ00,--OLDPJH = ad_JZDH00, NEWPJH=ls_NEWPJH where FZPJH0 = ls_OLDPJH; --ls_NEWPJH 需要取新的号 if SQL%NOTFOUND then as_YHMSG0:='找不到旧票据(FZPJH0='||to_char(ls_FZPJH0)||')!'; as_SYSMSG:=SQLERRM; rollback; return; end if; --2.1.4 冲医保发送记录,由另外过程处理 --##2.2重新结算 --2.2.1处理医保支付 if ls_FBBH00 =3 THEN --医保病人 select count(*),nvl(sum(HJJE00),0),nvl(sum(GRZHZF),0),nvl(sum(TCJJZF),0),nvl(sum(SBGRZH),0),nvl(sum(SBTCJJ),0),nvl(sum(BJJJZF),0),nvl(sum(SYBXZF),0),nvl(sum(HJJE00),0),nvl(sum(CFXMS0),0), nvl(sum(YBYL01),0),nvl(sum(YBYL02),0),nvl(sum(YBYL03),0),nvl(sum(YBYL04),0),nvl(sum(YBYL05),0),nvl(sum(YBYL06),0),nvl(sum(YBYL07),0),nvl(sum(YBYL08),0),nvl(sum(YBYL09),0),nvl(sum(YBYL10),0), nvl(sum(YBYL11),0),nvl(sum(YBYL12),0),nvl(sum(YBYL13),0),nvl(sum(gwybz0),0) into ls_COUNT0,ls_TEMPJE,ls_GRZHZF,ls_TCJJZF,ls_SBGRZH,ls_SBTCJJ,ls_BJJJZF,ls_SYBXZF,ls_BCBXF0,ls_CFXMS0, ls_YBYL01,ls_YBYL02,ls_YBYL03,ls_YBYL04,ls_YBYL05,ls_YBYL06,ls_YBYL07,ls_YBYL08,ls_YBYL09,ls_YBYL10, ls_YBYL11,ls_YBYL12,ls_YBYL13,ls_gwybz0 from ZY_YBFS00 where ZYID00=ls_ZYID00 and CXBZ00='0' and JZDH00=0 and YBFSDH in (select distinct YBFSDH from ZY_BRFY00 d where (d.JZDH00 in (select k.JZDH00 from ZY_JZB000 k where k.ZYID00 = ls_ZYID00 start with k.JZDH00=ad_JZDH00 connect by prior k.CXJZDH=k.JZDH00) or d.JZDH00+0=0) and d.DJH000 >= as_QSDJH0 and d.DJH000 <= as_ZZDJH0 and d.ZYID00 = ls_ZYID00); select nvl(max(GRZHYE),0) into ls_YBZHYE from ZY_YBFS00 where ZYID00=ls_ZYID00 and FSRQ00||FSSJ00=(select max(FSRQ00||FSSJ00) from ZY_YBFS00 where ZYID00=ls_ZYID00); select decode(sign(Instrb(','||ls_YBBHSB||',',',1,')),1,ls_YBYL01,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',2,')),1,ls_YBYL02,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',3,')),1,ls_YBYL03,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',4,')),1,ls_YBYL04,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',5,')),1,ls_YBYL05,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',6,')),1,ls_YBYL06,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',7,')),1,ls_YBYL07,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',8,')),1,ls_YBYL08,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',9,')),1,ls_YBYL09,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',10,')),1,ls_YBYL10,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',11,')),1,ls_YBYL11,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',12,')),1,ls_YBYL12,0)+ --decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,ls_YBYL13,0) decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,0,ls_YBYL13)--2014.04.03 into ad_YBYL00 from dual; --add by qks 2010.12.02 合计到统筹基金支付中 ls_TCJJZF:= ls_TCJJZF + ad_YBYL00; if ls_COUNT0 =0 then as_YHMSG0:='医保发送异常,找不到医保的发送记录!'; as_SYSMSG:=SQLERRM; rollback; return; end if; if ls_TEMPJE+ls_HSHJJE-ls_JMJE00<>ls_HJJE00 then --伙食金额和减免的金额是不往医保接口发送的 as_YHMSG0:='医保发送异常,发送给医保总费用<>院内总费用!'; as_SYSMSG:=SQLERRM; rollback; return; end if; --if ls_YBBHSB='Y' then LS_SBGRZH_TEMP00:=nvl(LS_SBGRZH,0); --商保个人医疗账户支付(医保返回) LS_SBTCJJ_TEMP00:=nvl(LS_SBTCJJ,0); --商保统筹基金支付(医保返回) --统筹基金中已经包含(商保统筹和商保账户支付) if instrb(','||LS_YBBHSB||',',',14,')>0 then ls_SBGRZH:=0; ls_SBTCJJ:=0; end if; if (ls_JMJE00>ls_TEMPJE-ls_GRZHZF-ls_TCJJZF-ls_SBGRZH-ls_SBTCJJ-ls_BJJJZF-ls_SYBXZF) and (trim(LS_DBZBM0) is null) then as_YHMSG0:='该病人的减免总金额'||to_char(ls_JMJE00)||'大于医保返回的自付金额'||to_char(ls_TEMPJE-ls_GRZHZF-ls_TCJJZF-ls_SBGRZH-ls_SBTCJJ-ls_BJJJZF-ls_SYBXZF)||',系统操作中止,请重新进行费用优惠减免!'; as_SYSMSG:=SQLERRM; rollback; return; end if; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) values(SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,ls_GRZHZF,3,'医保个人账户','',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,'0',0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3); Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) values(SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,ls_TCJJZF,4,'医保统筹基金','',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,'0',0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3); Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) select SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,ls_SBGRZH,ZFFSBH,ZFFSMC,'',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,'0',0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3 from BM_BRZFFS where ZFFSBH=10; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) select SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,ls_SBTCJJ,ZFFSBH,ZFFSMC,'',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,'0',0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3 from BM_BRZFFS where ZFFSBH=11; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) select SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,ls_BJJJZF,ZFFSBH,ZFFSMC,'',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,'0',0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3 from BM_BRZFFS where ZFFSBH=6; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) select SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,ls_SYBXZF,ZFFSBH,ZFFSMC,'',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,'0',0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3 from BM_BRZFFS where ZFFSBH=13; --医院支付 if ls_YBYL05<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) select SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,ls_YBYL05,ZFFSBH,ZFFSMC,'',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,'0',0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3 from BM_BRZFFS where ZFFSBH=20; end if; end if; --2.2.2 回收预交金 if as_JFDJHS is not null then ls_JFDJHS:=trim(as_JFDJHS); LOOP ls_TMPDJH:=substr(ls_JFDJHS,1,instr(ls_JFDJHS,',')-1); if ls_TMPDJH <> '0' THEN select PJH000 into ls_TMPPJH from ZY_BRJFB0 where ZYID00=ls_ZYID00 and JZDH00+0=0 and JFLBID=2 and DJH000 = ls_TMPDJH and nvl(PLBH00,'8') in ('4','8'); Update ZY_PJSYQK set HSCZY0 = ad_CZY000,HSCZXM = as_CZYXM0,HSRQ00 = ls_CZRQ00,HSSJ00 = ls_CZSJ00 where PJH000 = ls_TMPPJH and nvl(PLBH00,'8') in ('4','8'); if SQL%NOTFOUND then as_YHMSG0:='病人预交金票据回收操作不成功,请与系统管理员联系!'; as_SYSMSG:='update zy_pjsyqk set hsczy0= where pjh000 ='||to_char(ls_TMPPJH)||SQLERRM; rollback; return; end if; Update ZY_BRJFB0 set JZDH00 = ad_NEWJZH where ZYID00 = ls_ZYID00 and JZDH00+0=0 and JFLBID=2 and DJH000 = ls_TMPDJH; if SQL%NOTFOUND then as_YHMSG0:='病人交费信息结算不成功,请与系统管理员联系!'; as_SYSMSG:='update zy_brjfb0 set jzdh00= where brid00 ='||to_char(ls_brid00)||' and jzdh00=0 and djh000='||ls_TMPDJH||SQLERRM; rollback; return; end if; end if; ls_JFDJHS:=substr(ls_JFDJHS,instr(ls_JFDJHS,',')+1,length(ls_JFDJHS)); EXIT WHEN instr(ls_JFDJHS,',') = 0; END LOOP;--这里使用了旧的结账单号ad_JZDH00,现改为新的? end if; --如果是出院,校验是否回收全部预交金 if instrb(as_CXJSYY,'出院')>0 then select count(*) into ls_COUNT0 from ZY_PJSYQK where HSRQ00 is null and nvl(PLBH00,'8') in ('4','8') and PJH000 in (select PJH000 from ZY_BRJFB0 where ZYID00=ls_ZYID00 and JFLBID=2 and JZDH00+0=0); if ls_COUNT0>0 then as_YHMSG0:='还有预交金未回收,不能作出院结算!'; as_SYSMSG:=''; rollback; return; end if; end if; --累计的现金交费金额 现金、转帐 select nvl(sum(decode(ZFFS00,1,JFJE00,8,JFJE00,0)),0),nvl(sum(decode(ZFFS00,2,JFJE00,0)),0) into ls_XJJFJE,ls_ZZJFJE from ZY_BRJFB0 where ZYID00 = ls_ZYID00 and (JZDH00 in (select k.JZDH00 from ZY_JZB000 k where k.ZYID00 = ls_ZYID00 start with k.JZDH00=ad_JZDH00 connect by prior k.CXJZDH=k.JZDH00) or JZDH00=ad_NEWJZH) and JFLBID= '2' and nvl(PLBH00,'8') in ('4','8'); --病人自付金额 ls_ZFJE00:=ls_ZFJE00 -(ls_GRZHZF + ls_TCJJZF +ls_SBGRZH + ls_SBTCJJ + ls_BJJJZF + ls_SYBXZF ); ls_CYQKJE := ls_XJJFJE + ls_ZZJFJE - ls_ZFJE00 ; --计算病人的剩余金额 if ls_CYQKJE<0 and as_SFDZ00 = 'Y' then --欠费呆账 Update BM_BRXXB0 set ZYZT00 = '2' where BRID00 = ls_BRID00; --'4':病人欠费 end if; if as_SFDZ00 = 'Y' then ls_CYYTK0:=ls_CYQKJE; end if; if ls_ZZJFJE > ls_ZFJE00 then ls_XJYE00 := ls_XJJFJE; ls_ZZYE00 := ls_ZZJFJE - ls_ZFJE00; else ls_XJYE00 := ls_XJJFJE+ls_ZZJFJE-ls_ZFJE00; --现金交费金额+转帐交费金额-合计自付金额 ls_ZZYE00 := 0; end if; --2.2.3处理结账表 Insert into ZY_JZB000(JZDH00,BRID00,ZYID00,BRZJE0,JZJE00,GFJE00,HJJE00,JMJE00,GRZHZF,TCJJZF,ZFJE00,PJH000,YBZHYE, JZRQ00,JZSJ00,XJFKJE,ZZFKJE,JZY000,JMYY00,CXJZDH,YSZJE0,ZZZJE0,CYYSK0,CYYTK0,XJYE00,ZZYE00, JZBQH0,TSBZBH,FYQSRQ,FYJZRQ,BJZFE0,SYBXZF,YBYL01,YBYL02,YBYL03,YBYL04,YBYL05,YBYL06,YBYL07, YBYL08,YBYL09,YBYL10,YBYL11,YBYL12,YBYL13,BCBXF0,CFXMS0,SBGRZH,SBTCJJ,DBZBM0,DBZMC0,DBZBL0, CSLX00,gwybz0,CYJSLX) select ad_NEWJZH,BRID00,ZYID00,ls_HJJE00,ls_JZJE00,ls_GFJE00,ls_HJJE00,ls_JMJE00,ls_GRZHZF,ls_TCJJZF,ls_ZFJE00,ls_NEWPJH,ls_YBZHYE, ls_CZRQ00,ls_CZSJ00,ls_ZFJE00,0,ad_CZY000,'',ad_JZDH00,ls_XJJFJE,ls_ZZJFJE,least(ls_CYYTK0,0),greatest(ls_CYYTK0,0),ls_XJYE00,ls_ZZYE00, ls_DQBQ00,as_TSBZBH,ls_FYQSRQ,ls_FYJZRQ,ls_BJJJZF,ls_SYBXZF,ls_YBYL01,ls_YBYL02,ls_YBYL03,ls_YBYL04,ls_YBYL05,ls_YBYL06,ls_YBYL07, ls_YBYL08,ls_YBYL09,ls_YBYL10,ls_YBYL11,ls_YBYL12,ls_YBYL13,ls_BCBXF0,ls_CFXMS0,nvl(ls_SBGRZH_TEMP00,0),nvl(ls_SBTCJJ_TEMP00,0),LS_DBZBM0,LS_DBZMC0,LS_DBZBL0, LS_CSLX00,nvl(ls_gwybz0,0),LS_CYJSLX from ZY_JZB000 where JZDH00 = ad_JZDH00; if LS_SFCFFP='Y' then --modify by ZYSF-20110518-001 Insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFJE00,ZFBL00,SFYLXM,QZFJE0) select ad_NEWJZH,B.FPXMID,B.XMMC00,sum(A.HJJE00),0,null,null,sum(A.ZFJE00),A.ZFBL00,B.SFYLXM,nvl(sum(A.QZFJE0),0) from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C,ZY_BRFY00 D where (d.JZDH00 in (select k.JZDH00 from ZY_JZB000 k where k.ZYID00 = ls_ZYID00 start with k.JZDH00=ad_JZDH00 connect by prior k.CXJZDH=k.JZDH00) or d.JZDH00+0=0) and A.XMBH00 = C.SFXMID and C.ZYFPID = B.FPXMID and A.DJH000 = D.DJH000 and D.ZYID00 = ls_ZYID00 and a.djh000>= as_QSDJH0 and a.djh000<= as_ZZDJH0 group by B.FPXMID,B.XMMC00,A.ZFBL00,B.SFYLXM having sum(A.HJJE00)<>0; else Insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFJE00,ZFBL00,SFYLXM,QZFJE0) select ad_NEWJZH,B.FPXMID,B.XMMC00,sum(A.HJJE00),0,null,null,sum(A.ZFJE00),max(A.ZFBL00),B.SFYLXM,nvl(sum(A.QZFJE0),0) from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C,ZY_BRFY00 D where (d.JZDH00 in (select k.JZDH00 from ZY_JZB000 k where k.ZYID00 = ls_ZYID00 start with k.JZDH00=ad_JZDH00 connect by prior k.CXJZDH=k.JZDH00) or d.JZDH00+0=0) and A.XMBH00 = C.SFXMID and C.ZYFPID = B.FPXMID and A.DJH000 = D.DJH000 and D.ZYID00 = ls_ZYID00 and a.djh000>= as_QSDJH0 and a.djh000<= as_ZZDJH0 group by B.FPXMID,B.XMMC00,B.SFYLXM having sum(A.HJJE00)<>0; end if; --2.2.4 处理票据表信息 if (ls_SFCFFP='Y') and (ls_FBBH00 not in (1,3,90)) then --拆分发票只是把自付和公费部分的金额分开,发票是没有分开处理的 OPEN CUR_ZY_JZMX00_ZFBL00;--nvl(ZFBL00,1)<>0 and SFYLXM='Y' LOOP FETCH CUR_ZY_JZMX00_ZFBL00 INTO ls_JZMX00; EXIT WHEN CUR_ZY_JZMX00_ZFBL00%NOTFOUND; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) values(ls_NEWPJH,ls_JZMX00.XMBH00,ls_JZMX00.XMMC00,ls_JZMX00.XMJE00,0,ls_JZMX00.ZFBL00,ls_JZMX00.QZFJE0,LS_JZMX00.SFYLXM); Update ZY_PJSYQK set XJJE00 = nvl(XJJE00,0)+ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00, --自付 ZZJE00 = nvl(ZZJE00,0)+ls_JZMX00.XMJE00 - ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00--记账 where PJH000 = ls_NEWPJH; if SQL%NOTFOUND then Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0) select ls_NEWPJH,PLBH00,PLMC00,SF_SF_GETPJXH(ad_CZY000,3),ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ls_JZMX00.XMJE00-ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ad_CZY000,as_CZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_NEWPJH from BM_PJLXB0 where PLBH00 = 3;--PLBH00=3是住院发票 end if; END LOOP; CLOSE CUR_ZY_JZMX00_ZFBL00; else --select nvl(sum(XMJE00),0) INTO ls_TEMPJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y'; ----modify by ZYSF-20111024-002 经查找2010.01.06 05:46 提交归档的脚本ad_NEWJZH-->ad_JZDH00---- select nvl(sum(XMJE00),0) INTO ls_TEMPJE from ZY_JZMX00 where JZDH00=ad_NEWJZH and SFYLXM='Y'; --3、填写病人票据信息表的内容 Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000) select ls_NEWPJH,PLBH00,PLMC00,decode(ls_TEMPJE,0,'0',SF_SF_GETPJXH(ad_CZY000,3)),ls_TEMPJE,0,ad_CZY000,as_CZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000 from BM_PJLXB0 where PLBH00 = 3; --PLBH00=3是住院发票 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: select * from bm_pjlxb0 where PLBH00 = 10)'; rollback; return; end if; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_NEWPJH,XMBH00,XMMC00,XMJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_NEWJZH and SFYLXM='Y'; end if; --处理伙食发票 if ls_HSHJJE<>0 THEN select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH001 from dual; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH001,XMBH00,XMMC00,XMJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_NEWJZH and SFYLXM='N'; Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0) select ls_PJH001,PLBH00,PLMC00,SF_SF_GETPJXH(ad_CZY000,10),ls_HSHJJE,0,ad_CZY000,as_CZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_NEWPJH from BM_PJLXB0 where PLBH00 = 10;--PLBH00=10是住院伙食发票 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 3)'; rollback; return; end if; end if; --2.2.5处理交费表 if as_SFDZ00='Y' and instrb(as_CXJSYY,'出院')>0 then --呆账病人出院结算 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,DQBQ00,PLBH00) values(SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,-1*ls_CYYTK0,9,'逃跑欠费','0',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,decode(sign(-1*ls_CYYTK0),1,'0','1'),0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3); elsif (ls_SSWUTSCL = 'Y') and (as_SFDZ00<>'Y')and instrb(as_CXJSYY,'出院')>0 and ls_XJYE00<>0 then --非呆账出院结算,可能需要进行四舍五入 ls_SSWR00:=ls_XJYE00-round(ls_XJYE00+0.04,1); ls_XJYE00:=round(ls_XJYE00+0.04,1); if abs(ls_SSWR00) > 0.1 then as_YHMSG0:='系统结算四舍五入金额发生错误,该部分的金额不能为大于1的值!'; as_SYSMSG:='退还金额:'||to_char(ls_XJYE00)||',四舍五入后金额:'||to_char(round(ls_XJYE00,1)); rollback; return; end if; if ls_SSWR00<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,DQBQ00,PLBH00,ZYID00) values(SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,-ls_SSWR00,5,'四舍五入金额','','','',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,decode(sign(ls_SSWR00),1,'0','1'),0,ad_NEWJZH,ls_DQBQ00,'3',ls_ZYID00); end if; end if; if ls_XJYE00<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,zyid00,dqbq00,PLBH00) values(SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,-ls_XJYE00,1,'现金','','','',ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,decode(sign(-ls_XJYE00),1,'0','1'),0,ad_NEWJZH,ls_ZYID00,ls_DQBQ00,3); end if; if ls_ZZYE00<>0 then select ZPKHYH,ZPDWMC into ls_ZPKHYH,ls_ZPDWMC from ZY_BRJFB0 where DJH000=(select max(DJH000) from ZY_BRJFB0 where ZYID00 =ls_ZYID00); Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,DQBQ00,PLBH00,ZYID00) values(SQ_ZY_BRJFB0_DJH000.nextval,ls_BRID00,0,-ls_ZZYE00,2,'转账','',ls_ZPKHYH,ls_ZPDWMC,ls_NEWPJH, ls_CZRQ00,ls_CZSJ00,ad_CZY000,as_CZYXM0,0,decode(sign(-ls_ZZYE00),1,'0','1'),0,ad_NEWJZH,ls_DQBQ00,3,ls_ZYID00); end if; --2.2.6 填写结账单号 Update ZY_BRFY00 set JZDH00 = ad_NEWJZH where JZDH00+0=0 and DJH000>=as_QSDJH0 and DJH000<=as_ZZDJH0 and ZYID00 = ls_ZYID00; Update ZY_YBFS00 set JZDH00=ad_NEWJZH where ZYID00=ls_ZYID00 and CXBZ00='0' and JZDH00=0 and YBFSDH in (select distinct YBFSDH from ZY_BRFY00 d where (d.JZDH00 in (select k.JZDH00 from ZY_JZB000 k where k.ZYID00 = ls_ZYID00 start with k.JZDH00=ad_JZDH00 connect by prior k.CXJZDH=k.JZDH00) or d.JZDH00+0=0) and d.DJH000 >= as_QSDJH0 and d.DJH000 <= as_ZZDJH0 and d.ZYID00 = ls_ZYID00); end if; --单病种重新结算自费金额处理 by ZYSF-20150925-001 if (LS_SFQYBZ='1') or (LS_DBZBM0 is not null) then select HJJE00,GRZHZF,TCJJZF,gwybz0,ZFJE00,YBYL04,YBYL05,YBYL12 into ls_HJJE00,ls_GRZHZF,ls_TCJJZF,ls_gwybz0,LS_GRZFE0,ls_YBYL04,ls_YBYL05,ls_YBYL12 from ZY_YBFS00 where ZYID00=ls_ZYID00 and JZDH00=ad_NEWJZH; if nvl(ls_YBYL05,0)>0 then LS_ZFJE00:=nvl(ls_YBYL12,0)+nvl(ls_YBYL05,0); else LS_ZFJE00:=nvl(ls_YBYL12,0); end if; if (SF_ZY_DBZXZQH(ls_ZYID00)='1') and (ls_YBYL04>ls_HJJE00) then --0:不启用 1:启用 LS_ZFJE00:=LS_GRZFE0; end if; --ZY_DBZYYZF:住院单病种结算病种差额(医院支付)是否由病人实际支付 Y:病人支付 N:医院支付 默认值:Y if SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N' then --by ZYSF-20160901-001 LS_ZFJE00:=LS_GRZFE0; end if; update ZY_JZB000 set ZFJE00=LS_ZFJE00, XJFKJE=LS_ZFJE00, XJYE00=nvl(YSZJE0,0)-LS_ZFJE00 where ZYID00=ls_ZYID00 and JZDH00=ad_NEWJZH; end if; --把账户金额置为零 if instrb(as_CXJSYY,'出院')>0 then Update ZY_BRZHXX set XJYE00=0,ZZYE00=0,WJSJE0=0,ZYE000=0,YKZYE0=0 where BRID00=ls_BRID00; -- SP_ZY_YBCYDJ(ad_CZY000,as_CZYXM0,ls_BRID00,2,ls_ZYID00,'4',as_YHMSG0,as_SYSMSG); end if; SP_ZY_JZMXXM_SJZL00; EXCEPTION WHEN NO_DATA_FOUND THEN as_YHMSG0:='系统没有找到可冲销的单据号,操作失败!'; as_SYSMSG:=SQLERRM; rollback; WHEN OTHERS THEN as_YHMSG0:='出错原因不详,请记录此信息并和系统管理员联系!'; as_SYSMSG:=substr(SQLERRM||'执行存储过程错误:SP_ZY_CXJS00_REG000('||to_char(ad_JZDH00)||','||to_char(ad_CZY000)||','|| as_CZYXM0||','||to_char(ad_CZYKS0)||','||as_YJJXH0||','||as_SFDZ00||',ad_NEWJZH,as_YHMSG0,as_SYSMSG)',1,150); rollback; END; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prompt 10、住院医保病人收费补充登记(没有事务控制) SP_ZY_YBSF00_BCREG0 create or replace procedure SP_ZY_YBSF00_BCREG0 ( as_YBDJH0 IN CHAR, --医保单据号 ad_JZDH00 IN NUMBER, --结账单流水号 as_YBLB00 IN CHAR, --对应医保类别ID(该字段的尚未使用) ad_DJH000 IN NUMBER, --病人交费单据流水号(自费部分) ad_TJDJH0 IN NUMBER, --统筹基金的单据流水号 ad_GZDJH0 IN NUMBER, --个人账户的单据流水号 ad_ZFJE00 IN NUMBER, --个人现金支付 ad_TCJJZF IN NUMBER, --医保统筹基金支付 ad_GRZHZF IN NUMBER, --医保个人账户支付 ad_YBXJZF IN NUMBER default 0, --医保现金支付,厦门医保为了统计医保平均数增加 zhr 2003.12.27 ad_SBTJDH IN NUMBER, --商保统筹基金单据流水号 ad_SBZHDH IN NUMBER, --商保个人帐户单据流水号 ad_SBZFJE IN NUMBER, --商保个人现金支付金额 ad_SBTJJE IN NUMBER, --商保统筹基金支付金额 ad_SBZHJE IN NUMBER, --商保个人帐户支付金额 as_YBJZRQ IN CHAR, --医保结算日期 as_YBJZSJ IN CHAR, --医保结算时间 ad_ypwqzf in number default 0, --药品完全自费合计 ad_xmwqzf in number default 0, --项目完全自费合计 ad_ypbfzf in number default 0, --药品部分自付合计 ad_xmbfzf in number default 0, --项目部分自付合计 ad_ybqfje in number default 0, --医保起伏线 ad_ybzhye in number default 0, --医保帐户余额 ad_GWYBZ0 IN NUMBER default 0, --公务员补助 ad_jjzfe0 in number default 0, --保健基金支付 ad_jjdjh0 in number default 0, --保健基金支付单据号 as_BJJBIE IN CHAR default '04', --保健级别 '00':无级别或非保健人员 '01' 一级 '02' 二级 '03' 三级,'04' 是还未从医保那边获取病人的保健级别时的值 ad_SYBXZF IN NUMBER default 0, --商业保险支付 ad_SYDJH0 IN NUMBER default 0, --商业保险支付单据号 ad_FYBFY0 IN NUMBER default 0, --非医保金额 as_YHMSG0 OUT VARCHAR, --存储过程提示的错误信息 as_SYSMSG OUT VARCHAR --系统提示的错误信息 ) -- MODIFICATION HISTORY -- Person Date Comments -- xzw 2007.06.20 传递参数增加保健基金单据流水号,保健基金支付额,保健级别; -- jlg 2007.07.30 增加传入参数公务员补助ad_GWYBZ0 -- jlg 2007.08.07 增加商业保险支付金额的处理ZYSF-20070806-004 -- jlg 2007.08.23 增加传入参数非医保金额ad_FYBJE0 -- qks 2009.12.29 修改ZY_JZB000.YBRYRQ,YBZYH0 --zhangyc 2017.07.07 修改商保统筹或商保账户支付根据 IC_YBBRLB.YBBHSB=14 判断 as ls_PJH000 ZY_JZB000.PJH000%TYPE; LS_XJYE00 ZY_JZB000.XJYE00%TYPE; LS_ZZYE00 ZY_JZB000.ZZYE00%TYPE; LS_YSZJE0 ZY_JZB000.YSZJE0%TYPE; LS_ZZZJE0 ZY_JZB000.ZZZJE0%TYPE; ls_brid00 zy_jzb000.brid00%type; ls_hshjje zy_jzb000.hjje00%type; ls_hjje00 zy_jzb000.hjje00%type; ld_ZFJE00 zy_jzb000.zfje00%type; ld_SBJE00 zy_jzb000.zfje00%type; --商保金额 Vsbdlyb char(1); --商保支付是否独立于医保支付金额 ls_zyid00 zy_jzb000.zyid00%type; ls_ybryrq zy_jzb000.ybryrq%type; ls_ybzyh0 zy_jzb000.ybzyh0%type; LS_YBBHSB IC_YBBRLB.YBBHSB%TYPE; LS_SBGRZH ZY_JZB000.GRZHZF%TYPE; --商保个人医疗账户支付(医保返回) LS_SBTCJJ ZY_JZB000.TCJJZF%TYPE; --商保统筹基金支付(医保返回) BEGIN LS_ZZYE00:=0; LS_XJYE00:=0; LS_YSZJE0:=0; LS_ZZZJE0:=0; ls_hshjje:=0; ls_hjje00:=0; ld_ZFJE00:=ad_ZFJE00; LS_SBGRZH:=nvl(ad_SBZHJE,0); --商保个人医疗账户支付(医保返回) LS_SBTCJJ:=nvl(ad_SBTJJE,0); --商保统筹基金支付(医保返回) if ad_JZDH00=0 then Return; end if; select sum(XMJE00) INTO ls_HSHJJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and sfylxm='N'; SELECT YSZJE0,ZZZJE0,brid00,hjje00,zyid00 INTO LS_YSZJE0,LS_ZZZJE0,ls_brid00,ls_hjje00,ls_zyid00 FROM ZY_JZB000 where JZDH00 = ad_JZDH00; select GREATEST(ryrq00,to_char(sysdate,'YYYY')||'0101'),Trim(ybzyh0) into ls_ybryrq,ls_ybzyh0 from zy_brxxb0 where zyid00=LS_ZYID00; select b.YBBHSB into LS_YBBHSB from ZY_BRXXB0 A,IC_YBBRLB B where A.FBBH00 = B.FBBH00 and A.YBLB00 = B.YBLB00 and A.ZYID00 = LS_ZYID00; --统筹基金中已经包含(商保统筹和商保账户支付) if instrb(','||LS_YBBHSB||',',',14,')>0 then LS_SBGRZH:=0; --商保个人医疗账户支付(医保返回) LS_SBTCJJ:=0; --商保统筹基金支付(医保返回) end if; IF LS_ZZZJE0>=NVL(ld_ZFJE00,0) THEN --+NVL(ad_SBZFJE,0) LS_ZZYE00:=LS_ZZZJE0-(NVL(ld_ZFJE00,0)+NVL(ls_hshjje,0));--+NVL(ad_SBZFJE,0)); LS_XJYE00:=LS_YSZJE0; ELSE LS_XJYE00:=(LS_ZZZJE0+LS_YSZJE0)-(NVL(ld_ZFJE00,0)+nvl(ls_hshjje,0));--+NVL(ad_SBZFJE,0) LS_ZZYE00:=0; END IF; --select PJH000 into ls_PJH000 from ZY_JZB000 where JZDH00 = ad_JZDH00; Update ZY_BRFY00 set YBDJH0 = decode(trim(ybfsdh),'0',as_YBDJH0,YBDJH0) where jzdh00 in ( select b.jzdh00 from ZY_JZB000 B where b.brid00=ls_brid00 start with B.jzdh00=ad_JZDH00 connect by prior B.cxjzdh=B.jzdh00) ; --JZDH00 = ad_JZDH00; Update ZY_JZB000 set YBDJH0 = as_YBDJH0,ybryrq = ls_ybryrq,ybzyh0 = ls_ybzyh0 where JZDH00 = ad_JZDH00; if ad_DJH000 > 0 then --考虑中途结算也调用本存储过程,中途结算不针对现金病人 Update ZY_BRJFB0 set JFJE00 = NVL(ld_ZFJE00,0)+nvl(ls_hshjje,0)--+NVL(ad_SBZFJE,0) where DJH000 = ad_DJH000; end if; Update ZY_BRJFB0 set JFJE00 = ad_TCJJZF where DJH000 = ad_TJDJH0; Update ZY_BRJFB0 set JFJE00 = ad_GRZHZF where DJH000 = ad_GZDJH0; Update ZY_BRJFB0 set JFJE00 = LS_SBTCJJ --商保统筹基金支付金额 where DJH000 = ad_SBTJDH; Update ZY_BRJFB0 set JFJE00 = LS_SBGRZH --商保个人帐户支付金额 where DJH000 = ad_SBZHDH; Update ZY_BRJFB0 set JFJE00 = ad_JJZFE0 --保健基金支付金额 where DJH000 = ad_JJDJH0; Update ZY_BRJFB0 set JFJE00 = ad_SYBXZF --商业保险支付金额 where DJH000 = ad_SYDJH0; Update ZY_JZB000 set GRZHZF = ad_GRZHZF, --个人账户支付 TCJJZF = ad_TCJJZF, --统筹基金支付 ZFJE00 = NVL(ld_ZFJE00,0)+nvl(ls_hshjje,0),--+NVL(ad_SBZFJE,0), --个人现金支付 YBXJZF = ad_YBXJZF, --医保现金支付 YBJZRQ = as_YBJZRQ, --医保结算日期 YBJZSJ = as_YBJZSJ, --医保结算时间 XJFKJE = NVL(ld_ZFJE00,0),--+NVL(ad_SBZFJE,0), --现金付款 SBGRZH = ad_SBZHJE, --商保个人帐户金额 SBTCJJ = ad_SBTJJE, --商保统筹基金 XJYE00 = LS_XJYE00, ZZYE00 = LS_ZZYE00, ypwqzf = ad_ypwqzf, xmwqzf = ad_xmwqzf, ypbfzf = ad_ypbfzf, xmbfzf = ad_xmbfzf, ybqfje = ad_ybqfje, GWYBZ0 = ad_GWYBZ0, ybzhye = ad_ybzhye, jjzfe0 = ad_jjzfe0, SYBXZF = ad_SYBXZF, FYBJE0 = ad_FYBFY0 where JZDH00 = ad_JZDH00; update ZY_BRZHXX set YBYJS0=0 ,YBYZF0 =0 where BRID00=ls_brid00 and JFLBID = 2; update BM_BRXXB0 SET BJJBIE=as_BJJBIE WHERE BRID00=ls_BRID00; --重新计算自付金额 select substrb(nvl(trim(upper(max(Value0))),'Y'),1,1) into Vsbdlyb from XT_XTCS00 where name00='ZY_GRZFSFBHSB'; SELECT decode(Vsbdlyb,'Y',ad_SBZHJE+ad_SBTJJE,0) INTO ld_SBJE00 FROM DUAL; select ls_hjje00-(ad_GRZHZF+ad_TCJJZF+decode(Vsbdlyb,'Y',ad_SBZHJE+ad_SBTJJE,0)+nvl(ls_hshjje,0)) into ld_ZFJE00 from dual; if ls_hjje00<>(NVL(ld_ZFJE00,0)+ad_GRZHZF+ad_TCJJZF+ld_SBJE00+nvl(ls_hshjje,0)) then as_YHMSG0:='出错原因:HJJE00('||to_char(ls_hjje00)||')<>ZFJE00('||to_char(ld_ZFJE00)||')+GRZHZF('||to_char(ad_GRZHZF)||')+TCJJZF('||to_char(ad_TCJJZF)||')+SBGRZH('||to_char(ad_SBZHJE)||')+SBTCJJ('||to_char(ad_SBTJJE)||')+hshjje('||to_char(nvl(ls_hshjje,0))||')!'; as_SYSMSG:=substr(SQLERRM||'执行存储过程错误',1,150); ROLLBACK; end if; --修改说明:发票上的现金金额,转账金额是费用的合计金额 -- Update ZY_PJSYQK set XJJE00 = ld_ZFJE00, -- ZZJE00 = ad_GRZHZF+ad_TCJJZF -- where PJH000 = ls_PJH000; EXCEPTION WHEN OTHERS THEN as_YHMSG0:='出错原因不详,请记录此信息并和系统管理员联系!'; as_SYSMSG:=substr(SQLERRM||'执行存储过程错误:SP_ZY_YBSF00_BCREG0('||as_YBDJH0||','||to_char(ad_DJH000)||','||to_char(ad_TJDJH0)||','|| to_char(ad_GZDJH0)||','||to_char(ad_JZDH00)||','||as_YBLB00||','||to_char(ad_ZFJE00)||','||to_char(ad_TCJJZF)||','||to_char(ad_GRZHZF)||',as_YHMSG0,as_SYSMSG)',1,150); ROLLBACK; END; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prompt 70、生成收费员现金日报表对应的会计信息的存储过程 SP_ZY_JKKJXX_TJ0000 create or replace procedure SP_ZY_JKKJXX_TJ0000 ( as_KSRQ00 in char, as_JSRQ00 in char, as_KSSJ00 in char, as_JSSJ00 in char, as_SFY000 in char, --收费员姓名 ad_ID0000 out number, as_YHMSG0 out varchar, --存储过程提示的错误信息 as_SYSMSG out varchar --系统提示的错误信息 ) as -- MODIFICATION HISTORY -- Person Date Comments --zhangyc 2013.10.10 增加单病种结算功能 by ZYSF-20131011-001 --zhangyc 2015.02.27 修改医院支付算法 by ZYSF-20150226-001 --qks 2016.05.20 增加 其中:自助机银行卡 by ZYSF-20160509-002 /* 1:冲预收款=冲预收款-收医院支付票据金额(LS_YYZFSK) 2:退非医保款=退非医保款+退医院支付票据金额(LS_YYZFTK) 3:实交现金=实交现金-(收医院支付票据金额(LS_YYZFSK)+退医院支付票据金额(LS_YYZFTK)) */ --zhangyc 2016.07.08 修改 医院支付=医院支付(收入)+医院支付(支出) by ZYSF-20160623-002 --zhangyc 2016.10.13 增加SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N'判断 by ZYSF-20161013-001 --zhangyc 2017.07.07 修改商保统筹或商保账户支付根据 IC_YBBRLB.YBBHSB=14 判断 ls_YGBH00 BM_YGBM00.YGBH00%TYPE; ls_ZWXM00 BM_YGBM00.ZWXM00%TYPE; ls_JKDH00 BM_JKB000.JKDH00%TYPE; ls_XMJE00 BM_JKKJMX.XMJE00%TYPE ; --项目金额0 ls_BEIZH0 BM_JKKJMX.BEIZHU%TYPE ; --备注 ls_BEIZH1 BM_JKKJMX.BEIZHU%TYPE ; --备注1 ls_BEIZH2 BM_JKKJMX.BEIZHU%TYPE ; --备注1 ls_TEXT00 VARCHAR2(600); ls_COUNT0 NUMBER(5); ls_ZPSR00 NUMBER(12,2); --支票收入 ls_YHKSR0 NUMBER(12,2); --银行卡收入 ls_YHKJS0 NUMBER(12,2); --银行卡结算 ls_YBJS00 NUMBER(12,2); --医保结算 ls_JMBRYF NUMBER(12,2); --减免病人医药费 ls_CZYFY0 NUMBER(12,2); --冲住院费用 LS_JZJE00 NUMBER(12,2); --记账金额 ls_TJZJE0 NUMBER(12,2); --退记账款 ls_JZYSK0 NUMBER(12,2); --记账应收款 ls_CYYSK0 NUMBER(12,2); --出院病人应收款 ls_XMJE01 NUMBER(12,2); ls_XMJE02 NUMBER(12,2); ls_XMJE03 NUMBER(12,2); ls_XMJE04 NUMBER(12,2); ls_XMJE05 NUMBER(12,2); ls_XMJE06 NUMBER(12,2); ls_XMJE07 NUMBER(12,2); ls_XMJE08 NUMBER(12,2); ls_XMJE09 NUMBER(12,2); ls_XMJE10 NUMBER(12,2); ls_XMJE11 NUMBER(12,2); ls_XMJE12 NUMBER(12,2); ls_XMJE13 NUMBER(12,2); ls_XMJE14 NUMBER(12,2); ls_XMJE15 NUMBER(12,2); ls_XMJE16 NUMBER(12,2); ls_XMJE17 NUMBER(12,2); ls_XMJE18 NUMBER(12,2); ls_XMJE19 NUMBER(12,2); ls_XMJE20 NUMBER(12,2); ls_XMJE21 NUMBER(12,2); ls_XMJE22 NUMBER(12,2); ls_XMJE23 NUMBER(12,2); ls_XMJE24 NUMBER(12,2); ls_XMJE25 NUMBER(12,2); ls_XMJE26 NUMBER(12,2); ls_XMJE27 NUMBER(12,2); ls_XMJE28 NUMBER(12,2); ls_XMJE29 NUMBER(12,2); --保存在医院系统中计算的医保个人帐户支付的金额 ls_XMJE30 NUMBER(12,2); --暂时未使用 ls_XMJE31 NUMBER(12,2); --暂时未使用 ls_XMJE32 NUMBER(12,2); --暂时未使用 ls_XMJE33 NUMBER(12,2); ls_XMJE34 NUMBER(12,2); ls_XMJE35 NUMBER(12,2); --收预交金 ls_XMJE36 NUMBER(12,2); --退预交金 ls_sswr00 NUMBER(12,2); --四舍五入金额 ls_sswr01 NUMBER(12,2); --四舍五入金额 ls_KSBH00 BM_GHKSTJ_KSDY00.BH0000%TYPE; ls_KSBHJS NUMBER(4); Vsbdlyb char(1); --商保支付是否独立于医保支付金额 LS_SFJKSJXJYYZF Varchar2(100); LS_YYZFJE NUMBER(12,2); --医院支付金额 LS_YYZFSK NUMBER(12,2); --收医院支付票据金额 LS_YYZFTK NUMBER(12,2); --退医院支付票据金额 LS_DBZSR0 number(12,2); --收单病种收入(ZY_JZB000.YBYL05<0) LS_DBZSRS number(12,2); --收单病种收入(ZY_JZB000.YBYL05<0) LS_DBZSRT number(12,2); --退单病种收入(ZY_JZB000.YBYL05<0) LS_DBZZC0 number(12,2); --收单病种支出(ZY_JZB000.YBYL05>0) LS_DBZZCS number(12,2); --收单病种支出(ZY_JZB000.YBYL05>0) LS_DBZZCT number(12,2); --退单病种支出(ZY_JZB000.YBYL05>0) ls_YHKSR1 NUMBER(12,2); --自助机银行卡收入 CURSOR CUR_ZY_BRJFB0_SFY000 IS select YGBH00,ZWXM00 from BM_YGBM00 B where exists( select 1 from ZY_BRJFB0 A where A.JFCZY0 = B.YGBH00 AND A.JFRQ00 >= as_KSRQ00 AND A.JFRQ00 <= as_JSRQ00 AND A.JFRQ00||A.JFSJ00 >= as_KSRQ00||as_KSSJ00 AND A.JFRQ00||A.JFSJ00 <= as_JSRQ00||as_JSSJ00) AND (B.ZWXM00||'_'||B.XKH000 = as_SFY000 or as_SFY000='所有收费员'); BEGIN select substrb(nvl(trim(upper(max(Value0))),'Y'),1,1) into Vsbdlyb from XT_XTCS00 where name00='ZY_GRZFSFBHSB'; --ZY_SFJKSJXJYYZF 住院收费员交款登记(SP_ZY_JKB000_REG000)实缴现金是否扣除医院支付金额 Y扣除,N不扣除 begin select Trim(Value0) into LS_SFJKSJXJYYZF from XT_XTCS00 where name00='ZY_SFJKSJXJYYZF'; exception when others then LS_SFJKSJXJYYZF:='N'; end; --ZY_DBZYYZF 住院单病种结算病种差额(医院支付)是否由病人实际支付 Y:病人支付 N:医院支付 默认值:Y if SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N' then LS_SFJKSJXJYYZF:='Y'; end if; --7、应缴金额=1、预交金收入+2、住院票据金额-3、预交金退出-4、退款收据+(4)现金暂存 ls_XMJE29:=0; --保存在医院系统中计算的医保个人帐户支付的金额 ls_KSBH00:='01'; ls_KSBHJS:=1; Select SQ_BM_YYSFTJ_ID0000.nextval into ad_ID0000 from dual; OPEN CUR_ZY_BRJFB0_SFY000; LOOP FETCH CUR_ZY_BRJFB0_SFY000 INTO ls_YGBH00,ls_ZWXM00; EXIT WHEN CUR_ZY_BRJFB0_SFY000%NOTFOUND; Insert into BM_GHKSTJ_KSDY00(ID0000,BH0000,GHKSBH,GHKSMC) values(ad_ID0000,ls_KSBH00,ls_YGBH00,ls_ZWXM00); ls_KSBHJS:=ls_KSBHJS+1; Select lpad(to_char(ls_KSBHJS),2,'0') into ls_KSBH00 from dual; END LOOP; CLOSE CUR_ZY_BRJFB0_SFY000; insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,1 ,' 1、预交金收入',0); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,37 ,' (1)、收预交金',1); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,38 ,' (2)、退预交金',2); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,2 ,' 2、住院票据金额',3); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,3 ,' 其中: (1)冲预收款',4); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,4 ,' (2)冲原收据',5); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,5 ,' (3)补交现金',6); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,6 ,' (4)补交支票',7); -- insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,7 ,' (5)银行卡结算',8); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,8 ,' (6)医保结算',9); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,11,' (7)减免病人医药费',10); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,12,' (8)记帐金额',11); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,9 ,' (9)出院病人应收款',12); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,13,' 3、预交金退出',13); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,14,' 其中: (1)冲住院费用',14); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,15,' (2)现金退出',15); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,16,' (3)应退还转账',16); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,17,' (4)现金暂存',17); --insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,18,' (5)四舍五入',18); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,20,' 4、退款收据',19); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,21,' 其中:(1)退非医保款',20); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,22,' (2)退医保款',21); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,23,' (3)退记帐款',22); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,39,' (4)退减免款',23); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,40,' (5)退出院病人应收款',24); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,19,' 5、收回旧收据',25); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,10,' 6、补开新收据',26); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,24,' 7、应缴金额 ',27); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,25,' 8、支票收入 ',28); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,26,' 9、银行卡收入 ',29); -- insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,28,'10、银行卡结算 ',30); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,28,' 其中:自助机银行卡',30); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,29,'11、医保结算 ',31); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,30,'12、出院病人应收款',32); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,31,'13、减免病人医药费',33); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,32,'14、记帐应收款',34); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,48,' 15、医院支付',34.1); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,49,' 其中:(1)医院支付(收入)',34.2); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,50,' (2)医院支付(支出)',34.3); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,34,'16、四舍五入',35); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,35,'19、实交现金',36); insert into BM_GHKSTJ(ID0000,DYID00,GHRQ00,GHKS80) values(ad_ID0000,36,'20、7-15合计',37); OPEN CUR_ZY_BRJFB0_SFY000; LOOP FETCH CUR_ZY_BRJFB0_SFY000 INTO ls_YGBH00,ls_ZWXM00; EXIT WHEN CUR_ZY_BRJFB0_SFY000%NOTFOUND; ls_ZPSR00 :=0; --支票收入 ls_YHKSR0 :=0; --银行卡收入 ls_YHKSR1 :=0; --自助机银行卡收入 ls_YHKJS0 :=0; --银行卡结算 ls_YBJS00 :=0; --医保结算 ls_JMBRYF :=0; --减免病人医药费 ls_XMJE01 :=0; ls_XMJE02 :=0; ls_XMJE03 :=0; ls_XMJE04 :=0; ls_XMJE05 :=0; ls_XMJE06 :=0; ls_XMJE07 :=0; ls_XMJE08 :=0; ls_XMJE09 :=0; ls_XMJE10 :=0; ls_XMJE11 :=0; ls_XMJE12 :=0; ls_XMJE13 :=0; ls_XMJE14 :=0; ls_XMJE15 :=0; ls_XMJE16 :=0; ls_XMJE17 :=0; ls_XMJE18 :=0; ls_XMJE19 :=0; ls_XMJE20 :=0; ls_XMJE21 :=0; ls_XMJE22 :=0; ls_XMJE23 :=0; ls_XMJE24 :=0; ls_XMJE25 :=0; ls_XMJE26 :=0; ls_XMJE27 :=0; ls_XMJE28 :=0; ls_xmje35 :=0; ls_sswr00 :=0; ls_sswr01 :=0; LS_YYZFJE :=0; LS_YYZFSK:=0; --收医院支付票据金额 LS_YYZFTK:=0; --退医院支付票据金额 LS_DBZSR0:=0; --收单病种收入(ZY_JZB000.YBYL05<0) LS_DBZSRS:=0; --收单病种收入(ZY_JZB000.YBYL05<0) LS_DBZSRT:=0; --退单病种收入(ZY_JZB000.YBYL05<0) LS_DBZZC0:=0; --收单病种支出(ZY_JZB000.YBYL05>0) LS_DBZZCS:=0; --收单病种支出(ZY_JZB000.YBYL05>0) LS_DBZZCT:=0; --退单病种支出(ZY_JZB000.YBYL05>0) select BH0000 into ls_KSBH00 from BM_GHKSTJ_KSDY00 where ID0000 = ad_ID0000 and GHKSBH = ls_YGBH00; --==预交金 --Update 1.预交金收入 select NVL(sum(B.XJJE00),0),NVL(sum(B.ZZJE00),0),NVL(sum(YHKJE0),0), ltrim(min(lpad(trim(B.pjxh00),30,' ')))||' - '||ltrim(max(lpad(trim(B.pjxh00),30,' '))), NVL(sum(decode(sign(instr(a.JYLXMC,'自助机')),1,YHKJE0,0)),0) into ls_XMJE00,ls_ZPSR00,ls_YHKSR0,ls_BEIZH0,ls_YHKSR1 from ZY_BRJFB0 A,ZY_PJSYQK B where A.PJH000 = B.PJH000 and B.PLBH00 in (4,8) and A.JFRQ00 >= as_KSRQ00 and A.JFRQ00 <= as_JSRQ00 and A.JFRQ00||A.JFSJ00 >= as_KSRQ00||as_KSSJ00 and A.JFRQ00||A.JFSJ00 <= as_JSRQ00||as_JSSJ00 and substr(B.PJXH00,1,1) <> '-' and A.JFCZY0 = ls_YGBH00 and B.PJZT00='0' and A.JZDH00 <> 1 ; --作废的预交金票据不计算在内! ls_XMJE01 := NVL(ls_XMJE00,0)+NVL(ls_ZPSR00,0)+NVL(ls_YHKSR0,0); --1.1收预交金 select NVL(sum(B.XJJE00),0)+NVL(sum(B.ZZJE00),0)+NVL(sum(YHKJE0),0) into ls_xmje35 from ZY_BRJFB0 A,ZY_PJSYQK B where A.PJH000 = B.PJH000 and B.PLBH00 in (4,8) and A.JFRQ00 >= as_KSRQ00 and A.JFRQ00 <= as_JSRQ00 and A.JFRQ00||A.JFSJ00 >= as_KSRQ00||as_KSSJ00 and A.JFRQ00||A.JFSJ00 <= as_JSRQ00||as_JSSJ00 and substr(B.PJXH00,1,1) <> '-' and A.JFBZ00='0' and B.PJZT00='0' and A.JFCZY0 = ls_YGBH00 and A.JZDH00 <> 1 ; --作废的预交金票据不计算在内! --1.2退预交金 select NVL(sum(B.XJJE00),0)+NVL(sum(B.ZZJE00),0)+NVL(sum(YHKJE0),0) into ls_xmje36 from ZY_BRJFB0 A,ZY_PJSYQK B where A.PJH000 = B.PJH000 and B.PLBH00 in (4,8) and A.JFRQ00 >= as_KSRQ00 and A.JFRQ00 <= as_JSRQ00 and A.JFRQ00||A.JFSJ00 >= as_KSRQ00||as_KSSJ00 and A.JFRQ00||A.JFSJ00 <= as_JSRQ00||as_JSSJ00 and substr(B.PJXH00,1,1) <> '-' and A.JFBZ00='1' and B.PJZT00='0' and A.JFCZY0 = ls_YGBH00 and A.JZDH00 <> 1 ; --作废的预交金票据不计算在内! --==2、住院票据 select nvl(sum(HJJE00),0),--住院票据 --NVL(sum(decode(Vsbdlyb,'Y',SBGRZH+SBTCJJ,0)+decode(d.sfjsdw,'N',0,GRZHZF)+TCJJZF),0), --2.6医保结算 NVL(sum(decode(sign(Instrb(','||trim(d.ybbhsb)||',',',14,')),1,0,SBGRZH+SBTCJJ)+decode(d.sfjsdw,'N',0,GRZHZF)+TCJJZF),0), --2.6医保结算 NVL(abs(sum(JZJE00)),0), --记账金额 NVL(sum(GFJE00),0), --减免病人医药费 NVL(sum(CYYSK0),0), --出院病人应收款 nvl(sum(YBYL05),0), --医院支付金额 nvl(sum(decode(sign(YBYL05),-1,YBYL05,0)),0),--单病种收入(住院票据金额) nvl(sum(decode(sign(YBYL05),1,YBYL05,0)),0) --单病种支出(住院票据金额) into ls_XMJE02,ls_YBJS00,ls_JZJE00,ls_JMBRYF,ls_CYYSK0,LS_YYZFSK,LS_DBZSRS,LS_DBZZCS from ZY_JZB000 A,BM_BRXXB0 C,IC_YBBRLB D where A.BRID00=C.BRID00 and C.YBLB00=D.YBLB00 and C.FBBH00=D.FBBH00 and A.PJH000 in (select FZPJH0 from ZY_PJSYQK where DYRQ00 >= as_KSRQ00 and DYRQ00 <= as_JSRQ00 and DYRQ00||DYSJ00 >= as_KSRQ00||as_KSSJ00 and DYRQ00||DYSJ00 <= as_JSRQ00||as_JSSJ00 and CZY000=ls_YGBH00 and BDBZ00='0' and PLBH00=3 and substr(PJXH00,1,1)<>'-'); --2(2)冲原收据,或叫冲原发票 select NVL(abs(sum(a.ZFJE00+decode(d.sfjsdw,'N',a.GRZHZF,0)-a.CYYSK0)),0) into ls_XMJE04 from ZY_JZB000 A,BM_BRXXB0 C,IC_YBBRLB D where A.BRID00=C.BRID00 and C.YBLB00=D.YBLB00 and C.FBBH00=D.FBBH00 and A.PJH000 in (select FZPJH0 from ZY_PJSYQK where DYRQ00 >= as_KSRQ00 and DYRQ00 <= as_JSRQ00 and DYRQ00||DYSJ00 >= as_KSRQ00||as_KSSJ00 and DYRQ00||DYSJ00 <= as_JSRQ00||as_JSSJ00 and CZY000=ls_YGBH00 and BDBZ00='0' and PLBH00=3 and substr(PJXH00,1,1)='-'); select ltrim(min(lpad(trim(B.pjxh00),30,' ')))||' - '||ltrim(max(lpad(trim(B.pjxh00),30,' '))) into ls_BEIZH1 from ZY_PJSYQK B where B.PLBH00=3 and B.CZY000 = ls_YGBH00 and B.DYRQ00 >= as_KSRQ00 and B.DYRQ00 <= as_JSRQ00 and B.DYRQ00||B.DYSJ00 >= as_KSRQ00||as_KSSJ00 and B.DYRQ00||B.DYSJ00 <= as_JSRQ00||as_JSSJ00 and substr(B.PJXH00,1,1) <> '-'; select ltrim(min(lpad(trim(B.pjxh00),30,' ')))||' - '||ltrim(max(lpad(trim(B.pjxh00),30,' '))) into ls_BEIZH2 from ZY_PJSYQK B where B.PLBH00=10 and B.CZY000 = ls_YGBH00 and B.DYRQ00 >= as_KSRQ00 and B.DYRQ00 <= as_JSRQ00 and B.DYRQ00||B.DYSJ00 >= as_KSRQ00||as_KSSJ00 and B.DYRQ00||B.DYSJ00 <= as_JSRQ00||as_JSSJ00 and substr(B.PJXH00,1,1) <> '-'; ls_BEIZH1:=ls_BEIZH1||','||ls_BEIZH2; --2(3)补交现金,支票金额 select abs(nvl(sum(C.XJYE00+C.ZZYE00),0)) into ls_XMJE05 from ZY_JZB000 C WHERE C.PJH000 in (select FZPJH0 from ZY_PJSYQK where DYRQ00 >= as_KSRQ00 and DYRQ00 <= as_JSRQ00 and DYRQ00||DYSJ00 >= as_KSRQ00||as_KSSJ00 and DYRQ00||DYSJ00 <= as_JSRQ00||as_JSSJ00 and CZY000=ls_YGBH00 and BDBZ00='0' and PLBH00 =3) and ((C.XJYE00+C.ZZYE00<0 and C.HJJE00>0) or (C.XJYE00+C.ZZYE00>0 and C.HJJE00<0)) and c.CYYSK0=0; --2(4)补交转账 select NVL(sum(A.JFJE00),0) into ls_XMJE06 from ZY_BRJFB0 A,ZY_PJSYQK B,ZY_JZB000 C WHERE A.PJH000 = B.FZPJH0 and C.PJH000 = B.FZPJH0 and B.PLBH00 = 3 and A.ZFFS00 = 2 and A.JFLBID = 0 and A.JFBZ00 = 0 and A.JFJE00 > 0 and C.CXJZDH+0 = 0 and B.DYRQ00 >= as_KSRQ00 and B.DYRQ00 <= as_JSRQ00 and B.DYRQ00||B.DYSJ00 >= as_KSRQ00||as_KSSJ00 and B.DYRQ00||B.DYSJ00 <= as_JSRQ00||as_JSSJ00 and B.CZY000=ls_YGBH00; ls_XMJE05:=ls_XMJE05-ls_XMJE06; --2(1)冲预收款=冲住院费用 ,改为倒算 2.1=2-2.2-2.3-2.4-2.5-2.6-2.7-2.8-2.9-收医院支付票据金额(LS_YYZFSK) ls_XMJE03:=ls_XMJE02-ls_XMJE04-ls_XMJE05-ls_XMJE06-ls_YBJS00-ls_JZJE00-ls_JMBRYF-ls_CYYSK0-LS_YYZFSK; --as_YHMSG0:=to_char(ls_XMJE03)||','||to_char(ls_XMJE02)||','||to_char(ls_XMJE05)||','||to_char(ls_XMJE06)||','||to_char(ls_YBJS00)||','||to_char(ls_JZJE00)||','||to_char(ls_JMBRYF)||','||to_char(ls_CYYSK0); --ROLLBACK; --return; --计算应退还中的金额四舍五入部分 select nvl(sum(jfje00),0) into ls_sswr01 from zy_brjfb0 A, zy_pjsyqk B where A.JFCZY0 = ls_YGBH00 and B.PLBH00 =3 and A.pjh000 = B.fzpjh0 --and a.jflbid=2 --and b.pjzt00='0' --and substr(B.PJXH00,1,1) <> '-' and A.ZFFS00 = 5 and A.JFRQ00 >= as_KSRQ00 and A.JFRQ00 <= as_JSRQ00 and A.JFRQ00||A.JFSJ00 >= as_KSRQ00||as_KSSJ00 and A.JFRQ00||A.JFSJ00 <= as_JSRQ00||as_JSSJ00 and b.bdbz00='0'; --计算3、预交金退出金额 select NVL(sum(C.XJJE00+C.YHKJE0+C.ZZJE00),0) into ls_XMJE12 from ZY_PJSYQK C where C.PLBH00 in (4,8) and C.SFDY00 = 'Y' and C.HSRQ00 >=as_KSRQ00 and C.HSRQ00 <=as_JSRQ00 and C.HSRQ00||C.HSSJ00 >=as_KSRQ00||as_KSSJ00 and C.HSRQ00||C.HSSJ00 <=as_JSRQ00||as_JSSJ00 and C.HSCZY0 = ls_YGBH00 and C.PJZT00='0'; --计算3(3)应退还转账 select NVL(abs(sum(JFJE00)),0) into ls_XMJE15 from zy_brjfb0 A, zy_pjsyqk B where A.pjh000 = B.fzpjh0 and A.JFCZY0 = ls_YGBH00 and A.JFRQ00 >= as_KSRQ00 and A.JFRQ00 <= as_JSRQ00 and A.JFRQ00||A.JFSJ00 >= as_KSRQ00||as_KSSJ00 and A.JFRQ00||A.JFSJ00 <= as_JSRQ00||as_JSSJ00 and B.PLBH00 = 3 --预交金的部分不添加,否则冲住院费用相减时会不平 and A.ZFFS00 = 2 and A.JFLBID =2; --ls_ZPSR00:=ls_ZPSR00-ls_XMJE15; --3(4)计算现金暂存的 select NVL(sum(CYYTK0),0) into ls_XMJE16 from ZY_JZB000 A, ZY_PJSYQK B where A.PJH000 = B.FZPJH0 and B.PLBH00 = 3 and B.CZY000 = ls_YGBH00 and B.DYRQ00 >= as_KSRQ00 and B.DYRQ00 <= as_JSRQ00 and B.DYRQ00||B.DYSJ00 >= as_KSRQ00||as_KSSJ00 and B.DYRQ00||B.DYSJ00 <= as_JSRQ00||as_JSSJ00 --and substr(B.PJXH00,1,1) <> '-' and B.PJZT00= '0' and B.BDBZ00='0'; --3(2)应退还现金,用倒算方法 = 退出金额 - 冲住院费用 - 转帐 - 现金暂存 ls_XMJE14:=ls_XMJE12-ls_XMJE03-ls_XMJE16-ls_XMJE15; --3(2)应退还现金 --select sum(a.xjye00) into ls_XMJE14 from ZY_JZB000 A,BM_BRXXB0 C,IC_YBBRLB D -- where A.BRID00=C.BRID00 and C.YBLB00=D.YBLB00 and C.FBBH00=D.FBBH00 and -- A.PJH000 in (select FZPJH0 from ZY_PJSYQK where CZY000=ls_YGBH00 and DYRQ00>=as_KSRQ00 -- and DYRQ00 <= as_JSRQ00 and DYRQ00||DYSJ00 >= as_KSRQ00||as_KSSJ00 -- and DYRQ00||DYSJ00 <= as_JSRQ00||as_JSSJ00 and BDBZ00='0' and PLBH00=3 ); ---收回旧收据(补打发票) select NVL(sum(xjje00+zzje00+yhkje0),0) into ls_XMJE10 from ZY_PJSYQK B where B.PLBH00 in(3,10) --and PJZT00='0' and B.CZY000 = ls_YGBH00 and substr(B.PJXH00,1,1) <> '-' and B.DYRQ00 >= as_KSRQ00 and B.DYRQ00 <= as_JSRQ00 and B.DYRQ00||B.DYSJ00 >= as_KSRQ00||as_KSSJ00 and B.DYRQ00||B.DYSJ00 <= as_JSRQ00||as_JSSJ00 and B.BDBZ00='1';---补打发票 --==6、退款票据 select abs(nvl(sum(HJJE00),0)),--退款收据 --abs(NVL(sum(decode(Vsbdlyb,'Y',SBGRZH+SBTCJJ,0)+decode(d.sfjsdw,'N',0,GRZHZF)+TCJJZF),0)),--退款的医保款 abs(NVL(sum(decode(sign(Instrb(','||trim(d.ybbhsb)||',',',14,')),1,0,SBGRZH+SBTCJJ)+decode(d.sfjsdw,'N',0,GRZHZF)+TCJJZF),0)),--退款的医保款 abs(NVL(sum(JZJE00),0)),--退记账款 abs(NVL(sum(GFJE00),0)),--退减免款 abs(NVL(sum(CYYSK0),0)),--退出院病人应收款 nvl(sum(YBYL05),0), --医院支付金额(存在正负值不能用ABS) nvl(sum(decode(sign(YBYL05),1,YBYL05,0)),0),--单病种收入(退款收据) nvl(sum(decode(sign(YBYL05),-1,YBYL05,0)),0), --单病种支出(退款收据) count(*) into ls_XMJE19,ls_XMJE20,ls_TJZJE0,ls_XMJE25,ls_XMJE26, LS_YYZFTK,LS_DBZSRT,LS_DBZZCT, ls_COUNT0 from ZY_JZB000 A,BM_BRXXB0 C,IC_YBBRLB D where A.BRID00=C.BRID00 and C.YBLB00=D.YBLB00 and C.FBBH00=D.FBBH00 and A.PJH000 in (select FZPJH0 from ZY_PJSYQK where CZY000 = ls_YGBH00 and DYRQ00 >= as_KSRQ00 and DYRQ00 <= as_JSRQ00 and DYRQ00||DYSJ00 >= as_KSRQ00||as_KSSJ00 and DYRQ00||DYSJ00 <= as_JSRQ00||as_JSSJ00 and BDBZ00='0' and PLBH00=3 and substr(PJXH00,1,1)='-'); --6(1)退非医保款 ls_XMJE19:=ls_XMJE19-ls_XMJE20-ls_TJZJE0-ls_XMJE25-ls_XMJE26; --银行卡结算 --ls_TEXT00:='Update BM_GHKSTJ set GHKS'||ls_KSBH00||' =0 ' -- ||' where ID0000 ='|| TO_CHAR(ad_ID0000)||' and DYID00 in(7,28)';--银行卡结算 --SP_EXECUTE_SQL(ls_TEXT00); --记账应收款 ls_JZYSK0:=NVL(ls_JZJE00,0)-NVL(ls_TJZJE0,0); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||ls_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE35,0)) ||' where ID0000 ='|| TO_CHAR(ad_ID0000)||' and DYID00 = 37';--收预交金 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||ls_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE36,0)) ||' where ID0000 ='|| TO_CHAR(ad_ID0000)||' and DYID00 = 38';--退预交金 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||ls_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE01,0))||' ,BEIZHU =' ||''''||ls_BEIZH0||''''||' where ID0000 =' || TO_CHAR(ad_ID0000)||' and DYID00 = 1'; SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||ls_KSBH00||' = ' ||TO_CHAR(NVL(ls_ZPSR00,0)) ||' where ID0000 ='|| TO_CHAR(ad_ID0000)||' and DYID00 = 25'; SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||ls_KSBH00||' = '||TO_CHAR(NVL(ls_YHKSR0,0)) ||' where ID0000 ='|| TO_CHAR(ad_ID0000)||' and DYID00 = 26'; SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||ls_KSBH00||' = '||TO_CHAR(NVL(ls_YHKSR1,0)) ||' where ID0000 ='|| TO_CHAR(ad_ID0000)||' and DYID00 = 28'; SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||ls_KSBH00 ||' = '||TO_CHAR(NVL(ls_YHKJS0,0)) ||' where ID0000 ='||TO_CHAR (ad_ID0000)||' and DYID00 = 27'; SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_YBJS00,0)-NVL(ls_XMJE20,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 29'; --医保结算 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_YBJS00,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 8'; --医保结算 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(ls_XMJE02,0)) ||',BEIZHU ='||''''|| ls_BEIZH1||'''' ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 2'; --应收款收回 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_XMJE03,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 3'; --冲预收款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(ls_XMJE04,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 4'; --冲原收据 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_XMJE05,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 5'; --补交现金 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(ls_XMJE06,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 6'; --补交支票 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(LS_JZJE00,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 12'; --记账金额 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_JMBRYF,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 11'; --特殊结算 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_cyysk0,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 9'; --出院病人应收款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_XMJE12,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 13'; --预交金退出 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_XMJE03,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 14'; --冲住院费用 = 冲预收款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(ls_XMJE14,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 15'; --计算应退还现金 SP_EXECUTE_SQL(ls_TEXT00); --ls_TEXT00:='Update BM_GHKSTJ set GHKS' -- ||LS_KSBH00||' = '||TO_CHAR(NVL(-ls_sswr01,0)) -- ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 18'; --计算应退还四舍五入金额 --SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_sswr00,0)+NVL(ls_sswr01,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 34'; --计算应退还四舍五入金额 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE15,0))||' where ID0000 = ' ||TO_CHAR(ad_ID0000)||' and DYID00 = 16'; --计算应退还转账 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_XMJE16,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 17'; --现金暂存 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(ls_XMJE12,0)-NVL(ls_XMJE03,0) -NVL(ls_XMJE15,0)-NVL(ls_XMJE16,0))--+NVL(ls_sswr01,0) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 15'; --重新计算应退还现金,发现预交金退款时有问题 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = NVL(GHKS'||LS_KSBH00 ||',0)+'||TO_CHAR(NVL(ls_XMJE10,0)) ||' where ID0000 ='||TO_CHAR( ad_ID0000)||' and DYID00 = 19'; --收回旧收据 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(ls_XMJE10,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 10'; --补开新收据 SP_EXECUTE_SQL(ls_TEXT00); --退非医保款+(退医院支付票据金额)LS_YYZFTK ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_XMJE19,0)+nvl(LS_YYZFTK,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 21'; --退非医保款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_XMJE20,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 22'; --退医保款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = '||TO_CHAR(NVL(ls_TJZJE0,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 23'; --退记账款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_xmje25,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 39'; --退减免医药费 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE26,0)) ||' where ID0000 = '||TO_CHAR(ad_ID0000)||' and DYID00 = 40'; --退出院病人应收款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE19,0)+NVL(ls_XMJE20,0) +NVL(ls_TJZJE0,0)+nvl(ls_xmje25,0)+nvl(ls_xmje26,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 20'; --退款小计 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(ls_JZYSK0,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 32'; --应收记账款 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_JMBRYF-ls_XMJE25,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 31'; --减免病人医药费 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_cyysk0-ls_XMJE26,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 30'; --出院病人应收款 SP_EXECUTE_SQL(ls_TEXT00); ls_XMJE21:=NVL(ls_XMJE01,0)+NVL(ls_XMJE02,0)+NVL(ls_XMJE15,0);--+NVL(ls_SSWR00,0); ls_XMJE34:=NVL(ls_XMJE12,0)+NVL(ls_XMJE19,0) +NVL(ls_XMJE20,0)+NVL(ls_TJZJE0,0) +nvl(ls_xmje25,0)+nvl(ls_xmje26,0); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE21,0)-NVL(ls_XMJE34,0)+nvl(ls_XMJE16,0)) --ls_XMJE16暂存现金(余钱逃跑病人) ||' where ID0000 ='||TO_CHAR( ad_ID0000) ||' and DYID00 = 24'; --应缴金额 SP_EXECUTE_SQL(ls_TEXT00); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00||' = ' ||TO_CHAR(NVL(ls_XMJE21,0)-NVL(ls_XMJE34,0)+nvl(ls_XMJE16,0)) --ls_XMJE16暂存现金(余钱逃跑病人) ||' where ID0000 ='||TO_CHAR(ad_ID0000) ||' and DYID00 = 36'; --应缴金额 SP_EXECUTE_SQL(ls_TEXT00); ---处理单病种问题---begin----- --单病种医院支付收入 LS_DBZSR0:=NVL(LS_DBZSRS,0)+NVL(LS_DBZSRT,0); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(LS_DBZSR0,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 49'; SP_EXECUTE_SQL(ls_TEXT00); --单病种医院支付支出 LS_DBZZC0:=NVL(LS_DBZZCS,0)+NVL(LS_DBZZCT,0); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(LS_DBZZC0,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 50'; SP_EXECUTE_SQL(ls_TEXT00); --医院支付金额=收医院支付票据金额+退医院支付票据金额 如果收为正,冲时会为负数,所以用+ --LS_YYZFJE:=NVL(LS_YYZFSK,0)+NVL(LS_YYZFTK,0); --医院支付=医院支付收入+医院支付支出 LS_YYZFJE:=NVL(LS_DBZSR0,0)+NVL(LS_DBZZC0,0); ls_TEXT00:='Update BM_GHKSTJ set GHKS'||LS_KSBH00 ||' = '||TO_CHAR(NVL(LS_YYZFJE,0)) ||' where ID0000 ='||TO_CHAR(ad_ID0000)||' and DYID00 = 48'; --医院支付金额 SP_EXECUTE_SQL(ls_TEXT00); ---处理单病种问题---end----- --实交现金=实交现金-医院支付金额 (南平市一医院支付支出金额(LS_DBZZC0)全部由病人支付) if LS_SFJKSJXJYYZF='Y' then --实交现金扣除医院支付金额 LS_YYZFJE:=LS_DBZSR0+LS_DBZZC0; else LS_YYZFJE:=LS_DBZSR0; end if; ls_TEXT00:='Update BM_GHKSTJ set GHKS' ||LS_KSBH00||' = ' ||TO_CHAR( NVL(ls_XMJE21,0) -NVL(ls_XMJE34,0)+nvl(ls_XMJE16,0)--ls_XMJE16暂存现金(余钱逃跑病人) -NVL(ls_ZPSR00,0) -NVL(ls_YHKSR0,0) -NVL(ls_YHKJS0,0) -NVL(ls_YBJS00,0) +NVL(ls_XMJE20,0) -NVL(ls_JMBRYF,0) +NVL(ls_XMJE25,0) -NVL(Ls_JZYSK0,0) -NVL(ls_CYYSK0,0) +NVL(ls_xmje26,0) -nvl(ls_sswr01,0) -nvl(LS_YYZFJE,0) --医院支付金额 ) ||' where ID0000 ='||TO_CHAR(ad_ID0000) ||' and DYID00 = 35'; --实交现金 SP_EXECUTE_SQL(ls_TEXT00); END LOOP; CLOSE CUR_ZY_BRJFB0_SFY000; Update BM_GHKSTJ set XMHJ00 = NVL(GHKS01,0)+ NVL(GHKS02,0)+ NVL(GHKS03,0)+ NVL(GHKS04,0)+ NVL(GHKS05,0)+ NVL(GHKS06,0)+ NVL(GHKS07,0)+ NVL(GHKS08,0)+ NVL(GHKS09,0)+ NVL(GHKS10,0) + NVL(GHKS11,0)+ NVL(GHKS12,0)+ NVL(GHKS13,0)+ NVL(GHKS14,0)+ NVL(GHKS15,0)+ NVL(GHKS16,0)+ NVL(GHKS17,0)+ NVL(GHKS18,0)+ NVL(GHKS19,0)+ NVL(GHKS20,0) + NVL(GHKS21,0)+ NVL(GHKS22,0)+ NVL(GHKS23,0)+ NVL(GHKS24,0)+ NVL(GHKS25,0)+ NVL(GHKS26,0)+ NVL(GHKS27,0)+ NVL(GHKS28,0)+ NVL(GHKS29,0)+ NVL(GHKS30,0) + NVL(GHKS31,0)+ NVL(GHKS32,0)+ NVL(GHKS33,0)+ NVL(GHKS34,0)+ NVL(GHKS35,0)+ NVL(GHKS36,0)+ NVL(GHKS37,0)+ NVL(GHKS38,0)+ NVL(GHKS39,0)+ NVL(GHKS40,0) + NVL(GHKS41,0)+ NVL(GHKS42,0)+ NVL(GHKS43,0)+ NVL(GHKS44,0)+ NVL(GHKS45,0)+ NVL(GHKS46,0)+ NVL(GHKS47,0)+ NVL(GHKS48,0)+ NVL(GHKS49,0)+ NVL(GHKS50,0) + NVL(GHKS51,0)+ NVL(GHKS52,0)+ NVL(GHKS53,0)+ NVL(GHKS54,0)+ NVL(GHKS55,0)+ NVL(GHKS56,0)+ NVL(GHKS57,0)+ NVL(GHKS58,0)+ NVL(GHKS59,0)+ NVL(GHKS60,0) + NVL(GHKS61,0)+ NVL(GHKS62,0)+ NVL(GHKS63,0)+ NVL(GHKS64,0)+ NVL(GHKS65,0)+ NVL(GHKS66,0)+ NVL(GHKS67,0)+ NVL(GHKS68,0)+ NVL(GHKS69,0)+ NVL(GHKS70,0) + NVL(GHKS71,0)+ NVL(GHKS72,0)+ NVL(GHKS73,0)+ NVL(GHKS74,0)+ NVL(GHKS75,0)+ NVL(GHKS76,0)+ NVL(GHKS77,0)+ NVL(GHKS78,0)+ NVL(GHKS79,0) where ID0000 = ad_ID0000; --COMMIT; EXCEPTION WHEN OTHERS THEN as_YHMSG0:='数据库错误:出错原因未知!'; as_SYSMSG:=substr(sqlERRM,1,150); ROLLBACK; END; / --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prompt 11、住院病人的中途结算 SP_ZY_BRFY00_JS0000(0916版本) create or replace procedure SP_ZY_BRFY00_JS0000 ( as_QSDJH0 in number, as_ZZDJH0 in number, ad_ZYID00 in number, --病人住院信息表ID ad_JZY000 in number, --结账操作员编码 as_JZYXM0 in char, --结账操作员姓名 as_JMYY00 in varchar2, --减免原因 as_YJJXH0 in char, --打印在发票上的序号 as_CZBZ00 in char, --结算标志,'0':中途结算,'1':出院结算 as_SFYB00 in char, --是否呆账结算 as_JFDJHS in char, --本次结算所使用的预交金的对应的交费单据号 as_JSZZRQ in char, --中途结算截止日期 as_TSBZBH in char, --结算的特殊病种编号 ad_XJDJH0 out number, --病人现金的退款单据号 ad_ZZDJH0 out number, --病人转账的退款单据号 ad_XJYE00 out number, --病人账户上的现金余额 ad_ZZYE00 out number, --病人账户上的转账余额 ad_JZDH00 out number, --病人结账单号 as_YHMSG0 out varchar, --存储过程提示的错误信息 as_SYSMSG out varchar, --系统提示的错误信息 as_DBZBM0 in char default '' ,--单病种编码 as_DBZMC0 in char default '' ,--单病种名称 ad_HJJE00 in number default 0 ,--合计金额 as_JSLX00 in char default '-1' ,--结算类型: -1:自费结算 0:医保结算 1:生育结算 2:工伤结算 3:保健结算 as_DDLSH0 in char default '' --订单流水号 ) as ls_PJH000 ZY_PJSYQK.PJH000%TYPE; --票据流水号 ls_PJH001 ZY_PJSYQK.PJH000%TYPE; --票据流水号 ls_TMPPJH ZY_PJSYQK.PJH000%TYPE; --临时使用的票据号 ls_FZPJH0 ZY_PJSYQK.PJH000%TYPE; ls_SFXMID BM_YYSFXM.SFXMID%TYPE; --收费项目ID ls_CYQKJE ZY_BRZHXX.ZYE000%TYPE; --病人账户总余额 ls_XJJFJE ZY_BRJFB0.JFJE00%TYPE; --病人现金交费金额 ls_ZZJFJE ZY_BRJFB0.JFJE00%TYPE; --病人转账交费金额 ls_SFJSDW IC_YBBRLB.SFJSDW%TYPE; --是否结算单位标志 ls_GRZHZF ZY_JZB000.GRZHZF%TYPE; --个人医疗账户支付(医保返回) ls_TCJJZF ZY_JZB000.TCJJZF%TYPE; --统筹基金支付(医保返回) ls_SBGRZH ZY_JZB000.GRZHZF%TYPE; --商保个人医疗账户支付(医保返回) ls_SBTCJJ ZY_JZB000.TCJJZF%TYPE; --商保统筹基金支付(医保返回) ls_BJJJZF ZY_JZB000.TCJJZF%TYPE; --保健基金支付(医保返回) ls_SYBXZF ZY_JZB000.TCJJZF%TYPE; --商业保险支付(医保返回) ls_gwybz0 ZY_JZB000.gwybz0%TYPE; LS_ZFJE00 ZY_JZB000.ZFJE00%TYPE; ls_YBYL01 ZY_JZB000.YBYL01%TYPE; --医保预留01 --民政救助总额 ls_YBYL02 ZY_JZB000.YBYL01%TYPE; --医保预留02 --计生救助总额 ls_YBYL03 ZY_JZB000.YBYL01%TYPE; --医保预留03 --残联救助总额 ls_YBYL04 ZY_JZB000.YBYL01%TYPE; --医保预留04 ls_YBYL05 ZY_JZB000.YBYL01%TYPE; --医保预留05 ls_YBYL06 ZY_JZB000.YBYL01%TYPE; --医保预留06 ls_YBYL07 ZY_JZB000.YBYL01%TYPE; --医保预留07 ls_YBYL08 ZY_JZB000.YBYL01%TYPE; --医保预留08 ls_YBYL09 ZY_JZB000.YBYL01%TYPE; --医保预留09 ls_YBYL10 ZY_JZB000.YBYL01%TYPE; --医保预留00 ls_YBYL11 ZY_JZB000.YBYL01%TYPE; --医保预留11 ls_YBYL12 ZY_JZB000.YBYL01%TYPE; --医保预留12 ls_YBYL13 ZY_JZB000.YBYL01%TYPE; --医保预留13 ls_BCBXF0 ZY_JZB000.BCBXF0%TYPE; --本次住院医疗费总额 ls_CFXMS0 ZY_JZB000.CFXMS0%TYPE; --本次住院处方项目总数 ls_HJJE00 ZY_BRFY00.HJJE00%TYPE; --合计金额 ls_HJZFJE ZY_BRFY00.ZFJE00%TYPE; --自付金额 ls_JZJE00 ZY_BRFY00.JZJE00%TYPE; --记帐金额 ls_GFJE00 ZY_BRFY00.GFJE00%TYPE; --公费金额 ls_SSWR00 ZY_BRFY00.HJJE00%TYPE; --四舍五入金额 ls_HSHJJE ZY_BRFY00.HJJE00%TYPE; --伙食合计金额 ls_JMJE00 ZY_BRFY00.HJJE00%TYPE; --减免金额 ls_TEMPJE ZY_BRFY00.HJJE00%TYPE; --临时变量金额 ls_CYYTK0 ZY_BRZHXX.ZYE000%TYPE; --出院应退款 ls_YBZHYE ZY_BRFY00.HJJE00%TYPE; --医保个人账户余额 ld_BRID00 BM_BRXXB0.BRID00%TYPE; --病人ID ls_ZPH000 ZY_BRJFB0.ZPH000%TYPE; ls_ZPKHYH ZY_BRJFB0.ZPKHYH%TYPE; ls_ZPDWMC ZY_BRJFB0.ZPDWMC%TYPE; ls_PLBH00 BM_PJLXB0.PLBH00%TYPE; ls_FBBH00 BM_BRXXB0.FBBH00%TYPE; ls_XM0000 ZY_BRXXB0.XM0000%TYPE; ls_XB0000 ZY_BRXXB0.XB0000%TYPE; ls_BQH000 ZY_BRXXB0.DQBQ00%TYPE; ls_FYQSRQ ZY_JZB000.FYQSRQ%TYPE; ls_FYJZRQ ZY_JZB000.FYJZRQ%TYPE; ls_JZMX00 ZY_JZMX00%ROWTYPE; ls_TMPDJH VARCHAR2(20); ls_COUNT0 NUMBER(10); ls_JFDJHS VARCHAR2(2000); ls_CZRQ00 CHAR(8); ls_CZSJ00 CHAR(8); ls_SSWUTSCL char(1); LS_SFCFFP char(1); --是否拆分发票 LS_ZY_FFJJ CHAR(1); ZY_JSTKAYJJFS char(1); ls_YJJPJ0 char(1); ls_ZFQFJS char(1); --是否允许(自费病人)欠费情况下直接出院结算并补交余额,非逃跑结算 --ls_YBBHSB char(1); ls_YBBHSB IC_YBBRLB.YBBHSB%TYPE; ad_YBYL00 ZY_JZB000.YBYL01%TYPE; --医保其他基金支付 LS_DBZJK0 varchar2(100); LS_SFXNH0 IC_YBBRLB.SFXNH0%TYPE; LS_SFDBZ0 varchar2(1);--是否单病种结算 Y:是 N:否 --ls_YBZXLB IC_YBBRLB.YBZXLB%TYPE; --ls_YBLB00 IC_YBBRLB.YBLB00%TYPE; --ls_YBBRLB BM_BRXXB0.YBBRLB%TYPE; ls_YBZXLB ZY_BRXXB0.ybzxlb%TYPE; ls_YBBRLB ZY_BRXXB0.ybbrlb%TYPE; ls_YBLB00 ZY_BRXXB0.yblb00%TYPE; LS_SFQYBZ varchar2(10);--单病种启用 1:启用 0:不启用 LS_DBZBM0 ZY_BRXXB0.DBZBM0%TYPE; LS_DBZMC0 ZY_BRXXB0.DBZMC0%TYPE; LS_DBZBL0 ZY_BRXXB0.DBZBL0%TYPE; LS_CSLX00 ZY_BRXXB0.CSLX00%TYPE; LS_GRZFJE number(12,4);--个人支付金额 LS_CYJSLX char(1);--出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 RYBJK ZY_YBJK00%rowtype; LS_SBGRZH_TEMP00 ZY_JZB000.GRZHZF%TYPE; --商保个人医疗账户支付(医保返回) LS_SBTCJJ_TEMP00 ZY_JZB000.TCJJZF%TYPE; --商保统筹基金支付(医保返回) CURSOR CUR_ZY_JZMX00_ZFBL00 IS SELECT * from ZY_JZMX00 where JZDH00 = ad_JZDH00 AND nvl(ZFBL00,1)<>0 and SFYLXM='Y' order by ZFBL00; -- MODIFICATION HISTORY -- Person Date Comments -- xzw 2007.06.20 传递参数增加保健基金单据流水号; -- jlg 2007.08.07 增加商业保险支付金额的处理ZYSF-20070806-004 -- ZHR 2008.03.26 农合和医保病人,写入zy_pjsyqk时,ZZJE00应该为0 -- zhr 2009.09.06 允许(自费病人)欠费情况下直接出院结算并补交余额,非逃跑结算 -- zhr 2009.10.29 判定病人未结的费用主表和清单明细表是否一致 -- zhr 2009.12.27 过程做了较大调整,医保的发送记录全部写入ZY_YBFS00 -- qks 2009.12.29 伙食费用有往医保发送,不参与 发送给医保总费用<>院内总费用 判断 -- yangy 2010.03.09 医保病人允许欠费结算 -- zhr 2010.03.10 脚本做了整理 -- zhr 2010.03.10 填写ZY_JZB000的医保账户余额 -- yangy 2010.03.30 出院应收款变成负数 -- zhr 2010.03.31 脚本做了整理 -- zhr 2010.05.07 个人自付部分如果<0,要报错保护。 -- yangy 2010.07.02 呆账病人出院结算,如果病人有欠费无法进行结算 -- zhangwz 2010.07.07 变量 ls_COUNT0 由 NUMBER(5) 变更为 NUMBER(10). -- qks 2010.12.06 表ZY_YBFS00以及ZY_JZB000增加15个字段 YBYL01--YBYL13,以及BCBXF0、CFXMS0;结帐表保留SBGRZH,SBTCJJ值 --zhangyc 2012.10.25 表ZY_YBFS00增加字段BCBXF0 by ZYSF-20121025-001 --zhangyc 2013.04.17 ZY_JZB000增加字段YBZXLB BY ZYSF-20130417-001 --zhangyc 2013.10.10 增加单病种结算功能 by ZYSF-20131011-001 --zhangyc 2014.04.03 ad_YBYL13(大病补偿金额)不包含在统筹中独立出来 by ZYSF-20140403-001 --zhangyc 2014.05.21 修改ls_YBZXLB,ls_YBBRLB,ls_YBLB00变量取值 by ZYSF-20140521-001 --zhangyc 2015.02.27 参数ZY_YBDBZJSJK='Q',新农合病人统筹+个人>总费用 按单病种结算方式处理 by ZYSF-20150226-001 --zhangyc 2015.10.08 显示公务员补助 by ZYSF-20151008-001 --zhangyc 2015.10.28 修正插入GWYBZ0为空 报错 by ZYSF-20151015-002 --zhangyc 2015.11.10 增加字段ZY_JZB000.CYJSLX 出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 by ZYSF-20151106-001 --zhangyc 2016.05.13 增加入参as_DBZBM0 by ZYSF-20160510-001 --zhangyc 2016.07.08 增加行政区号对应单病种处理 by ZYSF-20160623-002 --zhangyc 2016.09.06 单病种支付修改 by ZYSF-20160901-001 --zhangyc 2016.10.13 增加SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N'判断 by ZYSF-20161013-001 --zhangyc 2017.09.22 生育结算修改 by ZYSF-20170922-002 --zhangyc 2017.09.25 增加预结算功能 by ZYSF-20170925-003 BEGIN ls_CZRQ00 := to_char(sysdate,'YYYYMMDD'); ls_CZSJ00 := to_char(sysdate,'HH24:MI:SS'); ls_CYQKJE := 0; --余额 ls_CYYTK0 := 0; ls_GRZHZF := 0; ls_TCJJZF := 0; ls_SBGRZH := 0; ls_SBTCJJ := 0; ls_BJJJZF := 0; ls_SYBXZF := 0; ls_XJJFJE := 0; ls_ZZJFJE := 0; LS_ZFJE00 := 0; ls_SSWR00 := 0; ls_YBZHYE := 0; ls_YBYL01 := 0; ls_YBYL02 := 0; ls_YBYL03 := 0; ls_YBYL04 := 0; ls_YBYL05 := 0; ls_YBYL06 := 0; ls_YBYL07 := 0; ls_YBYL08 := 0; ls_YBYL09 := 0; ls_YBYL10 := 0; ls_YBYL11 := 0; ls_YBYL12 := 0; ls_YBYL13 := 0; ls_BCBXF0 := 0; ls_CFXMS0 := 0; LS_CYJSLX:='1'; LS_SBGRZH_TEMP00:=0; --商保个人医疗账户支付(医保返回) LS_SBTCJJ_TEMP00:=0; --商保统筹基金支付(医保返回) --出院结算类型 0:中途结算 1:出院结算 2:重新结算 3:呆账中途结算 4:呆账出院结算 5:呆账重新结算 if as_CZBZ00='0' then --结算标志,'0':中途结算,'1':出院结算 if as_SFYB00='Y' then LS_CYJSLX:='3'; else LS_CYJSLX:='0'; end if; else if as_SFYB00='Y' then LS_CYJSLX:='4'; else LS_CYJSLX:='1'; end if; end if; select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into LS_ZY_FFJJ from XT_XTCS00 where name00='SF_ZY_FFJJ';--逢分进角 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_YJJPJ0 from XT_XTCS00 where name00 = 'ZY_YJJPJ0';--退预交金使用预交金票据 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ZY_JSTKAYJJFS from XT_XTCS00 where name00='ZY_JSTKAYJJFS';--结余款以预交金形式退出 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_SFCFFP from XT_XTCS00 where name00='SF_SFCFFP'; --公费病人是否拆分发票 select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_SSWUTSCL from XT_XTCS00 where name00 = 'SF_SSWUTSCL'; select substrb(upper(trim(nvl(max(value0),'N'))),1,1) into ls_ZFQFJS from XT_XTCS00 where name00 = 'ZY_QFJS'; select Trim(nvl(max(value0),'N')) into LS_DBZJK0 from xt_xtcs00 where name00='ZY_YBDBZJSJK'; if trim(ls_YJJPJ0)='Y' then ls_plbh00:=8; else ls_plbh00:=4; end if; if as_SFYB00='Y' and as_CZBZ00='0' then as_YHMSG0:='中途结算不允许做呆账处理,请与系统管理员联系!'; as_SYSMSG:=''; ROLLBACK; RETURN; end if; select SFJSDW,A.FBBH00,a.BRID00,a.DQBQ00,b.YBBHSB,a.XM0000,a.XB0000,b.SFXNH0,a.ybzxlb,a.ybbrlb,a.yblb00, a.DBZBM0,a.DBZMC0,a.DBZBL0,a.CSLX00 into ls_SFJSDW,ls_FBBH00,ld_BRID00,ls_BQH000,ls_YBBHSB,ls_XM0000,ls_XB0000,LS_SFXNH0,ls_ybzxlb,ls_ybbrlb,ls_yblb00, LS_DBZBM0,LS_DBZMC0,LS_DBZBL0,LS_CSLX00 from ZY_BRXXB0 A,IC_YBBRLB B where A.FBBH00 = B.FBBH00 and A.YBLB00 = B.YBLB00 and A.ZYID00 = ad_ZYID00; --select substrb(SF_ZY_DBZJBXX('0',ad_ZYID00,0),1,1) into LS_SFQYBZ from dual; --单病种 by ZYSF-20160510-001 LS_DBZBM0:=as_DBZBM0; LS_DBZMC0:=as_DBZMC0; IF as_SFYB00 = 'Y' THEN --呆账结算 select count(*) into ls_COUNT0 from BM_BRZFFS where ZFFSBH = 9; if ls_COUNT0 <> 1 then as_YHMSG0:='系统字典表维护不完整,请先维护系统字典表BM_BRZFFS后再进行本操作,请与系统管理员联系!'; as_SYSMSG:='NOT EXISTS (select * from bm_brzffs where zffsbh = 9 )'||SQLERRM; ROLLBACK; RETURN; end if; END IF; --判定病人未结的费用主表和清单明细表是否一致2009.10.28 zhr 费别转换的数据不参与判断 SELECT nvl(max(DJH000),0) into ls_COUNT0 FROM ZY_BRFY00 a WHERE ZYID00=ad_ZYID00 and JZDH00+0=0 and HJJE00<>(SELECT nvl(SUM(HJJE00),0) FROM VW_ZY_ZYFYMX b WHERE a.DJH000=b.DJH000) and nvl(instrb(a.CXYY00,'FBZH'),0)<1 and rownum=1; if ls_COUNT0>0 then as_YHMSG0:='病人的费用异常,明细与合计的不符,请与系统管理员联系!'; as_SYSMSG:='收费单据号'||to_char(ls_COUNT0)||'的明细表与主表合计不符'; ROLLBACK; RETURN; end if; --先判断一下要结算的项目是否有对应的发票项目 select nvl(MIN(SFXMID),0) into ls_SFXMID from ZY_FYMX00 A,BM_YYSFXM C,ZY_BRFY00 D where A.XMBH00 = C.SFXMID and A.DJH000 = D.DJH000 and D.ZYID00 =ad_ZYID00 and D.JZDH00+0=0 and ((c.ZYFPID is null) or C.ZYFPID not in (select fpxmid from BM_FPXM00 )); IF ls_SFXMID > 0 THEN --若有存在没有发票项目对应的项目,则提示信息! as_YHMSG0:='病人结算操作失败,发票项目不完整,请记录本信息并与系统管理员联系!'; as_SYSMSG:='BM_YYSFXM.SFXMID='||to_char(ls_SFXMID)||'的ZYFPID的值非法!'; ROLLBACK; RETURN; END IF; --0.判断病人是否可以进行出院结算 if as_CZBZ00 = '1' then select count(*) into ls_COUNT0 from ZY_BRZHXX where BRID00 = ld_BRID00 and SFDJ00 <> '2' and JFLBID <> 0 ; if ls_COUNT0 > 1 then as_YHMSG0:='病人有多个账户,不能办理出院结算!请将其它账户结清后,再进行本操作!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; end if; --计算病人本次结算的费用总额 select NVL(sum(HJJE00),0),NVL(sum(ZFJE00),0),NVL(sum(GFJE00),0),NVL(sum(JZJE00),0),min(trim(CZRQ00)),max(trim(CZRQ00)) into ls_HJJE00,ls_HJZFJE,ls_GFJE00,ls_JZJE00,ls_FYQSRQ,ls_FYJZRQ from ZY_BRFY00 where JZDH00+0=0 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and DJH000>=as_QSDJH0 and DJH000<=as_ZZDJH0 and ZYID00 = ad_ZYID00; if ls_HJJE00<>ls_HJZFJE+ls_GFJE00+ls_JZJE00 then as_YHMSG0:='病人费用异常,请与系统管理员联系!'; as_SYSMSG:='表ZY_BRFY00.HJJE00<>ZFJE00+GFJE00+JZJE00'; ROLLBACK; RETURN; end if; --如果本次结算费用合计为0,直接UPDATE后返回 if ls_HJJE00=0 then Update ZY_BRFY00 set JZDH00=1 where JZDH00+0=0 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and DJH000>=as_QSDJH0 and DJH000<=as_ZZDJH0 and ZYID00 = ad_ZYID00; return; end if; --计算病人本次结算的伙食费用和减免费用 select nvl(sum(decode(d.SFYLXM,'Y',0,b.ZFJE00)),0),nvl(sum(decode(b.JMJE00,'3',b.JMJE00,'4',b.JMJE00,0)),0) into ls_HSHJJE,ls_JMJE00 from ZY_BRFY00 a,ZY_FYMX00 b,BM_YYSFXM c,BM_FPXM00 d where a.JZDH00+0=0 and a.DJH000=b.DJH000 and b.XMBH00=c.SFXMID and c.ZYFPID=d.FPXMID and (a.CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and a.DJH000>=as_QSDJH0 and a.DJH000<=as_ZZDJH0 and a.ZYID00 = ad_ZYID00; select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --考虑实施人员由于安装问题,与系统保留的关键值有冲突,所以故意再本处添加了如小处理 if ad_JZDH00 = 1 then select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --2 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --3 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --4 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --5 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --6 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --7 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --8 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --9 select SQ_ZY_JZB000_JZDH00.nextval into ad_JZDH00 from dual; --10 end if; --0、若医保有返回金额,还应该添加病人的交费信息或逃跑病人出院结算 IF (ls_FBBH00 =3) and (as_JSLX00 not in ('-1')) THEN --医保病人 if (as_JSLX00='1') and (trim(as_DDLSH0) is not null ) then --结算类型: -1:自费结算 0:医保结算 1:生育结算 2:工伤结算 3:保健结算 select * into RYBJK from ZY_YBJK00 where DDLSH0=as_DDLSH0 and ZYID00=ad_ZYID00; select count(*),nvl(sum(HJJE00),0),nvl(sum(GRZHZF),0),nvl(sum(TCJJZF),0), nvl(sum(SBGRZH),0),nvl(sum(SBTCJJ),0),0,nvl(sum(SYBXZF),0),nvl(sum(BCBXF0),0),nvl(sum(CFXMS0),0), nvl(sum(YBYL01),0),nvl(sum(YBYL02),0),nvl(sum(YBYL03),0),nvl(sum(YBYL04),0),nvl(sum(YBYL05),0),nvl(sum(YBYL06),0), nvl(sum(YBYL07),0),nvl(sum(YBYL08),0),nvl(sum(YBYL09),0), nvl(sum(YBYL10),0),nvl(sum(YBYL11),0),nvl(sum(YBYL12),0),nvl(sum(YBYL13),0),nvl(sum(ZFJE00),0),nvl(sum(gwybz0),0) into LS_COUNT0,LS_TEMPJE,LS_GRZHZF,LS_TCJJZF,LS_SBGRZH,LS_SBTCJJ,LS_BJJJZF,LS_SYBXZF,LS_BCBXF0,LS_CFXMS0, LS_YBYL01,LS_YBYL02,LS_YBYL03,LS_YBYL04,LS_YBYL05,LS_YBYL06,LS_YBYL07,LS_YBYL08,LS_YBYL09, LS_YBYL10,LS_YBYL11,LS_YBYL12,LS_YBYL13,LS_ZFJE00,LS_GWYBZ0 from ZY_YBJK00 where DDLSH0=as_DDLSH0 and ZYID00=ad_ZYID00; else select count(*),nvl(sum(HJJE00),0),nvl(sum(GRZHZF),0),nvl(sum(TCJJZF),0), nvl(sum(SBGRZH),0),nvl(sum(SBTCJJ),0),nvl(sum(BJJJZF),0),nvl(sum(SYBXZF),0),nvl(sum(BCBXF0),0),nvl(sum(CFXMS0),0), nvl(sum(YBYL01),0),nvl(sum(YBYL02),0),nvl(sum(YBYL03),0),nvl(sum(YBYL04),0),nvl(sum(YBYL05),0),nvl(sum(YBYL06),0), nvl(sum(YBYL07),0),nvl(sum(YBYL08),0),nvl(sum(YBYL09),0), nvl(sum(YBYL10),0),nvl(sum(YBYL11),0),nvl(sum(YBYL12),0),nvl(sum(YBYL13),0),nvl(sum(ZFJE00),0),nvl(sum(gwybz0),0) into ls_COUNT0,ls_TEMPJE,ls_GRZHZF,ls_TCJJZF,ls_SBGRZH,ls_SBTCJJ,ls_BJJJZF,ls_SYBXZF,ls_BCBXF0,ls_CFXMS0, ls_YBYL01,ls_YBYL02,ls_YBYL03,ls_YBYL04,ls_YBYL05,ls_YBYL06,ls_YBYL07,ls_YBYL08,ls_YBYL09, ls_YBYL10,ls_YBYL11,ls_YBYL12,ls_YBYL13,LS_ZFJE00,ls_gwybz0 from ZY_YBFS00 where ZYID00=ad_ZYID00 and CXBZ00='0' and JZDH00=0 and YBFSDH in (select distinct YBFSDH from ZY_BRFY00 where JZDH00+0=0 --未结算的病人 and djh000>=as_qsdjh0 and djh000<=as_zzdjh0 and JFLBID = '2' --有预交金账户的病人 and ZYID00 = ad_ZYID00 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1')); select nvl(max(GRZHYE),0) into ls_YBZHYE from ZY_YBFS00 where ZYID00=ad_ZYID00 and FSRQ00||FSSJ00=(select max(FSRQ00||FSSJ00) from ZY_YBFS00 where ZYID00=ad_ZYID00); end if; select decode(sign(Instrb(','||ls_YBBHSB||',',',1,')),1,ls_YBYL01,0)+ --民政救助 decode(sign(Instrb(','||ls_YBBHSB||',',',2,')),1,ls_YBYL02,0)+ --计生救助 decode(sign(Instrb(','||ls_YBBHSB||',',',3,')),1,ls_YBYL03,0)+ --残联救助 decode(sign(Instrb(','||ls_YBBHSB||',',',4,')),1,0,0)+ --单病种限额 decode(sign(Instrb(','||ls_YBBHSB||',',',5,')),1,0,0)+ --医院支付(医保无返回) -- decode(sign(Instrb(','||ls_YBBHSB||',',',4,')),1,ls_YBYL04,0)+ -- decode(sign(Instrb(','||ls_YBBHSB||',',',5,')),1,ls_YBYL05,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',6,')),1,ls_YBYL06,0)+ --低保基金支付 decode(sign(Instrb(','||ls_YBBHSB||',',',7,')),1,ls_YBYL07,0)+ --一般诊疗费补偿金额 decode(sign(Instrb(','||ls_YBBHSB||',',',8,')),1,ls_YBYL08,0)+ --一般诊疗费费个人支付金额 decode(sign(Instrb(','||ls_YBBHSB||',',',9,')),1,ls_YBYL09,0)+ --特殊门诊起付线累计 decode(sign(Instrb(','||ls_YBBHSB||',',',10,')),1,ls_YBYL10,0)+ --特殊门诊基金累计 decode(sign(Instrb(','||ls_YBBHSB||',',',11,')),1,0,0)+ --费用明细总金额 -- decode(sign(Instrb(','||ls_YBBHSB||',',',11,')),1,ls_YBYL11,0)+ --decode(sign(Instrb(','||ls_YBBHSB||',',',12,')),1,ls_YBYL12,0)+ decode(sign(Instrb(','||ls_YBBHSB||',',',12,')),1,0,0)+ --个人自付金额 --decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,ls_YBYL13,0) decode(sign(Instrb(','||ls_YBBHSB||',',',13,')),1,0,ls_YBYL13) --2014.04.03 into ad_YBYL00 from dual; --add by qks 2010.12.02 合计到统筹基金支付中 ls_TCJJZF:= ls_TCJJZF + ad_YBYL00; if ls_COUNT0 =0 then as_YHMSG0:='医保发送异常,找不到医保的发送记录!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; if ls_TEMPJE+ls_HSHJJE-ls_JMJE00<>ls_HJJE00 then --伙食金额和减免的金额是不往医保接口发送的 as_YHMSG0:='医保发送异常,发送给医保总费用<>院内总费用!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; --if ls_YBBHSB='Y' then --统筹基金中已经包含(商保统筹和商保账户支付) if instrb(','||LS_YBBHSB||',',',14,')>0 then ls_SBGRZH:=0; ls_SBTCJJ:=0; end if; LS_GRZFJE:=ls_TEMPJE-ls_GRZHZF-ls_TCJJZF-ls_SBGRZH-ls_SBTCJJ-ls_BJJJZF-ls_SYBXZF; --/* if (((LS_DBZJK0='Y') and (LS_SFXNH0<>'1')) or ((LS_DBZJK0='M') and (LS_SFXNH0='1')) or (LS_DBZJK0='YM') ) and (ls_TEMPJE<>ls_BCBXF0) then LS_SFDBZ0:='Y'; else LS_SFDBZ0:='N'; end if; if (LS_DBZJK0='Q') and (LS_SFXNH0='1') then LS_GRZFJE:=LS_ZFJE00; end if; if (ls_JMJE00>LS_GRZFJE) and (LS_SFDBZ0='N') and ((LS_SFQYBZ='0') or (ls_YBYL04=0)) then as_YHMSG0:='该病人的减免总金额'||to_char(ls_JMJE00)||'大于医保返回的自付金额'||to_char(LS_GRZFJE)||',系统操作中止,请重新进行费用优惠减免!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; --*/ --个人账户的单据流水号 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_GRZHZF,3,'医保个人账户','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00); --统筹基金的单据流水号 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_TCJJZF,4,'医保统筹基金','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00); --商保个人帐户单据流水号 if ls_SBGRZH<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_SBGRZH,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=10; end if; --商保统筹基金单据流水号 if ls_SBTCJJ<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_SBTCJJ,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=11; end if; --保健基金单据流水号 if ls_BJJJZF<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_BJJJZF,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=6; end if; --商业保险支付单据号 if ls_SYBXZF<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_SYBXZF,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=13; end if; --医院支付 if ls_YBYL05<>0 then Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) select SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,'2',ls_YBYL05,ZFFSBH,ZFFSMC,'',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,3,ad_ZYID00 from BM_BRZFFS where ZFFSBH=20; end if; end if ; --1、回收预交金处理 ls_JFDJHS:=as_JFDJHS; --由于中途结算或出院结算时,还应该同时将病人的交费信息做结算处理 LOOP ls_TMPDJH:=substr(ls_JFDJHS,1,instr(ls_JFDJHS,',')-1); IF ls_TMPDJH <> '0' THEN select PJH000 into ls_TMPPJH from ZY_BRJFB0 where DJH000 = ls_TMPDJH; Update ZY_PJSYQK set HSCZY0 = ad_JZY000,HSCZXM = as_JZYXM0,HSRQ00 = ls_CZRQ00,HSSJ00 = ls_CZSJ00 where PJH000 = ls_TMPPJH; if SQL%NOTFOUND then as_YHMSG0:='病人预交金票据回收操作不成功,请与系统管理员联系!'; as_SYSMSG:='update zy_pjsyqk set hsczy0= where pjh000 ='||to_char(ls_TMPPJH)||SQLERRM; ROLLBACK; RETURN; end if; Update ZY_BRJFB0 set JZDH00 = ad_JZDH00 where ZYID00 = ad_ZYID00 and JZDH00+0=0 and DJH000 = ls_TMPDJH; if SQL%NOTFOUND then as_YHMSG0:='病人交费信息结算不成功,请与系统管理员联系!'; as_SYSMSG:='update zy_brjfb0 set jzdh00= where brid00 ='||to_char(ld_brid00)||' and jzdh00=0 and djh000='||ls_TMPDJH||SQLERRM; ROLLBACK; RETURN; end if; END IF; ls_JFDJHS:=substr(ls_JFDJHS,instr(ls_JFDJHS,',')+1,length(ls_JFDJHS)); EXIT WHEN instr(ls_JFDJHS,',') = 0; END LOOP; --累计的现金交费金额 select NVL(sum(JFJE00),0) into ls_XJJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 in (1,8); --现金 --累计的转帐交费金额 select NVL(sum(JFJE00),0) into ls_ZZJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 = 2; --转帐 --病人自付金额 ls_HJZFJE:=ls_HJZFJE -(ls_GRZHZF + ls_TCJJZF +ls_SBGRZH + ls_SBTCJJ + ls_BJJJZF + ls_SYBXZF ); --/* if LS_SFDBZ0='Y' then ls_HJZFJE:=LS_ZFJE00; end if; if (LS_SFQYBZ='1') and (LS_DBZBM0 is not null) and (LS_BCBXF0>=ls_YBYL04) then ls_HJZFJE:=LS_ZFJE00; end if; if (LS_SFQYBZ='1') and (LS_DBZBM0 is not null) and (LS_BCBXF0=0 then --未超额时如果医院支付大于0 个人支付按原来算 ls_HJZFJE:=ls_HJZFJE; else ls_HJZFJE:=LS_ZFJE00; end if; end if; if (LS_DBZJK0='Q') and (LS_SFXNH0='1') then if ls_TEMPJE<>ls_TCJJZF+ls_GRZHZF+LS_ZFJE00 then ls_HJZFJE:=LS_ZFJE00; end if; end if; --*/ /* -- by ZYSF-20160510-001 if trim(LS_DBZBM0) is not null then ls_HJZFJE:=LS_ZFJE00; end if; */ if (SF_ZY_DBZXZQH(ad_ZYID00)='1') and (ls_YBYL04>LS_BCBXF0) and (LS_DBZBM0 is not null) then --0:不启用 1:启用 ls_HJZFJE:=LS_ZFJE00; end if; if (SF_ZY_DBZXZQH(ad_ZYID00)='1') and (LS_DBZBM0 is not null) then --0:不启用 1:启用 ls_HJZFJE:=LS_ZFJE00; end if; --ZY_DBZYYZF:住院单病种结算病种差额(医院支付)是否由病人实际支付 Y:病人支付 N:医院支付 默认值:Y if (SF_ZY_GETXTCS00('ZY_DBZYYZF','Y')='N') and (LS_DBZBM0 is not null) then --by ZYSF-20160901-001 ls_HJZFJE:=LS_ZFJE00; end if; if ls_HJZFJE<0 then as_YHMSG0:='个人自付部分金额小于0,数据不正常,请与管理员联系!'||ls_YBYL05; as_SYSMSG:=''; rollback; return; end if; ls_CYQKJE := ls_XJJFJE + ls_ZZJFJE - ls_HJZFJE ; --计算病人的剩余金额 if ls_CYQKJE<0 and as_SFYB00 = 'Y' then --欠费呆账 Update BM_BRXXB0 set ZYZT00 = '2' where BRID00 = ld_BRID00; --'4':病人欠费 elsif (ls_CYQKJE<0) and (ls_ZFQFJS='N') and (ls_FBBH00<>3) then--不允许欠费情况下直接结算并补交余额,非逃跑结算 as_YHMSG0:='病人账户金额不够,请先补交足够的金额,'||'至少要交'||to_char(-ls_CYQKJE)||'元,再进行本操作!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; if as_SFYB00 = 'Y' then ls_CYYTK0:=ls_CYQKJE; end if; if ls_ZZJFJE > ls_HJZFJE then ad_XJYE00 := ls_XJJFJE; ad_ZZYE00 := ls_ZZJFJE - ls_HJZFJE; else ad_XJYE00 := ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE; --现金交费金额+转帐交费金额-合计自付金额 ad_ZZYE00 := 0; end if; --2、添加病人结账表信息 Insert into ZY_JZB000(JZDH00,BRID00,ZYID00,FBBH00,YBZXLB,YBBRLB,YBLB00, BRZJE0,JZJE00,GFJE00,HJJE00,JMJE00,GRZHZF,TCJJZF,ZFJE00,PJH000,YBZHYE, JZRQ00,JZSJ00,XJFKJE,ZZFKJE,JZY000,JMYY00,YSZJE0,ZZZJE0,CYYSK0,CYYTK0,JZBQH0,TSBZBH,FYQSRQ,FYJZRQ,BJZFE0,SYBXZF, YBYL01,YBYL02,YBYL03,YBYL04,YBYL05,YBYL06,YBYL07,YBYL08,YBYL09,YBYL10,YBYL11,YBYL12,YBYL13,BCBXF0,CFXMS0,SBGRZH, SBTCJJ,DBZBM0,DBZMC0,DBZBL0,CSLX00,gwybz0,CYJSLX,JSLX00,DDLSH0) values(AD_JZDH00,LD_BRID00,AD_ZYID00,LS_FBBH00,LS_YBZXLB,LS_YBBRLB,LS_YBLB00, LS_HJJE00,LS_JZJE00,LS_GFJE00,LS_HJJE00,LS_JMJE00,LS_GRZHZF,LS_TCJJZF,LS_HJZFJE,LS_PJH000,LS_YBZHYE, LS_CZRQ00,LS_CZSJ00,AD_XJYE00,AD_ZZYE00,AD_JZY000,AS_JMYY00,LS_XJJFJE,LS_ZZJFJE,-LEAST(LS_CYYTK0,0), greatest(ls_CYYTK0,0),LS_BQH000,AS_TSBZBH,LS_FYQSRQ,LS_FYJZRQ,LS_BJJJZF,LS_SYBXZF, ls_YBYL01,ls_YBYL02,ls_YBYL03,ls_YBYL04,ls_YBYL05,ls_YBYL06,ls_YBYL07,ls_YBYL08,ls_YBYL09, ls_YBYL10,ls_YBYL11,ls_YBYL12,ls_YBYL13,ls_BCBXF0,LS_CFXMS0,nvl(LS_SBGRZH_TEMP00,0), nvl(LS_SBTCJJ_TEMP00,0),LS_DBZBM0,LS_DBZMC0,LS_DBZBL0,LS_CSLX00,nvl(ls_gwybz0,0),LS_CYJSLX,as_JSLX00,as_DDLSH0); if SQL%NOTFOUND then as_YHMSG0:='生成账户表出错,请记录此信息并和系统管理员联系!'; as_SYSMSG:=SQLERRM; ROLLBACK; RETURN; end if; --3、填写病人结账明细表信息 if (ls_SFCFFP='Y') AND (ls_FBBH00 not in (1,3,90)) then --拆分发票只是把自付和公费部分的金额分开,发票是没有分开处理的 Insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM,ZFJE00,QZFJE0) select ad_JZDH00,B.FPXMID,B.XMMC00,NVL(sum(A.HJJE00),0),NVL(sum(A.JMJE00),0),null,null,A.ZFBL00,B.SFYLXM,NVL(SUM(A.ZFJE00),0),NVL(SUM(A.QZFJE0),0) from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C,ZY_BRFY00 D where A.XMBH00 = C.SFXMID and C.ZYFPID = B.FPXMID and (D.CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and A.DJH000 = D.DJH000 and D.JZDH00+0=0 and D.JFLBID = '2' and d.djh000>=as_qsdjh0 and d.djh000<=as_zzdjh0 and D.ZYID00 = ad_ZYID00 group by B.FPXMID,B.XMMC00,A.ZFBL00,B.SFYLXM; OPEN CUR_ZY_JZMX00_ZFBL00; LOOP FETCH CUR_ZY_JZMX00_ZFBL00 INTO ls_JZMX00; EXIT WHEN CUR_ZY_JZMX00_ZFBL00%NOTFOUND; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) values(ls_PJH000,ls_JZMX00.XMBH00,ls_JZMX00.XMMC00,ls_JZMX00.XMJE00,0,ls_JZMX00.ZFBL00,ls_JZMX00.QZFJE0,LS_JZMX00.SFYLXM); Update ZY_PJSYQK set XJJE00 = NVL(XJJE00,0)+ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00, --自付 ZZJE00 = NVL(ZZJE00,0)+ls_JZMX00.XMJE00 - ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00--记账 where PJH000 = ls_PJH000; if SQL%NOTFOUND then Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0) select ls_PJH000,PLBH00,PLMC00,SF_SF_GETPJXH(ad_JZY000,3),ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ls_JZMX00.XMJE00-ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_PJH000 from bm_pjlxb0 where PLBH00 = 3;--PLBH00=3是住院发票 end if; END LOOP; CLOSE CUR_ZY_JZMX00_ZFBL00; else Insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM,ZFJE00,QZFJE0) select ad_JZDH00,B.FPXMID,B.XMMC00,NVL(sum(A.HJJE00),0),NVL(sum(A.JMJE00),0),null,null,1,B.SFYLXM,NVL(sum(a.ZFJE00),0),nvl(sum(a.QZFJE0),0) from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C,ZY_BRFY00 D where A.XMBH00 = C.SFXMID and C.ZYFPID = B.FPXMID and A.DJH000 = D.DJH000 and D.JZDH00+0=0 and D.JFLBID = '2' and (D.CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1') and d.djh000>=as_qsdjh0 and d.djh000<=as_zzdjh0 and D.ZYID00 = ad_ZYID00 group by B.FPXMID,B.XMMC00,B.SFYLXM; select NVL(sum(XMJE00),0) INTO ls_TEMPJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y'; --Delete from ZY_PJSYMX where PJH000 = ls_PJH000 and sfylxm='N'; --旧票据明细删除 --3、填写病人票据信息表的内容 Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000) select ls_PJH000,PLBH00,PLMC00,decode(ls_TEMPJE,0,'0',SF_SF_GETPJXH(ad_JZY000,3)),ls_TEMPJE,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000 from BM_PJLXB0 where PLBH00 = 3; --PLBH00=3是住院发票 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 3)'; ROLLBACK; RETURN; end if; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH000,XMBH00,XMMC00,XMJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y'; end if; --处理伙食发票 IF ls_HSHJJE<>0 THEN select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH001 from dual; Insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH001,XMBH00,XMMC00,XMJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_jzdh00 and SFYLXM='N'; insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0) select ls_PJH001,PLBH00,PLMC00,SF_SF_GETPJXH(ad_JZY000,10),ls_HSHJJE,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_PJH000 from BM_PJLXB0 where PLBH00 = 10;--PLBH00=10是住院伙食发票 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: select * from bm_pjlxb0 where PLBH00 = 10)'; rollback; return; end if; END IF; --填写结账单号 Update ZY_BRFY00 set YBDJH0 = YBFSDH, --医保的单据流水号 JZDH00 = ad_JZDH00 --结算单号 where JZDH00+0=0 --未结算的病人 and djh000>=as_qsdjh0 and djh000<=as_zzdjh0 and JFLBID = '2' --有预交金账户的病人 and ZYID00 = ad_ZYID00 and (CZRQ00 <= as_JSZZRQ or as_CZBZ00 = '1'); Update ZY_YBFS00 set JZDH00=ad_JZDH00 where ZYID00=ad_ZYID00 and YBFSDH in (select distinct YBFSDH from ZY_BRFY00 where ZYID00=ad_ZYID00 and JZDH00 = ad_JZDH00); if as_SFYB00='Y' and as_CZBZ00 ='1' then --呆账病人出院结算 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPZH00,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,ZYID00,PLBH00) values(SQ_ZY_BRJFB0_DJH000.nextval,ld_BRID00,0,-1*ls_CYYTK0,9,'逃跑欠费','0',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'0',0,ad_JZDH00,ad_ZYID00,3); END IF; --6.若病人账户上有剩余金额,还应该将该剩余金额退还给病人(由于医保病人还有医保帐户退回的,可以在医保接口完成后再Update..where DJH000=ad_XJDJH0) IF as_CZBZ00 ='1' and (ls_SSWUTSCL = 'Y')AND(LS_ZY_FFJJ='Y') and (as_SFYB00<>'Y')THEN --非呆账出院结算,可能需要进行四舍五入 ls_SSWR00:=ad_XJYE00-round(ad_XJYE00+0.04,1); ad_XJYE00:=round(ad_XJYE00+0.04,1); if abs(ls_SSWR00) > 0.1 then as_YHMSG0:='系统结算四舍五入金额发生错误,该部分的金额不能为大于1的值!'; as_SYSMSG:='退还金额:'||to_char(ad_XJYE00)||',四舍五入后金额:'||to_char(round(ad_XJYE00,1)); ROLLBACK; RETURN; end if; end if; if ls_SSWR00<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ad_XJDJH0 from dual; --病人现金的退款单据号 Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_XJDJH0,ld_BRID00,'2',-ls_SSWR00,5,'四舍五入金额','','','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,'3',ad_ZYID00); end if; ad_XJDJH0:=0; if ad_XJYE00<>0 and as_SFYB00<>'Y' then--非呆账病人现金余额退出 select SQ_ZY_BRJFB0_DJH000.nextval into ad_XJDJH0 from dual; --病人现金的退款单据号 if (ZY_JSTKAYJJFS='Y')and (ad_XJYE00>0)and (as_CZBZ00='0') then select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,HSCZY0,HSCZXM,HSRQ00,HSSJ00) select ls_PJH000,PLBH00,PLMC00,SF_ZY_GETPJXH(ad_JZY000,ls_plbh00),-ad_XJYE00,0,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ad_JZY000,as_JZYXM0,ls_CZRQ00,ls_CZSJ00 from BM_PJLXB0 where PLBH00 = ls_plbh00 ; --退预交金时使用收款票据 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = '||ls_plbh00||')'; ROLLBACK; RETURN; end if; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_XJDJH0,ld_BRID00,'2',-ad_XJYE00,1,'现金','','','中途结算退预交金',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,ls_plbh00,ad_ZYID00); else Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_XJDJH0,ld_BRID00,'2',-ad_XJYE00,1,'现金','','','',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,3,ad_ZYID00); end if; end if; IF ad_ZZYE00 <> 0 and as_SFYB00<>'Y' THEN --若病人有剩余转账金额,进行退款,同时退款对应的打印票据号是发票号 select ZPH000,ZPKHYH,ZPDWMC into ls_ZPH000,ls_ZPKHYH,ls_ZPDWMC from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 = 2 and djh000=(select max(djh000) from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = '2' and ZFFS00 = 2); select SQ_ZY_BRJFB0_DJH000.nextval into ad_ZZDJH0 from dual; --病人转账的退款单据号 if (ZY_JSTKAYJJFS='Y')and (ad_ZZYE00>0) and (as_CZBZ00='0') then select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; Insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,HSCZY0,HSCZXM,HSRQ00,HSSJ00) select ls_PJH000,PLBH00,PLMC00,SF_ZY_GETPJXH(ad_JZY000,ls_plbh00),0,-ad_ZZYE00,0,ad_JZY000,as_JZYXM0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ad_JZY000,as_JZYXM0,ls_CZRQ00,ls_CZSJ00 from BM_PJLXB0 where PLBH00 = ls_plbh00 ; --退预交金时使用收款票据 if SQL%NOTFOUND then as_YHMSG0:='系统字典不完整,所需的票据类型不存在,操作失败!'; as_SYSMSG:=SQLERRM||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 8)'; ROLLBACK; RETURN; end if; Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_ZZDJH0,ld_BRID00,'2',-ad_ZZYE00,2,'转账','','','中途结算退预交金',ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,ls_plbh00,ad_ZYID00); else Insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,ZYID00) values(ad_ZZDJH0,ld_BRID00,'2',-ad_ZZYE00,2,'转账',ls_ZPH000,ls_ZPKHYH,ls_ZPDWMC,ls_PJH000, ls_CZRQ00,ls_CZSJ00,ad_JZY000,as_JZYXM0,0,'1',0,ad_JZDH00,3,ad_ZYID00); end if; END IF; if (ZY_JSTKAYJJFS='Y') and(as_CZBZ00='0') then if ad_XJYE00>0 then update ZY_JZB000 set XJYE00=0,YSZJE0=YSZJE0-ad_XJYE00 where JZDH00=ad_JZDH00; end if; if ad_ZZYE00>0 then update ZY_JZB000 set ZZYE00=0,ZZZJE0=ZZZJE0-ad_ZZYE00 where JZDH00=ad_JZDH00; end if; if (ad_XJYE00<0) then update ZY_JZB000 set XJYE00=ad_XJYE00 where JZDH00=ad_JZDH00; end if; else--出院结算 update ZY_JZB000 set XJYE00=ad_XJYE00+ls_SSWR00,ZZYE00=ad_ZZYE00 where JZDH00=ad_JZDH00; end if; --1、补充: Update ZY_BRZHXX set WJSJE0 = (select nvl(sum(ZFJE00),0) from ZY_BRFY00 where ZYID00=ad_ZYID00 and JZDH00=0) --YBTCJE = , --本次入院发生的医保统筹部分总金额,费用登记时,已添加了 --YBZFJE = , --本次入院发生的医保自付部分总金额 --YZYBJE = NVL(YZYBJE,0)+ls_JZJE00 where BRID00 = ld_BRID00 and JFLBID = '2'; if as_CZBZ00='1' then --由于出现出院登记不成功ZJF ADD 20030821 Update ZY_BRZHXX set XJYE00=0,ZZYE00=0,ZYE000=0,YKZYE0=0 where BRID00 = ld_BRID00 and JFLBID = '2'; else--中途结算,可能未回收所有预交金单,仍然有 --累计未回收的现金交费金额 select NVL(sum(JFJE00),0) into ls_XJJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = 0 and JFLBID = '2' and ZFFS00 in (1,8); --现金 --累计未回收的转帐交费金额 select NVL(sum(JFJE00),0) into ls_ZZJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = 0 and JFLBID = '2' and ZFFS00 = 2; --转帐 select nvl(sum(ZFJE00),0) into ls_HJZFJE from ZY_BRFY00 where ZYID00=ad_ZYID00 and JZDH00=0; if ls_ZZJFJE>ls_HJZFJE then Update ZY_BRZHXX set ZZYE00=ls_ZZJFJE-ls_HJZFJE, XJYE00=ls_XJJFJE, ZYE000=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE, YKZYE0=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE where BRID00 = ld_BRID00 and JFLBID = '2'; else Update ZY_BRZHXX set ZZYE00=0, XJYE00=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE, ZYE000=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE, YKZYE0=ls_XJJFJE+ls_ZZJFJE-ls_HJZFJE where BRID00 = ld_BRID00 and JFLBID = '2'; end if; end if; SP_ZY_JZMXXM_SJZL00; --修改单病种担保金额 Select count(1) into ls_COUNT0 from ZY_BRDB00 where BRID00=ld_BRID00 and DBYY00='单病种欠费' and SFYX00='Y'; if ls_COUNT0>0 then update ZY_BRDB00 set SFYX00='N',JSCZY0=ad_JZY000, JSRXM0=as_JZYXM0 where BRID00=ld_BRID00 and DBYY00='单病种欠费'; end if; if (as_JSLX00='1') and (trim(as_DDLSH0) is not null ) then --结算类型: -1:自费结算 0:医保结算 1:生育结算 2:工伤结算 3:保健结算 update ZY_YBJK00 set JZDH00=ad_JZDH00 where DDLSH0=as_DDLSH0 and ZYID00=ad_ZYID00; update ZY_JZB000 set YBDJH0=RYBJK.YBDJH0,SYDJH0=RYBJK.SYDJH0 where JZDH00=ad_JZDH00 and ZYID00=ad_ZYID00; end if; --病人费用结算结束,若病人是出院结算,还应该再调用出院登记的存储过程 --COMMIT,由于本存储过程与有共用,所以放在Delphi中控制 EXCEPTION WHEN OTHERS THEN as_YHMSG0:='出错原因不详,请记录此信息并和系统管理员联系!'; as_SYSMSG:=substr(SQLERRM||'执行存储过程错误:SP_ZY_BRFY00_JS0000('||to_char(ad_ZYID00)||','|| to_char(ad_JZY000)||','||as_JZYXM0||','||as_JMYY00||','||as_YJJXH0||','||as_CZBZ00||','|| as_SFYB00||','||as_JFDJHS||','||to_char(ad_XJYE00)||','||to_char(ad_ZZYE00)||','||to_char(ad_JZDH00)||',as_YHMSG0,as_SYSMSG)',1,150); ROLLBACK; END; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%