create or replace function SF_SF_NationYBSXZD ( PBRID00 number ,--病人ID PGHID00 number ,--挂号id PYBSXBM varchar2 ,--医保属性编码 PBQBM00 varchar2 ,--病情编码 PBRLB00 varchar2 ,--病人类别 0:普通 1:生育 2:工伤 3:体检 4:单病种 5:择日住院 10:产前检查 POTHER0 varchar2 --其它 ) return varchar2 is LS_RETURN varchar2(100); LS_COUNT0 number(10); LS_MZ_XXGZBDGL_med_type_icd BM_TYZD00.MC0000%type; --门诊新型冠状病毒感染医疗类别【med_type】根据诊断ICD是否转码(BM_TYZD00.ZDMC00=门诊新型冠状病毒感染医疗类别对应ICD代码),是否开启(1:开启 0:关闭)分割符“|”医疗类别 默认:0|1102 LS_GHLBBH_med_type_Para BM_TYZD00.MC0000%type; --门诊国家医保结算挂号类别医疗类别是否开启编码转化,格式:开启模式(0:不开启 1:开启不判断区号 2:开启根据区号判断)分割符号|区号多个用,分割。参考格式:2|3502 LS_GHLBBH_med_type_Open varchar2(10);--开启模式(0:不开启 1:开启不判断区号 2:开启根据区号判断) LS_GHLBBH_med_type_QHBM varchar2(100);--区号多个用,分割 LS_XZQH00 BM_BRXXB0.XZQH00%type;--行政区号 LS_LBBH00 BM_GHLBB0.LBBH00%type;--挂号类别编号=SF_BRXXB0.GHLB00 LS_LBMC00 BM_GHLBB0.LBMC00%type;--挂号类别名称 LS_JKDZBM BM_YBSXZD.JKDZBM%type;--接口对照编码 LS_JKDZMC BM_YBSXZD.JKDZMC%type;--接口对照名称 LS_VALUE0 BM_YBSXZD.VALUE0%type;--接口属性值 LS_med_type_insutype_JKDZBM BM_YBSXZD.JKDZBM%type;--医疗类别险种类型转化字典对照编码 LS_med_type_psn_type_JKDZBM BM_YBSXZD.JKDZBM%type;--医疗类别人员类别转化字典对照编码 LS_BRXX_insutype BM_BRXXB0.AAE140%type;--【基本信息】险种类型编码 LS_BRXX_psn_type BM_BRXXB0.ZTQKBH%type;--【基本信息】职退情况编号 LS_BRXX_BRXB00 BM_BRXXB0.BRXB00%type;--【基本信息】性别 LS_BRXX_XBBH00 BM_BRXXB0.XBBH00%type;--【基本信息】性别编号, select VALUE0 from BM_YBSXZD where JKBM00=0 and SXBM00='gend' LS_GHXX_med_type SF_BRXXB0.med_type%type;--【挂号信息表】医疗类别, 对应国家医保接口节点med_type字典 LS_GHXX_birctrl_type SF_BRXXB0.birctrl_type%type;--【挂号信息表】计划生育手术类别 LS_GHXX_birctrl_matn_date SF_BRXXB0.birctrl_matn_date%type;--【挂号信息表】计划生育手术或生育日期 LS_GHXX_matn_type SF_BRXXB0.matn_type%type;--【挂号信息表】生育类别 LS_GHXX_geso_val SF_BRXXB0.geso_val%type;--【挂号信息表】孕周数 LS_GHXX_SFCQJC SF_BRXXB0.SFCQJC%type;--【挂号信息表】检查类型(原为是否产前检查), 0普通1产前检查2体检, 空值按普通处理 in_medicaltype varchar2(10);--[xml入参]体检病人标识 1:体检病人 0:非体检病人 in_medicalbke087 varchar2(100);--[xml入参]体检结算:诊断编码bke087 in_medicalbke045 varchar2(100);--[xml入参]体检结算:固定收费项目bke045 in_med_type varchar2(10);--[xml入参]医疗类别 in_qdcjbm varchar2(10);--[xml入参]渠道编码 1:自助机 2:收费窗口 3:移动结算 4:多点结算 5:互联网结算 等等 in_insutype varchar2(10);--[xml入参]险种编码 in_psn_type varchar2(10);--[xml入参]人员类别 -- modification history -- Person Date Comments --zhangyc 2022.04.05 create 国家医保接口属性编码对应的值 by MZSF9-20220406-002 --zhangyc 2022.04.08 增加PBRLB00=3:体检 med_type:医疗类别=9107:体检 PBRLB00=10: 510102:产前检查 by MZSF9-20220407-003 --linzetao 2023.01.09 增加新冠医疗类别 med_type:1102 MZSF9-20230109-002 --linzetao 2023.01.13 调整新冠医疗类别判断改成临床码判断 MZSF9-20230113-001 --zhangyc 2023.02.28 med_type=11 增加根据参数GHLBBH_med_type_Para设置模式判断 by MZSF9-20230227-001 --zhnagyc 2025.04.23 【2203A】matn_type:生育类别、geso_val:孕周数 不为空时 med_type:传51:生育门诊 by MZSF9-20250423-001 --zhangyc 2025.04.27 优化生育med_type=51判断规则(SF_BRXXB0.SFCQJC=1 or matn_type is not null or geso_val is not null) by MZSF9-20250424-001 --zhangyc 2025.04.30 med_type根据his内部属性字典编码=med_type_insutype对照编码转化,和med_type_psn_type转化 by MZSF9-20250506-001 begin /* --aka078 医疗就诊方式 --aka130 医疗类别 医疗类别(福建:aka130,国家:med_type) 11 普通门诊 41 定点药店购药 12 门诊挂号 51 生育门诊 13 急诊 52 生育住院 14 门诊慢特病 53 计划生育手术费 21 普通住院 91 其他门诊 22 外伤住院 92 其他住院 23 转外诊治住院 93 其他购药 24 急诊转住院 99 地方扩展医疗类别 */ if nvl(PGHID00,0)>0 and nvl(PBRID00,0)>0 then begin select c.AAE140,c.ZTQKBH,B.LBBH00,B.LBMC00,C.XZQH00,c.BRXB00,c.XBBH00,a.birctrl_type,a.birctrl_matn_date,a.matn_type,a.geso_val,a.sfcqjc into LS_BRXX_insutype,LS_BRXX_psn_type,LS_LBBH00,LS_LBMC00,LS_XZQH00,LS_BRXX_BRXB00,LS_BRXX_XBBH00,LS_GHXX_birctrl_type,LS_GHXX_birctrl_matn_date,LS_GHXX_matn_type,LS_GHXX_geso_val,LS_GHXX_SFCQJC from SF_BRXXB0 a,BM_GHLBB0 b,BM_BRXXB0 c where a.BRID00=C.BRID00 and a.GHLB00 = b.LBBH00 and a.GHID00= PGHID00 and a.BRID00=PBRID00; exception when others then LS_BRXX_insutype:=null;--【基本信息】险种类型编码 LS_BRXX_psn_type:=null;--【基本信息】职退情况编号 LS_LBBH00:=null;--挂号类别编号=SF_BRXXB0.GHLB00 LS_LBMC00:=null;--挂号类别名称 LS_XZQH00:=null;--行政区号 LS_GHXX_birctrl_type :=null;--【挂号信息表】计划生育手术类别, 生育门诊按需录入 LS_GHXX_birctrl_matn_date :=null;--【挂号信息表】计划生育手术或生育日期, 生育门诊按需录入,yyyy-MM-dd LS_GHXX_matn_type :=null;--【挂号信息表】生育类别 字符型 6 LS_GHXX_geso_val :=null;--【挂号信息表】孕周数 数值型 2 LS_GHXX_SFCQJC :=null;--【挂号信息表】检查类型(原为是否产前检查), 0普通1产前检查2体检, 空值按普通处理 end; end if; LS_RETURN:=null; LS_JKDZBM :=null;--接口对照编码 LS_JKDZMC :=null;--接口对照名称 LS_med_type_insutype_JKDZBM:=null;--医疗类别险种类型转化字典对照编码 LS_med_type_psn_type_JKDZBM:=null;--医疗类别人员类别转化字典对照编码 LS_GHLBBH_med_type_Para:=null; --门诊国家医保结算挂号类别医疗类别是否开启编码转化,格式:开启模式(0:不开启 1:开启不判断区号 2:开启根据区号判断)分割符号|区号多个用,分割。参考格式:2|3502 LS_GHLBBH_med_type_Open:=null;--开启模式(0:不开启 1:开启不判断区号 2:开启根据区号判断) LS_GHLBBH_med_type_QHBM:=null;--区号多个用,分割 in_medicaltype :=substrb(trim(SF_XT_GETXMLSTR('medicaltype',POTHER0)),1,10);--[xml入参]体检病人标识 1:体检病人 0:非体检病人 in_medicalbke087 :=substrb(trim(SF_XT_GETXMLSTR('medicalbke087',POTHER0)),1,100);--[xml入参]体检结算:诊断编码bke087 in_medicalbke045 :=substrb(trim(SF_XT_GETXMLSTR('medicalbke045',POTHER0)),1,100);--[xml入参]体检结算:固定收费项目bke045 in_med_type :=substrb(trim(SF_XT_GETXMLSTR('med_type',POTHER0)),1,10);--[xml入参]医疗类别 in_qdcjbm :=substrb(trim(SF_XT_GETXMLSTR('qdcjbm',POTHER0)),1,10);--[xml入参]渠道编码 1:自助机 2:收费窗口 3:移动结算 4:多点结算 5:互联网结算 等等 in_insutype :=substrb(trim(SF_XT_GETXMLSTR('insutype',POTHER0)),1,10);--[xml入参]险种编码 if in_insutype is null then in_insutype:=substrb(trim(SF_XT_GETXMLSTR('aae140',POTHER0)),1,10); end if; in_psn_type :=substrb(trim(SF_XT_GETXMLSTR('psn_type',POTHER0)),1,10);--[xml入参]人员类别 LS_BRXX_insutype:=substrb(nvl(in_insutype,LS_BRXX_insutype),1,10);--【基本信息】险种类型编码 LS_BRXX_psn_type:=substrb(nvl(in_psn_type,LS_BRXX_psn_type),1,10);--【基本信息】职退情况编号 if PYBSXBM='aka078' then --医疗就诊方式aka078 if PBRLB00='1' then --0:普通 1:生育 2:工伤 LS_RETURN:='81'; elsif PBRLB00='2' then --0:普通 1:生育 2:工伤 LS_RETURN:='91'; elsif PBRLB00='3' then LS_RETURN:='60'; else LS_RETURN:='10'; --门(急)诊 end if; LS_RETURN:=nvl(LS_RETURN,'10');--为空默认:10 门(急)诊 elsif PYBSXBM in ('aka130','med_type') then -- 医疗类别:med_type--begin-- --门诊新型冠状病毒感染医疗类别【med_type】根据诊断ICD是否转码(BM_TYZD00.ZDMC00=门诊新型冠状病毒感染医疗类别对应ICD代码),是否开启(1:开启 0:关闭)分割符“|”医疗类别 默认:0|1102 select nvl(max(MC0000),'0|1102') into LS_MZ_XXGZBDGL_med_type_icd from BM_TYZD00 WHERE ZDMC00='医保新接口参数设置' and BH0000='MZ_XXGZBDGL_med_type_icd'; if SF_XT_RETURNINDEXEH(LS_MZ_XXGZBDGL_med_type_icd,'|',1) = '1' then --启用新冠感染接口, 判断是否存在新冠诊断 select count(1) into LS_COUNT0 from YS_BRZDXX a where GHID00=PGHID00 and exists(select 1 from BM_TYZD00 where ZDMC00='门诊新型冠状病毒感染医疗类别对应ICD代码' and YXBZ00='1' and BH0000=a.ICD900); if LS_COUNT0 > 0 then LS_RETURN := nvl(SF_XT_RETURNINDEXEH(LS_MZ_XXGZBDGL_med_type_icd,'|',2),'1102'); end if; end if; --门诊国家医保结算挂号类别医疗类别是否开启编码转化,格式:开启模式(0:不开启 1:开启不判断区号 2:开启根据区号判断)分割符号|区号多个用,分割。参考格式:2|3502 LS_GHLBBH_med_type_Para:=substrb(SF_SF_TYZD00('医保新接口参数设置','GHLBBH_med_type_Para'),1,100); if LS_GHLBBH_med_type_Para is not null then LS_GHLBBH_med_type_Open:=nvl(substrb(SF_XT_RETURNINDEXEH(LS_GHLBBH_med_type_Para,'|',1),1,10),'0');--开启模式(0:不开启 1:开启不判断区号 2:开启根据区号判断) LS_GHLBBH_med_type_QHBM:=substrb(SF_XT_RETURNINDEXEH(LS_GHLBBH_med_type_Para,'|',2),1,100);--区号多个用,分割 end if; if LS_RETURN is null then if trim(PBQBM00) is not null then if PBRLB00='1' then LS_RETURN:='51'; --51:生育门诊 else LS_RETURN:='14'; --门诊慢(特)病种 end if; else LS_RETURN:='11'; --普通门诊 end if; if (LS_GHXX_matn_type is not null) or (LS_GHXX_geso_val is not null and LS_GHXX_geso_val not in ('0')) then LS_RETURN :=substrb(nvl(LS_GHXX_med_type,'51'),1,10); --3.med_type: 医疗类别 11:普通门诊 14:门诊慢特病 51:生育门诊 end if; --病人类别 0:普通 1:生育 2:工伤 3:体检 4:单病种 5:择日住院 if PBRLB00='3' or in_medicaltype='1' then LS_RETURN:='9107'; --9107:体检 elsif PBRLB00='5' then LS_RETURN:='9938'; --9938:择日住院 elsif PBRLB00='10' or LS_GHXX_SFCQJC='1' then --10:产前检查 LS_RETURN:='510102'; --510102:产前检查 end if; LS_RETURN:=substrb(nvl(in_med_type,LS_RETURN),1,10); LS_RETURN:=nvl(LS_RETURN,'11');--为空默认:11 普通门诊 --取med_type医保属性字典对照编码 begin select a.VALUE0,a.JKDZBM,a.JKDZMC into LS_VALUE0,LS_JKDZBM,LS_JKDZMC from BM_YBSXZD a where a.JKBM00=0 and nvl(a.SFYX00,'1')='1' and nvl(a.MZZYBZ,'2') in ('0','2') and a.SXBM00='med_type' and VALUE0=LS_RETURN; exception when others then LS_VALUE0:=null;--接口属性值 LS_JKDZBM:=null;--接口对照编码 LS_JKDZMC:=null;--接口对照名称 end; LS_RETURN:=substrb(nvl(LS_JKDZBM,LS_RETURN),1,10); --med_type:医疗类别(11:普通门诊 12:门诊挂号 13:急诊 14:门诊慢特病 51:生育门诊 ) if trim(LS_VALUE0) is null and LS_RETURN in ('510102') then --510102:产前检查 LS_RETURN:='51'; --51:生育门诊 end if; if trim(LS_VALUE0) is null and LS_RETURN not in ('11','14') then --未存在字典中,转为11:普通门诊 LS_RETURN:='11';--11:普通门诊 end if; --步骤1:根据his内部医疗类别险种类型转化字典--begin-- IF LS_BRXX_insutype is not null and LS_RETURN not in ('11','14') then --【基本信息】险种类型编码 LS_med_type_insutype_JKDZBM:=trim(substrb(SF_XT_GETYBSXZD('med_type_insutype',trim(LS_RETURN||LS_BRXX_insutype),'3','3',-1,'0'),1,50));--医疗类别险种类型转化字典对照编码 if LS_med_type_insutype_JKDZBM is not null then if instrb(LS_med_type_insutype_JKDZBM,',')>0 then LS_med_type_insutype_JKDZBM:=substrb(SF_SF_RETURNINDEXEH(LS_med_type_insutype_JKDZBM,',', 1),1,10);--门诊,住院 end if; if trim(LS_med_type_insutype_JKDZBM) is not null then LS_RETURN:=substrb(LS_med_type_insutype_JKDZBM,1,10); end if; end if; end if; --步骤1:根据his内部医疗类别险种类型转化字典--end-- --步骤2:根据his内部医疗类别人员类别转化字典--begin-- IF LS_BRXX_psn_type is not null and LS_RETURN not in ('11','14') then --【基本信息】职退情况编号=人员类别编码 LS_med_type_psn_type_JKDZBM:=trim(substrb(SF_XT_GETYBSXZD('med_type_psn_type',trim(LS_RETURN||LS_BRXX_psn_type),'3','3',-1,'0'),1,50));--医疗类别人员类别转化字典对照编码 if LS_med_type_psn_type_JKDZBM is not null then if instrb(LS_med_type_psn_type_JKDZBM,',')>0 then LS_med_type_psn_type_JKDZBM:=substrb(SF_SF_RETURNINDEXEH(LS_med_type_psn_type_JKDZBM,',', 1),1,10);--门诊,住院 end if; if trim(LS_med_type_psn_type_JKDZBM) is not null then LS_RETURN:=substrb(LS_med_type_psn_type_JKDZBM,1,10); end if; end if; end if; --步骤2:根据his内部医疗类别人员类别转化字典--end-- ---根据通用字典参数GHLBBH_med_type_Para设置转化编码---begin---- if PGHID00>0 and LS_RETURN in ('11') and LS_GHLBBH_med_type_Open in ('1','2') then if LS_LBBH00 is not null then begin select a.JKDZBM,a.JKDZMC into LS_JKDZBM,LS_JKDZMC from BM_YBSXZD a where a.SXBM00='GHLBBH_med_type' and a.VALUE0=LS_LBBH00 and a.SFYX00='1'; exception when others then LS_JKDZBM:=null;--接口对照编码 LS_JKDZMC:=null;--接口对照名称 end; end if; --有取到对照编码开始转化--begin--- if trim(LS_JKDZBM) is not null then --1:开启不判断区号 if LS_GHLBBH_med_type_Open='1' then LS_RETURN:=trim(LS_JKDZBM); end if; --2:开启根据区号判断 if LS_GHLBBH_med_type_Open='2' and trim(LS_GHLBBH_med_type_QHBM) is not null and trim(LS_XZQH00) is not null then if instrb(','||trim(LS_GHLBBH_med_type_QHBM)||',',','||substrb(trim(LS_XZQH00),1,4)||',')>0 then LS_RETURN:=trim(LS_JKDZBM); end if; end if; end if; --有取到对照编码开始转化--end--- end if; ---根据通用字典参数GHLBBH_med_type_Para设置转化编码---END---- -- 医疗类别:med_type--end-- end if; end if; return trim(LS_RETURN); end;