create or replace procedure sp_fco_pi_tot_riesgos(p_compania in char,
                                                       p_anio     in number,
                                                       p_mes      in number,
                                                       p_sucursal in char,
                                                       p_tipo_planilla in char,
                                                       p_periodo  in char) is
  v_rec_rt05 fco_integrada_rt05%rowtype;
  v_sec number := 0;
  vdc_vlr_inc number(13,2);
  vvc_nro_inc varchar2(10);
  vvc_nro varchar2(15);
  vdc_vlr number(10);
  vdc_otros number(10);
  vvc_nro_rad varchar2(10);
  vdc_sf number(10);

  cursor c1(c_compania char, c_anio number, c_mes number, c_sucursal char, c_tipo_planilla char, c_periodo char) return fco_integrada_rt05%ROWTYPE is
    select cab.compania,
           cab.anio,
           cab.mes,
           nvl(cab.sucursal, ' ') sucursal,
           TRIM(cab.tipo_planilla),
           TRIM(cab.nueva_arp) cod_arp,
           1 secuencia,
           TRIM(substr(adi.nit_arp, 1, 9)) nit,
           substr(rtrim(adi.nit_arp), -1) dv,
           sum(nvl(aporte_arp, 0)) suma_aportes,
           --max(nvl(aut.numero, ' ')) nro_aut, -- JCL Agosto 29/06
           ' ' nro_aut,
           --sum(nvl(aut.valor_total, 0)) incapacidades, -- JCL Agosto 29/06
           0 incapacidades,
           0 otros_riesgos,
           null neto_aportes,
           0 Dias_mora,
           0 int_mora,
           null subtotal_aportes,
           ' ' nro_radicacion,
           0 saldo_favor,
           null total_pagar,
           sum(aporte_arp) * 0.01 fsrp,
           count(*) total_afiliados,
           0 origen
      from fco_integrada_cab  cab,
           fco_integrada_det  det,
           fco_cias_datos_adi adi,
           fco_autorizaciones aut
     where cab.compania = det.compania
       and cab.anio = det.anio
       and cab.mes = det.mes
       and (cab.sucursal = det.sucursal or c_sucursal is null)
       and cab.tipo_planilla = det.tipo_planilla
       and cab.compania = adi.compania(+)
       and aut.compania(+) = cab.compania
       and aut.sucursal(+) = cab.sucursal
       and aut.tipo_planilla(+) = cab.tipo_planilla
       and aut.periodo(+) = p_periodo
       and aut.tipo_entidad(+) = 1
       and cab.compania = c_compania
       and cab.anio = c_anio
       and cab.mes = c_mes
       and (cab.sucursal = c_sucursal or c_sucursal is null)
       and cab.tipo_planilla = c_tipo_planilla
     group by cab.compania,
              cab.anio,
              cab.mes,
              cab.sucursal,
              cab.tipo_planilla,
              cab.nueva_arp,
              adi.nit_arp;

begin

  open c1(p_compania, p_anio, p_mes, p_sucursal, p_tipo_planilla, p_periodo);
  loop
    fetch c1
      into v_rec_rt05;
    exit when c1%notfound;
    v_sec := v_sec + 1;
    v_rec_rt05.secuencia := v_sec;

    begin
        select max(numero), sum(nvl(valor_total, 0))
        into vvc_nro_inc, vdc_vlr_inc
        from fco_autorizaciones
        where compania = p_compania
        and to_number(substr(periodo,1,4)) = p_anio
        and to_number(substr(periodo,5,2)) = p_mes
        and (sucursal = p_sucursal or p_sucursal is null)
        and tipo_planilla = p_tipo_planilla
        and tipo_entidad = 1;
    exception
        when others then vvc_nro_inc:=' '; vdc_vlr_inc := 0;
    end;

    if vdc_vlr_inc > 0 then
       v_rec_rt05.nro_aut := vvc_nro_inc;
       v_rec_rt05.incapacidades := vdc_vlr_inc;
    end if;

   begin
   SELECT nro_aut, incapacidades, otros_riesgos,
   nro_radicacion, saldo_favor
   into vvc_nro, vdc_vlr, vdc_otros,
   vvc_nro_rad, vdc_sf
   FROM fco_autorizaciones_tot_arp
   WHERE compania = p_compania
   AND anio = p_anio
   AND mes = p_mes
   AND (sucursal = p_sucursal OR p_sucursal = ' ' OR p_sucursal IS NULL)
   AND tipo_planilla = p_tipo_planilla;
   exception when others then vvc_nro := '';
   end;

    if v_rec_rt05.nro_aut = ' ' then
       v_rec_rt05.nro_aut := nvl(vvc_nro, ' ');
    end if;
    if v_rec_rt05.nro_radicacion = ' ' then
       v_rec_rt05.nro_radicacion := nvl(vvc_nro_rad, ' ');
    end if;
    v_rec_rt05.incapacidades := nvl(v_rec_rt05.incapacidades, 0) + nvl(vdc_vlr, 0);
    v_rec_rt05.otros_riesgos := nvl(v_rec_rt05.otros_riesgos, 0) + nvl(vdc_otros, 0);
    v_rec_rt05.saldo_favor := nvl(v_rec_rt05.saldo_favor, 0) + nvl(vdc_sf, 0);
    v_rec_rt05.neto_aportes :=  v_rec_rt05.suma_aportes - v_rec_rt05.incapacidades - v_rec_rt05.otros_riesgos;
    v_rec_rt05.subtotal_aportes := v_rec_rt05.neto_aportes + v_rec_rt05.int_mora;
    v_rec_rt05.total_pagar := v_rec_rt05.subtotal_aportes - v_rec_rt05.saldo_favor;
    insert into fco_integrada_rt05 values v_rec_rt05;

  end loop;
  close c1;

end sp_fco_pi_tot_riesgos;
/
