CREATE OR REPLACE PROCEDURE SP_BQ_YPYZQT_DZBL ( --过程参数和模式 P_MODE00 in number,--0删除,1核对,2停止,3取消,4排序,5预停止(应该是暂停) 7提交 5实际上为暂停的处理,增加8为预停止. 9取回提交 P_YZID00 in number,--医嘱ID(分组号) P_HDR000 in number,--核对人 P_TZYS00 in number,--停止医生 P_TZRXM0 in char ,--停止人姓名 P_TZRQ00 in char ,--停止日期或起用日期 P_TZSJ00 in char ,--停止时间或起用时间 P_PXSJ00 in char ,--排序时间 P_SSSBZ0 in char default 'N' --手术室标识 )as --过程声明 V_HDRXM0 BQ_YPYZ00.HDRXM0%type;--核对人姓名 V_HDR000 BQ_YPYZ00.HDR000%type;--核对人 V_TZYS00 BQ_YPYZ00.TZYS00%type;--停止医生 V_ZYID00 ZY_BRXXB0.ZYID00%type;--住院ID; V_COUNT number(2); --记数器 V_YZZT00 char(1); VPARAMS varchar2(255); --参数变量 VERRMSG varchar2(255); --错误提示变量 ECUSTOM exception; --错误变量 VJZRQ00 char(8); --医嘱拆分截至日期 V_TZRQ00 BQ_YPYZ00.TZRQ00%type;--预停止日期日期 V_TZSJ00 BQ_YPYZ00.TZSJ00%type;--预停止日期时间 V_TZRXM0 BQ_YPYZ00.TZRXM0%type;--预停止操作员 V_SFCYDY number; --是否出院带药 BYTZYZ0 boolean; --是否预停止医嘱 VYPYZ00 BQ_YPYZ00%rowtype; VKFSJFG char(8); --医嘱时间分割点 VZJSJFG char(8); --医嘱时间分割点 VSYSDATE date; VYTZLDZSFKYCX XT_XTCS00.VALUE0%type ; --已经停止类短嘱是否可以撤销 LS_JHMXID BQ_YPYZMX.JHMXID%type; --计划明细 LS_ZRZCID LJ_ZRZC00.ZRZCID%type; --ZRZCID LS_ZYID00 BQ_YPYZ00.ZYID00%type; --ZYID00 LS_TLBZXH LJ_YZMX00.TLBZXH%type; LS_YZQYSJMRTJSJ varchar2(20); --医嘱起用时间是否默认为提交时间 LS_DQSJWYZQYSJ varchar2(20); --录入医嘱时,医嘱起用时间默认当前时间 LS_DTRYBRSFKYXGQYRQ varchar2(20); --录入医嘱时,当天入院病人是否可以修改起用日期 V_RYRQ00 char(8); --入院日期 V_RYCWH0 ZY_BRXXB0.RYCWH0%type; --入院床位号 V_QYRQ00 BQ_YPYZ00.QYRQ00%type; --起用日期 V_QYSJ00 BQ_YPYZ00.QYSJ00%type; --起用时间 V_SYSDATE date; LS_KSSMXCOU number(5); LS_TZRXM0 BQ_YPYZ00.TZRXM0%type;--停止操作员 LS_YPMC00 varchar2(50); --药品名称,同组的取第一个 LS_SFZCYBZYZPD varchar2(10); --是否做出院标志医嘱判断 V_DYPC00 BQ_YPYZ00.DYPC00%type; --打印批次 -- MODIFICATION HISTORY -- PERSON DATE COMMENT -- xuxm 2014.04.15 create 新入院病人,入院当天,新增一条医嘱,隔一段时间再点保存、提交,问题:医嘱的起用时间不是当前时间。(参数:ZS_DTRYBRSFKYXGQYRQ 已经开启不允许修改) FOR DZBL-20140411-001 -- xuxm 2014.06.23 从路径模板中引用出来的长嘱,保存提交时需判断有无输入频次。 FOR DZBL-20140618-001 -- xuxm 2014.12.03 医嘱启用时间需精确到秒,避免一分钟内先后提交的医嘱顺序颠倒。 FOR DZBL-20140913-001 -- rbh 2014.12.20 DZBL-20141210-007 从ZYDZBL取值 -- xuxm 2015.02.05 DZBL-20150116-006 医生选择出院医嘱后,当新增医嘱时,如起用时间大于出院时间不允许保存,应给予提示。 -- xuxm 2015.02.15 DZBL-20150122-001 项目为带有“死亡”两个字的不做新增医嘱的限制。 -- xuxm 2015.03.16 DZBL-20150312-002 医生撤销出院医嘱的时候,需清空SJCYRQ,SJCYSJ -- xuxm 2015.04.27 DZBL-20150328-001 开具死亡医嘱后,再开新医嘱时,一定要勾选“补录”,才允许开具保存,如未勾选,当选择医嘱后回车到医嘱界面中,应给予提示“在死亡医嘱后继续开医嘱请勾选补录!”。 -- xuxm 2016.07.07 ZYDZBL-20160707-004 医生在开完医嘱,护士站未核对前医生无法取回医嘱进行修改,改为可以取回医嘱! -- wuzy 2016.09.12 ZYDZBL-20160909-001 病人在病区已做出院登记后不能在提交医嘱 -- xuxm 2017.02.14 ZYDZBL-20170209-001 医嘱提交时判断录入人和提交人是同一个医生,增加参数控制提示或者强制限制不允许提交。 -- wuzy 2018.06.04 ZYDZBL-20180531-002 过程加上日志 SP_TransLog -- xuxm 2018.11.10 ZYDZBL-20181109-010 需求建议 住院电子病历-诊疗管理-医嘱管理,新增医嘱提交时,对临嘱的频次进行判断,只允许临嘱的频次为bm_pc0000.clbz00=1,2的频次,但要求当处理为“出院带药”时,对频次不限制。 begin --过程主体 VPARAMS := 'SP_BQ_YPYZQT_DZBL('||to_char(P_MODE00)||','||to_char(P_YZID00)||','||to_char(P_HDR000)||','||to_char(P_TZYS00)||',' ||P_TZRXM0||','||P_TZRQ00||','||P_TZSJ00||','||P_PXSJ00||')'; V_SYSDATE := sysdate; SP_TRANSLOG(V_SYSDATE,'SP_BQ_YPYZQT_DZBL',P_HDR000,0,VPARAMS); select count(*) into V_COUNT from ALL_TRIGGERS where STATUS<>'ENABLED' and TRIGGER_NAME like 'TR_BQ_%'; if V_COUNT>0 then select TRIGGER_NAME into VERRMSG from ALL_TRIGGERS where STATUS<>'ENABLED' and TRIGGER_NAME like 'TR_BQ_%' and rownum=1; VERRMSG:='触发器"'||VERRMSG||'"失效,请与管理员联系'; raise ECUSTOM; end if; --医嘱状态YZZT00:'0'新开'1'已核对'2'已提取'3'停止'4'撤消'5'暂停'6'疑问 select ZYID00,HDR000,TZYS00,YZZT00,TZRQ00,TZSJ00,TZRXM0 into V_ZYID00,V_HDR000,V_TZYS00,V_YZZT00,V_TZRQ00,V_TZSJ00,V_TZRXM0 from BQ_YPYZ00 where YZID00=P_YZID00; --删除医嘱 if P_MODE00 = 0 then --判断是否新开医嘱 select count(1) into V_COUNT from BQ_YPYZ00 where YZID00 = P_YZID00 and YZZT00 in ('0','7'); if V_COUNT = 0 then VERRMSG := '不是新开医嘱,不能删除!*还回信息:'; raise ECUSTOM; end if; begin select nvl(TLBZXH,0) into LS_TLBZXH from LJ_YZMX00 where ZYID00=V_ZYID00 and nvl(WBYZID,0)=P_YZID00 and rownum=1; exception when others then LS_TLBZXH:=0; end; begin select ZRZCID into LS_ZRZCID from LJ_ZRZC00 where ZYID00=V_ZYID00 and nvl(JSRQ00,' ')=' ' ; exception when others then LS_ZRZCID:=0; end; if LS_TLBZXH>0 then --当已经生成的路径医嘱,而模板被删除时会提示,MRXSBZ不能被改成 NULL 2013.12.13 update LJ_YZMX00 A set (MRBZ00,MRXSBZ)=(select nvl(max(MRBZ00),'1'),nvL(max(MRXSBZ),'1') from LJ_JDYZMX where LJID00=A.LJID00 and JHMXID=A.JHMXID) where ZYID00=V_ZYID00 and NVL(TLBZXH,0)=LS_TLBZXH; end if; delete ZS_KJYPSQ where KSSSQ0 in (select KSSSQ0 from BQ_YPYZMX A,ZS_KJSQMX B where A.YZID00=P_YZID00 and A.YZMXID=B.YZMXID and MXLY00='ZS_KJYPSQ'); delete ZS_KJSQMX where YZMXID in (select YZMXID from BQ_YPYZMX where YZID00=P_YZID00 and MXLY00='ZS_KJYPSQ'); --特殊抗生素申请 for C_YZMX in (select KSSSQ0 from BQ_YPYZMX A,ZS_KJSQMX B where A.YZID00=P_YZID00 and A.YZMXID=B.YZMXID and MXLY00='ZS_TSYWSQ') loop delete ZS_KJSQMX where KSSSQ0=C_YZMX.KSSSQ0 ; select count(*) into LS_KSSMXCOU from ZS_KJSQMX where KSSSQ0=C_YZMX.KSSSQ0; if LS_KSSMXCOU=0 then delete ZS_TSYWSQ where KSSSQ0=C_YZMX.KSSSQ0 ; end if; delete ZS_KJZLPG where KSSSQ0=C_YZMX.KSSSQ0 ; end loop; delete BQ_YPYZMX where YZID00 = P_YZID00; delete BQ_YPYZ00 where YZID00 = P_YZID00; --核对医嘱 --核对医嘱 elsif P_MODE00 = 1 then V_SFCYDY:=SF_BQ_YZHDYESFBZ_ZYDZBL(P_YZID00); if V_SFCYDY<0 then VERRMSG := '余额不足,请到收费处缴费'; raise ECUSTOM; end if; if (V_YZZT00=0) or (V_YZZT00 in (3,4) and nvl(V_TZYS00,0)>0) then select ZWXM00 into V_HDRXM0 from BM_YGBM00 where YGBH00 = P_HDR000; else VERRMSG := '不是待核对的医嘱,不能核对'; raise ECUSTOM; end if; if V_YZZT00=0 and nvl(V_HDR000,0)>0 then--重组的医嘱 update BQ_YPYZ00 set YZZT00 = '2' where YZID00 = P_YZID00; elsif V_YZZT00=0 and nvl(V_HDR000,0)=0 then--新开的医嘱 update BQ_YPYZ00 set YZZT00 = '1',HDR000 = P_HDR000,HDRXM0 = V_HDRXM0 where YZID00 = P_YZID00; else--医生停止或撤销的医嘱 update BQ_YPYZ00 set TZRXM0 = V_HDRXM0 where YZID00 = P_YZID00; end if; --判定是否仍然有新开的医嘱 select count(*) into V_COUNT from (select YZID00 from BQ_YPYZ00 where ZYID00=V_ZYID00 and YZZT00='0' and rownum=1 union all select YZMXID from BQ_YJYZ00 where ZYID00=V_ZYID00 and YZZT00='0' and rownum=1); if V_COUNT=0 then update XT_DZGG00 set YXZZRQ=to_char(sysdate,'YYYYMMDD'),YXZZSJ=to_char(sysdate,'HH24:MI:SS') where ZYID00=V_ZYID00 and CZLB00='1' and YXZZRQ='99991231'; end if; --判定是否仍然有停止医嘱 select count(*) into V_COUNT from (select YZID00 from BQ_YPYZ00 where ZYID00=V_ZYID00 and YZZT00='3' and TZRXM0 is null and rownum=1 union all select YZMXID from BQ_YJYZ00 where ZYID00=V_ZYID00 and YZZT00='3' and TZRXM0 is null and rownum=1); if V_COUNT=0 then update XT_DZGG00 set YXZZRQ=to_char(sysdate,'YYYYMMDD'),YXZZSJ=to_char(sysdate,'HH24:MI:SS') where ZYID00=V_ZYID00 and CZLB00='2' and YXZZRQ='99991231'; end if; --判定是否仍然有撤销医嘱 select count(*) into V_COUNT from (select YZID00 from BQ_YPYZ00 where ZYID00=V_ZYID00 and YZZT00='4' and TZRXM0 is null and rownum=1 union all select YZMXID from BQ_YJYZ00 where ZYID00=V_ZYID00 and YZZT00='4' and TZRXM0 is null and rownum=1); if V_COUNT=0 then update XT_DZGG00 set YXZZRQ=to_char(sysdate,'YYYYMMDD'),YXZZSJ=to_char(sysdate,'HH24:MI:SS') where ZYID00=V_ZYID00 and CZLB00='3' and YXZZRQ='99991231'; end if; --拆分医嘱20040916 --默认截至日期为当前时间加上30天 select to_char(sysdate+30, 'YYYYMMDD') into VJZRQ00 from DUAL; SP_BQ_YZCF00_SINGLE_ZYDZBL(VJZRQ00, P_YZID00, '0'); --停止医嘱 elsif P_MODE00 = 2 then BYTZYZ0 :=((V_TZYS00 is not null) and (V_YZZT00='5')); --判断是否提取医嘱 if not BYTZYZ0 then select count(1) into V_COUNT from BQ_YPYZ00 where YZID00=P_YZID00 and YZZT00='2'; if V_COUNT = 0 then VERRMSG := '不是提取医嘱,不能停止'; raise ECUSTOM; end if; else if P_HDR000 is null then VERRMSG := '核对人不允许为空!'; raise ECUSTOM; end if; select count(1) into V_COUNT from BM_YGBM00 where ZWXM00=trim(V_TZRXM0) and YGBH00=P_HDR000; if V_COUNT > 0 then VERRMSG := '核对和停止操作员不允许一样!'; raise ECUSTOM; end if; end if; select ZWXM00 into LS_TZRXM0 from BM_YGBM00 where YGBH00=P_TZYS00; if BYTZYZ0 then SP_BQ_YPYZTZ_ZYDZBL( LS_TZRXM0,P_YZID00,V_TZRQ00,V_TZSJ00); --P_TZRXM0 是空的 update BQ_YPYZ00 set YZZT00='3',TZSHR0=P_HDR000 --增加停止审核人 where YZID00 = P_YZID00; else --按小时执行的医嘱要自动退 SP_BQ_YPYZTZ_ZYDZBL( LS_TZRXM0,P_YZID00,P_TZRQ00,P_TZSJ00); update BQ_YPYZ00 set YZZT00='3',TZYS00=P_TZYS00 ,--TZRXM0=LS_TZRXM0, TZRQ00=P_TZRQ00,TZSJ00=P_TZSJ00 where YZID00 = P_YZID00; end if; if P_TZRXM0='' or P_TZRXM0 is null then select count(*) into V_COUNT from XT_DZGG00 where ZYID00=V_ZYID00 and CZLB00='2' and YXQSRQ||YXQSSJ<=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and to_char(sysdate,'YYYYMMDDHH24:MI:SS')<=YXZZRQ||YXZZSJ and YXQSRQ<=to_char(sysdate,'YYYYMMDD') and to_char(sysdate,'YYYYMMDD')<=YXZZRQ||YXZZSJ; if V_COUNT=0 then insert into XT_DZGG00(ID0000,ZYID00,FSBQ00,FSBQMC,FSKS00,FSKSMC,FSXX00, YXQSRQ,YXQSSJ,YXZZRQ,YXZZSJ,CZY000,CZLB00,XTDM00) select SQ_XT_DZGG00_ID0000.nextval,ZYID00,0,' ',DQBQ00,' ','"'||trim(RYCWH0)||'床'||trim(ZYH000)||' '||trim(XM0000)||'" --有医嘱停止 '||to_char(sysdate,'HH24:MI'), to_char(sysdate,'YYYYMMDD'),to_char(sysdate,'HH24:MI:SS'),'99991231','00:00:00',P_HDR000,'2','9' from ZY_BRXXB0 where ZYID00=V_ZYID00; end if; end if; --取消医嘱 elsif P_MODE00 = 3 then begin select VALUE0 into VYTZLDZSFKYCX from XT_XTCS00 where NAME00='ZS_YTZLDZSFKYCX'; exception when others then VYTZLDZSFKYCX:='N'; end; --判断是否新开或核对医嘱 select count(1) into V_COUNT from BQ_YPYZ00 where YZID00 = P_YZID00 and ((YZZT00 in ('0','1','2') and ZXRQ00 is null) OR (YZZT00='3' and CLBZ00='1' and trim(VYTZLDZSFKYCX)='Y')) ; if V_COUNT = 0 then if trim(VYTZLDZSFKYCX)='Y' then VERRMSG := '不是新开或核对或未执行、或已经停止的短嘱类 医嘱,不能撤消!*返回信息:'; else VERRMSG := '不是新开或核对或未执行 医嘱,不能撤消!*返回信息:'; end if; raise ECUSTOM; end if; select count(1) into V_COUNT from YF_YZYPSQ where YZID00=P_YZID00 and ZYID00=V_ZYID00 and CXBZ00='Z' and FYRQ00 is not null and FYRQ00<>'20991231'; -- where YZID00=P_YZID00 and ZYID00=V_ZYID00 and CXBZ00='Z' and (FYRQ00 IS NOT NULL OR FYRQ00<>''); --都是20991231 if V_COUNT>0 then VERRMSG := '医嘱药品已经发药,不能撤消,请先做退药处理!*还回信息:'; raise ECUSTOM; end if; -- update BQ_YPYZ00 set YZZT00 = '4',TZYS00 = P_TZYS00,TZRXM0 = P_TZRXM0, TZRQ00 = P_TZRQ00,TZSJ00 = P_TZSJ00 where YZID00 = P_YZID00; if P_TZRXM0='' OR P_TZRXM0 is null then select count(*) into V_COUNT from XT_DZGG00 where ZYID00=V_ZYID00 and CZLB00='3' and YXQSRQ||YXQSSJ<=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and to_char(sysdate,'YYYYMMDDHH24:MI:SS')<=YXZZRQ||YXZZSJ and YXQSRQ<=to_char(sysdate,'YYYYMMDD') and to_char(sysdate,'YYYYMMDD')<=YXZZRQ||YXZZSJ; if V_COUNT=0 then insert into XT_DZGG00(ID0000,ZYID00,FSBQ00,FSBQMC,FSKS00,FSKSMC,FSXX00, YXQSRQ,YXQSSJ,YXZZRQ,YXZZSJ,CZY000,CZLB00,XTDM00) select SQ_XT_DZGG00_ID0000.nextval,ZYID00,0,' ',DQBQ00,' ','"'||trim(RYCWH0)||'床'||trim(ZYH000)||' '||trim(XM0000)||'" --有医嘱撤消 '||to_char(sysdate,'HH24:MI'), to_char(sysdate,'YYYYMMDD'),to_char(sysdate,'HH24:MI:SS'),'99991231','00:00:00',P_HDR000,'3','9' from ZY_BRXXB0 where ZYID00=V_ZYID00; end if; end if; --抗生素申请和特殊抗生素申请也必须撤销 update ZS_KJYPSQ set SQZT00='1' where KSSSQ0 in (select KSSSQ0 from BQ_YPYZMX A,ZS_KJSQMX B where A.YZID00=P_YZID00 and A.YZMXID=B.YZMXID ); update ZS_TSYWSQ set SQZT00='3' where KSSSQ0 in (select KSSSQ0 from BQ_YPYZMX A,ZS_KJSQMX B where A.YZID00=P_YZID00 and A.YZMXID=B.YZMXID ); --排序医嘱 elsif P_MODE00 = 4 then update BQ_YPYZ00 set PXSJ00 = P_PXSJ00 where YZID00 = P_YZID00; --预停止医嘱(实际上应该是暂停的意思) elsif P_MODE00 = 5 then --P_HDR000核对人即为操作员 /* -- select count(1) into V_COUNT from BQ_YPYZ00 where YZID00 = P_YZID00 and YZZT00 in ('0','1','2'); if V_COUNT = 0 then VERRMSG := '不是新开、核对、提取医嘱,不能预停止!*还回信息:'; raise ECUSTOM; end if; -- update BQ_YPYZ00 set TZYS00 = P_TZYS00, TZRXM0 = P_TZRXM0, TZRQ00 = P_TZRQ00, TZSJ00 = P_TZSJ00 where YZID00 = P_YZID00; */ select count(1) into V_COUNT from BQ_YPYZ00 where YZID00=P_YZID00 and YZZT00='2' and CLBZ00 = '0'; if V_COUNT = 0 then VERRMSG := '非使用长期药品医嘱,不能预停止'; raise ECUSTOM; end if; select trim(VALUE0) into VKFSJFG from XT_XTCS00 where NAME00='BQ_KFYZSJFG'; select trim(VALUE0) into VZJSJFG from XT_XTCS00 where NAME00='BQ_ZJYZSJFG'; select * into VYPYZ00 from BQ_YPYZ00 where YZID00=P_YZID00; VSYSDATE:=sysdate; insert into BQ_YZZXJL (ZYID00,YZMXID, TQDJH0, DJHLB0, FYDJH0, ZT0000, CZR000, YZID00, QSRQ00, QSSJ00, JSRQ00, JSSJ00, SJJSRQ, SJJSSJ, CZRQ00, CZSJ00, SCJSRQ, CS0000) select VYPYZ00.ZYID00,YZMXID ,0, 0, 0, '3', P_HDR000, A.YZID00, decode(VYPYZ00.YZZT00,'1',VYPYZ00.SJQSRQ,'2',to_char(to_date(VYPYZ00.TQRQ00,'YYYYMMDD')+1,'YYYYMMDD')), decode(KFBZ00,'Y',VKFSJFG,VZJSJFG), decode(VYPYZ00.YZZT00,'1',VYPYZ00.SJQSRQ,'2',to_char(to_date(VYPYZ00.TQRQ00,'YYYYMMDD')+2,'YYYYMMDD')), decode(KFBZ00,'Y',VKFSJFG,VZJSJFG), decode(VYPYZ00.YZZT00,'1',VYPYZ00.SJQSRQ,'2',to_char(to_date(VYPYZ00.TQRQ00,'YYYYMMDD')+2,'YYYYMMDD')), decode(KFBZ00,'Y',VKFSJFG,VZJSJFG), to_char(VSYSDATE,'YYYYMMDD'), to_char(VSYSDATE,'HH24:MI:SS'), decode(VYPYZ00.TQRQ00,null,null,to_char(to_date(VYPYZ00.TQRQ00,'YYYYMMDD')+1,'YYYYMMDD')||VYPYZ00.TQSJ00), 0 from BQ_YPYZMX A,BQ_YPYZ00 B where A.YZID00=P_YZID00 and A.YZID00=B.YZID00; update BQ_YPYZ00 set YZZT00='5',TZYS00 = P_TZYS00,TZRXM0 = P_TZRXM0,TZRQ00 = P_TZRQ00,TZSJ00 = P_TZSJ00 where YZID00=P_YZID00; elsif P_MODE00 = 7 then select count(1) into V_COUNT from BQ_YPYZ00 where YZID00 = P_YZID00 and YZZT00 in ('7'); if V_COUNT = 0 then VERRMSG := '没有新开未提交的医嘱!*还回信息:'; raise ECUSTOM; end if; select count(1) into V_COUNT from ZY_BRXXB0 where ZYID00=V_ZYID00 and BRZT00 in ('3'); if V_COUNT > 0 then VERRMSG := '病人在病区已做出院登记,不能提交医嘱。'; raise ECUSTOM; end if; begin select trim(nvl(B.YPMC00,'')) into LS_YPMC00 from BQ_YPYZ00 A ,BQ_YPYZMX B where A.YZID00 = P_YZID00 and YZZT00 in ('7') and KZYS00<>P_HDR000 and exists (select 1 from XT_XTCS00 where NAME00='ZS_YZTJYSXZ' and VALUE0='Y' ) and A.YZID00=B.YZID00 and rownum=1 ; exception when others then LS_YPMC00:=null; end; if LS_YPMC00 is not null then VERRMSG :=LS_YPMC00|| '开单医生和提交医生不是同一个人不允许提交。'; raise ECUSTOM; end if; select nvl(max(trim(VALUE0)),'N') into LS_SFZCYBZYZPD from XT_XTCS00 where NAME00='ZS_SFZCYBZYZPD' and VALUE0='Y'; if LS_SFZCYBZYZPD='Y' then select count(*) into V_COUNT from ZS_BLXX01 A where ZYID00=V_ZYID00 and CYRQ00||CYSJ00<=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and CYRQ00<>' ' and CYRQ00 is not null and CYRQ00 <>'20991231' and (SWRQ00 is null or SWRQ00=' ') ; if V_COUNT>0 then VERRMSG:='当前提交的医嘱已经超过出院时间,不允许提交。如需新增医嘱,请先撤销出院医嘱或开取消出院。'; raise ECUSTOM; end if; end if; select count(*) into V_COUNT from ZS_BLXX01 A where ZYID00=V_ZYID00 and ( SWRQ00<>'20991231' and SWRQ00 <>' ' ) and exists (select 1 from BQ_YPYZ00 where YZID00=P_YZID00 and YEXM00 is null ) and not exists(select 1 from BQ_YPYZ00 Y where Y.BLBZ00='Y' and Y.YEXM00 is null and Y.YZID00=P_YZID00 ) ; if V_COUNT>0 then VERRMSG:='在死亡医嘱后继续开医嘱请勾选补录。'; raise ECUSTOM; end if; -- select count(1),TRIM(NVL(B.YPMC00,'')) into V_COUNT,LS_YPMC00 from BQ_YPYZ00 A ,BQ_YPYZMX B, BM_YD0000 C -- where A.YZID00=B.YZID00 and B.YPNM00=C.YPNM00 and A.YZID00 = P_YZID00 and C.KSSJB0>0; -- if V_COUNT>0 then -- select count(1),TRIM(NVL(A.ZDMC00,'')) into V_COUNT,LS_ZDMC00 from BQ_BRZDXX A, BM_TYZD00 B -- where A.ZYID00=V_ZYID00 and B.ZDMC00='限制输入抗生素的诊断' -- and (A.ZDMC00=B.MC0000 OR A.ZDM000=B.BH0000); -- if V_COUNT > 0 then -- VERRMSG := '"'||LS_ZDMC00||'"该诊断不能开立药品:"'||LS_YPMC00||'"!'; -- raise ECUSTOM; -- end if; -- end if; begin select trim(nvl(B.YPMC00,'')) into LS_YPMC00 from BQ_YPYZ00 A ,BQ_YPYZMX B where A.YZID00 = P_YZID00 and YZZT00 in ('7') and CLBZ00='0' and PCID00=0 and A.YZID00=B.YZID00 and rownum=1 ; exception when others then LS_YPMC00:=null; end; if LS_YPMC00 is not null or LS_YPMC00 ='' then VERRMSG :=LS_YPMC00|| '药品的频次未选择,请重新修改频次'; raise ECUSTOM; end if; begin select trim(nvl(B.YPMC00,'')) into LS_YPMC00 from BQ_YPYZ00 A ,BQ_YPYZMX B where A.YZID00 = P_YZID00 and YZZT00 in ('7') and clbz00='1' and b.yzcllb<>'出院带药' and not exists (select 1 from bm_pc0000 c where a.pcid00=c.pcid00 and c.clbz00 in ('1','2')) and PCID00<>0 and A.YZID00=B.YZID00 AND A.YPLBBH<>2 and rownum=1 ; exception when others then LS_YPMC00:=null; end; if LS_YPMC00 is not null or LS_YPMC00 ='' then VERRMSG :=LS_YPMC00|| '药品临嘱时不能使用该频次,请重新修改频次'; raise ECUSTOM; end if; --是否医嘱启用时间默认提交时间 select nvl(max(trim(VALUE0)),'N') into LS_YZQYSJMRTJSJ from XT_XTCS00 where NAME00='ZS_YZQYSJMRTJSJ'; if (LS_YZQYSJMRTJSJ = 'Y') then select nvl(max(trim(VALUE0)),'N') into LS_DQSJWYZQYSJ from XT_XTCS00 where NAME00='ZS_YZ_DQSJWYZQYSJ'; if LS_DQSJWYZQYSJ = 'Y' then select nvl(A.QSRQ00,B.RYRQ00), B.RYCWH0 into V_RYRQ00, V_RYCWH0 from BQ_BRLDXX A,ZY_BRXXB0 B where A.ZYID00(+)=B.ZYID00 and B.ZYID00 = V_ZYID00 and A.QSZT00='新入' and rownum=1; select nvl(max(trim(VALUE0)),'N') into LS_DTRYBRSFKYXGQYRQ from XT_XTCS00 where NAME00='ZS_DTRYBRSFKYXGQYRQ'; --当天入院病人是否可以修改起用日期 if(V_RYRQ00 = to_char(V_SYSDATE,'YYYYMMDD') and LS_DTRYBRSFKYXGQYRQ <> 'N' ) then V_COUNT := 0; else V_COUNT := 1; end if; if (V_RYCWH0 is null) then VERRMSG:='病人未指定床号,不能提交医嘱!'; raise ECUSTOM; end if; if (V_COUNT = 0) then select count(1) into V_COUNT from BQ_YPYZ00 where YZID00 = P_YZID00 and ((to_date(QYRQ00||QYSJ00,'YYYYMMDDHH24:MI:SS') - to_date(LRRQ00||LRSJ00,'YYYYMMDDHH24:MI:SS'))*24*60*60) between -900 and 60; --非当天入院的病人,或者当天入院且录入时间和启用时间相差10分钟以内的,取医嘱的提交时间作为起用时间 end if; if(V_COUNT>0) then --60秒内的医嘱,取相同的提交时间作为启用时间 /* select NVL(MAX(QYRQ00),to_char(V_SYSDATE,'YYYYMMDD')),NVL(MAX(QYSJ00),to_char(V_SYSDATE,'HH24:MI:SS')) into V_QYRQ00, V_QYSJ00 from BQ_YPYZ00 where ZYID00 = V_ZYID00 and ((sysdate - TO_DATE(QYRQ00||QYSJ00,'YYYYMMDDHH24:MI:SS'))*24*60*60) BETWEEN -1 and 60; if(V_QYRQ00||V_QYSJ00 = to_char(V_SYSDATE,'YYYYMMDDHH24:MI:SS')) then --60秒内的医嘱,取相同的提交时间作为启用时间 select NVL(MAX(QYRQ00),to_char(V_SYSDATE,'YYYYMMDD')),NVL(MAX(QYSJ00),to_char(V_SYSDATE,'HH24:MI:SS')) into V_QYRQ00, V_QYSJ00 from BQ_YJYZ00 where ZYID00 = V_ZYID00 and ((sysdate - TO_DATE(QYRQ00||QYSJ00,'YYYYMMDDHH24:MI:SS'))*24*60*60) BETWEEN -1 and 60; end if;*/ update BQ_YPYZ00 set QYRQ00=P_TZRQ00, QYSJ00= P_TZSJ00 where YZID00 = P_YZID00; end if; end if; end if; update BQ_YPYZ00 set YZZT00 = '0',YZTJRQ=to_char(sysdate,'YYYYMMDD'),YZTJSJ=to_char(sysdate,'HH24:MI:SS'),KZYS00=DECODE(P_SSSBZ0,'Y',KZYS00,DECODE(NVL(P_HDR000,0),0,KZYS00,P_HDR000)) where YZID00 = P_YZID00; select count(*)into V_COUNT from XT_DZGG00 where ZYID00=V_ZYID00 and CZLB00='1' and YXQSRQ||YXQSSJ<=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and to_char(sysdate,'YYYYMMDDHH24:MI:SS')<=YXZZRQ||YXZZSJ and YXQSRQ<=to_char(sysdate,'YYYYMMDD') and to_char(sysdate,'YYYYMMDD')<=YXZZRQ||YXZZSJ; if (V_COUNT=0) and (P_SSSBZ0='N') then insert into XT_DZGG00(ID0000,ZYID00,FSBQ00,FSBQMC,FSKS00,FSKSMC,FSXX00, YXQSRQ,YXQSSJ,YXZZRQ,YXZZSJ,CZY000,CZLB00,XTDM00) select SQ_XT_DZGG00_ID0000.nextval,ZYID00,0,' ',DQBQ00,' ','"'||trim(RYCWH0)||'床'||trim(ZYH000)||' '||TRIM(XM0000)||'" --有新开医嘱 '||to_char(sysdate,'HH24:MI'), to_char(sysdate,'YYYYMMDD'),to_char(sysdate,'HH24:MI:SS'),'99991231','00:00:00',P_HDR000,'1','9' from ZY_BRXXB0 where ZYID00=V_ZYID00; end if; select nvl(JHMXID,0) into LS_JHMXID from BQ_YPYZMX where YZID00= P_YZID00 and rownum<=1; if LS_JHMXID>0 then select ZYID00 into LS_ZYID00 from BQ_YPYZ00 where YZID00=P_YZID00; begin select ZRZCID into LS_ZRZCID from LJ_ZRZC00 where ZYID00=LS_ZYID00 and nvl(JSRQ00,' ')=' ' ; exception when others then LS_ZRZCID:=0; end; if LS_ZRZCID>0 then SP_ZS_LJ_DELETEBYJL(LS_ZRZCID,LS_JHMXID); end if; end if; elsif P_MODE00 = 8 then select count(1) into V_COUNT from BQ_YPYZ00 where YZID00=P_YZID00 and YZZT00='2' and CLBZ00 = '0'; if V_COUNT = 0 then VERRMSG := '非使用长期药品医嘱,不能预停止'; raise ECUSTOM; end if; update BQ_YPYZ00 set TZYS00 = P_TZYS00,TZRXM0 = P_TZRXM0,YTZRQ0 = P_TZRQ00,YTZSJ0 = P_TZSJ00 where YZID00=P_YZID00; elsif P_MODE00 = 9 then --增加取回提交 20130113 阮炳辉 select count(1),nvl(max(DYPC00),0) into V_COUNT,V_DYPC00 from BQ_YPYZ00 where YZID00=P_YZID00 and YZZT00='0'; if V_COUNT = 0 then VERRMSG := '没有已提交的医嘱!'; raise ECUSTOM; end if; if V_DYPC00 > 0 then VERRMSG:='已经打印过的医嘱不能取回,如果要取回请先撤消打印记录'; raise ECUSTOM; end if; update BQ_YPYZ00 set YZZT00 = '7',TJYS00='' where YZID00 = P_YZID00; end if; exception when NO_DATA_FOUND then RAISE_APPLICATION_ERROR(-20001,substrb('数据没有找到!*'||sqlerrm||','||VPARAMS,1,220)); when ECUSTOM then RAISE_APPLICATION_ERROR(-20010,substrb(VERRMSG||'!*'||VPARAMS,1,120)); when others then RAISE_APPLICATION_ERROR(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*'||VPARAMS,1,120)); end; /