CREATE OR REPLACE 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 char default '0', --处方流水号 P_YSBH00 in number default 0 --医生YGBH00 ) 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 -- liuj 2012.11.28 肺科甘安合剂两瓶限制存在漏洞:因为系统挂号延后1/4天有效,导致头天午夜12点前挂号开甘安后,过了12点再用同一挂号开甘安将不受限制。for MZYS-20121122-002 -- laijg 2012.12.17 门诊医生站开具‘药品最大零售限量’目录中的药品时,患者每日的最大限量受维护值限制 by MZYS-20121031-004 -- dsm 2012.02.27 药品当日累计天数提示 by MZYS-20130125-001 -- laijg 2013.04.07 肺科‘甘安合剂’特殊限制未考虑到冲销的情况,如果药品已被冲销,再开甘安时会被限制,已修正 by MZYS-20130318-003 -- dsm 2013.05.28 MZYS-20121031-004,该需求修改的当日处方最大零售量限制,过程里的限制语句速度慢,要380多秒,能否做个优化,原因是新用了YPNM00的索引 for MZYS-20130525-001 -- daihq 2013.08.23 注释掉 老年医院省医保控制110元,现不做这个控制 by MZYS-20130822-002 -- daihq 2013.09.17 调整了邵武市人民医院特殊病人限制挂号次数和处方金额。 归档 by MZYS-20130910-001 -- chenyw 2013.10.16 如果在药典里维护中药药品用法,中药处方保存的时候细则用法为空时需要提示 by MZYS-20130909-005 -- daihq 2013.11.15 增加限制某种药品只能开出限定内天数的功能 by MZYS-20131024-001 -- dsm 2014.02.12 为增强对药品的管理,医务科要求可以灵活控制某种药品(包括普通、贵重、精神、毒麻药品)一天的总量只能开多少 for MZYS-20140127-001 -- dsm 2014.04.14 如处方内有非该特殊病种小目录用药,系统要给予提示,不允许保存。 for YF-20140307-002 -- dsm 2014.04.25 特殊病种目录限制考虑BM_TSBZB0.MLXZLX for YF-20140425-001 -- dsm 2014.06.13 特殊病种目录限制要考虑高血压糖尿病公用 for MZYS-20140606-002 -- dsm 2015.01.28 最大日剂量的限制YS_CDJLSFTCZF='Y' for MZYS-20150114-001 -- dsm 2015.02.15 漳州市漳浦县中医院判断是否面挂号GHJE00判断该称GHFZJE判断 for MZSF-20150105-001 -- dsm 2015.04.07 最大日剂量用发药单位提示 for MZYS-20150316-001 -- dsm 2015.04.21 老年急诊处方不能超过3天 for MZYS-20150415-001 -- dsm 2015.07.14 肺科便民开单只能开BM_BMKDXM for MZYS-20150702-003 -- dsm 2015.07.31 泉二外事诊疗费别,在开单时,如果该病人本月超过额度不能开单 for MZYS-20150722-001 -- daihq 2015.09.15 肺科增加限制特殊药品指定药品药品 for XMGL-20150714-001 -- dsm 2015.11.12 特殊病种处方只能发到特殊病种药房 for MZYS-20150922-001 -- dsm 2015.11.19 择日住院病人不能开处方YS_ZRZYSFZNKXM for MZYS-20151109-001 -- dsm 2015.12.02 省二特殊病种处方高血压、糖尿病、心衰、精神病等,允许各药品开具30天的用量,其他开14天,在bm_tsbzb0中加字段限制 for MZYS-20151117-002 -- dsm 2015.12.17 同一个病人,同1不能重复开同种药品YS_TZYPBNCFKD for MZYS-20151125-003 -- dsm 2016.01.05 单个病人在挂号有效期内同个医生只能开两个以内的中成药,超过不让保存YS_YXQNZCYPZXZ for MZYS-20151009-001 -- dsm 2016.01.08 MZYS-20151117-002这个需求的限制,"两费、保健、公医"病人不限制 for MZYS-20160108-001 -- dsm 2016.02.18 ZS_ZRZYYPSYLTS参数控制 for MZYS-20151008-001 -- dsm 2016.04.09 扩展MZYS_DLKSXYCFXZ参数,使之同时限制西药处方和成药处方 for MZYS-20160329-001 -- dsm 2016.04.28 单个挂号费用控制,增加参数YS_DGGHFYKZ参数 for MZYS-20160425-001 -- dsm 2016.05.28 计算剩余天数时要除掉被退处方(hjh) for MZYS-20160526-002 -- dsm 2016.06.21 当医生设置在BM_TYZD00.ZDMC00='特殊病种开最大药品天数豁免医生'时,不判断天数限制 for MZYS-20160524-004 -- dsm 2016.08.11 一个挂号号不管开几张处方只能开一种中成药并且小于等于一盒计量 参数YS_DGGHKCYPZS控制 for MZYS-20160808-001 -- dsm 2016.08.16 开单时未结算金额超过SF_SWFBQFJESZ参数限制的不能开单 for MZYS-20160815-003 -- dsm 2016.09.24 西成药所有病人(包含自费)都要加入该判断,只允许开具14天的药品 for MZYS-20160906-001 -- dsm 2016.10.27 BM_TYZD00.ZDMC00='科室开方最大天数' for MZYS-20161021-002 -- dsm 2016.11.18 挂普通号(非急诊)不允许开使用抗菌药物进行静脉输液(BM_TYZD00.ZDMC00=普通号抗生素用法限制) for MZYS-20161114-002 -- dsm 2016.12.16 MZYS-20161114-002此需求取BM_TYZD00数据时要加异常处理 for MZYS-20161208-001 -- dsm 2017.03.10 老年急诊药房的处方不能超过3天(扩展YS_JZCFYYTS参数) for MZYS-20161226-001 -- dsm 2017.06.05 增加BM_TSXZ00.HMYS00字段(暂时改XZLB00=0) for MZYS-20170407-001 -- dsm 2017.06.25 YS_TSYPYBZX中设置的病人才能开BM_TYZD00.ZDMC00="特定费别限制药品目录"的药品 for MZYS-20170621-002 -- --------- ---------- -------------------------------------------------- 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); C_KDKS01 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); ls_YPZDXL number(13,4); ls_MAXZL0 BM_YD0000.MAXZL0%type; ls_KCDW00 BM_YD0000.KCDW00%type; ls_YPMC00 BM_YD0000.YPMC00%type; ls_KCSL00 number(13,2); ls_KCSL02 number(13,2); C_BJSL00_BJTS BM_TSXZ00.BJSL00%type; I_BH0000_BJTS BM_TSXZ00.BH0000%type; C_XZMC00_BJTS BM_TSXZDM.XZMC00%type; YS_TSBZYBYLXZ number(10); YS_CDJLSFTCZF varchar2(4); YS_JZCFYYTS number(10); YS_JZCFXZCS varchar2(10); YS_JZCFXZCS_YF BM_BMBM00.BMBH00%type; C_XZJE00 number(13,2); --限制金额 lv_TSBZCFZDYF varchar2(10); YS_ZRZYSFZNKXM varchar2(10); ls_now date; YS_TZYPBNCFKD varchar2(10); V_YSGZH0 BM_YGBM00.YGBH00%type; YS_DGGHFYKZ number(10); YS_DGGHKCYPZS varchar2(10); SF_SWFBQFJESZ varchar2(100); VFBBH00_Temp00 number(5); VYXQFJE_Temp00 number(12,2); v_cfxzts number(5); v_cfxzts1 number(5); v_tsbzbh varchar2(20); v_sfxz00 varchar2(2); v_YBXZCFTS varchar2(10); YS_PTHKJYWSXXZ varchar2(10);--普通号的抗菌药物输液限制 V_JZYFTS varchar2(20); LS_TSYPYBZX varchar2(100); Verrmsg varchar2(255) ;--错误提示变量 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 and instr(','||HMYS00||',',','||P_YSBH00||',')=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; v_ypmc01:=' '; --对数量进行限制MZYS-20151008-001 begin select to_number(TRIM(VALUE0)) into V_COUNT0 from XT_XTCS00 where NAME00='ZS_ZRZYYPSYLTS' and (SYXT00='999' or instr(SYXT00,'8')>0) ; --专人专用药品使用量提示,1提示,2限制,0不处理,默认0 exception when others then V_COUNT0:=0; end; if V_COUNT0>0 then for c_yspyp in (select YPNM00,YPMC00,LSH000,sum(SPSL00) SPSL00 from (select distinct b.YPNM00,b.YPMC00,d.LSH000 , 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='1' 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 YPNM00,YPMC00,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_ypmc01<>' ' then V_RETURN:=V_COUNT0; if V_RETURN=1 then V_ERROR0:=substr('请注意:'||v_ypmc01,1,220) ; else V_ERROR0:=substr(v_ypmc01||',不能保存!',1,220) ; end if; return; end if; 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>3 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>300 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) and BRID00=C_BRID00 ghid00 in (select ghid00 from SF_BRXXB0 where brid00=C_BRID00 and ghrq00=(select GHRQ00 from SF_BRXXB0 where GHID00=V_GHZYID)); -- 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 --GHJE00-->GHFZJE for MZSF-20150105-001 SELECT count(*) into V_COUNT0 FROM SF_BRXXB0 WHERE GHID00=V_GHZYID AND GHFZJE=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; C_XZJE00:=0; 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; C_XZJE00:=SF_SF_BRYSYED(C_BRID00); --获取本月超过额度,泉二 for MZYS-20150722-001 if (V_FLAG00=0) and (C_XZJE00>0 ) then select nvl(round(sum(a.HJJE00),2),0) into C_SFJE00 from SF_BRFY00 a where a.BRID00=C_BRID00 and CZRQ00>=to_char(sysdate,'YYYYMM')||'01'; 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.BRID00=C_BRID00 and A.GHID00=B.GHID00 and B.CFZT00='0' and B.CFLSH0=C.CFLSH0 and B.SRRQ00>=to_char(sysdate,'YYYYMM')||'01'; select nvl(round(sum(a.ZJE000),2),0)+C_SFJE00 into C_SFJE00 from YJ_YW0000 a where a.BRID00=C_BRID00 and a.XMZT00 in ('0','1') and KDRQ00>=to_char(sysdate,'YYYYMM')||'01'; if C_SFJE00>C_XZJE00 then V_RETURN:=2; V_ERROR0:='系统限制 外事诊疗费别病人费用超过月额度:'||C_XZJE00||'元,现超过 '||trim(to_char(C_SFJE00-C_XZJE00))||' 元,不能进行保存!'; return; 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 --MZYS-20160329-001 扩展了MZYS_DLKSXYCFXZ参数 select trim(VALUE0) into C_KDKS00 from XT_XTCS00 where NAME00='MZYS_DLKSXYCFXZ'; if instr(C_KDKS00,'|')>0 then C_KDKS01:=','||substr(C_KDKS00,instr(C_KDKS00,'|')+1,100)||','; C_KDKS00:=','||substr(C_KDKS00,1,instr(C_KDKS00,'|')-1)||',' ; else C_KDKS01:='-1'; C_KDKS00:=','||C_KDKS00||','; end if; exception when others then C_KDKS00:='-1'; C_KDKS01:='-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; if (V_FLAG00=0) and (C_KDKS00<>'-1') then begin select count(*) into C_SL0000 from YF_MZCF00 where YPDLBH='1' and BRID00=C_BRID00 and GHID00=V_GHZYID and (instrb(C_KDKS01,','||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 不存在 --取挂号号对应的报警金额、禁用金额的 if P_YSBH00>0 then --- for MZYS-20160906-001中药处方最大剂型的限制,如最大14剂,该限制也排除掉“特殊病种开最大药品天数豁免医生”该名单的医生。 select count(*) into V_COUNT0 from BM_TYZD00 where ZDMC00='特殊病种开最大药品天数豁免医生' and instr(','||MC0000||',',','||P_YSBH00||',')>0; if V_COUNT0>0 then C_RETURN:=1; end if; end if; 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_CYCFXZYFWKSFTSYDYPYHMC by MZYS-20130909-005 ------------------------------------------------- begin select VALUE0 into lv_XTCS_VALUE0 from XT_XTCS00 where NAME00='YS_CYCFXZYFWKSFTSYDYPYHMC'; exception when others then lv_XTCS_VALUE0:='N'; end; if (trim(lv_XTCS_VALUE0)='Y') and P_CFLSH0<>'0' then begin lv_TS_clc:='OK'; declare cursor c_ZYXMYFTS is --中药细目用法为空药典中药用药方法不为空提示 select a.ypmc00,d.ypyfmc from YF_MZCFMX a,YF_MZCF00 b,BM_YD0000 c,BM_YPYF00 d where a.cflsh0=b.cflsh0 and a.ypdlbh='2' and a.xmyfmc is null and a.ypnm00=c.ypnm00 and c.YFID00=d.yfid00(+) and c.yfid00 is not null and b.CFLSH0=rpad(P_CFLSH0,16) ; begin for vZYXMYFTS in c_ZYXMYFTS loop if lv_TS_clc='OK' then lv_TS_clc:='中药【'||vZYXMYFTS.ypmc00||'】通常需要具体用法('||vZYXMYFTS.ypyfmc||').'; else lv_TS_clc:=lv_TS_clc||chr(13)||chr(13)||'中药'||vZYXMYFTS.ypmc00||'通常需要具体用法('||vZYXMYFTS.ypyfmc||').'; 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; ------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------- 增加参数 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 a.cxbz00='Z' -- 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; ------------------------------------------------------------------------------------------------------------------------- --门诊医生站开具‘药品最大零售限量’目录中的药品时,患者每日的最大限量受维护值限制 by MZYS-20121031-004 --select ypzsl0 into V_COUNT0 from YS_CFMX00 where CFLSH0=rpad(P_CFLSH0,16); for C_YPZDXL in (select distinct YPNM00 from YS_CFMX00 where CFLSH0=rpad(P_CFLSH0,16)) loop --maxzl0空,说明该药品在项目管理系统未维护,不受限制 select nvl(maxzl0,0) into ls_MAXZL0 from bm_yd0000 where ypnm00=C_YPZDXL.YPNM00; if ls_MAXZL0>0 then select sum(round(b.ypzsl0*c.m2j000,4)) into ls_YPZDXL from ys_cfxxb0 a,ys_cfmx00 b,bm_yd0000 c where a.cflsh0=b.cflsh0 and b.ypnm00=c.ypnm00 and a.brid00=C_BRID00 and a.srrq00=to_char(sysdate,'YYYYMMDD') and b.ypnm00+0=C_YPZDXL.YPNM00; if ls_YPZDXL>ls_MAXZL0 then begin select c.ypmc00,c.kcdw00,round(c.maxzl0/c.k2j000,2),sum(round(b.ypzsl0*c.m2j000/c.k2j000,2)) into ls_YPMC00,ls_KCDW00,ls_KCSL00,ls_KCSL02 from yf_mzcf00 a,yf_mzcfmx b,bm_yd0000 c where a.cflsh0=b.cflsh0 and b.ypnm00=c.ypnm00 and b.ypnm00+0=C_YPZDXL.YPNM00 and a.srrq00=to_char(sysdate,'YYYYMMDD') and a.brid00=C_BRID00 and a.CFLSH0<>rpad(P_CFLSH0,16) group by c.ypnm00,c.ypmc00,c.kcdw00,round(c.maxzl0/c.k2j000,2); exception when others then select c.ypmc00,c.kcdw00,round(c.maxzl0/c.k2j000,2),0 into ls_YPMC00,ls_KCDW00,ls_KCSL00,ls_KCSL02 from bm_yd0000 c where c.ypnm00=C_YPZDXL.YPNM00; end; V_RETURN:=2; V_ERROR0:='对不起,'||ls_YPMC00||'药品每日限开'||ls_KCSL00||trim(ls_KCDW00)||',该患者今日已开具'||ls_KCSL02||trim(ls_KCDW00)||',处方不能保存!'; end if; end if; end loop; -------------------------------------------------------------------------------------------------------------------------- --MZYS-20130125-001 每个药品当天的持续天数超过一定的天数就提示 begin SELECT BJSL00,BH0000 INTO C_BJSL00_BJTS,I_BH0000_BJTS 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 ROWNUM=1 AND XZLB00=21 and MZZYBZ='0'; exception when others then C_RETURN1:=1; end; select NVL(MAX(TRIM(XZMC00)),' ') into C_XZMC00_BJTS from BM_TSXZDM where BH0000=I_BH0000_BJTS and rownum=1; V_YPMC00:=' '; if C_XZMC00_BJTS<>' 'then for CR_YPMC_BJTS in ( select YPMC00,YYSJ00 from ( select b.YPNM00,b.YPMC00,sum(YYSJ00) YYSJ00 from YS_CFXXB0 a,YS_CFMX00 b,BM_YD0000 c where a.BRID00=C_BRID00 and a.CFLSH0=b.CFLSH0 and a.SRRQ00>=to_char(sysdate,'YYYYMMDD') and b.YPNM00=c.YPNM00 and c.LBBH00 in(0,1) and not exists(select 1 from BM_TYZD00 where ZDMC00='累计天数提示除外药品目录' and DJ0000=b.YPNM00) group by b.YPNM00,b.YPMC00) where YYSJ00>=C_BJSL00_BJTS ) loop if V_YPMC00=' ' then V_YPMC00:=CR_YPMC_BJTS.YPMC00; else V_YPMC00:=V_YPMC00||','||CR_YPMC_BJTS.YPMC00; end if; end loop; if V_YPMC00<>' ' then if V_ERROR0='没有错误' then V_ERROR0:='['||V_YPMC00||']'||C_XZMC00_BJTS; else V_ERROR0:=V_ERROR0||chr(13)||'['||V_YPMC00||']'||C_XZMC00_BJTS; end if; end if; if V_RETURN=0 and V_YPMC00<>' ' then V_RETURN:=1; end if; end if; --MZYS-20131024-001 限制某种药品只能开出限定内天数的功能 select count(1) into V_COUNT0 from BM_TYZD00 where ZDMC00='指定药品目录限制天数' and YXBZ00='1'; if (V_COUNT0 > 0) and (P_CFLSH0 <> '0') then for C_YPMC_XZTS in ( select c.YPMC00,c.YYSJ00,d.BZ0000 from ( select b.YPNM00,b.YPMC00,sum(YYSJ00) YYSJ00 from YS_CFXXB0 a,YS_CFMX00 b where a.BRID00=C_BRID00 and a.CFLSH0=rpad(P_CFLSH0,16) and a.CFLSH0=b.CFLSH0 group by b.YPNM00,b.YPMC00) c,BM_TYZD00 d where d.ZDMC00='指定药品目录限制天数' and d.DJ0000=c.YPNM00 and YXBZ00='1' and to_number(d.BZ0000)' ' then if V_ERROR0='没有错误' then V_ERROR0:='['||V_YPMC00||']'; else V_ERROR0:=V_ERROR0||chr(13)||'['||V_YPMC00||']'; end if; end if; if V_RETURN=0 and V_YPMC00<>' ' then V_RETURN:=2; end if; end if; --MZYS-20140127-001为增强对药品的管理,医务科要求可以灵活控制某种药品(包括普通、贵重、精神、毒麻药品)一天的总量只能开多少 for C_YPMC_XZZL in ( select c.YPMC00,c.YPZSL0,d.BZ0000,c.CFDW00 from ( select b.YPNM00,b.YPMC00,sum(b.YPZSL0) YPZSL0,CFDW00 from YS_CFXXB0 a,YS_CFMX00 b where a.BRID00=C_BRID00 and a.CFLSH0=b.CFLSH0 and a.SRRQ00=to_char(sysdate,'YYYYMMDD') group by b.YPNM00,b.YPMC00,CFDW00) c,BM_TYZD00 d where d.ZDMC00='指定药品目录限制当天总量' and d.DJ0000=c.YPNM00 and YXBZ00='1' and to_number(d.BZ0000)' ' then if V_ERROR0='没有错误' then V_ERROR0:='['||V_YPMC00||']'; else V_ERROR0:=V_ERROR0||chr(13)||'['||V_YPMC00||']'; end if; end if; if V_RETURN=0 and V_YPMC00<>' ' then V_RETURN:=2; end if; end loop; --YF-20140307-002 begin如处方内有非该特殊病种小目录用药,系统要给予提示,不允许保存。 --高血压糖尿病如果公用则允许过 select count(*) into YS_TSBZYBYLXZ from XT_XTCS00 where name00='YS_TSBZXZCFXM' and (value0 in ('Y','M')); if YS_TSBZYBYLXZ>0 then for C_YPMC_TSBZYP in ( select b.YPMC00 from YF_MZCF00 a,YF_MZCFMX b,SF_BRXXB0 c where nvl(a.TSBZBH,' ')<>' ' and a.CFLSH0=b.CFLSH0 and a.GHID00=c.GHID00 and a.GHID00=V_GHZYID and a.CFZT00 in('0') and (a.CFLSH0=P_CFLSH0 or nvl(P_CFLSH0,'0')='0') and exists(select 1 from BM_TSBZB0 where BH0000=a.TSBZBH and YBZXLB=c.YBZXLB and MLXZBZ in ('1','3')) and not exists (select 1 from VW_YF_TSBZYLYPMX where YBZXLB=c.YBZXLB and BH0000=a.TSBZBH and YPNM00=b.YPNM00) and not exists (select 1 from BM_XMBZ00 where type00='0' and YBZXLB=c.YBZXLB and BH0000=a.TSBZBH and XMBH00=b.YPNM00) and not exists (select 1 from BM_XMBZ00 where type00='0' and XMBH00=b.YPNM00 and a.TSBZBH in (select BH0000 from VW_YS_TSBZB_GXYTNB) ) --for MZYS-20140606-002 ) loop if V_YPMC00=' ' then V_YPMC00:=C_YPMC_TSBZYP.YPMC00; else V_YPMC00:=V_YPMC00||','||C_YPMC_TSBZYP.YPMC00; end if; if V_YPMC00<>' ' then if V_ERROR0='没有错误' then V_ERROR0:='如下药品不属于选择特殊病种目录药品:'||chr(13)||V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||'如下药品不属于选择特殊病种目录药品:'||chr(13)||V_YPMC00; end if; end if; if V_RETURN=0 and V_YPMC00<>' ' then V_RETURN:=2; end if; end loop; end if; --YF-20140307-002 end如处方内有非该特殊病种小目录用药,系统要给予提示,不允许保存。 --MZYS-20150114-001 begin最大日剂量限制。 select count(*) into YS_CDJLSFTCZF from XT_XTCS00 where name00='YS_CDJLSFTCZF' and (value0='Y' or value0='S'); if YS_CDJLSFTCZF>0 then for C_YPMC_TSBZYP in ( select * from ( select b.YPMC00,b.CFDW00,b.ZHL000,c.ZDRJL0,sum(b.CSL000*b.ZQCS00*b.ZQCD00/case when instr(YYSJDW,'小时')>0 then 1/24 when instr(YYSJDW,'周')>0 then b.ZQCS00 else 1 end) RJL000,c.JLDW00 from YF_MZCF00 a,YS_CFMX00 b,bm_yd0000 c where a.CFLSH0=b.CFLSH0 and a.GHID00=V_GHZYID and a.CFZT00 in('0','1','2') and b.YPNM00=c.YPNM00 and nvl(c.ZDRJL0,0)>0 group by b.YPMC00,c.ZDRJL0,c.JLDW00,b.CFDW00,b.ZHL000 --and (a.CFLSH0=P_CFLSH0 or nvl(P_CFLSH0,'0')='0') ) where RJL000>ZDRJL0 ) loop if V_YPMC00=' ' then V_YPMC00:=C_YPMC_TSBZYP.YPMC00||' 最大日剂量:'||round(C_YPMC_TSBZYP.ZDRJL0/C_YPMC_TSBZYP.ZHL000,2)||C_YPMC_TSBZYP.CFDW00; else V_YPMC00:=V_YPMC00||','||C_YPMC_TSBZYP.YPMC00||' 最大日剂量:'||round(C_YPMC_TSBZYP.ZDRJL0/C_YPMC_TSBZYP.ZHL000,2)||C_YPMC_TSBZYP.CFDW00; end if; if V_YPMC00<>' ' then if V_ERROR0='没有错误' then V_ERROR0:='如下药品超过最大日剂量:'||chr(13)||V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||'如下药品超过最大日剂量:'||chr(13)||V_YPMC00; end if; end if; if V_RETURN=0 and V_YPMC00<>' ' then V_RETURN:=2; end if; end loop; end if; --MZYS-20150114-001 end最大日剂量限制。 --MZYS-20150415-001 begin急诊处方持续天数限制。 begin select nvl(max(trim(value0)),'0') into YS_JZCFXZCS from XT_XTCS00 where name00='YS_JZCFYYTS' ; V_COUNT0:=instr(YS_JZCFXZCS,','); YS_JZCFXZCS_YF:=0; if V_COUNT0<=0 then YS_JZCFYYTS:=to_number(YS_JZCFXZCS); else YS_JZCFYYTS:=substr(YS_JZCFXZCS,1,V_COUNT0-1); YS_JZCFXZCS_YF:=to_number(substr(YS_JZCFXZCS,V_COUNT0+1,5)); --MZYS-20161226-001 end if; --select to_number(nvl(max(trim(value0)),'0')) into YS_JZCFYYTS from XT_XTCS00 where name00='YS_JZCFYYTS' ; exception when others then YS_JZCFYYTS:=0; end; if YS_JZCFYYTS>0 then select count(*) into V_COUNT0 from YF_MZCF00 a,YS_CFMX00 b ,SF_BRXXB0 c where a.CFLSH0=b.CFLSH0 and a.GHID00=V_GHZYID and a.CFZT00 in('0','1','2') and a.GHID00=c.GHID00 and a.CFLSH0=P_CFLSH0 and (exists(select 1 from BM_GHLBB0 where LBBH00=c.GHLB00 and SFJZLB='1') or a.YFBMBH=YS_JZCFXZCS_YF) and (b.YYSJ00>YS_JZCFYYTS or nvl(ZYTS00,0)/nvl(ZYMRJS,1)>YS_JZCFYYTS); if V_COUNT0>0 then if YS_JZCFXZCS_YF>0 then V_JZYFTS:='或急诊药房处方' ; end if ; if V_ERROR0='没有错误' then V_ERROR0:='急诊号'||V_JZYFTS||',用药时间不能超过'||YS_JZCFYYTS||'天:'; --||trim(P_CFLSH0) else V_ERROR0:=V_ERROR0||chr(13)||'急诊号'||V_JZYFTS||',用药时间不能超过'||YS_JZCFYYTS||'天:';--||trim(P_CFLSH0) end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; end if; --MZYS-20150415-001 end急诊处方持续天数限制。 --MZYS-20150702-003 begin肺科便民号开单限制BM_BMKDXM。 select count(*) into V_COUNT0 from SF_BRXXB0 a where GHID00=V_GHZYID and to_char(GHLB00) in (select MC0000 from BM_TYZD00 where ZDMC00='便民挂号类别'); if V_COUNT0>0 then V_YPMC00:=' '; for c_ypmx in (select YPMC00 from YS_CFMX00 a where CFLSH0=P_CFLSH0 and not exists(select 1 from BM_BMKDXM where XMLB00=0 and XMID00=a.YPNM00)) loop if V_YPMC00=' ' then V_YPMC00:='如下药品便民号不能开:'||chr(13)||c_ypmx.YPMC00; else V_YPMC00:=V_YPMC00||','||c_ypmx.YPMC00; end if; end loop; if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||'如下药品便民号不能开:'||chr(13)||V_YPMC00; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; --MZYS-20150702-003 end肺科便民号开单限制BM_BMKDXM。 --XMGL-20150714-001 begin 增加限制特殊药品指定药品药品 select count(1) into V_COUNT0 from BM_TYZD00 where ZDMC00='药品指定药品用法'; if V_COUNT0>1 then V_YPMC00:=' '; for c_ypxx in (select A.YPNM00,A.YPMC00 from YS_CFMX00 A,BM_TYZD00 B where A.CFLSH0=P_CFLSH0 and B.ZDMC00='药品指定药品用法' and B.YXBZ00='1' and A.YPNM00=B.DJ0000 and not exists(select 1 from BM_TYZD00 C where C.ZDMC00='药品指定药品用法' and C.YXBZ00='1' and A.YPNM00=C.DJ0000 and C.BZDYBH=trim(A.YFID00)) and rownum=1) loop for c_yfxx in (select C.BZ0000 from YS_CFMX00 A,BM_TYZD00 C where A.CFLSH0=P_CFLSH0 and C.ZDMC00='药品指定药品用法' and C.YXBZ00='1' and A.YPNM00=c_ypxx.YPNM00 and A.YPNM00=C.DJ0000 ) loop if V_YPMC00=' ' then V_YPMC00:='药品:'||c_ypxx.YPMC00||',限制只能使用以下用法:'||chr(13)||c_yfxx.BZ0000; else V_YPMC00:=V_YPMC00||','||c_yfxx.BZ0000; end if; end loop; if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00||',请修改后再保存'; else V_ERROR0:=V_ERROR0||chr(13)||V_YPMC00||',请修改后再保存'; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end loop; end if; --XMGL-20150714-001 end 增加限制特殊药品指定药品药品 --特殊病种处方只能发往特殊病种药房begin begin select trim(VALUE0) into lv_TSBZCFZDYF from XT_XTCS00 where NAME00='YS_TSBZCFZDYF'; exception when others then lv_TSBZCFZDYF:='N'; end; V_YPMC00:=' '; if lv_TSBZCFZDYF<>'N' and lv_TSBZCFZDYF<>'0' then for c_cflsh in (select CFLSH0 from YF_MZCF00 where GHID00=V_GHZYID and TSBZBH is not null and YFBMBH<>to_number(lv_TSBZCFZDYF)) loop if V_YPMC00=' ' then V_YPMC00:='如下特殊病种只能发往特殊病种药房:'||chr(13)||c_cflsh.CFLSH0; else V_YPMC00:=V_YPMC00||','||c_cflsh.CFLSH0; end if; end loop; if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||'如下特殊病种只能发往特殊病种药房:'||chr(13)||V_YPMC00; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; --特殊病种处方只能发往特殊病种药房end --择日住院只能开项目MZYS-20151109-001 begin begin select trim(VALUE0) into YS_ZRZYSFZNKXM from XT_XTCS00 where NAME00='YS_ZRZYSFZNKXM'; exception when others then YS_ZRZYSFZNKXM:='N'; end; V_YPMC00:=' '; if YS_ZRZYSFZNKXM='Y' then select count(*) into V_COUNT0 from YF_MZCF00 a,SF_BRXXB0 b where a.GHID00=V_GHZYID and a.GHID00=b.GHID00 and SFZRZY='Y'; if V_COUNT0>0 then V_YPMC00:='择日住院病人,不能开药品,请把药品删除'||V_GHZYID; if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||'择日住院病人,不能开药品,请把药品删除'; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; end if; --择日住院只能开项目MZYS-20151109-001 end --省二特殊病种开药天数限制MZYS-20151117-002 begin V_COUNT0:=0; if P_YSBH00>0 then select count(*) into V_COUNT0 from BM_TYZD00 where ZDMC00='特殊病种开最大药品天数豁免医生' and instr(','||MC0000||',',','||P_YSBH00||',')>0; end if; if C_FBBH00 in('1','3') and V_COUNT0=0 then -- and C_YBZXLB not in ('3','4','h') V_YPMC00:=' '; for c_cxztsyp in ( select b.YPMC00,YYSJ00||YYSJDW,a.CFLSH0,c.YPTS00,decode(nvl(a.TSBZBH,' '),' ','','特殊病种') CFMC00 from YF_MZCF00 a,YF_MZCFMX b,BM_TSBZB0 c where a.GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and nvl(trim(a.TSBZBH),'000000000000')=trim(c.BH0000) and c.YBZXLB=decode(nvl(a.TSBZBH,'000000000000'),'000000000000','0',C_YBZXLB) and nvl(c.YPTS00,0)>0 and decode(b.YPDLBH,2,a.ZYTS00,b.YYSJ00)*decode(YYSJDW,'天',1,'*7天',7,1)>nvl(c.YPTS00,0) and b.YPDLBH<>2 and a.CFZT00 not in ('3','6') -- and c.YBZXLB not in ('3','4','h') ) loop if V_YPMC00=' ' then V_YPMC00:='如下药品在'||trim(c_cxztsyp.CFMC00)||c_cxztsyp.CFMC00||'处方中超过了限制天数:'||chr(13)||c_cxztsyp.YPMC00||' 超过'||c_cxztsyp.YPTS00||'天'; else V_YPMC00:=V_YPMC00||','||c_cxztsyp.YPMC00||' 超过'||c_cxztsyp.YPTS00||'天'; end if; end loop; if V_YPMC00<>' ' then if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||V_YPMC00; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; V_YPMC00:=' '; select to_date(to_char(sysdate,'YYYYMMDD'),'YYYYMMDD') into ls_Now from dual; for c_cxztsyp1 in ( select b.YPMC00,YYSJ00||YYSJDW,a.CFLSH0,c.YPSYTS,trunc(to_date(a.SRRQ00,'YYYYMMDD')+b.YYSJ00*decode(b.YYSJDW,'天',1,'*7天',7,1) -ls_Now) SJSYTS from YF_MZCF00 a,YF_MZCFMX b,BM_TSBZB0 c where a.BRID00=C_BRID00 and a.CFLSH02 and c.YBZXLB=decode(nvl(a.TSBZBH,'000000000000'),'000000000000','0',C_YBZXLB) and exists(select 1 from YF_MZCF00 e,YF_MZCFMX f where e.GHID00=V_GHZYID and e.CFLSH0=f.CFLSH0 and e.CFLSH0=P_CFLSH0 and YPNM00=b.YPNM00) and trunc(to_date(a.SRRQ00,'YYYYMMDD')+b.YYSJ00*decode(b.YYSJDW,'天',1,'*7天',7,1) -ls_Now)>nvl(c.YPSYTS,0) and nvl(c.YPSYTS,0)>0 and a.CFZT00 not in ('3','6') and not exists (select 1 from BM_YDTSSX d where d.sxbh00='07' and d.ypnm00=b.ypnm00) and not exists (select 1 from yf_mzcf00 h where h.bccfh0=a.cflsh0 and h.cfzt00='6') -- and c.YBZXLB not in ('3','4','h') ) loop if V_YPMC00=' ' then V_YPMC00:='如下药品上次开的药品剩余数量较多不能再开:'||chr(13)||c_cxztsyp1.YPMC00||' 剩余'||c_cxztsyp1.SJSYTS||'天的量'; else V_YPMC00:=V_YPMC00||','||c_cxztsyp1.YPMC00||' 剩余'||c_cxztsyp1.SJSYTS||'天的量'; end if; end loop; if V_YPMC00<>' ' then if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||V_YPMC00; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; end if; --省二特殊病种开药天数限制MZYS-20151117-002 end --同一天同种药品不能重复开MZYS-20151125-003 begin begin select trim(VALUE0) into YS_TZYPBNCFKD from XT_XTCS00 where NAME00='YS_TZYPBNCFKD'; exception when others then YS_ZRZYSFZNKXM:='N'; end; if YS_TZYPBNCFKD in ('Y','M') then V_YPMC00:=' '; for c_cfyp in ( select YPMC00 from ( select b.YPNM00,b.YPMC00,count(*) cou from YF_MZCF00 a,YF_MZCFMX b where a.CFLSH0=b.CFLSH0 and a.BRID00=C_BRID00 and a.SRRQ00=to_char(sysdate,'YYYYMMDD') and b.CXBZ00='Z' and ((b.YPYFMC not in (select YPYFMC from BM_YPYF00 where YFLBID=1) and YS_TZYPBNCFKD='M') or YS_TZYPBNCFKD='Y') group by YPNM00,b.YPMC00 ) where cou>1) loop if V_YPMC00=' ' then V_YPMC00:='如下药品重复开药:'||chr(13)||c_cfyp.YPMC00 ; else V_YPMC00:=V_YPMC00||','||c_cfyp.YPMC00; end if; end loop; if V_YPMC00<>' ' then if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||V_YPMC00; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; end if; --同一天同种药品不能重复开MZYS-20151125-003 end --单个病人在挂号有效期内同个医生只能开两个以内的中成药MZYS-20151009-001 begin begin select count(*) into V_COUNT0 from XT_XTCS00 where NAME00='YS_YXQNZCYPZXZ' and VALUE0='Y'; exception when others then V_COUNT0:=0; end; if V_COUNT0>0 then V_YPMC00:=' '; select YSGZH0 into V_YSGZH0 from YF_MZCF00 where CFLSH0=P_CFLSH0; for c_cfyp in ( select YSGZH0,cou from ( select a.YSGZH0,count(*) cou from YF_MZCF00 a,YF_MZCFMX b where a.CFLSH0=b.CFLSH0 and a.BRID00=C_BRID00 and a.YSGZH0=V_YSGZH0 and exists(select 1 from VW_YS_YXGH00_YS where GHID00=a.GHID00 ) and exists(select 1 from BM_YD0000 where YPNM00=b.YPNM00 and LBBH00=1) group by a.YSGZH0 ) where cou>2) loop V_YPMC00:='此病人中成药在效期内超过两个!'; end loop; if V_YPMC00<>' ' then if V_ERROR0='没有错误' then V_ERROR0:=V_YPMC00; else V_ERROR0:=V_ERROR0||chr(13)||V_YPMC00; end if; if V_RETURN=0 and V_ERROR0<>' ' then V_RETURN:=2; end if; end if; end if; --单个病人在挂号有效期内同个医生只能开两个以内的中成药MZYS-20151009-001 end ---------单个挂号费用控制,增加参数YS_DGGHFYKZ参数 for MZYS-20160425-001 begin --- begin select to_number(nvl(max(trim(value0)),'0')) into YS_DGGHFYKZ from XT_XTCS00 where NAME00='YS_DGGHFYKZ' and nvl(value0,'0')>0; exception when others then YS_DGGHFYKZ:=0; end; if YS_DGGHFYKZ>0 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>=YS_DGGHFYKZ then V_RETURN:=2; V_ERROR0:='此挂号费用已经超过了'||YS_DGGHFYKZ||'元,不能保存!'; return; end if; end if; ---------单个挂号费用控制,增加参数YS_DGGHFYKZ参数 for MZYS-20160425-001 end --- -------马尾一个挂号只能开一种中成药,并且数量只能开1盒 MZYS-20160808-001 begin-------------------------- begin select to_number(nvl(max(trim(value0)),'0')) into YS_DGGHKCYPZS from XT_XTCS00 where NAME00='YS_DGGHKCYPZS' and nvl(value0,'0')>0; exception when others then YS_DGGHKCYPZS:=0; end; if YS_DGGHKCYPZS>0 then select count(*) into V_COUNT0 from ( select b.YPNM00,sum(YPZSL0) YPZSL0 from YF_MZCF00 a,YF_MZCFMX b where GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and b.YPDLBH=1 group by b.YPNM00 having sum(YPZSL0)>0 ) ; if V_COUNT0>YS_DGGHKCYPZS then V_RETURN:=2; V_ERROR0:='对不起,一个挂号只能开'||YS_DGGHKCYPZS||'个中成药!'; return; end if; V_YPMC00:=' '; for c_cysl in ( select b.YPNM00,YPMC00,sum(YPZSL0) YPZSL0 from YF_MZCF00 a,YF_MZCFMX b where GHID00=V_GHZYID and a.CFLSH0=b.CFLSH0 and b.YPDLBH=1 group by b.YPNM00,YPMC00 having sum(YPZSL0)>1 ) loop if c_cysl.YPZSL0>1 then if V_YPMC00=' ' then V_YPMC00:=chr(13)||c_cysl.YPMC00 ; else V_YPMC00:=V_YPMC00||','||c_cysl.YPMC00; end if; end if; end loop; if V_YPMC00<>' ' then V_RETURN:=2; V_ERROR0:='对不起,存在如下中成药数量超过1盒(瓶)的药品:'||V_YPMC00; return; end if; end if; -------马尾一个挂号只能开一种中成药,并且数量只能开1盒MZYS-20160808-001 end-------------------------- --三无费别无限制欠费(即结算后允许欠费回滚到设置值)费别编号和金额设置(第一位费别编号,第二位欠费金额)格式:A,B 默认值:0,0 MZYS-20160815-003begin begin Select trim(VALUE0) into SF_SWFBQFJESZ from xt_xtcs00 where name00 in ('SF_SWFBQFJESZ'); VFBBH00_Temp00:=to_number(substrb(SF_SWFBQFJESZ,1,instrb(SF_SWFBQFJESZ,',')-1)); VYXQFJE_Temp00:=to_number(substrb(SF_SWFBQFJESZ,instrb(SF_SWFBQFJESZ,',')+1,10)); exception when others then SF_SWFBQFJESZ:='0,0'; VFBBH00_Temp00:=0; VYXQFJE_Temp00:=0; end; if VYXQFJE_Temp00>0 and C_FBBH00=VFBBH00_Temp00 then select nvl(WJSJE0,0) into C_SFJE00 from SF_BRZHXX where BRID00=C_BRID00 and JFLBID=1; 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.BRID00=C_BRID00 and A.GHID00=B.GHID00 and B.CFZT00='0' and B.CFLSH0=C.CFLSH0 and A.GHID00=V_GHZYID; select nvl(round(sum(a.ZJE000),2),0)+C_SFJE00 into C_SFJE00 from YJ_YW0000 a where a.BRID00=C_BRID00 and a.XMZT00 in ('0','1') and MZZYBZ='0' and ZYGHID=V_GHZYID; if C_SFJE00>VYXQFJE_Temp00 then V_RETURN:=2; V_ERROR0:='系统限制 三无费别病人费用超过欠费额度:'||VYXQFJE_Temp00||'元,请先去收费处做结算!'; return; end if; end if; --三无费别无限制欠费(即结算后允许欠费回滚到设置值)费别编号和金额设置(第一位费别编号,第二位欠费金额)格式:A,B 默认值:0,0 MZYS-20160815-003end ---MZYS-20161021-002begin --取出参数 是否只限制普通的医保病人 罗源县医院处方最大天数限制方式 begin select to_number(nvl(max(value0),0)) into v_cfxzts from xt_xtcs00 where name00='YS_SFZXZPTYBBRZDTS'; exception when others then v_cfxzts:=0; end; if (v_cfxzts>0) and (C_BRID00>0) then --只限制普通的医保病人 select nvl(TSBZBH,'N') into v_tsbzbh from YS_CFXXB0 where CFLSH0=P_CFLSH0; if (v_tsbzbh='N') and (C_FBBH00=3) then--周期次数 select count(*) into V_COUNT0 from ( select nvl((select HSZQCD from BM_PC0000 where PCID00=a.PCID00),1)*YYSJ00 YYTS00,YPMC00 from YS_CFMX00 a,YS_CFXXB0 b where b.YPDLBH<>2 and b.CFLSH0=P_CFLSH0 and a.cflsh0=b.cflsh0 ) where YYTS00>v_cfxzts*24; if V_COUNT0>0 then V_RETURN:=2; V_ERROR0:='用药时间超过'||to_char(v_cfxzts)||'天!*'; return; end if; end if; else --限制所用病人 但医保病人是否限制按参数 select to_number(nvl(max(value0),0)) into v_cfxzts from xt_xtcs00 where name00='YS_CFXZZDTS'; v_cfxzts1:=0; begin select a.GHKS00 into C_GHKS00 from ys_cfxxb0 a where a.GHID00=V_GHZYID and a.CFLSH0=p_CFLSH0; select to_number(MC0000) into v_cfxzts1 from BM_TYZD00 where ZDMC00='科室开方最大天数' and BH0000=to_char(C_GHKS00) and rownum=1; exception when others then v_cfxzts1:=0; end; if v_cfxzts1>0 then v_cfxzts:=v_cfxzts1; end if; if v_cfxzts>0 then v_sfxz00 := '1'; select nvl(max(trim(value0)),'Y') into v_YBXZCFTS from xt_xtcs00 where name00='YS_YBXZCFTS'; if (v_YBXZCFTS = 'N') and (C_BRID00 <> 0) then if (c_fbbh00=3) or (C_YBZXLB='3') or (C_YBZXLB='x') or (C_YBZXLB='4')then v_sfxz00 := '0'; --如果是医保病人,不限制 end if; end if; if (v_sfxz00 = '1') then--周期次数 select count(*) into V_COUNT0 from ( select nvl((select HSZQCD from BM_PC0000 where PCID00=a.PCID00),1)*YYSJ00 YYTS00,YPMC00 from YS_CFMX00 a,YS_CFXXB0 b where b.YPDLBH<>2 and b.CFLSH0=P_CFLSH0 and a.CFLSH0=b.CFLSH0) where YYTS00>v_cfxzts*24; if V_COUNT0>0 then V_RETURN:=2; V_ERROR0:='用药时间超过'||to_char(v_cfxzts)||'天!*'; return; end if; end if; end if; end if; ---MZYS-20161021-002end ---MZYS-20161114-002begin --挂普通号(非急诊)不允许开使用抗菌药物进行静脉输液 begin select 'Y' into YS_PTHKJYWSXXZ from BM_TYZD00 where ZDMC00='普通号抗生素用法限制' and rownum=1; exception when others then YS_PTHKJYWSXXZ:='N'; end; if YS_PTHKJYWSXXZ='Y' and P_CFLSH0<>'0' and P_CFLSH0 is not null then select count(*) into V_COUNT0 from SF_BRXXB0 a where GHID00=V_GHZYID and exists(select 1 from BM_GHLBB0 where LBBH00=a.GHLB00 and LBMC00 like '%急诊%') ; if V_COUNT0=0 then select count(*) into V_COUNT0 from YS_CFMX00 a,BM_YD0000 b where a.CFLSH0=P_CFLSH0 and a.YPNM00=b.YPNM00 and b.KSSJB0>0 and exists(select 1 from BM_TYZD00 where ZDMC00='普通号抗生素用法限制' and MC0000=a.YFID00); if V_COUNT0>0 then V_RETURN:=2; V_ERROR0:='挂普通号(非急诊)不允许开使用抗菌药物进行静脉输液!*'; return; end if; end if; end if; ---MZYS-20161114-002end ---MZYS-20170621-002begin --YS_TSYPYBZX中设置的病人才能开BM_TYZD00.ZDMC00="特定费别限制药品目录"的药品 begin select trim(VALUE0) into LS_TSYPYBZX from XT_XTCS00 where NAME00='YS_TSYPYBZX' and rownum=1; LS_TSYPYBZX:=','||LS_TSYPYBZX||','; exception when others then LS_TSYPYBZX:='N'; end; if LS_TSYPYBZX<>'N' and LS_TSYPYBZX<>'0' then V_YPMC00:=' '; for c_ypmx in( select c.YPMC00 from SF_BRXXB0 a,YF_MZCF00 b,YF_MZCFMX c where a.GHID00=V_GHZYID and b.CFLSH0=P_CFLSH0 and a.GHID00=b.GHID00 and b.CFLSH0=c.CFLSH0 and exists (select 1 from BM_TYZD00 a where ZDMC00='特定费别限制药品目录' and DJ0000=c.YPNM00 ) and instr(LS_TSYPYBZX,','||a.FBBH00||'-'||a.YBZXLB||',')<=0) loop if V_YPMC00=' ' then V_YPMC00:=chr(13)||c_ypmx.YPMC00 ; else V_YPMC00:=V_YPMC00||','||c_ypmx.YPMC00; end if; end loop; if V_YPMC00<>' ' then V_RETURN:=2; V_ERROR0:='对不起,存在如下特定病人使用药品不能开:'||V_YPMC00; return; end if; end if; ---MZYS-20161114-002end <> ----------------------------------------------------------------------------------------- return; exception when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*'||Verrmsg,1,220)); END SP_XT_TSXZ00; /