-- Start of DDL script for SP_ZS_YJTSXZ -- Generated 2-八月-11 3:32:11 pm -- from fw2-SD_HOSPITAL:1 -- Procedure SP_ZS_YJTSXZ CREATE OR REPLACE procedure SP_ZS_YJTSXZ ( V_ZYID00 IN number, --住院ID 只限制住院的 V_YJDJH0 IN number DEFAULT 0, --默认为0 表示对ZYID00的提醒,并且只提醒一次, V_RETURN OUT number, --0表示成功,--1表示违反警告,--2表示违反限制 --3表示其他错误。 V_ERROR0 OUT varchar2, --错误提示 V_FLAG00 IN number default 0 --0 项目 1 药品 ) as C_BRID00 number(10); vCOUNTER number; --临时变量 V_COUNT0 number(5); --计数器 vYBZXLB IC_YBBRLB.YBZXLB%TYPE; -- vFBBH00 IC_YBBRLB.FBBH00%TYPE; vYBBRLB BM_YBBRLB.ybbrlb%TYPE; C_BJSL00 NUMBER(12,2); C_JYSL00 NUMBER(12,2); C_SL0000 NUMBER(12,2); C_FZTJ00 BM_TSXZ00.FZTJ00%TYPE; C_XZMC00 BM_TSXZDM.XZMC00%TYPE;--限制提示 I_BH0000 BM_TSXZ00.BH0000%TYPE;--限制序号 C_ZLXMID NUMBER(8,0); C_SQL000 varchar2(1600); V_YPMC00 varchar2(220); C_RETURN NUMBER(5); --本次限制是否跳过,1跳过,0检查 v_SFLJSCCWTS CHAR(1); --是否要和上一个判断的错误一起提示 0 不要 1要 begin --0表示成功, --1表示违反警告, --2表示违反限制。 --3表示其他错误。 -- MODIFICATION HISTORY -- Person Date Comments -- liuj 20110407 create 允许根据条件限制诊疗项目开单金额 -- csf 20110428 如果医生开具的的医嘱是参数(XT_ZDYBYPMLXYSPBR)定义的病人且包含了需要审批的目录(目录定义在通用字典),则提示病人当前药品是否已经审批。 -- csf 20110524 病人需要审批目录定义方式变了,审批的方式也变了,所以对病人是否审批的判断提示也做相应的修改。 -- csf 2011.06.23 XT_ZDYBYPMLXYSPBR参数要维护所有参与控制的病人类别,太麻烦,不用参数而直接用通用字典判断。 V_RETURN:=0; V_ERROR0:='没有错误'; BEGIN SELECT BRID00 INTO C_BRID00 FROM ZY_BRXXB0 WHERE ZYID00=V_ZYID00; EXCEPTION WHEN OTHERS THEN V_RETURN:=3; V_ERROR0:='查无此人!'; RETURN; END; BEGIN SELECT A.FBBH00,B.YBZXLB,A.YBBRLB INTO vFBBH00,vYBZXLB,vYBBRLB FROM BM_BRXXB0 A,IC_YBBRLB B WHERE BRID00=C_BRID00 AND A.FBBH00=B.FBBH00 AND A.YBLB00=B.YBLB00; EXCEPTION WHEN OTHERS THEN V_RETURN:=3; V_ERROR0:='查无此人!'; RETURN; END; v_SFLJSCCWTS:='0'; if V_FLAG00=0 then --项目开始 if V_YJDJH0 = 0 then --只提醒一次 开始 C_RETURN:=0; --是否存在诊疗单金额的限制 0存在 1 不存在 --取对应的所有诊疗单报警金额、禁用金额的 BEGIN SELECT BJSL00,JYSL00,FZTJ00,bh0000 INTO C_BJSL00,C_JYSL00,C_FZTJ00,i_bh0000 FROM BM_TSXZ00 WHERE (FBBH00=0 OR FBBH00=vFBBH00) AND (YBZXLB='Z' OR YBZXLB=vYBZXLB) AND (YBBRLB='Z' OR YBBRLB=vYBBRLB) AND (MZZYBZ='1' OR MZZYBZ='2') AND ROWNUM=1 AND XZLB00=6 ; EXCEPTION WHEN OTHERS THEN C_FZTJ00:=NULL; C_RETURN:=1; END; select nvl(max(trim(xzmc00)),' ') into c_xzmc00 from BM_TSXZDM where bh0000=i_bh0000 and rownum=1; --------------------------------------------begin------------------------ if C_RETURN=0 then IF C_FZTJ00 IS NOT NULL THEN C_SQL000:=C_FZTJ00; C_SQL000:=' select nvl(sum(c.sfje00*a.mcsl00*b.zqcs00*decode(a.ts0000,0,1,a.ts0000)),0) sl0000 from bq_yjyz00 a,bm_pc0000 b,vw_yj_zlxmjg c WHERE b.pcid00=decode(a.pcid00,0,2,a.pcid00) and a.zlxmid=c.zlxmid and a.zyid00='||V_ZYID00||' and a.yzzt00=''7'' and a.lrrq00=to_char(sysdate,''YYYYMMDD'') and a.zlxmid in ('||C_SQL000||')'; execute immediate C_SQL000 into C_SL0000; IF C_SL0000>C_JYSL00 THEN V_RETURN:=2; if c_xzmc00<>' ' then V_ERROR0:=C_XzMC00; else V_ERROR0:='当前所开特定医技项目总金额超过禁用金额:'||TRIM(TO_CHAR(C_JYSL00)); end if; RETURN; ELSE IF C_SL0000>C_BJSL00 THEN V_RETURN:=1; if c_xzmc00<>' ' then V_ERROR0:=C_XzMC00; else V_ERROR0:='当前所开特定医技项目总金额超过报警金额:'||TRIM(TO_CHAR(C_BJSL00)); --继续下一个限制 end if; v_SFLJSCCWTS:='1'; END IF; END IF; end if; END IF; ----------------------------------end------------------------------------------------------------ end if;----只提醒一次 结束 else --项目结束 下面处理药品 --如果医生开具的的处方是参数(XT_ZDYBYPMLXYSPBR)定义的病人且包含了需要审批的目录(目录定义在通用字典),则提示病人当前药品是否已经审批。 ---------------------------------------------------------------------------------------------------------------------------------------- select count(*) into V_COUNT0 from BM_TYZD00 where ZDMC00='指定费别审批的药品目录' and YXBZ00='1' and BZDYBH=to_char(vFBBH00)||'-'||vYBZXLB||'-'||vYBBRLB; if V_COUNT0>0 then --针对新开医嘱,是否存在审批目录中的药品,若有存在,判断是否存在有效的审批记录,没有的话进行提示。 v_ypmc00:=' '; for c_wspyp in (select distinct b.YPMC00 from BQ_YPYZ00 a,BQ_YPYZMX b ,BM_TYZD00 c where a.ZYID00=V_ZYID00 and a.YZZT00='7' and a.LRRQ00=to_char(sysdate,'YYYYMMDD') and a.YZID00=b.YZID00 and c.BZDYBH=to_char(vFBBH00)||'-'||vYBZXLB||'-'||vYBBRLB and b.YPNM00=c.DJ0000 and c.ZDMC00='指定费别审批的药品目录' and c.YXBZ00='1' and not exists (select 1 from YK_YBMLSP where BRID00=C_BRID00 and MZZYBZ='1' and ZFRQ00='20991231' and KSSYRQ<=to_char(sysdate,'YYYYMMDD') and JSSYRQ>=to_char(sysdate,'YYYYMMDD') and KSSYRQ||KSSYSJ<=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and JSSYRQ||JSSYSJ>=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and SPJG00='1' and YPNM00=b.YPNM00) ) loop if V_YPMC00=' ' then V_YPMC00:=c_wspyp.YPMC00; else V_YPMC00:=V_YPMC00||'、'||c_wspyp.YPMC00; end if; end loop; if V_YPMC00<>' ' then V_RETURN:=1; IF v_SFLJSCCWTS='0' then V_ERROR0:='药品('||V_YPMC00||')尚未审批,将自费使用!'; else V_ERROR0:=substr(V_ERROR0||'药品('||V_YPMC00||')尚未审批,将自费使用!',1,220); end if; v_SFLJSCCWTS:='1'; -- return; end if; end if; ---------------------------------------------------------------------------------------------------------------------------------------- end if;--药品处理结束 end; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% / -- End of DDL script for SP_ZS_YJTSXZ