CREATE OR REPLACE PROCEDURE SP_SST_BRHSJCKD( P_ZDBH00 in varchar2, --终端编号 P_KDLB00 in char , --0门诊,1住院陪护 P_CARDNO in varchar2, --病人卡号 --P_KDYS00 in varchar2, --开单医生编号 --P_KDKS00 in varchar2, --开单科室编号 --P_GHLB00 in varchar2, --挂号类别 --P_ZLXMID in number, --检测项目 P_ZYH000 in varchar2, --住院号 P_BRZJBH in varchar2, --身份证 --P_BRZJLX in varchar2, --病人证件类型 P_BRDH00 in varchar2, --病人电话 --P_BRZD00 in varchar2, --诊断 --P_BRZDMC in varchar2, --诊断名称 P_BYRC00 in varchar2, --备用入参 P_ERRMSG out varchar2, --无法获取明细的错误信息,空表示正确 P_BYCC00 out varchar2 --备用出参 ) as LS_KDYS00 BM_YGBM00.YGBH00%type; LS_KDKS00 BM_BMBM00.BMBH00%type; LS_ZLXMID BM_ZLZD00.ZLXMID%type; LS_BRID00 BM_BRXXB0.BRID00%type; ls_YGBH00 BM_YGBM00.YGBH00%type; ls_YGXM00 BM_YGBM00.ZWXM00%type; ls_KDYSXM BM_YGBM00.ZWXM00%type; ls_YGBMBH BM_YGBM00.BMBH00%type; LS_CARDNO IC_YHXX00.ICKH00%type; LS_BRDH00 BM_BRXXB0.BRDH00%type; ad_FJJZDH NUMBER; --除了挂号费外的附加费的结算单号(供医保接口使用) --NEW! ad_ZFDJH0 NUMBER; --自费金额对应的单据号 ad_TJDJH0 NUMBER; --医保的统筹基金对应的单据号 ad_GRDJH0 NUMBER; --医保的个人账户对应的单据号 ad_SBZHDH NUMBER; --商保个人帐户单据流水号 ad_SBTJDH NUMBER; --商保统筹基金单据流水号 as_GHH000 SF_BRXXB0.GHH000%TYPE; --门诊挂号号,供前台程序打印挂号单时使用 as_YHMSG0 VARCHAR2(4000); --存储过程提示的中文错误信息 as_SYSMSG VARCHAR2(4000); --系统提示的错误信息 ls_JYYJDJH YJ_YW0000.YJDJH0%type; LS_error varchar2(200); LS_GHLBMC BM_GHLBB0.LBMC00%type; VrowBRXX BM_BRXXB0%rowtype; VrowZYBRXX ZY_BRXXB0%rowtype; LS_ZYH000 ZY_BRXXB0.ZYH000%type; LS_XMDJ00 BM_YYSFXM.SFJE00%type; LS_ZYID00 ZY_BRXXB0.ZYID00%type; LS_FBMC00 BM_BRFBB0.FBMC00%type; LS_GHF000 number(10,2); LS_GRZHZF number(10,2); LS_TCJJZF number(10,2); LS_ZFJE00 number(10,2); LS_COUNT number(5); as_ZPZH00 varchar(50); LS_GHRQ00 SF_BRXXB0.GHRQ00%type; LS_GHID00 SF_BRXXB0.GHID00%type; LS_ZXKS00 YJ_YW0000.YJKSBH%type; P_zxjg00 varchar2(50); P_zxbz00 varchar2(20); LS_GHLB00 BM_GHLBB0.LBBH00%type; ls_bbid00 varchar2(20); v_chongfu number(2); -- 判断是否有重复开单 Ecustom exception; -- ls_YGXM00 BM_YGBM00.ZWXM00%type; -- MODIFICATION HISTORY -- Person Date Comments -- dsm 2021.01.26 create begin begin select YGBH00,ZWXM00,BMBH00 into ls_YGBH00,ls_YGXM00,ls_YGBMBH from VW_SST_YGBMDYXX where ZZJBH0=P_ZDBH00; exception when NO_DATA_FOUND then P_ERRMSG:='终端编号:'||P_ZDBH00||'在本院SST_YGBHDY表中未对应收费员!'; return; end; select SF_SST_GETICKH00_YKT(P_CARDNO) into LS_CARDNO from dual; begin select BRID00 into ls_brid00 from IC_YHXX00 where ICKH00 =LS_CARDNO and ZT0000=1; exception when no_data_found then P_ERRMSG:='IC卡号:'||LS_CARDNO||'在本院IC_YHXX00表中未找到!'; return; end; if nvl(P_KDLB00,' ') not in('0','1') then LS_error:='开单类别入参错误!'; raise Ecustom; end if; LS_error:='挂号类别设置错误'; select MC0000 into LS_GHLB00 from BM_TYZD00 where ZDMC00='核酸检测配置' and BH0000='GHLBB0' and MC0000<>'0' and rownum=1 ; LS_error:='开单医生设置错误'; select MC0000 into LS_KDYS00 from BM_TYZD00 where ZDMC00='核酸检测配置' and BH0000='HSKDYS' and MC0000<>'0' and rownum=1 ; LS_error:='开单科室设置错误'; select MC0000 into LS_KDKS00 from BM_TYZD00 where ZDMC00='核酸检测配置' and BH0000='HSKDKS' and MC0000<>'0' and rownum=1; LS_error:='执行科室设置错误'; select MC0000 into LS_ZXKS00 from BM_TYZD00 where ZDMC00='核酸检测配置' and BH0000='HSZXKS' and MC0000<>'0' and rownum=1; begin select YGBH00,ZWXM00 into LS_KDYS00,ls_KDYSXM from BM_YGBM00 where YGBH00=LS_KDYS00; exception when NO_DATA_FOUND then P_ERRMSG:='开单医生在通用字典配置错误!'; return; end; LS_error:='检测项目找不到'; select * into VrowBRXX from BM_BRXXB0 where BRID00=ls_BRID00; LS_error:='挂号类别找不到'; select LBMC00 into LS_GHLBMC from BM_GHLBB0 where LBBH00=LS_GHLB00; LS_ZYID00:=0; if P_KDLB00='1' then LS_ZLXMID:='131094'; else LS_ZLXMID:='129395'; end if; select nvl(sum(b.SFJE00),0) into LS_XMDJ00 from XT_ZLSFGX a,BM_YYSFXM b where a.SFXMID=b.SFXMID and a.GDBZ00='Y' and a.ZLXMID=LS_ZLXMID; if P_KDLB00='1' then LS_error:='住院号不存在!'||P_ZYH000; select * into VrowZYBRXX from ZY_BRXXB0 where ZYH000=rpad(P_ZYH000,12) and substr(BRZT00,1,1) in('1','2'); LS_ZYID00:=VrowZYBRXX.Zyid00; select ZLXMID into LS_ZLXMID from BM_ZLZD00 where ZLXMID='82298'; if LS_XMDJ00=0 then select count(*) into LS_COUNT from SST_HSJCKD where ZYID00=VrowZYBRXX.Zyid00 and HJJE00=0 and ZYID00>0; if LS_COUNT>0 then LS_error:='已经开过免费项目了,不能再开!'; raise Ecustom; end if; end if; end if; --插入病人费别 select (select bf.fbmc00 from BM_BRFBB0 bf where bf.FBBH00 =bmb.FBBH00) into LS_FBMC00 from bm_brxxb0 bmb where brid00 = ls_brid00; update BM_BRXXB0 set BRDH00=P_BRDH00,BRZJLX='身份证',BRZJBH=P_BRZJBH where BRID00=ls_BRID00; if P_KDLB00='0' and LS_XMDJ00=0 then LS_error:='普通门诊,不能再开免费项目!'; raise Ecustom; end if; --判断是否重复开的 核酸检测 select count(1) into v_chongfu from yj_yw0000 where brid00 = ls_brid00 and KDRQ00 =to_char(sysdate,'yyyymmdd') and zlxmjc like '%核酸%' ; if v_chongfu >0 then LS_error:='您今日已开<核酸检测>项目,如有疑问请到收费窗口咨询.'; raise Ecustom; end if; LS_BRDH00:=P_BRDH00; LS_GHF000:=0; LS_GRZHZF:=0; LS_TCJJZF:=0; LS_ZFJE00:=0; LS_GHRQ00:=to_char(sysdate,'YYYYMMDD'); select nvl(max(GHID00),0) into ls_GHID00 from sf_brxxb0 where brid00=LS_BRID00 and ghrq00=to_char(sysdate,'YYYYMMDD') and GHLB00=LS_GHLB00 and THRQ00 is null; if ls_GHID00=0 then SP_SF_BRGHXX ( VrowBRXX.BRBLH0,'0' ,LS_GHLBMC,LS_BRID00,'0',VrowBRXX.BRXM00, VrowBRXX.BRXB00,VrowBRXX.BRCSRQ,LS_FBMC00,'0',LS_BRDH00,VrowBRXX.BRZTQK, ls_YGBH00,ls_YGXM00,LS_YGBMBH,LS_KDKS00,LS_KDYS00,LS_KDYSXM,0,'0',null, LS_GHF000,LS_GRZHZF,LS_TCJJZF,LS_ZFJE00,as_ZPZH00,VrowBRXX.YBID00,VrowBRXX.YBKH00, LS_GHRQ00,'N','0','N',VrowBRXX.BRZY00,VrowBRXX.BRMZ00,VrowBRXX.BRZJLX,VrowBRXX.BRZJBH, VrowBRXX.TYDWMC,'N','普通 ','0',VrowBRXX.BRJTDZ,ad_FJJZDH,ad_FJJZDH,ad_TJDJH0,ad_GRDJH0, ad_SBZHDH,ad_SBTJDH,as_GHH000,as_YHMSG0,as_SYSMSG ); LS_error:=as_SYSMSG||','||as_SYSMSG; select GHID00 into LS_GHID00 from SF_BRXXB0 where GHH000=as_GHH000; end if; insert into YS_BRZDXX(ZDXXID,GHID00,GHH000,ZZDBZ0,ICD900,JZYS00,JZYSXM,JZKS00,SFXYZD,ZDMC00,SFYZ00,ZDRQ00,ZDSJ00) values(SQ_YS_BRZDXX_ZDXXID.nextval,LS_GHID00,as_GHH000,'3','Z00.001',LS_KDYS00,LS_KDYSXM,LS_KDKS00,'1','健康查体','0' ,to_char(sysdate,'YYYYMMDD'),to_char(sysdate,'HH24:MI:SS')) ; -- commit; select SQ_YJ_YW0000_YJDJH0.NEXTVAL into ls_JYYJDJH from DUAL; SP_YS_JYSQWH_JZ( ls_JYYJDJH, --操作的医技单据号 ls_JYYJDJH, --同组的单据号 ls_ZLXMID, --诊疗项目id LS_GHID00, --挂号id --P_BRZD00, --诊断id 'Z00.001', --诊断id '健康查体', --诊断名称 '', --子项目id串,如果没有传入参数,表示使用所有明细项 --传入-1代表,不产生自项目,在程序中生成。 --P_BRZDMC, --诊断名称 '0', --门诊住院标志 'N', --同组标志 'N', --急诊标志 LS_KDYS00, --开单医生 LS_KDKS00, --开单科室编号 LS_ZXKS00, --医技科室编号 1, --数量 '', --备注 P_zxjg00, --执行结果提示 '2', --操作内容 2增加 1修改 3删除 ls_YGBH00, --操作员id号 ls_bbid00, --标本ID P_zxbz00, --传出参数说明,传回的是同组号 '', -- 特殊病种编号 'Y', --是否提交 ls_brid00, ls_YGXM00, 'Y' ); --if P_KDLB00='1' then insert into SST_HSJCKD(BRID00,GHID00,ZYID00,ZLXMID,HJJE00,YJDJH0,KDLB00) values(ls_BRID00,LS_GHID00,ls_ZYID00,LS_ZLXMID,LS_XMDJ00,ls_JYYJDJH,P_KDLB00); --end if; exception when Ecustom then rollback; P_ERRMSG:=LS_error; --raise_application_error(-20010,substrb(LS_error ,1,220)); when others then rollback; -- P_ERRMSG:=LS_error||'!*'||nvl(sqlerrm, '原因不明出错'); P_ERRMSG:=as_SYSMSG||as_SYSMSG; --raise_application_error(-20002,LS_error||'!*'||substrb(nvl(sqlerrm, '原因不明出错'),1,120)); end;