CREATE PROCEDURE SP_XT_TSXZ00 ( --0为门诊,传入挂号ID字段,1为住院,传入住院ID字段。 V_FLAG00 IN NUMBER DEFAULT 0, V_GHZYID IN NUMBER, V_RETURN OUT NUMBER, -- 1,3 前台warning 显示 2 前台回滚操作 4 前台ASK操作. V_ERROR0 OUT VARCHAR2, V_SFZDZD IN NUMBER DEFAULT 0, P_CFLSH0 IN varchar2 default '0' --处方流水号 ) as -- Person Date Comments -- CSF 2008.07.11 广东省中医院增加所有处方限制限制 -- qks 2009.03.03 广东省中医院增加广州居民医保限制:最近2天之内医保支付总金额超过40元,医生保存处方时要提示,允许保存。MZYS-20090304-001 -- qks 2009.03.04 广东省中医院增加公医证头再区分判断。MZYS-20090404-001 -- zhangwz 2010.05.25 增加参数 YS_YBBRYTCFZJE 控制医保病人门诊一天处方总金额(0不做限制 >0为所限制金额;默认值为0) MZYS-20100518-002 -- qks 2010.05.30 闽清县医院要求每张处方金额超过200元时给予提示。 -- zhangwz 2010.09.01 增加参数 YS_GHLBZJYEXZ 限制某种(BM_GHLBB0.LBBH00)类别的挂号的处方总金额不能超过 30 元. MZYS-20100824-001 -- zhanghr 2010.09.02 肺科甘安合剂每天限制两瓶 -- csf 2010.11.08 BM_TSXZ00增加字段XZLB00 ,原有的限制加默认值xzlb00=0(针对一个挂号号的处方限制),现扩张功能,实现针对一天处方和一张处方的限制。 -- csf 2011.01.22 控制皮试药,必须输入皮试,除非用法为 "脱敏"或皮试类别为 “免试” “续注” ,该功能新增参数YS_PSYPWTXPSSFXZBC控制 -- zhangwz 2011.02.24 更改YS_PSYPWTXPSSFXZBC启用时处方界面不选择用法能时没有皮试内容也能保存成功 by MZYS-20110221-001. -- liuj 2011.04.07 增加参数MZYS_DLKSXYCFXZ可限制某个登入科室,不能开西药处方。by MZYS-20110329-001 -- liuj 2011.04.13 增加参数MZYS_ZCYCFSFBXTXNJJL控制中药处方浓煎剂量字段是否必填 byMZYS-20110414-001 -- csf 2011.04.22 如果医生开具的的处方是参数(XT_ZDYBYPMLXYSPBR)定义的病人且包含了需要审批的目录(目录定义在通用字典),则提示病人当前药品是否已经审批。 ------------------------- 同时处理,同个医院存在多个提示,应该一起提示,不应该只返回最后一个提示。 -- csf 2011.05.04 指定费别的病人不能开具处方。 -- csf 2011.05.24 病人需要审批目录定义方式变了,审批的方式也变了,所以对病人是否审批的判断提示也做相应的修改。 -- csf 2011.06.23 XT_ZDYBYPMLXYSPBR参数要维护所有参与控制的病人类别,太麻烦,不用参数而直接用通用字典判断。 -- csf 2011.07.05 扩张参数YS_LRZDXZ 实现西药处方要西医诊断,中药处方要中医诊断的限制,西成药和中药处方前台程序增加的时候就已经实现控制了,本过程的保存限制,主要考虑毒麻处方。 -- csf 2011.07.28 BM_TSXZ00加xzlb00=7,控制单张中药处方的最大帖数。 --laijg 2011.08.05 莆田市涵江医院指定的诊断不允许增加处方,在通用字典中维护 -- csf 2011.08.22 莆田附属第二医院,用法含静脉滴注的药品,只能开1天。 -- csf 2011.08.22 中药处方配伍禁忌提示"十八反、十九畏" -- csf 2011.09.16 老年医院只允许开审批通过的药品,且这个审批通过的药品数量也要做限制,加参数控制。 -- csf 2011.10.20 医保目录审批记录加条件SPLB00='0',以及专人专用审批的药品目录处理。 -- laijg 2011.11.29 增加默认参数,控制是否指定的诊断不允许增加处方,在通用字典中维护 -- zhangwz 2011.12.05 增加参数 YS_SFGJYBZXLBXZMXYPKJJGTS 控制某些医保中心类别的本院部分药品的开具间隔天数 by MZYS-20111128-001. -- CSF 2011.12.15 审批药品的数量限制的判断要具体到时间点。 ZYYS-20111130-003 -- zhangwz 2011.12.28 YS_SFGJYBZXLBXZMXYPKJJGTS 控制的语句肺科医院会用错索引导致比较慢,把 YPNM00=a.YPNM00 变更为 YPNM00+0=a.YPNM00 by MZYS-20111228-002. -- CSF 2012.01.17 指定的药品只能儿科使用,非儿科使用不允许保存,指定的药品用通用字典来维护字典名称为“儿科专用药品目录” MZYS-20120117-001。 -- DSM 2012.05.18 增加一个功能,如果医生登陆的科室为 急诊外科,那么限制他开静脉滴注的处方,持续天数只允许1天 for MZYS-20120503-001。 -- DSM 2012.06.12 判断浓煎剂量时要加条件,应为退的处方的浓煎量是为空,这样会导致开不了处方 for MZYS-20120604-001 -- --------- ---------- -------------------------------------------------- C_BRID00 NUMBER(10); C_FBBH00 NUMBER(5); C_YBZXLB CHAR(1); C_YBBRLB CHAR(1); C_BJSL00 NUMBER(12,2); C_JYSL00 NUMBER(12,2); C_SL0000 NUMBER(12,2); C_XZMC00 BM_TSXZDM.XZMC00%TYPE;--限制提示 I_BH0000 BM_TSXZ00.BH0000%TYPE;--限制序号 C_BJSL00_YTCF NUMBER(12,2); C_JYSL00_YTCF NUMBER(12,2); LS_LJSYSL YF_MZCFMX.YPZSL0%type;--药品数量 C_SL0000_YTCF NUMBER(12,2); C_XZMC00_YTCF BM_TSXZDM.XZMC00%TYPE;--限制提示 I_BH0000_YTCF BM_TSXZ00.BH0000%TYPE;--限制序号 C_BJSL00_YZCF NUMBER(12,2); C_JYSL00_YZCF NUMBER(12,2); C_SL0000_YZCF NUMBER(12,2); C_XZMC00_YZCF BM_TSXZDM.XZMC00%TYPE;--限制提示 I_BH0000_YZCF BM_TSXZ00.BH0000%TYPE;--限制序号 V_COUNT0 NUMBER(5); --计数器 C_RETURN NUMBER(5); --本次限制是否跳过,1跳过,0检查 C_RETURN1 NUMBER(5); --本次限制是否跳过,1跳过,0检查 C_RETURN2 NUMBER(5); --本次限制是否跳过,1跳过,0检查 C_GHLB00 SF_BRXXB0.GHLB00%TYPE; C_GHKS00 SF_BRXXB0.GHKS00%TYPE; C_SFCZ00 SF_BRXXB0.SFCZ00%TYPE; C_SFJE00 NUMBER(8,2); C_MFHXZE NUMBER(8,2); SFQYNBF0 CHAR(1); C_YBZFJE NUMBER(12,2); C_BRGFZH BM_BRXXB0.BRGFZH%TYPE; C_SFCZZT CHAR(1); C_YBBRYTCFZJE number(10,2); --医保病人一天处方总金额 V_CFJE00 BM_YD0000.KCJE00%TYPE; --今天处方总金额 V_CFLSH0 YF_MZCF00.CFLSH0%TYPE; C_GHLBMC BM_GHLBB0.LBMC00%TYPE; --挂号类别名称 v_ypmc00 varchar2(5000); --药品名称 v_ypmc01 varchar2(225); --药品名称 C_KDKS00 VARCHAR2(225); v_SFLJSCCWTS CHAR(1); --是否要和上一个判断的错误一起提示 0 不要 1要 ls_XZBRFB VARCHAR2(50); --指定费别的病人不允许开处方。 v_ypdlbh VARCHAR2(2); PZB0000 BM_YPJJB0.ZB0000%TYPE; --禁忌药品组。 PJJYPMC varchar2(200); --禁忌药品组名称 v_bz0000 char(1); lv_XTCS_VALUE0 XT_XTCS00.VALUE0%TYPE; --系统参数对应的值 lv_TS_clc varchar2(4000); --提示处理串 iPos number(2); iPos1 number(2); ls_XZKSBH varchar(20); --被限制的部门 ls_XZYFID varchar(20); --被限制的用法 ls_XZCXTS varchar(2); --被限制的天数 ls_BMMC00 BM_BMBM00.BMMC00%type; ls_YYSJ00 varchar2(10); BEGIN --0表示成功, --1表示违反警告, --2表示违反限制。 --3表示其他错误。 V_RETURN:=0; V_ERROR0:='没有错误'; v_SFLJSCCWTS:='0'; IF V_FLAG00=0 THEN BEGIN SELECT BRID00 INTO C_BRID00 FROM SF_BRXXB0 WHERE GHID00=V_GHZYID; EXCEPTION WHEN OTHERS THEN V_RETURN:=3; V_ERROR0:='查无此人!'; RETURN; END; ELSE BEGIN SELECT BRID00 INTO C_BRID00 FROM ZY_BRXXB0 WHERE ZYID00=V_GHZYID; EXCEPTION WHEN OTHERS THEN V_RETURN:=3; V_ERROR0:='查无此人!'; RETURN; END; END IF; BEGIN SELECT A.FBBH00,B.YBZXLB,A.YBBRLB INTO C_FBBH00,C_YBZXLB,C_YBBRLB 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; BEGIN select ','||trim(value0)||',' into ls_XZBRFB from xt_xtcs00 where name00 = 'YS_ZDFBBRBNKCF'; --控制某种费别的病人不允开处方 EXCEPTION WHEN OTHERS THEN ls_XZBRFB:=',-1,'; END; if instr(ls_XZBRFB,','||to_char(C_FBBH00)||',')>0 THEN V_RETURN:=2; V_ERROR0:='此费别病人不能开处方!'; return; end if; C_BRGFZH:=''; C_SFCZZT:='N'; select count(1) into V_COUNT0 from xt_yyxx00 where YYJC00 ='广东省中医院'; --add by qks MZYS-20090304-002 if V_COUNT0>0 then select nvl(trim(BRGFZH),'') into C_BRGFZH from bm_brxxb0 where brid00=C_BRID00; --是否存在公医证头 select count(1) into V_COUNT0 from BM_TSXZ00 WHERE (FBBH00=0 OR FBBH00=C_FBBH00) AND (YBZXLB='Z' OR YBZXLB=C_YBZXLB) AND (YBBRLB='Z' OR YBBRLB=C_YBBRLB) and instrb(C_BRGFZH,GYZT00)=1 and XZLB00=0; if V_COUNT0>0 then --存在 C_SFCZZT:='Y'; end if; end if; --单个挂号所有处方总金额限制 0 --每张处方方总金额限制 1 C_RETURN:=0; --是否存在某个挂号处方金额的限制 0存在 1 不存在 C_RETURN1:=0;--是否存在某天处方金额的限制 0存在 1 不存在 C_RETURN2:=0;--是否存在某张处方金额的限制 0存在 1 不存在 --取挂号号对应的报警金额、禁用金额的 BEGIN SELECT BJSL00,JYSL00,bh0000 INTO C_BJSL00,C_JYSL00,i_bh0000 FROM BM_TSXZ00 WHERE (FBBH00=0 OR FBBH00=C_FBBH00) AND (YBZXLB='Z' OR YBZXLB=C_YBZXLB) AND (YBBRLB='Z' OR YBBRLB=C_YBBRLB) AND ((GYZT00 is null) and (C_SFCZZT='N') or (instrb(C_BRGFZH,GYZT00)=1)) AND ROWNUM=1 AND XZLB00=0 ; EXCEPTION WHEN OTHERS THEN C_RETURN:=1; -- V_ERROR0:='没有错误'; --继续下一个限制 END; --Begin select nvl(max(trim(xzmc00)),' ') into c_xzmc00 from BM_TSXZDM where bh0000=i_bh0000 and rownum=1; --exception --when others then --c_xzmc00:=' '; --end; --取一天的处方对应的报警金额、禁用金额的 BEGIN SELECT BJSL00,JYSL00,bh0000 INTO C_BJSL00_YTCF,C_JYSL00_YTCF,i_bh0000_YTCF FROM BM_TSXZ00 WHERE (FBBH00=0 OR FBBH00=C_FBBH00) AND (YBZXLB='Z' OR YBZXLB=C_YBZXLB) AND (YBBRLB='Z' OR YBBRLB=C_YBBRLB) AND ((GYZT00 is null) and (C_SFCZZT='N') or (instrb(C_BRGFZH,GYZT00)=1)) AND ROWNUM=1 AND XZLB00=1 ; EXCEPTION WHEN OTHERS THEN C_RETURN1:=1; -- V_ERROR0:='没有错误'; --继续下一个限制 END; -- Begin select nvl(max(trim(xzmc00)),' ') into c_xzmc00_YTCF from BM_TSXZDM where bh0000=i_bh0000_YTCF and rownum=1; -- exception -- when others then -- c_xzmc00_YTCF:=' '; -- end; --取一张处方对应的报警金额、禁用金额的 BEGIN SELECT BJSL00,JYSL00,bh0000 INTO C_BJSL00_YZCF,C_JYSL00_YZCF,i_bh0000_YZCF FROM BM_TSXZ00 WHERE (FBBH00=0 OR FBBH00=C_FBBH00) AND (YBZXLB='Z' OR YBZXLB=C_YBZXLB) AND (YBBRLB='Z' OR YBBRLB=C_YBBRLB) AND ((GYZT00 is null) and (C_SFCZZT='N') or (instrb(C_BRGFZH,GYZT00)=1)) AND ROWNUM=1 AND XZLB00=2 ; EXCEPTION WHEN OTHERS THEN C_RETURN2:=1; -- V_ERROR0:='没有错误'; --继续下一个限制 END; -- Begin select nvl(max(trim(xzmc00)),' ') into c_xzmc00_YZCF from BM_TSXZDM where bh0000=i_bh0000_YZCF and rownum=1; -- exception -- when others then -- c_xzmc00_YZCF:=' '; -- end; select count(1) into V_COUNT0 from xt_yyxx00 where YYJC00 ='广东省中医院' and C_FBBH00=3 and C_YBZXLB='2'; --add by qks MZYS-20090304-001 if V_COUNT0>0 then BEGIN SELECT SUM(Round(b.LSDJ00*b.YPZSL0*(1-ZFBL00),2))*0.4 INTO C_SL0000 FROM YF_MZCF00 a,YF_MZCFMX b WHERE a.cflsh0=b.cflsh0 and a.GHID00=V_GHZYID AND a.CFZT00<>'3' and a.jzrq00 is null; EXCEPTION WHEN OTHERS THEN C_SL0000:=0; END; select nvl(sum(YBZFJE),0) into C_YBZFJE from SF_JMYBB0 where brid00=C_BRID00 and to_date(to_char(sysdate,'YYYYMMDD'),'YYYYMMDD')-to_date(SFRQ00,'YYYYMMDD')<=1; if C_YBZFJE+C_SL0000>=C_BJSL00 then V_RETURN:=1; C_RETURN:=1; if C_YBZFJE>0 then V_ERROR0:='该患者记帐结算限额为'||TRIM(TO_CHAR(C_BJSL00))||'元,已结算'||TO_CHAR(C_YBZFJE)||'元,本次记帐'||TO_CHAR(C_SL0000)||'元,已超额'; else V_ERROR0:='该患者记帐结算限额为'||TRIM(TO_CHAR(C_BJSL00))||'元,本次记帐'||TO_CHAR(C_SL0000)||'元,已超额'; end if; return; end if; end if; IF C_RETURN=0 THEN --闽清县医院要求每张处方金额超过200元时给予提示 select count(*) into V_COUNT0 from xt_yyxx00 where YYJC00 like '%闽清县医院%' ; IF V_COUNT0>0 and V_FLAG00=0 then C_SL0000:=0; select nvl(MAX(CFLSH0),'0') into V_CFLSH0 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00='0'; if V_CFLSH0<>0 then SELECT CFZJE0 INTO C_SL0000 FROM YF_MZCF00 WHERE CFLSH0=V_CFLSH0; IF C_SL0000>=C_BJSL00 THEN V_RETURN:=3; V_ERROR0:='处方金额'||Trim(to_char(C_SL0000,'9999990.00'))||'元,超过报警金额'||to_char(C_BJSL00)||'元!'; END IF; END IF; END IF; -----------------------------通用处理1:控制某个挂号号所有处方的报警金额,禁用金额begin------------------------ BEGIN SELECT SUM(CFZJE0) INTO C_SL0000 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00<>'3'; EXCEPTION WHEN OTHERS THEN C_SL0000:=0; END; 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 if v_SFLJSCCWTS='0' then V_ERROR0:=C_XzMC00; else V_ERROR0:=substr(V_ERROR0||' '||C_XzMC00,1,220); end if; else if v_SFLJSCCWTS='0' then V_ERROR0:='当前挂号的所有处方总金额超过报警金额:'||TRIM(TO_CHAR(C_BJSL00)); --继续下一个限制 else V_ERROR0:=substr(V_ERROR0||' 当前挂号的所有处方总金额超过报警金额:'||TRIM(TO_CHAR(C_BJSL00)),1,220); end if; end if; v_SFLJSCCWTS:='1'; -- RETURN; --退出 END IF; END IF; -----------------------------通用处理1:控制某个挂号号所有处方的报警金额,禁用金额end------------------------ END IF; -----------------------------通用处理2:控制一天的所有处方的报警金额,禁用金额begin------------------------ if C_RETURN1=0 then begin SELECT SUM(CFZJE0) INTO C_SL0000 FROM YF_MZCF00 WHERE BRID00=C_BRID00 and SRRQ00=to_char(sysdate,'YYYYMMDD') and CFZT00<>'3'; exception when others then C_SL0000:=0; end; if C_SL0000>C_JYSL00_YTCF THEN V_RETURN:=2; if c_xzmc00_YTCF<>' ' then V_ERROR0:=C_XzMC00_YTCF; else V_ERROR0:='当前病人的当天处方总金额超过禁用金额:'||TRIM(TO_CHAR(C_JYSL00_YTCF)); end if; return; else if C_SL0000>C_BJSL00_YTCF then V_RETURN:=1; if v_SFLJSCCWTS='0' then if c_xzmc00_YTCF<>' ' then V_ERROR0:=C_XzMC00_YTCF; else V_ERROR0:='当前病人的当天处方总金额超过报警金额:'||TRIM(TO_CHAR(C_BJSL00_YTCF)); --继续下一个限制 end if; else if c_xzmc00_YTCF<>' ' then V_ERROR0:=substr(V_ERROR0||' '||C_XzMC00_YTCF,1,220); else V_ERROR0:=substr(V_ERROR0||' 当前病人的当天处方总金额超过报警金额:'||TRIM(TO_CHAR(C_BJSL00_YTCF)),1,220); --继续下一个限制 end if; end if; --RETURN; --退出 v_SFLJSCCWTS:='1'; end if; end if; end if; -----------------------------通用处理2:控制一天的所有处方报警金额,禁用金额end------------------------ -----------------------------通用处理3:控制一张处方的报警金额,禁用金额begin------------------------ if C_RETURN2=0 then begin SELECT NVL(max(CFZJE0),0) INTO C_SL0000 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00<>'3'; exception when others then C_SL0000:=0; end; if C_SL0000>C_JYSL00_YZCF THEN V_RETURN:=2; if c_xzmc00_YZCF<>' ' then V_ERROR0:=C_XzMC00_YZCF; else V_ERROR0:='当前病人的单张处方金额超过禁用金额:'||TRIM(TO_CHAR(C_JYSL00_YZCF)); end if; return; else if C_SL0000>C_BJSL00_YZCF then V_RETURN:=1; if v_SFLJSCCWTS='0' then if c_xzmc00_YZCF<>' ' then V_ERROR0:=C_XzMC00_YZCF; else V_ERROR0:='当前病人的单张处方金额超过报警金额:'||TRIM(TO_CHAR(C_BJSL00_YZCF)); --继续下一个限制 end if; else if c_xzmc00_YZCF<>' ' then V_ERROR0:=substr(V_ERROR0||' '||C_XzMC00_YZCF,1,220); else V_ERROR0:=substr(V_ERROR0||' 当前病人的单张处方金额超过报警金额:'||TRIM(TO_CHAR(C_BJSL00_YZCF)),1,220); --继续下一个限制 end if; end if; --RETURN; --退出 v_SFLJSCCWTS:='1'; end if; end if; end if; -----------------------------通用处理3:控制一张处方报警金额,禁用金额end------------------------ --专人专用药品目录限制---begin-------------------------------- select count(*) into V_COUNT0 from BM_TYZD00 where ZDMC00='专人专用审批的药品目录' and YXBZ00='1' ; if V_COUNT0>0 then v_ypmc00:=' '; for c_wspyp in (select distinct b.YPMC00 from YF_MZCF00 a,YF_MZCFMX b ,BM_TYZD00 c where a.GHID00=V_GHZYID and a.CFZT00='0' and a.CFLSH0=b.CFLSH0 and b.CXBZ00='Z' and b.SFZBY0='N' 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 SPLB00='1' and MZZYBZ='0' 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:=2; V_ERROR0:='药品('||V_YPMC00||')尚未审批,处方不能保存!'; return; end if; end if; --专人专用药品目录限制---end-------------------------------- --如果医生开具的的处方是参数(XT_ZDYBYPMLXYSPBR)定义的病人且包含了需要审批的目录(目录定义在通用字典),则提示病人当前药品是否已经审批。 ---------------------------------------------------------------------------------------------------------------------------------------- select count(*) into V_COUNT0 from BM_TYZD00 where ZDMC00='指定费别审批的药品目录' and YXBZ00='1' and BZDYBH=to_char(C_FBBH00)||'-'||C_YBZXLB||'-'||C_YBBRLB; if V_COUNT0>0 then-- a if V_FLAG00=0 THEN-- b --未审批药品的处理方式:0只提示 1限制保存并且进行数量的控制 select count(*) into V_COUNT0 from XT_XTCS00 where NAME00='YS_WSPYPCLFS' and TRIM(VALUE0)='1'; if V_COUNT0=0 then --c只提示 --针对本次挂号的未记账处方中,是否存在审批目录中的药品,若有存在,判断是否存在有效的审批记录,没有的话进行提示。 v_ypmc00:=' '; for c_wspyp in (select distinct b.YPMC00 from YF_MZCF00 a,YF_MZCFMX b ,BM_TYZD00 c where a.GHID00=V_GHZYID and a.CFZT00='0' and a.CFLSH0=b.CFLSH0 and b.CXBZ00='Z' and b.SFZBY0='N' and b.YPNM00=c.DJ0000 and c.ZDMC00='指定费别审批的药品目录' and c.YXBZ00='1' and c.BZDYBH=to_char(C_FBBH00)||'-'||C_YBZXLB||'-'||C_YBBRLB and not exists (select 1 from YK_YBMLSP where BRID00=C_BRID00 and SPLB00='0' and MZZYBZ='0' 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'; end if; else--限制保存并且进行数量的控制 --针对本次挂号的未记账处方中,是否存在审批目录中的药品,若有存在,判断是否存在有效的审批记录,没有的话进行提示。 v_ypmc00:=' '; for c_wspyp in (select distinct b.YPMC00 from YF_MZCF00 a,YF_MZCFMX b ,BM_TYZD00 c where a.GHID00=V_GHZYID and a.CFZT00='0' and a.CFLSH0=b.CFLSH0 and b.CXBZ00='Z' and b.SFZBY0='N' and b.YPNM00=c.DJ0000 and c.ZDMC00='指定费别审批的药品目录' and c.YXBZ00='1' and c.BZDYBH=to_char(C_FBBH00)||'-'||C_YBZXLB||'-'||C_YBBRLB and not exists (select 1 from YK_YBMLSP where BRID00=C_BRID00 and SPLB00='0' and MZZYBZ='0' 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; v_ypmc01:=' '; --对数量进行限制 for c_yspyp in (select b.YPNM00,b.YPMC00,d.LSH000,SUM(ROUND(b.YPZSL0*b.ZHL000/C.K2J000,3)) BCSL00, SUM(Round(d.SPSL00*d.ZHL000/C.K2J000,3)) SPSL00 from YF_MZCF00 A,YF_MZCFMX B,BM_YD0000 C,YK_YBMLSP D WHERE a.GHID00=V_GHZYID and a.CFLSH0=B.CFLSH0 AND B.CXBZ00='Z' and b.SFZBY0='N' AND b.YPNM00=C.YPNM00 and b.YPNM00=d.YPNM00 and d.BRID00=C_BRID00 and d.SPLB00='0' AND d.MZZYBZ='0' AND d.ZFRQ00='20991231' and d.kssyrq<=to_char(sysdate,'YYYYMMDD') and d.JSSYRQ>=to_char(sysdate,'YYYYMMDD') and d.KSSYRQ||d.KSSYSJ<=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and d.JSSYRQ||d.JSSYSJ>=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and d.SPJG00='1' and d.YPNM00=b.YPNM00 group by b.YPNM00,b.YPMC00,d.LSH000) loop select nvl(SUM(ROUND(b.YPZSL0*b.ZHL000/C.K2J000,3)),0) into LS_LJSYSL from YF_MZCF00 a,YF_MZCFMX b,BM_YD0000 c,YK_YBMLSP d where a.BRID00=C_BRID00 and a.CFLSH0=b.CFLSH0 and b.YPNM00=c_yspyp.YPNM00 and b.SFZBY0='N' and b.CXBZ00='Z' and b.YPNM00=c.YPNM00 and d.LSH000=c_yspyp.LSH000 and a.SRRQ00>=d.KSSYRQ and A.SRRQ00<=D.JSSYRQ and a.SRRQ00||a.SRSJ00>=d.KSSYRQ||d.KSSYSJ and a.SRRQ00||a.SRSJ00<=d.JSSYRQ||d.JSSYSJ; if LS_LJSYSL>c_yspyp.SPSL00 then if v_ypmc01=' ' then v_ypmc01:=c_yspyp.YPMC00||'累计使用'||trim(replace(to_char(LS_LJSYSL,'FM9999990.999')||' ','. ',''))||',审批数量为'|| trim(replace(to_char(c_yspyp.SPSL00,'FM9999990.999')||' ','. ','')); else V_YPMC01:=V_YPMC01||'、'||c_yspyp.YPMC00||'累计使用'||trim(replace(to_char(LS_LJSYSL,'FM9999990.999')||' ','. ',''))||',审批数量为'|| trim(replace(to_char(c_yspyp.SPSL00,'FM9999990.999')||' ','. ','')); end if; end if; end loop; if (v_ypmc00<>' ') and (v_ypmc01<>' ') then V_RETURN:=2; V_ERROR0:=substr('药品('||V_YPMC00||')尚未审批' ||v_ypmc01||',不能保存!',1,220) ; return; elsif (v_ypmc00<>' ') and (v_ypmc01=' ') then V_RETURN:=2; V_ERROR0:=substr('药品('||V_YPMC00||')尚未审批' ||',不能保存!',1,220) ; return; elsif (v_ypmc00=' ') and (v_ypmc01<>' ') then V_RETURN:=2; V_ERROR0:=substr(v_ypmc01||',不能保存!',1,220) ; return; end if; --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'; --end if; end if; --c提示结束 end if; --b end if;--a ---------------------------------------------------------------------------------------------------------------------------------------- --建阳市立医院要求特殊处理,离休,512人员参加保险,但没有医保中心并新增医保病人类别, --其特征是bm_brxxb0的TYDWMC='建阳市离休、5.12、二乙人员',但要求对这类病人进行处方限制 select count(*) into V_COUNT0 from xt_yyxx00 where YYJC00 ='建阳市立医院' ; IF V_COUNT0>0 then SELECT count(*) into V_COUNT0 FROM BM_BRXXB0 WHERE BRID00=C_BRID00 AND TYDWMC='建阳市离休、5.12、二乙人员'; IF V_COUNT0>0 THEN C_SL0000:=0; SELECT SUM(CFZJE0) INTO C_SL0000 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00<>'3'; IF C_SL0000>80 THEN V_RETURN:=2; V_ERROR0:='所有处方总金额超过禁用数量:'||TRIM(TO_CHAR(C_JYSL00)); RETURN; END IF; END IF; END IF; --老年医院省医保控制110元 select count(*) into V_COUNT0 from xt_yyxx00 where YYJC00 like '%老年医院%' ; IF V_COUNT0>0 then IF C_YBZXLB='1' THEN C_SL0000:=0; SELECT SUM(CFZJE0) INTO C_SL0000 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00<>'3'; IF C_SL0000>110 THEN V_RETURN:=2; V_ERROR0:='所有处方总金额超过省医保的最大数量:110'; RETURN; END IF; END IF; END IF; select count(*) into V_COUNT0 from xt_yyxx00 where YYJC00 like '%邵武市人民医院%'; IF V_COUNT0>0 then SELECT count(*) into V_COUNT0 FROM BM_BRXXB0 WHERE BRID00=C_BRID00 AND TYDWMC='中共邵武市委老干部局(离休)'; IF V_COUNT0>0 THEN C_SL0000:=0; SELECT count(*) INTO C_SL0000 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00<>'3'; IF C_SL0000>1 THEN V_RETURN:=2; V_ERROR0:='一个挂号只能开一张处方'; RETURN; END IF; SELECT SUM(CFZJE0) INTO C_SL0000 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00<>'3'; IF C_SL0000>80 THEN V_RETURN:=2; V_ERROR0:='所有处方总金额超过禁用数量:'||TRIM(TO_CHAR(C_JYSL00)); RETURN; END IF; END IF; END IF; select count(*) into V_COUNT0 from xt_yyxx00 where YYJC00 like '%平潭县医院%'; IF (V_COUNT0>0) and (V_FLAG00=0) then C_SL0000:=0; SELECT SUM(CFZJE0) INTO C_SL0000 FROM YF_MZCF00 WHERE GHID00=V_GHZYID AND CFZT00<>'3'; SELECT GHLB00 into C_GHLB00 FROM SF_BRXXB0 WHERE GHID00=V_GHZYID; SELECT GHKS00 into C_GHKS00 FROM SF_BRXXB0 WHERE GHID00=V_GHZYID; SELECT SFCZ00 into C_SFCZ00 FROM SF_BRXXB0 WHERE GHID00=V_GHZYID; IF C_GHLB00 IS NOT NULL THEN select COUNT(1) INTO V_COUNT0 from sf_fjghf0 a,vw_bm_ybsfdy b where a.FJFFBH=b.SFXMID and (fjghks=C_GHKS00 or nvl(fjghks,0)=0)and fjghlb=C_GHLB00 and fjbrlb=C_SFCZ00 and b.sfyp00='N' and b.ybzxlb=C_YBZXLB and b.ybbrlb=C_YBBRLB and b.fbbh00=C_FBBH00; IF V_COUNT0=0 THEN C_SFJE00:=0; ELSE select SUM(round(nvl(xmje00,0),2)) INTO C_SFJE00 from sf_fjghf0 a,vw_bm_ybsfdy b where a.FJFFBH=b.SFXMID and (fjghks=C_GHKS00 or nvl(fjghks,0)=0)and fjghlb=C_GHLB00 and fjbrlb=C_SFCZ00 and b.sfyp00='N' and b.ybzxlb=C_YBZXLB and b.ybbrlb=C_YBBRLB and b.fbbh00=C_FBBH00; END IF; --Select nvl(SUM(SFJE00),0) INTO C_SFJE00 from VW_SF_ghlb00 where lbbh00=C_GHLB00 and ghks00=-1 and ROWNUM=1; IF C_SFJE00=0 THEN begin select TO_NUMBER(VALUE0) into C_MFHXZE from XT_XTCS00 where NAME00='YS_MFGHXZCFJE'; exception when others then C_MFHXZE:=80; end; IF C_SL0000>C_MFHXZE THEN V_RETURN:=2; V_ERROR0:='所有处方总金额超过限制金额:'||TRIM(TO_CHAR(C_MFHXZE)); RETURN; END IF; END IF; END IF; END IF; select count(*) into V_COUNT0 from xt_yyxx00 where YYJC00 like '%福州肺科医院%'; IF (V_COUNT0>0) and (V_FLAG00=0) then --甘安合剂只能一个病人一天只能开2瓶 select sum(a.YPZSL0) into C_SL0000 from YF_MZCFMX a,YF_MZCF00 b where a.CFLSH0=b.CFLSH0 and a.YPMC00 like '%甘安合剂%' and (SRRQ00=(select GHRQ00 from SF_BRXXB0 where GHID00=V_GHZYID) or substr(to_date(srrq00||srsj00,'yyyy-mm-dd-hh24-mi-ss')-1/4,1,11) =(select to_date(GHRQ00,'yyyy-mm-dd') from SF_BRXXB0 where GHID00=V_GHZYID)) and BRID00=C_BRID00 and (a.YPZSL0>0 or (a.YPZSL0<0 and CFZT00 not in ('0','3','4'))); if C_SL0000>2 then V_RETURN:=2; V_ERROR0:='甘安合剂每天只允许开2瓶!'; RETURN; end if; end if; IF V_FLAG00=0 THEN SELECT COUNT(*) INTO V_COUNT0 FROM XT_YYXX00 WHERE YYJC00 LIKE '%漳浦县中医院%'; IF V_COUNT0>0 then SELECT count(*) into V_COUNT0 FROM SF_BRXXB0 WHERE GHID00=V_GHZYID AND GHJE00=0; IF V_COUNT0>0 THEN V_RETURN:=2; V_ERROR0:='此次挂号为免费挂号,不允许开处方!'; RETURN; END IF; END IF; END IF; if V_FLAG00=0 then select to_number(nvl(max(trim(value0)),'0')) into C_YBBRYTCFZJE from xt_xtcs00 where name00='YS_YBBRYTCFZJE'; if C_YBBRYTCFZJE>0 then select nvl(round(sum(C.YPZSL0*LSDJ00),2),0) CFJE00 into V_CFJE00 from SF_BRXXB0 A,YF_MZCF00 B,YF_MZCFMX C where A.BRID00=C_BRID00 and A.GHID00=B.GHID00 and B.CFZT00 IN ('0','1','2') and A.FBBH00=3 and B.CFLSH0=C.CFLSH0 and B.SRRQ00=TO_CHAR(SYSDATE,'YYYYMMDD'); if V_CFJE00>C_YBBRYTCFZJE then V_RETURN:=2; V_ERROR0:='医保病人一天处方总金额不能超过'||trim(to_char(C_YBBRYTCFZJE))||'元,超过'||trim(to_char(V_CFJE00-C_YBBRYTCFZJE))||'元,不能进行保存!'; RETURN; end if; end if; end if; -----------------------------zhangwz on 20100901 by MZYS-20100824-001 增加限制某些类别的挂号处方总金额不能超过30元------------------------ begin select to_number(VALUE0) into C_GHLB00 from XT_XTCS00 where NAME00='YS_GHLBZJYEXZ'; exception when others then C_GHLB00:=-1; end; if (V_FLAG00=0) and (C_GHLB00<>-1) then begin select trim(b.LBMC00) into C_GHLBMC from SF_BRXXB0 a,BM_GHLBB0 b where a.GHID00=V_GHZYID and a.GHLB00=b.LBBH00 and b.LBBH00=C_GHLB00 and b.SFYX00='Y' ; exception when others then C_GHLBMC:=''; end; if C_GHLBMC is not null then select nvl(round(sum(a.HJJE00),2),0) into C_SFJE00 from SF_BRFY00 a where a.MZID00=V_GHZYID; select nvl(round(sum(C.YPZSL0*LSDJ00),2),0)+C_SFJE00 into C_SFJE00 from SF_BRXXB0 A,YF_MZCF00 B,YF_MZCFMX C where A.GHID00=V_GHZYID and A.GHID00=B.GHID00 and B.CFZT00='0' and B.CFLSH0=C.CFLSH0 ; select nvl(round(sum(a.ZJE000),2),0)+C_SFJE00 into C_SFJE00 from YJ_YW0000 a where a.ZYGHID=V_GHZYID and a.XMZT00 in ('0','1'); if C_SFJE00>30 then V_RETURN:=2; V_ERROR0:='系统限制 '||C_GHLBMC||' 类挂号费用总金额不能超过 30 元,现超过 '||trim(to_char(C_SFJE00-30))||' 元,不能进行保存!'; return; end if; end if; end if; -----------------------------皮试药品控制------------------------ select Count(*) into V_COUNT0 from XT_XTCS00 where trim(NAME00)='YS_PSYPWTXPSSFXZBC' and trim(VALUE0)='Y'; if V_COUNT0>0 then v_ypmc00:=' '; for c_psyp in (select a.* from YF_MZCFMX a,YF_MZCF00 b,BM_YD0000 c where b.GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and ((a.YPYFMC not like '%脱敏%' and a.YPYFMC not like '%免试%') or (a.YPYFMC is null)) -- in ('脱敏','免试','续注') and ((instr(a.BZ0000,'带出处方')=0) or (a.BZ0000 is null)) and a.YPNM00=c.YPNM00 and c.SFPSYY='Y' and a.PSLBID is null) loop if V_YPMC00=' ' then V_YPMC00:=C_PSYP.YPMC00; else V_YPMC00:=V_YPMC00||'、'||C_PSYP.YPMC00; end if; end loop; if V_YPMC00<>' ' then V_RETURN:=2; V_ERROR0:='药品('||V_YPMC00||')为皮试药,请输入皮试后,再保存!'; return; end if; end if; -----------------------------liuj on 20110407 by MZYS-20110329-001 限制某个登入科室,不能开西药处方。------------------------ begin select trim(VALUE0) into C_KDKS00 from XT_XTCS00 where NAME00='MZYS_DLKSXYCFXZ'; exception when others then C_KDKS00:='-1'; end; if (V_FLAG00=0) and (C_KDKS00<>'-1') then begin select count(*) into C_SL0000 from YF_MZCF00 where YPDLBH='0' and BRID00=C_BRID00 and GHID00=V_GHZYID and (instrb(','||C_KDKS00||',',','||to_char(GHKS00)||',')<>0); exception when others then C_SL0000:=9999; end; if (C_SL0000<>0) and (C_SL0000<>9999) then V_RETURN:=2; V_ERROR0:='系统限制该科室西药处方不能进行保存!请与管理员联系!'; return; end if; end if; ---------------------------------------------------------------------- select Count(*) into V_COUNT0 from XT_XTCS00 where NAME00='MZYS_ZCYCFSFBXTXNJJL' and trim(VALUE0)='Y' ; if (V_FLAG00=0) and (V_COUNT0>0) then begin select count(*) into C_SL0000 from YF_MZCF00 a,YS_CFXXB0 b where a.YPDLBH='2' and a.BRID00=C_BRID00 and a.GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and a.ZYNJJL IS NULL; exception when others then C_SL0000:=99999; end; if (C_SL0000<>0) and (C_SL0000<>99999) then V_RETURN:=2; V_ERROR0:='系统限制中草药处方浓煎剂量字段不能为空!'; return; end if; end if; ------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------- --邵武市人民医院 select Count(*) into V_COUNT0 from XT_XTCS00 where NAME00='YS_LRZDXZ' and trim(VALUE0)='8' ; IF (V_COUNT0>0) and (V_FLAG00=0) then select nvl(max(ypdlbh),'-1') into v_ypdlbh from YF_MZCF00 where GHID00=V_GHZYID ; if v_ypdlbh<>'-1' then if v_ypdlbh='2' then select count(*) into V_COUNT0 from YS_BRZDXX where GHID00=V_GHZYID AND SFXYZD='0' ; if V_COUNT0=0 then V_RETURN:=2; V_ERROR0:='要有中医诊断,才能开具中药处方!'; RETURN; end if; else select count(*) into V_COUNT0 from YS_BRZDXX where GHID00=V_GHZYID AND SFXYZD='1' ; if V_COUNT0=0 then V_RETURN:=2; V_ERROR0:='要有西医诊断,才能开具西药处方!'; RETURN; end if; end if; end if; end if; -------------------------------------------------------------------------------------- if V_FLAG00=0 then C_RETURN:=0;--是否存在某张处方金额的限制 0存在 1 不存在 --取挂号号对应的报警金额、禁用金额的 BEGIN SELECT BJSL00,JYSL00,bh0000 INTO C_BJSL00,C_JYSL00,i_bh0000 FROM BM_TSXZ00 WHERE (FBBH00=0 OR FBBH00=C_FBBH00) AND (YBZXLB='Z' OR YBZXLB=C_YBZXLB) AND (YBBRLB='Z' OR YBBRLB=C_YBBRLB) AND ((GYZT00 is null) and (C_SFCZZT='N') or (instrb(C_BRGFZH,GYZT00)=1)) AND ROWNUM=1 AND MZZYBZ='0' AND XZLB00=7 ; EXCEPTION WHEN OTHERS THEN C_RETURN:=1; -- V_ERROR0:='没有错误'; --继续下一个限制 END; if C_RETURN=0 then select nvl(max(trim(xzmc00)),' ') into c_xzmc00 from BM_TSXZDM where bh0000=i_bh0000 and rownum=1; select nvl(max(ZYTS00),0) into C_SL0000 from YF_MZCF00 where GHID00=V_GHZYID and CFZT00='0' and CFZJE0>=0; 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 v_SFLJSCCWTS='0' then if c_xzmc00<>' ' then V_ERROR0:=c_xzmc00; else V_ERROR0:='病人中药处方帖数超过:'||TRIM(TO_CHAR(C_BJSL00)); --继续下一个限制 end if; else if c_xzmc00<>' ' then V_ERROR0:=substr(V_ERROR0||' '||c_xzmc00,1,220); else V_ERROR0:=substr(V_ERROR0||' 病人中药处方帖数超过:'||TRIM(TO_CHAR(C_BJSL00)),1,220); --继续下一个限制 end if; end if; --RETURN; --退出 v_SFLJSCCWTS:='1'; end if; end if; end if; end if; ---------------------------------------------------------------------------------------- --莆田市涵江医院指定的诊断不允许增加处方,在通用字典中维护 if (V_SFZDZD<>1) or (V_SFZDZD is null) then v_bz0000:=0; end if; if v_bz0000=0 then select count(*) into V_COUNT0 from bm_tyzd00 where zdmc00='指定诊断名称维护' and yxbz00='1'; if V_COUNT0>0 then select count(*) into V_COUNT0 from ys_brzdxx a where GHID00=V_GHZYID and exists (select 1 from bm_tyzd00 where zdmc00='指定诊断名称维护' and yxbz00='1' and mc0000=a.zdmc00); IF V_COUNT0>0 THEN V_RETURN:=2; V_ERROR0:='指定的诊断不允许增加处方'; RETURN; END IF; end if; end if; ------------------------------------------------------------------------------------------ select count(*) into V_COUNT0 from XT_XTCS00 where name00='YS_JMDZYYTSXZ' and TRIM(VALUE0)='Y'; if V_COUNT0>0 then v_ypmc00:=' '; for c_psyp in (select a.* from YF_MZCFMX a,YF_MZCF00 b where b.GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and a.YPYFMC like '%静脉滴注%' and a.YYSJ00>1 and a.CXBZ00='Z') loop if V_YPMC00=' ' then V_YPMC00:=C_PSYP.YPMC00; else V_YPMC00:=V_YPMC00||'、'||C_PSYP.YPMC00; end if; end loop; if V_YPMC00<>' ' then V_RETURN:=2; V_ERROR0:='药品('||V_YPMC00||')的用法为“静脉滴注”,用药时间超过1天,请修改后,再保存!'; return; end if; end if; ------------------------------------------------------------------------------------------ ----------------------------- 增加参数 YS_SFGJYBZXLBXZMXYPKJJGTS 控制某些医保中心类别的本院部分药品的开具间隔天数 by MZYS-20111128-001. --------- begin select VALUE0 into lv_XTCS_VALUE0 from XT_XTCS00 where NAME00='YS_SFGJYBZXLBXZMXYPKJJGTS'; exception when others then lv_XTCS_VALUE0:='N'; end; if (trim(lv_XTCS_VALUE0)<>'N') and (C_FBBH00=3) and P_CFLSH0<>'0' then begin lv_XTCS_VALUE0:='#'||trim(lv_XTCS_VALUE0)||'#'; lv_TS_clc:='OK'; v_ypmc00:=''; declare cursor c_tsypts is --特殊药品提示 -- select a.YPMC00,to_char(a.YPZSL0)||a.CFDW00 as YPSL00,b.SRRQ00,c.JZYSXM,SP_YS_TSYPJGJY(lv_XTCS_VALUE0,c.YBZXLB,a.YPNM00,round(sysdate-to_date(c.GHRQ00,'YYYYMMDD')),1) JGTS00 select distinct a.YPMC00,SP_YS_TSYPJGJY(lv_XTCS_VALUE0,c.YBZXLB,a.YPNM00,round(sysdate-to_date(c.GHRQ00,'YYYYMMDD')),1) JGTS00 from YF_MZCFMX a,YF_MZCF00 b,SF_BRXXB0 c where a.CFLSH0=b.CFLSH0 and b.GHID00=c.GHID00 and ((b.CFZT00='1') or (b.CFZT00='2') or (b.CFZT00='0' and b.SRRQ00=to_char(sysdate,'YYYYMMDD'))) and c.BRID00=C_BRID00 and c.GHID00<>V_GHZYID and SP_YS_TSYPJGJY(lv_XTCS_VALUE0,c.YBZXLB,a.YPNM00,round(sysdate-to_date(c.GHRQ00,'YYYYMMDD')),0)>0 -- and exists (select 1 from YF_MZCFMX where CFLSH0=rpad(P_CFLSH0,16) and YPNM00=a.YPNM00) order by a.YPMC00; by MZYS-20111228-002. and exists (select 1 from YF_MZCFMX where CFLSH0=rpad(P_CFLSH0,16) and YPNM00+0=a.YPNM00) order by a.YPMC00; begin for tsypts in c_tsypts loop -- if v_ypmc00=tsypts.YPMC00 then -- begin -- if lv_TS_clc='OK' then lv_TS_clc:=tsypts.JZYSXM||' '||tsypts.SRRQ00||' '||trim(tsypts.YPSL00); -- else lv_TS_clc:=lv_TS_clc||';'||tsypts.JZYSXM||' '||tsypts.SRRQ00||' '||trim(tsypts.YPSL00); -- end if; -- end; -- else begin -- if lv_TS_clc='OK' then lv_TS_clc:=to_char(tsypts.JGTS00)||'天内已开过药品 '||tsypts.YPMC00||' ('||tsypts.JZYSXM||' '||tsypts.SRRQ00||' '||trim(tsypts.YPSL00); -- else lv_TS_clc:=lv_TS_clc||'.)'||chr(13)||chr(13)||to_char(tsypts.JGTS00)||'天内已开过药品 '||tsypts.YPMC00||' ('||tsypts.JZYSXM||' '||tsypts.SRRQ00||' '||trim(tsypts.YPSL00); -- end if; -- end; -- end if; -- v_ypmc00:=tsypts.YPMC00; if lv_TS_clc='OK' then lv_TS_clc:=to_char(tsypts.JGTS00)||'天内已开过药品 '||tsypts.YPMC00||'.'; else lv_TS_clc:=lv_TS_clc||chr(13)||chr(13)||to_char(tsypts.JGTS00)||'天内已开过药品 '||tsypts.YPMC00||'.'; end if; end loop; end; end; if lv_TS_clc<>'OK' then begin V_RETURN:=4; if lengthb(lv_TS_clc)>200 then --太长界面会报错 lv_TS_clc:=substrb(lv_TS_clc,1,200)||'......'; end if; V_ERROR0:=lv_TS_clc||chr(13)||chr(13)||'请问是否继续保存处方?'; return; end; end if; end if; ------------------------------------------------------------------------------------------------------------------------- --非儿科不能使用药品控制 Select count(*) into V_COUNT0 from BM_TYZD00 a,BM_YD0000 b where a.ZDMC00='儿科专用药品目录' and a.YXBZ00='1' and a.DJ0000=b.YPNM00; if V_COUNT0>0 then v_ypmc00:=' '; for c_erzyyp in (select distinct c.YPMC00 from BM_BMBM00 a,YF_MZCF00 b,YF_MZCFMX c where b.GHID00=V_GHZYID and b.GHKS00=a.BMBH00 and a.BMMC00 not like '%儿%' and b.CFLSH0=c.CFLSH0 and exists (select 1 from BM_TYZD00 d,BM_YD0000 e where d.ZDMC00='儿科专用药品目录' and d.YXBZ00='1' and d.DJ0000=e.YPNM00 and e.YPNM00=c.YPNM00)) loop if V_YPMC00=' ' then V_YPMC00:=c_erzyyp.YPMC00; else V_YPMC00:=V_YPMC00||'、'||c_erzyyp.YPMC00; end if; if V_YPMC00<>' ' then V_RETURN:=2; V_ERROR0:='药品('||V_YPMC00||')只能儿科使用,处方保存不成功!'; end if; end loop; end if; ------------------------------------------------------------------------------------------------------------------------- select count(*) into V_COUNT0 from XT_XTCS00 where name00='YS_MZZYCFPWJJTS' and TRIM(VALUE0)='Y'; if V_COUNT0>0 then v_ypmc00:=' '; for c_psyp in (select cflsh0 from YF_MZCF00 b where b.GHID00=V_GHZYID and b.YPDLBH='2' ) loop v_ypmc00:=' '; for c_pysyp_dzcf in (select YPNM00 from YF_MZCFMX where CFLSH0=c_psyp.CFLSH0 and CXBZ00='Z') loop if V_YPMC00=' ' then V_YPMC00:=c_pysyp_dzcf.YPNM00; else V_YPMC00:=V_YPMC00||','||to_char(c_pysyp_dzcf.YPNM00); end if; end loop; if V_YPMC00<>' ' then PZB0000:=0; PJJYPMC:=''; Sp_Bm_Ypjjpd(V_YPMC00,'0',0,PZB0000,PJJYPMC); if PZB0000>0 then V_RETURN:=1; if v_SFLJSCCWTS='0' then V_ERROR0:='该处方中出现‘十八反、十九畏’,如必须使用,请输入使用原因!'; else V_ERROR0:=substr(V_ERROR0||'该处方中出现‘十八反、十九畏’,如必须使用,请输入使用原因!',1,220); end if; v_SFLJSCCWTS:='1'; goto afterbcxh; end if; end if; end loop; end if; ------------------------------------------------------------------------------------------------------------------------- --急诊科,开静脉滴注时持续天数只能1天--2012.05.17 add by dsm for 省二MZYS-20120503-001 begin select trim(VALUE0) into lv_XTCS_VALUE0 from XT_XTCS00 where NAME00='YS_XZCXTSBMYF'; exception when others then lv_XTCS_VALUE0:='N'; end; if (lv_XTCS_VALUE0<>'N') and instr(lv_XTCS_VALUE0,':')>0 then ls_XZCXTS:='1'; iPos:=instr(lv_XTCS_VALUE0,':'); ls_XZKSBH:=substr(lv_XTCS_VALUE0,1,iPos-1); iPos1:=instr(lv_XTCS_VALUE0,':',1,2); if iPos1>0 then ls_XZYFID:=substr(lv_XTCS_VALUE0,iPos+1,iPos1-iPos-1); begin ls_XZCXTS:=substr(lv_XTCS_VALUE0,iPos1+1,length(trim(lv_XTCS_VALUE0))-iPos1); exception when others then ls_XZCXTS:='1' ; end; --if ls_XZCXTS='' then ls_XZCXTS:='1'; end if; else ls_XZYFID:=''; ls_XZCXTS:='1'; end if; V_YPMC00:=' '; for c_psyp in (select b.YPMC00 from ys_cfxxb0 a,ys_cfmx00 b where a.GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and instr(','||ls_XZKSBH||',', ','||a.GHKS00||',')>0 and instr(','||ls_XZYFID||',', ','||b.YFID00||',')>0 and YYSJ00>to_number(ls_XZCXTS)) loop if V_YPMC00=' ' then V_YPMC00:=C_PSYP.YPMC00; else V_YPMC00:=V_YPMC00||'、'||C_PSYP.YPMC00; end if; end loop; if V_YPMC00<>' ' then select a.GHKS00 into C_GHKS00 from ys_cfxxb0 a,ys_cfmx00 b where a.GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and instr(','||ls_XZKSBH||',', ','||a.GHKS00||',')>0 and instr(','||ls_XZYFID||',', ','||b.YFID00||',')>0 and YYSJ00>=to_number(ls_XZCXTS) and rownum<=1; select BMMC00 into ls_BMMC00 from BM_BMBM00 where BMBH00=C_GHKS00; V_RETURN:=2; V_ERROR0:='对不起,'||ls_BMMC00||'开的静脉滴注处方('||V_YPMC00||')的持续天数不能超过'||ls_XZCXTS||'天,请修改后,再保存!'; end if; end if; ------------------------------------------------------------------------------------------------------------------------- <> ------------------------------------------------------------------------------------------ return; END; /