create or replace procedure SP_BQ_BRCYDJ --病人出院登记 ( -- MODIFICATION HISTORY -- Person Date Comments -- lintj 2013.02.19 加 Pczyks0、SP_BQ_JZXM00_JZXMCZ -- yangy 2013.01.17 省人民医院模式整理 -- linyx 2018.02.09 省人民医院出院登记要把有大于出院日期的停止医嘱的停止时间更新成和出院时间一样 for BQHS9.0-20180209-001 -- fuyc 2018.03.14 厦门莲花医院母亲出院登记时,如果婴儿出院日期,婴儿出院时间字段为空,请自动填写为母亲的出院日期和出院时间 -- linyx 2018.04.08 省人民医院出院登记判断是否存在已经停止、撤销、取消的医嘱,tzshr0没有填入,入存在,就填入当前操作人 for BQHS9.0-20180408-003 -- linyx 2018.09.25 参数BQ_KZWZCYBYSKYBBR限制未注册医保资质的医生不能给医保病人看病,就是病人不能出院 for BQHS9.0-20180912-001(现场归档) -- linyx 2018.12.12 死亡医嘱和出院登记时的转归情况相互校验,转归为死亡的,必须下死亡医嘱;没有出院或死亡医嘱,不能办理出院登记 for BQHS9.0-20181211-002 -- linyx 2018.12.16 修改zy_brxxb0.sjcyrq,sjcysj为传参进来的日期时间 for BQHS9.0-20181211-001 -- linyx 2018.12.21 增加参数控制修改zy_brxxb0.sjcyrq,sjcysj for BQHS9.0-20181220-002 -- linyx 2019.05.09 增加参数控制修改取消入科时清空cydjrq,cydjsj for BQHS9.0-20190506-003 -- linyx 2019.06.17 预出院登记后再出院登记,会报错流动信息错误,修正此问题 for BQHS9.0-20190617-002 -- xuxm 2019.07.15 生育险病人出院登记时,发送SYFMRQ(生育分娩日期)这个字段到ZY_BRXXB0 for BQHS9.0-20190712-001 -- dongxb 2019.07.16 三明市宁化县医院生育病人在出院登记的时候选择FMBQBM(分娩病情编码) BQHS9.0-20190715-011 -- dongxb 2019.11.05 BQ_CYSFHLBJCYSJ开启时出院日期都可修改,省老年专用 for BQHS9.0-20190827-003 -- linyx 2020.04.30 死亡医嘱判断增加条件过滤掉婴儿死亡的情况,以判断母亲医嘱未准 for BQHS9.0-20200426-007 -- dongxb 2020.09.30 拓展参数BQ_CYDJTXBRBASY=S,病案没有提交提示不可出科 for BQHS9.0-20200929-003 -- linyx 2020.10.27 判断转院医嘱也是属于出院医嘱 for BQHS9.0-20201021-006 -- dongxb 2020.12.16 取消入科删除BQ_BRTZXX数据 for BQHS9.0-20201204-006 -- linyx 2021.01.20 死亡病人以 zy_brxxb0.sjcyrq 计算住院天数,而不是以当前日期 for BQHS9.0-20210119-001 -- dongxb 2021.03.24 出院登记不清空ZY_BRXXB0.HLJBID for BQHS9.0-20210324-001 -- dongxb 2021.05.14 修改流产登记病人分娩病情编码也要写入zy_brxxb0.FMBQBH BQHS9.0-20210430-004 -- dongxb 2021.07.06 增加参数控制ZY_BRXXB0.ZZYS00不更新成出院医生 for BQHS9.0-20210629-003 -- huangzw 2021.11.17 增加参数控制是否写入到中间表ZY_DFSTZD,发送到易惠系统 for BQHS9.0-20211104-001 -- dongxb 2023.08.02 增加过程日志 for BQHS9.0-20230802-002 -- dongxb 2023.11.08 转科患者结束无陪护状态 for BQHS9.0-20231106-003 PZYID00 IN NUMBER , --住院ID PBQH000 IN NUMBER , --操作病区号 PCYYS00 IN NUMBER , --出院医生 PCYRQSJ IN CHAR , --出院日期 PQXZYBZ IN CHAR , --取消出院 PCZY000 IN NUMBER , --操作员 Pczyks0 in number , --操作员科室 PZLXG00 In Number , --治疗效果 PJSHSZ0 In Number default null, --结束护士长 PSFYXJS in varchar2 default '1', --允许结算标志 0:不允许结算 1:允许结算 PFMBQBH in varchar2 default null --分娩病情编码 ) AS Vparams VARCHAR2(255); COUNTER NUMBER(5) ; Vczyxm0 BM_YGBM00.ZWXM00%TYPE; --操作员姓名 Verrmsg varchar2(255); Vzxcgbz number; Vid0000 number; Vsfje00 number; Ecustom EXCEPTION; -- Vsfxmid BM_YYSFXM.SFXMID%TYPE; -- Vvalue0 XT_XTCS00.VALUE0%TYPE; Vcfscbz XT_XTCS00.VALUE0%TYPE; --病人出院登记时删除处方标志 Vyjscbz XT_XTCS00.VALUE0%TYPE; --病人出院登记时删除医技项目标志 Vcfyxcy XT_XTCS00.VALUE0%TYPE; --存在未发药品允许出院 Vlscfcy XT_XTCS00.VALUE0%TYPE; --存在已记帐未发药零散处方不允许出院 Vlscfxz XT_XTCS00.VALUE0%TYPE; --存在未记账零散处方不行出院 Vyjyxcy XT_XTCS00.VALUE0%TYPE; --存在未执行医技允许出院 Vtyyxcy XT_XTCS00.VALUE0%TYPE; --退药未处理允许允许出院 Vyjqxsf XT_XTCS00.VALUE0%TYPE; --医技单未收费的出院时强行收费 Vjflbid BM_BRJFLB.JFLBID%TYPE; --住院帐户类别ID Vch0000 BM_CWK000.CH0000%TYPE; --病人当前的床号 Vbrid00 ZY_BRXXB0.BRID00%TYPE; --病人ID号 Vsysdate DATE; VCYXJXZ char(1);--出院小结限制 Vfbbh00 zy_brxxb0.fbbh00%type;--费别编号 vXLXGMC XT_ZLXG00.MC0000%Type;--诊疗效果名称 Vyjdwgz XT_XTCS00.VALUE0%TYPE; --医技单未更正不允许出院登记 vhjje00 sf_brfy00.hjje00%type; Vztsxd0 XT_XTCS00.VALUE0%TYPE; --总天数相等才允许出院登记 Vtatjpd XT_XTCS00.VALUE0%TYPE; Vryrq00 ZY_BRXXB0.RYRQ00%TYPE; --入院日期 VDQKS00 ZY_BRXXB0.DQKS00%TYPE; --当前科室 Vyyqc00 xt_yyxx00.yyqc00%type;--所属医院 Vtsjsfs xt_xtcs00.value0%type;--床位诊疗护理费用天数计算方式 COUNTER1 NUMBER(5) ; --临时变量 Visjs00 NUMBER(5) ; --此次住院是否有生育记录 VZRZCID LJ_ZRZC00.ZRZCID%TYPE; VODQKS0 ZY_BRXXB0.DQKS00%TYPE; Vzlxmjc YJ_YW0000.zlxmjc%type; --项目名称 VBRZT00 ZY_BRXXB0.BRZT00%TYPE; --病人状态 VSFYXJS ZY_BRXXB0.SFYXJS%TYPE; --允许结算标志 VSFSRMMS XT_XTCS00.VALUE0%type; --判断医嘱是否是走省人民医嘱流程 Vcysj00 varchar2(50); --出院登记日期时间 VCYDJSFYXBTZYZ XT_XTCS00.VALUE0%TYPE; --病人出院登记时如果医嘱都按时提取和执行好后是否允许不停止医嘱就出院 Y 是 N否 默认值为N VKZWZCYBYSKYBBR XT_XTCS00.VALUE0%TYPE; --医保未注册医生是否允许看医保病人 Y是 N 否 默认值为N Vybsfzc BM_YGBM00.YBSFZC%type; --判断医生是否注册医保 Vsfycy0 XT_XTCS00.VALUE0%TYPE;--是否启用预出院登记,是则出院日期修改为传参日期,不是则用当前时间 VCYSFHLBJCYSJ XT_XTCS00.VALUE0%TYPE;--出院日期时间是否完全放开可修改 VSJCYRQ ZY_BRXXB0.SJCYRQ%type;--时间出院日期 CURSOR C_YW0000 IS SELECT YJDJH0,YJKSBH FROM YJ_YW0000 WHERE ZYGHID=PZYID00 and MZZYBZ='1' and XMZT00 IN ('0','1') and NVL(CXDJH0,0)=0;--and YJLRBZ='N' CURSOR C_BMMC00_WJZCF IS SELECT DISTINCT L.BMMC00 FROM YF_ZYCF00 C,YF_ZYCFMX M,BM_BMBM00 L WHERE C.CFLSH0=M.CFLSH0 and C.DQKS00=L.BMBH00 and ZYID00=PZYID00 and CFZT00='0' and CXBZ00 IN ('Z');--and SFKSLY='Y' and CFSRBZ IN ('4','6'); CURSOR C_BMMC00_WJZYJ IS SELECT DISTINCT B.BMMC00 FROM YJ_YW0000 A,BM_BMBM00 B WHERE A.YJKSBH=B.BMBH00 and ZYGHID=PZYID00 and MZZYBZ='1' and XMZT00 IN ('0','1') and NVL(CXDJH0,0)=0 --and YJLRBZ='N'; and (VYJYXCY='N' or (VYJYXCY='M' and exists (select 1 from YJ_YWJJ00 where YJDJH0=a.YJDJH0))); CURSOR C_BMMC00_YJZCF IS SELECT DISTINCT L.BMMC00 FROM YF_ZYCF00 C,YF_ZYCFMX M,BM_BMBM00 L WHERE C.CFLSH0=M.CFLSH0 and C.DQKS00=L.BMBH00 and ZYID00=PZYID00 and CFZT00='1' and CXBZ00 IN ('Z') ;--and SFKSLY='Y' and CFSRBZ IN ('4','6'); CURSOR C_BMMC00_YJWGZ IS SELECT DISTINCT A.YJKSMC FROM VW_ZY_YJYW00 A where A.ZYID00 = PZYID00 and A.CXDJH0 in (select YJDJH0 from YJ_YW0000 where ZYGHID = A.ZYID00 and SFDJH0 in (select DJH000 from ZY_BRFY00 where JZDH00 = 0 and ZYID00=A.ZYID00)) and A.SFDJH0 = 0; CURSOR C_ZYZTS0 IS SELECT c.zyfpid,E.xmmc00,SUM(A.xmsl00) xmsl00 FROM ZY_FYMX00 A,ZY_BRFY00 B,BM_YYSFXM C,BM_TYZD00 D,BM_FPXM00 E WHERE A.djh000=B.djh000 and A.xmbh00=C.sfxmid and B.zyid00=PZYID00 and c.bmgzid = 1 and d.ZDMC00='床位/护理/诊察费维护' and c.bh0000=d.bh0000 and c.zyfpid=e.fpxmid group by c.zyfpid,e.xmmc00; CURSOR C_FYMX00 IS SELECT SUM(DECODE(C.BH0000,'011020000502',A.xmsl00,0)) ZYZCF0,--住院诊察费,58元/天 SUM(DECODE(C.BH0000,'011090000101',A.xmsl00,0)) CWF180,--床位费,18元/天 SUM(DECODE(C.BH0000,'011090000120',A.xmsl00,0)) CWF250,--床位费,25元/天 SUM(DECODE(C.BH0000,'011090000130',A.xmsl00,0)) CWF200,--床位费,20元/天 SUM(DECODE(C.BH0000,'011090000110',A.xmsl00,0)) CWF330,--单人间,33元/天 SUM(DECODE(C.BH0000,'012010000300',A.xmsl00,0)) YJHL00,--I级护理 SUM(DECODE(C.BH0000,'012010000400',A.xmsl00,0)) EJHL00,--II级护理 SUM(DECODE(C.BH0000,'012010000500',A.xmsl00,0)) SJHL00,--III级护理 SUM(DECODE(C.BH0000,'011090000103',A.xmsl00,0)) PBF000,--陪伴费,2元/天 SUM(DECODE(C.BH0000,'011090000104',A.xmsl00,0)) WJ0000,--卧具,2元/天 SUM(DECODE(C.BH0000,'011090000105',A.xmsl00,0)) DDFB00,--电动防褥,10元/天 SUM(DECODE(C.BH0000,'011090000106',A.xmsl00,0)) ZC2000,--租床,20元/天 SUM(DECODE(C.BH0000,'011090000107',A.xmsl00,0)) ZC2500,--租床,25元/天 SUM(DECODE(C.BH0000,'011090000112',A.xmsl00,0)) ZFDRJ0,--自费单人间,8元/天 SUM(DECODE(C.BH0000,'011090000122',A.xmsl00,0)) ZFYZBF --自费优质病房,75元/天 FROM ZY_FYMX00 A,ZY_BRFY00 B,BM_YYSFXM C WHERE A.djh000=B.djh000 and A.xmbh00=C.sfxmid and B.zyid00=PZYID00; BEGIN Vsysdate:=SYSDATE; Vparams :='SP_BQ_BRCYDJ('||TO_CHAR(PZYID00)||', '||TO_CHAR(PBQH000)||','||TO_CHAR(PCYYS00) ||','''||PCYRQSJ||''','||TO_CHAR(PCZY000)||')'; SP_TransLog(Vsysdate,'SP_BQ_BRCYDJ',PCZY000,Pczyks0,Vparams); select nvl(max(trim(VALUE0)),'N') into VSFSRMMS from XT_XTCS00 where NAME00='ZS_SFQYYTZ'; select count(*) into counter from LJ_ZRZC00 where ZYID00=PZYID00 and nvl(JSRQ00,' ')=' '; if counter>0 then Verrmsg:='病人还未出路径,不能出科'; RAISE Ecustom; end if; SELECT DQKS00 INTO VODQKS0 FROM ZY_BRXXB0 WHERE DQBQ00=PBQH000 and ZYID00=PZYID00; select count(1) into counter from xt_xtcs00 where name00='BQ_SFQYHLLJ' and value0='Y'; --是否启用护理路径 --判断病人是否还在路径护理工作未处理 if counter>0 then begin select ZRZCID into VZRZCID from ( select ZRZCID from LJ_ZRZC00 where ZYID00=PZYID00 and JSFS00='完成' and KSBH00=VODQKS0 order by KSRQ00 desc) where rownum=1 ; exception when others then VZRZCID:=0; end; if VZRZCID>0 then --是否启用护理路径 select count(*) into COUNTER from LJ_HLZXJL where ZRZCID=VZRZCID and SFZX00='0'; if (COUNTER>0) then Verrmsg:='病人还有未处理的护理工作,请处理后后再出院登记'; Raise Ecustom; end if; end if; end if; begin--病人出院登记时如果医嘱都按时提取和执行好后是否允许不停止医嘱就出院 Y 是 N否 默认值为N 至于是否已经按时从出院登记的前台已经限制好了. select UPPER(TRIM(VALUE0)) inTO VCYDJSFYXBTZYZ from XT_XTCS00 where NAME00='BQ_CYDJSFYXBTZYZ'; exception when others THEN VCYDJSFYXBTZYZ:='N'; end; select count(1) into counter from xt_xtcs00 where name00='BQ_CYDJTXBRBASY' and value0='Y'; IF COUNTER>0 THEN SELECT COUNT(1) INTO COUNTER FROM BA_BRZYXX A,ZY_BRXXB0 B WHERE A.BAZT00 ='2' and B.ZYID00=PZYID00 and A.ZYH000=TRIM(B.ZYH000) and A.ZYCS00=B.BRRYCS; IF COUNTER=0 THEN select sum(hjje00) into vhjje00 from zy_brfy00 where zyid00=PZYID00 and jzdh00+0=0; if vhjje00>10 then Verrmsg:='病人病案首页未填写,不让出科'; RAISE Ecustom; end if; END IF; END IF; select count(1) into counter from xt_xtcs00 where name00='BQ_CYDJTXBRBASY' and value0='M'; IF COUNTER>0 THEN SELECT COUNT(1) INTO COUNTER FROM BA_BRZYXX A where LSH000=PZYID00 and RYQK00 is not null and CYRQ00 is not null; IF COUNTER=0 THEN Verrmsg:='病案首页的入院情况或出院日期未填写,无法办理出院'; RAISE Ecustom; END IF; end if ; --## BQHS9.0-20200929-003 select count(1) into counter from XT_XTCS00 where NAME00='BQ_CYDJTXBRBASY' and VALUE0='S'; IF counter>0 THEN select count(1) into counter from BA_BRZYXX A,ZY_BRXXB0 B where A.SHBZ00 ='1' and B.ZYID00=PZYID00 and A.LSH000=B.ZYID00; IF counter=0 THEN Verrmsg:='未提交病案首页,无法办理出院'; RAISE Ecustom; END IF; END IF; IF nvl(PCYYS00,0)=0 THEN Verrmsg:='未指定出院医生'; RAISE Ecustom; END IF; SELECT ZWXM00 INTO VCZYXM0 FROM BM_YGBM00 WHERE YGBH00=PCZY000; --判定病人状态是否正确 SELECT COUNT(*) INTO COUNTER FROM ZY_BRXXB0 WHERE DQBQ00=PBQH000 and ZYID00=PZYID00 and BRZT00 IN ('20','23'); IF COUNTER=0 THEN Verrmsg:='病人状态已经改变,请刷新后重试'; RAISE Ecustom; ELSE --取病人的床号和ID号 SELECT nvl(RYCWH0,'0'),BRID00,FBBH00,RYRQ00,DQKS00,SJCYRQ INTO VCH0000,VBRID00,Vfbbh00,Vryrq00,VDQKS00,VSJCYRQ FROM ZY_BRXXB0 WHERE ZYID00=PZYID00; END IF; --限制医保未注册医生看医保病人 select trim(NVL(max(value0),'N')) into VKZWZCYBYSKYBBR from xt_xtcs00 where name00='BQ_KZWZCYBYSKYBBR'; if VKZWZCYBYSKYBBR='Y'then select FBBH00 into Vfbbh00 from zy_brxxb0 where zyid00=PZYID00; if Vfbbh00='3' then select nvl(a.ybsfzc,'0') into Vybsfzc from bm_ygbm00 a,zy_brxxb0 b where b.zyid00=PZYID00 and a.ygbh00=b.sxys00; if Vybsfzc<>'1' then Verrmsg:='对不起,主管医师的医保注册状态不正常,病人不能出院,请联系管理员!'; raise Ecustom; end if; end if; end if; select count(*) into counter from xt_xtcs00 where name00='BQ_CYDJSFYXCYXJWK'; if COUNTER>0 then select trim(value0) into VCYXJXZ from xt_xtcs00 where name00='BQ_CYDJSFYXCYXJWK'; if VCYXJXZ='N' then select count(*) into COUNTER from zy_brxxb0 where zyid00=PZYID00 and cyxj00 is null; if COUNTER >0 then Verrmsg:='出院小结不能为空'; RAISE Ecustom; end if; end if; if VCYXJXZ='M' and Vfbbh00='3' then select count(*) into COUNTER from zy_brxxb0 where zyid00=PZYID00 and cyxj00 is null; if COUNTER >0 then Verrmsg:='医保病人出院小结不能为空'; RAISE Ecustom; end if; select count(*) into COUNTER from bq_brzdxx where zyid00=PZYID00 and ZDLB00='3'; if COUNTER =0 then Verrmsg:='医保病人出院诊断不能为空'; RAISE Ecustom; end if; end if; end if; --限制出院诊断为传染病诊断时必须填写传染病报告卡. by zhangwz select count(*) into counter from xt_xtcs00 where name00='BQ_SFXZCYZDWCRBSTXCRBBGK' and VALUE0='Y'; if counter>0 then select count(a.ZYID00) into COUNTER from BQ_BRZDXX a,XT_ICD900 b where a.zyid00=PZYID00 and a.ZDLB00='3' and a.ZDM000=b.ICD900 and b.SFCRB0='1' and not exists (select 1 from CR_CRBDJ0 where ZYID00=a.ZYID00 and (JBMC00=a.ZDMC00 OR DJID00=a.CRDJID)); if COUNTER>0 then Verrmsg:='系统限制出院主要诊断填写为传染病诊断的必须填写传染病报告卡,请先通知医生填写后再来操作!'; RAISE Ecustom; end if; end if; if nvl(PSFYXJS,'1') = '1' then --判断是否存在已申请或安排手术未收费,跳出提示。 by BQ-20111207-002 select count(*) into counter from xt_xtcs00 where name00='BQ_CZWSFSSSFTSXZCY' and VALUE0='Y'; if COUNTER>0 then select count(*) into counter from ss_yw0000 where ZYGHID=PZYID00 and SSFYBZ in ('0','1') and MZFYBZ in ('0','1') and sszt00 in ('0','2','4') ; if COUNTER>0 then Verrmsg:='存在未收费手术不能出院,请先处理后再来操作!'; RAISE Ecustom; end if; end if; end if; --判定系统帐户参数是否正常,以便准备返还押金的预扣的费用 SELECT COUNT(*) INTO COUNTER FROM BM_BRJFLB WHERE SYBZ00='1' and SFYX00='Y'; IF COUNTER<>1 THEN Verrmsg:='帐户类别参数错误'; RAISE Ecustom; ELSE SELECT JFLBID INTO VJFLBID FROM BM_BRJFLB WHERE SYBZ00='1' and SFYX00='Y'; END IF; --判定病人是否有未停止的药品医嘱 SELECT COUNT(*) INTO COUNTER FROM BQ_YPYZ00 WHERE ZYID00=PZYID00 and YZZT00 IN ('1','2','5') and ROWNUM=1; IF (COUNTER>0) and (trim(VCYDJSFYXBTZYZ)='N') THEN Verrmsg:='病人有未停止的药品医嘱,请执行后再出院'; RAISE Ecustom; END IF; --SELECT COUNT(*) INTO COUNTER FROM BQ_YZZXJL --WHERE ZYID00=PZYID00 and YZID00>0 and DJHLB0='0' and ZT0000 IN ('0')and ROWNUM=1 and SFXYZX='Y'; --IF (COUNTER>0) THEN -- Verrmsg:='病人有未执行的药品医嘱,请执行后再出院'; -- RAISE Ecustom; --END IF; --省人民的医嘱模式有临嘱取消功能,yzzt00=6 if VSFSRMMS='M' then SELECT COUNT(*) INTO COUNTER FROM BQ_YJYZ00 WHERE ZYID00=PZYID00 and YZZT00 IN ('1','2','5') and ROWNUM=1; else SELECT COUNT(*) INTO COUNTER FROM BQ_YJYZ00 WHERE ZYID00=PZYID00 and YZZT00 IN ('1','2','5','6') and ROWNUM=1; end if; IF (COUNTER>0) and (trim(VCYDJSFYXBTZYZ)='N') THEN Verrmsg:='病人有未停止的非药医嘱,请停止后再出院'; RAISE Ecustom; END IF; SELECT COUNT(*) INTO COUNTER FROM BQ_JZXM00 WHERE ZYID00=PZYID00 and TZRQ00 IS NULL and ROWNUM=1; IF COUNTER>0 THEN Verrmsg:='病人有未停止的收费项目,请停止后再出院'; RAISE Ecustom; END IF; BEGIN--总天数相等才允许出院登记 SELECT UPPER(TRIM(VALUE0)) INTO Vztsxd0 FROM XT_XTCS00 WHERE NAME00='BQ_CYDJ_CWHLZCZTS'; EXCEPTION WHEN OTHERS THEN Vztsxd0:='N'; END; BEGIN SELECT UPPER(TRIM(VALUE0)) INTO Vtatjpd FROM XT_XTCS00 WHERE NAME00='BQ_SFTAYYCYDJTJPD'; EXCEPTION WHEN OTHERS THEN Vtatjpd:='N'; END; BEGIN--医技单未更正不能出院判定 SELECT UPPER(TRIM(VALUE0)) INTO Vyjdwgz FROM XT_XTCS00 WHERE NAME00='BQ_YJDWGZBNCY'; EXCEPTION WHEN OTHERS THEN Vyjdwgz:='N'; END; BEGIN--医技单强行收费判定 SELECT UPPER(TRIM(VALUE0)) INTO VYJQXSF FROM XT_XTCS00 WHERE NAME00='BQ_CYSYJDQXSF'; EXCEPTION WHEN OTHERS THEN VYJQXSF:='N'; END; BEGIN--出院时未收费处方是否强制作废 SELECT UPPER(TRIM(VALUE0)) INTO Vcfscbz FROM XT_XTCS00 WHERE NAME00='BQ_CYDJCFSCBZ'; EXCEPTION WHEN OTHERS THEN VCFSCBZ:='N'; END; BEGIN--出院时未收费医技是否强制作废 SELECT UPPER(TRIM(VALUE0)) INTO VYJSCBZ FROM XT_XTCS00 WHERE NAME00='BQ_CYDJYJXMSCBZ'; EXCEPTION WHEN OTHERS THEN VYJSCBZ:='N'; END; BEGIN--处方未记账不能出院判定 SELECT UPPER(TRIM(VALUE0)) INTO VCFYXCY FROM XT_XTCS00 WHERE NAME00='ZY_WJZBNCY'; IF VCFYXCY='Y' THEN VCFYXCY:='N'; ELSE VCFYXCY:='Y'; END IF; EXCEPTION WHEN OTHERS THEN VCFYXCY:='Y'; END; BEGIN--存在未记账零散处方不允许出院 SELECT UPPER(TRIM(VALUE0)) INTO Vlscfxz FROM XT_XTCS00 WHERE NAME00='BQ_YLSCFWJZSFXZCY'; EXCEPTION WHEN OTHERS THEN Vlscfxz:='N'; END; BEGIN--存在已记帐未发药零散处方不允许出院 SELECT UPPER(TRIM(VALUE0)) INTO Vlscfcy FROM XT_XTCS00 WHERE NAME00='BQ_CYDJLSCFFY'; EXCEPTION WHEN OTHERS THEN Vlscfcy:='N'; END; BEGIN--医技未记账出院判定 SELECT UPPER(TRIM(VALUE0)) INTO VYJYXCY FROM XT_XTCS00 WHERE NAME00='BQ_WZXYJSFYXCY'; EXCEPTION WHEN OTHERS THEN VYJYXCY:='Y'; END; BEGIN--退药未处理出院判定 SELECT UPPER(TRIM(VALUE0)) INTO VTYYXCY FROM XT_XTCS00 WHERE NAME00='ZY_YTFSFYXCY'; IF VTYYXCY='Y' THEN VTYYXCY:='N'; ELSE VTYYXCY:='Y'; END IF; EXCEPTION WHEN OTHERS THEN VTYYXCY:='Y'; END; IF Vtatjpd='Y' THEN FOR FYMX IN C_FYMX00 LOOP IF FYMX.ZYZCF0<>FYMX.CWF180+FYMX.CWF200+FYMX.CWF250+FYMX.CWF330 then Verrmsg:='住院诊察费次数不等于床位费:其中[诊察费]'||to_char(FYMX.ZYZCF0)||'次,[床位费]18元的'||to_char(FYMX.CWF180)||'次、20元的'||to_char(FYMX.CWF200)||'次、25元的'||to_char(FYMX.CWF250)||'次、单人间33元的'||to_char(FYMX.CWF330)||'次'; RAISE Ecustom; end if; IF FYMX.ZYZCF0<>FYMX.YJHL00+FYMX.EJHL00+FYMX.SJHL00 then Verrmsg:='住院诊察费次数不等于护理费:其中[诊察费]'||to_char(FYMX.ZYZCF0)||'次,[I级护理]'||to_char(FYMX.YJHL00)||'次、[II级护理]'||to_char(FYMX.EJHL00)||'次、[III级护理]'||to_char(FYMX.SJHL00)||'次'; RAISE Ecustom; end if; IF FYMX.ZYZCF0'Y') then --是否属于取消出院记录后再收治 select count(1) into counter from zy_brxxb0 where zyid00=PZYID00 and cyrq00 is null; select trim(value0) into Vtsjsfs from xt_xtcs00 where name00='BQ_CWZCHLFTSJSFS'; if counter>0 then COUNTER1:=0; select count(*) into COUNTER from BQ_YJYZ00 where ZYID00=PZYID00 and YZZT00 in ('1','2','3') and ZLXMJC like '%死亡%' and ZLXMJC not like '%取消%' and YEXM00 is null; if COUNTER>0 then--患者死亡 select to_date((decode(VSJCYRQ,'20991231',to_char(sysdate,'YYYYMMDD'),VSJCYRQ)),'YYYYMMDD')-TO_DATE(Vryrq00,'YYYYMMDD') INTO COUNTER from dual; --住院总天数 else select TRUNC(SYSDATE)-TO_DATE(Vryrq00,'YYYYMMDD') INTO COUNTER from dual; --住院总天数 end if; FOR ZYZTS0 IN C_ZYZTS0 LOOP if ZYZTS0.xmmc00='床位费' then --床位费 if ZYZTS0.xmsl00<>COUNTER then Verrmsg:=Verrmsg||'应退还床位费'||TO_CHAR(ZYZTS0.xmsl00-COUNTER)||'次,'; end if; COUNTER1:=COUNTER1+1; ELSIF ZYZTS0.xmmc00='诊察费' then --诊察费 if Vtsjsfs='1' then if ZYZTS0.xmsl00<>COUNTER then Verrmsg:=Verrmsg||'应退还诊察费'||TO_CHAR(ZYZTS0.xmsl00-COUNTER)||'次,'; end if; ELSIF ZYZTS0.xmsl00<>COUNTER+1 then Verrmsg:=Verrmsg||'应退还诊察费'||TO_CHAR(ZYZTS0.xmsl00-COUNTER-1)||'次,'; end if; COUNTER1:=COUNTER1+10; ELSIF ZYZTS0.xmmc00='护理费' then --护理费 if Vtsjsfs='1' then if ZYZTS0.xmsl00<>COUNTER then Verrmsg:=Verrmsg||'应退还护理费'||TO_CHAR(ZYZTS0.xmsl00-COUNTER)||'次,'; end if; ELSIF ZYZTS0.xmsl00<>COUNTER+1 then Verrmsg:=Verrmsg||'应退还护理费'||TO_CHAR(ZYZTS0.xmsl00-COUNTER-1)||'次,'; end if; COUNTER1:=COUNTER1+100; END IF; END LOOP; if COUNTER>0 then --有住院天数 if COUNTER1=0 then --全部没收费 Verrmsg:=Verrmsg||'床位、诊察、护理费全部没收费,应各补收'||TO_CHAR(COUNTER)||'次,'; elsif COUNTER1<111 then --有某类发票全部没收费 select lpad(To_char(COUNTER1),3,'0') into Vztsxd0 from dual; if substrb(Vztsxd0,3,1)='0' then Verrmsg:=Verrmsg||'应退还床位费-'||TO_CHAR(COUNTER)||'次,'; end if; if substrb(Vztsxd0,2,1)='0' then if Vtsjsfs='1' then Verrmsg:=Verrmsg||'应退还诊察费-'||TO_CHAR(COUNTER)||'次,'; else Verrmsg:=Verrmsg||'应退还诊察费-'||TO_CHAR(COUNTER+1)||'次,'; end if; end if; if substrb(Vztsxd0,1,1)='0' then if Vtsjsfs='1' then Verrmsg:=Verrmsg||'应退还护理费-'||TO_CHAR(COUNTER)||'次,'; else Verrmsg:=Verrmsg||'应退还护理费-'||TO_CHAR(COUNTER+1)||'次,'; end if; end if; end if; end if; if Verrmsg is not null then Verrmsg:='住院总天数'||TO_CHAR(COUNTER+1)||','||Verrmsg; RAISE Ecustom; end if; end if; END IF; if nvl(PSFYXJS,'1') = '1' then --医技单未更正不能出院判定(莆田人民医院) IF Vyjdwgz='Y' THEN select COUNT(*) INTO COUNTER from VW_ZY_YJYW00 A where A.ZYID00 = PZYID00 and A.CXDJH0 in (select YJDJH0 from YJ_YW0000 where ZYGHID = A.ZYID00 and SFDJH0 in (select DJH000 from ZY_BRFY00 where JZDH00 = 0 and ZYID00=A.ZYID00)) and A.SFDJH0 = 0 and ROWNUM=1; IF COUNTER>0 THEN FOR YJWGZ IN C_BMMC00_YJWGZ LOOP Verrmsg:=Verrmsg||YJWGZ.YJKSMC||','; END LOOP; Verrmsg:=Verrmsg||'病人有医技单未更正,不能出院'; RAISE Ecustom; END IF; END IF; --医技单未收费的强行收费(泉州三院) IF VYJQXSF='Y' THEN SELECT COUNT(*) INTO COUNTER FROM YJ_YW0000 WHERE ZYGHID=PZYID00 and MZZYBZ='1' and XMZT00 IN ('0','1') and ROWNUM=1 and NVL(CXDJH0,0)=0;--and YJLRBZ='N' IF COUNTER>0 THEN FOR YJ IN C_YW0000 LOOP SP_YJ_YWSF00_NEW(YJ.YJDJH0,YJ.YJKSBH,PCZY000,null,'N',Vzxcgbz,Verrmsg,Verrmsg); END LOOP; END IF; END IF; IF VCFSCBZ='Y' THEN--出院时强行作废未收费的医嘱处方(不包括退药申请和零散处方) --医嘱药品处理,有预扣药品库存和帐户金额 SELECT COUNT(*) INTO COUNTER FROM YF_YZYPSQ WHERE ZYID00=PZYID00 and QLZT00='0' and CXBZ00='Z' and ROWNUM=1; IF COUNTER>0 THEN UPDATE YF_YZYPSQ SET QLZT00='3' WHERE ZYID00=PZYID00 and QLZT00='0' and CXBZ00='Z'; END IF; END IF; IF VYJSCBZ='Y' THEN--医技单未收费的强行作废(不包括冲销申请的医技单) UPDATE YJ_YW0000 SET XMZT00='6', ZXRQ00=TO_CHAR(VSYSDATE,'YYYYMMDD'), ZXSJ00=TO_CHAR(VSYSDATE,'HH24:MI:SS'), ZXR000=PCZY000 WHERE ZYGHID=PZYID00 and MZZYBZ='1' and XMZT00 IN ('0','1') and YJLRBZ='N' and NVL(CXDJH0,0)=0; END IF; --处理处方 IF VCFYXCY='N' THEN--未收费处方不允许出院 SELECT COUNT(*) INTO COUNTER FROM YF_YZYPSQ WHERE ZYID00=PZYID00 and QLZT00='0'and CXBZ00 IN ('Z') and nvl(ZBYBZ0,'0')='0' ; IF COUNTER>0 THEN Verrmsg:='病人有医嘱药品处方未发,不能出院'; RAISE Ecustom; END IF; END IF; IF Vlscfxz='Y' THEN--未记账零散处方不允许出院 SELECT COUNT(*) INTO COUNTER FROM YF_ZYCF00 C,YF_ZYCFMX M WHERE C.CFLSH0=M.CFLSH0 and ZYID00=PZYID00 and CFZT00='0' and CXBZ00 IN ('Z') ;--and SFKSLY='Y' and CFSRBZ IN ('4','6'); IF COUNTER>0 THEN FOR WJZCF IN C_BMMC00_WJZCF LOOP Verrmsg:=Verrmsg||WJZCF.BMMC00||','; END LOOP; Verrmsg:=Verrmsg||'病人有零散处方未记账,不能出院'; RAISE Ecustom; END IF; END IF; --处理处方2 IF Vlscfcy='Y' THEN--已记帐未发药零散处方不允许出院 SELECT COUNT(*) INTO COUNTER FROM YF_ZYCF00 C,YF_ZYCFMX M WHERE C.CFLSH0=M.CFLSH0 and ZYID00=PZYID00 and CFZT00='1' and CXBZ00 IN ('Z') and SFKSLY<>'Y';-- and CFSRBZ IN ('4','6'); IF COUNTER>0 THEN FOR YJZCF IN C_BMMC00_YJZCF LOOP Verrmsg:=Verrmsg||YJZCF.BMMC00||','; END LOOP; Verrmsg:=Verrmsg||'病人有零散处方已记帐未发药,不能出院'; RAISE Ecustom; END IF; END IF; --处理医技单防止漏费 SELECT COUNT(*),nvl(max(trim(zlxmjc)),'') INTO COUNTER,Vzlxmjc FROM YJ_YW0000 a WHERE ZYGHID=PZYID00 and MZZYBZ='1' and sfdjh0>0 and not exists(select 1 from zy_fymx00 where djh000=a.sfdjh0) and zje000<>0 ; IF COUNTER>0 THEN Verrmsg:=Verrmsg||'病人有未扣费的医技项目"'||Vzlxmjc||'",不能出院'; RAISE Ecustom; END IF; --处理医技单 IF (VYJYXCY='N') or (VYJYXCY='M') THEN--医技单未收费的不允许出院 SELECT COUNT(*) INTO COUNTER FROM YJ_YW0000 a WHERE ZYGHID=PZYID00 and MZZYBZ='1' and XMZT00 IN ('0','1') and zje000<>0 and ROWNUM=1 and NVL(CXDJH0,0)=0 --and YJLRBZ='N' and (VYJYXCY='N' or (VYJYXCY='M' and exists (select 1 from YJ_YWJJ00 where YJDJH0=a.YJDJH0))); IF COUNTER>0 THEN FOR WJZYJ IN C_BMMC00_WJZYJ LOOP Verrmsg:=Verrmsg||WJZYJ.BMMC00||','; END LOOP; Verrmsg:=Verrmsg||'病人有未记账的医技单,不能出院'; RAISE Ecustom; END IF; END IF; end if; IF VTYYXCY='N' THEN--退药未处理不允许出院 SELECT COUNT(*) INTO COUNTER FROM YF_YZYPSQ WHERE ZYID00=PZYID00 and QLZT00='0'and CXBZ00='-'; IF COUNTER>0 THEN Verrmsg:='病人有医嘱处方退药未处理,不能出院'; RAISE Ecustom; END IF; SELECT COUNT(*) INTO COUNTER FROM YF_ZYCF00 C,YF_ZYCFMX M WHERE C.CFLSH0=M.CFLSH0 and ZYID00=PZYID00 and CFZT00='0'and CXBZ00 <>'Z';-- and SFKSLY='Y';--CFSRBZ IN ('4','6'); IF COUNTER>0 THEN Verrmsg:='病人有零散处方退药未处理,不能出院'; RAISE Ecustom; END IF; END IF; SELECT COUNT(*) into COUNTER FROM XT_XTCS00 WHERE NAME00='BQ_CYDJZDSFXM' and VALUE0<>'0'; if COUNTER>0 then SELECT COUNT(*) INTO COUNTER FROM BQ_BRLDXX WHERE ZYID00=PZYID00 and JSZT00='出院'; IF COUNTER=0 THEN--未出过院 SELECT value0 into Vvalue0 FROM XT_XTCS00 WHERE NAME00='BQ_CYDJZDSFXM' ; LOOP if instr(Vvalue0,',')>0 then Vsfxmid:=to_number(substrb(Vvalue0,1,instr(Vvalue0,',')-1)); Vvalue0:=substrb(Vvalue0,instr(Vvalue0,',')+1,length(Vvalue0)); else Vsfxmid:=to_number(trim(Vvalue0)); Vvalue0:='0'; end if; --作为床位费处理 Vid0000 := null; Vsfje00 := null; SP_BQ_JZXM00_JZXMCZ( 2, --操作内容 1修改 2增加 3删除 Vid0000, --Popflag=2时, 传null Pzyid00, --住院ID '1', --长期/零星标志,'0'长'1'零 '1', --项目类别''0''普通,''1''床位(长期)''2''代办''3''附加费 Vsfxmid, --收费项目ID 1, --收费次数 Vsfje00, --收费金额,未指定取BM_YYSFXM 'N', --季节收费标志 '1', --0手工1自动 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Vzxcgbz, --执行成功标志 1成功 0失败 Verrmsg, --执行结果提示信息,成功的情况下也可能有警告信息 Verrmsg, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 null --起始日期 ); EXIT WHEN Vvalue0='0'; END LOOP; --收费 SP_BQ_JZXMGZ_BR(PZYID00,PBQH000,PCZY000,'1','1',VSYSDATE,COUNTER,'N'); END IF; end if; select nvl(max(trim(VALUE0)),'Y') into Vsfycy0 from XT_XTCS00 where NAME00='BQ_SFQYYCYDJ'; --删除拆份表纪录 --DELETE FROM BQ_YPYZCF C WHERE YZID00 IN (SELECT YZID00 FROM BQ_YPYZ00 WHERE ZYID00=PZYID00 and BQH000=PBQH000 ); --判断病人是否做过预出院登记 --在院病人且流动信息表数据已经写入结束表示做了预出院 select count(*) into COUNTER from BQ_BRLDXX where ZYID00=PZYID00 and JSZT00 IS NULL and QSZT00<>'包床'; if Vsfycy0='Y' and COUNTER<=0 then --判断是否存在包床信息还未处理 select count(*) into COUNTER from BQ_BRLDXX where ZYID00=PZYID00 and JSZT00 IS NULL and QSZT00='包床'; if COUNTER>0 then UPDATE BQ_BRLDXX SET JSCZY0=PCZY000, JSZT00='退床', JSRQ00=TO_CHAR(VSYSDATE,'YYYYMMDD'), JSSJ00=TO_CHAR(VSYSDATE,'HH24:MI:SS'), ZZYS00=PCYYS00, JSHSZ0=PJSHSZ0 WHERE ZYID00=PZYID00 and JSZT00 IS NULL and QSZT00='包床'; IF SQL%NOTFOUND THEN--没有发现信息 Verrmsg:='出院病人流动信息异常,请联系管理员!'; Raise Ecustom; END IF; end if; else --修改病人的流动信息 update bq_brldxx set bqjsrq=TO_CHAR(VSYSDATE,'YYYYMMDD') where zyid00=pzyid00 and bqjsrq='99991231' and qszt00 in ('新入','入院'); UPDATE BQ_BRLDXX SET JSCZY0=PCZY000, JSZT00=decode(QSZT00,'包床','退床','出院'), JSRQ00=TO_CHAR(VSYSDATE,'YYYYMMDD'), JSSJ00=TO_CHAR(VSYSDATE,'HH24:MI:SS'), ZZYS00=PCYYS00, JSHSZ0=PJSHSZ0 WHERE ZYID00=PZYID00 and JSZT00 IS NULL; IF SQL%NOTFOUND THEN--没有发现信息 Verrmsg:='出院病人流动信息异常,请联系管理员!'; Raise Ecustom; END IF; end if; IF PQXZYBZ='Y' THEN DELETE FROM BQ_BRLDXX WHERE ZYID00=PZYID00; DELETE FROM BQ_BRZDXX WHERE ZYID00=PZYID00; DELETE FROM BQ_BRTZXX WHERE ZYID00=PZYID00; END IF; --修改床位信息 UPDATE BM_CWK000 SET CWZT00='0',ZYID00=NULL,ZCH000=NULL WHERE ZYID00=PZYID00; --退还病人的押金 IF VCH0000 IS NOT NULL THEN UPDATE ZY_BRZHXX SET TYJE00=0 WHERE BRID00=Vbrid00 and JFLBID=Vjflbid and SFDJ00='0'; END IF; --改医嘱的附加费用为无效 UPDATE BQ_FJZXXM F SET TZRQ00=TO_CHAR(VSYSDATE,'YYYYMMDD'), TZSJ00=TO_CHAR(VSYSDATE,'HH24:MI:SS'), TZR000=PCZY000 WHERE EXISTS (SELECT 1 FROM BQ_YPYZ00 Z WHERE F.YZID00=Z.YZID00 and CSLY00 IN ('0','1')) and F.BQSFBZ='Y' and ZYID00=PZYID00; UPDATE BQ_FJZXXM F SET TZRQ00=TO_CHAR(VSYSDATE,'YYYYMMDD'), TZSJ00=TO_CHAR(VSYSDATE,'HH24:MI:SS'), TZR000=PCZY000 WHERE EXISTS (SELECT 1 FROM BQ_YJYZ00 Z WHERE F.YZID00=Z.YZMXID and CSLY00 ='2') and F.BQSFBZ='Y' and ZYID00=PZYID00; DELETE XT_DZGG00 WHERE ZYID00=PZYID00; --保留饮食医嘱 --DELETE BQ_YZZXJL Z WHERE ZYID00=PZYID00 -- and NOT EXISTS (SELECT 1 FROM BQ_YJYZ00 where YZMXID=Z.YZMXID and YZLB00=8); DELETE BQ_TQYCJL WHERE ZYID00=PZYID00; --修改住院病人信息表 SELECT YYQC00 INTO Vyyqc00 FROM XT_YYXX00 where rownum=1; IF Vyyqc00='福州肺科医院' THEN UPDATE ZY_BRXXB0 SET ZZYS00=PCYYS00, ZZYSXM=(select ZWXM00 from bm_ygbm00 where ygbh00=PCYYS00) WHERE ZYID00=PZYID00 and SUBSTR(BRZT00,1,1)='2'; END IF; --##增加参数控制不更新主治医生 for BQHS9.0-20210629-003 select count(1) into COUNTER from XT_XTCS00 where name00='BQ_CYBGXZZYS' and value0='Y'; if COUNTER<=0 then UPDATE ZY_BRXXB0 SET ZZYS00=PCYYS00, ZZYSXM=(select ZWXM00 from bm_ygbm00 where ygbh00=PCYYS00) WHERE ZYID00=PZYID00 and SUBSTR(BRZT00,1,1)='2'; end if; -- 2018.12.08 死亡医嘱和转归相互校验,转归为死亡的,必须下死亡医嘱 vXLXGMC:='好转'; if PZLXG00 is not null then begin select MC0000 into vXLXGMC from XT_ZLXG00 where DM0000=PZLXG00; exception when others then Verrmsg:='转归代码不正确,与治疗效果表XT_ZLXG00不符合,请联系工程师'; raise Ecustom; End; end If; if nvl(PQXZYBZ,'N')<>'Y' then select count(*) into COUNTER from BQ_YJYZ00 where ZYID00=PZYID00 and YZZT00='3' and (ZLXMJC like '%出院%' or ZLXMJC like '%死亡%' or ZLXMJC like '%转院%') and ZLXMJC not like '%取消%'; if COUNTER=0 then Verrmsg:='医生没有下出院医嘱,不能办理出院登记手续,请联系患者的主管医生!'; raise Ecustom; end if; select count(*) into COUNTER from BQ_YJYZ00 where ZYID00=PZYID00 and YZZT00 in ('1','2','3') and ZLXMJC like '%死亡%' and ZLXMJC not like '%取消%' and YEXM00 is null; if COUNTER>0 then--患者死亡 if PZLXG00 is null then vXLXGMC:='死亡'; elsif instrb(vXLXGMC,'死亡')=0 then Verrmsg:='发现医生下了死亡医嘱,转归与之不符,请重新填写或联系医生确认'; RAISE Ecustom; end if; end if; if instrb(vXLXGMC,'死亡')>0 and COUNTER=0 then Verrmsg:='没有发现医生下了死亡医嘱,转归与之不符,请重新填写或联系医生确认'; RAISE Ecustom; end if; end if; select nvl(max(trim(VALUE0)),'N') into VCYSFHLBJCYSJ from XT_XTCS00 where NAME00='BQ_CYSFHLBJCYSJ'; --在这边赋值,避免出现后面更新的出院时间小于医嘱的停止时间的情况 Vcysj00:=to_char(sysdate,'YYYYMMDDHH24:MI:SS'); if Vsfycy0='N' then UPDATE ZY_BRXXB0 SET BRZT00=DECODE(PQXZYBZ,'Y','1','3'), CYDJRQ=to_char(sysdate,'YYYYMMDD'), CYDJSJ=to_char(sysdate,'HH24:MI:SS'), SJCYRQ=decode(Pqxzybz,'Y','20991231',decode(SJCYRQ,'20991231',to_char(sysdate,'YYYYMMDD'),SJCYRQ)), -- CYDJRQ=decode(CYDJRQ,'20991231',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'YYYYMMDD'),CYDJRQ), -- CYDJSJ=decode(CYDJRQ,'20991231',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'HH24:MI:SS'),CYDJSJ), -- SJCYRQ=decode(SJCYRQ,'20991231',substrb(PCYRQSJ,1,8),SJCYRQ), SJCYSJ=decode(SJCYSJ,null,to_char(sysdate,'HH24:MI:SS'),SJCYSJ), CYCZRQ=to_char(sysdate,'YYYYMMDD'), RCYFH0=vXLXGMC, --HLJBID=NULL, SFYXJS= nvl(PSFYXJS,'1'), WPHDJ0=null WHERE ZYID00=PZYID00 and SUBSTR(BRZT00,1,1)='2'; else UPDATE ZY_BRXXB0 SET BRZT00=DECODE(PQXZYBZ,'Y','1','3'), CYDJRQ=to_char(sysdate,'YYYYMMDD'), CYDJSJ=to_char(sysdate,'HH24:MI:SS'), -- SJCYRQ=decode(Pqxzybz,'Y','20991231',decode(SJCYRQ,'20991231',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'YYYYMMDD'),SJCYRQ)), -- SJCYRQ=decode(Pqxzybz,'Y','20991231',decode(SJCYRQ,'20991231',to_char(sysdate,'YYYYMMDD'),SJCYRQ)), -- CYDJRQ=decode(CYDJRQ,'20991231',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'YYYYMMDD'),CYDJRQ), -- CYDJSJ=decode(CYDJRQ,'20991231',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'HH24:MI:SS'),CYDJSJ), -- SJCYRQ=decode(SJCYRQ,'20991231',substrb(PCYRQSJ,1,8),SJCYRQ), -- SJCYSJ=decode(SJCYSJ,null,to_char(sysdate,'HH24:MI:SS'),SJCYSJ), -- SJCYSJ=decode(SJCYSJ,null,TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'HH24:MI:SS'),SJCYSJ), SJCYRQ=decode(Pqxzybz,'Y','20991231',decode(VCYSFHLBJCYSJ,'Y',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'YYYYMMDD'), decode(SJCYRQ,'20991231',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'YYYYMMDD'),SJCYRQ))), SJCYSJ=decode(VCYSFHLBJCYSJ,'Y',TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'HH24:MI:SS'),decode(SJCYSJ,null,TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'HH24:MI:SS'),SJCYSJ)), CYCZRQ=to_char(sysdate,'YYYYMMDD'), RCYFH0=vXLXGMC, --HLJBID=NULL, SFYXJS= nvl(PSFYXJS,'1'), WPHDJ0=null WHERE ZYID00=PZYID00 and SUBSTR(BRZT00,1,1)='2'; end if; --取消入科是否清空cydjrq,cydjsj select count(*) into COUNTER from XT_XTCS00 where NAME00='BQ_QXRKSFQKCYDJRQSJ' and VALUE0='Y'; if COUNTER>0 then if PQXZYBZ='Y' then update ZY_BRXXB0 set CYDJRQ=null,CYDJSJ=null where ZYID00=PZYID00 and BRZT00='1'; end if; end if; --如果病人本次住院有生育 SELECT COUNT(*) INTO Visjs00 FROM BQ_JSXX00 WHERE ZYID00=PZYID00; if Visjs00>0 then if Vsfycy0='N' then update BQ_JSXX00 set YECYRQ=nvl(YECYRQ,to_char(sysdate,'YYYYMMDD')),YECYSJ=nvl(YECYSJ,to_char(sysdate,'HH24:MI:SS')) where ZYID00=PZYID00; else update BQ_JSXX00 set YECYRQ=nvl(YECYRQ,TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'YYYYMMDD')),YECYSJ=nvl(YECYSJ,TO_CHAR(TO_DATE(PCYRQSJ,'YYYYMMDDHH24:MI:SS'),'HH24:MI:SS')) where ZYID00=PZYID00; end if; --如果病人本次住院有生育,生育险病人出院登记时,发送SYFMRQ(生育分娩日期) update ZY_BRXXB0 a set a.SYFMRQ = (select min(b.YECSRQ) from BQ_JSXX00 b where a.ZYID00=b.ZYID00 ) where ZYID00=PZYID00 and exists (select 1 from BQ_JSXX00 c where a.ZYID00=c.ZYID00); -- 三明市宁化县医院 设置通过出院登记选择的分娩病情编码 /*select count(*) into COUNTER from XT_XTCS00 where NAME00='BQ_SFSZFMBQBH' and VALUE0='Y'; if COUNTER>0 and PFMBQBH is not null then update ZY_BRXXB0 a set a.FMBQBH = PFMBQBH where a.ZYID00 = PZYID00 and exists (select 1 from BQ_JSXX00 c where a.ZYID00=c.ZYID00); end if;*/ end if; select count(*) into COUNTER from XT_XTCS00 where NAME00='BQ_SFSZFMBQBH' and VALUE0='Y'; if COUNTER>0 and PFMBQBH is not null then update ZY_BRXXB0 a set a.FMBQBH = PFMBQBH where a.ZYID00 = PZYID00 and exists (select 1 from BQ_JSXX00 c where a.ZYID00=c.ZYID00) or a.sysslb is not null;--xgh dxb修改 end if; IF SQL%NOTFOUND THEN Verrmsg:='病人信息错误,请刷新后重试'; RAISE Ecustom; END IF; --UPDATE ZY_BRXXB0 SET RCYFH0='好转' WHERE ZYID00=PZYID00 and RCYFH0 IS NULL; --DELETE BQ_YZCFMX where YZID00 in (select YZID00 from BQ_YPYZ00 where ZYID00=PZYID00) and YZLB00='0' and ZXRQ00<>to_char(sysdate,'YYYYMMDD'); --DELETE BQ_YZCFMX where YZID00 in (select YZMXID from BQ_YJYZ00 where ZYID00=PZYID00) and YZLB00='1' and ZXRQ00<>to_char(sysdate,'YYYYMMDD'); if VSFSRMMS='M' then --判断是否存在停止日期时间大于出院登记日期时间的医嘱,存在就把tzrq00,tzsj00修改成和出院登记日期时间一致 select count(1) into COUNTER from BQ_YPYZ00 where YZZT00='3' and nvl(TZRQ00||TZSJ00,Vcysj00)>Vcysj00 and ZYID00=PZYID00; if COUNTER>0 then update BQ_YPYZ00 set TZRQ00=to_char(sysdate,'YYYYMMDD'),TZSJ00=substr(Vcysj00,9) where YZZT00='3' and nvl(TZRQ00||TZSJ00,Vcysj00)>Vcysj00 and ZYID00=PZYID00; end if; end if; --写入tzshr0,防止tzshr0为空,导致医嘱打印出来的护士签名为空 select count(1) into COUNTER from BQ_YPYZ00 where YZZT00 in ('3','4','6') and TZSHR0 is null and ZYID00=PZYID00; if COUNTER>0 then update BQ_YPYZ00 set TZSHR0=PCZY000 where YZZT00 in ('3','4','6') and TZSHR0 is null and ZYID00=PZYID00; end if; select count(1) into COUNTER from BQ_YJYZ00 where YZZT00 in ('3','4','6') and TZSHR0 is null and ZYID00=PZYID00; if COUNTER>0 then update BQ_YJYZ00 set TZSHR0=PCZY000 where YZZT00 in ('3','4','6') and TZSHR0 is null and ZYID00=PZYID00; end if; ------------------------------------------------------------------------------------------------------------ --##福清市医院出院登记信息写入到中间表统一推送到易惠 select count(1) into COUNTER from XT_XTCS00 where NAME00='BQ_CYDJSFTSYH' and VALUE0='Y'; if COUNTER>0 and nvl(PQXZYBZ,'N')<>'Y' then insert into ZY_DFSTZD(ID0000,ZYSQID,FSBZ00,CZBZ00,BRID00,ZXDJBZ,SQYS00,SQKS00,SQRQ00,SQSJ00,KSH000,BQH000,ZYYS00) values(SQ_ZY_DFSTZD_ID0000.nextval,PZYID00,'0','0',VBRID00,'4',PCYYS00,VODQKS0,to_char(Vsysdate,'yyyyMMdd'),to_char(Vsysdate,'hh24:mi:ss'),VODQKS0,PBQH000,PCYYS00); end if; --结束患者无陪护状态 update BQ_WPHJL0 set JSRQ00=to_char(VSYSDATE,'YYYYMMDD') ,JSSJ00=to_char(VSYSDATE,'HH24:MI:SS') where JSRQ00 is null and ZYID00=PZYID00; COMMIT; EXCEPTION when Ecustom then raise_application_error(-20010,substrb(Verrmsg||'!*'||Vparams,1,220)); when no_data_found then raise_application_error(-20001,substrb('数据没有找到!*'||Verrmsg||Vparams,1,220)); when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*'||Vparams,1,220)); END;