create or replace procedure SP_SST_MZ_Nation_YNJSQR ( P_BRID00 in number ,--输入:病人ID P_GHID00 in number ,--输入:挂号ID P_JZDH00 in number ,--输入:结账单号 P_YBTYPE in varchar2 ,--输入: 医保接口类型[-1 :自费 0或空:福建版本 1:国家基线版] P_CZY000 in number ,--输入:操作员编码 P_CZYXM0 in varchar2 ,--输入:操作员姓名 P_XTGZH0 in varchar2 ,--输入:系统跟踪号 P_BYRC00 in varchar2 ,--输入:备用入参 P_INXML0 out varchar2 ,--输入:备用出参xml P_ERRMSG out varchar2 ,--输出:出错信息 P_ZXZT00 out number ,--输出:执行状态 0:失败 1:成功 P_OUTXML out varchar2 --输出:备用出参xml ) as -- MODIFICATION HISTORY -- Person Date Comments --zhangyc 2022.03.08 create; --zhangyc 2022.08.09 结账表表保存cvl_acct_pay、cvl_acct_balc、pur_acct_pay、insuplc_admdvs、mdtrtarea_admvs、psn_no 等等 by --zhangyc 2023.03.01 结账表增加写入:dise_codg,dise_name --zhangyc 2023.04.21 根据系统参数设置SST_Automate_YJYWZX自动执行本科室医技项目 LS_COUNT0 number(12,2); LS_CZRQ00 char(8); LS_CZSJ00 char(8); BM_XZQH00 BM_BRXXB0.XZQH00%type;--行政区划 BM_AAE140 BM_BRXXB0.AAE140%type;--险种类型编码 BM_AAE140_MC BM_BRXXB0.AAE140_MC%type;--险种类型名称 BM_PSN_NO BM_BRXXB0.PSN_NO%type;--[国家医保]人员编号 BM_BKC001_MC BM_BRXXB0.BKC001_MC%type;--人员待遇类别名称 LS_YBJKID SST_JSDP_JBXX.YBJKID%type; LS_insuplc_admdvs SST_JSDP_JBXX.insuplc_admdvs%type;--varchar2(10) null ,--[国家医保]参保地行政区划(aab301) LS_mdtrtarea_admvs SST_JSDP_JBXX.mdtrtarea_admvs%type;---mdtrtarea_admvs 就医地医保区划 LS_insutype SST_JSDP_JBXX.insutype%type;--varchar2(10) null ,--[国家医保]险种类型(aae140) LS_psn_no SST_JSDP_JBXX.psn_no%type;--varchar2(30) null ,--[国家医保]人员编号 LS_psn_type SST_JSDP_JBXX.psn_type%type;--varchar2(10) null ,--[国家医保]人员待遇类别(bkc001) LS_aae140 SF_JZB000.aae140%type;--险种类型编码:310 城镇职工基本医疗保险 320:公务员医疗补助 380:新型农村合作医疗 390:城乡居民基本医疗保险 410:工伤保险 510:生育保险 520:机关生育 LS_aae140_mc SF_JZB000.aae140_mc%type;--险种类型名称:城乡居民基本医疗保险、城镇职工基本医疗保险等等 LS_bkc001_mc SF_JZB000.bkc001_mc%type;--人员待遇类别名称(城乡居民、普通在职人员等等) LS_cvl_acct_pay SST_JSDP_JBXX.cvl_acct_pay%type;--cvl_acct_pay 公务员账户支付 LS_cvl_acct_balc SST_JSDP_JBXX.cvl_acct_balc%type;--cvl_acct_balc 公务员余额 LS_hl_acct_pay SST_JSDP_JBXX.hl_acct_pay%type;--hl_acct_pay 健康账户支付=YBYL11 LS_hl_acct_balc SST_JSDP_JBXX.hl_acct_balc%type;--hl_acct_balc 健康账户余额=YBYL12 LS_acct_mulaid_pay SST_JSDP_JBXX.acct_mulaid_pay%type;--acct_mulaid_pay 共济账户支付=YBYL13 LS_fm_acct_balc SST_JSDP_JBXX.fm_acct_balc%type;--fm_acct_balc 共济账户余额=YBYL14 LS_pur_acct_pay SST_JSDP_JBXX.pur_acct_pay%type;--pur_acct_pay 医疗账户支付 LS_bke297 SST_JSDP_JBXX.bke297%type;--医保明细流水号 LS_chrg_bchno SST_JSDP_JBXX.chrg_bchno%type;--收费批次号 LS_dise_codg SST_JSDP_JBXX.dise_codg%type;--病情编码 LS_dise_name SST_JSDP_JBXX.dise_name%type;--病情名称 YBXZQH_mdtrtarea_admvs varchar2(10);--[国家医保]就医地医保区划 LS_setl_time varchar2(20);--setl_time:结算时间 LS_YBJZRQ varchar2(8);--医保结算日期 LS_YBJZSJ varchar2(8);--医保结算时间 LS_XKH000 BM_YGBM00.XKH000%type; LS_YBSM06 SF_JZB000.YBSM06%type; --ZZJ:自助机,YD:移动结算,DD:多点结算,WLZS:互联网结算 XTCS_SST_Automate_YJYWZX varchar2(100);--自助结算是否开启本科室项目执行(ZZJ:自助机,YD:移动结算,DD:多点结算,WLZS:互联网结算),多渠道用,分割。VALUE0参考格式:YD,DD LS_YJDJH0 YJ_YW0000.YJDJH0%type; LS_SL0000 YJ_YW0000.SL0000%type; LS_KDYS00 YJ_YW0000.KDYS00%type; LS_KDKSBH YJ_YW0000.KDKSBH%type; LS_CXSL00 YJ_YW0000.CXSL00%type; LS_ZXSL00 YJ_YW0000.ZXSL00%type; LS_XMZXSL YJ_YW0000.ZXSL00%type; begin P_ZXZT00:=0; --输出:执行状态 0:失败 1:成功 P_ERRMSG:=null;--输出:出错信息 P_OUTXML:=null; --输出:备用出参xml LS_CZRQ00:=to_char(sysdate,'YYYYMMDD'); LS_CZSJ00:=to_char(sysdate,'HH24:MI:SS'); --查询基本信息表 if nvl(P_BRID00,0)>0 then begin select a.XZQH00,a.AAE140,a.AAE140_MC,a.PSN_NO,a.BKC001_MC into BM_XZQH00,BM_AAE140,BM_AAE140_MC,BM_PSN_NO,BM_BKC001_MC from BM_BRXXB0 a Where a.brid00=P_BRID00; exception when others then BM_XZQH00 :=null;--行政区划 BM_AAE140 :=null;--险种类型编码 BM_AAE140_MC :=null;--险种类型名称 BM_PSN_NO :=null;--[国家医保]人员编号 BM_BKC001_MC :=null;--人员待遇类别名称 end; if BM_XZQH00 in ('本地') then BM_XZQH00:=null; end if; end if; if nvl(P_BRID00,0)>0 and P_XTGZH0 is not null and P_XTGZH0 not in ('0') then begin select a.insuplc_admdvs,a.mdtrtarea_admvs,a.insutype,a.psn_no,a.psn_type, a.cvl_acct_pay,a.cvl_acct_balc,a.hl_acct_pay,a.hl_acct_balc, a.acct_mulaid_pay,a.fm_acct_balc,a.pur_acct_pay, a.bke297,a.chrg_bchno,a.YBJKID,a.setl_time,trim(a.dise_codg)as dise_codg,trim(a.dise_name) as dise_name into LS_insuplc_admdvs,LS_mdtrtarea_admvs,LS_insutype,LS_psn_no,LS_psn_type, LS_cvl_acct_pay,LS_cvl_acct_balc,LS_hl_acct_pay,LS_hl_acct_balc, LS_acct_mulaid_pay,LS_fm_acct_balc,LS_pur_acct_pay, LS_bke297,LS_chrg_bchno,LS_YBJKID,LS_setl_time,LS_dise_codg,LS_dise_name from SST_JSDP_JBXX A where A.BRID00=P_BRID00 and A.XTGZH0=P_XTGZH0; exception when others then LS_insuplc_admdvs:=null;--[国家医保]参保地行政区划(aab301) LS_insutype:=null;--[国家医保]险种类型(aae140) LS_psn_no:=null; --[国家医保]人员编号 LS_psn_type:=null; LS_cvl_acct_pay :=null;--cvl_acct_pay 公务员账户支付 LS_cvl_acct_balc :=null;--cvl_acct_balc 公务员余额 LS_hl_acct_pay :=null;--hl_acct_pay 健康账户支付=YBYL11 LS_hl_acct_balc :=null;--hl_acct_balc 健康账户余额=YBYL12 LS_acct_mulaid_pay :=null;--acct_mulaid_pay 共济账户支付=YBYL13 LS_fm_acct_balc :=null;--fm_acct_balc 共济账户余额=YBYL14 LS_pur_acct_pay :=null;--pur_acct_pay 医疗账户支付 LS_bke297 :=null;--医保明细流水号 LS_chrg_bchno :=null;--收费批次号 LS_dise_codg :=null;--病情编码 LS_dise_name :=null;--病情名称 end; LS_chrg_bchno :=substrb(nvl(LS_bke297,LS_chrg_bchno),1,30);--收费批次号 if LS_setl_time is not null and lengthb(LS_setl_time)=19 then LS_setl_time:=replace(LS_setl_time,'-',''); LS_YBJZRQ:=trim(substrb(LS_setl_time,1,8));--医保结算日期 LS_YBJZSJ:=trim(substrb(LS_setl_time,9,16));--医保结算时间 end if; LS_insuplc_admdvs:=substrb(nvl(LS_insuplc_admdvs,BM_XZQH00),1,10);--insuplc_admdvs 参保地医保区划 --获取就医地mdtrtarea_admvs if LS_insuplc_admdvs is not null then begin select A.mdtrtarea_admvs into YBXZQH_mdtrtarea_admvs from BM_YBXZQH A where A.admdvs_code=LS_insuplc_admdvs; exception when others then YBXZQH_mdtrtarea_admvs:=null;--[国家医保]就医地医保区划 end; if LS_mdtrtarea_admvs is not null then LS_mdtrtarea_admvs:=LS_mdtrtarea_admvs; else if YBXZQH_mdtrtarea_admvs is not null then LS_mdtrtarea_admvs:=YBXZQH_mdtrtarea_admvs;--就医地医保区划 end if; if LS_mdtrtarea_admvs is null then LS_mdtrtarea_admvs :=substrb(SF_SF_TYZD00('医保新接口参数设置','mdtrtarea_admvs'),1,10);--varchar2(10);--mdtrtarea_admvs 就医地医保区划 end if; end if; end if; LS_aae140:=substrb(nvl(LS_insutype,BM_AAE140),1,10);--险种类型编码 if LS_aae140 is not null then LS_aae140_mc:=substrb(SF_XT_GETYBSXZD('insutype',LS_aae140,'3','2'),1,50); end if; if LS_psn_type is not null then --[国家医保]人员待遇类别(bkc001) LS_BKC001_MC := substrb(SF_XT_GETYBSXZD('psn_type',LS_psn_type,'3','2'),1,50); --人员待遇类别名称 end if; LS_aae140_mc:=substrb(nvl(LS_aae140_mc,BM_AAE140_MC),1,50); LS_BKC001_MC:=substrb(nvl(LS_BKC001_MC,BM_BKC001_MC),1,50); LS_psn_no:=substrb(nvl(LS_psn_no,BM_PSN_NO),1,30); --更新BM_BRXXB0 update BM_BRXXB0 set bkc001_mc=substrb(nvl(LS_BKC001_MC,BKC001_MC),1,50) ,--人员待遇类别名称(城乡居民、普通在职人员等等) aae140=substrb(nvl(LS_AAE140,AAE140),1,10) ,--险种类型编码: aae140_mc=substrb(nvl(LS_AAE140_MC,AAE140_MC),1,50) ,--险种类型名称(城乡居民基本医疗保险、城镇职工基本医疗保险等等) psn_no=substrb(nvl(LS_psn_no,psn_no),1,30) ,--psn_no[国家医保]人员编号 xzqh00=substrb(nvl(LS_insuplc_admdvs,xzqh00),1,10) --行政区号 where BRID00=P_BRID00; if nvl(P_JZDH00,0)>0 then update SF_JZB000 set bkc001_mc=substrb(LS_bkc001_mc,1,50), aae140=substrb(nvl(LS_AAE140,AAE140),1,10) ,--险种类型:310 城镇职工基本医疗保险 320:公务员医疗补助 380:新型农村合作医疗 390:城乡居民基本医疗保险 410:工伤保险 510:生育保险 520:机关生育 aae140_mc=substrb(nvl(LS_AAE140_MC,AAE140_MC),1,50) ,--险种类型名称(城乡居民基本医疗保险、城镇职工基本医疗保险等等) psn_type=substrb(LS_psn_type,1,10) ,--[国家医保]人员类别(bkc001) YBYL11 =nvl(nvl(LS_hl_acct_pay,YBYL11),0) ,--健康账户支付 YBYL12 =nvl(nvl(LS_hl_acct_balc,YBYL12),0) ,--健康账户余额 YBYL13 =nvl(nvl(LS_acct_mulaid_pay,YBYL13),0) ,--共济账户支付 YBYL14 =nvl(nvl(LS_fm_acct_balc,YBYL14),0) ,--共济账户余额 cvl_acct_pay=nvl(nvl(LS_cvl_acct_pay,cvl_acct_pay),0) ,--公务员账户支付 cvl_acct_balc=nvl(nvl(LS_cvl_acct_balc,cvl_acct_balc),0) , --公务员余额 pur_acct_pay=nvl(nvl(LS_pur_acct_pay,pur_acct_pay),0) ,--医疗账户支付 insuplc_admdvs=substrb(nvl(LS_insuplc_admdvs,insuplc_admdvs),1,10) ,--参保地行政区划 mdtrtarea_admvs=substrb(nvl(LS_mdtrtarea_admvs,mdtrtarea_admvs),1,10) ,--就医地医保区划 psn_no =substrb(nvl(LS_psn_no,psn_no),1,30) ,--人员编号 MXLSH0=substrb(nvl(LS_chrg_bchno,MXLSH0),1,50) , YBJZRQ=substrb(nvl(LS_YBJZRQ,YBJZRQ),1,8) ,--医保结算日期 YBJZSJ=substrb(nvl(LS_YBJZSJ,YBJZSJ),1,8) ,--医保结算时间 dise_codg=substrb(LS_dise_codg,1,30) ,--病情编码 dise_name=substrb(LS_dise_name,1,200) --病情名称 where BRID00=P_BRID00 and JZDH00=P_JZDH00; --修改SF_YBSFMX 结账单号 update SF_YBSFMX set JZDH00=P_JZDH00 where YBJKID=LS_YBJKID; end if; end if; --2023.04.21--本科室医技项目执行--begin--- --自助结算是否开启本科室项目执行(ZZJ:自助机,YD:移动结算,DD:多点结算,WLZS:互联网结算),多渠道用,分割。VALUE0参考格式:YD,DD begin select substrb(trim(VALUE0),1,10) into XTCS_SST_Automate_YJYWZX from XT_XTCS00 where NAME00 ='SST_Automate_YJYWZX'; exception when others then XTCS_SST_Automate_YJYWZX :=null; end; if trim(XTCS_SST_Automate_YJYWZX) is not null then begin select YBSM06 into LS_YBSM06 from SF_JZB000 A Where A.BRID00=P_BRID00 and A.JZDH00=P_JZDH00; exception when others then LS_YBSM06:=null; end; if trim(LS_YBSM06) is not null and trim(XTCS_SST_Automate_YJYWZX) is not null and instrb(','||trim(XTCS_SST_Automate_YJYWZX)||',',','||trim(LS_YBSM06)||',')>0 then for c_fy in (select distinct GHID00,DJLSH0 from SST_CFLSH0 A where A.XTGZH0=P_XTGZH0 and A.BRID00=P_BRID00 and A.JZDH00=P_JZDH00 and A.SFLSCF='1' ) loop begin select B.YJDJH0,B.SL0000,B.KDYS00,B.KDKSBH,B.CXSL00,B.ZXSL00,(B.SL0000-B.CXSL00-B.ZXSL00) as XMZXSL,C.XKH000 into LS_YJDJH0,LS_SL0000,LS_KDYS00,LS_KDKSBH,LS_CXSL00,LS_ZXSL00,LS_XMZXSL,LS_XKH000 from YJ_YW0000 B,BM_YGBM00 C where B.KDYS00=C.YGBH00 and B.BRID00=P_BRID00 and B.ZYGHID=c_fy.GHID00 and b.YJDJH0=c_fy.DJLSH0 and B.MZZYBZ='0' and b.XMZT00='2' and b.YJKSBH=b.KDKSBH and b.SL0000-b.CXSL00 > b.ZXSL00 --有可执行数量 and b.yzcfid is null --过滤处方带出的输液、注射类医技项目 ; exception when others then LS_YJDJH0 :=0; LS_SL0000 :=0; LS_KDYS00 :=0; LS_KDKSBH :=0; LS_CXSL00 :=0; LS_ZXSL00 :=0; LS_XMZXSL :=0; end; if nvl(LS_YJDJH0,0)>0 and nvl(LS_XMZXSL,0)>0 then begin SP_YJ_YWZX00(LS_YJDJH0,0,LS_XMZXSL,2,LS_XKH000,LS_KDKSBH,'N',0); exception when others then P_ZXZT00:=0; P_ERRMSG:=substrb('医技项目执行异常:'||sqlerrm,1,200); return; end; end if; end loop; end if; end if; --2023.04.21--本科室医技项目执行--end--- P_ZXZT00:=1; --输出:执行状态 0:失败 1:成功 P_ERRMSG:=null; --输出:错误信息 P_OUTXML:=null; --输出:备用出参xml exception when no_data_found then P_ZXZT00:=0; P_ERRMSG:=substrb('门诊院内结算确认保存失败!原因:'||sqlerrm,1,200); when others then P_ZXZT00:=0; P_ERRMSG:=substrb('门诊院内结算确认保存失败!原因:'||sqlerrm,1,200); end;