create or replace procedure SP_ZY_MZZRZYCL ( Pzyid00 in number, --住院号 Pczy000 in number, --操作员 Pczyks0 in number, --操作员科室 Pyjdjh0 in varchar2, --要转入住院的医技单据号 Pflag00 in char, --0 转入 1 不转入 Pcommit in varchar2 default 'N' , --是否提交 Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 Pbrid00 in number default 0 --病人id ) -- MODIFICATION HISTORY --Person Date Comment --liwm 2019.08.28 create by ZYSF9-20190824-001 --liwm 2019.09.02 门诊转入住院收费调整,要求这些门诊费用转入住院时,允许欠费,不需要强制病人交纳预交金。 by ZYSF9-20190902-001 --liwm 2019.09.05 转入住院的费用beizhu栏添加门诊转入字样 ZYSF9-20190831-002 --liwm 2019.09.05 添加同组的处理 ZYSF9-20190904-004 --liwm 2019.09.20 检验新转入的检验单,自动转为已报告状态 ZYSF9-20190923-001 --linzt 2019.12.24 删除主单新开后自动带出的子单,重新从原单生成子单,避免沙县检验报告会被删除的问题 ZYSF9-20190903-001 --liwm 2020.01.03 解决沙县发现的附加项目未找到收费信息问题 ZYSF9-20200103-003 --linzt 2020.01.09 修改门诊转入住院新生成医技单的YJ_YW0000.HBZYXM为'2' ZYSF9-20200102-001 --liwm 2020.01.10 门诊费用转入住院,沙县检查报告会被删除的问题,HBZYBZ的修改要在医技单冲销之前修改,否则触发器无法获得修改后的HBZYBZ值。ZYSF9-20200110-002 --liwm 2020.01.14 门诊医技单如果状态为已执行,转入后也要变为执行状态,执行人和执行科室同原单一致 ZYSF9-20200113-004 --linzt 2020.02.03 添加新生成的住院医技单号,将转入前后的医技单号做关联 ZYSF9-20200203-004 --linzt 2020.02.06 同时处理多个医技单 ZYSF9-20200113-001 --linzt 2020.02.19 修正处理多个医技单对应一个医技单无法转入问题 ZYSF9-20200219-001 --linzt 2020.02.25 处理原医技单附加单据标志(YJ_YW0000.FJDJBZ)带入新医技单 ZYSF9-20200219-003 --linzt 2020.03.11 处理原医技单开单医生对应的医生组ID带入新医技单 ZYSF9-20200224-002 --linzt 2020.04.16 修改医技单冲销失败提示信息 ZYSF9-20200415-004 --linzetao 2020.04.27 处理检验医技单报告已打印在参数JY_JSBBSFYXCX未启用时无法转入住院问题 ZYSF9-20200320-001 --jiangjh 2023.06.27 SP_YJ_YWCX 冲销备注传入 门诊转住院 执行科室与操作员科室不一致验证调过 --nicl 2023.07.07 添加入参病人id,可以转住院的病人id与门诊的病人id不同的病人 --nicl 2023.09.28 修改执行过程SP_YJ_YJSQWH后,更新开单医师组和开单病区 YJ13H-20230926-001 --chenrh 2023.10.26 新开住院医技单,增加预住院标识 ZYSF13H-20231026-001 as Vczrq00 char(8); Vczsj00 char(8); Vzyid00 ZY_BRXXB0.ZYID00%type; Vbrid00 ZY_BRXXB0.BRID00%type; Vcount0 number(5); Vdqbq00 ZY_BRXXB0.DQBQ00%type; Vdqks00 ZY_BRXXB0.DQKS00%type; Vrycwh0 ZY_BRXXB0.RYCWH0%type; Vxm0000 ZY_BRXXB0.XM0000%type; Vxb0000 ZY_BRXXB0.XB0000%type; Vzwxm00 BM_YGBM00.ZWXM00%type; Ecustom exception; --错误变量 Vdjh000 ZY_BRFY00.DJH000%type; --收费单据号 Vyjdjh0 YJ_YW0000.YJDJH0%type; --医技单据号 Vnewyjd YJ_YW0000.YJDJH0%type; --转入住院新开的医技单号 Vfyjdjh YJ_YJDJGL.FYJDJH%type; --新父医技单据号 Vnewzd0 YJ_YW0000.YJDJH0%type; --子医技单 Vcxyjd0 YJ_YW0000%rowtype; --要退的主单,考虑不用游标 Vzyjd00 YJ_YW0000%rowtype; --同组子医技单 Vzyjdjh YJ_YJDJGL%rowtype; --新生成的子医技单号 Vyszid0 YJ_YW0000.YSZID0%type; --医生组ID Vsql000 varchar2(100); Vzlzd00 BM_ZLZD00%rowtype; Vxkh000 BM_YGBM00.XKH000%type; --胸卡号 Vdjgyjd number; Vjyzt00 JY_YW0000.JGZT00%type; --医技单检验状态 Vkdysz0 YJ_YW0000.KDYSZ0%type; --开单医师组 Vkdbq00 YJ_YW0000.KDBQ00%type; --开单病区 Vtcnwbz YJ_YW0000.TCNWBZ%type; --套餐内外标识,扩展 9:预住院 VZYSF_YZYXMSFZDZRZYFY char(1); --预住院项目是否自动转入住院费用 0 否 1 是 默认 0 河北大学附属医院为1 ZYSF13H-20230822-001 cursor CUR_YJ_TZDJH0 is --同组医技单 select ZYJDJH from YJ_YJDJGL a where a.FYJDJH=Vyjdjh0 --and not exists(select 1 from YJ_YJDJGL where ZYJDJH=a.ZYJDJH and FYJDJH<>a.FYJDJH) and not exists(select 1 from ZY_MZZRZY where YJDJH0=a.ZYJDJH) and not exists(select 1 from YJ_YW0000 where YJDJH0=a.ZYJDJH and XMZT00 in ('6','7')) and exists (select 1 from YJ_YW0000 where YJDJH0=a.ZYJDJH); cursor CUR_YJ_ZFDJH0 is --主医技单 select * from YJ_YJDJGL a where a.FYJDJH=Vnewyjd; cursor CUR_YJ_CFYJD0 is --拆分传入的医技单号 select REGEXP_SUBSTR(Pyjdjh0,'[^,]+',1,rownum) yjdjh0 from dual connect by rownum<=length(Pyjdjh0) - length(regexp_replace(Pyjdjh0,',',''))+1; begin Pzxcgbz := 0; Vczrq00 := to_char(sysdate,'YYYYMMDD'); Vczsj00 := to_char(sysdate,'HH24:MI:SS'); Vcount0:=0; if Pyjdjh0 is null then Ptsxx00 := '[传入的医技单据号不能为空]'; raise Ecustom; end if; Ptsxx00 := '[查找住院病人信息]'; select ZWXM00 into Vzwxm00 from BM_YGBM00 where YGBH00=Pczy000; begin select ZYID00,DQBQ00,DQKS00,RYCWH0,XM0000,XB0000,BRID00 into Vzyid00,Vdqbq00,Vdqks00,Vrycwh0,Vxm0000,Vxb0000,Vbrid00 from ZY_BRXXB0 where ZYID00 = Pzyid00 and BRZT00 not in ('4','5','9') ; exception when no_data_found then Ptsxx00 :='未找到有效的住院病人信息!'; Pxxxx00 := Ptsxx00||sqlerrm; raise Ecustom; end; if nvl(Pbrid00,0) > 0 then Vbrid00 := Pbrid00; end if; Ptsxx00 := '[开始循环执行YJ_YW0000处理]'; --Vyjdjh0 := Pyjdjh0; for ALLYJD in CUR_YJ_CFYJD0 loop Vyjdjh0 := ALLYJD.YJDJH0; if Pflag00='0' then --确认转入 Ptsxx00 := '1.门诊转的标志位修改,避免沙县检验报告会被删除的问题('||Vyjdjh0||')'; update YJ_YW0000 set HBZYXM = '1' where YJDJH0 = Vyjdjh0; --临时变更检验状态为'Z' begin select JGZT00 into Vjyzt00 from JY_YW0000 where YJDJH0=Vyjdjh0; update JY_YW0000 set JGZT00='Z' where YJDJH0=Vyjdjh0; exception when others then Vjyzt00 := '*'; end; --未退的医技单做冲销 select count(*) into Vcount0 from YJ_YW0000 where BRID00=Vbrid00 and CXDJH0 = Vyjdjh0 and XMZT00 not in('6','7'); if Vcount0 <= 0 then Ptsxx00 := '冲销医技单('||Vyjdjh0||')错误!'; SP_YJ_YWCX(Vyjdjh0, Pczy000, Pczyks0, 'N', 'N', null, 'N' ,'N', '0', '门诊转住院'); end if; --冲销后恢复检验状态 if Vjyzt00 <> '*' then update JY_YW0000 set JGZT00=Vjyzt00 where YJDJH0=Vyjdjh0; end if; --这里Vzyjd00还是主医技单 select * into Vzyjd00 from YJ_YW0000 where YJDJH0 = Vyjdjh0; Ptsxx00 := '2.找对应的负单做费用更正('||Vyjdjh0||')'; select * into Vcxyjd0 from YJ_YW0000 where ZYGHID = Vzyjd00.ZYGHID and MZZYBZ = '0' and CXDJH0 = Vzyjd00.YJDJH0; if Vcxyjd0.SFDJH0 >0 then Ptsxx00 := '该医技单('||Vyjdjh0||')已经被退费,不能转入!'; raise Ecustom; end if; Ptsxx00 := '3.冲销完费用更正('||Vyjdjh0||')'; select SQ_SF_BRJFB0_DJH000.nextval into Vdjh000 from dual; SP_YJ_YWJJGZ( Vcxyjd0.YJDJH0, null, --负记录计价ID Vdjh000, --单据号 1, --收费员登记 1是 0否 Pczy000, --操作员编码 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if Pzxcgbz = 0 then Ptsxx00 := '旧医技单('||Vyjdjh0||')费用更正错误!'; raise Ecustom; end if; Vnewyjd := 0; Ptsxx00 := '4.新开住院医技单('||Vyjdjh0||')'; SP_YJ_YJSQWH( 2, --操作内容 1修改 2增加 3删除 Vnewyjd, --操作的医技单据号 Vzyid00, --挂号id '1', --门诊住院标志 Vzyjd00.ZLXMID, --诊疗项目id null, --子项目id串,如果没有传入参数,表示使用所有明细项 null, --诊断id null, --诊断名称 null, --标本ID null, --特殊病种编号 'N', --医技录入标志 'N', --急诊标志 Vzyjd00.KDYS00, --开单医生 Vzyjd00.KDKSBH, --开单科室编号 null, --开单病区 Vzyjd00.YJKSBH, --医技科室编号 Vzyjd00.SL0000, --数量 '门诊转住院', --备注 '0', --附加单据标志 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if Pzxcgbz = 0 then Ptsxx00 := '('||Vyjdjh0||')转入住院,新开医技单错误!'; raise Ecustom; end if; begin --预住院项目是否自动转入住院费用 0 否 1 是 默认 0 河北大学附属医院为1 select substrb(trim(VALUE0),1,10) into VZYSF_YZYXMSFZDZRZYFY from XT_XTCS00 where name00 in ('ZYSF_YZYXMSFZDZRZYFY'); exception when no_data_found then VZYSF_YZYXMSFZDZRZYFY:='0'; end; if VZYSF_YZYXMSFZDZRZYFY='1' then select TCNWBZ into Vtcnwbz from YJ_YW0000 where YJDJH0=Pyjdjh0; update YJ_YW0000 set TCNWBZ = Vtcnwbz where YJDJH0=Vnewyjd; end if; --开单医师组:开单医生的默认医师组(若无默认医师组则取医生所属的第一个医师组,再无则取空) select SXYSZ0 into Vkdysz0 from BM_YGBM00 where YGBH00 = Vzyjd00.KDYS00; if nvl(Vkdysz0,0) = 0 then begin select a.YSZID0 into Vkdysz0 from ZS_YSZMX0 A, ZS_YSZ000 B where A.YSZID0 = B.YSZID0 and B.YSZZT0 <> '3' and A.YSBH00 = Vzyjd00.KDYS00 and ROWNUM = 1; exception when others then Vkdysz0 := null; end; end if; --开单病区:开单医师组的所属病区 Vkdbq00 := null; if nvl(Vkdysz0,0) > 0 then begin select SSBQ00 into Vkdbq00 from ZS_YSZ000 where YSZID0 = Vkdysz0; exception when others then Vkdbq00 := null; end; end if; update YJ_YW0000 set KDYSZ0 = Vkdysz0,KDBQ00 = Vkdbq00 where YJDJH0=Vnewyjd; Vfyjdjh := Vnewyjd; --取得门诊开单医生对应的医生组id select nvl(max(a.YSZID0),0) into Vyszid0 from ZS_YSZMX0 a,ZS_YSZ000 b,BM_BMBM00 c where a.YSZID0=b.YSZID0 and b.SSKSBH=c.BMBH00 and c.BMXZ00='0' and a.YSBH00=Vzyjd00.KDYS00; --新生成的医技单YJ_YW0000.HBZYXM写‘2’且将原单据的FJDJBZ栏位带入新单据,原医技单的医生组ID带入新医技单 Ptsxx00 := '5.将新生成的医技单的YJ_YW0000.HBZYXM栏位写成‘2’('||Vyjdjh0||')'; update YJ_YW0000 set HBZYXM='2',FJDJBZ=Vzyjd00.FJDJBZ,YSZID0=Vyszid0 where YJDJH0=Vnewyjd; Ptsxx00 := '6.删除新医技单号对应的子单('||Vyjdjh0||')'; for Vzyjdjh in CUR_YJ_ZFDJH0 loop SP_YJ_YJSQWH( 3, --操作内容 1修改 2增加 3删除 Vzyjdjh.ZYJDJH, --操作的医技单据号 null, --挂号id null, --门诊住院标志 null, --诊疗项目id null, --子项目id串,如果没有传入参数,表示使用所有明细项 null, --诊断id null, --诊断名称 null, --标本ID null, --特殊病种编号 null, --医技录入标志 null, --急诊标志 null, --开单医生 null, --开单科室编号 null, --开单病区 null, --医技科室编号 null, --数量 '门诊转住院', --备注 null, --附加单据标志 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if Pzxcgbz=0 then Ptsxx00 := '删除子医技单('||Vzyjdjh.ZYJDJH||')错误!'; end if; end loop; Ptsxx00 := '7.新开单扣费('||Vyjdjh0||')'; select SQ_ZY_BRJFB0_DJH000.nextval into Vdjh000 from dual; SP_ZY_YJDJ00( Vnewyjd, --医技单据号(YJDJH1,YJDJH2,YJDJH3...) Vdjh000, --单据号 Pczyks0, --执行科室 Pczy000, --执行医生 to_char(sysdate,'YYYYMMDD'), --操作日期 to_char(sysdate,'HH24:MI:SS'), --操作时间 Ptsxx00, --存储过程提示的错误信息 Pxxxx00, --系统提示的错误信息 '1', --收费员登记 1是 0否 'Z', '0', '2' --是否预扣标志 0要预扣,不允许为负 1不预扣,不允许为负 2要预扣,允许为负 3不预扣,允许为负 ); if Ptsxx00 is not null then raise Ecustom; end if; Ptsxx00 := '填写住院费用备注('||Vyjdjh0||')'; update ZY_FYMX00 set BEIZHU = '门诊转入'||BEIZHU where DJH000 = Vdjh000; Ptsxx00 := '9.如果原单('||Vyjdjh0||')是已执行状态,转入后也要是已执行状态'; select XKH000 into Vxkh000 from BM_YGBM00 where YGBH00 = Vzyjd00.ZXR000; if Vzyjd00.XMZT00='3' then Ptsxx00 := '执行医技单('||Vnewyjd||')!'; SP_YJ_YWZX00( Vnewyjd, 0, Vzyjd00.ZXSL00, --原单执行数量 2, --大项目执行 Vxkh000, --原单执行人胸卡号 Vzyjd00.YJKSBH, --原单医技科室编号 'N' --默认不提交 ); end if; Ptsxx00 := '10.如果是检验,标志位修改('||Vyjdjh0||')'; begin select * into Vzlzd00 from BM_ZLZD00 where ZLXMID = Vzyjd00.ZLXMID; if Vzlzd00.LBBH00 = '4' then Vsql000 := 'update JY_YW0000 set JGZT00=''8'' where YJDJH0 = :v1'; execute immediate Vsql000 using in Vnewyjd; end if; exception when others then Ptsxx00 := '修改检验标志错误('||Vyjdjh0||')!'; end; Ptsxx00 := '11.中间表写入('||Vyjdjh0||')'; select count(*) into Vcount0 from ZY_MZZRZY where YJDJH0 = Vyjdjh0; if Vcount0>0 then update ZY_MZZRZY set ZRZYZT='1' where YJDJH0 = Vyjdjh0; else insert into ZY_MZZRZY(ID0000, YJDJH0, CZY000, CZYXM0, CZYKS0, ZRZYZT, XYJDJH, ZRRQ00, ZRSJ00) values(SQ_ZY_MZZRZY_ID0000.nextval, Vyjdjh0, Pczy000, Vzwxm00, Pczyks0, '1', Vnewyjd, Vczrq00, Vczsj00); end if; elsif Pflag00='1' then --中间表写入 select count(*) into Vcount0 from ZY_MZZRZY where YJDJH0 = Vyjdjh0; if Vcount0>0 then update ZY_MZZRZY set ZRZYZT='2' where YJDJH0 = Vyjdjh0; else insert into ZY_MZZRZY(ID0000, YJDJH0, CZY000, CZYXM0, CZYKS0, ZRZYZT, ZRRQ00, ZRSJ00) values(SQ_ZY_MZZRZY_ID0000.nextval, Vyjdjh0, Pczy000, Vzwxm00, Pczyks0, '2', Vczrq00, Vczsj00); end if; end if; Ptsxx00 := '12.子单处理('||Vyjdjh0||')'; for ZYJD in CUR_YJ_TZDJH0 loop select * into Vzyjd00 from YJ_YW0000 where YJDJH0 = ZYJD.ZYJDJH; if Pflag00='0' then select count(*) into Vcount0 from YJ_YW0000 where BRID00 = Vbrid00 and CXDJH0 = Vzyjd00.YJDJH0 and XMZT00 not in('6','7'); if Vcount0 > 0 then --有冲销的子单才做处理 select * into Vcxyjd0 from YJ_YW0000 where ZYGHID = Vzyjd00.ZYGHID and MZZYBZ = '0' and CXDJH0 = Vzyjd00.YJDJH0; select SQ_SF_BRJFB0_DJH000.nextval into Vdjh000 from dual; if Vcxyjd0.SFDJH0 <=0 or Vcxyjd0.SFDJH0 is null then --门诊转的标志位修改,避免沙县检验报告会被删除的问题 update YJ_YW0000 set HBZYXM = '1' where YJDJH0 = Vzyjd00.YJDJH0; SP_YJ_YWJJGZ( Vcxyjd0.YJDJH0, null, --负记录计价ID Vdjh000, --单据号 1, --收费员登记 1是 0否 Pczy000, --操作员编码 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if Pzxcgbz = 0 then Ptsxx00 := '旧医技单('||Vzyjd00.YJDJH0||')费用更正错误!'; raise Ecustom; end if; if Vzyjd00.FJDJBZ='9' then Vnewzd0 := 0; for YWJJ in (select * from YJ_YWJJ00 where YJDJH0=ZYJD.ZYJDJH ) loop SP_YJ_YWJJCZ( '2', --Popflag in number , --操作内容 1修改 2增加 3删除 null, --Pid0000 in number , --YJ_YWJJ00.ID0000 Popflag=2时传空 Vnewyjd, --Pzyjdjh in number , --主医技单据号 Vnewzd0, --Pyjdjh0 in out number , --医技单据号 YWJJ.SFXMID, --Psfxmid in number , --收费项目ID YWJJ.SL0000, --Psl0000 in number , --数量 Pczy000, --Pczy000 in number , --操作员编码 Vzyjd00.YJKSBH, --Pczyks0 in number , --操作员科室 'N', --Pcommit in varchar2 default 'N' , --是否提交 Pzxcgbz, --Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00, --Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --Pxxxx00 out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 YWJJ.SFCS00, --Psfcs00 in number default 0 , --收费次数,可以不传 0, --Pbhmxid in number default 0 , --备货明细ID(高值耗材预入库) 0, --Pypnm00 in number default 0 , --耗材内码(高值耗材,无预入库单) null, --Ppctxm0 in varchar2 default null , --批次条形码(高值耗材,无预入库单) 0, --Pbzypnm in number default 0 , --组套耗材内码(高值耗材,无预入库单) Vzyjd00.yjlrbz --Pyjlrbz in varchar2 default 'Y' --医技录入标识 Y医技录入 S手术录入 ); if Pzxcgbz = 0 then Ptsxx00 := '('||Vzyjd00.YJDJH0||')转入住院,新开子医技单错误!'; raise Ecustom; end if; --取得门诊开单医生对应的医生组id select nvl(max(a.YSZID0),0) into Vyszid0 from ZS_YSZMX0 a,ZS_YSZ000 b,BM_BMBM00 c where a.YSZID0=b.YSZID0 and b.SSKSBH=c.BMBH00 and c.BMXZ00='0' and a.YSBH00=Vzyjd00.KDYS00; --将新生成的医技单的YJ_YW0000.HBZYXM栏位写成‘2’, 并将原医技单的FJDJBZ带入新医技单, 原医技单开单医生对应的医生组ID带入新医技单 update YJ_YW0000 set HBZYXM='2',FJDJBZ=Vzyjd00.FJDJBZ,YSZID0=Vyszid0 where YJDJH0=Vnewzd0; end loop; Vnewyjd := Vnewzd0; else Vnewyjd := 0; --新开住院医技单 SP_YJ_YJSQWH( 2, --操作内容 1修改 2增加 3删除 Vnewyjd, --操作的医技单据号 Vzyid00, --挂号id '1', --门诊住院标志 Vzyjd00.ZLXMID, --诊疗项目id null, --子项目id串,如果没有传入参数,表示使用所有明细项 null, --诊断id null, --诊断名称 null, --标本ID null, --特殊病种编号 'N', --医技录入标志 'N', --急诊标志 Vzyjd00.KDYS00, --开单医生 Vzyjd00.KDKSBH, --开单科室编号 null, --开单病区 Vzyjd00.YJKSBH, --医技科室编号 Vzyjd00.SL0000, --数量 '门诊转住院', --备注 '0', --附加单据标志 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if Pzxcgbz = 0 then Ptsxx00 := '('||Vzyjd00.YJDJH0||')转入住院,新开医技单错误!'; raise Ecustom; end if; --开单医师组:开单医生的默认医师组(若无默认医师组则取医生所属的第一个医师组,再无则取空) select SXYSZ0 into Vkdysz0 from BM_YGBM00 where YGBH00 = Vzyjd00.KDYS00; if nvl(Vkdysz0,0) = 0 then begin select a.YSZID0 into Vkdysz0 from ZS_YSZMX0 A, ZS_YSZ000 B where A.YSZID0 = B.YSZID0 and B.YSZZT0 <> '3' and A.YSBH00 = Vzyjd00.KDYS00 and ROWNUM = 1; exception when others then Vkdysz0 := null; end; end if; --开单病区:开单医师组的所属病区 Vkdbq00 := null; if nvl(Vkdysz0,0) > 0 then begin select SSBQ00 into Vkdbq00 from ZS_YSZ000 where YSZID0 = Vkdysz0; exception when others then Vkdbq00 := null; end; end if; update YJ_YW0000 set KDYSZ0 = Vkdysz0,KDBQ00 = Vkdbq00 where YJDJH0=Vnewyjd; --将新生成的医技单的YJ_YW0000.HBZYXM栏位写成‘2’, 并将原医技单的FJDJBZ带入新医技单, 原医技单开单医生对应的医生组ID带入新医技单 update YJ_YW0000 set HBZYXM='2',FJDJBZ=Vzyjd00.FJDJBZ,YSZID0=Vyszid0 where YJDJH0=Vnewyjd; end if; select count(*) into Vcount0 from ZY_MZZRZY where YJDJH0 = Vzyjd00.YJDJH0; if Vcount0>0 then update ZY_MZZRZY set ZRZYZT='1' where YJDJH0 = Vzyjd00.YJDJH0; else insert into ZY_MZZRZY(ID0000, YJDJH0, CZY000, CZYXM0, CZYKS0, ZRZYZT, XYJDJH, ZRRQ00, ZRSJ00) values(SQ_ZY_MZZRZY_ID0000.nextval, Vzyjd00.YJDJH0, Pczy000, Vzwxm00, Pczyks0, '1', Vnewyjd, Vczrq00, Vczsj00); end if; --记录新生成的子单与父单的关系 select count(*) into Vcount0 from YJ_YJDJGL where FYJDJH=Vfyjdjh and ZYJDJH=vnewyjd; if Vcount0<=0 then insert into YJ_YJDJGL(FYJDJH,ZYJDJH) values(Vfyjdjh,Vnewyjd); end if; select SQ_ZY_BRJFB0_DJH000.nextval into Vdjh000 from dual; SP_ZY_YJDJ00( Vnewyjd, --医技单据号(YJDJH1,YJDJH2,YJDJH3...) Vdjh000, --单据号 Pczyks0, --执行科室 Pczy000, --执行医生 to_char(sysdate,'YYYYMMDD'), --操作日期 to_char(sysdate,'HH24:MI:SS'), --操作时间 Ptsxx00, --存储过程提示的错误信息 Pxxxx00, --系统提示的错误信息 '1', --收费员登记 1是 0否 'Z', '0', '2' --是否预扣标志 0要预扣,不允许为负 1不预扣,不允许为负 2要预扣,允许为负 3不预扣,允许为负 ); if Ptsxx00 is not null then raise Ecustom; end if; Ptsxx00 := '填写住院费用备注('||Vzyjd00.YJDJH0||')'; update ZY_FYMX00 set BEIZHU = '门诊转入'||BEIZHU where DJH000 = Vdjh000; --如果是检验, begin select * into Vzlzd00 from BM_ZLZD00 where ZLXMID = Vzyjd00.ZLXMID; if Vzlzd00.LBBH00 = '4' then Vsql000 := 'update JY_YW0000 set JGZT00=''8'' where YJDJH0 = :v1'; execute immediate Vsql000 using in Vnewyjd; end if; exception when others then Ptsxx00 := '修改检验标志错误('||Vzyjd00.YJDJH0||')!'; end; if Vzyjd00.XMZT00='3' then select XKH000 into Vxkh000 from BM_YGBM00 where YGBH00 = Vzyjd00.ZXR000; SP_YJ_YWZX00( Vnewyjd, 0, Vzyjd00.ZXSL00, --原单执行数量 2, --大项目执行 Vxkh000, --原单执行人 Vzyjd00.YJKSBH, --原单医技科室编号 'N' --默认不提交 ); end if; end if; end if; end if; if Pflag00='1' then --子单中间表写入 select count(*) into Vcount0 from ZY_MZZRZY where YJDJH0 = Vzyjd00.YJDJH0; if Vcount0>0 then update ZY_MZZRZY set ZRZYZT='2' where YJDJH0 = Vzyjd00.YJDJH0; else insert into ZY_MZZRZY(ID0000, YJDJH0, CZY000, CZYXM0, CZYKS0, ZRZYZT, ZRRQ00, ZRSJ00) values(SQ_ZY_MZZRZY_ID0000.nextval, Vzyjd00.YJDJH0, Pczy000, Vzwxm00, Pczyks0, '2', Vczrq00, Vczsj00); end if; end if; end loop; end loop; if Pcommit = 'Y' then commit; end if; Pzxcgbz := 1; exception when Ecustom then Pzxcgbz := 0; rollback; when no_data_found then Pzxcgbz := 0; --Ptsxx00 := '门诊转住院费用转换失败,请联系管理!'; Ptsxx00 := substrb(Ptsxx00||'-'||sqlerrm||'执行存储过程错误:SP_ZY_MZZRZYCL',1,255); --raise_application_error(-20010, substrb(Ptsxx00||'!*'||nvl(sqlerrm, '原因不明出错!'),1,250)); rollback; when others then Pzxcgbz := 0; --Ptsxx00:='门诊转住院费用转换失败,请联系管理!'; Ptsxx00:=substrb(Ptsxx00||'-'||sqlerrm||'执行存储过程错误:SP_ZY_MZZRZYCL',1,255); --raise_application_error(-20020, substrb(Ptsxx00||'!*'||nvl(sqlerrm, '原因不明出错!'),1,100)); rollback; end;