CREATE OR REPLACE PROCEDURE sp_fco_planilla_integrada_pens(pch_compania  char,
                                                           psi_anio      number,
                                                           pti_mes       number,
                                                           pch_sucursal  char, -- Nunca llega NULL    
                                                           pbi_regenerar number) is
  /*************************************************************************/
  -- Modulo Fiscal Colombiano 2.0 ADAM V3    
  -- Descripcion: Planilla Integrada para Pensionados
  -- Autor: Manuel Daza    
  -- Fecha: Noviembre 2006
  -- Revisiones:    
  /*************************************************************************/

  -- Declaración de Variables    
  v_rec_detalle fco_pi_pens_rt2%ROWTYPE;
  v_TrabCur     pkg_fco_gral.TrabCurTyp;
  v_TrabRec     pkg_fco_gral.PensRecTyp;

  vch_periodo      char(6);
  vch_agt_TDO      char(10); -- Tipo Documento    
  vch_agt_AFP      char(10); -- Fondo de Pensiones    
  vch_agt_EPS      char(10); -- EPS    
  vch_var_SaT      char(2); -- Variable Salud Trabajador    
  vch_var_SaE      char(2); -- Variable Salud Empleador    
  vch_var_PeT      char(2); -- Variable Pensión Trabajador    
  vch_var_PeE      char(2); -- Variable Pensión Empleador    
  vch_var_CCF      char(2); -- Variable Aporte CCF    
  vdc_tar_EPS      number(6, 5); -- Tarifa Salud    
  vdc_tar_AFP      number(6, 5); -- Tarifa Pensión    
  vdc_tar_CCF      number(6, 5); -- Tarifa Cajas de Compensación    
  vch_agr_SUS      char(3); -- /* Suspensión */    
  vch_agr_AVP_T    char(3); -- /* Aporte Voluntario (al Fondo de Pensiones) - Trabajador */     
  vch_agr_AFP_IBC  char(3); -- /* IBC Pensión */     
  vch_agr_AFP_Cot  char(3); -- /* Cotización a Pensión */    
  vch_agr_FSP      char(3); -- /* Fondo de Solidaridad Pensional */    
  vch_agr_VNR      char(3); -- /* Valor No Retenido por Aportes Voluntarios */    
  vch_agr_EPS_IBC  char(3); -- /* IBC Salud */     
  vch_agr_EPS_Cot  char(3); -- /* Cotización a Salud */    
  vch_agr_UPC      char(3); -- /* UPC Adicional */    
  vch_agr_CCF_IBC  char(3); -- /* IBC Cajas de Compensación */     
  vti_CCF_tipo     number; -- /* Tipo de Dato Cotizacion CCF */    
  vch_CCF_Cot      char(5); -- /* Cotización a la Caja de Compensación Familiar */    
  vsi_empleados    number; -- /* Total de Empleados */    
  vdc_nomina       number(12); -- /* Total Nómina */    
  vti_orden        number; -- /* Orden de los Trabajadores en el medio */    
  vsi_random       number; -- /* Valor randómico para manejo de procesos simultáneos */    
  vsi_handicap     number; -- /* Por si se suceden procesos simultáneos */    
  vsi_secuencia    number; -- /* Se utiliza en la parte "fantasmal" */    
  vti_tipo_IBC_CCF number; -- /* Tipo de dato que almacena el IBC de la CCF, concepto o agrupación */   
  vsi_IBC_CCF      number; -- /* Concepto que guarda el IBC para la CCF */  
  vti_FSP_Sol_tipo number; -- /* Tipo de parametro para la subcuenta de solidaridad del FSP */ --JCL.Jul.18/06--
  vch_FSP_Sol      char(5); -- /* Concepto para la subcuenta de solidaridad del FSP */  --JCL.Jun.02/06--  
  vti_FSP_Sub_tipo number; -- /* Tipo de parametro para la subcuenta de subsistencia del FSP */ --JCL.Jul.18/06--
  vch_FSP_Sub      char(5); -- /* Concepto para la subcuenta de subsistencia del FSP */  --JCL.Jun.02/06--  
  vch_FSP_Sol_vlr  char(5); -- concepto o agrupacion
  vch_FSP_Sub_vlr  char(5); -- concepto o agrupacion
  vch_tipodoc      fco_integrada_det.tipo_documento%type;
  vch_agt_CCF      char(10); -- Caja de Compensación
  vch_cod_ccf      fco_administradoras.codigo%type; -- /* Codigo de CCF */
  vch_des_ccf      datos_agr_trab.descripcion%type; -- /* Descripcion de CCF */
  vch_dep_ccf      fco_administradoras.departamento%type; -- /* Departamento de CCF */
  vch_mun_ccf      fco_administradoras.municipio%type; -- /* Municipio de CCF */
  dummy            number(1) := 0;
  vn_tiempo        number;
  vc_tiempo        varchar2(2);

