CREATE OR REPLACE PROCEDURE SP_BQ_SZBR_ZYHS ( PZYH000 IN CHAR , --住院号 PCH0000 IN CHAR , --床号 PZZYS00 IN NUMBER , --主治医生 PZRYS00 IN NUMBER , --主任医生 PSXYS00 IN NUMBER , --实习医生 PCZY000 IN NUMBER , --收治操作护士 PHLJBID IN NUMBER , --护理级别ID PBQH000 IN NUMBER , --收治病区 PSZKS00 IN NUMBER , --所在科室 PRYZD00 In CHAR , --入院诊断 PYSZID0 IN NUMBER DEFAULT null, --医生组ID PSFJC00 IN CHAR , --是否借床 PRYRQ00 IN DATE DEFAULT SYSDATE, --日期 PZDBZ00 in CHAR default '', --诊断备注 PRYSQK0 in varchar2 default '-1', --入院情况 PLSZYBZ in varchar2 default '0', --临时入院标志 PCYZHLB in varchar2 default '0', --出院召回类别:0当日召回,1退费,2继续住院 PBRSZXT in varchar2 default '0', PBRLB00 in varchar2 default null --病人类别 ) AS -- MODIFICATION HISTORY -- Person Date Comments --huangzw 2020.09.28 Create for BQ(SE)-20200924-006 --fuyc 2020.11.09 BQ_JZXM00,BQ_YJYZ00写入yszid0 BQ(SE)-20201030-001 counter NUMBER(3); VCZYXM0 BM_YGBM00.ZWXM00%TYPE; Vzyid00 ZY_BRXXB0.ZYID00%TYPE; Vbrid00 ZY_BRXXB0.BRID00%TYPE;--病人ID Vrylb00 ZY_BRXXB0.RYLB00%TYPE;--入院类别 Vjflbid BM_BRJFLB.JFLBID%TYPE;--住院帐户类别ID Vksh000 BM_BMBM00.BMBH00%TYPE;--病人所在科室 Vpcid00 BM_PC0000.PCID00%TYPE;--每天一次的频次ID Vpcmc00 BM_PC0000.PCMC00%TYPE;--每天一次的频次名称 Vbrlb00 CHAR(4); --病人状态类别,新入,转出,转入,出院等 Vfbbh00 BM_BRFBB0.FBBH00%TYPE; --病人的费别编号 V_YBBRSFKCZ XT_XTCS00.VALUE0%TYPE; --是否咳产生费用项目 V_MZZD00 YS_BRZYSQ.ZDMC00%type; --门诊诊断 E_BRZTYJGB EXCEPTION ; --病人状态已经改变 E_MYQD EXCEPTION ; --没有每天一次的频次 E_BCZZSY EXCEPTION ; --病床正在使用中 E_BRMYZH EXCEPTION ; --病人可能没有帐户 E_BRYJBZ EXCEPTION ; --病人押金不足 E_ZHLBCSCW EXCEPTION ; --帐户类别参数错误 E_FBBQCW EXCEPTION ;--非本病区床位 Ecustom exception ;--错误变量 VError varchar2(100); VPARAMS VARCHAR2(255); VSYSDATE DATE; vICD900 XT_ICD900.ICD900%Type;--入院诊断信息 Vyrybq0 ZY_BRXXB0.RYBQ00%Type;--原入院病区 Vyrzks0 ZY_BRXXB0.RZKS00%Type;--原入院科室 v_jcbz00 bq_brldxx.jcbz00%type;--借床标志 VXRSZYS varchar2(10); --是否写入收治医生 VcounterX number(5); VRYSQK0 ZY_BRXXB0.RYSQK0%type; --入院情况 VBRSZRQRYRQXYZ varchar2(10); VRYRQ00 ZY_BRXXB0.RYRQ00%type; E_SZRQRYRQ EXCEPTION ; --收治日期入院日期 BQ_BQSZSFKTZRYRQ VARCHAR2(10); BQ_SFZCYBZYZPD VARCHAR2(10); --是否做出院标志医嘱判断 V_ZXJG00 varchar2(200); V_ZXBZ00 number; BQ_SZBRJLBA varchar2(10); VCH0000 ZY_BRXXB0.RYCWH0%type; V_SJCYRQ ZY_BRXXB0.SJCYRQ%type; VQSZT00 BQ_BRLDXX.QSZT00%type; BQ_BQJCBRSZHMRJCZT XT_XTCS00.VALUE0%TYPE; --病区收治借床病人后是否默认为借床状态 Cursor C_YZMXID is select YZMXID from BQ_YJYZ00 where ZYID00=Vzyid00 and yzzt00='0'; --2007-06-18 qks 漳州市漳浦县中医院:病人转病区收治时,[收治默认项目维护]中的零星收费项目不自动带出! --2007-08-10 qks 取消南平邵武人民医院,碰到住院诊查费,日期往后一天 BEGIN --2008.10.16 sechen 借床参数 Vyrybq0 := NULL; Vyrzks0 := NULL; VRYSQK0 := null; VSYSDATE:=SYSDATE; --本过程暂时未考虑预约病人的情况1.18 --取住院帐户类别ID VPARAMS:='SP_BQ_SZBR('||PZYH000||','||PCH0000||','||TO_CHAR(PZZYS00)||','||TO_CHAR(PZRYS00) ||','||TO_CHAR(PSXYS00)||','||TO_CHAR(PCZY000)||','||TO_CHAR(PHLJBID)||','||TO_CHAR(PBQH000)||')'; SELECT COUNT(*) INTO COUNTER FROM BM_BRJFLB WHERE SYBZ00='1' AND SFYX00='Y'; IF COUNTER<>1 THEN RAISE E_ZHLBCSCW;--帐户类别参数错误 RETURN; ELSE SELECT JFLBID INTO VJFLBID FROM BM_BRJFLB WHERE SYBZ00='1' AND SFYX00='Y'; END IF; SELECT COUNT(*) INTO COUNTER FROM BM_CWK000 WHERE CH0000=PCH0000 AND BQH000<>PBQH000; IF COUNTER>0 THEN RAISE E_FBBQCW;--非本病区床位 END IF; select nvl(max(trim(value0)),'N') into BQ_SFZCYBZYZPD from XT_XTCS00 where name00='BQ_SFZCYBZYZPD' and Value0='Y'; select nvl(max(trim(value0)),'N') into VBRSZRQRYRQXYZ from XT_XTCS00 where name00='BQ_BRSZRQRYRQXYZ' and Value0='Y'; select nvl(max(trim(value0)),'N') into BQ_BQSZSFKTZRYRQ from XT_XTCS00 where name00='BQ_BQSZSFKTZRYRQ' and Value0='Y'; select nvl(max(trim(value0)),'N') into BQ_BQJCBRSZHMRJCZT from XT_XTCS00 where name00='BQ_BQJCBRSZHMRJCZT' and Value0='Y'; --获取病人的住院ID,病人ID,费别(医保等) SELECT MAX(ZYID00) INTO Vzyid00 FROM ZY_BRXXB0 WHERE ZYH000=PZYH000; SELECT BRID00,RYLB00,RYCWH0 INTO Vbrid00,Vrylb00,VCH0000 FROM ZY_BRXXB0 WHERE ZYID00=Vzyid00; SELECT FBBH00 INTO Vfbbh00 FROM BM_BRXXB0 WHERE BRID00=Vbrid00; SELECT ZWXM00 INTO VCZYXM0 FROM BM_YGBM00 WHERE YGBH00=PCZY000; --2008.10.16 sechen 借床 借床获取入院时原先的病区和科室 IF PSFJC00='Y' then SELECT RYBQ00,RZKS00 INTO Vyrybq0,Vyrzks0 FROM ZY_BRXXB0 WHERE ZYID00 = Vzyid00; END IF; --2013.08.06 daihq 增加获取入院情况 if nvl(trim(PRYSQK0),'-1') = '-1' then select nvl(RYSQK0,'') into VRYSQK0 from ZY_BRXXB0 where ZYID00=Vzyid00; else VRYSQK0 := PRYSQK0; end if; --判定病人是否有帐户 SELECT COUNT(*) INTO counter FROM ZY_BRZHXX WHERE BRID00=Vbrid00 AND JFLBID=Vjflbid AND SFDJ00='0'; IF counter=0 THEN RAISE E_BRMYZH;--病人可能没有帐户 RETURN; END IF; --查找病人状态是否改变 if PSFJC00='N' then SELECT COUNT(*) INTO counter FROM VW_BQ_DDSZBR WHERE ZYH000=PZYH000 AND BQH000=PBQH000; else SELECT COUNT(*) INTO counter FROM VW_BQ_DDSZBR WHERE ZYH000=PZYH000 AND (( brlb00='新入病人' and BQH000<>PBQH000) or (brlb00='转入病人' and zkjcbz='Y' and BQH000=PBQH000)); end if; --2008.10.16 sechen 借床 加 and PSFJC00='N' 借床状态改变允许通过 IF counter=0 THEN RAISE E_BRZTYJGB;--病人状态已经改变 RETURN; ELSE --2008.10.16 sechen 病人借床待添加(借床病人,把'新入'换'借床') IF PSFJC00='Y' then SELECT SUBSTRB(BRLB00,1,4),KSH000 INTO Vbrlb00, Vksh000 FROM VW_BQ_DDSZBR WHERE ZYH000=PZYH000 AND (( brlb00='新入病人' and BQH000<>PBQH000) or (brlb00='转入病人' and zkjcbz='Y' and BQH000=PBQH000)); v_jcbz00 := '1'; ElSE SELECT SUBSTRB(BRLB00,1,4),KSH000 INTO Vbrlb00, Vksh000 FROM VW_BQ_DDSZBR WHERE ZYH000=PZYH000 AND BQH000=PBQH000 AND BRLB00=PBRLB00; --UPDATE VIEW v_jcbz00 := null; END IF; END IF; if instr(Vbrlb00,'新入')>0 and VBRSZRQRYRQXYZ='Y' then select RYRQ00 into VRYRQ00 from ZY_BRXXB0 where ZYID00=Vzyid00; if VRYRQ00<>to_char(PRYRQ00,'YYYYMMDD') then raise E_SZRQRYRQ; end if; end if; --检查床位是否在使用 SELECT COUNT(*) INTO counter FROM BM_CWK000 WHERE CWZT00='0' AND trim(CH0000)=trim(PCH0000); IF counter=0 THEN RAISE E_BCZZSY; --病床正在使用中 RETURN; END IF; --如果医保病人,且ybbrsfkcz='1'不产生费用项目 BEGIN SELECT VALUE0 INTO V_YBBRSFKCZ FROM XT_XTCS00 WHERE NAME00='BQ_YBBRSFKCZ'; EXCEPTION WHEN OTHERS THEN V_YBBRSFKCZ:='0'; END; --是否写入收治医生 BEGIN SELECT trim(VALUE0) INTO VXRSZYS FROM XT_XTCS00 WHERE NAME00='BQ_SFJZZYSXRSZYS'; EXCEPTION WHEN OTHERS THEN VXRSZYS:='N'; END; if Vrylb00='生育' then V_YBBRSFKCZ:='0'; end if; if Vbrlb00='新入' and BQ_BQSZSFKTZRYRQ='Y' then VSYSDATE:=PRYRQ00; end if; if BQ_SFZCYBZYZPD='Y' then select count(*) into counter from ZY_BRXXB0 where ZYID00=Vzyid00 and BRZT00='1' and nvl(SJCYRQ,'20991231')0 then Verror:='此病人病区做了"取消住院",请到收费处做"取消入院操作",重新办手续!'; raise Ecustom; end if; end if; --begin--出院登记病人重新又收治回去,停用金额从函数SF_ZY_ZHYXQF(ZYID00,BRID00,'0')中获取 by BQ-20180531-001 begin select COUNT(*) into COUNTER from ZY_BRXXB0 where substr(BRZT00,1,1)='3' and ZYH000=PZYH000; exception when OTHERS then COUNTER:=0; end; if COUNTER=1 then update ZY_BRZHXX set TYJE00=-1*SF_ZY_ZHYXQF(Vzyid00,Vbrid00,'0') where BRID00=Vbrid00; end if; ---end---by BQ-20180531-001 ---end---by BQ(SE)-20201030-001 UPDATE ZY_BRXXB0 SET YSZID0=PYSZID0 WHERE ZYID00=Vzyid00; IF NOT(V_YBBRSFKCZ='1' AND Vfbbh00=3) THEN --PCZRQ00-->VSYSDATE 如果客户端时间错误了,导致BQ_JZXM00.QSRQ00错误 --产生床位收费项目 SELECT COUNT(*) INTO counter FROM VW_BQ_CWJM00 WHERE CWDJ00=(SELECT CWDJ00 FROM BM_CWK000 WHERE CH0000=PCH0000); IF counter>0 THEN INSERT INTO BQ_JZXM00(ID0000,ZYH000,ZYID00,CLBZ00,XMLB00,JFLBID,SFXMID,CS0000,XMMC00, DW0000,SFJE00,LRRXM0,QSRQ00,FBBH00,CH0000,JJSFBZ,LYBZ00,YSZID0) SELECT SQ_BQ_JZXM00_ID0000.NEXTVAL,PZYH000,Vzyid00, 0, '1',Vjflbid,C.SFXMID,SFCS00,S.XMMC00, S.DW0000,NVL(S.SFJE00,0),VCZYXM0,TO_CHAR(VSYSDATE,'YYYYMMDD'),Vfbbh00,PCH0000,JJSFBZ,'1',PYSZID0 FROM VW_BQ_CWJM00 C,BM_YYSFXM S WHERE C.SFXMID=S.SFXMID AND C.CWDJ00=(SELECT CWDJ00 FROM BM_CWK000 WHERE CH0000=PCH0000); END IF; --修改病人押金 UPDATE ZY_BRZHXX SET TYJE00=(SELECT TYJE00+NVL(CWYJ00,0) FROM BM_CWK000 WHERE CH0000=PCH0000) WHERE BRID00=Vbrid00 AND JFLBID=Vjflbid AND SFDJ00='0'; IF SQL%NOTFOUND THEN RAISE E_BRMYZH;--病人可能没有帐户 RETURN; END IF; --判定病人的帐户金额是否足够 --COUNTER:=SF_BQ_YKYEPD(NULL,VBRID00); --IF counter<>1 THEN -- RAISE E_BRYJBZ;--病人押金不足 -- RETURN; --END IF; --依据BQ_ZDCSXM自动(产生)诊疗项目规则表,添加自动产生的收费项目 SELECT COUNT(*) INTO counter FROM BQ_ZDCSXM WHERE BQH000=PBQH000 AND XMLB00=0; IF counter<>0 THEN IF Vbrlb00='转入' or Vbrlb00='转出' THEN SELECT COUNT(*) INTO counter FROM xt_yyxx00 where YYID00 in ('226521','229387'); --226521漳浦县中医院,229387漳平市医院 ELSE counter:=0; END IF; IF counter=1 THEN INSERT INTO BQ_JZXM00 (ID0000, ZYH000, ZYID00,CLBZ00,XMLB00,JFLBID ,SFXMID,CS0000,XMMC00, DW0000,SFJE00,LRRXM0,QSRQ00,FBBH00,LYBZ00,YSZID0) SELECT SQ_BQ_JZXM00_ID0000.NEXTVAL,PZYH000,Vzyid00,CLBZ00, 0,Vjflbid,D.XMID00, 1,S.XMMC00, S.DW0000,NVL(S.SFJE00,0),VCZYXM0,TO_CHAR(VSYSDATE,'YYYYMMDD'),Vfbbh00,'1',PYSZID0 FROM BQ_ZDCSXM D,BM_YYSFXM S WHERE D.XMLB00=0 AND BQH000=PBQH000 AND D.XMID00=S.SFXMID AND D.CLBZ00=0; ELSE INSERT INTO BQ_JZXM00 (ID0000, ZYH000, ZYID00,CLBZ00,XMLB00,JFLBID ,SFXMID,CS0000,XMMC00, DW0000,SFJE00,LRRXM0,QSRQ00,FBBH00,LYBZ00,YSZID0) SELECT SQ_BQ_JZXM00_ID0000.NEXTVAL,PZYH000,Vzyid00,CLBZ00, 0,Vjflbid,D.XMID00, 1,S.XMMC00, S.DW0000,NVL(S.SFJE00,0),VCZYXM0,TO_CHAR(VSYSDATE,'YYYYMMDD'),Vfbbh00,'1',PYSZID0 FROM BQ_ZDCSXM D,BM_YYSFXM S WHERE D.XMLB00=0 AND BQH000=PBQH000 AND D.XMID00=S.SFXMID; --UPDATE BQ_JZXM00 J,BM_BRBXBL X SET GFJE00=SFJE00*GFBL00,JZJE00=SFJE00*JZBL00,ZFJE00=SFJE00*(1-GFBL00-JZBL00) --WHERE J.FBBH00=X.FBBH00 AND J.SFXMID=X.SFXMID AND J.ZYID00=Vzyid00 --南平邵武人民医院,碰到住院诊查费,日期往后一天 --update BQ_JZXM00 a set QSRQ00=TO_CHAR(TO_DATE(QSRQ00,'YYYYMMDD')+1,'YYYYMMDD') where EXISTS (select 1 from xt_yyxx00 where YYQC00='邵武市人民医院') -- and zyid00=Vzyid00 and EXISTS (select 1 from bm_yysfxm where bmgzid=1 and zyfpid=6 and SFXMID=a.SFXMID); END IF; END IF; --计算报销比例 SFJE00* -->改由触发器TR_BQ_JZXM00_BINS_UPD计算1.31 END IF; --添加病人流动信息 --TO_CHAR(VSYSDATE,'HH24:MI:SS')-->TO_CHAR(PRYRQ00,'HH24:MI:SS') for BQ-20141010-001 if PLSZYBZ='1' and Vbrlb00='新入' then Vbrlb00:='临时'; end if; if PLSZYBZ='0' and Vbrlb00='临时' then Vbrlb00:='新入'; update BQ_BRLDXX set JSZT00='临时',JSRQ00=TO_CHAR(VSYSDATE,'YYYYMMDD'),JSSJ00=TO_CHAR(VSYSDATE,'HH24:MI:SS') where ZYID00=Vzyid00 and QSZT00='临时' and JSZT00 is null; UPDATE BM_CWK000 SET CWZT00='0', ZYID00=NULL, ZCH000=NULL WHERE CH0000=VCH0000 and ZYID00=Vzyid00; end if; INSERT INTO BQ_BRLDXX (ZYID00,CH0000,BQH000,KSH000,QSZT00,QSCZY0,QSZZYS,QSZRYS,QSRQ00,QSSJ00,ZYYS00,YSZID0,JCBZ00,YBQH00,YKSH00,CYZHLB) VALUES (Vzyid00,PCH0000,PBQH000,PSZKS00,DECODE(trim(Vbrlb00),'转出','转入','出院','入院',Vbrlb00), PCZY000,PZZYS00,PZRYS00,TO_CHAR(VSYSDATE,'YYYYMMDD'),TO_CHAR(VSYSDATE,'HH24:MI:SS'),PSXYS00,PYSZID0,v_jcbz00,Vyrybq0,Vyrzks0,DECODE(trim(Vbrlb00),'出院',PCYZHLB,null)); --QSRQ00不能用PRYRQ00,如果病人晚上59分快0点收治的,日期和时间点会不对(日期是头一天的,时间是第二天的,变成时间小于上一条的开始日期) VQSZT00:=' '; if Vbrlb00='转入' or Vbrlb00='转出' then if Vbrlb00='转出' then--如果是本区转出又马上收回的,变更状态为"换出"和"换入",以免影响转入出人数统计 select count(*) into counter from BQ_BRLDXX where ZYID00=Vzyid00 and JSZT00='转出' and BQH000=PBQH000 and JSRQ00||JSSJ00=(SELECT max(jsrq00||jssj00) from BQ_BRLDXX where ZYID00=Vzyid00 and JSZT00='转出'); if counter>0 then update BQ_BRLDXX set QSZT00='换入' where ZYID00=Vzyid00 and CH0000=PCH0000 and BQH000=PBQH000 and QSZT00='转入' AND JSZT00 IS NULL; VQSZT00:='换入'; end if; end if; Update BQ_BRLDXX set JSRQ00=TO_CHAR(VSYSDATE,'YYYYMMDD'),JSSJ00=TO_CHAR(VSYSDATE,'HH24:MI:SS'), JSZT00=decode(QSZT00,'包床','退床',decode(BQH000,PBQH000,'换出','转出')) ,KSJSRQ=decode(KSH000,PSZKS00,'20991231',TO_CHAR(VSYSDATE,'YYYYMMDD')) ,JCBZ00=decode(PSFJC00,'Y','2','') where ZYID00=Vzyid00 and JSZT00='转出' and JSRQ00||JSSJ00=(SELECT max(jsrq00||jssj00) FROM BQ_BRLDXX where ZYID00=Vzyid00 and JSZT00='转出'); --zhr 2005.01.23 --elsif Vbrlb00='新入' then -- Update BQ_BRLDXX set (QSRQ00,QSSJ00)=(select RYRQ00,RYSJ00 from ZY_BRXXB0 where ZYID00=Vzyid00) -- where ZYID00=Vzyid00 and QSZT00='新入' and JSRQ00 is null; end if; if Vbrlb00='出院' and PCYZHLB='2' then --继续住 begin select nvl((select JSRQ00 from BQ_BRLDXX where ZYID00=Vzyid00 and JSZT00='出院' and YXBZ00='1' and rownum=1),SJCYRQ) into V_SJCYRQ from ZY_BRXXB0 where ZYID00=Vzyid00; if V_SJCYRQ<=to_char(sysdate-3,'YYYYMMDD') then Verror:='此病人出院已经超过3天,不能做继续住院的处理!'; raise Ecustom; end if; if V_SJCYRQ<>'20991231' then delete ZH_TJZB00 where TJRQ00>=V_SJCYRQ; --删除掉重新整理 delete from ZY_ZYBRMX where ZYRQ00>=V_SJCYRQ; delete from ZH_ZYRBB0 where ZYRQ00>=V_SJCYRQ; execute immediate 'begin delete ZH_BRLDTJ where ZYRQ00>='''||V_SJCYRQ||'''; end; '; update ZY_BRXXB0 set SJCYRQ='20991231',SJCYSJ=null where ZYID00=Vzyid00; update BQ_BRLDXX set YXBZ00='2',JSZT00=decode(JSZT00,'出院','请假',JSZT00) where ZYID00=Vzyid00 and YXBZ00='1'; --YXBZ00='2', end if; exception when others then V_SJCYRQ:=''; end; end if; if VQSZT00=' ' then select DECODE(trim(Vbrlb00),'转出','转入','出院','入院',Vbrlb00) into VQSZT00 from dual; end if; if VQSZT00 in('新入','转入','入院') then SP_BQ_BRLDXXCL(Vzyid00,PBQH000,PSZKS00,nvl(PCYZHLB,'0'),VQSZT00,'','0',PSFJC00); end if; if PSFJC00='Y' and BQ_BQJCBRSZHMRJCZT='Y' then update BQ_BRLDXX set JCBZ00='1' where ZYID00=Vzyid00 and CH0000=PCH0000 and BQH000=PBQH000 and KSH000=PSZKS00 and ZYYS00=PSXYS00; end if; --修改床位信息 UPDATE BM_CWK000 SET CWZT00='1',ZYID00=Vzyid00 WHERE CH0000=PCH0000; --判断是否病区取消入院,收费处未取消的 --修改病人信息表 --判断是否取消住院病人重新收治 for BQ-20150826-001 --出院重新收治省二都不清,由电子病历控制 for BQ-20150826-001 select count(*) into counter from ZY_BRXXB0 where ZYID00=Vzyid00 and BRZT00='1' and SJCYRQ is not null and SJCYRQ=to_char(sysdate,'YYYYMMDD'); UPDATE ZY_BRXXB0 SET DQBQ00=PBQH000, DQKS00=PSZKS00, ZZYS00=PZZYS00, ZRYS00=PZRYS00, SXYS00=PSXYS00, RYCWH0=PCH0000, CYDJRQ=null,--重复收治的病人,出院登记日期不能2004.09.16以第一次的为准 CYDJSJ=NULL, --SJCYRQ=decode(BQ_SFZCYBZYZPD,'Y',decode(SJCYRQ,to_char(sysdate,'YYYYMMDD'),'20991231',SJCYRQ),decode(SJCYRQ,to_char(sysdate,'YYYYMMDD'),'20991231',SJCYRQ)), --SJCYSJ=decode(BQ_SFZCYBZYZPD,'Y',decode(SJCYRQ,to_char(sysdate,'YYYYMMDD'),null,SJCYSJ),NULL), SJCYRQ=decode(BQ_SFZCYBZYZPD,'Y',decode(counter,1,'20991231',SJCYRQ),decode(SJCYRQ,to_char(sysdate,'YYYYMMDD'),'20991231',SJCYRQ)), SJCYSJ=decode(BQ_SFZCYBZYZPD,'Y',decode(counter,1,null,SJCYSJ),decode(SJCYRQ,to_char(sysdate,'YYYYMMDD'),NULL,SJCYSJ)), ZZYSXM=(SELECT ZWXM00 FROM BM_YGBM00 WHERE YGBH00=PZZYS00), ZRYSXM=(SELECT ZWXM00 FROM BM_YGBM00 WHERE YGBH00=PZRYS00), SXYSXM=(SELECT ZWXM00 FROM BM_YGBM00 WHERE YGBH00=PSXYS00), BRZT00='20', --2010.01.05 zhr SJRYRQ=decode(Vbrlb00,'新入',to_char(VSYSDATE,'YYYYMMDD'),'临时',to_char(VSYSDATE,'YYYYMMDD'),SJRYRQ), SJRYSJ=decode(Vbrlb00,'新入',to_char(VSYSDATE,'HH24:MI:SS'),'临时',to_char(VSYSDATE,'HH24:MI:SS'),SJRYSJ), --2008.10.16 sechen YBQH00=Vyrybq0, --原病区值,有借床的有值,否则为空值 YKSH00=Vyrzks0, --原科室值,有借床的有值,否则为空值 SZYS00=decode(VXRSZYS,'Y',PZZYS00,SZYS00), RYSQK0=VRYSQK0, LSZYBZ=PLSZYBZ, BRSZXT=PBRSZXT WHERE ZYID00=Vzyid00; --2008.10.16 sechen 借床修改入院病区和科室为当前的病区和科室 --2016.09.21 dsm for BQ-20160920-002 不要改入院病区,入院科室 --IF PSFJC00='Y' then -- UPDATE ZY_BRXXB0 SET RYBQ00 = PBQH000, RZKS00 = PSZKS00 -- WHERE ZYID00= Vzyid00; --END IF; IF SQL%NOTFOUND THEN RAISE NO_DATA_FOUND; END IF; IF NOT(V_YBBRSFKCZ='1' AND Vfbbh00=3) THEN --依据BQ_ZDCSXM自动(产生)诊疗项目规则表,添加自动产生的诊疗项目 SELECT COUNT(*) INTO counter FROM BQ_ZDCSXM WHERE BQH000=PBQH000 AND XMLB00=1; IF counter<>0 THEN SELECT COUNT(*) INTO counter FROM BM_PC0000 WHERE TRIM(ZQDW00)='天' AND ZQCD00=1 AND ZQCS00=1 AND ROWNUM=1; IF counter=1 THEN SELECT PCID00, PCMC00 INTO Vpcid00, Vpcmc00 FROM BM_PC0000 WHERE TRIM(ZQDW00)='天' AND ZQCD00=1 AND ROWNUM=1; ELSE RAISE E_MYQD;--没有每天一次的频次 RETURN; END IF; INSERT INTO BQ_YJYZ00 ( YZMXID, ZYID00, YZLB00, CLBZ00, ZLXMID, ZLXMJC, ZXKS00, LRRQ00, LRSJ00, LRRXM0, QYRQ00, QYSJ00, TS0000, BQH000, KSH000, PCID00, PCMC00, YZZT00, TQFS00, YZCLLB, KZYS00, PXSJ00, YSZID0) SELECT SQ_BQ_YZMX00_YZMXID.NEXTVAL, Vzyid00, Z.LBBH00, D.CLBZ00, D.XMID00, Z.ZLXMJC, PSZKS00, TO_CHAR(VSYSDATE,'YYYYMMDD'), TO_CHAR(VSYSDATE,'HH24:MI:SS'), VCZYXM0, TO_CHAR(VSYSDATE,'YYYYMMDD'), TO_CHAR(VSYSDATE,'HH24:MI:SS'), DECODE(D.CLBZ00,'0',NULL,'1',1), PBQH000, PSZKS00, 0, NULL,--Vpcid00 ,Vpcmc00, '0', '0', '正常', PSXYS00, TO_CHAR(VSYSDATE,'HH24:MI:SS'),PYSZID0 FROM BQ_ZDCSXM D, BM_ZLZD00 Z WHERE D.XMLB00=1 AND BQH000 = PBQH000 AND D.XMID00 = Z.ZLXMID; END IF; IF (PHLJBID IS NOT NULL) AND (PHLJBID>0 ) THEN --作为医技项目插入到医技项目表中 UPDATE ZY_BRXXB0 SET HLJBID=PHLJBID WHERE ZYID00=VZYID00; INSERT INTO BQ_YJYZ00 ( YZMXID, ZYID00, YZLB00, CLBZ00, ZLXMID, ZLXMJC, ZXKS00, LRRQ00, LRSJ00, LRRXM0, QYRQ00, QYSJ00, TS0000, BQH000, KSH000, PCID00, PCMC00, YZZT00, TQFS00, YZCLLB, KZYS00, PXSJ00, YSZID0) SELECT SQ_BQ_YZMX00_YZMXID.NEXTVAL, Vzyid00, 1, 0, PHLJBID, Z.ZLXMJC, PSZKS00, TO_CHAR(VSYSDATE, 'YYYYMMDD'), TO_CHAR(VSYSDATE,'HH24:MI:SS'), VCZYXM0, TO_CHAR(VSYSDATE, 'YYYYMMDD'), TO_CHAR(VSYSDATE,'HH24:MI:SS'), NULL, PBQH000, PSZKS00, 0 , ' ', '0', '0', '正常', PSXYS00, TO_CHAR(VSYSDATE, 'HH24:MI:SS'),PYSZID0 FROM VW_BM_ZLZD00 Z WHERE Z.ZLXMID=PHLJBID; END IF; for yz in C_YZMXID loop SP_BQ_YJFJFY(yz.YZMXID,0); end loop; END IF; --收治病人的入院诊断 If PRYZD00 IS NOT NULL and Vbrlb00='新入' Then Begin Select ICD900 Into vICD900 From vw_bq_icd900 Where trim(JBMC00) =trim(PRYZD00) And ROWNUM=1; Exception WHEN OTHERS THEN vICD900 := ''; End; begin select COUNT(*) INTO counter from bq_brzdxx where brid00=vbrid00 and zyid00=vzyid00 and zdlb00='2'; IF COUNTER>0 THEN update bq_brzdxx set zdm000=vICD900,zdmc00=PRYZD00,sfyz00='0',zlxg00='6',BZ0000=PZDBZ00 where brid00=vbrid00 and zyid00=vzyid00 and zdlb00='2'; else insert into BQ_BRZDXX(ID0000, BRID00, ZYID00, ZDLB00, ZDM000,ZDMC00, ZDRQ00, ZDSJ00, SFYZ00, ZLXG00, LRR000,BZ0000) Values(SQ_BQ_BRZDXX_ID0000.NextVal, vBRID00, vZYID00, '2',vICD900,PRYZD00, TO_CHAR(Sysdate,'YYYYMMDD'),TO_CHAR(Sysdate,'HH24:MI:SS'),0, 6, PCZY000,PZDBZ00); end if; end; End If; Begin --Select ZDMC00 Into V_MZZD00 From YS_BRZYSQ where brid00=Vbrid00 And ROWNUM=1; select ZDMC00 Into V_MZZD00 from ( select ZDMC00 from YS_BRZYSQ where BRID00=Vbrid00 and SQRQ00>=to_char(sysdate-60,'YYYYMMDD') order by ZYSQID desc ) where rownum=1; Exception WHEN OTHERS THEN V_MZZD00 := '0'; End; --select nvl(ZDMC00,'0') into V_MZZD00 from YS_BRZYSQ where brid00=Vbrid00; If V_MZZD00 <> '0' and Vbrlb00='新入' Then Begin Select ICD900 Into vICD900 From vw_bq_icd900 Where trim(JBMC00) =trim(PRYZD00) And ROWNUM=1; Exception WHEN OTHERS THEN vICD900 := ''; End; insert into BQ_BRZDXX( ID0000, BRID00, ZYID00, ZDLB00, ZDM000, ZDMC00, ZDRQ00, ZDSJ00, SFYZ00, ZLXG00, LRR000) Values( SQ_BQ_BRZDXX_ID0000.NextVal, vBRID00, vZYID00, '1', vICD900, V_MZZD00, TO_CHAR(PRYRQ00,'YYYYMMDD'), TO_CHAR(Sysdate, 'HH24:MI:SS'), 0, 6, PCZY000); End If; select nvl(max(trim(VALUE0)),'N') into BQ_SZBRJLBA from XT_XTCS00 where NAME00='BQ_SZBRJLBA' and VALUE0='Y'; if BQ_SZBRJLBA='Y' then begin if Vbrlb00='新入' then SP_ZS_XJBRBL(vZYID00,PSZKS00,PZZYS00,V_ZXJG00,V_ZXBZ00); end if; exception when others then Verror:='建立病案失败!'; raise Ecustom; end; end if; VcounterX:=sf_bq_brldxx; COMMIT; EXCEPTION WHEN E_BRZTYJGB THEN RAISE_APPLICATION_ERROR(-20001,'病人状态已经改变!*'||VPARAMS); WHEN E_BRMYZH THEN RAISE_APPLICATION_ERROR(-20002,'病人没有帐户!*'||VPARAMS); WHEN E_BRYJBZ THEN RAISE_APPLICATION_ERROR(-20003,'病人押金不足!*'||VPARAMS); WHEN E_BCZZSY THEN RAISE_APPLICATION_ERROR(-20004,'病床正在使用中!*'||VPARAMS); WHEN E_MYQD THEN RAISE_APPLICATION_ERROR(-20005,'没有每天一次的频次!*'||VPARAMS); WHEN E_ZHLBCSCW THEN RAISE_APPLICATION_ERROR(-20006,'帐户类别参数错误!*'||VPARAMS); WHEN E_FBBQCW THEN RAISE_APPLICATION_ERROR(-20007,'非本病区床位,停止收治!*'||VPARAMS); WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20010, '数据没有找到!*'||VPARAMS); WHEN E_SZRQRYRQ THEN RAISE_APPLICATION_ERROR(-20011,'入院日期与收治日期不一致!*'||VPARAMS); when Ecustom then RAISE_APPLICATION_ERROR(-20012,Verror||'!*'||VPARAMS); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20020, substrb(NVL(SQLERRM, '原因不明出错')||'!*'||VPARAMS,1,220)); ROLLBACK; END SP_BQ_SZBR_ZYHS;