CREATE OR REPLACE PROCEDURE SP_OUTP_MEDICAL_ORDER_HTBL( P_LSH000 in varchar2, --处理医嘱批次流水号 P_REGISTER_NO in varchar2, --挂号号 P_PATIENT_NAME in varchar2, --病人姓名 P_PID in varchar2, --病人ID P_ERRORCODE out varchar2, --返回错误代码 0 失败 1 成功 P_ERRORINFO out varchar2, --返回错误信息 P_SYSTEMINFO out varchar2 --返回系统错误信息 ) as lv_order_sn SD_DZBLJK.OUTP_MATERIAL_ORDER_HTBL.ORDER_SN%type; lv_WBCFH0 SD_DZBLJK.BLJK_MZCF00.WBCFH0%type; lv_CFID00 YF_MZCFMX.CFID00%type; lv_CFLSH0 YF_MZCF00.CFLSH0%type; lv_YJDJH0 YJ_YW0000.YJDJH0%type; lv_YJ_WBZID0 SD_DZBLJK.BLJK_YW0000.WBZID0%type; cursor C_CF is select A.*,B.GHID00 SFGHID,B.FBBH00 from SD_DZBLJK.BLJK_MZCF00 A,SF_BRXXB0 B where LSH000=P_LSH000 and rpad(A.GHH000,12,' ')=B.GHH000 and nvl(CLBZ00,'0')='0' and not exists(select 1 from SD_DZBLJK.BLJK_MZCF00 E,YF_MZCF00 F where E.CFLSH0=F.CFLSH0 and E.WBCFH0=A.WBCFH0 and F.ghh000=b.ghh000 and F.CFZT00 not in ('0','3') and F.SJLY00='1'); cursor C_CFMX is select * from SD_DZBLJK.BLJK_MZCFMX where LSH000=P_LSH000 and nvl(CLBZ00,'0')='0' and WBCFH0=lv_WBCFH0 order by WBZID0,WBYZID; cursor C_YW is select A.*,B.LBBH00,(select GHID00 from SF_BRXXB0 where GHH000=rpad(A.ZYHGHH,12,' ')) GHID00,ROWNUM RN from SD_DZBLJK.BLJK_YW0000 A,BM_ZLZD00 B where LSH000=P_LSH000 and A.ZLXMID=B.ZLXMID and nvl(CLBZ00,'0')='0' and not exists(select 1 from SD_DZBLJK.BLJK_YW0000 E,YJ_YW0000 F where WBYZID=A.WBYZID and E.YJDJH0=F.YJDJH0 and f.zyhghh=rpad(A.zyhghh,12,' ') and F.XMZT00 not in ('0','1') and F.SJLY00='1') order by WBZID0,WBYZID; --处理检验同组 cursor C_JYTZ is select min(WBZID0) WBZID0,min(YJDJH0) YJDJH0,COUNT(*) C1 from SD_DZBLJK.BLJK_YW0000 A where LSH000=P_LSH000 and YJDJH0 is not null and exists(select 1 from BM_ZLZD00 where ZLXMID=A.ZLXMID and LBBH00=4) and CLBZ00='1' and XMZT00 in ('0','1') group by WBZID0; cursor C_JYTZMX is select WBZID0,YJDJH0,YJFZH0 from SD_DZBLJK.BLJK_YW0000 A where LSH000=P_LSH000 and YJDJH0<>YJFZH0 and WBZID0=lv_YJ_WBZID0; cursor C_YWCL is select a.* from SD_DZBLJK.OUTP_MATERIAL_ORDER_HTBL a where ORDER_SN = lv_order_sn; lv_CZRQ00 varchar2(8); lv_CZSJ00 varchar2(8); lv_TZBZ00 varchar2(1); ---同组标志 Y 同组 N 不同组 lv_YJFZH0 YJ_YW0000.YJFZH0%type; lv_RETURN_YJFZH0 YJ_YW0000.YJFZH0%type; lv_ZXJG00 BM_ZLZD00.JKBH01%type; lv_count0 number(3); lv_PCMC00 BM_PC0000.PCMC00%type; lv_PCID00 BM_PC0000.PCID00%type; lv_ZQCS00 BM_PC0000.ZQCS00%type; lv_ZQDW00 varchar2(50); lv_YFID00 BM_YPYF00.YFID00%type; lv_ZB0000 number(3); lv_WBZID0_01 SD_DZBLJK.BLJK_MZCFMX.WBZID0%type; lv_WBZID0_02 SD_DZBLJK.BLJK_MZCFMX.WBZID0%type; lv_SFJZ00 varchar2(2); --是否急诊挂号 N 否 Y 是 lv_ZYCFPD varchar2(2); --是否中药处方 0 否 1 是 lv_BRID00 BM_BRXXB0.BRID00%type; lv_YBLB00 BM_BRXXB0.YBLB00%type; lv_YBBRLB BM_BRXXB0.YBBRLB%type; lv_FBBH00 BM_BRXXB0.FBBH00%type; lv_YBZXLB IC_YBBRLB.YBZXLB%type; lv_BRCSRQ BM_BRXXB0.BRCSRQ%type; lv_BRZJBH BM_BRXXB0.BRZJBH%type; lv_LSDJ00 YF_MZCFMX.LSDJ00%type; lv_NSBL00 BM_YD0000.NSBL00%type; lv_ZFBL00 YF_MZCFMX.ZFBL00%type; lv_F2J000 YF_MZCFMX.F2J000%type; lv_M2J000 YF_MZCFMX.ZHL000%type; lv_YPYBLB YF_MZCFMX.YBLB00%type; lv_CFZJE0 number(10,4); lv_YPZJE0 number(10,4); lv_ZXCS00 number(5,2); lv_PARAMSTR varchar2(100); lv_ERRORCODE varchar2(20); lv_ZJYFID YS_CFMX00.ZJYFID%type; --草药整剂用法 lv_XMYFID YS_CFMX00.XMYFID%type; --草药细目用法 lv_YJ_CZBZ00 varchar2(5); lv_CF_SFTZ00 varchar2(2); --处方是否同组 lv_SSKS00 BM_BMBM00.BMBH00%TYPE; lv_GHID00 SF_BRXXB0.GHID00%TYPE; lv_Z2J000 BM_YD0000.Z2J000%TYPE; lv_F2J001 BM_YD0000.F2J000%TYPE; lv_IS_DISEASE varchar2(5); lv_YPZSL0 SD_DZBLJK.BLJK_MZCFMX.YPZSL0%type; lv_CFDW00 SD_DZBLJK.BLJK_MZCFMX.CFDW00%type; ls_count0 varchar2(1); ls_wbzid0 varchar2(50); -- Person Date Comments -- linzy 2017.10.30 create -- linzy 2017.11.05 增加写入YS_CFXXB0、YS_CFMX00 -- linzy 2017.12.05 增加用法带出执行过程 SP_YS_YJXMZDDC -- linzy 2017.12.06 增加如有生成过处方号则采用旧的处方号不重新生成处方 -- linzy 2017.12.16 增加系统错误信息参数P_SYSTEMINFO返回 -- linzy 2017.12.16 修改医生处方整剂用法及细目用法不同步显示的问题 -- linzy 2017.12.17 增加入参P_REGISTER_NO,P_PATIENT_NAME -- linzy 2018.01.16 增加特殊病种写入 -- linzy 2018.01.19 增加超期理由同步 -- yuyao 2018.01.20 SF_YK_GETLSH改为SF_OUTP_YK_GETLSH -- SP_YS_YJXMZDDC改为SP_OUTP_YS_YJXMZDDC -- SP_YS_JYSQWH_JZ改为SP_OUTP_YS_JYSQWH_JZ -- SP_YS_JCSQWH_SF改为 SP_OUTP_YS_JCSQWH_SF -- linzy 2018.01.23 增加YS_CFMX00细目用法写入 -- linzy 2018.01.24 修改检验同组规则 -- linzy 2018.01.25 去掉处方ZXCS00的过程中的回写 -- linzy 2018.01.26 处方增加医生所属科室回写 -- linzy 2018.02.01 处方诊疗项目增加已同步HIS判断,解决 状态不同步时,单据重复生成 -- 处方增加状态不是0 3 不允许生成。 诊疗项目状态非0或1 不允许重新生成 -- linzy 2018.02.05 修正处方未同步成功,重新保存又生成新处方判断 条件错误 -- linzy 2018.02.18 更改用法带出项目的急诊标识的判断规则 -- yuyao 2018.03.12 修改执行次数根据传入的值保存。lv_ZXCS00 -- linzy 2018.10.15 增加过程SP_BLJK_XT_TSXZ00、SP_BLJK_YS_YJTSXZ规则限 制 -- hetf 2018.10.31 增加NSBL00 -- wusd 2020.05.14 海泰申请XMZT00初始改为0 for LKSX-20200513-001 -- dsm 2020.07.15 中间表YJDJH0>0的当修改 -- -------- ----------------- ------------------------------------------------------ begin P_ERRORCODE:='0'; P_ERRORINFO:='生成医嘱失败!'; P_SYSTEMINFO:='生成医嘱失败!'; lv_ERRORCODE:='01'; lv_PARAMSTR:='['||'P1='||P_LSH000||',P2='||P_REGISTER_NO||',P3='||P_PATIENT_NAME||',P4='||P_PID||']'; select to_char(sysdate,'yyyymmdd'),to_char(sysdate,'HH24:MI:SS') into lv_CZRQ00,lv_CZSJ00 from dual; select count(1) into lv_COUNT0 from SD_DZBLJK.BLJK_MZCF00 where LSH000=P_LSH000; if lv_COUNT0=0 then select count(1) into lv_COUNT0 from SD_DZBLJK.BLJK_YW0000 where LSH000=P_LSH000; end if; --没有需要处理的数据 if lv_COUNT0=0 then P_ERRORCODE:='0'; P_ERRORINFO:='没有待处理的医嘱!'; P_SYSTEMINFO:=P_ERRORINFO; return; end if; --取病人基本信息 lv_ERRORCODE:='02'; select nvl(max(BRID00),0) into lv_BRID00 from SD_DZBLJK.BLJK_MZCF00 where LSH000=P_LSH000; if lv_BRID00=0 then select nvl(max(BRID00),0) into lv_BRID00 from SD_DZBLJK.BLJK_YW0000 where LSH000=P_LSH000; end if; SP_BLJK_CZRZ00(lv_BRID00,0,P_LSH000,'SP_OUTP_MEDICAL_ORDER_HTBL','0'); if lv_BRID00=0 then P_ERRORCODE:='0'; P_ERRORINFO:='获取病人基本失败[错误代码:'||lv_ERRORCODE||'],请刷新!'; P_SYSTEMINFO:=P_ERRORINFO||lv_PARAMSTR; return; end if; -- lv_ERRORCODE:='03'; -- SP_OUTP_ORDER_CLEAR_HTBL(P_PATIENT_NAME,P_REGISTER_NO,P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); -- if lv_ERRORCODE='0' then -- return; -- end if; lv_ERRORCODE:='031'; begin select A.FBBH00,A.YBLB00,A.BRCSRQ,A.BRZJBH,B.YBZXLB,YBBRLB into lv_FBBH00,lv_YBLB00,lv_BRCSRQ,lv_BRZJBH,lv_YBZXLB,lv_YBBRLB from BM_BRXXB0 A,IC_YBBRLB B where A.BRID00=lv_BRID00 and A.YBLB00=B.YBLB00 and A.FBBH00=B.FBBH00 and rownum=1; exception when others then P_ERRORCODE:='0'; P_ERRORINFO:='获取病人费别信息失败[错误代码:'||lv_ERRORCODE||'],请刷新!'; P_SYSTEMINFO:=P_ERRORINFO||lv_PARAMSTR; return; end; --开始处理处方 lv_ERRORCODE:='04'; P_SYSTEMINFO:='生成处方失败!'; for F_CF in C_CF loop ls_count0:='0'; lv_WBCFH0:=F_CF.WBCFH0; lv_CFZJE0:=0; --先取该对应的处方是否有生成过 select nvl(trim(max(CFLSH0)),'0') into lv_CFLSH0 from SD_DZBLJK.BLJK_MZCF00 A where WBCFH0=lv_WBCFH0 and not exists(select 1 from YF_MZCF00 where CFLSH0=A.CFLSH0); --未生成处方号则重新提取处方号 if lv_CFLSH0='0' then select SF_OUTP_YK_GETLSH('MZYF_MZCFH') into lv_CFLSH0 from dual; end if; --取医生所属科室 select nvl(max(BMBH00),0) into lv_SSKS00 from BM_YGBM00 where YGBH00=F_CF.YSGZH0; --写入药房处方信息 insert into YF_MZCF00(CFLSH0,YFBMBH,GHID00,GHH000,BRID00, BRXM00,XB0000,CSRQ00,YSGZH0,YSXM00,SSKS00,GHKS00,DJH000, ZYTS00,YPDLBH,CFXZ00,BZID00,BZMC00,CFZT00,SFKSLY,PSZT00, CZY000,SRRQ00,SRSJ00,CFZJE0,BRDZ00,BZ0000,CFSRBZ,ZYDJS0, FJFDJH,BRZJBH,TSBZBH,SJLY00) values(lv_CFLSH0,F_CF.YFBMBH,F_CF.SFGHID,F_CF.GHH000,F_CF.BRID00, F_CF.BRXM00,F_CF.XB0000,lv_BRCSRQ,F_CF.YSGZH0,F_CF.YSXM00,lv_SSKS00,F_CF.GHKS00,0, F_CF.ZYTS00,F_CF.YPDLBH,F_CF.CFXZ00,F_CF.BZID00,F_CF.BZMC00,'0','N',F_CF.PSZT00, F_CF.CZY000,F_CF.SRRQ00,F_CF.SRSJ00,F_CF.CFZJE0,F_CF.BRDZ00,F_CF.BZ0000,F_CF.CFSRBZ,F_CF.ZYDJS0, 0,lv_BRZJBH,F_CF.TSBZBH,'1'); --写入医生处方信息 insert into YS_CFXXB0(CFLSH0,YFBMBH,GHID00,GHH000,BRID00,BRXM00,XB0000, DJH000,BRLB00,YSGZH0,SSKS00,GHKS00,YPDLBH,CFXZ00,ZYTS00,ZYDJS0,BZID00,CFZT00, FJFDJH,CZY000,SRRQ00,SRSJ00,CFMBMC,CFZJE0,BRDZ00,TSBZBH,TSYS00,BRZJBH) values(lv_CFLSH0,F_CF.YFBMBH,F_CF.SFGHID,F_CF.GHH000,F_CF.BRID00,F_CF.BRXM00,F_CF.XB0000, 0,F_CF.FBBH00,F_CF.YSGZH0,lv_SSKS00,F_CF.GHKS00,F_CF.YPDLBH,F_CF.CFXZ00,F_CF.ZYTS00,F_CF.ZYDJS0,F_CF.BZID00,'0', 0,F_CF.CZY000,F_CF.SRRQ00,F_CF.SRSJ00,F_CF.BZMC00,F_CF.CFZJE0,F_CF.BRDZ00,F_CF.TSBZBH,F_CF.TSYS00,lv_BRZJBH); lv_ZB0000:=null; lv_WBZID0_01:=''; lv_ERRORCODE:='06'; for F_CFMX in C_CFMX loop lv_ZXCS00:=1; lv_CF_SFTZ00:='0'; SP_OUTP_CHECK_TONUMBER(F_CFMX.YPNM00,'药品内码',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_CFMX.CSL000,'次数量',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_CFMX.YYSJ00,'用药时间',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_CFMX.YPZSL0,'药品总数量',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_CFMX.ZHL000,'药品转化率',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_CFMX.ZQCD00,'周期长度',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_CFMX.ZFBL00,'自付比例',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; --中药 总量通过 过程重新计算 begin if F_CF.YPDLBH ='2' then SP_OUTP_CHECK_TONUMBER(F_CF.ZYTS00,'医嘱贴数',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(P_PID,'病人id',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; if nvl(F_CF.TSBZBH,' ')<>' ' then lv_IS_DISEASE :='Y'; else lv_IS_DISEASE:='N'; end if; select nvl(max(GHID00),0) into lv_GHID00 from SF_BRXXB0 where GHH000=lpad(P_REGISTER_NO,12,' '); select M2J000,F2J000 into lv_Z2J000,lv_F2J001 from BM_YD0000 where YPNM00=F_CFMX.YPNM00 ; --调用方法计算总量 (中草药频次ID不参与总量计算默认成1) lv_YPZSL0 := SF_YS_LYLJS0(F_CFMX.YPNM00,F_CFMX.CSL000,lv_Z2J000,1,F_CF.ZYTS00,P_PID,lv_IS_DISEASE,lv_F2J001,lv_GHID00); --总量单位 select max(MINPACKAGEUNITCODE) into lv_CFDW00 from Vw_Outp_Drug_Dict_Htbl where DRUGCODE=F_CFMX.YPNM00 and DRUGTYPECODE='CY'; -- select to_number(nvl(lv_YPZSL0,'1'))*to_number(F_CF.ZYTS00) into lv_YPZSL0 from dual; else lv_YPZSL0 := F_CFMX.YPZSL0; lv_CFDW00 := F_CFMX.CFDW00; end if; --中药 总量通过 过程重新计算 end --获取是否同组药品及组别号 select count(1) into lv_count0 from SD_DZBLJK.BLJK_MZCFMX where LSH000=P_LSH000 and WBCFH0=F_CFMX.WBCFH0 and WBZID0=F_CFMX.WBZID0; if lv_count0>1 then lv_CF_SFTZ00:='1'; if nvl(lv_WBZID0_01,' ')<>F_CFMX.WBZID0 then select nvl(lv_ZB0000,0)+1 into lv_ZB0000 from dual; lv_WBZID0_01:=F_CFMX.WBZID0; end if; else lv_WBZID0_01:=''; lv_CF_SFTZ00:='0'; end if; lv_ERRORCODE:='07'; --获取频次信息 select max(PCID00),max(PCMC00),max(ZQCS00),max(ZQDW00) into lv_PCID00,lv_PCMC00,lv_ZQCS00,lv_ZQDW00 from VW_BM_PC0000 where PCID00=F_CFMX.PCID00; --写入药房处方明细信息 select SQ_YS_CFMX00_CFID00.NEXTVAL into lv_CFID00 from DUAL; --获取细目用法 select max(YFID00) into lv_XMYFID from BM_YPYF00 where YFLBID=3 and YPYFBZ='3' and YPYFMC=F_CFMX.XMYFMC; --执行次数 --lv_ZXCS00:=nvl(F_CFMX.YYSJ00,1)*lv_ZQCS00; --再次获取药品信息 begin if lv_FBBH00=1 then select MZLSDJ,ZFBL00,F2J000,M2J000,YBLB00,NSBL00 into lv_LSDJ00,lv_ZFBL00,lv_F2J000,lv_M2J000,lv_YPYBLB,lv_NSBL00 from VW_OUTP_DRUG_ORDER_ZF_HTBL where drugcode=F_CFMX.YPNM00 and storage=F_CF.YFBMBH and FEETYPECODE=lv_FBBH00 and MEDICINEPATIENTTYPE=lv_YBBRLB and MEDICINECENTERTYPE=lv_YBZXLB and rownum=1; else select MZLSDJ,ZFBL00,F2J000,M2J000,YBLB00,NSBL00 into lv_LSDJ00,lv_ZFBL00,lv_F2J000,lv_M2J000,lv_YPYBLB,lv_NSBL00 from VW_OUTP_DRUG_ORDER_YB_HTBL where drugcode=F_CFMX.YPNM00 and storage=F_CF.YFBMBH and FEETYPECODE=lv_FBBH00 and MEDICINEPATIENTTYPE=lv_YBBRLB and MEDICINECENTERTYPE=lv_YBZXLB and rownum=1; end if; exception when others then P_ERRORCODE:='0'; P_ERRORINFO:='获取药品['||F_CFMX.YPMC00||']信息失败[错误代码'||lv_ERRORCODE||'],请刷新!'||sqlerrm; P_SYSTEMINFO:='外部处方号('||lv_WBCFH0||')'||'药品名称:'||F_CFMX.YPMC00||'('||to_char(F_CFMX.YPNM00)||')'||lv_PARAMSTR||sqlerrm; rollback; return; end; /* if F_CFMX.SFZBY0='Y' then lv_ZFBL00:='0'; end if;*/ lv_ERRORCODE:='08'; --计算处方金额 -- select round(lv_LSDJ00*F_CFMX.YPZSL0/lv_NSBL00,4) into lv_YPZJE0 from dual; select round(lv_LSDJ00*lv_YPZSL0/lv_NSBL00,4) into lv_YPZJE0 from dual; --非自备药才累加金额 if F_CFMX.SFZBY0='N' then lv_CFZJE0:=lv_CFZJE0+lv_YPZJE0; end if; --更新中间表数据 update SD_DZBLJK.BLJK_MZCFMX set CFID00=lv_CFID00,CFLSH0=lv_CFLSH0, LSDJ00=decode(substr(to_char(lv_LSDJ00),1,1),'.','0'||to_char(lv_LSDJ00),to_char(lv_LSDJ00)), ZFBL00=decode(substr(to_char(lv_ZFBL00),1,1),'.','0'||to_char(lv_ZFBL00),to_char(lv_ZFBL00)), F2J000=decode(substr(to_char(lv_F2J000),1,1),'.','0'||to_char(lv_F2J000),to_char(lv_F2J000)), ZHL000=decode(substr(to_char(lv_M2J000),1,1),'.','0'||to_char(lv_M2J000),to_char(lv_M2J000)), YYSJDW=lv_ZQDW00,ZB0000=lv_ZB0000,--ZXCS00=lv_ZQCS00, YBLB00=lv_YPYBLB,CLBZ00='1',CLRQ00=lv_CZRQ00,CLSJ00=lv_CZSJ00, ZFJE00=decode(substr(to_char(lv_YPZJE0),1,1),'.','0'||to_char(lv_YPZJE0),to_char(lv_YPZJE0)) where LSH000=P_LSH000 and WBCFH0=lv_WBCFH0 and WBYZID=F_CFMX.WBYZID; lv_ERRORCODE:='09'; --lzg 20200116 重置组别顺序 F_CFMX.zb0000 := ls_count0 ; --decode(lv_CF_SFTZ00,'0',null,lv_ZB0000) ls_wbzid0 if ls_wbzid0 <> F_CFMX.wbzid0 then select decode(ls_count0,'0','1','1','2','2','3','3','4','4','5','5','6','6','7','7','8','8','9','') into ls_count0 from dual; F_CFMX.zb0000 := ls_count0 ; end if ; ls_wbzid0:= F_CFMX.wbzid0; --lzg --写入药房药品明细 insert into YF_MZCFMX(CFID00,CFLSH0,YPNM00,YPMC00, YPGG00,LSDJ00,YPYFMC,PCMC00,CSL000,JLDW00,YYSJ00, YYSJDW,YFSMMC,ZB0000,ZJYFMC,XMYFMC,YPZSL0,CFDW00, ZHL000,CXBZ00,SFXS00,SFZBY0,THBZ00,PSLBID,ZFBL00, YBLB00,BZ0000,ZXCS00,CQLY00,ZFFSBZ) values(lv_CFID00,lv_CFLSH0,F_CFMX.YPNM00,F_CFMX.YPMC00, F_CFMX.YPGG00,lv_LSDJ00,F_CFMX.YPYFMC,F_CFMX.PCMC00,round(F_CFMX.CSL000/lv_NSBL00,4),F_CFMX.JLDW00,F_CFMX.YYSJ00, lv_ZQDW00,F_CFMX.YFSMMC, F_CFMX.zb0000,F_CFMX.ZJYFMC,F_CFMX.XMYFMC,round(lv_YPZSL0/lv_NSBL00,4),lv_CFDW00, lv_M2J000,F_CFMX.CXBZ00,F_CFMX.SFXS00,F_CFMX.SFZBY0,F_CFMX.THBZ00,F_CFMX.PSLBID,lv_ZFBL00, lv_YPYBLB,F_CFMX.BZ0000,nvl(F_CFMX.ZXCS00,lv_ZXCS00),F_CFMX.CQLY00,F_CFMX.ZFFSBZ); --写入医生药品信息 insert into YS_CFMX00(CFID00,CFLSH0,YPNM00,YPMC00,YPGG00,LSDJ00,YFID00,PCID00, CSL000,JLDW00,YYSJ00,YYSJDW,YYZF00,ZB0000,PSLBID,SFZBY0, YPZSL0,CFDW00,ZHL000,ZQCS00,ZFBL00,YBLB00,THBZ00,ZXCS00,TSYS00, CQLY00,F2J000,ZFFSBZ,XMYFMC,ZJYFID,XMYFID) values(lv_CFID00,lv_CFLSH0,F_CFMX.YPNM00,F_CFMX.YPMC00,F_CFMX.YPGG00,lv_LSDJ00,F_CFMX.YFID00,F_CFMX.PCID00, F_CFMX.CSL000,F_CFMX.JLDW00,F_CFMX.YYSJ00,lv_ZQDW00,F_CFMX.YFSMMC, F_CFMX.zb0000,F_CFMX.PSLBID,F_CFMX.SFZBY0, lv_YPZSL0,lv_CFDW00,lv_M2J000,lv_ZQCS00,lv_ZFBL00,lv_YPYBLB,F_CFMX.THBZ00,nvl(F_CFMX.ZXCS00,lv_ZXCS00),F_CFMX.TSYS00, F_CFMX.CQLY00,F_CFMX.F2J000,F_CFMX.ZFFSBZ,F_CFMX.XMYFMC,F_CFMX.ZJYFID,lv_XMYFID); end loop; --更新药房处方金额 update YF_MZCF00 set CFZJE0=round(lv_CFZJE0,4) where CFLSH0=lv_CFLSH0; update YS_CFXXB0 set CFZJE0=round(lv_CFZJE0,4) where CFLSH0=lv_CFLSH0; --用法带出诊疗项目 --select decode(instr(nvl(max(LBMC00),' '),'急诊'),0,'N','Y') into lv_SFJZ00 from SF_BRXXB0 A,BM_GHLBB0 B where A.GHLB00=B.LBBH00 and GHH000=F_CF.GHH000; select decode(nvl(max(LBMC00),' '),'急诊','Y','N') into lv_SFJZ00 from SF_BRXXB0 A,BM_GHLBB0 B where A.GHLB00=B.LBBH00 and GHH000=F_CF.GHH000; if F_CF.YPDLBH='2' then lv_ZYCFPD:='1'; else lv_ZYCFPD:='0'; end if; --增加处方特殊限制 0 表示成功 --SP_BLJK_XT_TSXZ00('0',F_CF.SFGHID,P_ERRORCODE,P_ERRORINFO,0,lv_CFLSH0,F_CF.YSGZH0); --转化成功标志 --if P_ERRORCODE='0' then -- P_ERRORCODE:='1'; --else -- P_ERRORCODE:='0'; -- rollback; -- return; --end if; P_ERRORCODE:='0'; P_ERRORINFO:='用法带出诊疗项目出错!外部处方号['||trim(lv_WBCFH0)||']'; lv_ERRORCODE:='10'; SP_OUTP_YS_YJXMZDDC(lv_CFLSH0,F_CF.GHH000,F_CF.YSXM00,lv_SFJZ00,lv_ZYCFPD); update SD_DZBLJK.BLJK_MZCF00 set CLBZ00='1',CFLSH0=lv_CFLSH0,CLRQ00=lv_CZRQ00,CLSJ00=lv_CZSJ00,SSKS00=lv_SSKS00, CFZJE0= decode(substr(to_char(round(lv_CFZJE0,2)),1,1),'.','0'||to_char(round(lv_CFZJE0,2)),to_char(round(lv_CFZJE0,2))) where LSH000=P_LSH000 and WBCFH0=F_CF.WBCFH0; --是否门诊病历处方记录表 insert into BLJK_MEDICAL_ORDER_LOG(ID,PID,PRESCRIPTION_SN,STATUS) select SQ_MEDICAL_ORDER_LOG_ID.nextval,F_CF.BRID00,lv_CFLSH0,'1' from dual where not exists( select 1 from BLJK_MEDICAL_ORDER_LOG where PID=F_CF.BRID00 and PRESCRIPTION_SN=rpad(F_CF.CFLSH0,16,' ')); end loop; --开始处方医技单 P_SYSTEMINFO:='生成诊疗项目失败!'; lv_ERRORCODE:='21'; lv_YJ_WBZID0:=''; lv_order_sn :=''; for F_YW in C_YW loop lv_order_sn :=F_YW.WBYZID; SP_OUTP_CHECK_TONUMBER(F_YW.ZLXMID,'诊疗项目ID',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_YW.KDYS00,'开单医生',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_YW.KDKSBH,'开单科室',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; SP_OUTP_CHECK_TONUMBER(F_YW.YSSZKS,'医生所在科室',P_ERRORCODE,P_ERRORINFO,P_SYSTEMINFO); if P_ERRORCODE=0 then return; end if; --是否有生成过YJDJH0,有则取之前单号 lv_YJ_CZBZ00 1 修改 2 新增 --select count(1) into lv_count0 from SD_DZBLJK.BLJK_YW0000 A where A.LSH000=P_LSH000 and A.WBYZID=F_YW.WBYZID and YJDJH0 is not null; --if lv_count0>0 then if nvl(F_YW.YJDJH0,0)>0 then --新增 lv_YJDJH0:=F_YW.YJDJH0; lv_YJ_CZBZ00:='1'; else --新增 lv_YJDJH0:=null; lv_YJ_CZBZ00:='2'; end if; if F_YW.LBBH00='4' then --检验项目 lv_ERRORCODE:='22'; begin SP_OUTP_YS_JYSQWH_JZ( lv_YJDJH0, 1, F_YW.ZLXMID, F_YW.GHID00, F_YW.ZDID00, F_YW.ZDMC00, null, '0', 'Y', F_YW.JZBZ00, F_YW.KDYS00, F_YW.KDKSBH, F_YW.YJKSBH, F_YW.SL0000, F_YW.BZ0000, -- '2', lv_YJ_CZBZ00, F_YW.KDYS00, F_YW.BBID00, lv_ZXJG00, lv_RETURN_YJFZH0, F_YW.BH0000, 'N', F_YW.BRID00, F_YW.LRXM00, 'N', 'N', '' ); exception when others then P_ERRORCODE:='0'; P_ERRORINFO:='生成检验失败[错误代码:'||lv_ERRORCODE||'],请联系管理员!'||sqlerrm; P_SYSTEMINFO:='单号('||F_YW.WBYZID||')'||'项目名称:'||F_YW.ZLXMJC||lv_PARAMSTR||sqlerrm; return; end; elsif F_YW.LBBH00='3' then --检查项目 lv_ERRORCODE:='23'; begin SP_OUTP_YS_JCSQWH_SF( lv_YJDJH0, F_YW.ZLXMID, F_YW.GHID00, F_YW.ZDID00, F_YW.ZDMC00, '', '0', F_YW.JZBZ00, F_YW.KDYS00, F_YW.KDKSBH, F_YW.YJKSBH, F_YW.SL0000, F_YW.BZ0000, --'2', lv_YJ_CZBZ00, F_YW.KDYS00, F_YW.SM0000, lv_ZXJG00, lv_RETURN_YJFZH0, 'N', F_YW.BRID00, F_YW.BH0000, ''); update yj_yw0000 set TSBSMC=F_YW.TSBSMC where YJDJH0=lv_YJDJH0; exception when others then P_ERRORCODE:='0'; P_ERRORINFO:='生成检查失败[错误代码:'||lv_ERRORCODE||'],请联系管理员!'||sqlerrm; P_SYSTEMINFO:='单号('||F_YW.WBYZID||')'||'项目名称:'||F_YW.ZLXMJC||lv_PARAMSTR||sqlerrm; return; end; else --非检验、检查项目 lv_ERRORCODE:='24'; begin if nvl(F_YW.YJDJH0,0)=0 then select SQ_YJ_YW0000_YJDJH0.nextval into lv_YJDJH0 from dual; else lv_YJDJH0:=F_YW.YJDJH0; end if; insert into YJ_YW0000(YJDJH0,BRID00,ZYGHID,ZYHGHH,MZZYBZ,ZLXMID,SL0000,YJKSBH,KDYS00, KDKSBH,YSSZKS,KDRQ00,KDSJ00,LRXM00,JZBZ00,BWMC00,ZDID00,ZDMC00,XMZT00,SJLY00,TSBSMC,SM0000) select lv_YJDJH0,F_YW.BRID00,F_YW.GHID00,F_YW.ZYHGHH,F_YW.MZZYBZ,F_YW.ZLXMID,F_YW.SL0000,F_YW.YJKSBH,F_YW.KDYS00, F_YW.KDKSBH,F_YW.YSSZKS,F_YW.KDRQ00,F_YW.KDSJ00,F_YW.LRXM00,F_YW.JZBZ00,F_YW.BWMC00,F_YW.ZDID00,F_YW.ZDMC00,'0','1',F_YW.TSBSMC,F_YW.SM0000 from dual; insert into YJ_YWMX00 (ID0000,YJDJH0,ZLXMID,JGDW00,CKZ000) select SQ_YJ_YWMX00_ID0000.Nextval,lv_YJDJH0,ZXMID0,JGDW00,CKZ000 from VW_YS_YWMXXM where GDXMBZ='Y' and SJXMID=F_YW.ZLXMID; SP_OUTP_YS_YJ_YWJJ00(lv_YJDJH0,1,F_YW.KDYS00,F_YW.LRXM00,F_YW.KDKSBH,F_YW.BRID00, F_YW.ZYHGHH,F_YW.GHID00,F_YW.BH0000); exception when others then P_ERRORCODE:='0'; P_ERRORINFO:='生成治疗类项目失败[错误代码:'||lv_ERRORCODE||'],请联系管理员!'||sqlerrm; P_SYSTEMINFO:='单号('||F_YW.WBYZID||')'||'项目名称:'||F_YW.ZLXMJC||lv_PARAMSTR||sqlerrm; return; end ; end if; --增加诊疗项目特殊限制 0表示成功 --SP_BLJK_YS_YJTSXZ(F_YW.GHID00,lv_YJDJH0,P_ERRORCODE,P_ERRORINFO); --转换成功标志 --if(P_ERRORCODE='0') then -- P_ERRORCODE:='1'; --else -- P_ERRORCODE:='0'; -- rollback; -- return; --end if; --材料插入到 yj_ywjj for F_YWCL in C_YWCL loop insert into yj_ywjj00 (ID0000, YJDJH0, YJFZH0, SFXMID, SL0000, SFCS00, JJJE00, GFJE00, JZJE00, ZFJE00, SFXX00, SFSX00, YBBZ00, GDBZ00, FJFYBZ, MXID00, GJBM00, SFLB00) values (F_YWCL.MEDICAL_ID, lv_YJDJH0 , null, F_YWCL.FEE_ITEM_ID , F_YWCL.NUM ,F_YWCL.CHARGE_NUM , F_YWCL.INVOICING_AMOUNT, null, null, null ,F_YWCL.CHARGE_DOWN,F_YWCL.CHARGE_UP, null,'N' ,'N', F_YWCL.DETAIL,F_YWCL.COUNTRY_CODE,F_YWCL.CHARGE_SORT); end loop; --update SD_DZBLJK.BLJK_YWCL00 set YJDJH0=lv_YJDJH0 where order_sn=lv_order_sn; update SD_DZBLJK.OUTP_MATERIAL_ORDER_HTBL set DOCUMENT_NO=lv_YJDJH0 where order_sn=lv_order_sn; update SD_DZBLJK.BLJK_YW0000 set CLBZ00='1',CLRQ00=lv_CZRQ00,CLSJ00=lv_CZSJ00,YJDJH0=lv_YJDJH0,YJFZH0=lv_RETURN_YJFZH0,ZYGHID=F_YW.GHID00 where LSH000=P_LSH000 and WBYZID=F_YW.WBYZID; end loop; --更新同组标志 for F_JYTZ in C_JYTZ loop update SD_DZBLJK.BLJK_YW0000 set YJFZH0=F_JYTZ.YJDJH0 where WBZID0=F_JYTZ.WBZID0 and LSH000=P_LSH000; lv_YJ_WBZID0:=F_JYTZ.WBZID0; if F_JYTZ.C1>1 then for F_JYTZMX in C_JYTZMX loop SP_YJ_YWTZ(F_JYTZMX.YJFZH0,F_JYTZMX.YJDJH0,1); end loop; end if; end loop; SP_BLJK_CZRZ00(lv_BRID00,0,P_LSH000,'SP_OUTP_MEDICAL_ORDER_HTBL','1'); P_ERRORCODE:='1'; P_ERRORINFO:='成功!'; P_SYSTEMINFO:=''; exception when others then P_ERRORCODE:='0'; P_ERRORINFO:='生成医嘱异常[错误代码:'||lv_ERRORCODE||'],请联系管理员!'||sqlerrm; P_SYSTEMINFO:=P_ERRORINFO||lv_PARAMSTR||sqlerrm; rollback; return; end;