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情况。for MZSF9-20180731-002 -- pwt 2018.08.30 把ZFFSBZ插入收费费用明细临时表; for MZSF9-20180724-001 -- qks 2018.12.23 厦门医保接口费用明细新增发送字段; for MZSF9-20181213-002 -- qks 2019.02.12 处理当Pdjlb00='0',存在YJJZID为0的迁移数据; for MZSF9-20190201-002 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(30); --用药天数 ls_YPPL00 varchar2(30); --频次编码 ls_YPYL00 varchar2(60); --计量数量+单位 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; --结算单号 ls_ZFFSBZ SF_FYMX00.ZFFSBZ%type; --自费发送标志:N否,Y是 ls_CFHAO0 YF_MZCF00.CFLSH0%type; --医院唯一处方号 ls_JX0000 BM_YPJX00.YBFSBM%type; --剂型 ls_DCYYDW YF_MZCFMX.JLDW00%type; --单次用药单位 ls_QYZL00 YF_MZCFMX.YPZSL0%type; --取药总量 ls_QYZLDW YF_MZCFMX.CFDW00%type; --取药总量单位 ls_YLTS00 YF_MZCFMX.YYSJ00%type; --药量天数 ls_GYTJ00 BM_YPYF00.YBFSBM%type; --给药途径 cs_XMYBJK XT_XTCS00.VALUE0%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, --医保频次编码 Trim(to_char(a.CSL000,'99990.99'))||a.JLDW00 as YPYL00, --计量数量+计量单位 0 XDCFID, --协定处方ID a.CSL000,a.PCMC00,a.ZHL000,a.ZFFSBZ, C.CFLSH0 as CFHAO0, --医院唯一处方号 (select YBFSBM from BM_YPJX00 aa where aa.LBBH00=b.LBBH00 and aa.JXBH00=b.JXBH00 and rownum=1) as JX0000, --剂型=BM_YPJX00.YBFSBM trim(A.JLDW00) as DCYYDW, --单次用药单位 Trim(to_char(A.YPZSL0,'99990.99')) as QYZL00, --取药总量; trim(A.CFDW00) as QYZLDW, --取药总量单位 Trim(to_char(A.YYSJ00,'99990.99')) as YLTS00, --药量天数 (select YBFSBM from BM_YPYF00 aa where aa.YPYFMC=a.YPYFMC and rownum=1) as GYTJ00 --给药途径 =BM_YPYF00.YBFSBM 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, --医保频次编码 Trim(to_char(c.YPSL00,'99990.99'))||c.YPDW00 as YPYL00, --计量数量+计量单位 C.MXID00 XDCFID, --协定处方ID a.CSL000,a.PCMC00,a.ZHL000,a.ZFFSBZ, a.CFLSH0 as CFHAO0, --医院唯一处方号 (select YBFSBM from BM_YPJX00 aa where aa.LBBH00=b.LBBH00 and aa.JXBH00=b.JXBH00 and rownum=1) as JX0000, --剂型=BM_YPJX00.YBFSBM trim(A.JLDW00) as DCYYDW, --单次用药单位 Trim(to_char(A.YPZSL0,'99990.99')) as QYZL00, --取药总量; trim(A.CFDW00) as QYZLDW, --取药总量单位 Trim(to_char(A.YYSJ00,'99990.99')) as YLTS00, --药量天数 (select YBFSBM from BM_YPYF00 aa where aa.YPYFMC=a.YPYFMC and rownum=1) as GYTJ00 --给药途径 =BM_YPYF00.YBFSBM 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, --医保频次编码 Trim(to_char(a.SFCS00*a.SL0000,'99990.99'))||b.DW0000 as YPYL00, --计量数量+计量单位 'N' ZFFSBZ, '*' as CFHAO0, --医院唯一处方号 '*' as JX0000, --剂型=BM_YPJX00.YBFSBM '*' as DCYYDW, --单次用药单位 '1' as QYZL00, --取药总量; '*' as QYZLDW, --取药总量单位 '1' as YLTS00, --药量天数 '*' as GYTJ00 --给药途径 =BM_YPYF00.YBFSBM 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, --医保频次编码 Trim(to_char(a.XMSL00,'99990.99'))||a.XMDW00 as YPYL00, --计量数量+计量单位 a.GHY000,a.BRFB00,a.YBLB00,a.ZFFSBZ 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, --医保频次编码 Trim(to_char(a.XMSL00,'99990.99'))||a.XMDW00 as YPYL00, --计量数量+计量单位 a.GHY000,a.BRFB00,a.YBLB00,a.ZFFSBZ 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, --医保频次编码 Trim(to_char(a.XMSL00,'99990.99'))||a.XMDW00 as YPYL00, --计量数量+计量单位 a.GHY000,a.BRFB00,a.YBLB00,a.ZFFSBZ, '*' as CFHAO0, --医院唯一处方号 '*' as JX0000, --剂型=BM_YPJX00.YBFSBM '*' as DCYYDW, --单次用药单位 '1' as QYZL00, --取药总量; '*' as QYZLDW, --取药总量单位 '1' as YLTS00, --药量天数 '*' as GYTJ00 --给药途径 =BM_YPYF00.YBFSBM 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; --是否厦门医保接口 select nvl(trim(max(VALUE0)),'N') into cs_XMYBJK from XT_XTCS00 where NAME00 = 'SF_SFXMYBJK'; 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; --计量数量+单位 ls_ZFFSBZ:=mx.ZFFSBZ; --自费发送标志:N否,Y是 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, --计量数量+单位 ZFFSBZ, --自费发送标志:N否,Y是 CFHAO0, --医院唯一处方号'; JX0000, --剂型'; DCYYDW, --单次用药单位'; QYZL00, --取药总量'; QYZLDW, --取药总量单位'; YLTS00, --药量天数'; GYTJ00 --给药途径'; ) 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, --计量数量+单位 ls_ZFFSBZ, --自费发送标志:N否,Y是 mx.CFHAO0, --医院唯一处方号'; mx.JX0000, --剂型'; mx.DCYYDW, --单次用药单位'; mx.QYZL00, --取药总量'; mx.QYZLDW, --取药总量单位'; mx.YLTS00, --药量天数'; mx.GYTJ00 --给药途径'; ); 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; --用药天数 --厦门医保接口 if cs_XMYBJK='Y' then ls_YPPL00 := '无'; --频次编码 ls_YPYL00 := '无'; --计量数量+单位 else ls_YPPL00:=mx.YPPL00; --频次编码 ls_YPYL00:=mx.YPYL00; --计量数量+单位 end if; ls_ZFFSBZ:=mx.ZFFSBZ; --自费发送标志:N否,Y是 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, --计量数量+单位 ZFFSBZ, --自费发送标志:N否,Y是 CFHAO0, --医院唯一处方号'; JX0000, --剂型'; DCYYDW, --单次用药单位'; QYZL00, --取药总量'; QYZLDW, --取药总量单位'; YLTS00, --药量天数'; GYTJ00 --给药途径'; ) 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, --计量数量+单位 ls_ZFFSBZ, --自费发送标志:N否,Y是 mx.CFHAO0, --医院唯一处方号'; mx.JX0000, --剂型'; mx.DCYYDW, --单次用药单位'; mx.QYZL00, --取药总量'; mx.QYZLDW, --取药总量单位'; mx.YLTS00, --药量天数'; mx.GYTJ00 --给药途径'; ); 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; --计量数量+单位 ls_ZFFSBZ:=mx.ZFFSBZ; --自费发送标志:N否,Y是 --2018.12.23 医保接口费用明细新增发送字段; if mx.SFLB00='3' and mx.YJJZID<>'0' then --2019.02.12 增加条件 and mx.YJJZID<>'0' select a.CFLSH0 as CFHAO0, --医院唯一处方号 (select YBFSBM from BM_YPJX00 aa where aa.LBBH00=b.LBBH00 and aa.JXBH00=b.JXBH00 and rownum=1) as JX0000, --剂型=BM_YPJX00.YBFSBM trim(A.JLDW00) as DCYYDW, --单次用药单位 Trim(to_char(A.YPZSL0,'99990.99')) as QYZL00, --取药总量; trim(A.CFDW00) as QYZLDW, --取药总量单位 Trim(to_char(A.YYSJ00,'99990.99')) as YLTS00, --药量天数 (select YBFSBM from BM_YPYF00 aa where aa.YPYFMC=a.YPYFMC and rownum=1) as GYTJ00, --给药途径 a.CSL000 --次数量(剂量单位) into ls_CFHAO0, --医院唯一处方号 ls_JX0000, --剂型 ls_DCYYDW, --单次用药单位 ls_QYZL00, --取药总量 ls_QYZLDW, --取药总量单位 ls_YLTS00, --药量天数 ls_GYTJ00, --给药途径 LS_CSL000 --次数量(剂量单位) from YF_MZCFMX a,BM_YD0000 b where a.CFID00=mx.YJJZID and a.YPNM00=b.YPNM00; else ls_CFHAO0:= '*'; --医院唯一处方号 ls_JX0000:= '*'; --剂型 ls_DCYYDW:= '*'; --单次用药单位 ls_QYZL00:= '1'; --取药总量 ls_QYZLDW:= '*'; --取药总量单位 ls_YLTS00:= '1'; --药量天数 ls_GYTJ00:= '*'; --给药途径 end if; if mx.SFLB00='3' then ls_YPYL00 := to_char(LS_CSL000)||ls_DCYYDW; elsif cs_XMYBJK='Y' then --厦门地区非药品 ls_YPYL00 := '无'; ls_YPPL00 := '无'; end if; --如果没有取到就诊医生,改为如果取有开单医生,优先按开单医生取 if ls_JZYS00 <=0 then if mx.KDYS00 >0 then ls_JZYS00:=mx.KDYS00; else ls_JZYS00:=mx.GHY000; 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, --计量数量+单位 ZFFSBZ, --自费发送标志:N否,Y是 CFHAO0, --医院唯一处方号'; JX0000, --剂型'; DCYYDW, --单次用药单位'; QYZL00, --取药总量'; QYZLDW, --取药总量单位'; YLTS00, --药量天数'; GYTJ00 --给药途径'; ) 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, --计量数量+单位 ls_ZFFSBZ, --自费发送标志:N否,Y是 ls_CFHAO0, --医院唯一处方号 ls_JX0000, --剂型 ls_DCYYDW, --单次用药单位 ls_QYZL00, --取药总量 ls_QYZLDW, --取药总量单位 ls_YLTS00, --药量天数 ls_GYTJ00 --给药途径 ); 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; --计量数量+单位 ls_ZFFSBZ:=mx.ZFFSBZ; --自费发送标志:N否,Y是 --2018.12.23 医保接口费用明细新增发送字段; if mx.SFLB00='3' then select a.CFLSH0 as CFHAO0, --医院唯一处方号 (select YBFSBM from BM_YPJX00 aa where aa.LBBH00=b.LBBH00 and aa.JXBH00=b.JXBH00 and rownum=1) as JX0000, --剂型=BM_YPJX00.YBFSBM trim(A.JLDW00) as DCYYDW, --单次用药单位 Trim(to_char(A.YPZSL0,'99990.99')) as QYZL00, --取药总量; trim(A.CFDW00) as QYZLDW, --取药总量单位 Trim(to_char(A.YYSJ00,'99990.99')) as YLTS00, --药量天数 (select YBFSBM from BM_YPYF00 aa where aa.YPYFMC=a.YPYFMC and rownum=1) as GYTJ00, --给药途径 a.CSL000 --次数量(剂量单位) into ls_CFHAO0, --医院唯一处方号 ls_JX0000, --剂型 ls_DCYYDW, --单次用药单位 ls_QYZL00, --取药总量 ls_QYZLDW, --取药总量单位 ls_YLTS00, --药量天数 ls_GYTJ00, --给药途径 LS_CSL000 --次数量(剂量单位) from YF_MZCFMX a,BM_YD0000 b where a.CFID00=mx.YJJZID and a.YPNM00=b.YPNM00; else ls_CFHAO0:= '*'; --医院唯一处方号 ls_JX0000:= '*'; --剂型 ls_DCYYDW:= '*'; --单次用药单位 ls_QYZL00:= '1'; --取药总量 ls_QYZLDW:= '*'; --取药总量单位 ls_YLTS00:= '1'; --药量天数 ls_GYTJ00:= '*'; --给药途径 end if; if mx.SFLB00='3' then ls_YPYL00 := to_char(LS_CSL000)||ls_DCYYDW; --剂量数量+单位 elsif cs_XMYBJK='Y' then ls_YPYL00 := '无'; ls_YPPL00 := '无'; end if; 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, --计量数量+单位 ZFFSBZ, --自费发送标志:N否,Y是 CFHAO0, --医院唯一处方号'; JX0000, --剂型'; DCYYDW, --单次用药单位'; QYZL00, --取药总量'; QYZLDW, --取药总量单位'; YLTS00, --药量天数'; GYTJ00 --给药途径'; ) 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, --计量数量+单位 ls_ZFFSBZ, --自费发送标志:N否,Y是 ls_CFHAO0, --医院唯一处方号 ls_JX0000, --剂型 ls_DCYYDW, --单次用药单位 ls_QYZL00, --取药总量 ls_QYZLDW, --取药总量单位 ls_YLTS00, --药量天数 ls_GYTJ00 --给药途径 ); end loop; elsif Pdjlb00 in ('5') then for mx in C_GHF000 loop ls_YPTS00:=mx.YPTS00; --用药天数 --厦门医保接口 if cs_XMYBJK='Y' then ls_YPPL00 := '无'; --频次编码 ls_YPYL00 := '无'; --计量数量+单位 else ls_YPPL00:=mx.YPPL00; --频次编码 ls_YPYL00:=mx.YPYL00; --计量数量+单位 end if; ls_ZFFSBZ:=mx.ZFFSBZ; --自费发送标志:N否,Y是 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, ZFFSBZ, --自费发送标志:N否,Y是 CFHAO0, --医院唯一处方号'; JX0000, --剂型'; DCYYDW, --单次用药单位'; QYZL00, --取药总量'; QYZLDW, --取药总量单位'; YLTS00, --药量天数'; GYTJ00 --给药途径'; ) 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', ls_ZFFSBZ, --自费发送标志:N否,Y是 mx.CFHAO0, --医院唯一处方号'; mx.JX0000, --剂型'; mx.DCYYDW, --单次用药单位'; mx.QYZL00, --取药总量'; mx.QYZLDW, --取药总量单位'; mx.YLTS00, --药量天数'; mx.GYTJ00 --给药途径'; ); 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;