CREATE OR REPLACE PROCEDURE "SP_FCO_PLANILLA_INTEGRADA"(
 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: Crea tabla base para autoliquidacion de aportes
  --              y genera archivo I Información del Formulario Integrado
  --              según formato de la Resolución 001303 de 2005 (Mayo 11).
  --             Si la tabla está llena se respetan los datos a menos que
  --             se indique lo contrario en el parámetro regenerar.
  -- Autor: Manuel Daza
  -- Fecha: Junio 2006
  -- Revisiones:
  /*************************************************************************/
  -- Declaración de Variables
  v_rec_detalle fco_integrada_det%ROWTYPE;

  v_TrabCur pkg_fco_gral.TrabCurTyp;
  v_TrabRec pkg_fco_gral.TrabRecTyp;

  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_agt_CCF     char(10); -- Caja de Compensación
  vch_agt_MUN     char(10); -- Municipio de Trabajo
  vch_agt_SAI     char(10); -- Agrupación Tipo de Salario -- JCL SGAS Sept-12-06
  vch_dato_SAI    char(10); -- Dato para Salario Integral -- JCL SGAS Sept-12-06
  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
  vch_var_SENA    char(2); -- Variable Aporte SENA
  vch_var_ICBF    char(2); -- Variable Aporte ICBF
  vch_var_ESAP    char(2); -- Variable Aporte ESAP
  vch_var_MEdu    char(2); -- Variable Aporte MinEducación
  vch_agr_VST     char(3); -- /* Variación Transitoria del Salario (Ingresos o Aporte Sin Sueldo Basico)*/
  vch_agr_SLN     char(3); -- /* Suspensión temporal del contrato de trabajo y Licencias No Remuneradas */
  vch_agr_IGE     char(3); -- /* Incapacidad General */
  vch_agr_LMA     char(3); -- /* Licencia Materna */
  vch_agr_VAC     char(3); -- /* Vacaciones */
  vch_agr_AVP_T   char(3); -- /* Aporte Voluntario (al Fondo de Pensiones) - Trabajador */
  vch_agr_AVP_E   char(3); -- /* Aporte Voluntario (al Fondo de Pensiones) - Empleador */
  vch_agr_IRP     char(3); -- /* Incapacidad por Accidente de Trabajo */
  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_ARP_IBC char(3); -- /* IBC Riesgos Profesionales */
  vch_agr_ARP_Cot char(3); -- /* Cotización a Riesgos Profesionales */
  vch_agr_CCF_IBC char(3); -- /* IBC Cajas de Compensación */
  vch_agr_tcot    char(10); -- /* Agr. para tipo de cotizante */
  vch_col_extr    char(10); -- /* Col. para extranjero */ -- ajuste 06-nov-07
  vch_col_reex    char(10); -- /* Col. para residente en el extranjero */ -- ajuste 06-nov-07
  vti_CCF_tipo    number; -- /* Tipo de Dato Cotizacion CCF */
  vch_CCF_Cot     char(5); -- /* Cotización a la Caja de Compensación Familiar */
  vti_SENA_tipo   number; -- /* Tipo de Dato Cotizacion SENA */
  vch_SENA_Cot    char(5); -- /* Cotización al SENA */
  vti_ICBF_tipo   number; -- /* Tipo de Dato Cotizacion ICBF */
  vch_ICBF_Cot    char(5); -- /* Cotización al ICBF */
  vti_ESAP_tipo   number; -- /* Tipo de Dato Cotizacion ESAP */
  vch_ESAP_Cot    char(5); -- /* Cotización al ESAP */
  vti_MEdu_tipo   number; -- /* Tipo de Dato Cotizacion MinEducación */
  vch_Medu_Cot    char(5); -- /* Cotización al MinEducación */
  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 := 0; -- /* 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 */
  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 */
  vch_dato_agr     rel_trab_agr.dato%type;
  dummy            number(1) := 0;
  vn_tiempo        number;
  vc_tiempo        varchar2(2);
  vch_tipodoc      fco_integrada_det.tipo_documento%type;
  --  vsi_sec          number;
  vti_FSP_Sol_tipo number;
  vch_FSP_Sol_vlr char(5); -- concepto o agrupacion
  vti_FSP_Sub_tipo number;
  vch_FSP_Sub_vlr char(5); -- concepto o agrupacion
  vch_municipio char(10);
BEGIN

  --    SET NOCOUNT ON
  -- Llenado de variables generales
  vch_periodo := RTRIM(psi_anio) || ltrim(to_char(pti_mes, '00'));  -- jcl agosto 29/06

  -- 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_VAC     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 8);
  vch_agr_ARP_Cot := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 9);
  vch_agr_LMA     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 10);
  vch_agr_IGE     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 11);
  vch_agr_IRP     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 12);
  vch_agr_AVP_T   := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 13);
  vch_agr_AVP_E   := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 14);
  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_ARP_IBC := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 17);
  vch_agr_SLN     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 18);
  vch_agr_VNR     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 19);
  vch_agr_VST     := fn_fco_get_fdtparm('COL', pch_compania, 'autoliq', 20);
  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_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;
  vch_agr_tcot := substr(fn_fco_get_fdtparm('COL',
                                            pch_compania,
                                            'autoliq',
                                            41),
                         1,
                         10);
  vch_col_extr := substr(fn_fco_get_fdtparm('COL',
                                            pch_compania,
                                            'autoliq',
                                            42),
                         1,
                         3);
  vch_col_reex := substr(fn_fco_get_fdtparm('COL',
                                            pch_compania,
                                            'autoliq',
                                            43),
                         1,
                         3);
  vch_agt_MUN     := substr(fn_fco_get_fdtparm('COL',
                                               pch_compania,
                                               'autoliq',
                                               44),
                            1,
                            10);
  vch_agt_SAI     := substr(fn_fco_get_fdtparm('COL',
                                               pch_compania,
                                               'autoliq',
                                               47),
                            1,
                            10);
  vch_dato_SAI     := substr(fn_fco_get_fdtparm('COL',
                                               pch_compania,
                                               'autoliq',
                                               47),
                            1,
                            10);

  vch_agt_CCF := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 1);
  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'parafiscal',
                     2,
                     vti_CCF_tipo,
                     vch_CCF_Cot);
  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'parafiscal',
                     3,
                     vti_SENA_tipo,
                     vch_SENA_Cot);
  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'parafiscal',
                     4,
                     vti_ICBF_tipo,
                     vch_ICBF_Cot);
  sp_fco_get_fdtparm('COL',pch_compania,'autoliq',45,vti_FSP_Sol_tipo,vch_FSP_Sol_vlr);
  sp_fco_get_fdtparm('COL',pch_compania,'autoliq',46,vti_FSP_Sub_tipo,vch_FSP_Sub_vlr);

  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;
  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'parafiscal',
                     7,
                     vti_ESAP_tipo,
                     vch_ESAP_Cot);
  sp_fco_get_fdtparm('COL',
                     pch_compania,
                     'parafiscal',
                     8,
                     vti_MEdu_tipo,
                     vch_MEdu_Cot);
  vch_var_CCF  := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 9);
  vch_var_SENA := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 10);
  vch_var_ICBF := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 11);
  vch_var_ESAP := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 12);
  vch_var_MEdu := fn_fco_get_fdtparm('COL', pch_compania, 'parafiscal', 13);

  -- 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);
  -- ni modo...
  IF pch_compania = 'MLS' THEN
     pkg_fco_gral.vdc_tar_AFP  := NVL(fn_fco_var_nom(pch_compania,vch_var_PeT,0)/10 + fn_fco_var_nom(pch_compania,vch_var_PeE,0)/10,0.16);
  ELSE
  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.16);
  END IF;
  pkg_fco_gral.vdc_tar_CCF  := NVL(fn_fco_var_nom(pch_compania,
                                                  vch_var_CCF,
                                                  0),
                                   0.04);
  pkg_fco_gral.vdc_tar_SENA := NVL(fn_fco_var_nom(pch_compania,
                                                  vch_var_SENA,
                                                  0),
                                   0.02);
  pkg_fco_gral.vdc_tar_ICBF := NVL(fn_fco_var_nom(pch_compania,
                                                  vch_var_ICBF,
                                                  0),
                                   0.03);
  pkg_fco_gral.vdc_tar_ESAP := NVL(fn_fco_var_nom(pch_compania,
                                                  vch_var_ESAP,
                                                  0),
                                   0);
  pkg_fco_gral.vdc_tar_MEdu := NVL(fn_fco_var_nom(pch_compania,
                                                  vch_var_MEdu,
                                                  0),
                                   0);

  -- Proceso Principal
  begin
    dummy := 1;
    select 1
      into dummy
      from fco_integrada_cab
     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 */
    sp_fco_deltab(pch_compania, psi_anio, pti_mes, pch_sucursal);

    /* Registro Tipo 1. Parte 1: DATOS GENERALES DEL APORTANTE */

    /* Insertar encabezado */
    sp_fco_inscab(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_CurPi(v_TrabCur,
                 vti_orden,
                 pch_compania,
                 pch_sucursal,
                 vch_periodo);
    loop
      fetch v_TrabCur
        into v_TrabRec;
      exit when v_TrabCur%notfound;
      --      dbms_output.put(v_TrabRec.compania||' ');
      -- dbms_output.put_line(v_TrabRec.trabajador || ' ');
      --      dbms_output.put(v_TrabRec.relacion_laboral||' ');
      --      dbms_output.put(v_TrabRec.fecha_ingreso||' ');
      -- dbms_output.put_line(v_TrabRec.nombre || ' ');

      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.integral   := ' ';
      v_rec_detalle.eliminada  := 0;

      vch_dato_agr := fn_fco_get_dato_agr(pch_compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_tcot);

      --      if isnumeric(nvl(vch_dato_agr, '1')) = 1 then
      if vch_dato_agr in ('00', '99') then
        goto siguiente;
      end if;

      if instr(vch_dato_agr, '-', 1, 1) > 0 then
        v_rec_detalle.tipo_cotizante    := nvl(to_number(substr(vch_dato_agr,
                                                                1,
                                                                instr(vch_dato_agr,
                                                                      '-',
                                                                      1,
                                                                      1) - 1)),
                                               1); --jcl
        v_rec_detalle.subtipo_cotizante := nvl(to_number(substr(vch_dato_agr,
                                                                instr(vch_dato_agr,
                                                                      '-',
                                                                      1,
                                                                      1) + 1)),
                                               1); --jcl
      else
        if isnumeric(nvl(vch_dato_agr, '1')) = 1 then
          v_rec_detalle.tipo_cotizante := to_number(nvl(vch_dato_agr, 0));
        else
          v_rec_detalle.tipo_cotizante := 1; --jcl
        end if;
        v_rec_detalle.subtipo_cotizante := 0;
      end if;

      if vch_agt_TDO is not null then
        v_rec_detalle.tipo_documento := NVL(substr(fn_fco_get_dato_agr(pch_compania,
                                                                   v_TrabRec.trabajador,
                                                                   vch_agt_TDO),
                                               1,
                                               2),'CC');
        if v_rec_detalle.tipo_documento is null or
           v_rec_detalle.tipo_documento = ' ' then
          v_rec_detalle.tipo_documento := 'CC';
        end if;
      else
        v_rec_detalle.tipo_documento := vch_tipodoc;
      end if;

      if substr(NVL(v_rec_detalle.tipo_documento, 'CC'), 1, 2) = 'NI' then
        if length(trim(v_TrabRec.registro_fiscal)) > 1 then
          v_rec_detalle.nro_id := substr(substr(trim(v_TrabRec.registro_fiscal),
                                                1,
                                                length(trim(v_TrabRec.registro_fiscal)) - 1),
                                         1,
                                         16);
        else
          v_rec_detalle.nro_id := null;
        end if;
      else
        v_rec_detalle.nro_id := substr(trim(v_TrabRec.clave_unica), 1, 16);
      end if;

      if substr(NVL(v_rec_detalle.tipo_documento, 'CC'), 1, 2) = 'NI' then
        v_rec_detalle.digito_chequeo := substr(trim(v_TrabRec.registro_fiscal),
                                               -1);
      else
        v_rec_detalle.digito_chequeo := 0;
      end if;


      v_rec_detalle.subtipo_cotizante := fn_fco_subtipo_cotizante(v_TrabRec.compania,
                                                                  v_TrabRec.trabajador);

      v_rec_detalle.extranjero_no_pension := fn_fco_get_dato_col(v_TrabRec.compania,
                                                                 v_TrabRec.trabajador,
                                                                 vch_col_extr);

      v_rec_detalle.residente_en_exterior := fn_fco_get_dato_col(v_TrabRec.compania,
                                                                 v_TrabRec.trabajador,
                                                                 vch_col_reex);
      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);

      if vch_dep_ccf is not null then
        v_rec_detalle.departamento := vch_dep_ccf;
      else
        vch_municipio              := nvl(substr(fn_fco_get_dato_agr(pch_compania,
                                                                     v_TrabRec.trabajador,
                                                                     vch_agt_MUN),
                                                 1,
                                                 10),
                                          '00-000');
        v_rec_detalle.departamento := substr(vch_municipio, 1, 2);
      end if;

      if vch_mun_ccf is not null then
        v_rec_detalle.municipio := vch_mun_ccf;
      else
        vch_municipio           := nvl(substr(fn_fco_get_dato_agr(pch_compania,
                                                                  v_TrabRec.trabajador,
                                                                  vch_agt_MUN),
                                              1,
                                              10),
                                       '00-000');
        v_rec_detalle.municipio := substr(vch_municipio, 4, 3);
      end if;

      v_rec_detalle.primer_apellido  := substr(fn_ape1(v_TrabRec.nombre),
                                               1,
                                               20);
      v_rec_detalle.segundo_apellido := nvl(substr(fn_ape2(v_TrabRec.nombre),
                                                   1,
                                                   30),
                                            ' ');
      v_rec_detalle.primer_nombre    := substr(fn_nom1(v_TrabRec.nombre),
                                               1,
                                               20);
      v_rec_detalle.segundo_nombre   := nvl(substr(fn_nom2(v_TrabRec.nombre),
                                                   1,
                                                   30),
                                            ' ');
      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_vte            := ' ';
      v_rec_detalle.nov_vst            := ' ';
      v_rec_detalle.nov_sln            := ' ';
      v_rec_detalle.nov_ige            := ' ';
      v_rec_detalle.nov_lma            := ' ';
      v_rec_detalle.nov_vac            := ' ';
      v_rec_detalle.nov_avp            := ' ';
      v_rec_detalle.nov_vct            := ' ';
      v_rec_detalle.nov_irp            := '00';
      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_arp           := 0;
      v_rec_detalle.dias_ccf           := 0;
      v_rec_detalle.salario            := fn_fco_salario(v_TrabRec.compania,
                                                         v_TrabRec.trabajador,
                                                         vch_periodo);
      v_rec_detalle.integral           := nvl(substr(fn_fco_salario_integral(v_TrabRec.compania,
                                                                             v_TrabRec.trabajador,
                                                                             vch_agt_SAI,
                                                                             vch_dato_SAI),
                                                     1,
                                                     1),
                                              ' ');      v_rec_detalle.ibc_afp            := 0;
      v_rec_detalle.ibc_eps            := 0;
      v_rec_detalle.ibc_arp            := 0;
      v_rec_detalle.ibc_ccf            := 0;
      v_rec_detalle.ibc_referencia     := 0;
      v_rec_detalle.tarifa_afp         := pkg_fco_gral.vdc_tar_AFP;
      v_rec_detalle.aporte_afp         := 0;
      v_rec_detalle.voluntario_afp     := 0;
      v_rec_detalle.voluntario_afp_cia := 0;
      v_rec_detalle.aporte_total_afp   := 0;
      v_rec_detalle.aporte_fsp         := 0;
      v_rec_detalle.aporte_fsp_subsistencia := 0;
      v_rec_detalle.valor_no_retenido  := 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.nro_aut_ige        := ' ';
      v_rec_detalle.vlr_aut_ige        := 0;
      v_rec_detalle.nro_aut_lma        := ' ';
      v_rec_detalle.vlr_aut_lma        := 0;
      v_rec_detalle.tarifa_arp         := 0;
      v_rec_detalle.centro_trabajo     := 0;
      v_rec_detalle.aporte_arp         := 0;
      v_rec_detalle.tarifa_ccf         := pkg_fco_gral.vdc_tar_CCF;
      v_rec_detalle.aporte_ccf         := 0;
      v_rec_detalle.tarifa_sena        := pkg_fco_gral.vdc_tar_SENA;
      v_rec_detalle.aporte_sena        := 0;
      v_rec_detalle.tarifa_icbf        := pkg_fco_gral.vdc_tar_ICBF;
      v_rec_detalle.aporte_icbf        := 0;
      v_rec_detalle.tarifa_esap        := pkg_fco_gral.vdc_tar_ESAP;
      v_rec_detalle.aporte_esap        := 0;
      v_rec_detalle.tarifa_medu        := pkg_fco_gral.vdc_tar_MEdu;
      v_rec_detalle.aporte_medu        := 0;
      v_rec_detalle.origen             := 1;

      /* RT2 Parte 4. 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);
      /* RT2 Parte 5. 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);
      /* RT2 Parte 6. 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);
      /* RT2 Parte 7. 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);
      /* RT2 Parte 8. Novedad VSP. VARIACION PERMANENTE DE SALARIO */
      v_rec_detalle.nov_vsp := fn_fco_vsp(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_periodo);
      /* RT2 Parte 9. Novedad VTE. CAMBIO TARIFA ESPECIAL */
      -- Pendiente

      /* RT2 Parte 10. Novedad VST. VARIACION TRANSITORIA DEL SALARIO */
      v_rec_detalle.nov_vst := fn_fco_nov(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_VST,
                                          psi_anio,
                                          pti_mes,
                                          'importe');
      /* RT2 Parte 11. Novedad SLN. SUSPENSIÓN TEMPORAL CONTRATO Y LICENCIA NO REMUNERADA */
      v_rec_detalle.nov_sln := fn_fco_nov(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_SLN,
                                          psi_anio,
                                          pti_mes,
                                          'tiempo');
      /* RT2 Parte 12. Novedad IGE. INCAPACIDAD GENERAL */
      v_rec_detalle.nov_ige := fn_fco_nov(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_IGE,
                                          psi_anio,
                                          pti_mes,
                                          'tiempo');
      /* RT2 Parte 13. Novedad LMA. LICENCIA MATERNA */
      v_rec_detalle.nov_lma := fn_fco_nov(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_LMA,
                                          psi_anio,
                                          pti_mes,
                                          'importe');
      /* RT2 Parte 14. Novedad VAC. VACACIONES */
      v_rec_detalle.nov_vac := fn_fco_nov(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_VAC,
                                          psi_anio,
                                          pti_mes,
                                          'importe');
      /* RT2 Parte 15a. Novedad AVP. APORTE VOLUNTARIO */
      v_rec_detalle.nov_avp := fn_fco_nov(v_TrabRec.compania,
                                          v_TrabRec.trabajador,
                                          vch_agr_AVP_T,
                                          psi_anio,
                                          pti_mes,
                                          'importe');
      /* RT2 Parte 15b. Novedad AVP. APORTE VOLUNTARIO (Empleador) */
      if v_rec_detalle.nov_avp is null or v_rec_detalle.nov_avp = ' ' then
        v_rec_detalle.nov_avp := fn_fco_nov(v_TrabRec.compania,
                                            v_TrabRec.trabajador,
                                            vch_agr_AVP_E,
                                            psi_anio,
                                            pti_mes,
                                            'importe');
      end if;
      /* RT2 Parte 16. Novedad VCT. VARIACION DEL CENTRO DE TRABAJO */
      if v_rec_detalle.nov_vct <> 'X' then
        v_rec_detalle.nov_vct := fn_fco_ing_ctr(v_TrabRec.compania,
                                                v_TrabRec.trabajador,
                                                vch_periodo);
      end if;
      /* RT2 Parte 17. Novedad IRP. INCAPACIDAD POR ACCIDENTE DE TRABAJO O ENF.PROFESIONAL -EN DIAS- */
      vn_tiempo := fn_fco_nov_var(v_TrabRec.compania,
                                  v_TrabRec.trabajador,
                                  vch_agr_IRP,
                                  psi_anio,
                                  pti_mes,
                                  'tiempo');
      if vn_tiempo > 99 then
        vc_tiempo := '30';
      elsif vn_tiempo < 0 then
        vc_tiempo := '00';
      else
        vc_tiempo := ltrim(to_char(floor(vn_tiempo), '00'));
      end if;

      v_rec_detalle.nov_irp := vc_tiempo;

      /* RT2. Parte 18. 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');
      /* RT2. Parte 19. 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'),
                                        ' ');

      /* RT2. Parte 20. 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;
/* asi está para Porvenir, analizar luego de pruebas en los demás clientes Oracle...
      if v_rec_detalle.tipo_cotizante = '01' and
         v_rec_detalle.subtipo_cotizante = '0' then
        v_rec_detalle.dias_afp := vn_tiempo;
      else
        v_rec_detalle.dias_afp := 0;
      end if;
      if v_rec_detalle.tipo_cotizante = '01' and
         v_rec_detalle.subtipo_cotizante = '0' then
*/
      v_rec_detalle.ibc_afp := fn_fco_nov_var(v_TrabRec.compania,
                                              v_TrabRec.trabajador,
                                              vch_agr_AFP_IBC,
                                              psi_anio,
                                              pti_mes,
                                              'importe');