BEGIN
  -- Llenado de variables generales    
  vch_periodo := RTRIM(psi_anio) || ltrim(to_char(pti_mes, '00'));

  -- Recuperación de Parámetros    
  vch_agr_AFP_IBC := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 2);
  vch_agr_AFP_Cot := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 3);
  vch_agr_FSP     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 4);
  vch_agr_EPS_Cot := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 5);
  vch_agr_AVP_T   := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 13);
  vch_agr_UPC     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 15);
  vch_agr_EPS_IBC := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 16);
  vch_agr_SUS     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 18);
  vch_agr_VNR     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 19);
  vch_agt_EPS     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 21);
  vch_agt_AFP     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 22);
  vch_var_SaT     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 25);
  vch_var_SaE     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 26);
  vch_var_PeT     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 27);
  vch_var_PeE     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 28);
  vch_var_ccf     := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 9);
  vch_agt_CCF     := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 1);
  vch_agt_TDO     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 29);
  if vch_agt_TDO is null then
    vch_tipodoc := 'CC';
  end if;

  if isnumeric(fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 37)) = 1 then
    vti_orden := nvl(fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 37),
                     2);
  else
    vti_orden := 2;
  end if;

  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'autoliq',
                     45,
                     vti_FSP_Sol_tipo,
                     vch_FSP_Sol);
  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'autoliq',
                     46,
                     vti_FSP_Sub_tipo,
                     vch_FSP_Sub);

  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'parafiscal',
                     2,
                     vti_CCF_tipo,
                     vch_CCF_Cot);

  SELECT tipo
    INTO vti_tipo_IBC_CCF
    FROM vw_fdt_parametros
   WHERE pais = 'COL'
     AND compania = pch_compania
     AND parametro = 'parafiscal'
     AND secuencia = 06;
  IF NVL(vti_tipo_IBC_CCF, 2) <> 0 THEN
    sp_fco_get_fdtparm('COL',
                       pch_compania,
                       'parafiscal',
                       6,
                       vti_tipo_IBC_CCF,
                       vch_agr_CCF_IBC);
  ELSE
    sp_fco_get_fdtparm('COL',
                       pch_compania,
                       'parafiscal',
                       6,
                       vti_tipo_IBC_CCF,
                       vsi_IBC_CCF);
  END IF;

  -- Recuperación de Tarifas o Porcentajes    
  pkg_fco_gral.vdc_tar_EPS := NVL(fn_fco_var_nom(pch_compania,
                                                 vch_var_SaT,
                                                 0) +
                                  fn_fco_var_nom(pch_compania,
                                                 vch_var_SaE,
                                                 0),
                                  0.12);
  pkg_fco_gral.vdc_tar_AFP := NVL(fn_fco_var_nom(pch_compania,
                                                 vch_var_PeT,
                                                 0) +
                                  fn_fco_var_nom(pch_compania,
                                                 vch_var_PeE,
                                                 0),
                                  0.155);
  pkg_fco_gral.vdc_tar_CCF := NVL(fn_fco_var_nom(pch_compania,
                                                 vch_var_CCF,
                                                 0),
                                  0.04);

  -- Proceso Principal        
  begin
    dummy := 1;
    select 1
      into dummy
      from fco_pi_pens_rt1
     where compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND sucursal = nvl(pch_sucursal, ' ');
  exception
    when no_data_found then
      dummy := 0;
  end;
  /*  sp_fco_deltot(pch_compania, psi_anio, pti_mes, pch_sucursal);*/
  IF pbi_regenerar = 1 OR dummy = 0 THEN
  
    /*1*/
    /* Borrar datos de procesos anteriores */
    DELETE fco_pi_pens_rt2
     WHERE compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND (sucursal = pch_sucursal OR sucursal = ' ');
  
    DELETE fco_pi_pens_rt1
     WHERE compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND (sucursal = pch_sucursal OR sucursal = ' ');
  
    /* Registro Tipo 1. Parte 1: DATOS GENERALES DEL APORTANTE */
    sp_fco_inscab_pens(pch_compania,
                       psi_anio,
                       pti_mes,
                       nvl(pch_sucursal, ' '));
    commit;
  
    /* Registro Tipo 2: LIQUIDACION DETALLADA DE APORTES */
    /* RT2 Parte 1.  Seleccion de Trabajadores */
    execute immediate 'drop sequence eseq';
    execute immediate 'CREATE SEQUENCE eseq
        minvalue 1
        start with 1
        increment by 1
        order';
  
    sp_fco_Cur_pens(v_TrabCur,
                    vti_orden,
                    pch_compania,
                    pch_sucursal,
                    vch_periodo);
  
    loop
      fetch v_TrabCur
        into v_TrabRec;
      exit when v_TrabCur%notfound;
    
      /* Datos Basicos por Trabajador */
      v_rec_detalle.compania   := v_TrabRec.compania;
      v_rec_detalle.anio       := psi_anio;
      v_rec_detalle.mes        := pti_mes;
      v_rec_detalle.sucursal   := nvl(pch_sucursal, ' ');
      v_rec_detalle.trabajador := v_TrabRec.trabajador;
      v_rec_detalle.eliminada  := 0;
      v_rec_detalle.pens_ape1  := substr(fn_ape1(v_TrabRec.nombre), 1, 20);
      v_rec_detalle.pens_ape2  := nvl(substr(fn_ape2(v_TrabRec.nombre),
                                             1,
                                             30),
                                      ' ');
      v_rec_detalle.pens_nom1  := substr(fn_nom1(v_TrabRec.nombre), 1, 20);
      v_rec_detalle.pens_nom2  := nvl(substr(fn_nom2(v_TrabRec.nombre),
                                             1,
                                             30),
                                      ' ');
      if vch_agt_TDO is not null then
        v_rec_detalle.pens_tdoc := NVL(substr(fn_fco_get_dato_agr(pch_compania,
                                                                  v_TrabRec.trabajador,
                                                                  vch_agt_TDO),
                                              1,
                                              2),
                                       'CC');
        if v_rec_detalle.pens_tdoc is null or v_rec_detalle.pens_tdoc = ' ' then
          v_rec_detalle.pens_tdoc := 'CC';
        end if;
      else
        v_rec_detalle.pens_tdoc := vch_tipodoc;
      end if;
    
      if substr(NVL(v_rec_detalle.pens_tdoc, 'CC'), 1, 2) = 'NI' then
        if length(trim(v_TrabRec.registro_fiscal)) > 1 then
          v_rec_detalle.pens_id := substr(substr(trim(v_TrabRec.registro_fiscal),
                                                 1,
                                                 length(trim(v_TrabRec.registro_fiscal)) - 1),
                                          1,
                                          16);
        else
          v_rec_detalle.pens_id := null;
        end if;
      else
        v_rec_detalle.pens_id := substr(trim(v_TrabRec.clave_unica), 1, 16);
      end if;
    
      sp_fco_get_datos_ccf(v_TrabRec.compania,
                           v_TrabRec.trabajador,
                           vch_agt_CCF,
                           vch_cod_ccf,
                           vch_des_ccf,
                           vch_dep_ccf,
                           vch_mun_ccf);
    
      sp_fco_get_datos_pens(v_TrabRec.compania,
                            v_TrabRec.trabajador,
                            v_rec_detalle.tipo_pension,
                            v_rec_detalle.pension_compartida,
                            v_rec_detalle.caus_ape1,
                            v_rec_detalle.caus_ape2,
                            v_rec_detalle.caus_nom1,
                            v_rec_detalle.caus_nom2,
                            v_rec_detalle.caus_tdoc,
                            v_rec_detalle.caus_id,
                            v_rec_detalle.tipo_pensionado,
                            v_rec_detalle.residente_en_exterior,
                            v_rec_detalle.situa_en_exterior,
                            v_rec_detalle.departamento,
                            v_rec_detalle.municipio);
    
      v_rec_detalle.departamento := nvl(v_rec_detalle.departamento,
                                        nvl(vch_dep_ccf, ' '));
      v_rec_detalle.municipio    := nvl(v_rec_detalle.municipio,
                                        nvl(vch_mun_ccf, ' '));
    
      if to_char(v_TrabRec.fecha_ingreso, 'YYYYMM') = vch_periodo then
        v_rec_detalle.nov_ing := 'X';
      else
        v_rec_detalle.nov_ing := ' ';
      end if;
    
      if to_char(v_TrabRec.fecha_baja, 'YYYYMM') = vch_periodo then
        v_rec_detalle.nov_ret := 'X';
      else
        v_rec_detalle.nov_ret := ' ';
      end if;
    
      v_rec_detalle.nov_tde := ' ';
      v_rec_detalle.nov_tae := ' ';
      v_rec_detalle.nov_tdp := ' ';
      v_rec_detalle.nov_tap := ' ';
      v_rec_detalle.nov_vsp := ' ';
      v_rec_detalle.nov_sus := ' ';
    
      v_rec_detalle.cod_afp      := fn_fco_get_dato_agr(v_TrabRec.compania,
                                                        v_TrabRec.trabajador,
                                                        vch_agt_AFP);
      v_rec_detalle.cod_afp_tras := ' ';
      v_rec_detalle.cod_eps      := fn_fco_get_dato_agr(v_TrabRec.compania,
                                                        v_TrabRec.trabajador,
                                                        vch_agt_EPS);
      v_rec_detalle.cod_eps_tras := ' ';
      v_rec_detalle.cod_ccf      := nvl(vch_cod_ccf, ' ');
      v_rec_detalle.dias_afp     := 0;
      v_rec_detalle.dias_eps     := 0;
      v_rec_detalle.dias_fsp     := 30;
      v_rec_detalle.dias_ccf     := 0;
      v_rec_detalle.mesada       := fn_fco_salario(v_TrabRec.compania,
                                                   v_TrabRec.trabajador,
                                                   vch_periodo);
      v_rec_detalle.mesada       := Round((v_rec_detalle.mesada - 1) / 1000,
                                          0) * 1000;
    
      v_rec_detalle.tarifa_afp := pkg_fco_gral.vdc_tar_AFP;
    
      if v_rec_detalle.tipo_pension in (1, 2, 3, 5, 6, 8, 9, 10, 12, 13) then
        v_rec_detalle.tarifa_afp := 0;
      end if;
    
      v_rec_detalle.aporte_afp        := 0;
      v_rec_detalle.voluntario_afp    := 0;
      v_rec_detalle.aporte_total_afp  := 0;
      v_rec_detalle.aporte_fsp_sol    := 0;
      v_rec_detalle.aporte_fsp_sub    := 0;
      v_rec_detalle.valor_no_retenido := 0;
      v_rec_detalle.tarifa_fsp        := 0;
      v_rec_detalle.tarifa_eps        := pkg_fco_gral.vdc_tar_EPS;
      v_rec_detalle.aporte_eps        := 0;
      v_rec_detalle.upc_adicional     := 0;
      
      v_rec_detalle.tarifa_ccf        := pkg_fco_gral.vdc_tar_CCF;
      if v_rec_detalle.cod_ccf = ' ' then
        v_rec_detalle.tarifa_ccf := 0;
      end if;
    
      v_rec_detalle.aporte_ccf := 0;
      v_rec_detalle.origen     := 1;
    
      /* Novedad TDE. INGRESO A ESTA EPS (TRASLADO DESDE OTRA EPS) */
      v_rec_detalle.nov_tde := fn_fco_ing_eps(v_TrabRec.compania,
                                              v_TrabRec.trabajador,
                                              vch_periodo);
    
      /* Novedad TAE. RETIRO DE ESTA EPS (TRASLADO A OTRA EPS) */
      v_rec_detalle.nov_tae := fn_fco_ret_eps(v_TrabRec.compania,
                                              v_TrabRec.trabajador,
                                              vch_periodo);
    
      /* Novedad TDP. INGRESO A ESTA AFP (TRASLADO DESDE OTRA AFP) */
      v_rec_detalle.nov_tdp := fn_fco_ing_afp(v_TrabRec.compania,
                                              v_TrabRec.trabajador,
                                              vch_periodo);
    
      /* Novedad TAP. RETIRO DE ESTA AFP (TRASLADO A OTRA AFP) */
      v_rec_detalle.nov_tap := fn_fco_ret_afp(v_TrabRec.compania,
                                              v_TrabRec.trabajador,
                                              vch_periodo);
    
      /* Novedad VSP. VARIACION PERMANENTE DE SALARIO */
      v_rec_detalle.nov_vsp := fn_fco_vsp(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_periodo);
    
      /* Novedad SUS. SUSPENSIÓN TEMPORAL CONTRATO Y LICENCIA NO REMUNERADA */
      v_rec_detalle.nov_sus := fn_fco_nov(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_SUS,
                                          psi_anio,
                                          pti_mes,
                                          'tiempo');
    
      /* Nueva AFP (Fondo de Pensiones al cual se traslada) */
      v_rec_detalle.cod_afp_tras := fn_fco_tras_adm(v_TrabRec.compania,
                                                    v_TrabRec.trabajador,
                                                    vch_periodo,
                                                    'AFP');
    
      /* Nueva EPS (EPS al cual se traslada) */
      v_rec_detalle.cod_eps_tras := nvl(fn_fco_tras_adm(v_TrabRec.compania,
                                                        v_TrabRec.trabajador,
                                                        vch_periodo,
                                                        'EPS'),
                                        ' ');
    
      /* Días cotizados a pensión e IBC */
      vn_tiempo := fn_fco_nov_var(v_TrabRec.compania,
                                  v_TrabRec.trabajador,
                                  vch_agr_AFP_IBC,
                                  psi_anio,
                                  pti_mes,
                                  'tiempo');
      if vn_tiempo > 30 then
        vn_tiempo := 30;
      elsif vn_tiempo < 0 then
        vn_tiempo := 0;
      else
        null;
      end if;
      v_rec_detalle.dias_afp := vn_tiempo;
    
      /* Días cotizados a salud e IBC */
      v_rec_detalle.dias_eps := fn_fco_nov_var(v_TrabRec.compania,
                                               v_TrabRec.trabajador,
                                               vch_agr_EPS_IBC,
                                               psi_anio,
                                               pti_mes,
                                               'tiempo');
    
      /* IBC caja de compensación */
      if nvl(vti_tipo_IBC_CCF, 2) <> 0 then
        v_rec_detalle.dias_ccf := fn_fco_nov_var(v_TrabRec.compania,
                                                 v_TrabRec.trabajador,
                                                 vch_agr_CCF_IBC,
                                                 psi_anio,
                                                 pti_mes,
                                                 'tiempo');
        if v_rec_detalle.dias_ccf > 30 then
          v_rec_detalle.dias_ccf := 30;
        end if;
      else
        v_rec_detalle.dias_ccf := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                     v_TrabRec.trabajador,
                                                     vsi_IBC_CCF,
                                                     psi_anio,
                                                     pti_mes,
                                                     'tiempo');
      end if;
    
      /* Aporte o Cotización Obligatoria a Pensión */
      v_rec_detalle.aporte_afp := fn_fco_nov_var(v_TrabRec.compania,
                                                 v_TrabRec.trabajador,
                                                 vch_agr_AFP_Cot,
                                                 psi_anio,
                                                 pti_mes,
                                                 'importe');
