procedure SP_YS_CFXXB0_MZDZBL( PCFLSH0 in varchar2, --EMR医技诊疗单ID or 处方号 唯一号 用于后期通讯 PGHID00 in number, --EMR 挂号ID PYFBMBH in number, --药房部门编号 PBRID00 in number, --病人ID号 PBRXM00 in varchar2, --病人姓名 PXB0000 in varchar2, --性别 PDJH000 in number, --单据号 PBRLB00 in number, --病人类别 PYSGZH0 in number, --医师工作号 PSSKS00 in number, --所属科室(医师) PGHKS00 in number, --挂号科室(病人) PYPDLBH in varchar2, --药品大类编号 PCFXZ00 in varchar2, --处方性质'0'普通药品'1'毒'2'麻'3'神经 PZYTS00 in number default 1, --中药贴数 PBZID00 in number, --病症ID号(主要用于毒麻处方) 对应BM_DMZD00表 PCFZT00 in varchar2 default '0', --处方状态 0:未提交,1:已提交,2:已作废。 PFJFDJH in number, --附加费单据号 PCZY000 in number, --操作员 PSRRQ00 in varchar2, --输入日期 PSRSJ00 in varchar2, --输入时间 PCFMBMC in varchar2, --协定处方模板名称 PCFZJE0 in number, --处方总金额 PBRDZ00 in varchar2, --病人地址 PZYDJS0 in number default 0, --中药代煎数 PTSBZBH in varchar2, --特殊病种编号 PCFDGS0 in varchar2, --0:麻醉和第一类精神药品 1:第二类精神药品 2:儿科 3:儿科+急诊 4:急诊 5: 普通 PTHBZ00 in varchar2, --退回标志 PTHYY00 in varchar2, --退回原因 PZYMRCS in number default 2, --中药每日服用次数 PZYSFJJ in varchar2 default 'n', --中药是否急煎 PZYSFNJ in varchar2 default 'n', PZYNJJL in number, PZJZFID in varchar2, --中药处方整剂嘱咐ID PZYMRJS in number default 1, --中药每日剂数 PJYFS00 in varchar2, PYPCZFL in varchar2, PDJFSMC in varchar2, PCFSM00 in varchar2, PZDM000 in varchar2, PZDMC00 in varchar2, PBRZJBH in varchar2, --病人证件编号 PTSYS00 in number default -1, --提示颜色 PCZLX00 in varchar2, --操作类型 0 新增 1 修改 2 删除 PCFID00 in varchar2, --处方的明细ID or 医技单的明细ID 唯一号 PYPNM00 in number, --药品内码 PYPMC00 in varchar2, --药品名称 PYPGG00 in varchar2, --规格 PLSDJ00 in number, --零售单价(处方单位) PYFID00 in varchar2, --用法ID PPCID00 in number, --频次ID PCSL000 in number, --次用量(剂量单位) PJLDW00 in varchar2, --剂量单位(J) PYYSJ00 in number, --用药时间数 PYYSJDW in varchar2, --时间单位(天或小时) PYFSMID in varchar2, PZB0000 in varchar2, --组别 PPSLBID in varchar2, --皮试类别ID PSFZBY0 in varchar2 default 'N', --是否自备药'Y'是'N'否 PZJYFID in varchar2, --中药整剂用法ID PXMYFID in varchar2, PYPZSL0 in number, --药品总数量(处方单位) PCFDW00 in varchar2, --处方单位 PZHL000 in number, --转换率(处方单位/剂量单位) PSFXS00 in varchar2, --是否显示'Y'显示,'N'不显示,协定处方用 PZFBL00 in number, --医保自付比率 PYBLB00 in varchar2, --医保类别 '4'甲类'5'乙类'6'民族用药'7'非医保 PCXBZ00 in varchar2 default 'Z', PCQLY00 in varchar2, --处方超期理由 PF2J000 in number default 1, PZQCS00 in number, --周期次数 PZXCS00 in number, PYYZF00 in varchar2, PXMYFMC in varchar2, PZQCD00 in number default 1, PZFFSBZ in varchar2 default 'N', --自费发送标志 PTSYS01 in number default -1, --处方明细提示颜色 PDBRXM0 in varchar2 default null, --代办人姓名 PDBRSFZ in varchar2 default null, --代办人身份证 PSFKSLY in char default 'N', --是否科室领药 PXDFBZ0 in char default '0', --协定方标志 PZYE000 out number, PTSXZXX out varchar2, --特殊限制信息 PWGCFBZ in varchar2 default '0' --外购处方标志 0或空:院内处方 1:转入处方 2:转出处方 ) as -- MODIFICATION HISTORY -- Person Date Comments -- ruanbh 2018.03.15 create -- ruanbh 2020.05.19 参数控制处方允许重复 --huangzw 2020.11.30 部分药房由按盒卖转成按片卖,增加参数控制lsdj00有参数直接传入不通过药典表计算 for MZYSSJ5-20201105-002 --huangzw 2021.01.07 ys_cfxxb0和yf_mzcf00增加代办人姓名和代办人身份证 for MZYSSJ5-20201223-001 --huangzw 2021.01.04 药房增加科室领药 for MZYSSJ5-20201229-001 --huangzw 2021.02.07 yf_mzcf00.lyks00的值未插入 for MZYSSJ5-20210203-001 --caobin 2021.08.12 增加参数控制药品开药限制 MZYSSJ5-20210728-002 --huangzw 2021.08.20 毒麻诊断插入YF_MZCF00.ZDMC00 for MZYSSJ5-20210819-004 --huangzw 2021.10.12 病人地址写入到BM_BRXXB0.BRJTDZ字段 for MZYSSJ5-20210826-002 -- chenna 2021.11.10 cfzt00,wgcfbz同步到his库 for MZYSSJ5-20211110-001 --huangzw 2021.12.30 ys_cfxxb0和yf_mzcf00表增加sfxdf0字段 for MZYSSJ5-20211027-001 --huangzw 2022.01.11 修改ys_cfxxb0.sfxdf0和yf_mzcf00.sfxdf0 为XDFBZ0 for MZYSSJ5-20220111-005 VCOUNTER number; --计数器变量 ECUSTOM exception; --异常 VTSXX00 varchar2(200); --异常信息 VBRCSRQ varchar2(8); --病人出生日期 VYSXM00 varchar2(20); --医生姓名 VCFLSH0 YS_CFXXB0.CFLSH0%type; --his处方流水号 VGHID00 number(10); --his挂号id VGHH000 char(12); --his挂号号 VCFID00 number(20); --处方id VZFJE00 number(12,4); --自费金额 VQZFJE0 number(12,4); --全自费金额 VGFJE00 number(12,4); --公费金额 VYBLB00 char(1); --医保类别 VZFBL00 number(2,2); --自付比例 VLSDJ00 number(12,2); --零售单价(处方单位) VGJDJ00 number(12,2); --购进单价(入库单位) V_RETURN number; -- 1,3 前台warning 显示 2 前台回滚操作 4 前台ASK操作. V_ERROR0 VARCHAR2(200); dt1 date; VBRID00 number(12); --病人id VYFBMBH number(12); VYPNM00 number(12); VKZYPLX VARCHAR2(20); --控制药品类型 begin dt1:=sysdate; SP_TRANSLOG(sysdate,'SP_YS_CFXXB0_MZDZBL',PYSGZH0,PSSKS00,'开始PCFLSH0:'||PCFLSH0||',lsdj00='||plsdj00); VGHH000 := to_char(PGHID00); VCFLSH0 := PCFLSH0; select count(*) into VCOUNTER from BM_BRXXB0 where BRID00=PBRID00; select NVL(MAX(trim(VALUE0)),'N') into VKZYPLX from XT_XTCS00 where name00='YS_KYGJYPLXXZ'; if Vcounter=0 then VTSXX00 := '病人ID='||PBRID00||'不存在!'; raise ECUSTOM; end if; select D.ZYE000 into PZYE000 FROM BM_BRXXB0 A,IC_YBBRLB C,SF_BRZHXX D where A.YBLB00=C.YBLB00 and A.FBBH00=C.FBBH00 and A.BRID00=D.BRID00(+) and A.BRID00=PBRID00; select GHID00,GHH000,BRID00 into VGHID00,VGHH000,VBRID00 from SF_BRXXB0 where GHH000=VGHH000; if VBRID00<>PBRID00 then VTSXX00 := '病人信息与挂号信息不符,请重新读卡后操作!'; raise ECUSTOM; end if; if PBRDZ00 is not null then update BM_BRXXB0 set BRJTDZ=PBRDZ00 where BRID00=PBRID00 ; end if; select BRCSRQ into VBRCSRQ from BM_BRXXB0 where BRID00=PBRID00; select ZWXM00 into VYSXM00 from BM_YGBM00 where YGBH00=PYSGZH0; select count(*) into VCOUNTER from YS_CFXXB0 where CFLSH0=VCFLSH0; if VCOUNTER=0 then --select SF_YK_GETLSH('MZYF_MZCFH') into VCFLSH0 from dual; insert into YS_CFXXB0 ( CFLSH0,YFBMBH,GHID00,GHH000,BRID00,BRXM00,XB0000,DJH000,BRLB00,YSGZH0,SSKS00,GHKS00,YPDLBH,CFXZ00,ZYTS00, BZID00,CFZT00,FJFDJH,CZY000,SRRQ00,SRSJ00,CFMBMC,CFZJE0,BRDZ00,ZYDJS0,TSBZBH,CFDGS0,THBZ00,THYY00,ZYMRCS, ZYSFJJ,ZYSFNJ,ZYNJJL,ZJZFID,ZYMRJS,JYFS00,YPCZFL,DJFSMC,ZDM000,ZDMC00,BRZJBH,TSYS00,WDWID0,DBRXM0,DBRSFZ,WGCFBZ,XDFBZ0 )values ( VCFLSH0,PYFBMBH,VGHID00,VGHH000,PBRID00,PBRXM00,PXB0000,PDJH000,PBRLB00,PYSGZH0,PSSKS00,PGHKS00,PYPDLBH,PCFXZ00,PZYTS00, PBZID00,PCFZT00,PFJFDJH,PCZY000,PSRRQ00,PSRSJ00,PCFMBMC,PCFZJE0,PBRDZ00,PZYDJS0,PTSBZBH,PCFDGS0,PTHBZ00,PTHYY00,PZYMRCS, PZYSFJJ,PZYSFNJ,PZYNJJL,PZJZFID,PZYMRJS,PJYFS00,PYPCZFL,PDJFSMC,PZDM000,PZDMC00,PBRZJBH,decode(PTSYS00,-1,null,PTSYS00),PCFLSH0,PDBRXM0,PDBRSFZ,PWGCFBZ,PXDFBZ0 ); else update YS_CFXXB0 set CFLSH0=VCFLSH0,YFBMBH=PYFBMBH,GHID00=VGHID00,GHH000=VGHH000,BRID00=PBRID00,BRXM00=PBRXM00,XB0000=PXB0000,DJH000=PDJH000,BRLB00=PBRLB00,YSGZH0=PYSGZH0,SSKS00=PSSKS00,GHKS00=PGHKS00,YPDLBH=PYPDLBH,CFXZ00=CFXZ00,ZYTS00=PZYTS00, BZID00=PBZID00,CFZT00=PCFZT00,FJFDJH=PFJFDJH,CZY000=PCZY000,SRRQ00=PSRRQ00,SRSJ00=PSRSJ00,CFMBMC=PCFMBMC,CFZJE0=PCFZJE0,BRDZ00=PBRDZ00,ZYDJS0=PZYDJS0,TSBZBH=PTSBZBH,CFDGS0=PCFDGS0,THBZ00=PTHBZ00,THYY00=PTHYY00,ZYMRCS=PZYMRCS, ZYSFJJ=PZYSFJJ,ZYSFNJ=PZYSFNJ,ZYNJJL=PZYNJJL,ZJZFID=PZJZFID,ZYMRJS=PZYMRJS,JYFS00=PJYFS00,YPCZFL=PYPCZFL,DJFSMC=PDJFSMC,ZDM000=PZDM000,ZDMC00=PZDMC00,BRZJBH=PBRZJBH,TSYS00=decode(PTSYS00,-1,null,PTSYS00),WDWID0=PCFLSH0,DBRXM0=PDBRXM0,DBRSFZ=PDBRSFZ,WGCFBZ=PWGCFBZ,XDFBZ0=PXDFBZ0 where CFLSH0=VCFLSH0; end if; if PCZLX00='0' then --select SQ_YS_CFMX00_CFID00.nextval into VCFID00 from dual; select count(*) into VCOUNTER from YS_CFMX00 where CFLSH0=VCFLSH0 and YPNM00=PYPNM00 and PCID00=PPCID00; if VCOUNTER>0 then if PYPDLBH='2' then delete from YS_CFMX00 where CFLSH0=VCFLSH0 and YPNM00=PYPNM00; delete from YF_MZCFMX where CFLSH0=VCFLSH0 and YPNM00=PYPNM00; else select count(*) into VCOUNTER from XT_XTCS00 where NAME00='YS_CFYPSFYXCF' and VALUE0='Y'; if VCOUNTER=0 then --溶酶药品允许重复 --select count(*) into VCOUNTER from bm_ydtssx a,bm_ypsx00 b where a.sxbh00=b.sxbh00 and b.sxbh00='07' and a.ypnm00=PYPNM00; select count(*) into VCOUNTER from (select a.ypnm00 from YS_CFMX00 a,bm_yd0000 b where a.ypnm00=b.ypnm00 and CFLSH0=VCFLSH0 and a.YPNM00=PYPNM00 and a.PCID00=PPCID00 and instr(','||VKZYPLX||',', ','||trim(b.JXBH00)||',')>0 group by a.ypnm00); if VCOUNTER=1 then VTSXX00 := PYPMC00||'药品重复'; raise ECUSTOM; end if; end if; end if; end if; VCFID00 := PCFID00; insert into YS_CFMX00 ( CFID00,CFLSH0,YPNM00,YPMC00,YPGG00,LSDJ00,YFID00,PCID00,CSL000,JLDW00,YYSJ00,YYSJDW,YFSMID,ZB0000, PSLBID,SFZBY0,ZJYFID,XMYFID,YPZSL0,CFDW00,ZHL000,SFXS00,ZFBL00,YBLB00,CXBZ00,THBZ00,TSYS00,CQLY00, F2J000,ZQCS00,ZXCS00,YYZF00,XMYFMC,ZQCD00,ZFFSBZ,WDWID0 )values ( VCFID00,VCFLSH0,PYPNM00,PYPMC00,PYPGG00,PLSDJ00,PYFID00,PPCID00,PCSL000,PJLDW00,PYYSJ00,PYYSJDW,PYFSMID,PZB0000, PPSLBID,PSFZBY0,PZJYFID,PXMYFID,PYPZSL0,PCFDW00,PZHL000,PSFXS00,PZFBL00,PYBLB00,PCXBZ00,PTHBZ00,decode(PTSYS01,-1,null,PTSYS01),PCQLY00, PF2J000,PZQCS00,PZXCS00,PYYZF00,PXMYFMC,PZQCD00,nvl(PZFFSBZ,'N'),PCFID00 ); elsif PCZLX00='1' then select CFID00 into VCFID00 from YS_CFMX00 where CFID00=PCFID00; update YS_CFMX00 set CFID00=VCFID00,CFLSH0=VCFLSH0,YPNM00=PYPNM00,YPMC00=PYPMC00,YPGG00=PYPGG00,LSDJ00=PLSDJ00,YFID00=PYFID00,PCID00=PPCID00,CSL000=PCSL000,JLDW00=PJLDW00,YYSJ00=PYYSJ00,YYSJDW=PYYSJDW,YFSMID=PYFSMID,ZB0000=PZB0000, PSLBID=PPSLBID,SFZBY0=PSFZBY0,ZJYFID=PZJYFID,XMYFID=PXMYFID,YPZSL0=PYPZSL0,CFDW00=PCFDW00,ZHL000=PZHL000,SFXS00=PSFXS00,ZFBL00=PZFBL00,YBLB00=PYBLB00,CXBZ00=PCXBZ00,THBZ00=PTHBZ00,TSYS00=decode(PTSYS01,-1,null,PTSYS01),CQLY00=PCQLY00, F2J000=PF2J000,ZQCS00=PZQCS00,ZXCS00=PZXCS00,YYZF00=PYYZF00,XMYFMC=PXMYFMC,ZQCD00=PZQCD00,ZFFSBZ=PZFFSBZ,WDWID0=PCFID00 WHERE CFID00=VCFID00; elsif PCZLX00='2' then delete from YS_CFMX00 where CFID00=PCFID00; delete from YF_MZCFMX where CFID00=PCFID00; select count(*) into VCOUNTER from YS_CFMX00 where CFLSH0=VCFLSH0; if VCOUNTER=0 then delete from YS_CFXXB0 where CFLSH0=VCFLSH0; delete from YF_MZCF00 where CFLSH0=VCFLSH0; --删除带出项目 delete from YJ_YWMX00 where YJDJH0 in(select YJDJH0 from YJ_YW0000 where YZCFID=VCFLSH0 and ZYHGHH=VGHH000 and MZZYBZ='0'); delete from YJ_YW0000 where YZCFID=VCFLSH0 and ZYHGHH=VGHH000 and MZZYBZ='0'; end if; end if; if PCZLX00<>'2' then delete from YF_MZCFMX where CFID00=PCFID00; delete from YF_MZCF00 where CFLSH0=VCFLSH0; insert into YF_MZCF00( CFLSH0,YFBMBH,GHID00,GHH000,BRID00,BRXM00,XB0000,CSRQ00,DJH000,YSGZH0,YSXM00,SSKS00,GHKS00,ZYTS00,YPDLBH, CFXZ00,BZID00,BZMC00,CFZT00,SFKSLY,PSZT00,FJFDJH,CZY000,SRRQ00,SRSJ00,CFZJE0,BRDZ00,BZ0000,CFSRBZ,ZYDJS0, ZYMRCS,BCCFH0,TSBZBH,JYFS00,ypczfl,zysfjj,SJLY00,ZYNJJL,Zjzfid,Tsys00,DBRXM0,DBRZJH,LYKS00,ZDMC00,WGCFBZ,XDFBZ0 ) select CFLSH0,YFBMBH,GHID00,GHH000,BRID00,BRXM00,XB0000,VBRCSRQ,DJH000,YSGZH0,VYSXM00,SSKS00,GHKS00,ZYTS00,YPDLBH, CFXZ00,A.BZID00,BZMC00,decode(CFZT00,'b','b','0'),PSFKSLY,'0',FJFDJH,CZY000,SRRQ00,SRSJ00,CFZJE0,BRDZ00,null,'0',ZYDJS0, ZYMRCS,'',TSBZBH,JYFS00,ypczfl,zysfjj,'1',ZYNJJL,ZJZFID,TSYS00,DBRXM0,DBRSFZ,decode(PSFKSLY,'N',null,SSKS00),ZDMC00,WGCFBZ,XDFBZ0 from YS_CFXXB0 A,BM_DMZD00 b where a.bzid00=b.bzid00(+)and CFLSH0=VCFLSH0; VZFJE00:=0; VQZFJE0:=0; VGFJE00:=0; VYBLB00:=PYBLB00; VLSDJ00:=PLSDJ00; select count(*) into VYFBMBH FROM XT_XTCS00 A WHERE NAME00='YS_MJZYF0' AND INSTR(A.VALUE0,PYFBMBH)>0; select count(*) into VYPNM00 FROM XT_XTCS00 A WHERE NAME00='YS_MJZYFYPBM' AND INSTR(A.VALUE0,PYPNM00)>0; if VYFBMBH>0 AND VYPNM00>0 then insert into YF_MZCFMX( CFID00,CFLSH0,YPNM00,YPMC00,YPGG00,YPYFMC,PCMC00,CSL000,JLDW00,YYSJ00,YYSJDW,YFSMMC,ZB0000,ZJYFMC,XMYFMC, YPZSL0,CFDW00,ZHL000,CXBZ00,SFXS00,SFZBY0,THBZ00,PSLBID,BZ0000,ZXCS00,CQLY00,F2J000,YPDLBH,SFSLYK,ZFJE00, QZFJE0,GFJE00,YBLB00,ZFBL00,LSDJ00,GJDJ00,TSYS00,Sqys00,ZFFSBZ) select A.CFID00,A.CFLSH0,A.YPNM00,A.YPMC00,A.YPGG00,B.YPYFMC,C.PCMC00,(DECODE(A.CSL000,NULL,NULL,(ROUND((A.CSL000/D.NSBL00),4)))),A.JLDW00,A.YYSJ00,A.YYSJDW,A.YYZF00,A.ZB0000,B.YPYFMC,A.XMYFMC, (ROUND((A.YPZSL0/D.NSBL00),3)),A.CFDW00,A.ZHL000,'Z','Y',SFZBY0,'0',A.PSLBID,A.YYZF00,ZXCS00, A.CQLY00, A.F2J000,PYPDLBH,'Y',VZFJE00, VQZFJE0,VGFJE00,VYBLB00,VZFBL00,PLSDJ00,VGJDJ00,A.TSYS00,decode(A.TSYS00,7,Y.YSGZH0,null),ZFFSBZ from YS_CFMX00 A,BM_YPYF00 B,BM_PC0000 C, BM_YD0000 D, YS_CFXXB0 Y where A.YPNM00=D.YPNM00 and A.cfid00=VCFID00 and A.YFID00=B.YFID00(+) and A.PCID00=C.PCID00(+) and Y.CFLSH0 = A.CFLSH0; else insert into YF_MZCFMX( CFID00,CFLSH0,YPNM00,YPMC00,YPGG00,YPYFMC,PCMC00,CSL000,JLDW00,YYSJ00,YYSJDW,YFSMMC,ZB0000,ZJYFMC,XMYFMC, YPZSL0,CFDW00,ZHL000,CXBZ00,SFXS00,SFZBY0,THBZ00,PSLBID,BZ0000,ZXCS00,CQLY00,F2J000,YPDLBH,SFSLYK,ZFJE00, QZFJE0,GFJE00,YBLB00,ZFBL00,LSDJ00,GJDJ00,TSYS00,Sqys00,ZFFSBZ) select A.CFID00,A.CFLSH0,A.YPNM00,A.YPMC00,A.YPGG00,B.YPYFMC,C.PCMC00,(DECODE(A.CSL000,NULL,NULL,(ROUND((A.CSL000/D.NSBL00),4)))),A.JLDW00,A.YYSJ00,A.YYSJDW,A.YYZF00,A.ZB0000,B.YPYFMC,A.XMYFMC, (ROUND((A.YPZSL0/D.NSBL00),3)),A.CFDW00,A.ZHL000,'Z','Y',SFZBY0,'0',A.PSLBID,A.YYZF00,ZXCS00, A.CQLY00, A.F2J000,PYPDLBH,'Y',VZFJE00, VQZFJE0,VGFJE00,VYBLB00,VZFBL00, PLSDJ00,--round(d.lsj000/d.k2j000*D.M2J000,2), VGJDJ00,A.TSYS00,decode(A.TSYS00,7,Y.YSGZH0,null),ZFFSBZ from YS_CFMX00 A,BM_YPYF00 B,BM_PC0000 C, BM_YD0000 D, YS_CFXXB0 Y where A.YPNM00=D.YPNM00 and A.cfid00=VCFID00 and A.YFID00=B.YFID00(+) and A.PCID00=C.PCID00(+) and Y.CFLSH0 = A.CFLSH0; end if; end if; delete from XT_ZJRWB0 where BM0000='YS_CFXXB0' and ZJZDZ0=VCFLSH0 and ZXBZ00='0'; delete from XT_ZJRWB0 where BM0000='YS_CFMX00' and ZJZDZ0=to_char(VCFID00) and ZXBZ00='0'; delete from XT_ZJRWB0 where BM0000='YF_MZCF00' and ZJZDZ0=VCFLSH0 and ZXBZ00='0'; delete from XT_ZJRWB0 where BM0000='YF_MZCFMX' and ZJZDZ0=to_char(VCFID00) and ZXBZ00='0'; SP_TRANSLOG(sysdate,'SP_YS_CFXXB0_MZDZBL',PYSGZH0,PSSKS00,'结束PCFLSH0:'||PCFLSH0||',耗时:'||ROUND(TO_NUMBER(sysdate - dt1) * 24 * 60 * 60)); exception when no_data_found then raise_application_error(-20001,substrb('没有找到数据!*'||sqlerrm,1,240)); when ECUSTOM then raise_application_error(-20010,substrb(VTSXX00||'!*',1,240)); when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end;