create or replace procedure SP_ZS_SCCYDY ( p_yzid00 in number,--医嘱ID p_qyrq00 in char,--起用日期 p_qysj00 in char,--起用时间 p_pxsj00 in char,--排序时间 p_lrrxm0 in char,--录入人姓名 p_zyh000 in ZY_BRXXB0.ZYH000%type,--住院号 V_ERROR0 out number,--是否库存不足:0:没有错误,1:某些药品库存不足,2:其他错误 V_KCBZYP out varchar2, --库存不足的药品信息给出提示。 p_czy000 in number default 0, --操作员 p_zqs000 in number, --周期数 p_kdksbh in number, --开单科室编号 p_yyrq00 in char--用药日期 )AS -- MODIFICATION HISTORY -- Person Date Comments -- YANGY 2008.06.24 医嘱复制没有复制bq_ypyzmx表的dmbz00字段的值 -- chenqw 2009.01.07 复制的医嘱应默认为现在的药房 -- chenqw 2009.04.13 要求不同病人间的医嘱也能复制 -- yangy 2009.04.24 医嘱复制可以不考虑库存下限。 --有参数控制 -- csf 2009.12.30 增加单个药品默认药房的处理 -- xuxm 2014.06.25 医嘱界面,选择医嘱右键“生成出院带药”报错 for DZBL-20140619-002 -- 阮炳辉 2014.12.11 重命名调用的过程和视图(加_ZYDZBL) DZBL-20141210-007 -- wuzy 2018.06.05 过程加上日志 SP_TransLog for ZYDZBL-20180531-002 -- caishb 2020.02.03 中药生成出院带药医嘱的天数为输入的天数,贴数、代煎数和煎药方式同原医嘱 for ZYDZBL-20191231-004。 -- caishb 2020.05.21 中药生成出院带药医嘱的天数、贴数、代煎等于输入的天数 for ZYDZBL-20200520-002。 -- zouqc 2020.05.26 增加ZS_CYDYXYYFBMBH参数值是否属于本院科室判断的判断 for ZYDZBL-20200526-002 -- zouqc 2020.06.08 v_jycs00赋默认值0 for ZYDZBL-20200607-001 v_zyid00 ZY_BRXXB0.ZYID00%type;--住院ID v_yplbbh BQ_YPYZ00.YPLBBH%type;--药品类别编号 v_bqh000 BQ_YPYZ00.BQH000%type;--病区号 v_ksh000 BQ_YPYZ00.KSH000%type;--科室号 v_yzid00 BQ_YPYZ00.YZID00%type;--医嘱ID v_yfbmbh XT_YPFWFX.YFBMBH%type; --领药药房 v_Count1 number;--记数器1 v_Count2 number;--记数器2 v_count3 number;--记数器3 v_count4 number;--记数器4 v_yfbmbh3 XT_YPFWFX.YFBMBH%type;--领药药房 v_yzfzkcxx char(1); --药品医嘱复制是否考虑库存下限 Y:是 N:否 默认为:Y -- E_YPYZFZ_YPKC Exception;--药品医嘱复制药品库存低于下限 v_qzfs00 char;--取整方式 v_zqcs00 number;--周期次数 CURSOR CUR_ZS_YPYZMX IS select a.* from BQ_YPYZMX a, VW_BQ_YFYPSC_ZYDZBL b, -- XT_YPFWFX c YF_YPKCXX c where a.YZID00 = p_yzid00 and a.YPNM00 = b.YPNM00--药品内码 --and c.YPLBBH = v_yplbbh--药品类别 --and c.SLBMBH = v_bqh000--申请病区 --and c.MRBZ00 = 'Y' --默认药房 and c.YPNM00 = a.YPNM00--药品内码 and c.YFBMBH = b.YFBMBH --药房部门 and c.YFBMBH=v_yfbmbh and ((v_yzfzkcxx='N' and b.SJKCSL > 0) or (v_yzfzkcxx='Y' and b.KCSL00 > 0)); --库存高于下限 CURSOR CUR_ZS_KCBZYP IS SELECT X.YPNM00 YPNM00,Y.YPMC00 YPMC00 FROM BQ_YPYZMX X, BM_YD0000 Y WHERE X.YZID00 = p_yzid00 AND X.YPNM00=Y.YPNM00 AND X.YPNM00 NOT IN (select a.YPNM00 from BQ_YPYZMX a, VW_BQ_YFYPSC_ZYDZBL b where a.YZID00 = p_yzid00 and a.YPNM00 = b.YPNM00--药品内码 and b.YFBMBH = v_yfbmbh--药房部门 and ((v_yzfzkcxx='N' and b.SJKCSL > 0) or (v_yzfzkcxx='Y' and b.KCSL00 > 0)) --库存高于下限 ); v_yysj00 BQ_YPYZ00.YYSJ00%type; --用药时间 v_ZS_CYDYXYYFBMBH varchar2(100);--出院带药西药药房部门编号 v_zqcyts BQ_YPYZ00.ZQCYTS%type; --草药贴数 v_jycs00 bq_ypyz00.jycs00%type; begin SP_TRANSLOG(sysdate,'SP_ZS_SCCYDY',p_czy000,0, 'SP_ZS_SCCYDY:p_yzid00:'||To_Char(p_yzid00)||'p_qyrq00:'||p_qyrq00 ||'p_qysj00:'||p_qysj00||'p_pxsj00:'||p_pxsj00||'p_lrrxm0:'||p_lrrxm0); V_ERROR0:=0; V_KCBZYP:=''; v_jycs00:=0; --取住院ID SELECT NVL(MAX(TRIM(VALUE0)),'Y') INTO v_yzfzkcxx FROM XT_XTCS00 WHERE NAME00='ZS_YZFZKLKCXX'; select max(ZYID00) into v_zyid00 from ZY_BRXXB0 where ZYH000 = p_zyh000; select YPLBBH,ZQCYTS into v_yplbbh,v_zqcyts from BQ_YPYZ00 where YZID00 = p_yzid00; if v_yplbbh='2' then select YPLBBH,p_zqs000,jycs00 into v_yplbbh,v_zqcyts,v_jycs00 from BQ_YPYZ00 where YZID00 = p_yzid00; if v_jycs00>0 then v_jycs00:=v_zqcyts; end if; end if; --取病人当前科室、当前病区 select DQBQ00,DQKS00 into v_bqh000,v_ksh000 from ZY_BRXXB0 where ZYID00 = v_zyid00; --取默认药房 begin select YFBMBH into v_yfbmbh from XT_YPFWFX where SLBMBH = v_bqh000 and YPLBBH = v_yplbbh and MRBZ00 = 'Y' and ROWNUM = 1; exception when No_Data_Found then v_yfbmbh := 0; end; select NVL(MAX(TRIM(VALUE0)),'0') into v_ZS_CYDYXYYFBMBH from xt_xtcs00 where name00='ZS_CYDYXYYFBMBH'; select count(1) into v_count4 from BM_BMBM00 where BMBH00=v_ZS_CYDYXYYFBMBH; if v_yplbbh = 0 and v_ZS_CYDYXYYFBMBH <>'0' and v_count4>0 then --出院带药西药药房部门编号 v_yfbmbh:=v_ZS_CYDYXYYFBMBH; end if; --判断药品库存是否高于下限的条数 select Count(1) into v_Count1 from BQ_YPYZMX a, VW_BQ_YFYPSC_ZYDZBL b where a.YZID00 = p_yzid00 and a.YPNM00 = b.YPNM00--药品内码? and b.YFBMBH = v_yfbmbh--药房部门 and ((v_yzfzkcxx='N' and b.SJKCSL > 0) or (v_yzfzkcxx='Y' and b.KCSL00 > 0)); --库存高于下限 select Count(1) into v_Count2 from BQ_YPYZMX where YZID00 = p_yzid00; --比较条数 if v_Count1 < v_Count2 then V_ERROR0:=1; end if; --按单个药品判断,库存足够药品数目最多的药房 if v_Count1 < v_Count2 then --判断药品库存是否高于下限的条数 begin select * into v_yfbmbh3,v_count3 from ( select YFBMBH,max(count1) count1 from ( select c.YFBMBH,count(*) count1 from BQ_YPYZMX a, VW_BQ_YFYPSC_ZYDZBL b, YF_YPKCXX c where a.YZID00 = p_yzid00 and a.YPNM00 = b.YPNM00--药品内码 and b.YFBMBH = c.YFBMBH--药房部门编号 and b.YPNM00=c.YPNM00 and c.BQKDYF='Y' -- and b.KCSL00 > 0 --库存高于下限 and ((v_yzfzkcxx='N' and b.SJKCSL > 0) or (v_yzfzkcxx='Y' and b.KCSL00 > 0)) --库存高于下限 group by c.YFBMBH) group by yfbmbh ) where rownum=1; exception when others then v_yfbmbh3:=0; end; end if; if v_yfbmbh3>0 then v_yfbmbh:=v_yfbmbh3; v_count1:=v_count3; --比较条数 if v_Count1 < v_Count2 then V_ERROR0:=1; end if; end if; --取医嘱ID if v_Count1>0 then select SQ_BQ_YZMX00_YZMXID.NextVal into v_yzid00 FROM DUAL WHERE ROWNUM=1; --用药时间yysj00,如果用药日期(yyrq00)是当天取起用时间(qysj00),否则取00:00:00 if p_yyrq00 = p_qyrq00 then v_yysj00 := p_qysj00; elsif p_yyrq00 > p_qyrq00 then v_yysj00 := '00:00:00'; end if; --插入药品医嘱主表 insert into BQ_YPYZ00( YZID00,--NUMBER(12) , --ID号,序列号(分组号) ZYID00,--NUMBER(10) , --住院ID YEXM00,--CHAR(10) , --婴儿姓名 YPLBBH,--CHAR(1) , --药品大类编号‘0’西药‘1’成药‘2’草药 DMBZ00,--CHAR(1) , --'0'正常 '1'毒麻神经 CLBZ00,--CHAR(1) , --长期/临时标志'0'-临时,'1'-长期 PXSJ00,--CHAR(8) , --排序时间(医嘱根据启用日期+排序时间排序) KZYS00,--NUMBER(5) , --开嘱医生 LRRQ00,--CHAR(8) , --录入日期 LRSJ00,--CHAR(8) , --录入时间 LRRXM0,--CHAR(10) , --录入人姓名 HDRXM0,--CHAR(10) , --核对人姓名 QYRQ00,--CHAR(8) , --启用日期 QYSJ00,--CHAR(8) , --启用时间 TZRQ00,--CHAR(8) , --停止日期 TZSJ00,--CHAR(8) , --停止时间 TQRQ00,--CHAR(8) , --提取日期 TQSJ00,--CHAR(8) , --提取时间 TZYS00,--NUMBER(5) , --停止医生 TZRXM0,--CHAR(10) , --停止人姓名 ZQS000,--NUMBER(3) , --(短嘱)周期数 ZQCD00,--NUMBER(2) , --周期长度(周的长度只能为1) ZQDW00,--CHAR(4) , --(短嘱)周期单位 ZQCYTS,--NUMBER(5) , --一个周期草药贴数(仅供草药用)2.18 JYCS00,--NUMBER(1) , --(中药)煎药次数 BQH000,--NUMBER(5) , --病区号 KSH000,--NUMBER(5) , --科室号 YFBMBH,--NUMBER(5) , --(药房)执行科室 PCID00,--NUMBER(4) , --频次ID PCMC00,--CHAR(20) , --药品用法频次名称 YFID00,--CHAR(3) , --药品用法ID YPYFMC,--CHAR(20) , --药品用法名称 YYZF00,--CHAR(40) , --用药嘱咐(饭前,饭后等) YZZT00,--CHAR(1) , --医嘱状态‘0’新开‘1’已核对‘2’已提取‘3’停止‘4’撤消‘5’暂停‘6’疑问 YZMXSM,--NUMBER(2) , --医嘱明细(同组)数目(由触发器保证) BZID00,--NUMBER(6) , --病症ID号(主要用于毒麻处方) BZ0000, --CHAR(10) --备注 YSZID0,--医生组id KDKSBH,--开单科室编号 YYRQ00,--用药日期 YYSJ00, --用药时间 JYFS00, --煎药方式 DJFSMC --代煎 ) select v_yzid00, v_zyid00, YEXM00, YPLBBH, DMBZ00, 1,--临嘱 p_pxsj00, p_czy000, To_Char(SYSDATE,'YYYYMMDD'), To_Char(SYSDATE,'HH24:MI:SS'), p_lrrxm0, null,--hdrxm0, p_qyrq00, p_qysj00, null,--tzrq00, null,--tzsj00, null,--tqrq00, null,--tqsj00, null,--tzys00, null,--tzrxm0, -- decode(v_yplbbh,'2',1,p_zqs000), p_zqs000, ZQCD00, ZQDW00, decode(v_yplbbh,'2',v_zqcyts,1), v_jycs00,--代煎数 -- 0, v_bqh000, v_ksh000, v_yfbmbh, PCID00, PCMC00, YFID00, YPYFMC, YYZF00, '7',--yzzt00, null,--yzmxsm, BZID00, BZ0000, (select yszid0 from zy_brxxb0 where zyid00=v_zyid00), p_kdksbh, p_yyrq00, v_yysj00, JYFS00, --煎药方式 DJFSMC --代煎 from BQ_YPYZ00 where YZID00 = p_yzid00; --插入药品医嘱明细表 FOR REC IN CUR_ZS_YPYZMX LOOP select qzfs00 into v_qzfs00 from bm_yd0000 where ypnm00=REC.YPNM00; select zqcs00 into v_zqcs00 from bm_pc0000 where pcid00=(select pcid00 from BQ_YPYZ00 where yzid00=p_yzid00); insert into BQ_YPYZMX( YZID00, --医嘱ID(分组号) YZMXID, --ID号,序列号(分组号) YPNM00, --药品内部编号 SFDZGG, --'0'是,'1'否 YPMC00, --药品名称 YPGG00, --药品规格 PSID00, --皮试ID 对应MZ_PS0000表 PSMC00, --皮试名称(冗余) MCSL00, --每次数量(剂量单位的每次剂量) JLDW00, --剂量单位(J)(冗余) LYL000, --领药量(发药单位,临时、用药医嘱使用) ZYFYDW, --住院发药单位(Z)(住院药房维护)(冗余) Z2J000, --住院发药/基本单位转换率(默认药房) XMYFMC, --草药细目用法名称 TQFS00, --提取方式'0'正常提取,不收费'1'正常提取,收费'2'不提取,不收费 YZCLLB, --'正常','嘱托','基数药','自备','门诊处理','领药','出院带药' BZ0000, --备注 ZFBL00, --自付比率 YBLB00, --医保类别 QZFSID, --取整方式 DMBZ00, --毒麻标志 zffsbz ) VALUES --select ( v_yzid00,--YZID00 SQ_BQ_YZMX00_YZMXID.NextVal,--YZMXID, REC.YPNM00, REC.SFDZGG, REC.YPMC00, REC.YPGG00, REC.PSID00, REC.PSMC00, REC.MCSL00, REC.JLDW00, decode(v_yplbbh,'2',ceil(rec.mcsl00*v_zqcyts/REC.Z2J000), decode(v_qzfs00,0,ceil(rec.mcsl00*nvl(rec.j2j000,1)/rec.z2j000)*v_zqcs00*p_zqs000, 1,ceil(rec.mcsl00*nvl(rec.j2j000,1)/rec.z2j000*v_zqcs00)*p_zqs000, 2,ceil(rec.mcsl00*nvl(rec.j2j000,1)/rec.z2j000*v_zqcs00*p_zqs000), 3,round(rec.mcsl00*nvl(rec.j2j000,1)/rec.z2j000*v_zqcs00*p_zqs000,2), 4,ceil(rec.mcsl00*nvl(rec.j2j000,1)/rec.z2j000*v_zqcs00*p_zqs000) ) ), REC.ZYFYDW, REC.Z2J000, REC.XMYFMC, REC.TQFS00, '出院带药',--'正常','嘱托','基数药','自备','门诊处理','领药','出院带药' REC.BZ0000, REC.ZFBL00, REC.YBLB00, REC.QZFSID, REC.DMBZ00, REC.zffsbz ); END LOOP; --close CUR_ZS_YPYZMX; --自动生成附加费用 SP_BQ_YPFJFY_ZYDZBL(v_yzid00,0); END IF; --from BQ_YPYZMX where YZID00 = p_yzid00; v_count3:=0; IF V_ERROR0=1 THEN V_KCBZYP:='('; FOR REC IN CUR_ZS_KCBZYP LOOP V_KCBZYP:=V_KCBZYP||REC.YPMC00||','; v_count3:=v_count3+1; END LOOP; --close CUR_ZS_KCBZYP; V_KCBZYP:=SUBSTR(V_KCBZYP,1,(length(V_KCBZYP)-1)); V_KCBZYP:=V_KCBZYP||')'; END IF; if v_count3=0 then V_KCBZYP:=''; V_ERROR0:=0; end if; exception when others then Raise_Application_Error(-20002,substrb(NVL(SQLERRM, '原因不明出错')||'!*',1,220)); --||'SP_BQ_YPYZFZ:p_yzid00:'||To_Char(p_yzid00)||'p_qyrq00:'||p_qyrq00 --||'p_qysj00:'||p_qysj00||'p_pxsj00:'||p_pxsj00||'p_lrrxm0:'||p_lrrxm0 end;