/*      v_rec_detalle.aporte_afp := Round((v_rec_detalle.aporte_afp - 1) / 100,
                                        0) * 100;
*/    
      /* Aporte Voluntario del Trabajador a Pensión */
      v_rec_detalle.voluntario_afp := fn_fco_nov_var(v_TrabRec.compania,
                                                     v_TrabRec.trabajador,
                                                     vch_agr_AVP_T,
                                                     psi_anio,
                                                     pti_mes,
                                                     'importe');
    
      /* Aporte Fondo de Solidaridad Pensional */
      /* Aporte Fondo de Solidaridad Pensional subcuenta de Solidaridad */ --JCL.Jul.18/06--  
      IF vti_FSP_Sol_tipo = 0 THEN
        --Es un concepto
        IF ISNUMERIC(vch_FSP_Sol) = 1 THEN
          v_rec_detalle.aporte_FSP_sol := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                             v_TrabRec.trabajador,
                                                             vch_FSP_Sol,
                                                             psi_anio,
                                                             pti_mes,
                                                             'importe');
        END IF;
      ELSE
        --Es una Agrupación de Conceptos
        v_rec_detalle.aporte_FSP_sol := fn_fco_nov_var(v_TrabRec.compania,
                                                       v_TrabRec.trabajador,
                                                       vch_FSP_Sol,
                                                       psi_anio,
                                                       pti_mes,
                                                       'importe');
      END IF;
    
      /* Aporte Fondo de Solidaridad Pensional subcuenta de Subsistencia */ --JCL.Jul.18/06--    
      IF vti_FSP_Sub_tipo = 0 THEN
        --Es un concepto
        IF ISNUMERIC(vch_FSP_Sub) = 1 THEN
          v_rec_detalle.aporte_FSP_sub := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                             v_TrabRec.trabajador,
                                                             vch_FSP_Sub,
                                                             psi_anio,
                                                             pti_mes,
                                                             'importe');
        END IF;
      ELSE
        --Es una Agrupación de Conceptos
        v_rec_detalle.aporte_FSP_sub := fn_fco_nov_var(v_TrabRec.compania,
                                                       v_TrabRec.trabajador,
                                                       vch_FSP_Sub,
                                                       psi_anio,
                                                       pti_mes,
                                                       'importe');
      END IF;
    
      /* Valor no retenido por aportes voluntarios */
      v_rec_detalle.valor_no_retenido := fn_fco_nov_var(v_TrabRec.compania,
                                                        v_TrabRec.trabajador,
                                                        vch_agr_VNR,
                                                        psi_anio,
                                                        pti_mes,
                                                        'importe');
    
      /* Aporte o Cotización Obligatoria a Salud */
      v_rec_detalle.aporte_eps := fn_fco_nov_var(v_TrabRec.compania,
                                                 v_TrabRec.trabajador,
                                                 vch_agr_EPS_Cot,
                                                 psi_anio,
                                                 pti_mes,
                                                 'importe');
