create or replace procedure SP_SF_GJYBRZ_MZJSSF( PYBJKID in varchar2 ,--[1]输入:医保接口ID PJKCJBM in varchar2 ,--[2]输入:接口场景编码 PBRID00 in number ,--[3]输入:BRID00 PGHID00 in number ,--[4]输入:GHID000 PGHH000 in varchar2 ,--[5]输入:GHH000 PCZY000 in number ,--[6]输入:操作员编码 PCZYXM0 in varchar2 ,--[7]输入:操作员姓名 PCZYKS0 in number ,--[8]输入:操作员科室 PQQCSID in varchar2 default '' ,--[9]输入:参数中间ID PINXML0 in varchar2 default '' ,--[10]输入:请求参数(XML) POTHER0 in varchar2 default '' ,--[11]输入:备用参数 PCOMMIT in varchar2 default 'N' ,--[12]输入:是否提交事务 Y:提交 N:不提交 PZXZT00 out number ,--[13]输出:执行状态 0:失败 1:成功 POUTXML out varchar2 ,--[14]输出:出参(XML) PERRMSG out varchar2 --[15]输出:错误信息 ) as -- MODIFICATION HISTORY -- Person Date Comments -- linzetao 2022.02.08 created by 【2207】门诊结算_日志生成 MZSF9-20220208-001 -- linzetao 2022.02.18 调整报文格式 MZSF9-20220218-001 -- zhangyc 2022.04.05 特殊病种为生育类别med_type=51 by MZSF9-20220406-002 -- zhangyc 2022.04.08 增加med_type:医疗类别=9107:体检 510102:产前检查 by MZSF9-20220407-003 -- linzetao 2022.09.27 调整psn_setlway都传01(原特殊病种传0201) MZSF9-20220927-001 -- linzetao 2022.12.23 exp_content节点增加trum_flag(外伤标志)、rel_ttp_flag(涉及第三方标志)和otp_er_refl_flag(门诊急诊转诊标志)内容 MZSF9-20221223-002 -- linzetao 2023.01.06 调整节点trum_flag(外伤标志)、rel_ttp_flag(涉及第三方标志)和otp_er_refl_flag(门诊急诊转诊标志)取值处理 MZSF9-20230106-001 -- linzetao 2023.01.18 优化acct_used_flag节点前端传入取值处理 MZSF9-20230117-001 -- zhangyc 2023.05.11 获取SF_YBJKRZ.bkeg23(bkeg23:是否账户抵扣(0:账户不抵扣 1:账户抵扣),acct_used_flag:个人账户使用标志(0:否 1:是))赋值给LS_acct_used_flag变量 by MZSF9-20230511-001 -- --------- ---------- ------- LS_COUNT0 number(12,2); LS_CZRQ00 char(8); LS_CZSJ00 char(8); LS_INFNLX BM_TYCJBM.INFNLX%type;--:[国家医保]交易类型 1:直接调用医保DLL 3:调用服务接口 LS_QQJDBS BM_TYCJBM.QQJDBS%type;--:请求节点标识 LS_FHJDBS BM_TYCJBM.FHJDBS%type;--:返回节点标识 LS_DateTimeStr varchar2(20); --日期时间型:格式为:yyyy-MM-dd HH:mm:ss LS_DateStr varchar2(10); --日期型:格式为:yyyy-MM-dd LS_TimeStr varchar2(10); --时间型:格式为:HH:mm:ss LS_JKFSZ0 SF_YBJKMX.JKFSZ0%type;--接口发送值 LS_JKFHZ0 SF_YBJKMX.JKFHZ0%type;--接口返回值 LS_VALUE0 SF_YBJKMX.VALUE0%type;--请求报文字符串 LS_HISCS0 SF_YBJKRZ.HISCS0%type;--HIS前台请求参数 LS_QQDATA SF_YBJKRZ.QQDATA%type;--请求报文 LS_MainJson SF_YBJKRZ.QQDATA%type;--主项Json LS_detailJson SF_YBJKRZ.QQDATA%type;--明细Json LS_inputJson SF_YBJKRZ.QQDATA%type;--input输入 LS_YBKH00 BM_BRXXB0.YBKH00%type; --医保卡号 LS_YBID00 BM_BRXXB0.YBID00%type; --医保ID LS_BRXM00 BM_BRXXB0.BRXM00%type; --病人姓名 LS_XZQH00 BM_BRXXB0.XZQH00%type; --行政区号 LS_YBKSBM BM_BRXXB0.YBKSBM%type; --医保卡识别码 LS_AAC999 BM_BRXXB0.AAC999%type; --个人管理码 LS_AAE140 BM_BRXXB0.AAE140%type; --险种类型 LS_YBGHH0 SF_BRXXB0.YBGHH0%type; --医保挂号号 LS_GHID00 SF_BRXXB0.GHID00%type; --挂号id LS_TYCJ00 BM_TYCJBM%rowtype; LS_CFXMSL number(12,2); --明细项目数量 LS_HJJE00 number(12,2); --医疗费总金额 LS_ID0000 varchar2(50); --中间表ID ls_yyid00 XT_YYXX00.YYID00%TYPE; in_BKE297 varchar2(50); --明细流水号 in_TSBZBH varchar2(30); --特殊病种编号 in_YBGHH0 varchar2(30); --医保挂号号 in_SYSSLB varchar2(10); --计划生育手术类别 in_MED_TYPE varchar2(10); --med_type: 医疗类别 in_trum_flag varchar2(3); --[国家医保] 外伤标志, 1是0否 in_rel_ttp_flag varchar2(3); --[国家医保] 涉及第三方标志, 1是0否 in_otp_er_refl_flag varchar2(10); --[国家医保] 门诊急诊转诊标志, 0无1急诊2转诊3转诊合并急诊 LS_trum_flag_fm_ghxx SF_BRXXB0.trum_flag%type; --[国家医保] 外伤标志, 1是0否 LS_rel_ttp_flag_fm_ghxx SF_BRXXB0.rel_ttp_flag%type; --[国家医保] 涉及第三方标志, 1是0否 LS_otp_er_refl_flag_fm_ghxx SF_BRXXB0.otp_er_refl_flag%type; --[国家医保] 门诊急诊转诊标志, 0无1急诊2转诊3转诊合并急诊 BM_psn_no varchar2(30); --psn_no: 人员编号 LS_mdtrt_cert_type_fm_bke284 varchar2(10); --mdtrt_cert_type: 就诊凭证类型 LS_mdtrt_cert_no varchar2(50); --mdtrt_cert_no: 就诊凭证编号, 就诊凭证类型为“01”时填写电子凭证令牌,为“02”时填写身份证号,为“03”时填写社会保障卡卡号 LS_medfee_sumamt varchar2(20); --medfee_sumamt: 医疗费总额 LS_psn_setlway varchar2(6); --psn_setlway: 个人结算方式 LS_mdtrt_id_fm_ybghh0 varchar2(30); --mdtrt_id: 就诊ID LS_chrg_bchno varchar2(30); --chrg_bchno: 收费批次号 LS_acct_used_flag varchar2(1); --acct_used_flag: 个人账户使用标志 LS_insutype_fm_aae140 varchar2(10); --insutype: 险种类型 LS_invono varchar2(50); --invono: 发票号 LS_fulamt_ownpay_amt varchar2(20); --fulamt_ownpay_amt: 全自费金额 LS_overlmt_selfpay varchar2(20); --overlmt_selfpay: 超限价金额 LS_preselfpay_amt varchar2(20); --preselfpay_amt: 先行自付金额 LS_inscp_scp_amt varchar2(20); --inscp_scp_amt: 符合政策范围金额 LS_exp_content varchar2(4000); --exp_content: 字段扩展 LS_pub_hosp_rfom_flag varchar2(6); --pub_hosp_rfom_flag: 公立医院改革标志 LS_trum_flag varchar2(3); --trum_flag: 外伤标志, 外伤就医时必填 LS_rel_ttp_flag varchar2(3); --rel_ttp_flag: 涉及第三方标志, 承诺是否涉及第三方,TRUM_FLAG外伤标志为“1”时,此项为必填 LS_otp_er_refl_flag varchar2(3); --otp_er_refl_flag: 门诊急诊转诊标志: 为“急诊”、“转诊”、“转诊合并急诊”时,必填 LS_dise_codg SF_YBJKRZ.dise_codg%type;--dise_codg: 病种编码, 按照标准编码填写:按病种结算病种目录代码(bydise_setl_list_code)、门诊慢特病病种目录代码(opsp_dise_cod) LS_dise_name SF_YBJKRZ.dise_name%type;--dise_name: 病种名称 LS_aaz149 SF_YBJKRZ.aaz149%type;--aaz149:病种编码 LS_bae465 SF_YBJKRZ.bae465%type;--病种国家病种代码 LS_akc190 SF_YBJKRZ.AKC190%type;--akc190:医保挂号号 LS_aae072 SF_YBJKRZ.AAE072%type;--aae072:医保单据号 LS_aka078 SF_YBJKRZ.aka078%type;--医疗就诊方式(福建:aka078,国家:) LS_aka130 SF_YBJKRZ.aka130%type;--医疗类别(福建:aka130,国家:med_type) LS_med_type SF_YBJKRZ.med_type%type;--med_type: 医疗类别 LS_aaz500 SF_YBJKRZ.aaz500%type;--aaz500:社会保障卡号 LS_aac002 SF_YBJKRZ.aac002%type;--aac002:证件号码(社会保障号) LS_aac003 SF_YBJKRZ.aac003%type;--aac003:姓名 LS_psn_no SF_YBJKRZ.psn_no%type;--psn_no:国家医保]人员编号 LS_begntime SF_YBJKRZ.begntime%type;--医保入院时间, 格式:"YYYY-MM-DD HH24:MI:SS"=akc192 LS_endtime SF_YBJKRZ.endtime%type;--医保出院时间, 格式:"YYYY-MM-DD HH24:MI:SS"=akc194 LS_bkeg23 SF_YBJKRZ.bkeg23%type;--bkeg23:是否账户抵扣(0:账户不抵扣 1:账户抵扣),acct_used_flag:个人账户使用标志(0:否 1:是) --修改医保发送明细表 cursor CUR_UPDATE_YBJKMX is select YBJKID,JKMXID,JDBM00,ZJDBM0,JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ from SF_YBJKMX where YBJKID=PYBJKID and FSLXBZ in ('1','3') order by JKMXID; --查询主项数据 cursor CUR_QUERY_Main is select YBJKID,JKMXID,JDBM00,ZJDBM0,JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ from SF_YBJKMX where YBJKID=PYBJKID and FSLXBZ in ('1','3') and CJBM00 in ('AllIn') order by JKMXID; --查询明细数据 cursor CUR_QUERY_detail is select YBJKID,JKMXID,JDBM00,ZJDBM0,JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ from SF_YBJKMX where YBJKID=PYBJKID and FSLXBZ in ('1','3') and CJBM00=PJKCJBM order by JKMXID; ---诊断信息 cursor CUR_BRZDXX is select a.* from ( select decode(a.ZZDBZ0,'3','1','1','2','3') YBZDBZ,a.* from YS_BRZDXX a where GHID00=PGHID00 order by ZZDBZ0 ) a order by YBZDBZ; begin PZXZT00:=0; --输出:执行状态 0:失败 1:成功 POUTXML:=null;--输出:出参(XML) PERRMSG:=null;--输出:错误信息 LS_QQDATA:=null;--请求报文 LS_MainJson:=null;---主项Json LS_detailJson:=null;---明细Json LS_inputJson:=null;---input输入 LS_HISCS0:=substrb(PINXML0,1,4000);--HIS前台请求参数 LS_CZRQ00:=to_char(sysdate,'YYYYMMDD'); LS_CZSJ00:=to_char(sysdate,'HH24:MI:SS'); LS_DateTimeStr:=to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'); --日期时间型:格式为:yyyy-MM-dd HH:mm:ss LS_DateStr:=to_char(sysdate,'YYYY-MM-DD'); --日期型:格式为:yyyy-MM-dd LS_TimeStr:=to_char(sysdate,'HH24:MI:SS'); --时间型:格式为:HH:mm:ss --:[国家医保]交易类型 1:直接调用医保DLL 3:调用服务接口 LS_INFNLX:= substrb(SF_XT_GETXMLSTR('INFNLX',PINXML0),1,2); if LS_INFNLX is null then LS_INFNLX:= substrb(SF_XT_GETXMLSTR('INFNLX',POTHER0),1,2); end if; --:请求节点标识 LS_QQJDBS:= substrb(SF_XT_GETXMLSTR('QQJDBS',PINXML0),1,30); if LS_QQJDBS is null then LS_QQJDBS:= substrb(SF_XT_GETXMLSTR('QQJDBS',POTHER0),1,30); end if; --:返回节点标识 LS_FHJDBS:= substrb(SF_XT_GETXMLSTR('FHJDBS',PINXML0),1,30); if LS_FHJDBS is null then LS_FHJDBS:= substrb(SF_XT_GETXMLSTR('FHJDBS',POTHER0),1,30); end if; begin select HISCS0 into LS_HISCS0 from SF_YBJKRZ where YBJKID=PYBJKID; exception when others then LS_HISCS0:=null;--HIS前台请求参数 end; --查询主项数据 for C_Main in CUR_QUERY_Main loop LS_MainJson := SF_XT_GETJSONSTR(LS_MainJson,C_Main.JKSXBM,C_Main.JKFSZ0,'0'); end loop; if LS_MainJson is null then PZXZT00:=0; PERRMSG:='主项报文不能为空!'; return; end if; if nvl(PBRID00,0) <= 0 then PERRMSG := '病人id为空'; PZXZT00:=0; --执行状态 0:失败 1:成功 return; end if; if nvl(PGHID00,0) <= 0 then PERRMSG := '挂号id为空'; PZXZT00:=0; --执行状态 0:失败 1:成功 return; end if; begin select A.YBKH00,A.YBID00,A.BRXM00,A.XZQH00,A.YBKSBM,A.AAC999,A.AAE140,A.PSN_NO into LS_YBKH00,LS_YBID00,LS_BRXM00,LS_XZQH00,LS_YBKSBM,LS_AAC999,LS_AAE140,BM_psn_no from BM_BRXXB0 A where A.BRID00=PBRID00; exception when others then PERRMSG := '未找到病人基本信息(BRID00='||PBRID00||')'; PZXZT00:=0; --执行状态 0:失败 1:成功 return; end; begin select A.GHID00,A.YBGHH0, a.otp_er_refl_flag,a.trum_flag,a.rel_ttp_flag into LS_GHID00,LS_YBGHH0, LS_otp_er_refl_flag_fm_ghxx,LS_trum_flag_fm_ghxx,LS_rel_ttp_flag_fm_ghxx from SF_BRXXB0 a where a.GHID00=PGHID00; exception when others then PERRMSG := '未找到病人挂号信息(GHID00='||PGHID00||')'; PZXZT00:=0; --执行状态 0:失败 1:成功 return; end; begin select mdtrt_cert_type,mdtrt_cert_no,A.aaz149,A.bae465,A.dise_codg,A.dise_name,a.akc190,a.aae072,a.aka078,a.aka130,a.med_type, A.aaz500,A.aac002,A.aac003,A.psn_no,A.begntime,A.endtime,A.bkeg23 into LS_mdtrt_cert_type_fm_bke284,LS_mdtrt_cert_no, LS_aaz149,LS_bae465,LS_dise_codg,LS_dise_name,LS_akc190,LS_aae072,LS_aka078,LS_aka130,LS_med_type, LS_aaz500,LS_aac002,LS_aac003,LS_psn_no,LS_begntime,LS_endtime,LS_bkeg23 from SF_YBJKRZ a where YBJKID=PYBJKID; exception when others then LS_mdtrt_cert_type_fm_bke284 := ''; LS_mdtrt_cert_no := ''; LS_aaz149:=null;--aaz149:病种编码 LS_bae465:=null;--病种国家病种代码 LS_dise_codg:=null;--dise_codg: 病种编码 LS_dise_name:=null;--dise_name: 病种名称 LS_akc190:=null;--akc190:医保挂号号 LS_aae072:=null;--aae072:医保单据号 LS_aka078:=null;--医疗就诊方式(福建:aka078,国家:) LS_aka130:=null;--医疗类别(福建:aka130,国家:med_type) LS_med_type:=null;--med_type: 医疗类别 LS_aaz500:=null;---aaz500:社会保障卡号 LS_aac002:=null;---aac002:证件号码(社会保障号) LS_aac003:=null;---aac003:姓名 LS_psn_no:=null;---psn_no:国家医保]人员编号 LS_begntime:=null;---医保入院时间, 格式:"YYYY-MM-DD HH24:MI:SS"=akc192 LS_endtime:=null;---医保出院时间, 格式:"YYYY-MM-DD HH24:MI:SS"=akc194 LS_bkeg23:=null;--bkeg23:是否账户抵扣(0:账户不抵扣 1:账户抵扣),acct_used_flag:个人账户使用标志(0:否 1:是) end; --解析报文中 中间表ID LS_ID0000 := substrb(SF_XT_GETXMLSTR('id0000',PINXML0),1,50); --解析报文中 特殊病种编号 in_TSBZBH := substrb(SF_XT_GETXMLSTR('tsbzbh',PINXML0),1,30); --病种编号 --解析从前端传入的明细流水号 in_BKE297:=trim(substrb(SF_XT_GETXMLSTR('bke297',PINXML0),1,50)); --医保明细流水号[bke297] if in_BKE297 is null then in_BKE297:=trim(substrb(SF_XT_GETXMLSTR('mxlsh0',PINXML0),1,50)); --医保明细流水号[bke297] end if; --解析前端传入的医保挂号号 in_YBGHH0 := trim(substrb(SF_XT_GETXMLSTR('ybghh0',PINXML0),1,30)); --医保挂号号[akc190] --解析前端传入的计划生育手术类别 in_SYSSLB := substrb(SF_XT_GETXMLSTR('birctrl_type',PINXML0),1,10); --计划生育手术类别 in_trum_flag := substrb(SF_XT_GETXMLSTR('trum_flag',PINXML0),1,3); --[国家医保] 外伤标志, 1是0否 in_rel_ttp_flag := substrb(SF_XT_GETXMLSTR('rel_ttp_flag',PINXML0),1,3); --[国家医保] 涉及第三方标志, 1是0否 in_otp_er_refl_flag := substrb(SF_XT_GETXMLSTR('otp_er_refl_flag',PINXML0),1,10); --[国家医保] 门诊急诊转诊标志, 0无1急诊2转诊3转诊合并急诊 --处方项目数量, 项目金额 select count(1),sum(XMJE00) into LS_CFXMSL,LS_HJJE00 from SF_YBFSMX where ID0000=LS_ID0000; LS_psn_no := substrb(nvl(BM_psn_no,LS_psn_no),1,30); --1.psn_no: 人员编号 if LS_mdtrt_cert_type_fm_bke284 is null then LS_mdtrt_cert_type_fm_bke284 := substrb(SF_XT_GETXMLSTR('mdtrt_cert_type',PINXML0),1,3); --2.mdtrt_cert_type: 就诊凭证类型 if LS_mdtrt_cert_type_fm_bke284 is null then LS_mdtrt_cert_type_fm_bke284 := substrb(SF_XT_GETXMLSTR('bke284',PINXML0),1,3); --2.mdtrt_cert_type: 就诊凭证类型 end if; end if; if LS_mdtrt_cert_no is null then LS_mdtrt_cert_no := substrb(SF_XT_GETXMLSTR('mdtrt_cert_no',PINXML0),1,50); --3.mdtrt_cert_no: 就诊凭证编号 end if; in_MED_TYPE := substrb(SF_XT_GETXMLSTR('med_type',PINXML0),1,10); --4.med_type: 医疗类别 LS_med_type := nvl(LS_med_type,in_MED_TYPE); if LS_med_type is null then if in_TSBZBH is not null then LS_med_type := '14'; elsif in_SYSSLB is not null then LS_med_type := '51'; else LS_med_type := '11'; end if; end if; select yyid00 into ls_yyid00 from xt_yyxx00 ; if ls_yyid00='229112' then if PGHID00 > 0 then for ZDXX in CUR_BRZDXX loop if instrb(ZDXX.ZDMC00,'健康查体') > 0 then LS_med_type:='9107'; end if; end loop; end if; end if; LS_medfee_sumamt := substrb(trim(to_char(LS_HJJE00,'fm9999999999999990.09')),1,16);--5.medfee_sumamt: 医疗费总额 if in_TSBZBH is not null then --6.psn_setlway: 个人结算方式 --LS_psn_setlway := '0201'; --按单病种结算 LS_psn_setlway := '01'; --按特殊病种结算 else LS_psn_setlway := '01'; --按项目结算 end if; if in_YBGHH0 is not null then LS_mdtrt_id_fm_ybghh0 := substrb(in_YBGHH0,1,30); --7.mdtrt_id: 就诊ID else LS_mdtrt_id_fm_ybghh0 := substrb(LS_YBGHH0,1,30); --7.mdtrt_id: 就诊ID end if; LS_chrg_bchno := substrb(in_BKE297,1,30); --8.chrg_bchno: 收费批次号 LS_acct_used_flag := substrb(SF_XT_GETXMLSTR('acct_used_flag',PINXML0),1,6); --9.acct_used_flag: 个人账户使用标志 if LS_acct_used_flag is null then LS_acct_used_flag := nvl(substrb(SF_XT_GETXMLSTR('bkeg23',PINXML0),1,6),'1'); --9.acct_used_flag: 个人账户使用标志 end if; if LS_acct_used_flag not in ('0','1') then if LS_acct_used_flag in ('N') then LS_acct_used_flag := '0'; else LS_acct_used_flag := '1'; end if; end if; --acct_used_flag:个人账户使用标志(0:否 1:是) LS_acct_used_flag:=nvl(substrb(trim(LS_bkeg23),1,1),LS_acct_used_flag); LS_insutype_fm_aae140 := substrb(LS_AAE140,1,6); --10.insutype: 险种类型 LS_invono := null; --11.invono: 发票号 LS_fulamt_ownpay_amt := 0; --12.fulamt_ownpay_amt: 全自费金额 LS_overlmt_selfpay := 0; --13.overlmt_selfpay: 超限价金额 LS_preselfpay_amt := 0; --14.preselfpay_amt: 先行自付金额 LS_inscp_scp_amt := 0; --15.inscp_scp_amt: 符合政策范围金额 LS_pub_hosp_rfom_flag := null; --17.pub_hosp_rfom_flag: 公立医院改革标志 LS_trum_flag := substrb(nvl(in_trum_flag,LS_trum_flag_fm_ghxx),1,3); --trum_flag.外伤标志, 0否1是 LS_rel_ttp_flag := substrb(nvl(in_rel_ttp_flag,LS_rel_ttp_flag_fm_ghxx),1,3); --rel_ttp_flag.涉及第三方标志, 0否1是 LS_otp_er_refl_flag := substrb(nvl(in_otp_er_refl_flag,LS_otp_er_refl_flag_fm_ghxx),1,3); --otp_er_refl_flag.门诊急诊转诊标志, 0无1急诊2转诊3转诊合并急诊 LS_exp_content := null; --11.exp_content: 字段扩展 LS_exp_content := SF_XT_GETJSONSTR(LS_exp_content,'otp_er_refl_flag',LS_otp_er_refl_flag,'0'); LS_exp_content := SF_XT_GETJSONSTR(LS_exp_content,'trum_flag',LS_trum_flag,'0'); LS_exp_content := SF_XT_GETJSONSTR(LS_exp_content,'rel_ttp_flag',LS_rel_ttp_flag,'0'); LS_exp_content := '{'||replace(LS_exp_content,'"','\"')||'}'; --插入表SF_YBJKMX insert into SF_YBJKMX(YBJKID,JKMXID,JDBM00,ZJDBM0,ZDBM00,ZDMC00, JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ,ZDLX00,BZ0000,CJBM00) select PYBJKID,A.ZDNBID,A.JDBM00,null,substrb(nvl(A.JKDZBM,A.JKSXBM),1,50),substrb(nvl(A.JKDZMC,JKSXMC),1,100), A.JKSXBM,A.JKSXMC,null,null,substrb(a.JKFSLX,1,1),substrb(a.ZDTYPE,1,1),a.BZ0000,A.CJBM00 from BM_TYCJZD A where A.CJBM00=PJKCJBM and A.JDBM00 not in ('setldetail') and nvl(A.SFYX00,'1')='1' and A.JKFSLX in ('1','2','3'); --修改:医保发送变量赋值 for C_YBFS in CUR_UPDATE_YBJKMX loop LS_JKFSZ0:=null;--接口发送值 LS_JKFHZ0:=null;--接口返回值 LS_VALUE0:=null;--请求报文字符串 if C_YBFS.JKSXBM = 'psn_no' then LS_JKFSZ0:=substrb(LS_psn_no,1,250); --1.psn_no: 人员编号 update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='mdtrt_cert_type' then --2.mdtrt_cert_type: 就诊凭证类型 LS_JKFSZ0:=substrb(LS_mdtrt_cert_type_fm_bke284,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='mdtrt_cert_no' then --3.mdtrt_cert_no: 就诊凭证编号 LS_JKFSZ0:=substrb(LS_mdtrt_cert_no,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='med_type' then --4.med_type: 医疗类别 LS_JKFSZ0:=substrb(LS_med_type,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='medfee_sumamt' then --5.medfee_sumamt: 医疗费总额 LS_JKFSZ0:=substrb(LS_medfee_sumamt,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='psn_setlway' then --6.ipt_otp_no: 住院/门诊号 LS_JKFSZ0:=substrb(LS_psn_setlway,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='mdtrt_id' then --7.mdtrt_id: 就诊ID LS_JKFSZ0:=substrb(LS_mdtrt_id_fm_ybghh0,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='chrg_bchno' then --8.chrg_bchno: 收费批次号 LS_JKFSZ0:=substrb(LS_chrg_bchno,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='acct_used_flag' then --9.acct_used_flag: 个人账户使用标志 LS_JKFSZ0:=substrb(LS_acct_used_flag,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='insutype' then --10.insutype: 险种类型 LS_JKFSZ0:=substrb(LS_insutype_fm_aae140,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='invono' then --11.invono: 发票号 LS_JKFSZ0:=substrb(LS_invono,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='fulamt_ownpay_amt' then --12.fulamt_ownpay_amt: 全自费金额 LS_JKFSZ0:=substrb(LS_fulamt_ownpay_amt,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='overlmt_selfpay' then --13.overlmt_selfpay: 超限价金额 LS_JKFSZ0:=substrb(LS_overlmt_selfpay,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='preselfpay_amt' then --14.preselfpay_amt: 先行自付金额 LS_JKFSZ0:=substrb(LS_preselfpay_amt,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='inscp_scp_amt' then --15.inscp_scp_amt: 符合政策范围金额 LS_JKFSZ0:=substrb(LS_inscp_scp_amt,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='exp_content' then --16.exp_content: 字段扩展 LS_JKFSZ0:=substrb(LS_exp_content,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM='pub_hosp_rfom_flag' then --17.pub_hosp_rfom_flag: 公立医院改革标志 LS_JKFSZ0:=substrb(LS_pub_hosp_rfom_flag,1,250); update SF_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; end if; end loop; --查询明细数据 for C_detail in CUR_QUERY_detail loop LS_detailJson := SF_XT_GETJSONSTR(LS_detailJson,C_detail.JKSXBM,C_detail.JKFSZ0,'0'); end loop; if LS_detailJson is null then PZXZT00:=0; PERRMSG:='明细报文不能为空!'; return; end if; --明细项加标题 LS_detailJson := SF_XT_GETJSONSTR(null,'data',LS_detailJson,'1'); --input输入 LS_inputJson := SF_XT_GETJSONSTR(LS_inputJson,'input',LS_detailJson,'1'); --拼接整个报文, http服务拼接arg0, 非http直接拼接 if LS_INFNLX='3' then LS_QQDATA := SF_XT_GETJSONSTR(LS_QQDATA,'arg0',LS_MainJson||','||LS_inputJson,'1'); else LS_QQDATA := LS_MainJson||','||LS_inputJson; end if; LS_QQDATA:='{'||LS_QQDATA||'}'; --修改请求报文 update SF_YBJKRZ set QQDATA=LS_QQDATA where YBJKID=PYBJKID;--请求报文 if PCOMMIT='Y' then commit; end if; PZXZT00:=1; --输出:执行状态 0:失败 1:成功 PERRMSG:=null; --输出:错误信息 exception when no_data_found then PZXZT00:=0; PERRMSG:=substrb('门诊医保接口交互生成失败!原因:'||sqlerrm,1,200); rollback; when others then PZXZT00:=0; PERRMSG:=substrb('门诊医保接口交互生成失败!原因:'||sqlerrm,1,200); rollback; end;