/*
      else
        v_rec_detalle.ibc_afp := 0;
      end if;
*/
      v_rec_detalle.ibc_afp := Round((v_rec_detalle.ibc_afp - 1) / 1000, 0) * 1000;
      /* RT2. Parte 21. 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');
      v_rec_detalle.ibc_eps  := fn_fco_nov_var(v_TrabRec.compania,
                                               v_TrabRec.trabajador,
                                               vch_agr_EPS_IBC,
                                               psi_anio,
                                               pti_mes,
                                               'importe');
      v_rec_detalle.ibc_eps  := Round((v_rec_detalle.ibc_eps - 1) / 1000, 0) * 1000;
      /* RT2. Parte 22. Días cotizados a riesgos profesionales e IBC */
      v_rec_detalle.dias_arp := fn_fco_nov_var(v_TrabRec.compania,
                                               v_TrabRec.trabajador,
                                               vch_agr_ARP_IBC,
                                               psi_anio,
                                               pti_mes,
                                               'tiempo');
      v_rec_detalle.ibc_arp  := fn_fco_nov_var(v_TrabRec.compania,
                                               v_TrabRec.trabajador,
                                               vch_agr_ARP_IBC,
                                               psi_anio,
                                               pti_mes,
                                               'importe');
      v_rec_detalle.ibc_arp  := Round((v_rec_detalle.ibc_arp - 1) / 1000, 0) * 1000;
      /* RT2. Parte 23. 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');
        v_rec_detalle.ibc_ccf  := fn_fco_nov_var(v_TrabRec.compania,
                                                 v_TrabRec.trabajador,
                                                 vch_agr_CCF_IBC,
                                                 psi_anio,
                                                 pti_mes,
                                                 'importe');
      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');
        v_rec_detalle.ibc_ccf  := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                     v_TrabRec.trabajador,
                                                     vsi_IBC_CCF,
                                                     psi_anio,
                                                     pti_mes,
                                                     'importe');
      end if;
      v_rec_detalle.ibc_ccf := Round((v_rec_detalle.ibc_ccf - 1) / 1000, 0) * 1000;
      -- JCL se cambia de lugar en SGAS Oct-19-06
        if v_rec_detalle.dias_ccf > 30 then
           v_rec_detalle.dias_ccf := 30;
        end if;


      /* RT2. Parte 25. 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;
      /* RT2. Parte 26. 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');
      v_rec_detalle.voluntario_afp := Round((v_rec_detalle.voluntario_afp - 1) / 100,
                                            0) * 100;
      /* RT2. Parte 27. Aporte Voluntario del Empleador a Pensión */
      v_rec_detalle.voluntario_afp_cia := fn_fco_nov_var(v_TrabRec.compania,
                                                         v_TrabRec.trabajador,
                                                         vch_agr_AVP_E,
                                                         psi_anio,
                                                         pti_mes,
                                                         'importe');
      v_rec_detalle.voluntario_afp_cia := Round((v_rec_detalle.voluntario_afp_cia - 1) / 100,
                                                0) * 100;
      /* RT2. Parte 27. Aporte Fondo de Solidaridad Pensional */
      /* -- jcl agosto 10/06 ahora se calcula separado por subcuenta
      v_rec_detalle.aporte_fsp := fn_fco_nov_var(v_TrabRec.compania,
                                                 v_TrabRec.trabajador,
                                                 vch_agr_FSP,
                                                 psi_anio,
                                                 pti_mes,
                                                 'importe');
      v_rec_detalle.aporte_fsp := Round((v_rec_detalle.aporte_fsp - 1) / 100,
                                        0) * 100; */

      /* RT2. Parte 28. 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');
      /* RT2. Parte 29. 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;
      /* RT2. Parte 30. 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');
      /* RT2. Parte 31. Autorizaciones por Enfermedad General (Nro. y Valor por Trabajador) */
      begin
        select nvl(MAX(a.numero),' '), nvl(SUM(a.valor_total), 0)
          into v_rec_detalle.nro_aut_ige, v_rec_detalle.vlr_aut_ige
          from fco_autorizaciones a, fco_autorizaciones_det b
         where a.compania = b.compania
           and a.autorizacion = b.autorizacion
           and v_rec_detalle.compania = a.compania
           and v_rec_detalle.trabajador = b.trabajador
           and a.tipo_incapacidad = '0'
           and a.periodo = vch_periodo;
      exception
        when no_data_found then
          v_rec_detalle.nro_aut_ige := ' ';
          v_rec_detalle.vlr_aut_ige := 0;
      end;
      /* RT2. Parte 32. Autorizaciones por Licencia de Maternidad (Nro. y Valor por Trabajador) */
      begin
        select nvl(MAX(a.numero), ' '), nvl(SUM(a.valor_total), 0)
          into v_rec_detalle.nro_aut_lma, v_rec_detalle.vlr_aut_lma
          from fco_autorizaciones a, fco_autorizaciones_det b
         where a.compania = b.compania
           and a.autorizacion = b.autorizacion
           and v_rec_detalle.compania = a.compania
           and v_rec_detalle.trabajador = b.trabajador
           and a.tipo_incapacidad = '1'
           and a.periodo = vch_periodo;
      exception
        when no_data_found then
          v_rec_detalle.nro_aut_lma := ' ';
          v_rec_detalle.vlr_aut_lma := 0;
      end;
      /* RT2. Parte 33. Tarifa del Centro de Trabajo */
      if v_rec_detalle.tipo_cotizante <> '12' then
      v_rec_detalle.tarifa_arp     := fn_fco_tarifa_ARP(v_TrabRec.compania,
                                                        v_TrabRec.trabajador);
      end if;
      v_rec_detalle.centro_trabajo := fn_fco_centro_trabajo(v_TrabRec.compania,
                                                            v_TrabRec.trabajador);
      /* RT2. Parte 34. Aporte o Cotización Obligatoria a Riesgos Profesionales */
      v_rec_detalle.aporte_arp := fn_fco_nov_var(v_TrabRec.compania,
                                                 v_TrabRec.trabajador,
                                                 vch_agr_ARP_Cot,
                                                 psi_anio,
                                                 pti_mes,
                                                 'importe');
      v_rec_detalle.aporte_arp := Round((v_rec_detalle.aporte_arp - 1) / 100,
                                        0) * 100;
      /* RT2. Parte 35. 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;
      /* RT2. Parte 36. Aporte o Cotización Obligatoria al SENA */
      if vti_SENA_tipo = 0 then
        if isnumeric(vch_SENA_Cot) = 1 then
          v_rec_detalle.aporte_sena := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                          v_TrabRec.trabajador,
                                                          vch_SENA_Cot,
                                                          psi_anio,
                                                          pti_mes,
                                                          'importe');
        end if;
      else
        v_rec_detalle.aporte_sena := fn_fco_nov_var(v_TrabRec.compania,
                                                    v_TrabRec.trabajador,
                                                    vch_SENA_Cot,
                                                    psi_anio,
                                                    pti_mes,
                                                    'importe');
      end if;
      /* RT2. Parte 37. Aporte o Cotización Obligatoria al ICBF */
      if vti_ICBF_tipo = 0 then
        if isnumeric(vch_ICBF_Cot) = 1 then
          v_rec_detalle.aporte_icbf := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                          v_TrabRec.trabajador,
                                                          vch_ICBF_Cot,
                                                          psi_anio,
                                                          pti_mes,
                                                          'importe');
        end if;
      else
        v_rec_detalle.aporte_icbf := fn_fco_nov_var(v_TrabRec.compania,
                                                    v_TrabRec.trabajador,
                                                    vch_ICBF_Cot,
                                                    psi_anio,
                                                    pti_mes,
                                                    'importe');
      end if;
      /* RT2. Parte 38. Aporte o Cotización Obligatoria a ESAP */
      if vti_ESAP_tipo = 0 then
        if isnumeric(vch_ESAP_Cot) = 1 then
          v_rec_detalle.aporte_esap := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                          v_TrabRec.trabajador,
                                                          vch_ESAP_Cot,
                                                          psi_anio,
                                                          pti_mes,
                                                          'importe');
        end if;
      else
        v_rec_detalle.aporte_esap := fn_fco_nov_var(v_TrabRec.compania,
                                                    v_TrabRec.trabajador,
                                                    vch_ESAP_Cot,
                                                    psi_anio,
                                                    pti_mes,
                                                    'importe');
      end if;
      /* RT2. Parte 39. Aporte o Cotización Obligatoria al Ministerio de Educación */
      if vti_MEdu_tipo = 0 then
        if isnumeric(vch_MEdu_Cot) = 1 then
          v_rec_detalle.aporte_medu := fn_fco_nov_var_cnc(v_TrabRec.compania,
                                                          v_TrabRec.trabajador,
                                                          vch_MEdu_Cot,
                                                          psi_anio,
                                                          pti_mes,
                                                          'importe');
        end if;
      else
        v_rec_detalle.aporte_medu := fn_fco_nov_var(v_TrabRec.compania,
                                                    v_TrabRec.trabajador,
                                                    vch_MEdu_Cot,
                                                    psi_anio,
                                                    pti_mes,
                                                    'importe');
      end if;
      -- JCL Agosto 10/06 hecho en Meals
      /* RT2. Parte 39a. Fondo de Solidaridad Pensional subcuenta de Solidaridad */
      if vti_FSP_Sol_tipo = 0 then
        if isnumeric(vch_FSP_Sol_vlr) = 1 then
          v_rec_detalle.aporte_fsp := fn_fco_nov_var_cnc(v_TrabRec.compania,v_TrabRec.trabajador,vch_FSP_Sol_vlr,psi_anio,pti_mes,'importe');
        end if;
      else
        v_rec_detalle.aporte_fsp := fn_fco_nov_var(v_TrabRec.compania,v_TrabRec.trabajador,vch_FSP_Sol_vlr,psi_anio,pti_mes,'importe');
      end if;
      -- JCL Agosto 10/06 hecho en Meals
      /* RT2. Parte 39b. Fondo de Solidaridad Pensional subcuenta de Subsistencia */
      if vti_FSP_Sub_tipo = 0 then
        if isnumeric(vch_FSP_Sub_vlr) = 1 then
          v_rec_detalle.aporte_fsp_subsistencia := fn_fco_nov_var_cnc(v_TrabRec.compania,v_TrabRec.trabajador,vch_FSP_Sub_vlr,psi_anio,pti_mes,'importe');
        end if;
      else
        v_rec_detalle.aporte_fsp_subsistencia := fn_fco_nov_var(v_TrabRec.compania,v_TrabRec.trabajador,vch_FSP_Sub_vlr,psi_anio,pti_mes,'importe');
      end if;


      /* RT2. Parte 40. Inclusión de Empleados por Fuera de Nómina (Fantasmas) */
      if object_id('fco_fantasmas') is not null then
        sp_fco_pi_fantasmas(pch_compania, psi_anio, pti_mes, pch_sucursal);
      end if;

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

   if v_rec_detalle.aporte_eps + v_rec_detalle.aporte_afp + v_rec_detalle.aporte_ccf + v_rec_detalle.aporte_arp <> 0 then
      -- Siguiente secuencia
      select substr(to_char(eseq.nextval, '00000'), -5)
        into v_rec_detalle.secuencia
        from dual;

      insert into fco_integrada_det
      ( compania,
        anio,
        mes,
        sucursal,
        trabajador,
        secuencia,
        tipo_documento,
        nro_id,
        digito_chequeo,
        tipo_cotizante,
        subtipo_cotizante,
        extranjero_no_pension,
        residente_en_exterior,
        departamento,
        municipio,
        primer_apellido,
        segundo_apellido,
        primer_nombre,
        segundo_nombre,
        nov_ing,
        nov_ret,
        nov_tde,
        nov_tae,
        nov_tdp,
        nov_tap,
        nov_vsp,
        nov_vte,
        nov_vst,
        nov_sln,
        nov_ige,
        nov_lma,
        nov_vac,
        nov_avp,
        nov_vct,
        nov_irp,
        cod_afp,
        cod_afp_tras,
        cod_eps,
        cod_eps_tras,
        cod_ccf,
        dias_afp,
        dias_eps,
        dias_arp,
        dias_ccf,
        salario,
        ibc_afp,
        ibc_eps,
        ibc_arp,
        ibc_ccf,
        ibc_referencia,
        tarifa_afp,
        aporte_afp,
        voluntario_afp,
        voluntario_afp_cia,
        aporte_total_afp,
        aporte_fsp,
        valor_no_retenido,
        tarifa_eps,
        aporte_eps,
        upc_adicional,
        nro_aut_ige,
        vlr_aut_ige,
        nro_aut_lma,
        vlr_aut_lma,
        tarifa_arp,
        centro_trabajo,
        aporte_arp,
        tarifa_ccf,
        aporte_ccf,
        tarifa_sena,
        aporte_sena,
        tarifa_icbf,
        aporte_icbf,
        tarifa_esap,
        aporte_esap,
        tarifa_medu,
        aporte_medu,
        origen,
        eliminada,
        integral,
        aporte_fsp_subsistencia)
      values
      ( v_rec_detalle.compania,
        v_rec_detalle.anio,
        v_rec_detalle.mes,
        v_rec_detalle.sucursal,
        v_rec_detalle.trabajador,
        v_rec_detalle.secuencia,
        v_rec_detalle.tipo_documento,
        v_rec_detalle.nro_id,
        v_rec_detalle.digito_chequeo,
        v_rec_detalle.tipo_cotizante,
        v_rec_detalle.subtipo_cotizante,
        v_rec_detalle.extranjero_no_pension,
        v_rec_detalle.residente_en_exterior,
        v_rec_detalle.departamento,
        v_rec_detalle.municipio,
        v_rec_detalle.primer_apellido,
        v_rec_detalle.segundo_apellido,
        v_rec_detalle.primer_nombre,
        v_rec_detalle.segundo_nombre,
        v_rec_detalle.nov_ing,
        v_rec_detalle.nov_ret,
        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_vte,
        v_rec_detalle.nov_vst,
        v_rec_detalle.nov_sln,
        v_rec_detalle.nov_ige,
        v_rec_detalle.nov_lma,
        v_rec_detalle.nov_vac,
        v_rec_detalle.nov_avp,
        v_rec_detalle.nov_vct,
        v_rec_detalle.nov_irp,
        v_rec_detalle.cod_afp,
        v_rec_detalle.cod_afp_tras,
        v_rec_detalle.cod_eps,
        v_rec_detalle.cod_eps_tras,
        v_rec_detalle.cod_ccf,
        v_rec_detalle.dias_afp,
        v_rec_detalle.dias_eps,
        v_rec_detalle.dias_arp,
        v_rec_detalle.dias_ccf,
        v_rec_detalle.salario,
        v_rec_detalle.ibc_afp,
        v_rec_detalle.ibc_eps,
        v_rec_detalle.ibc_arp,
        v_rec_detalle.ibc_ccf,
        v_rec_detalle.ibc_referencia,
        v_rec_detalle.tarifa_afp,
        v_rec_detalle.aporte_afp,
        v_rec_detalle.voluntario_afp,
        v_rec_detalle.voluntario_afp_cia,
        v_rec_detalle.aporte_total_afp,
        v_rec_detalle.aporte_fsp,
        v_rec_detalle.valor_no_retenido,
        v_rec_detalle.tarifa_eps,
        v_rec_detalle.aporte_eps,
        v_rec_detalle.upc_adicional,
        v_rec_detalle.nro_aut_ige,
        v_rec_detalle.vlr_aut_ige,
        v_rec_detalle.nro_aut_lma,
        v_rec_detalle.vlr_aut_lma,
        v_rec_detalle.tarifa_arp,
        v_rec_detalle.centro_trabajo,
        v_rec_detalle.aporte_arp,
        v_rec_detalle.tarifa_ccf,
        v_rec_detalle.aporte_ccf,
        v_rec_detalle.tarifa_sena,
        v_rec_detalle.aporte_sena,
        v_rec_detalle.tarifa_icbf,
        v_rec_detalle.aporte_icbf,
        v_rec_detalle.tarifa_esap,
        v_rec_detalle.aporte_esap,
        v_rec_detalle.tarifa_medu,
        v_rec_detalle.aporte_medu,
        v_rec_detalle.origen,
        v_rec_detalle.eliminada,
        v_rec_detalle.integral,
        v_rec_detalle.aporte_fsp_subsistencia);
   end if;

      <<siguiente>>
      commit;
    end loop;
    close v_TrabCur;

    -- jcl agregado en Porvenir, septiembre 7/06
    update fco_integrada_det
    set ibc_afp = 0, tarifa_afp = 0, dias_afp = 0
    where compania = pch_compania
    and anio = psi_anio
    and mes = pti_mes
    and (sucursal = pch_sucursal or pch_sucursal = ' ' or pch_sucursal is null)
    and subtipo_cotizante = 1;

    -- jcl agregado en Surtigas, Oct-17-06
    update fco_integrada_det
       set tarifa_afp = 0
     where compania = pch_compania
       and anio = psi_anio
       and mes = pti_mes
       and (sucursal = pch_sucursal or pch_sucursal is null)
       and tipo_cotizante IN (17, 12, 19)
       and aporte_afp = 0;

    commit work;
  end if; /*1*/

    /* RT1. Parte 3. TOTAL DE LA NOMINA */
      select sum(nvl(ibc_ccf, 0))
        into vdc_nomina
        from fco_integrada_det
       where compania = pch_compania
         and anio = psi_anio
         and mes = pti_mes
         and (sucursal = pch_sucursal or pch_sucursal is null);

      update fco_integrada_cab
         set valor_nomina = nvl(vdc_nomina, 0)
       where compania = pch_compania
         and anio = psi_anio
         and mes = pti_mes
         and (sucursal = pch_sucursal or pch_sucursal is null);

    /* RT1. Parte 2. TOTAL DE EMPLEADOS */
    select count(*)
      into vsi_empleados
      from fco_integrada_det
     where compania = pch_compania
       and anio = psi_anio
       and mes = pti_mes
       and (sucursal = pch_sucursal or pch_sucursal is null);

    update fco_integrada_cab
       set nro_empleados = nvl(vsi_empleados, 0)
     where compania = pch_compania
       and anio = psi_anio
       and mes = pti_mes
       and (sucursal = pch_sucursal or pch_sucursal is null);

    /* RT03. TOTAL APORTES DEL PERIODO A PENSIONES */
    sp_fco_pi_tot_pensiones(pch_compania, psi_anio, pti_mes, pch_sucursal);
    /* RT04. TOTAL APORTES DEL PERIODO A SALUD */
    sp_fco_pi_tot_salud(pch_compania, psi_anio, pti_mes, pch_sucursal);
    /* RT05. TOTAL APORTES DEL PERIODO A RIESGOS PROFESIONALES */
    sp_fco_pi_tot_riesgos(pch_compania,
                          psi_anio,
                          pti_mes,
                          pch_sucursal,
                          vch_periodo);
    /* RT06. TOTAL APORTES DEL PERIODO A CAJAS DE COMPENSACION FAMILIAR */
/*    sp_fco_pi_tot_ccf(pch_compania, psi_anio, pti_mes, pch_sucursal);*/
    /* RT07. TOTAL APORTES DEL PERIODO AL SENA */
    sp_fco_pi_tot_sena(pch_compania, psi_anio, pti_mes, pch_sucursal);
    /* RT08. TOTAL APORTES DEL PERIODO AL ICBF */
    sp_fco_pi_tot_icbf(pch_compania, psi_anio, pti_mes, pch_sucursal);
    /* RT09. TOTAL APORTES DEL PERIODO A LA ESAP */
    sp_fco_pi_tot_esap(pch_compania, psi_anio, pti_mes, pch_sucursal);
    /* RT10. TOTAL APORTES DEL PERIODO AL MINISTERIO DE EDUCACION */
    sp_fco_pi_tot_medu(pch_compania, psi_anio, pti_mes, pch_sucursal);
    /* RT11. TOTAL POR PAGAR DURANTE EL PERIODO */
    sp_fco_pi_tot_pagar(pch_compania, psi_anio, pti_mes, pch_sucursal);

    commit work;
end sp_fco_planilla_integrada;
/
