create or replace procedure SP_ZY_YBFSJG
(
    ad_ZYID00     in  number,                 --住院ID
    ad_QSDJH0     in  number,                 --起始单据号
    ad_ZZDJH0     in  number,                 --截止单据号
    as_YBFSDH     in  char,                   --日清单日期
    ad_GRZFE0     in  number,                 --医保个人自付金额                  grzfe0
    ad_GRZHZF     in  number,                 --医保个人账户支付                  zhzfe0  
    ad_TCJJZF     in  number,                 --医保统筹基金支付                  jjzfe0
    ad_SBGRZH     in  number,                 --商保个人账户支付                  dbzhzf
    ad_SBTCJJ     in  number,                 --商保统筹基金支付                  dbjjzf
    ad_HJJE00     in  number,                 --费用合计金额                      bcbxf0
    ad_DBGRZF     in  number default 0,       --大病保险(商业保险)个人现金支付额  dbgrzf
    ad_GSJJZF     in  number default 0,       --工伤统筹基金支付                  gsjjzf
    ad_GSZFJE     in  number default 0,       --工伤个人自付(个人按比例自付部分)  gszfje
    ad_FGSFY0     in  number default 0,       --非工伤费用                        fgsfy0
    ad_BJJJZF     in  number default 0,       --保健基金支付                      bjjjzf 
    ad_GWYBZ0     in  number default 0,       --公务员补助                        gwybz0
    ad_SYBXZF     in  number default 0,       --商业保险支付                      sybxzf
    ad_FYBFY0     in  number default 0,       --非医保金额                        fybfy0
    ad_YLZFJE     in  number default 0,       --乙类药品自负金额                  ylzfje
    ad_CFDXJE     in  number default 0,       --超封顶线金额                      cfdxje
    ad_SBZFE0     in  number default 0,       --商保基金支付                      sbzfe0
    ad_BJZFE0     in  number default 0,       --保健基金支付                      bjzfe0
    ad_GRZHYE     in  number default 0,       --医保个人账户余额
    ad_YPWQZF     in  number default 0,       --药品完全支付
    ad_YPBFZF     in  number default 0,       --药品部分支付
    ad_XMWQZF     in  number default 0,       --项目完全支付
    ad_XMBFZF     in  number default 0,       --项目部分支付
    as_BJJBIE     in  char,                   --保健级别
    as_YBJZRQ     in  char,                   --医保记账日期
    as_YBJZSJ     in  char,                   --医保记账时间
    as_TSBZBH     in  char,                   --医保特殊病种编号
    ad_CFXMS0     in  number  default 0,      --本次住院处方项目总数
    ad_YEXM00     in  char    default '全部', --婴儿姓名
    ad_CZY000     in  number,                 --操作员
    ad_CZYKS0     in  number  default -1,     --操作员科室
    od_YBZFJE     out number,                 --个人自付合计
    od_YBZHZF     out number,                 --医保账户支付合计
    od_YBJJZF     out number,                 --医保基金支付合计
    od_YBQTZF     out number,                 --医保其他支付合计
    as_YHMSG0     out varchar,                --存储过程提示的错误信息
    as_SYSMSG     out varchar,                --系统提示的错误信息
    ad_YBYL01     in  number  default 0,      --民政救助总额
    ad_YBYL02     in  number  default 0,      --计生救助总额
    ad_YBYL03     in  number  default 0,      --残联救助总额
    ad_YBYL04     in  number  default 0,      --单病种限额               
    ad_YBYL05     in  number  default 0,      --医院支付(医保没返回)     
    ad_YBYL06     in  number  default 0,      --低保基金支付金额         
    ad_YBYL07     in  number  default 0,      --一般诊疗费补偿金额       
    ad_YBYL08     in  number  default 0,      --一般诊疗费费个人支付金额 
    ad_YBYL09     in  number  default 0,      --特殊门诊起付线累计       
    ad_YBYL10     in  number  default 0,      --特殊门诊基金累计         
    ad_YBYL11     in  number  default 0,      --健康账户支付             
    ad_YBYL12     in  number  default 0,      --健康账户余额             
    ad_YBYL13     in  number  default 0,      --共济账户支付        
    ad_YBYL14     in  number  default 0,      --共济账户余额
    ad_YBYL15     in  number  default 0,      --健康账户支付医保费用
    ad_YBYL16     in  number  default 0,      --健康账户支付非医保费用
    ad_YBYL17     in  number  default 0,      --医保减免金额
    ad_YBYL18     in  number  default 0,      --民政(医疗救助基金)补助金额
    ad_YBYL19     in  number  default 0,      --超医保上限金额(非医保返回)
    ad_YBYL20     in  number  default 0,      --个人账户支付起付段(三明地区商业保险接口)
    ad_YBYL21     in  number  default 0,      --个人现金支付起付段(三明地区商业保险接口)
    ad_YBYL22     in  number  default 0,      --血费报销金额(血费系统)
    ad_YBYL23     in  number  default 0,      --医保结算金额误差（总费用-定额）
    ad_YBYL24     in  number  default 0,      --大额医疗费用报销金额
    ad_YBYL25     in  number  default 0,      --单病种补偿金额(定额-总费用)
    ad_YBYL26     in  number  default 0,      --大病补充补偿金额
    ad_YBYL27     in  number  default 0,      --保健医保统筹支付(已包含在统筹中)
    ad_YBYL28     in  number  default 0,      --择日住院门诊总费用
    ad_YBYL29     in  number  default 0,      --择日住院门诊范围内费用
    ad_YBYL30     in  number  default 0,      --择日住院门诊统筹(医保未返回)
    ad_YBYL31     in  number  default 0,      --个人支付金额(医保返回)
    ad_YBYL32     in  number  default 0,      --大病补偿个人支付差额(医保返回)    
    ad_YBYL33     in  number  default 0,      --超标床位费用(付费单病种写入)
    ad_YBYL34     in  number  default 0,      --除外耗材费用(付费单病种写入)
    ad_YBYL35     in  number  default 0,      --医保返回的BCBXF0(付费单病种写入)
    ad_YBYL36     in  number  default 0,      --累计封顶金额
    ad_YBYL37     in  number  default 0,      --普通门诊累计
    ad_YBYL38     in  number  default 0,      --特殊门诊累计    
    ad_YBYL39     in  number  default 0,      --CDRG个人支付金额drgzfe(医保返回)
    ad_YBYL40     in  number  default 0,      --大病本次补偿金额dbbcbcje(医保返回)
    ad_YBYL41     in  number  default 0,      --B账户支付金额bkzfe0(医保返回)
    ad_YBYL42     in  number  default 0,      --B账户余额bkzhye(医保返回)
    ad_YBYL43     in  number  default 0,      --可报高值耗材费(C-DRG)
    ad_YBYL44     in  number  default 0,      --超标床位费(C-DRG)
    ad_YBYL45     in  number  default 0,      --超标高值耗材费(C-DRG)    
    ad_YBYL46     in  number  default 0,      --jzfp01 精准扶贫第一道补助金额   
    ad_YBYL47     in  number  default 0,      --jzfp02 精准扶贫第二道补助金额
    ad_YBYL48     in  number  default 0,      --jzfp03 综合救助    
    ad_YBYL49     in  number  default 0,      --医保预留
    ad_YBYL50     in  number  default 0,      --csjz00 慈善救助金额              
    ad_YBYL51     in  number  default 0,      --jzfpje 医保返回的精准扶贫金额金额
    ad_YBYL52     in  number  default 0,      --akc227,医疗费总金额=个人现金支付金额+个人账户支付金额+基金支付总额                                              
    ad_YBYL53     in  number  default 0,      --bkc102,基金支付总额=统筹基金支付+商保基金支付+公务员医疗补助+精准扶贫医疗叠加+医疗救助基金+其他基金支付+企业补充
    ad_YBYL54     in  number  default 0,      --bkc040,个人现金支付金额（实付现金）                                                                             
    ad_YBYL55     in  number  default 0,      --bkc041,个人账户支付金额                                                                                         
    ad_YBYL56     in  number  default 0,      --bkc045,其中：统筹基金支付                                                                                       
    ad_YBYL57     in  number  default 0,      --bkc059,其中：公务员医疗补助(bkc059=bkc059_1+bkc059_2+bkc059_3)                                                  
    ad_YBYL58     in  number  default 0,      --bkc052,其中：商保基金支付（大额补充）                                                                           
    ad_YBYL59     in  number  default 0,      --bkc062,其中：精准扶贫医疗叠加                                                                                   
    ad_YBYL60     in  number  default 0,      --bkc060,其中：医疗救助基金                                                                                       
    ad_YBYL61     in  number  default 0,      --ake173,其中：其他基金支付                                                                                       
    ad_YBYL62     in  number  default 0,      --ake026,其中：企业补充                                                                                           
    ad_YBYL63     in  number  default 0,      --bkc011,个人自费（非医保费用）                                                                                   
    ad_YBYL64     in  number  default 0,      --akc087,个人账户余额                                                                                             
    ad_YBYL65     in  number  default 0,      --aka151,统筹支付医保费用起付标准                                                                                 
    ad_YBYL66     in  number  default 0,      --aka150,本年度住院次数                                                                                           
    ad_YBYL67     in  number  default 0,      --bkc612,补助基金支付bkc612=bkc052 大病保险基金支付+bkc059公务员医疗补助+bkc062精准扶贫医疗叠加+bkc060医疗救助基金+ake173 其他基金支付+ake026企业补充+bkc061保健基金支付
    ad_YBYL68     in  number  default 0,      --bkc064,产前检查费(医保返回)
    ad_YBYL69     in  number  default 0,      --医保预留
    as_YBSM01     in  char    default null,   --行政区号+区域                          mzxzqh                                      
    as_YBSM02     in  char    default null,   --是否择日住院                           sfzrzy      
    as_YBSM03     in  char    default null,   --年度结算截止日期                       ndjzrq      
    as_YBSM04     in  char    default null,   --血费报销ID(血费系统)                   xfbxid      
    as_YBSM05     in  char    default null,   --单病种登记流水号                       dbzdjlsh    
    as_YBSM06     in  char    default null,   --结算类型-1:自费0:医保1生育2:工伤3:保健 jslxmc      
    as_YBSM07     in  char    default null,   --新生儿费用发送医保返回单据号           djlsh0      
    as_YBSM08     in  char    default null,   --单病种数据拆分费用单据号               ybsm08      
    as_YBSM09     in  char    default null,   --病情编码或CDRG组别bqbm00   
    as_YBSM10     in  char    default null,   --CDRG病例类型jsbllx
    as_YBSM11     in  char    default null,   --CDRG结算ID monitorID
    as_YBSM12     in  char    default null,   --sfjdlk 是否精准扶贫，1-是，0-否
    as_YBSM13     in  char    default null,   --sfjzfp 是否精准扶贫，Y-是，N-否    
    as_YBSM14     in  char    default null,   --医保说明
    as_YBSM15     in  char    default null,   --医保说明
    as_YBSM16     in  char    default null,   --医保说明
    as_YBSM17     in  char    default null,   --医保说明
    as_YBSM18     in  char    default null,   --医保说明
    as_YBSM19     in  char    default null,   --医保接口ID <FK>ZY_YBJKRZ.YBJKID</FK>
    as_YBSM20     in  char    default null,   --医保说明
    as_YBSM21     in  char    default null,   --医保说明
    as_YBSM22     in  char    default null,   --医保说明
    as_YBSM23     in  char    default null,   --医保说明
    as_YBSM24     in  char    default null,   --医保说明
    as_YBSM25     in  char    default null,   --医保说明
    as_YBSM26     in  char    default null,   --医保说明
    as_YBSM27     in  char    default null,   --医保说明
    as_YBSM28     in  char    default null,   --医保说明
    as_YBSM29     in  char    default null,   --医保说明    
    as_MXLSH0     in  char    default null,   --明细流水号
    ad_ID0000     in  number  default 0   ,   --医保交互中间表ID 
    ad_JSXZID     in  number  default 0       --结算选择ID ZY_JSXZMX.JSXZID   
)
-- MODIFICATION HISTORY
-- Person      Date        Comments
-- ZHR       2009.12.27    增加医保其他字段
-- qks       2010.12.02    增加ad_YBYL01--ad_YBYL13以及ad_BCBXF0,ad_ls_CFXMS0共15个传入参数
-- zhangyc   2011.06.20    增加传入参数ad_YEXM00(婴儿姓名)
-- zhangyc   2011.08.02    去掉commit by ZYSF-20110718-004，以便再取消补交时ZY_BRZHXX金额被提交
-- zhangyc   2011.11.30    单病种结算时写入ZFJE00=医保返回grzfe0 by ZYSF-20111128-001
-- jlg       2013.06.14    去掉修改ZY_BRZHXX.YBYJS0,YBYZF0
-- xuzw      2016.01.12    对增加南平大额医疗费用报销金额 ad_YBYL13 ZYSF9-20160112-003
-- jlg       2016.03.18    处理农合病人单病种个人自付金额 ZYSF9-20160312-001
-- jlg       2016.08.18    增加ZY_YBFS00.YBYL14-->YBYL32字段的写入 ZYSF9-20160816-001
-- jlg       2017.05.25    增加处理在付费单病种下，如果GRZFE0>HJJE00，则多余部分移除到YBYL05字段 ZYSF9-20170524-001
-- jlg       2018.01.04    增加C-DRG结算流程的数据处理 ZYSF9-20180104-001
-- jlg       2018.01.06    增加处理在C-DRG结算流程下，如果GRZFE0>HJJE00，则多余部分移除到YBYL05字段 ZYSF9-20180105-002
-- jlg       2018.03.22    增加入参as_YBSM01~as_YBSM08,处理医保返回mxxzqh记录保存 ZYSF9-20180320-004
-- jlg       2018.04.17    增加南平政和单病种模式下， 如果GRZFE0>HJJE00，则多余部分移除到YBYL05字段 ZYSF9-20180413-002
-- jlg       2018.04.25    增加不包含于统筹基金金额的民政补助金额(MZBZJE)的处理 ZYSF9-20180422-003
-- jlg       2018.04.29    增加DLSBJE 商保支付金额(独立于统筹基金金额) 的处理 ZYSF9-20180425-005
-- jlg       2018.05.04    厦门医保接口按新的返回金额勾稽关系处理共济账户支付金额(gjzhzf) ZYSF9-20180504-002 
-- jlg       2018.05.05    对之前南平大额医疗费用报销金额(ad_YBYL13)错误处理的修改  ZYSF9-20180505-001
-- liwm      2018.05.06    是否精准扶贫医保信息(SFJZFP)添加 for ZYSF9-20180503-001
-- jlg       2018.05.07    对ZY_YBFS00字段进行批量扩展以及对过程入参进行大的改动，以备后续添加之用 ZYSF9-20180507-001
-- jlg       2018.06.19    将原默认公务员补助独立的改为默认包含于统筹基金中；增加独立的公务员补助金额(GWBZJE)的处理 ZYSF9-20180614-005 
-- jlg       2018.09.27    对于南平大额医疗费用报销金额(sbzfje对应ad_YBYL24)的处理（YBBHSB维护54） ZYSF9-20180927-001
-- jlg       2019.12.17    增加as_MXLSH0的传入参数 ZYSF9-20191216-005
-- jlg       2019.12.19    修改如果医保返回的自付金额大于费用合计的情况下的算法 ZYSF9-20191218-003
-- jlg       2019.12.20    处理单病种病人的结账自付金额与医保返回的自付金额的相差问题 ZYSF9-20191220-001
-- jlg       2020.01.03    增加入参ad_ID0000，处理医保病人中途结算时后面有冲销的项目一并结算的问题 ZYSF9-20200103-001
-- jlg       2019.01.08    处理泉州医保，如果YBBHSB有维护16，那么住院系统费用分摊计算有误的问题     ZYSF9-20200107-002
-- jlg       2020.07.23    增加 DLDBJJ 商保统筹基金支付金额(独立于统筹基金金额) 的处理 ZYSF9-20200723-001
-- jlg       2020.07.29    处理泉州地区商保基金支付金额dbjjzf独立计算的问题，住院商保基金支付独立不按YBBHSB=11维护的处理    MZSF9-20200725-002
-- linzetao  2020.09.29    增加判断as_YBFSDH为空时不记录医保发送记录            ZYSF9-20200930-001
-- linzetao  2020.11.09    新医保接口设置独立的公务员补助金额,民政补助金额,独立的商保支付金额,独立的商保统筹基金支付金额,大额医疗费用报销金额置0      ZYSF9-20201109-001
-- linzetao  2020.11.11    增加新医保接口CDRG结算处理   ZYSF9-20201111-004
-- jlg       2020.12.07    增加入参ad_JSXZID（结算选择ID），处理中途结算选择结算的功能 ZYSF9-20201126-001
-- linzetao  2020.12.08    处理CJBTCE产检补退金额=自付金额的差额-产前检查费, 大于0计0, 小于0按实际计    ZYSF9-20201112-005
-- linzetao  2021.11.04    处理解析医保返回报文jjkxlist,kslwInfo列表
as
    ls_CZRQ00    char(8);
    ls_CZSJ00    char(8);
    ls_YBBHSB    IC_YBBRLB.YBBHSB%type;
    ls_YBID00    varchar2(30);
    ls_YBKH00    varchar2(30);
    ls_BRID00    number;
    ls_YEXM00    varchar2(40);               --婴儿姓名
    ls_YBLB00    IC_YBBRLB.YBLB00%type;
    ls_SFXNH0    number;
    ls_DBZJK0    char(1);
    ls_TCJJZF    number(12,2);
    ls_MZBZJE    number(12,2);               --独立的民政补助金额
    ls_DLSBJE    number(12,2);               --独立的商保支付金额
    ls_FFBZBM    ZY_BRXXB0.FFBZBM%type;      --付费单病种编码
    ls_YBYL05    ZY_YBFS00.YBYL05%type;      --医院支付金额
    ls_DBZBM0    ZY_BRXXB0.DBZBM0%type;      --单病种编码
    ls_SFJZFP    ZY_BRXXB0.SFJZFP%type;      --是否精准扶贫
    ls_GWBZJE    number(12,2);               --独立的公务员补助金额
    ls_YBYL24    ZY_JZB000.YBYL24%type;      --大额医疗费用报销金额(sbzfje--YBYL24)
    ls_DLDBJJ    ZY_JZB000.SBTCJJ%type;      --独立的大病基金支付金额
    ls_YBJKID    ZY_YBFS00.YBJKID%type;      --医保接口日志ID 
    ls_TSBZBH    varchar2(50);               --特殊病种编号
    ls_YBSM09    ZY_JZB000.YBSM09%type;      --病情编码或CDRG组别bqbm00
    ls_CJBTCE    ZY_YBFS00.CJBTCE%type;      --产检检查费（bkc064）超出个人自付金额后需补退的差额
    ls_ZXZT00    number(10);                 --执行状态
    ls_ERRMSG    varchar2(200);              --错误信息
    Ecustom      exception;
    ld_YBYL68    number(12,2);               --产前检查费