/*      v_rec_detalle.aporte_eps := Round((v_rec_detalle.aporte_eps - 1) / 100,
                                        0) * 100;
*/    
      /* UPC Adicional */
      v_rec_detalle.upc_adicional := fn_fco_nov_var(v_TrabRec.compania,
                                                    v_TrabRec.trabajador,
                                                    vch_agr_UPC,
                                                    psi_anio,
                                                    pti_mes,
                                                    'importe');
    
      /* Aporte o Cotización Obligatoria a la Caja de Compensación Familiar */
      if vti_CCF_tipo = 0 then
        if isnumeric(vch_CCF_Cot) = 1 then
          v_rec_detalle.aporte_ccf := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                         v_TrabRec.trabajador,
                                                         vch_CCF_Cot,
                                                         psi_anio,
                                                         pti_mes,
                                                         'importe');
        end if;
      else
        v_rec_detalle.aporte_ccf := fn_fco_nov_var(v_TrabRec.compania,
                                                   v_TrabRec.trabajador,
                                                   vch_CCF_Cot,
                                                   psi_anio,
                                                   pti_mes,
                                                   'importe');
      end if;
    
      /* Tarifa de FSP */
      if v_rec_detalle.aporte_FSP_sol + v_rec_detalle.aporte_FSP_sub +
         v_rec_detalle.mesada > 0 then
        v_rec_detalle.tarifa_FSP := v_rec_detalle.aporte_FSP_sol +
                                    v_rec_detalle.aporte_FSP_sub;
      else
        v_rec_detalle.tarifa_FSP := 0;
      end if;
    
      /* Redondeos (IBC al múltiplo de mil más cercano, Aportes al múltiplo de cien más cercano) */
