procedure SP_SST_YNYY_MZYYQR( P_ZDBH00 in varchar2, --终端编号 P_FZXBH0 in varchar2, --参保机构编号 P_YYJGDM in varchar2, --医院机构代码 P_CARDTYPE in varchar2, --0 代表院内卡 1 代表社保卡 P_CARDNO in varchar2, --IC卡号 P_GHKSBH in varchar2, --挂号科室编码=SP_SST_YNYY_MZGHYS.R_CUR1.GHKSBH P_YSYGBH in varchar2, --医生员工编码=SP_SST_YNYY_MZGHYS.R_CUR1.YSYGBH P_GHHBID in varchar2, --挂号号表id=SP_SST_YNYY_MZGHYS.R_CUR1.GHHBID P_ERRMSG out varchar2, --出错信息 R_CUR1 out PKG_YY_QRY.MY_CURSOR --候诊单打印结果集游标 --XM0000:姓名 HZXH00:候诊序号 HZXHMC:候诊序号名称 JZYSXM:就诊医生 JZKSMC:就诊科室 DGJZSJ:等待就诊时间 --DYRQ00:打印日期 DDRS00 等待人数 BRBLH0:病历号 XB0000:性别 ) AS -- MODIFICATION HISTORY -- Person Date Comments -- zhangyc 2014.05.05 create -- dsm 2016.10.29 一个时段,一个科室,一个病人只能取1个号(YY_KSCFYYXZ) for YYGH-20161025-001 -- 修改LS_YBMC00 取IC_YBBRLB. fbmc00,原来取ic_yblb00.YBMC00 -- dsm 2016.11.14 没有HZXH00时报都报"该医生号源已用完!" for ZZJJK-20161108-001 -- dsm 2016.11.15 YY_KSCFYYXZ参数启用时增加LS_KSCFYYXZ_HMKS(豁免科室) for ZZJJK-20161111-001 -- dsm 2017.03.14 泉二合并科室的也只能预约一个记录BM_TYZD00.ZDMC00='预约科室邦定' -- dsm 2017.04.13 YY_YYXPXSSD=Y时小票预约时间点往后推1个小时 for MZHS-20170413-002 -- yanghq 2019.04.02 for ZZJJK-20190404-001 YS_YSSFXZGHLB varchar2(100); YS_QTYSYGHSFTS varchar2(100); YS_HSZSFDYHZD varchar2(100); YS_MBRJZSJ number(12,2); YS_JZTKSJ number(12,2); LS_ZYZT00 varchar2(10); LS_COUNT0 number(10); LS_ERRORS varchar2(40); LS_BRID00 BM_BRXXB0.BRID00%type; LS_CARDNO IC_YHXX00.ICKH00%type; LS_GHYXM0 varchar2(50); LS_YSSFTZ number(10); LS_GHSFYM number(10); LS_YSSFJZ number(10); LS_SFXBSDGH number(10); LS_XJYE00 number(12,2); LS_ZYE000 number(12,2); LS_TYJE00 number(12,2); LS_GHF000 number(12,2); LS_GHF001 number(12,2); LS_GHF002 number(12,2); as_YHMSG0 Varchar2(400); --错误信息 as_SYSMSG Varchar2(400); --系统错误信息 as_GHH000 char(12); --挂号号 LS_YGBH00 BM_YGBM00.YGBH00%TYPE; LS_YGXM00 BM_YGBM00.ZWXM00%TYPE; LS_CZYKS0 SF_BRFY00.CZYKS0%TYPE; LS_YSXM00 BM_YGBM00.ZWXM00%TYPE; LS_BRBLH0 BM_BRXXB0.BRBLH0%type; LS_YBGHH0 SF_BRXXB0.YBGHH0%type; LS_GHLBMC Varchar2(20); LS_SFCZ00 Varchar2(20); LS_BRXM00 BM_BRXXB0.BRXM00%type; LS_BRXB00 BM_BRXXB0.BRXB00%type; LS_BRCSRQ BM_BRXXB0.BRCSRQ%type; LS_YBMC00 IC_YBBRLB.YBMC00%type; LS_GFZH00 varchar2(10); LS_BRDH00 BM_BRXXB0.BRDH00%type; LS_BRHYZK BM_BRXXB0.BRHYZK%type; LS_YJJXH0 varchar2(10); LS_FPXH00 varchar2(10); LS_GRZHZF number(12,2); LS_TCJJZF number(12,2); LS_ZFJE00 number(12,2); LS_ZPZH00 varchar2(10); LS_YBID00 BM_BRXXB0.YBID00%type; LS_YBKH00 BM_BRXXB0.YBKH00%type; LS_GHRQ00 varchar2(8); LS_SFYYGH varchar2(8); LS_CZBZ00 varchar2(8); LS_SFSBLF varchar2(8); LS_BRZY00 BM_BRXXB0.BRZY00%type; LS_BRMZ00 BM_BRXXB0.BRMZ00%type; LS_BRZJLX BM_BRXXB0.BRZJLX%type; LS_BRZJBH BM_BRXXB0.BRZJBH%type; LS_TYDWMC varchar2(10); LS_SFNLYD varchar2(10); LS_SFYD00 BM_BRXXB0.SFYD00%type; LS_HZLBMC varchar2(10); LS_BRJTDZ BM_BRXXB0.BRJTDZ%type; ad_FJJZDH number(12,2); --除了挂号费外的附加费的结算单号(供医保接口使用) --NEW! ad_ZFDJH0 number(12,2); --自费金额对应的单据号 ad_TJDJH0 number(12,2); --医保的统筹基金对应的单据号 ad_GRDJH0 number(12,2); --医保的个人账户对应的单据号 ad_SBZHDH number(12,2); --商保个人帐户单据流水号 ad_SBTJDH number(12,2); --商保统筹基金单据流水号 LS_DJSJ00 varchar2(8); LS_DJRQ00 varchar2(8); LS_HZSJ00 varchar2(20); LS_DHRS00 number(12,2); LS_JZSJ00 varchar2(10); LS_GHXZQK varchar2(10); LS_YBZHYE number(12,2); LS_SFHSGH varchar2(10); LS_JJDJH0 number(12,2); LS_GHSJD0 varchar2(10); LS_HZXH00 number(12,2); LS_HZXH01 number(12,2); LS_ZSQGFF varchar2(10); LS_SFZJDK varchar2(10); LS_SFZZ00 varchar2(10); LS_YGHH00 varchar2(10); v_Count1 number(5); LS_KSCFYYXZ_HMKS varchar2(100); v_Count2 number(5); LS_YNBLMX SF_YSGHHB.YNBLMX%type; begin LS_ERRORS:='1'; LS_GHRQ00:=to_char(sysdate,'YYYYMMDD'); LS_HZXH00:=0; begin select YGBH00,ZWXM00 into LS_YGBH00,LS_YGXM00 from VW_SST_YGBMDYXX where ZZJBH0=P_ZDBH00; exception when NO_DATA_FOUND then P_ERRMSG:='终端编号:'||P_ZDBH00||'在本院SST_YGBHDY表中未对应收费员!'; return; end; begin select BMBH00 into LS_CZYKS0 from BM_YGBM00 where YGBH00=LS_YGBH00; exception when others then LS_CZYKS0:=0; end; Select ZWXM00 into LS_YSXM00 from BM_YGBM00 where YGBH00=P_YSYGBH; --护士站挂完预挂号后,医生是否还要选择挂号类别, Y: 是; N: 否 默认为N begin select trim(VALUE0) into YS_YSSFXZGHLB from XT_XTCS00 where name00='YS_YSSFXZGHLB'; exception when others then YS_YSSFXZGHLB:='N' ; end; --预挂号时,如果有其他医生的预挂号是否进行提示 begin select trim(VALUE0) into YS_QTYSYGHSFTS from XT_XTCS00 where name00='YS_QTYSYGHSFTS'; exception when others then YS_QTYSYGHSFTS:='N' ; end; --门诊护士站是否打印候诊单 Y:是; N:否 默认为N begin select trim(VALUE0) into YS_HSZSFDYHZD from XT_XTCS00 where name00='YS_HSZSFDYHZD'; exception when others then YS_HSZSFDYHZD:='N' ; end; select SF_SST_GETICKH00(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:='未找到该病人的信息,请确认是否在院内已经建档登记!'; return; end; select ZYZT00 Into LS_ZYZT00 from vw_ys_brxxb0 where BRID00=LS_BRID00; if LS_ZYZT00='1' then P_ERRMSG:='该病人为住院病人,不能在门诊就诊!'; return; end if; Select A.BRBLH0,A.BRXM00,A.BRXB00,A.BRCSRQ,d.fbmc00,A.BRDH00,A.BRHYZK,A.YBID00,A.YBKH00, A.BRZY00,A.BRMZ00,A.BRZJLX,A.BRZJBH,A.SFYD00,A.BRJTDZ into LS_BRBLH0,LS_BRXM00,LS_BRXB00,LS_BRCSRQ ,LS_YBMC00,LS_BRDH00,LS_BRHYZK,LS_YBID00,LS_YBKH00, LS_BRZY00,LS_BRMZ00,LS_BRZJLX,LS_BRZJBH,LS_SFYD00,LS_BRJTDZ from BM_BRXXB0 A,IC_YBBRLB C,BM_BRFBB0 d Where A.YBLB00=C.YBLB00 AND A.FBBH00=C.FBBH00 and A.BRID00=LS_BRID00 and c.fbbh00=d.fbbh00 ; select nvl(sum(XJYE00),0),nvl(sum(ZYE000),0),nvl(sum(TYJE00),0) into ls_XJYE00,ls_ZYE000,ls_TYJE00 from sf_brzhxx where brid00=ls_BRID00; begin select count(*) into v_Count1 from XT_XTCS00 where name00='YY_KSCFYYXZ' and VALUE0='Y'; exception when others then v_Count1:=0; end; begin select trim(VALUE0) into LS_KSCFYYXZ_HMKS from XT_XTCS00 where name00='YY_KSCFYYXZ_HMKS' ; exception when others then LS_KSCFYYXZ_HMKS:=''; end; --预约候诊小票显示时段 begin select count(*) into v_Count2 from XT_XTCS00 where name00='YY_YYXPXSSD' and VALUE0='Y' ; exception when others then v_Count2:=0; end; LS_KSCFYYXZ_HMKS:=','||LS_KSCFYYXZ_HMKS||','; if v_Count1>0 and instr(LS_KSCFYYXZ_HMKS,','||P_GHKSBH||',')=0 then select count(1) into LS_COUNT0 from VW_YS_HZBR00 a where BRID00=LS_BRID00 and DJRQ00=to_char(sysdate,'YYYYMMDD') and (JZKS00=P_GHKSBH or exists(select 1 from VW_YY_YYBDKS where BMBH00=P_GHKSBH and BMBH00=a.JZKS00)) and decode(sign(to_number(substr(HZQSSJ,1,2))-12),-1,'上午','下午')= decode(sign(to_number(to_char(sysdate,'HH24'))-12),-1,'上午','下午') ; if LS_COUNT0>=1 then P_ERRMSG:='对不起,此科室此时段你已经预约过'||LS_COUNT0||'了!'; return; end if; end if; select count(1) into LS_COUNT0 from VW_YS_HZBR00 where BRID00=LS_BRID00 and YSPBID+0=P_GHHBID and DLXH00>0; if LS_COUNT0>=1 then select GHYSXM into LS_YSXM00 from VW_YS_HZBR00 where BRID00=LS_BRID00 and YSPBID+0=P_GHHBID and DLXH00>0 and rownum=1; P_ERRMSG:='该病人已在 '||LS_YSXM00||' 处预挂号过了,医生要对病人就诊结束后才能再次预挂号!'; return; end if; Ls_Errors:='判断是否金额足够'; select nvl(sum(b.SFJE00),0) into LS_GHF001 from sf_ghf000 a,bm_yysfxm b where a.SFXMID=b.SFXMID and a.GFLB00='-99999'; select nvl(sum(FJFFJE),0) into LS_GHF002 from vw_ys_fjghf0 where FJBRLB='0' and FJGHKS=P_GHKSBH and FJGHLB='-99999'; LS_GHF000:=nvl(LS_GHF001,0)+nvl(LS_GHF002,0); if nvl(ls_ZYE000,0)-nvl(ls_TYJE00,0)-nvl(LS_GHF000,0)<0 then P_ERRMSG:='该病人预交金不足,无法预约挂号!'; return; end if; Ls_Errors:='询问是否要挂号 '; /* Ls_Errors:='询问是否要挂号 '; if YS_YSSFXZGHLB = 'N' then select count(1) into LS_COUNT0 from VW_YS_YXGH00 where GHKS00=P_GHKSBH and BRID00=LS_BRID00; else if YS_QTYSYGHSFTS='Y' then select count(1) into LS_COUNT0 from ( select GHYXM0 from vw_ys_hzbr00 where BRID00=LS_BRID00 and dlxh00>0 union all select GHYXM0 from vw_ys_yzbr00 where BRID00=LS_BRID00 and dlxh00>0 ) a where rownum=1; else select count(1) into LS_COUNT0 from ( select GHYXM0 from vw_ys_hzbr00 where BRID00=LS_BRID00 and dlxh00>0 and jzks00=P_GHKSBH and jzys00=P_YSYGBH union all select GHYXM0 from vw_ys_yzbr00 where BRID00=LS_BRID00 and dlxh00>0 and jzks00=P_GHKSBH and jzys00=P_YSYGBH ) a; end if; end if; */ --if LS_COUNT0<=0 then --判定医生排班是否停止或删除 0 正常 1 排班删除 2 停诊。 begin select SF_SST_YSSFTZ(P_GHHBID) into LS_YSSFTZ from dual; exception when others then LS_YSSFTZ:=1; end; --判定医生的挂号是否已满 1:正常 0:满。 begin select SF_SST_GHSFYM(P_GHHBID) into LS_GHSFYM from dual; exception when others then LS_GHSFYM:=0; end; --判定医生的医生就诊是否已满 1 正常 0:满。 begin select SF_SST_SFXBSDGH(to_number(P_GHHBID),LS_BRID00) into LS_SFXBSDGH from dual; exception when others then LS_SFXBSDGH:=0; end; --判定医生是否就诊 0 不就诊 1 正常。 begin select SF_SST_YSSFJZ(P_GHHBID) into LS_YSSFJZ from dual; exception when others then LS_YSSFJZ:=0; end; --院内保留明细 begin select YNBLMX into LS_YNBLMX from SF_YSGHHB where GHHBID=P_GHHBID and GHKSBH=P_GHKSBH; exception when others then LS_YNBLMX:=''; end; ----候诊序号 --2016.06.01 dsm "and YYBZ00='1' "条件要去掉,否则如果没有YYBZ00='1'的数据时,SP_SF_BRGHXX过程会报错误 begin select nvl(Min(HZXH00),0) into LS_HZXH00 from YS_HBHZXH where GHHBID=to_number(P_GHHBID) and BRXM00 is null and YXBZ00='1' and YYBZ00<>'10' and ((LS_YNBLMX is null and 1=1) or (LS_YNBLMX is not null and instrb(','||trim(LS_YNBLMX)||',',','||trim(HZXH00)||',')<=0) ) ; exception when others then LS_HZXH00:=0; end; --end if; if LS_YSSFTZ=1 then P_ERRMSG:='该排班已取消或已结束,无法挂号!'; return; end if; if LS_YSSFTZ=2 then P_ERRMSG:='该医生已停诊,无法挂号!'; return; end if; if LS_GHSFYM=0 then P_ERRMSG:='该医生挂号已满,请选择其他医生就诊!'; return; end if; if LS_SFXBSDGH=0 then P_ERRMSG:='该医生距离挂号结束时间就诊已满,请选择其他医生就诊!'; return; end if; if LS_HZXH00=0 then P_ERRMSG:='该医生号源已经用完!'; return; end if; if LS_YSSFJZ=0 then P_ERRMSG:='该医生这个时间不就诊!'; return; end if; LS_YBGHH0:='0'; LS_GHLBMC:='预挂号'; LS_SFCZ00:='0'; LS_GFZH00:='0'; LS_YJJXH0:='0'; LS_FPXH00:='0'; LS_GRZHZF:=0; LS_TCJJZF:=0; LS_ZFJE00:=nvl(LS_GHF000,0); LS_ZPZH00:='0'; LS_SFYYGH:='N'; LS_CZBZ00:='0'; LS_SFSBLF:='N'; LS_TYDWMC:=''; if LS_SFYD00='0' then LS_SFNLYD:='N'; else LS_SFNLYD:='Y'; end if; LS_HZLBMC:='普通'; LS_JZSJ00:='';--计划就诊时间 LS_GHXZQK:='N';--挂号限制情况 'Y':预约挂号即广东的那种情况,'N':正常挂号 'Z' :预约转正式挂号 LS_YBZHYE:=0;--医保账户余额 LS_SFHSGH:='Y';--是否护士站挂号(医技系统挂号员和结诊医生不同时也采用这种方式) 默认为N LS_JJDJH0:=0;--保健基金单据号 LS_GHSJD0:='';--预约时间段 LS_ZSQGFF:='N';--是否只收取挂号费 LS_SFZJDK:='N'; --门诊医生站-病人就诊是否直接读卡挂号 Y 是 N 否 默认为N LS_SFZZ00:='' ; --是否社区转诊 LS_YGHH00:='0'; --预挂号号 Ls_Errors:='执行挂号过程SP_SF_BRGHXX'; SP_SF_BRGHXX(LS_BRBLH0,LS_YBGHH0,LS_GHLBMC,LS_BRID00,LS_SFCZ00,LS_BRXM00,LS_BRXB00,LS_BRCSRQ, LS_YBMC00,LS_GFZH00,LS_BRDH00,LS_BRHYZK,LS_YGBH00,LS_YGXM00,LS_CZYKS0,to_number(P_GHKSBH), to_number(P_YSYGBH),LS_YSXM00,to_number(P_GHHBID),LS_YJJXH0,LS_FPXH00,nvl(LS_GHF000,0),LS_GRZHZF,LS_TCJJZF, LS_ZFJE00,LS_ZPZH00,LS_YBID00,LS_YBKH00,LS_GHRQ00,LS_SFYYGH,LS_CZBZ00,LS_SFSBLF, LS_BRZY00,LS_BRMZ00,LS_BRZJLX,LS_BRZJBH,LS_TYDWMC,LS_SFNLYD,LS_HZLBMC,'0', --LS_CARDNO LS_BRJTDZ,ad_FJJZDH,ad_ZFDJH0,ad_TJDJH0,ad_GRDJH0,ad_SBZHDH,ad_SBTJDH,as_GHH000, as_YHMSG0,as_SYSMSG,LS_JZSJ00,LS_GHXZQK,LS_YBZHYE,LS_SFHSGH,LS_JJDJH0,LS_GHSJD0, LS_HZXH00,LS_ZSQGFF,LS_SFZJDK,LS_SFZZ00,LS_YGHH00--,'N' ); if substrb(as_SYSMSG,1,255) is not null then P_ERRMSG :='挂号保存出错:(' ||substrb(as_YHMSG0,1,255)||substr(as_SYSMSG,1,100)||')'; return; end if; Update sf_brxxb0 set THBZ00='2' where GHH000=as_GHH000 and BRID00=LS_BRID00; Ls_Errors:='预估病人的候诊时间'; begin Select to_number(trim(value0)) into YS_MBRJZSJ from XT_YHCS00 where YGBH00=P_YSYGBH and NAME00 ='YS_MBRJZSJ'; exception when others then YS_MBRJZSJ:=0; end; begin Select to_number(trim(value0)) into YS_JZTKSJ from XT_YHCS00 where YGBH00=P_YSYGBH and NAME00 ='YS_JZTKSJ'; exception when others then YS_JZTKSJ:=0; end; if (nvl(YS_MBRJZSJ,0)>0) and (nvl(YS_JZTKSJ,0)>0) then begin select DJSJ00,HZXH00,DJRQ00 into LS_DJSJ00,LS_HZXH01,LS_DJRQ00 from VW_YS_HZBR00 where GHH000=as_GHH000 and JZKS00=P_GHKSBH and JZYS00=P_YSYGBH; exception when others then LS_DJRQ00:=''; LS_DJSJ00:=''; LS_HZXH01:=0; end; if LS_HZXH01=0 then --泉二东海会出现0000号的病人 update SF_HZBR00 set HZXH00=LS_HZXH00,BZ0000='异常' where GHH000=as_GHH000 and JZKS00=P_GHKSBH and GHYS00=P_YSYGBH; update YS_HBHZXH set BRID00=LS_BRID00, BRXM00=LS_BRXM00,ZY0000='异常' where GHHBID=P_GHHBID and HZXH00=LS_HZXH00; end if; if LS_DJRQ00 is not null then LS_HZSJ00:=LS_DJRQ00||' '||LS_DJSJ00; end if; select COUNT(1) into LS_DHRS00 from VW_YS_HZBR00 where JZKS00=P_GHKSBH and JZYS00=P_GHKSBH AND DLXH00>0 and HZXH00