begin
    if nvl(as_YBFSDH,'0')='0' then
       return;
    end if;
    
    ls_CZRQ00 := to_char(sysdate,'YYYYMMDD');
    ls_CZSJ00 := to_char(sysdate,'HH24:MI:SS');
    if trim(ad_YEXM00) in ('全部','母亲') then
       ls_YEXM00:='';
    else
       ls_YEXM00:=ad_YEXM00;
    end if;
    ls_YBJKID := nvl(as_YBSM19,'0'); 
    
    SP_ZY_NEWYBJK_JKFHJX(
        ad_ZYID00,                --输入:住院ID
        0,                --输入:结账单号
        ls_YBJKID,                --输入:医保接口ID
        '3,4',                    --输入:解析类型(同时解析传1,2) 1:fplist 2:mzlist
        'N',                      --输入:是否提交事务 Y:提交 N:不提交
        ls_ZXZT00,                --输出:执行状态 0:失败 1：成功
        ls_ERRMSG                 --输出:错误信息
    );
    if ls_ZXZT00=0 then 
        as_YHMSG0:=ls_ERRMSG;
        as_SYSMSG:=ls_ERRMSG;
        raise Ecustom;
    end if;
    
    ld_YBYL68 := nvl(ad_YBYL68,0);   --取前端传入的产前检查费
    if ld_YBYL68 = 0 then      --产前检查费为0, 则从基金列表中重新获取
      ld_YBYL68 := nvl(SF_ZY_GETYBDATA_NUM(to_number(ls_YBJKID),ad_ZYID00,'jjkxlist','510100','aae187'),0);
    end if;
    
    select trim(c.YBBHSB),trim(b.YBKH00),trim(d.YBID00),b.BRID00,c.SFXNH0,trim(b.FFBZBM),trim(DBZBM0),b.SFJZFP
        into ls_YBBHSB,ls_YBKH00,ls_YBID00,ls_BRID00,ls_SFXNH0,ls_FFBZBM,ls_DBZBM0, ls_SFJZFP
    from  ZY_BRXXB0 b,IC_YBBRLB c,BM_BRXXB0 d
         where b.ZYID00=ad_ZYID00 and c.FBBH00=b.FBBH00 and c.YBLB00=b.YBLB00 and b.BRID00=d.BRID00;

   
    select   decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',31,')),1,ad_YBYL01,0)+  --民政救助                  
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',32,')),1,ad_YBYL02,0)+  --计生救助                  
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',33,')),1,ad_YBYL03,0)+  --残联救助                  
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',34,')),1,ad_YBYL04,0)+  --单病种限额                
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',35,')),1,ad_YBYL05,0)+  --医院支付(医保没返回)      
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',36,')),1,ad_YBYL06,0)+  --低保基金支付金额          
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',37,')),1,ad_YBYL07,0)+  --一般诊疗费补偿金额        
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',38,')),1,ad_YBYL08,0)+  --一般诊疗费费个人支付金额  
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',39,')),1,ad_YBYL09,0)+  --特殊门诊起付线累计        
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',40,')),1,ad_YBYL10,0)+  --特殊门诊基金累计          
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',41,')),1,ad_YBYL11,0)+  --健康账户支付              
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',42,')),1,ad_YBYL12,0)+  --健康账户余额              
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',43,')),1,ad_YBYL13,0)+  --共济账户支付                      
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',10,')),1,ad_SBGRZH,0),  --商保个人账户支付 
           --decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',11,')),1,ad_SBTCJJ,0),  --商保统筹基金支付 
           --decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',13,')),1,ad_SYBXZF,0)+  --商业保险支付
           --decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',16,')),1,ad_GWYBZ0,0),  --以上合计为：医保其他支付
             
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',46,')),1,ad_GWYBZ0,0),  --独立的公务员补助金额               
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',48,')),1,ad_YBYL18,0),  --独立的民政补助金额
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',49,')),1,ad_SYBXZF,0),  --独立的商保支付金额
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',47,')),1,ad_SBTCJJ,0),  --独立的商保统筹基金支付金额
             decode(sign(Instrb(','||trim(ls_YBBHSB)||',',',54,')),1,ad_YBYL24,0)   --大额医疗费用报销金额(原独立于统筹基金支付，现要加到TCJJZF中去)               
         into od_YBQTZF,ls_GWBZJE,ls_MZBZJE,ls_DLSBJE,ls_DLDBJJ,ls_YBYL24 from dual;
    
    --新医保接口统筹已包括所有金额, 独立的公务员补助金额、民政补助金额、独立的商保支付金额、独立的商保统筹基金支付金额、大额医疗费用报销金额置0
    if nvl(ls_YBJKID,0) <> 0 then
      ls_GWBZJE := 0;
      ls_MZBZJE := 0;
      ls_DLSBJE := 0;
      ls_DLDBJJ := 0;
      ls_YBYL24 := 0;
    end if;

    ls_TCJJZF := ad_TCJJZF;
    ls_TCJJZF := ls_TCJJZF + ls_YBYL24;  --如果大额医疗费用报销金额有值，则加回到统筹基金支付金额中 
    od_YBZFJE := ad_HJJE00 - ls_TCJJZF - ad_GRZHZF - od_YBQTZF - ls_MZBZJE - ls_DLSBJE - ls_DLDBJJ - ls_GWBZJE + nvl(ld_YBYL68,0);
    od_YBZHZF := ad_GRZHZF;
    od_YBJJZF := ls_TCJJZF;
    --ls_YBYL05 := ad_YBYL05;  --原来医院支付是在外面计算后传入，现在改为这里直接计算 jlg 
    --对接国家平台后, 统筹已包含产前检查费, 不再单独放入计算医院支付
    begin
      ls_YBYL05 := nvl(ad_HJJE00,0) - nvl(ad_GRZFE0,0) - nvl(ls_TCJJZF,0) - nvl(ad_GRZHZF,0) 
                 - nvl(ls_GWBZJE,0) - nvl(ad_BJZFE0,0) - nvl(ls_MZBZJE,0) - nvl(ls_DLSBJE,0)
                 - nvl(ls_DLDBJJ,0); 
      --ls_YBYL05 := nvl(ad_HJJE00,0) - nvl(ad_GRZFE0,0) - nvl(ls_TCJJZF,0) - nvl(ad_GRZHZF,0) 
      --           - nvl(ls_GWBZJE,0) - nvl(ad_BJZFE0,0) - nvl(ls_MZBZJE,0) - nvl(ls_DLSBJE,0)
      --           - nvl(ls_DLDBJJ,0) + nvl(ld_YBYL68,0); 
    exception
      when others then
        ls_YBYL05:=0;
    end;
    select trim(nvl(max(value0),'N')) into ls_DBZJK0 from XT_XTCS00 where NAME00='ZY_YBDBZJSJK';
    if ((ls_SFXNH0=1) and (ls_DBZJK0='Y')) or (ls_YBYL05<>0) then  --政和农合或者有医院支付的病人  ad_YBYL05-->ls_YBYL05
       od_YBZFJE:=ad_GRZFE0;
    end if;

    --如果是付费单病种病人,C-DRG结算流程,政和单病种病人
    if (ls_FFBZBM is not null) or (as_YBSM10 is not null) or (ls_DBZJK0='Y' and ls_DBZBM0 is not null) then
      --如果个人自付金额大于病种收费金额（医保返回报销金额），则差额部分转为医院支付 (这里不考虑病种超标或除外费用)
      if ad_GRZFE0 > ad_HJJE00 then
        --ls_YBYL05 := ad_GRZFE0 - ad_HJJE00; --医院支付金额
        --od_YBZFJE := ad_HJJE00;             --个人自付额减为报销金额
        ls_YBYL05 := ad_HJJE00 - ad_GRZFE0;   --医院支付金额
        od_YBZFJE := ad_GRZFE0;               --个人自付金额   
      end if;
    end if;

    ls_TSBZBH := as_TSBZBH;
    ls_YBSM09 := as_YBSM09;
    if nvl(ls_YBJKID,0) <> 0 then
      --新医保接口CDRG结算处理
      if instrb(',01,02,03,',','||as_YBSM10||',') > 0 then
        --CDRG结算, as_TSBZBH是CDRG分组信息
        ls_TSBZBH := '';
        ls_YBSM09 := as_TSBZBH;
      end if;
    end if;
    
    --计算产前检查退款差额
    select least(ad_GRZFE0 - ld_YBYL68,0) into ls_CJBTCE from dual;
    
    insert into ZY_YBFS00(BRID00,ZYID00,QSDJH0,ZZDJH0,YBFSDH,FSRQ00,FSSJ00,GRZFE0,GRZHZF,TCJJZF,
                          SBGRZH,SBTCJJ,HJJE00,DBGRZF,GSJJZF,GSZFJE,FGSFY0,BJJJZF,GWYBZ0,SYBXZF,
                          FYBFY0,YLZFJE,CFDXJE,SBZFE0,BJZFE0,GRZHYE,YPWQZF,YPBFZF,XMWQZF,XMBFZF,
                          ZFJE00,GRZHHJ,TCJJHJ,QTZFHJ,CXBZ00,YBID00,YBKH00,BJJBIE,YBJZRQ,YBJZSJ,
                          TSBZBH,CFXMS0,YEXM00,CZY000,MZBZJE,DLSBJE,GWBZJE,YBJKID,MXLSH0,ID0000,
                          YBYL01,YBYL02,YBYL03,YBYL04,YBYL05,YBYL06,YBYL07,YBYL08,YBYL09,YBYL10,
                          YBYL11,YBYL12,YBYL13,YBYL14,YBYL15,YBYL16,YBYL17,YBYL18,YBYL19,YBYL20,
                          YBYL21,YBYL22,YBYL23,YBYL24,YBYL25,YBYL26,YBYL27,YBYL28,YBYL29,YBYL30,
                          YBYL31,YBYL32,YBYL39,YBYL40,YBYL41,YBYL42,YBYL46,YBYL47,YBYL48,YBYL49,                          
                          YBYL50,YBYL51,YBYL52,YBYL53,YBYL54,YBYL55,YBYL56,YBYL57,YBYL58,YBYL59,
                          YBYL60,YBYL61,YBYL62,YBYL63,YBYL64,YBYL65,YBYL66,YBYL67,YBYL68,YBYL69,
                          YBSM01,YBSM02,YBSM03,YBSM04,YBSM05,YBSM06,YBSM07,YBSM08,YBSM09,YBSM10,
                          YBSM11,YBSM12,YBSM13,YBSM14,YBSM15,YBSM16,YBSM17,YBSM18,YBSM19,YBSM20,
                          YBSM21,YBSM22,YBSM23,YBSM24,YBSM25,YBSM26,YBSM27,YBSM28,YBSM29,
                          DLDBJJ,CJBTCE
                          )
                   values(ls_BRID00,ad_ZYID00,ad_QSDJH0,ad_ZZDJH0,as_YBFSDH,ls_CZRQ00,ls_CZSJ00,od_YBZFJE,ad_GRZHZF,ls_TCJJZF,
                          ad_SBGRZH,ad_SBTCJJ,ad_HJJE00,ad_DBGRZF,ad_GSJJZF,ad_GSZFJE,ad_FGSFY0,ad_BJJJZF,ad_GWYBZ0,ad_SYBXZF,
                          ad_FYBFY0,ad_YLZFJE,ad_CFDXJE,ad_SBZFE0,ad_BJZFE0,ad_GRZHYE,ad_YPWQZF,ad_YPBFZF,ad_XMWQZF,ad_XMBFZF,
                          od_YBZFJE,od_YBZHZF,od_YBJJZF,od_YBQTZF,'0',ls_YBID00,ls_YBKH00,as_BJJBIE,as_YBJZRQ,as_YBJZSJ,
                          ls_TSBZBH,ad_CFXMS0,ls_YEXM00,ad_czy000,ls_MZBZJE,ls_DLSBJE,ls_GWBZJE,ls_YBJKID,as_MXLSH0,ad_ID0000,
                          ad_YBYL01,ad_YBYL02,ad_YBYL03,ad_YBYL04,ls_YBYL05,ad_YBYL06,ad_YBYL07,ad_YBYL08,ad_YBYL09,ad_YBYL10,
                          ad_YBYL11,ad_YBYL12,ad_YBYL13,ad_YBYL14,ad_YBYL15,ad_YBYL16,ad_YBYL17,ad_YBYL18,ad_YBYL19,ad_YBYL20,
                          ad_YBYL21,ad_YBYL22,ad_YBYL23,ad_YBYL24,ad_YBYL25,ad_YBYL26,ad_YBYL27,ad_YBYL28,ad_YBYL29,ad_YBYL30,
                          ad_YBYL31,ad_YBYL32,ad_YBYL39,ad_YBYL40,ad_YBYL41,ad_YBYL42,ad_YBYL46,ad_YBYL47,ad_YBYL48,ad_YBYL49,                          
                          ad_YBYL50,ad_YBYL51,ad_YBYL52,ad_YBYL53,ad_YBYL54,ad_YBYL55,ad_YBYL56,ad_YBYL57,ad_YBYL58,ad_YBYL59,
                          ad_YBYL60,ad_YBYL61,ad_YBYL62,ad_YBYL63,ad_YBYL64,ad_YBYL65,ad_YBYL66,ad_YBYL67,ld_YBYL68,ad_YBYL69,
                          as_YBSM01,as_YBSM02,as_YBSM03,as_YBSM04,as_YBSM05,as_YBSM06,as_YBSM07,as_YBSM08,ls_YBSM09,as_YBSM10,
                          as_YBSM11,ls_SFJZFP,as_YBSM13,as_YBSM14,as_YBSM15,as_YBSM16,as_YBSM17,as_YBSM18,as_YBSM19,as_YBSM20,
                          as_YBSM21,as_YBSM22,as_YBSM23,as_YBSM24,as_YBSM25,as_YBSM26,as_YBSM27,as_YBSM28,as_YBSM29,
                          ls_DLDBJJ,ls_CJBTCE                          
                          );


    if ad_YEXM00='全部' then
      update ZY_FYMX00 a set YBFSDH=as_YBFSDH 
        where ZYID00=ad_ZYID00
          and (
              ((ad_JSXZID = 0) and ((DJH000>=ad_QSDJH0 and DJH000<=ad_ZZDJH0) or (a.MXID00 in (select MXID00 from ZY_JSBCMX where ZYID00 = a.ZYID00 and ID0000 = ad_ID0000)))) 
           or ((ad_JSXZID > 0) and a.MXID00 in (select MXID00 from ZY_JSXZMX where ZYID00 = a.ZYID00 and JSXZID = ad_JSXZID))
               )
          and YBFSDH='0';
    elsif ad_YEXM00='母亲' then
      update ZY_FYMX00 a set YBFSDH=as_YBFSDH 
        where ZYID00=ad_ZYID00 
          --and ((DJH000>=ad_QSDJH0 and DJH000<=ad_ZZDJH0) or (a.MXID00 in (select MXID00 from ZY_JSBCMX where ZYID00 = a.ZYID00 and ID0000 = ad_ID0000))) 
          and (
              ((ad_JSXZID = 0) and ((DJH000>=ad_QSDJH0 and DJH000<=ad_ZZDJH0) or (a.MXID00 in (select MXID00 from ZY_JSBCMX where ZYID00 = a.ZYID00 and ID0000 = ad_ID0000)))) 
           or ((ad_JSXZID > 0) and a.MXID00 in (select MXID00 from ZY_JSXZMX where ZYID00 = a.ZYID00 and JSXZID = ad_JSXZID))
               )          
          and YBFSDH='0' and YEXM00 is null;
    else
      update ZY_FYMX00 a set YBFSDH=as_YBFSDH 
        where ZYID00=ad_ZYID00
          --and ((DJH000>=ad_QSDJH0 and DJH000<=ad_ZZDJH0) or (a.MXID00 in (select MXID00 from ZY_JSBCMX where ZYID00 = a.ZYID00 and ID0000 = ad_ID0000))) 
          and (
              ((ad_JSXZID = 0) and ((DJH000>=ad_QSDJH0 and DJH000<=ad_ZZDJH0) or (a.MXID00 in (select MXID00 from ZY_JSBCMX where ZYID00 = a.ZYID00 and ID0000 = ad_ID0000)))) 
           or ((ad_JSXZID > 0) and a.MXID00 in (select MXID00 from ZY_JSXZMX where ZYID00 = a.ZYID00 and JSXZID = ad_JSXZID))
               )          
          and YBFSDH='0' and YEXM00=ad_YEXM00;
    end if;
    
    --下面一行注释吧，上面都已经处理了 
    --update ZY_FYMX00 set YBFSDH=as_YBFSDH where DJH000>=ad_QSDJH0 and DJH000<=ad_ZZDJH0 and ZYID00=ad_ZYID00 and YBFSDH='0';

    update ZY_BRZHXX a set YBZFJE = (select nvl(sum(b.ZFJE00),0) from ZY_YBFS00 b where b.ZYID00=a.ZYID00 and b.CXBZ00='0') where a.ZYID00=ad_ZYID00;
    commit;
    
    --dbgrzf  大病个人支付额，铁保和泉州医保特有,dbgrzf需要病人自付,是指超过基本医疗保险最高封顶线后的费用，目前是让病人先自付后再到医保中心报销，因此这一部份金额也是要医院跟病人收现金的，也就是说，医院与病人清算的范围是grzfe0与dbgrzf，其他的(zhzfe0,jjzfe0)都是与医保中心进行结算。
    --Dbjjzf  大病基金支付额，铁保和泉州医保特有,包含在Jjzfe0基金支付额
    --Dbzhzf  大病账户支付额，铁保和泉州医保特有,包含在Jjzfe0基金支付额
    --sybxzf  商业保险支付, 厦门医保接口增加，不包含在Jjzfe0内，由医保机构支付
    --Gwybz0  公务员补助,泉州地区不包含在Jjzfe0内，由医保机构再支付，其他地区包含在Jjzfe0内

    --bjjjzf  保健基金支付额(厦门医保接口增加,后面取消了 基金支付额（jjzfe0）不包含保健基金支付额（bjjjzf） 病人应支付给医院的费用为医保个人支付额（grzfe0）减去保健基金支付额（bjjjzf）)

    --sbzfe0：商保基金支付，省属三家市属九家医疗机构医院接口增加，包含在Jjzfe0内，
    --bjzfe0：保健基金支付，省属三家市属九家医疗机构医院接口增加，包含在Jjzfe0内。

    --bcyljz  民政救助总额，新农合增加，包含在了基金支付额Jjzfe0内
    --jsjzze  计生救助总额，新农合增加，包含在了基金支付额Jjzfe0内
    --cljzze  残联救助总额，新农合增加，包含在了基金支付额Jjzfe0内
    --Jkzhzf  健康账户支付额 包含于zhzfe0  厦门医保增加
    --非计算字段：Ylzfje乙类药品自付金额,Cfdxje超封顶线金额,Fybfy0非医保费用,Gsjjzf工伤基金支付*,Gszfje工伤个人自付(个人按比例自付部分),Fgsfy0非工伤费用,
    --Bcbxf0 = zhzfe0 + jjzfe0 + grzfe0 + sybxzf；厦门(接口无商保信息)
    --bcbxf0 = zhzfe0 + grzfe0 + jjzfe0 +gwybz0 +dbzhzf + dbgrzf + dbjjzf 泉州
    --bcbxf0 = zhzfe0 + grzfe0 + jjzfe0 +dbzhzf + dbgrzf + dbjjzf 铁保    
    --YBYL05 = grzfe0 - hjje00 (在付费单病种下，如果GRZFE0>HJJE00，则多余部分移除到YBYL05字段)
        