/*      v_rec_detalle.aporte_AFP     := Round((v_rec_detalle.aporte_AFP - 1) / 100,
                                            0) * 100;
      v_rec_detalle.voluntario_AFP := Round((v_rec_detalle.voluntario_AFP - 1) / 100,
                                            0) * 100;
      v_rec_detalle.aporte_FSP_sol := Round((v_rec_detalle.aporte_FSP_sol - 1) / 100,
                                            0) * 100;
      v_rec_detalle.aporte_FSP_sub := Round((v_rec_detalle.aporte_FSP_sub - 1) / 100,
                                            0) * 100;
      v_rec_detalle.aporte_EPS     := Round((v_rec_detalle.aporte_EPS - 1) / 100,
                                            0) * 100;
*/    

      if v_rec_detalle.aporte_eps + v_rec_detalle.aporte_afp +
         v_rec_detalle.aporte_ccf = 0 then
        goto siguiente;
      end if;

      -- Siguiente secuencia
      select to_char(eseq.nextval, '00000')
        into v_rec_detalle.secuencia
        from dual;
    
      insert into fco_pi_pens_rt2 values v_rec_detalle;

      <<siguiente>>
      commit;
    end loop;
    close v_TrabCur;
  
    /* TOTAL DE LA NOMINA */
    SELECT SUM(nvl(mesada, 0))
      into vdc_nomina
      FROM fco_pi_pens_rt2
     WHERE compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND nvl(sucursal, ' ') = nvl(pch_sucursal, ' ');
  
    UPDATE fco_pi_pens_rt1
       SET valor_nomina = nvl(vdc_nomina, 0)
     WHERE compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND nvl(sucursal, ' ') = nvl(pch_sucursal, ' ');
  
/*    DELETE fco_pi_pens_rt2
     WHERE compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND nvl(sucursal, ' ') = nvl(pch_sucursal, ' ')
       AND aporte_EPS + aporte_AFP + aporte_CCF = 0;
*/  
    /* TOTAL DE EMPLEADOS */
    SELECT COUNT(*)
      into vsi_empleados
      FROM fco_pi_pens_rt2
     WHERE compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND nvl(sucursal, ' ') = nvl(pch_sucursal, ' ');
  
    UPDATE fco_pi_pens_rt1
       SET nro_pensionados = nvl(vsi_empleados, 0)
     WHERE compania = pch_compania
       AND anio = psi_anio
       AND mes = pti_mes
       AND nvl(sucursal, ' ') = nvl(pch_sucursal, ' ');
  
  END IF; /*1*/
END sp_fco_planilla_integrada_pens;
/
