prompt 门诊医保中间表费用明细记录生成过程 SP_SF_FYDJ00_YBJK00 create or replace procedure SP_SF_FYDJ00_YBJK00 ( Pcflsh0 in char , --处方/医技单/SF_FYMX00.MXID00 Pdjlb00 in char , --单据类别 0已经登记的单据号,1药品处方,2医技单,3已记账处方单,4已记账医技单,5挂号费补结算 Pjzdh00 in number , --输入结账单号 Pczy000 in number , --操作员编码 Pczyks0 in number , --操作员科室 Pcommit in varchar2 default 'Y', --提交标志 Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ) -- modification history -- Person Date Comments -- zhanghr 2012.08.09 create -- qks 2012.08.17 修改C_YWJJ00对应写入SF_FYMX00_TEMP00.SFLB00值 -- qks 2012.09.24 修改C_FYMX00条件 --zhangyc 2013.01.15 增加发送用药天数、医保频次编码、使用剂量+剂量单位(SF_YBSFFSGHKSBM=Y 时发送) -- qks 2013.06.24 协定处方:发送协定处方对应明细药品给医保 -- qks 2014.06.25 修改Pdjlb00=0时,发送“用药天数”取值改用处方明细表,如果医生没开天数,重新计算用药天数,取值不超过90天,最少取1天; -- qks 2014.07.03 开单医生改用挂号接诊医生 -- qks 2015.01.16 增加Pdjlb00 in ('3','4','5');同时增加挂号费写入 -- qks 2016.11.06 医保发送速度非常慢:JZDH00>0 -> JZDH00+0>0; by MZSF9-20161105-001 -- qks 2017.12.19 C_GHF000增加条件; for MZSF9-20171220-003 -- liwm 2018.03.12 药事服务费医保接口医生字段处理 for MZSF9-20180312-001 -- jlg 2018.06.08 处理医保发送慢的问题 JZDH00 = ? --> JZDH00 +0 = ? MZSF9-20180608-003 -- jlg 2018.06.10 处理开单医生会为挂号人员的问题 MZSF9-20180610-001 -- qks 2018.07.06 修正病历本费结算报错; for MZSF9-20180626-002 -- qks 2018.07.31 当Pdjlb00 in ('3','4'),允许退号的费用也可以结算。因为存在正负对抵,合计金额为0情况。 as Vmzcf00 YF_MZCF00%rowtype; Vyjyw00 YJ_YW0000%rowtype; Vfymx00 SF_FYMX00%rowtype; Vybbrlb BM_YBBRLB.YBBRLB%type; Vfbbh00 IC_YBBRLB.FBBH00%type; Vyblb00 IC_YBBRLB.YBLB00%type; Vcfzje0 YF_MZCF00.CFZJE0%type; Vzfje00 YF_MZCF00.CFZJE0%type; Vgfje00 YF_MZCF00.CFZJE0%type; Vsfdj00 SF_BRZHXX.SFDJ00%type; --帐户是否冻结 Vmzzhid SF_BRZHXX.MZZHID%type; --门诊账户ID Vczyxm0 BM_YGBM00.ZWXM00%type; Vsswrws number(1); --处方总金额(医保)--舍入位数(小数位保留位数) Vqzfsyb number(1); --处方总金额(医保)--取整方式0--四舍五入,1--向前取整 ls_YPTS00 varchar2(6); --用药天数 ls_YPPL00 varchar2(6); --频次编码 ls_YPYL00 varchar2(20); --计量数量+单位 v_count0 number; Vmxid00 SF_FYMX00.MXID00%type; Vdjh000 SF_FYMX00.DJH000%type; Vzxcgbz number; Vtsxx00 varchar2(200); Vxxxx00 varchar2(200); Vparams varchar2(255); --参数变量 Verrmsg varchar2(255); --错误提示变量 Ecustom exception; --错误变量 ls_zymrcs YF_MZCF00.ZYMRCS%type; --中药每日服药次数 v_zymrcs YF_MZCF00.ZYMRCS%type; --中药每日服药次数 LS_PCMC00 YF_MZCFMX.PCMC00%type; --频次 LS_CSL000 YF_MZCFMX.CSL000%type; --次数量(剂量单位) LS_ZHL000 YF_MZCFMX.ZHL000%type; --转换率(处方单位/剂量单位) ls_ZQCS00 BM_PC0000.ZQCS00%type; --周期内执行的总次数 ls_JZYS00 SF_BRXXB0.JZYS00%type; --挂号接诊医生 ls_THBZ00 SF_BRXXB0.THBZ00%type; --退号标志 ls_GHH000 SF_BRXXB0.GHH000%type; --挂号号 ls_JZDH00 SF_FYMX00.JZDH00%type; --结算单号 cursor C_MZCFMX IS select a.CFID00,a.HJJE00,a.GFJE00,a.ZFJE00,a.JZJE00,a.QZFJE0,a.YPNM00,a.YPMC00, a.ZFBL00,b.YPGBM0,a.YPZSL0,a.LSDJ00,a.CFDW00,a.YPGG00, nvl(a.YYSJ00,nvl(SF_SF_GETYYTS(a.CFID00,c.ZYTS00),'1')) as YPTS00,--用药天数 nvl(SF_SF_GETPCBM(a.PCMC00,0),'0240') as YPPL00, --医保频次编码 to_char(a.CSL000)||a.JLDW00 as YPYL00, --计量数量+计量单位 0 XDCFID, --协定处方ID a.CSL000,a.PCMC00,a.ZHL000 from YF_MZCFMX a,BM_YD0000 b,YF_MZCF00 C where a.CFLSH0=Pcflsh0 and a.SFZBY0='N' and a.YPNM00=b.YPNM00 and a.CFLSH0=c.CFLSH0 and not exists (select 1 from BM_XDCFWH where XDYPNM=a.YPNM00) --协定处方 union all select a.CFID00,round(round(c.LSDJ00*C.ZHXS00/b.K2J000,4)*round(c.YPSL00*c.ZYTS00*a.YPZSL0,3),2) HJJE00, 0 GFJE00,round(round(c.LSDJ00*C.ZHXS00/b.K2J000,4)*round(c.YPSL00*c.ZYTS00*a.YPZSL0,3),2) ZFJE00,0 JZJE00,0 QZFJE0,b.YPNM00,b.YPMC00, 1 ZFBL00,b.YPGBM0,round(c.YPSL00*c.ZYTS00*a.YPZSL0,3) YPZSL0,round(c.LSDJ00*C.ZHXS00/b.K2J000,4) LSDJ00,c.YPDW00 CFDW00,b.YPGG00, ceil(c.ZYTS00*a.YPZSL0), --用药天数 nvl(SF_SF_GETPCBM(a.PCMC00,0),'0240') as YPPL00, --医保频次编码 to_char(c.YPSL00)||c.YPDW00 as YPYL00, --计量数量+计量单位 C.MXID00 XDCFID, --协定处方ID a.CSL000,a.PCMC00,a.ZHL000 from YF_MZCFMX a,BM_YD0000 b,BM_XDCFWH C where a.CFLSH0=Pcflsh0 and a.SFZBY0='N' and b.YPNM00=c.MXYPNM and a.YPNM00=C.XDYPNM; cursor C_YWJJ00 IS select a.ID0000,round(a.JJJE00*a.SL0000*a.SFCS00,2) HJJE00,a.GFJE00,a.ZFJE00,a.JZJE00,a.QZFJE0, a.SFXMID,B.XMMC00,a.ZFBL00,b.GJBM00,a.JMJE00,a.JJJE00,a.SFCS00*a.SL0000 XMSL00,b.DW0000,b.GG0000,b.JSXM00, '1' as YPTS00,--用药天数 '*' as YPPL00, --医保频次编码 to_char(a.SFCS00*a.SL0000)||b.DW0000 as YPYL00 --计量数量+计量单位 from YJ_YWJJ00 a,BM_YYSFXM b where a.YJDJH0=to_number(Pcflsh0) and a.SFXMID=b.SFXMID; cursor C_FYMX00 IS select a.MXID00,a.HJJE00,a.GFJE00,a.ZFJE00,a.JZJE00,a.QZFJE0,a.XMBH00,a.XMMC00, a.ZFBL00,' ' GJBM00,a.YJJZID,a.YJDJH0,a.XMSL00,a.XMDJ00,a.XMGG00,a.JMBZ00,a.JMJE00, a.XMDW00,a.SFLB00,a.XM0000,a.MZH000,a.BRID00,a.DJH000,a.KDYS00,a.SFLSCF, decode(a.SFLB00,'3',nvl(SF_SF_GETYYTS(a.yjjzid,0),'1'),'1') as YPTS00,--用药天数 decode(a.SFLB00,'3',nvl(SF_SF_GETPCBM('',a.yjjzid),'0240'),'*') as YPPL00, --医保频次编码 to_char(a.XMSL00)||a.XMDW00 as YPYL00, --计量数量+计量单位 a.GHY000,a.BRFB00,a.YBLB00 from SF_FYMX00 a where a.MXID00=to_number(Pcflsh0); -- and a.XMBH00=b.SFXMID; cursor C_YJCFFY IS select a.MXID00,a.HJJE00,a.GFJE00,a.ZFJE00,a.JZJE00,a.QZFJE0,a.XMBH00,a.XMMC00, a.ZFBL00,' ' GJBM00,a.YJJZID,a.YJDJH0,a.XMSL00,a.XMDJ00,a.XMGG00,a.JMBZ00,a.JMJE00, a.XMDW00,a.SFLB00,a.XM0000,a.MZH000,a.BRID00,a.DJH000,a.KDYS00,a.SFLSCF, decode(a.SFLB00,'3',nvl(SF_SF_GETYYTS(a.yjjzid,0),'1'),'1') as YPTS00,--用药天数 decode(a.SFLB00,'3',nvl(SF_SF_GETPCBM('',a.yjjzid),'0240'),'*') as YPPL00, --医保频次编码 to_char(a.XMSL00)||a.XMDW00 as YPYL00, --计量数量+计量单位 a.GHY000,a.BRFB00,a.YBLB00 from SF_FYMX00 a where a.YJDJH0=Pcflsh0 and ((a.SFLB00='3' and Pdjlb00='3') or (a.SFLB00<>'3' and Pdjlb00='4')); cursor C_GHF000 IS select a.MXID00,a.HJJE00,a.GFJE00,a.ZFJE00,a.JZJE00,a.QZFJE0,a.XMBH00,a.XMMC00, a.ZFBL00,' ' GJBM00,a.YJJZID,a.YJDJH0,a.XMSL00,a.XMDJ00,a.XMGG00,a.JMBZ00,a.JMJE00, a.XMDW00,a.SFLB00,a.XM0000,a.MZH000,a.BRID00,a.DJH000,a.KDYS00,a.SFLSCF, decode(a.SFLB00,'3',nvl(SF_SF_GETYYTS(a.yjjzid,0),'1'),'1') as YPTS00,--用药天数 decode(a.SFLB00,'3',nvl(SF_SF_GETPCBM('',a.yjjzid),'0240'),'*') as YPPL00, --医保频次编码 to_char(a.XMSL00)||a.XMDW00 as YPYL00, --计量数量+计量单位 a.GHY000,a.BRFB00,a.YBLB00 from SF_FYMX00 a where a.MZH000=(select GHH000 from yf_mzcf00 where CFLSH0=Pcflsh0) and (Pdjlb00='5') and a.MZFPID in (4,6,21) and a.JZDH00+0=0 and a.sflb00<>'3' and exists (select 1 from yj_yw0000 where yjdjh0=a.YJDJH0 and FJDJBZ in ('3','4')) and not exists (select 1 from SF_FYMX00_TEMP00 where jzdh00=Pjzdh00 and MXID00=a.MXID00); begin Verrmsg:=''; Vparams :=nvl(Pcflsh0,'null')||','||nvl(Pdjlb00,'null')||','||nvl(to_char(Pjzdh00),'null')||','||nvl(to_char(Pczy000),'null')||','||nvl(to_char(Pczyks0),'null'); SP_TransLog(sysdate,'SP_SF_YJDJ00_YBJK00',Pczy000,null,Vparams); select ZWXM00 into Vczyxm0 from BM_YGBM00 where YGBH00=Pczy000; if Pdjlb00='1' then select * into Vmzcf00 from YF_MZCF00 where CFLSH0=Pcflsh0; if Vmzcf00.cfzt00 not in ('0') then Verrmsg:='非可记账处方'; raise Ecustom; end if; select nvl(min(THBZ00),'1'),nvl(min(JZYS00),Vmzcf00.YSGZH0) into ls_THBZ00,ls_JZYS00 from SF_BRXXB0 where GHH000=Vmzcf00.GHH000; if ls_THBZ00 = '0' then Verrmsg:='挂号('||Vmzcf00.GHH000||')已被退,无法记账'; raise Ecustom; end if; select FBBH00,YBLB00 into Vfbbh00,Vyblb00 from BM_BRXXB0 a where BRID00=Vmzcf00.BRID00; for mx in C_MZCFMX loop Vgfje00:=mx.GFJE00; ls_YPTS00:=mx.YPTS00; --用药天数 ls_YPPL00:=mx.YPPL00; --频次编码 ls_YPYL00:=mx.YPYL00; --计量数量+单位 --重新计算用药天数,取值不超过90天 /* --改用函数SF_SF_GETYYTS if ls_YPTS00 = '0' then ls_ZQCS00 := null; if (mx.CSL000>0) and (mx.PCMC00 is not null) then select max(ZQCS00) into ls_ZQCS00 from BM_PC0000 where PCMC00=mx.PCMC00; end if; if (mx.CSL000>0) and (ls_ZQCS00 is not null) then ls_YPTS00 := least(ceil(mx.YPZSL0*mx.ZHL000/(mx.CSL000*ls_ZQCS00)),90); else ls_YPTS00 := '1'; end if; end if; */ --记账 Vmxid00 := null; insert into SF_FYMX00_TEMP00(JZDH00, --结算单号 MXID00, --门诊病人费用明细流水号 DJH000, --单据号 MZH000, --门诊号,本处指挂号号 BRID00, --病人ID号 XM0000, --病人姓名 BRFB00, --病人费别 YBLB00, --医保类别 医保分中心类别 XMBH00, --医疗收费编码或药品编码 SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 XMMC00, --项目名称 XMGG00, --项目规格 XMDW00, --单位 XMDJ00, --单价 XMSL00, --数量 HJJE00, --合计金额 QZFJE0, --全自付金额 ZFJE00, --自费金额 GFJE00, --公费金额,减免时用 JZJE00, --记帐金额 JMJE00, --减免金额 JMBZ00, --减免标志 CZRQ00, --记账日期 CZSJ00, --记账时间 ZFBL00, --自付比例 YJDJH0, --医技单号/处方号 YJJZID, --医技/处方计价明细ID YBDJH0, --医保接口返回的费用单据流水号 SFLSCF, --是否零散处方 0直接记账1处方2医技 KDYS00, CZY000, --操作员 YPTS00, --用药天数 YPPL00, --频次编码 YPYL00 --计量数量+单位 ) values ( Pjzdh00, 0, 0, Vmzcf00.GHH000, Vmzcf00.BRID00, Vmzcf00.BRXM00, Vfbbh00, Vyblb00, mx.YPNM00, '3', mx.YPMC00, mx.YPGG00, mx.CFDW00, mx.LSDJ00, mx.YPZSL0, mx.HJJE00, mx.QZFJE0, mx.ZFJE00, mx.GFJE00, mx.JZJE00, 0, '0', to_char(sysdate,'yyyymmdd'), to_char(sysdate,'hh24:mi:ss'), mx.ZFBL00, Pcflsh0, mx.CFID00, '0', Pdjlb00, --Vmzcf00.YSGZH0, ls_JZYS00, Pczy000, ls_YPTS00, --用药天数 ls_YPPL00, --频次编码 ls_YPYL00 --计量数量+单位 ); end loop; elsif Pdjlb00='2' then select * into Vyjyw00 from YJ_YW0000 where YJDJH0=to_number(Pcflsh0); if Vyjyw00.xmzt00 not in ('0','1') then Verrmsg:='非可记账处方'; raise Ecustom; end if; select nvl(min(THBZ00),'1'),decode( Vyjyw00.FJDJBZ,'8',Vyjyw00.KDYS00, nvl(min(JZYS00),Vyjyw00.KDYS00) ) into ls_THBZ00,ls_JZYS00 from SF_BRXXB0 where GHH000=Vyjyw00.ZYHGHH; --药事服务费医保接口医生字段处理 if ls_THBZ00 = '0' then Verrmsg:='挂号('||Vmzcf00.GHH000||')已被退,无法记账'; raise Ecustom; end if; select FBBH00,YBLB00 into Vfbbh00,Vyblb00 from BM_BRXXB0 a where BRID00=Vyjyw00.BRID00; for mx in C_YWJJ00 loop ls_YPTS00:=mx.YPTS00; --用药天数 ls_YPPL00:=mx.YPPL00; --频次编码 ls_YPYL00:=mx.YPYL00; --计量数量+单位 insert into SF_FYMX00_TEMP00(JZDH00, --结算单号 MXID00, --门诊病人费用明细流水号 DJH000, --单据号 MZH000, --门诊号,本处指挂号号 BRID00, --病人ID号 XM0000, --病人姓名 BRFB00, --病人费别 YBLB00, --医保类别 医保分中心类别 XMBH00, --医疗收费编码或药品编码 SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 XMMC00, --项目名称 XMGG00, --项目规格 XMDW00, --单位 XMDJ00, --单价 XMSL00, --数量 HJJE00, --合计金额 QZFJE0, --全自付金额 ZFJE00, --自费金额 GFJE00, --公费金额,减免时用 JZJE00, --记帐金额 JMJE00, --减免金额 JMBZ00, --减免标志 CZRQ00, --记账日期 CZSJ00, --记账时间 ZFBL00, --自付比例 YJDJH0, --医技单号/处方号 YJJZID, --医技/处方计价明细ID YBDJH0, --医保接口返回的费用单据流水号 SFLSCF, --是否零散处方 0直接记账1处方2医技 KDYS00, CZY000, --操作员 YPTS00, --用药天数 YPPL00, --频次编码 YPYL00 --计量数量+单位 ) values ( Pjzdh00, 0, 0, Vyjyw00.ZYHGHH, Vyjyw00.BRID00, Vyjyw00.BRXM00, Vfbbh00, Vyblb00, mx.SFXMID, mx.JSXM00,--'3', mx.XMMC00, mx.GG0000, mx.DW0000, mx.JJJE00, mx.XMSL00, mx.HJJE00, mx.QZFJE0, mx.ZFJE00, mx.GFJE00, mx.JZJE00, mx.JMJE00, decode(sign(mx.JMJE00),0,'0','4'), to_char(sysdate,'yyyymmdd'), to_char(sysdate,'hh24:mi:ss'), mx.ZFBL00, Pcflsh0, mx.ID0000, '0', Pdjlb00, --Vyjyw00.KDYS00, ls_JZYS00, Pczy000, ls_YPTS00, --用药天数 ls_YPPL00, --频次编码 ls_YPYL00 --计量数量+单位 ); end loop; elsif Pdjlb00='0' then select nvl(max(JZDH00),0),nvl(min(MZH000),'0') into ls_JZDH00,ls_GHH000 from SF_FYMX00 where MXID00=to_number(Pcflsh0); if ls_JZDH00>0 then Verrmsg:='费用已经结算,无法记账'; raise Ecustom; end if; select nvl(min(THBZ00),'1'),nvl(min(JZYS00),0) into ls_THBZ00,ls_JZYS00 from SF_BRXXB0 where GHH000=ls_GHH000; if ls_THBZ00 = '0' then Verrmsg:='挂号('||ls_GHH000||')已被退,无法记账'; raise Ecustom; end if; for mx in C_FYMX00 loop ls_YPTS00:=mx.YPTS00; --用药天数 ls_YPPL00:=mx.YPPL00; --频次编码 ls_YPYL00:=mx.YPYL00; --计量数量+单位 --如果没有取到就诊医生,改为如果取有开单医生,优先按开单医生取 if ls_JZYS00 <=0 then if mx.KDYS00 >0 then ls_JZYS00:=mx.KDYS00; else ls_JZYS00:=mx.GHY000; end if; end if; /* if nvl(mx.GHY000,0)<=0 then ls_JZYS00:=mx.KDYS00; else ls_JZYS00:=mx.GHY000; end if; if mx.SFLSCF='1' then --处方再次取医保频次编码 select SF_SF_GETPCBM('',mx.YJJZID) into ls_YPPL00 from dual; end if; */ --重新计算用药天数,取值不超过90天 /* --改用函数 if mx.SFLB00='3' then ls_ZQCS00 := null; select max(PCMC00),max(YYSJ00),max(CSL000),max(ZHL000) into LS_PCMC00,ls_YPTS00,LS_CSL000,LS_ZHL000 from YF_MZCFMX where CFID00=to_number(mx.YJJZID); if LS_PCMC00 is not null then select max(YBPCBM),max(ZQCS00) into ls_YPPL00,ls_ZQCS00 from BM_PC0000 where PCMC00=LS_PCMC00; end if; if (ls_YPTS00 is null) and (LS_CSL000>0) and (ls_ZQCS00 is not null) then ls_YPTS00 := least(ceil(mx.XMSL00*LS_ZHL000/(LS_CSL000*ls_ZQCS00)),90); end if; end if; */ insert into SF_FYMX00_TEMP00(JZDH00, --结算单号 MXID00, --门诊病人费用明细流水号 DJH000, --单据号 MZH000, --门诊号,本处指挂号号 BRID00, --病人ID号 XM0000, --病人姓名 BRFB00, --病人费别 YBLB00, --医保类别 医保分中心类别 XMBH00, --医疗收费编码或药品编码 SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 XMMC00, --项目名称 XMGG00, --项目规格 XMDW00, --单位 XMDJ00, --单价 XMSL00, --数量 HJJE00, --合计金额 QZFJE0, --全自付金额 ZFJE00, --自费金额 GFJE00, --公费金额,减免时用 JZJE00, --记帐金额 JMJE00, --减免金额 JMBZ00, --减免标志 CZRQ00, --记账日期 CZSJ00, --记账时间 ZFBL00, --自付比例 YJDJH0, --医技单号/处方号 YJJZID, --医技/处方计价明细ID YBDJH0, --医保接口返回的费用单据流水号 SFLSCF, --是否零散处方 0直接记账1处方2医技 KDYS00, CZY000, --操作员 YPTS00, --用药天数 YPPL00, --频次编码 YPYL00) --计量数量+单位 values (Pjzdh00, --结算单号 mx.MXID00, --门诊病人费用明细流水号 mx.DJH000, --单据号 mx.MZH000, --门诊号,本处指挂号号 mx.BRID00, --病人ID号 mx.XM0000, --病人姓名 --Vfbbh00, mx.BRFB00, --Vyblb00, mx.YBLB00, mx.XMBH00, --医疗收费编码或药品编码 mx.SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 mx.XMMC00, --项目名称 mx.XMGG00, --项目规格 mx.XMDW00, --单位 mx.XMDJ00, --单价 mx.XMSL00, --数量 mx.HJJE00, --合计金额 mx.QZFJE0, --全自付金额 mx.ZFJE00, --自费金额 mx.GFJE00, --公费金额,减免时用 mx.JZJE00, --记帐金额 mx.JMJE00, --减免金额 mx.JMBZ00, --减免标志 to_char(sysdate,'yyyymmdd'), to_char(sysdate,'hh24:mi:ss'), mx.ZFBL00, --自付比例 mx.YJDJH0, --医技单号/处方号 mx.YJJZID, --医技/处方计价明细ID '0', --医保接口返回的费用单据流水号 Pdjlb00, --mx.KDYS00, ls_JZYS00, Pczy000, ls_YPTS00, --用药天数 ls_YPPL00, --频次编码 ls_YPYL00 --计量数量+单位 ); end loop; elsif Pdjlb00 in ('3','4') then select nvl(max(JZDH00),0),nvl(min(MZH000),'0') into ls_JZDH00,ls_GHH000 from SF_FYMX00 where YJDJH0=Pcflsh0 and ((SFLB00='3' and Pdjlb00='3') or (SFLB00<>'3' and Pdjlb00='4')); -- and JZDH00+0>0 and rownum=1 if ls_JZDH00>0 then Verrmsg:='费用已经结算,无法记账'||Pcflsh0; raise Ecustom; end if; select nvl(min(THBZ00),'1'),nvl(min(JZYS00),0) into ls_THBZ00,ls_JZYS00 from SF_BRXXB0 where GHH000=ls_GHH000; -- if ls_THBZ00 = '0' then -- Verrmsg:='挂号('||ls_GHH000||')已被退,无法记账'; -- raise Ecustom; -- end if; --药事服务费医保接口医生字段处理 if Pdjlb00 = '4' then select nvl(max(KDYS00), -1) into ls_JZYS00 from YJ_YW0000 where YJDJH0=Pcflsh0 and FJDJBZ='8'; end if; for mx in C_YJCFFY loop ls_YPTS00:=mx.YPTS00; --用药天数 ls_YPPL00:=mx.YPPL00; --频次编码 ls_YPYL00:=mx.YPYL00; --计量数量+单位 if ls_JZYS00 <= 0 then if nvl(mx.KDYS00,0)>0 then ls_JZYS00:=mx.KDYS00; else ls_JZYS00:=mx.GHY000; end if; end if; /* if nvl(mx.GHY000,0)<=0 or ls_JZYS00<>-1 then ls_JZYS00:=mx.KDYS00; else ls_JZYS00:=mx.GHY000; end if; */ insert into SF_FYMX00_TEMP00(JZDH00, --结算单号 MXID00, --门诊病人费用明细流水号 DJH000, --单据号 MZH000, --门诊号,本处指挂号号 BRID00, --病人ID号 XM0000, --病人姓名 BRFB00, --病人费别 YBLB00, --医保类别 医保分中心类别 XMBH00, --医疗收费编码或药品编码 SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 XMMC00, --项目名称 XMGG00, --项目规格 XMDW00, --单位 XMDJ00, --单价 XMSL00, --数量 HJJE00, --合计金额 QZFJE0, --全自付金额 ZFJE00, --自费金额 GFJE00, --公费金额,减免时用 JZJE00, --记帐金额 JMJE00, --减免金额 JMBZ00, --减免标志 CZRQ00, --记账日期 CZSJ00, --记账时间 ZFBL00, --自付比例 YJDJH0, --医技单号/处方号 YJJZID, --医技/处方计价明细ID YBDJH0, --医保接口返回的费用单据流水号 SFLSCF, --是否零散处方 0直接记账1处方2医技 KDYS00, CZY000, --操作员 YPTS00, --用药天数 YPPL00, --频次编码 YPYL00) --计量数量+单位 values (Pjzdh00, --结算单号 mx.MXID00, --门诊病人费用明细流水号 mx.DJH000, --单据号 mx.MZH000, --门诊号,本处指挂号号 mx.BRID00, --病人ID号 mx.XM0000, --病人姓名 --Vfbbh00, mx.BRFB00, --Vyblb00, mx.YBLB00, mx.XMBH00, --医疗收费编码或药品编码 mx.SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 mx.XMMC00, --项目名称 mx.XMGG00, --项目规格 mx.XMDW00, --单位 mx.XMDJ00, --单价 mx.XMSL00, --数量 mx.HJJE00, --合计金额 mx.QZFJE0, --全自付金额 mx.ZFJE00, --自费金额 mx.GFJE00, --公费金额,减免时用 mx.JZJE00, --记帐金额 mx.JMJE00, --减免金额 mx.JMBZ00, --减免标志 to_char(sysdate,'yyyymmdd'), to_char(sysdate,'hh24:mi:ss'), mx.ZFBL00, --自付比例 mx.YJDJH0, --医技单号/处方号 mx.YJJZID, --医技/处方计价明细ID '0', --医保接口返回的费用单据流水号 Pdjlb00, ls_JZYS00, Pczy000, ls_YPTS00, --用药天数 ls_YPPL00, --频次编码 ls_YPYL00 --计量数量+单位 ); end loop; elsif Pdjlb00 in ('5') then for mx in C_GHF000 loop ls_YPTS00:=mx.YPTS00; --用药天数 ls_YPPL00:=mx.YPPL00; --频次编码 ls_YPYL00:=mx.YPYL00; --计量数量+单位 if nvl(mx.KDYS00,0)>0 then ls_JZYS00:=mx.KDYS00; else ls_JZYS00:=mx.GHY000; end if; /* if nvl(mx.GHY000,0)<=0 then ls_JZYS00:=mx.KDYS00; else ls_JZYS00:=mx.GHY000; end if; */ insert into SF_FYMX00_TEMP00(JZDH00, --结算单号 MXID00, --门诊病人费用明细流水号 DJH000, --单据号 MZH000, --门诊号,本处指挂号号 BRID00, --病人ID号 XM0000, --病人姓名 BRFB00, --病人费别 YBLB00, --医保类别 医保分中心类别 XMBH00, --医疗收费编码或药品编码 SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 XMMC00, --项目名称 XMGG00, --项目规格 XMDW00, --单位 XMDJ00, --单价 XMSL00, --数量 HJJE00, --合计金额 QZFJE0, --全自付金额 ZFJE00, --自费金额 GFJE00, --公费金额,减免时用 JZJE00, --记帐金额 JMJE00, --减免金额 JMBZ00, --减免标志 CZRQ00, --记账日期 CZSJ00, --记账时间 ZFBL00, --自付比例 YJDJH0, --医技单号/处方号 YJJZID, --医技/处方计价明细ID YBDJH0, --医保接口返回的费用单据流水号 SFLSCF, --是否零散处方 0直接记账1处方2医技 KDYS00, CZY000, --操作员 YPTS00, --用药天数 YPPL00, --频次编码 YPYL00, --计量数量+单位 xtgzh0) values (Pjzdh00, --结算单号 mx.MXID00, --门诊病人费用明细流水号 mx.DJH000, --单据号 mx.MZH000, --门诊号,本处指挂号号 mx.BRID00, --病人ID号 mx.XM0000, --病人姓名 mx.BRFB00, mx.YBLB00, mx.XMBH00, --医疗收费编码或药品编码 mx.SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 mx.XMMC00, --项目名称 mx.XMGG00, --项目规格 mx.XMDW00, --单位 mx.XMDJ00, --单价 mx.XMSL00, --数量 mx.HJJE00, --合计金额 mx.QZFJE0, --全自付金额 mx.ZFJE00, --自费金额 mx.GFJE00, --公费金额,减免时用 mx.JZJE00, --记帐金额 mx.JMJE00, --减免金额 mx.JMBZ00, --减免标志 to_char(sysdate,'yyyymmdd'), to_char(sysdate,'hh24:mi:ss'), mx.ZFBL00, --自付比例 mx.YJDJH0, --医技单号/处方号 mx.YJJZID, --医技/处方计价明细ID '0', --医保接口返回的费用单据流水号 Pdjlb00, ls_JZYS00, Pczy000, ls_YPTS00, --用药天数 ls_YPPL00, --频次编码 ls_YPYL00, --计量数量+单位 '-1' ); end loop; end if; if Pcommit='Y' then commit; end if; exception when no_data_found then raise_application_error(-20001,substrb('数据没有找到!*'||sqlerrm||','||Vparams,1,120)); when Ecustom then raise_application_error(-20010,substrb(Verrmsg||'!*'||Vparams,1,120)); when others then raise_application_error(-20266,substrb(nvl(sqlerrm, '原因不明出错')||'!*'||Vparams,1,120)); end; / --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%