exception
    when Ecustom then
       rollback;
    when others then
            as_YHMSG0:='出错原因未知！请记录此信息并和系统管理员联系！';
            as_SYSMSG:=substr(SQLERRM||'执行存储过程错误:SP_ZY_YBFSJG',1,150);
            rollback;
end;


/



create or replace function SF_ZY_GETYBDATA_NUM
(
  PYBJKID  number,         --医保接口ID
  PZYID00  number,         --住院id
  PJKJDBM  varchar2,       --接口节点编码
  PZFLX00  varchar2,       --支付类型, 见ZY_YBDATA.FUND_PAY_TYPE
  PQZLWMC  varchar2        --取值栏位名称
)
-- MODIFICATION HISTORY
-- Person      Date        Comments
-- linzetao    2021.11.04  created  住院获取医保接口医保数据(jjkxlist,kslwInfo)
return number is
  LS_RESULT  number(12,2);
begin
    
    LS_RESULT := 0;
    begin
    if PZFLX00 is null then
        if lower(PQZLWMC) = 'aae187' then
            select AAE187 into LS_RESULT from ZY_YBDATA where YBJKID=PYBJKID and ZYID00=PZYID00 and JKJDBM=PJKJDBM;
          elsif lower(PQZLWMC) = 'ake173' then
            select AKE173 into LS_RESULT from ZY_YBDATA where YBJKID=PYBJKID and ZYID00=PZYID00 and JKJDBM=PJKJDBM;
          end if;
        else
        if lower(PQZLWMC) = 'aae187' then
            select AAE187 into LS_RESULT from ZY_YBDATA where YBJKID=PYBJKID and ZYID00=PZYID00 and JKJDBM=PJKJDBM and FUND_PAY_TYPE=PZFLX00;
          elsif lower(PQZLWMC) = 'ake173' then
            select AKE173 into LS_RESULT from ZY_YBDATA where YBJKID=PYBJKID and ZYID00=PZYID00 and JKJDBM=PJKJDBM and FUND_PAY_TYPE=PZFLX00;
          end if;
        end if;
  exception
    when others then
      LS_RESULT:=0;
  end;
  return trim(LS_RESULT);
end;
