CREATE OR REPLACE PROCEDURE SP_WLPT_HSYY( Pczy000 in number , --输入:操作员编码区分自助机和健康之路 Pbrid00 in number , --输入:病人ID Pghks00 in number , --输入:挂号科室编号 Pcommit in varchar2 default 'N' , --输入:是否提交 Y:是 N:否 Pzxcgbz out number , --输出:执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --输出:执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 , --输出:执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 Pyjdjh0 out number --输出:成功的话返回医技单据号 ) as -- MODIFICATION HISTORY -- Person Date Comments -- ps 20200731 create -- --------- ---------- ------- Vcounter number(10); Vzlxmid BM_ZLZD00.ZLXMID%type; --配置的诊疗字典 Vghlb00 BM_GHLBB0.LBBH00%type; --挂号类别 Vghh000 SF_BRXXB0.GHH000%type; --生成的免费挂号号 Vghid00 SF_BRXXB0.GHID00%type; --Vghh000对应的挂号id Vyjdjh0 YJ_YW0000.YJDJH0%type; --新生成的医技单据号 Vczrq00 char(8); --操作日期 Vczsj00 char(8); --操作时间 Vsfdjh0 SF_BRFY00.DJH000%type; --新生成的收费单据号 Vysbm00 BM_YGBM00.YGBH00%type; --配置的挂号医生,医技开单医生编号 VYJKSBH YJ_YW0000.YJKSBH%type; --配置项目 vxjye00 sf_brzhxx.xjye00%type; --现金余额 begin Pyjdjh0 := -9999; Pzxcgbz := 0; --执行成功标志 1成功 0失败 Vczrq00 := to_char(sysdate,'yyyymmdd'); Vczsj00 := to_char(sysdate,'hh24:mi:ss'); --判断BRID00是否有效 if nvl(Pbrid00,0)<=0 then Ptsxx00 :='病人ID非有效信息,请确认是否建档!'; return; end if; select count(*) into Vcounter from BM_BRXXB0 where BRID00 = Pbrid00; if Vcounter <= 0 then Ptsxx00 :='病人ID非有效信息,请确认是否建档!'; return; end if; select xjye00 into vxjye00 from sf_brzhxx where BRID00 = Pbrid00; if vxjye00<80 then Ptsxx00 := '余额不足,院内现金余额小于80元!'; return; end if; if nvl(Pghks00,0)<=0 then Ptsxx00 :='科室ID非有效信息,请确认是否正确!'; return; end if; select count(*) into Vcounter from BM_BMBM00 where BMBH00 = Pghks00; if Vcounter <= 0 then Ptsxx00 :='科室ID非有效信息,请确认是否正确!'; return; end if; --根据科室获取医技项目id begin select to_number(MC0000) into Vzlxmid from BM_TYZD00 where trim(ZDMC00) = '核酸检测预约' and trim(BZ0000) = to_char(Pghks00); select to_number(ZXKSBH) into VYJKSBH from xt_kszxxm where zlxmid = Vzlxmid and rownum = 1; exception when others then Ptsxx00 := '该科室诊疗字典未正确配置'; return; end; --获取挂号类别 begin select to_number(MC0000) into Vghlb00 from BM_TYZD00 where trim(ZDMC00) = '核酸挂号类别'; exception when others then Ptsxx00 := '无法正确获取挂号类别'; return; end; --获取配置的医生员工编号 begin select to_number(MC0000) into Vysbm00 from BM_TYZD00 where trim(ZDMC00) = '核酸诊疗默认开单医生'; exception when others then Ptsxx00 := '无法正确获取挂号医生编号'; return; end; --挂免费号 SP_SF_BRXXB0_BRGH00( PBRID00=>Pbrid00, --in number , --ID号 PGHLB00=>Vghlb00, --in number , --挂号类别 PGHKS00=>Pghks00, --in number , --挂号科室 PJZYS00=>Vysbm00, --in number , --就诊医生 PGHHBID=>0, --in number , --挂号号表ID PSFYD00=>'N', --in varchar2 , --是否优待 PHZLB00=>0, --in number , --候诊类别 PHZXH00=>0, --in number , --候诊序号 PSFZZ00=>'N', --in varchar2 , --是否转诊 PGHH000=>Vghh000, --in out varchar2 , --挂号号 PCZY000=>Pczy000, --in number , --操作员 PCZYKS0=>Pghks00, --in number , --操作员科室 PCOMMIT=>'N', --in varchar2 default 'N' , --是否提交 PZXCGBZ=>Pzxcgbz, --out number , --执行成功标志 1成功 0失败 PTSXX00=>Ptsxx00, --out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 PXXXX00=>Pxxxx00, --out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 PGHFJE0=>0, --in number default 0 , --挂号费金额 PZCFJE0=>0, --in number default 0 , --诊察费金额 PCWTS00=>'0', --in varchar2 default '0' , --错误提示 0报错提示 1不提示直接退出 PSFLNYX=>'N', --in varchar2 default 'N' , --是否老年优先就诊(>=80岁) PBXLB00=>'', --in varchar2 default '' , --保险类别 PBZ0000=>'', --in varchar2 default '' , --候诊病人预挂号备注 PSFXEJS=>'N', --in varchar2 default 'N' , --是否小儿加收BM_GHXMDY.XEJSXM PSFCZ00=>'0' --in varchar2 default '0' --初复诊 SF_BRXXB0.SFCZ00 ); if Vghh000 = 0 then Ptsxx00 := '生成免费号错误:(SP_SF_BRXXB0_BRGH00)!'; return; end if; select GHID00 into Vghid00 from SF_BRXXB0 where BRID00=Pbrid00 and GHH000=Vghh000; Vyjdjh0 := null; --开医技单 SP_YJ_YJSQWH( POPFLAG=>2, -- in number , --操作内容 1修改 2增加 3删除 PYJDJH0=>Vyjdjh0, -- in out number , --操作的医技单据号 PZYGHID=>Vghid00, -- in number , --住院挂号ID PMZZYBZ=>'0', -- in varchar2 , --门诊住院标志 PZLXMID=>Vzlxmid, -- in number , --诊疗项目id PZXMID0=>null, -- in varchar2 , --子项目id串,如果没有传入参数,表示使用所有明细项 PZDID00=>null, -- in varchar2 , --诊断id PZDMC00=>null, -- in varchar2 , --诊断名称 PBBID00=>null, -- in varchar2 , --标本ID PBH0000=>null, -- in varchar2 , --特殊病种编号 PYJLRBZ=>'N', -- in varchar2 , --医技录入标志 PJZBZ00=>'N', -- in varchar2 , --急诊标志 PKDYS00=>Vysbm00, -- in number , --开单医生 PKDKSBH=>Pghks00, -- in number , --开单科室编号 PKDBQ00=>null, -- in number , --开单病区 PYJKSBH=>VYJKSBH, -- in number , --医技科室编号 PSL0000=>1, -- in number , --数量 PBZ0000=>null, -- in varchar2 , --备注 PFJDJBZ=>'0', -- in char , --附加单据 0主单1采血费2试管费3挂号费4诊查费5病历本6预约挂号7代煎9其他子单 PCZY000=>Vysbm00, -- in number , --操作员 PCZYKS0=>Pghks00, -- in number , --操作员科室 PCOMMIT=>'N', -- in varchar2 default 'N' , --是否提交 PZXCGBZ=>Pzxcgbz, -- out number , --执行成功标志 1成功 0失败 PTSXX00=>Ptsxx00, -- out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 PXXXX00=>Pxxxx00, -- out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 PYWMXID=>null, -- in number default null , --业务明细ID Popflag=3时 可能用到 PBWMC00=>null, -- in varchar2 default null, --部位名称 PFYJDJH=>null, -- in number default null , --父医技单据号 PCXJJ00=>1, -- in number default 1 , --重新计价 PYZCFID=>null, -- in varchar2 default null, --医嘱处方ID PSSDH00=>null, -- in varchar2 default null, --手术单号 PTXM000=>null, -- in varchar2 default null, --条形码 PWZBM00=>null, -- in varchar2 default null, --物资编码 PSSBM00=>null, -- in varchar2 default null, --手术编码 PSSMC00=>null, -- in varchar2 default null, --手术名称 PSSYJDH=>null, -- in varchar2 default null, --手术医技单据号 PWZBH00=>null, -- in varchar2 default null, --物资备货 PTQPC00=>0, -- in number default 0, --提取批次 PXMZK00=>1, -- in number default 1, --项目折扣(基数) PYJZHJE=>0, -- in number default 0, --医技折后金额 PTCID00=>null, -- in number default null, --套餐ID PMBMXID=>null -- in number default null --模板明细ID ); if Pzxcgbz = 0 then Ptsxx00 := '生成医技单错误:(SP_YJ_YJSQWH)'; return; end if; --新开医技单扣费 select SQ_SF_BRJFB0_DJH000.nextval into Vsfdjh0 from dual; SP_SF_YJDJ00( ad_YJDJH0=>Vyjdjh0, --in varchar2, --医技单据号(YJDJH1,YJDJH2,YJDJH3...) ad_DJH000=>Vsfdjh0, --in number, --单据号 ad_ZXKS00=>VYJKSBH, --in number, --执行科室 ad_ZXYS00=>Vysbm00, --in number, --执行医生 as_CZRQ00=>Vczrq00, --in char, --操作日期 as_CZSJ00=>Vczsj00, --in char, --操作时间 as_YHMSG0=>Ptsxx00, --out varchar, --存储过程提示的错误信息 as_SYSMSG=>Pxxxx00, --out varchar, --系统提示的错误信息 as_SFYDJ0=>'0', --in char default '0', --收费员登记 1是 0否 as_CXBZ00=>'Z', --in char default 'Z', --操作标志 Z记账插入 -冲销插入 as_SFYKBZ=>'0' --in char default '0' ); if Ptsxx00 is not null then Ptsxx00 := '执行过程:(SP_SF_YJDJ00)错误!'; return; end if; Pyjdjh0 := Vyjdjh0; Pzxcgbz := 1; if pcommit='Y' then commit; end if; exception when no_data_found then rollback; raise_application_error(-20001,substrb('没有找到数据!*'||sqlerrm,1,240)); when others then rollback; raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end; / CREATE OR REPLACE PROCEDURE SP_WLPT_SFJYY( Pczy000 in number , --输入:操作员编码区分自助机和健康之路 Pbrid00 in number , --输入:病人ID Pghks00 in number , --输入:挂号科室编号 Pcommit in varchar2 default 'N' , --输入:是否提交 Y:是 N:否 Pzxcgbz out number , --输出:执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --输出:执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 , --输出:执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 Pyjdjh0 out number --输出:成功的话返回医技单据号 ) as -- MODIFICATION HISTORY -- Person Date Comments -- liwm 2018.10.12 create -- zj 20181120 sf_brxxb0.czy000如果 取入参,会造成医保无法结算,改为直接取医生操作员 -- --------- ---------- ------- Vcounter number(10); Vzlxmid BM_ZLZD00.ZLXMID%type; --配置的诊疗字典 Vghlb00 BM_GHLBB0.LBBH00%type; --挂号类别 Vghh000 SF_BRXXB0.GHH000%type; --生成的免费挂号号 Vghid00 SF_BRXXB0.GHID00%type; --Vghh000对应的挂号id Vyjdjh0 YJ_YW0000.YJDJH0%type; --新生成的医技单据号 Vczrq00 char(8); --操作日期 Vczsj00 char(8); --操作时间 Vsfdjh0 SF_BRFY00.DJH000%type; --新生成的收费单据号 Vysbm00 BM_YGBM00.YGBH00%type; --配置的挂号医生,医技开单医生编号 er varchar2(100); vxjye00 sf_brzhxx.xjye00%type; --现金余额 begin Pyjdjh0 := -9999; Pzxcgbz := 0; --执行成功标志 1成功 0失败 Vczrq00 := to_char(sysdate,'yyyymmdd'); Vczsj00 := to_char(sysdate,'hh24:mi:ss'); --判断BRID00是否有效 er :='1@'; if nvl(Pbrid00,0)<=0 then Ptsxx00 :='病人ID非有效信息,请确认是否建档!'; return; end if; select count(*) into Vcounter from BM_BRXXB0 where BRID00 = Pbrid00; if Vcounter <= 0 then Ptsxx00 :='病人ID非有效信息,请确认是否建档!'; return; end if; select xjye00 into vxjye00 from sf_brzhxx where BRID00 = Pbrid00; if vxjye00<75 then Ptsxx00 := '余额不足,院内现金余额小于75元!'; return; end if; if nvl(Pghks00,0)<=0 then Ptsxx00 :='科室ID非有效信息,请确认是否正确!'; return; end if; select count(*) into Vcounter from BM_BMBM00 where BMBH00 = Pghks00; if Vcounter <= 0 then Ptsxx00 :='科室ID非有效信息,请确认是否正确!'; return; end if; er :='2@'; --根据科室获取医技项目id begin select to_number(MC0000) into Vzlxmid from BM_TYZD00 where trim(ZDMC00) = '三伏灸诊疗项目ID' and trim(BZ0000) = to_char(Pghks00); exception when others then Ptsxx00 := '该科室诊疗字典未正确配置'; return; end; er :='2.1@'; --获取挂号类别 begin select to_number(MC0000) into Vghlb00 from BM_TYZD00 where trim(ZDMC00) = '三伏灸诊疗挂号类别' and trim(BZ0000) = to_char(Pghks00); exception when others then Ptsxx00 := '无法正确获取挂号类别'; return; end; er :='2.2@'; --获取配置的医生员工编号 begin select to_number(MC0000) into Vysbm00 from BM_TYZD00 where trim(ZDMC00) = '三伏灸诊疗默认开单医生' and trim(BZ0000) = to_char(Pghks00); exception when others then Ptsxx00 := '无法正确获取挂号医生编号'; return; end; er :='2.3@'; --挂免费号 SP_SF_BRXXB0_BRGH00( PBRID00=>Pbrid00, --in number , --ID号 PGHLB00=>Vghlb00, --in number , --挂号类别 PGHKS00=>Pghks00, --in number , --挂号科室 PJZYS00=>Vysbm00, --in number , --就诊医生 PGHHBID=>0, --in number , --挂号号表ID PSFYD00=>'N', --in varchar2 , --是否优待 PHZLB00=>0, --in number , --候诊类别 PHZXH00=>0, --in number , --候诊序号 PSFZZ00=>'N', --in varchar2 , --是否转诊 PGHH000=>Vghh000, --in out varchar2 , --挂号号 PCZY000=>Vysbm00, --in number , --操作员 PCZYKS0=>Pghks00, --in number , --操作员科室 PCOMMIT=>'N', --in varchar2 default 'N' , --是否提交 PZXCGBZ=>Pzxcgbz, --out number , --执行成功标志 1成功 0失败 PTSXX00=>Ptsxx00, --out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 PXXXX00=>Pxxxx00, --out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 PGHFJE0=>0, --in number default 0 , --挂号费金额 PZCFJE0=>0, --in number default 0 , --诊察费金额 PCWTS00=>'0', --in varchar2 default '0' , --错误提示 0报错提示 1不提示直接退出 PSFLNYX=>'N', --in varchar2 default 'N' , --是否老年优先就诊(>=80岁) PBXLB00=>'', --in varchar2 default '' , --保险类别 PBZ0000=>'', --in varchar2 default '' , --候诊病人预挂号备注 PSFXEJS=>'N', --in varchar2 default 'N' , --是否小儿加收BM_GHXMDY.XEJSXM PSFCZ00=>'0' --in varchar2 default '0' --初复诊 SF_BRXXB0.SFCZ00 ); if Vghh000 = 0 then Ptsxx00 := '生成免费号错误:(SP_SF_BRXXB0_BRGH00)!'; return; end if; select GHID00 into Vghid00 from SF_BRXXB0 where BRID00=Pbrid00 and GHH000=Vghh000; er :='3@'; Vyjdjh0 := null; --开医技单 SP_YJ_YJSQWH( POPFLAG=>2, -- in number , --操作内容 1修改 2增加 3删除 PYJDJH0=>Vyjdjh0, -- in out number , --操作的医技单据号 PZYGHID=>Vghid00, -- in number , --住院挂号ID PMZZYBZ=>'0', -- in varchar2 , --门诊住院标志 PZLXMID=>Vzlxmid, -- in number , --诊疗项目id PZXMID0=>null, -- in varchar2 , --子项目id串,如果没有传入参数,表示使用所有明细项 PZDID00=>null, -- in varchar2 , --诊断id PZDMC00=>null, -- in varchar2 , --诊断名称 PBBID00=>null, -- in varchar2 , --标本ID PBH0000=>null, -- in varchar2 , --特殊病种编号 PYJLRBZ=>'N', -- in varchar2 , --医技录入标志 PJZBZ00=>'N', -- in varchar2 , --急诊标志 PKDYS00=>Vysbm00, -- in number , --开单医生 PKDKSBH=>Pghks00, -- in number , --开单科室编号 PKDBQ00=>null, -- in number , --开单病区 PYJKSBH=>Pghks00, -- in number , --医技科室编号 PSL0000=>1, -- in number , --数量 PBZ0000=>null, -- in varchar2 , --备注 PFJDJBZ=>'0', -- in char , --附加单据 0主单1采血费2试管费3挂号费4诊查费5病历本6预约挂号7代煎9其他子单 PCZY000=>Pczy000, -- in number , --操作员 PCZYKS0=>Pghks00, -- in number , --操作员科室 PCOMMIT=>'N', -- in varchar2 default 'N' , --是否提交 PZXCGBZ=>Pzxcgbz, -- out number , --执行成功标志 1成功 0失败 PTSXX00=>Ptsxx00, -- out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 PXXXX00=>Pxxxx00, -- out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 PYWMXID=>null, -- in number default null , --业务明细ID Popflag=3时 可能用到 PBWMC00=>null, -- in varchar2 default null, --部位名称 PFYJDJH=>null, -- in number default null , --父医技单据号 PCXJJ00=>1, -- in number default 1 , --重新计价 PYZCFID=>null, -- in varchar2 default null, --医嘱处方ID PSSDH00=>null, -- in varchar2 default null, --手术单号 PTXM000=>null, -- in varchar2 default null, --条形码 PWZBM00=>null, -- in varchar2 default null, --物资编码 PSSBM00=>null, -- in varchar2 default null, --手术编码 PSSMC00=>null, -- in varchar2 default null, --手术名称 PSSYJDH=>null, -- in varchar2 default null, --手术医技单据号 PWZBH00=>null, -- in varchar2 default null, --物资备货 PTQPC00=>0, -- in number default 0, --提取批次 PXMZK00=>1, -- in number default 1, --项目折扣(基数) PYJZHJE=>0, -- in number default 0, --医技折后金额 PTCID00=>null, -- in number default null, --套餐ID PMBMXID=>null -- in number default null --模板明细ID ); if Pzxcgbz = 0 then Ptsxx00 := '生成医技单错误:(SP_YJ_YJSQWH)'; return; end if; --新开医技单扣费 select SQ_SF_BRJFB0_DJH000.nextval into Vsfdjh0 from dual; SP_SF_YJDJ00( ad_YJDJH0=>Vyjdjh0, --in varchar2, --医技单据号(YJDJH1,YJDJH2,YJDJH3...) ad_DJH000=>Vsfdjh0, --in number, --单据号 ad_ZXKS00=>Pghks00, --in number, --执行科室 ad_ZXYS00=>Vysbm00, --in number, --执行医生 as_CZRQ00=>Vczrq00, --in char, --操作日期 as_CZSJ00=>Vczsj00, --in char, --操作时间 as_YHMSG0=>Ptsxx00, --out varchar, --存储过程提示的错误信息 as_SYSMSG=>Pxxxx00, --out varchar, --系统提示的错误信息 as_SFYDJ0=>'0', --in char default '0', --收费员登记 1是 0否 as_CXBZ00=>'Z', --in char default 'Z', --操作标志 Z记账插入 -冲销插入 as_SFYKBZ=>'0' --in char default '0' ); er :='5@'; if Ptsxx00 is not null then Ptsxx00 := '执行过程:(SP_SF_YJDJ00)错误!'; return; end if; Pyjdjh0 := Vyjdjh0; Pzxcgbz := 1; if pcommit='Y' then commit; end if; exception when no_data_found then rollback; raise_application_error(-20001,er||substrb('没有找到数据!*'||sqlerrm,1,240)); when others then rollback; raise_application_error(-20002,er||substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end; /