<?

/* * *
 * LOG HTML
 */
$logPath = sfConfig::get('sf_log_dir') . '/html_dev.log';
$custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));

/**
 * Version nueva de planilla de autoliquidacion resolucion 2388 de 2016 - 20170222
 */
//En linux 
$salto_linea = "\n"; //variable global para manejo del salto de linea
//En windows 
$salto_linea = "\r\n"; //variable global para manejo del salto de linea

/*
 * Variables globales del proyecto
 */
//se deja global la letra de la planilla de aportes - 20140905
$letraPlanillaAportes = sfConfig::get('app_letraPlanillaAportes');
//se deja global codigo de la planilla de aportes - 20200814
$codigoPlanillaAportes = sfConfig::get('app_codigoPlanillaAportes');
//SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7 - 20151026
$entidad_cliente = sfConfig::get('app_entidad_cliente');

$scarpeta = "uploads"; //carpeta donde guardar el archivo.

$sfile = $scarpeta . "/archivos_banco/PlanillaAutoliquidacionResol2388_" . date("d") . date("m") . date("Y") . ".txt"; //ruta del archivo a generar
$fp = fopen($sfile, "w");

$shtml = "";
$shtmlAuto = "";

$consul = Doctrine_Manager::getInstance()->connection();

//ARCHIVO R1DATGEN Datos Generales

$archivo = fopen("uploads/archivos_banco/r1datgen.csv", "w"); //generacion del nuevo documento txt.
//$shtml = "R101\tR102\tR103\tR104\tR105\tR106\tR107A\tR107B\tR107C\tR107\tR108\tR109\tR110\tR111\tR112\tR113\tR114\tR115\tR116\tR120A\tR$id_periodo\t\n";
//$shtml .="01\t00001\tAGENCIA NACIONAL DE MINERIA\tNI\t900500018\t2\tE\t0000000000\t\tU\t\t\t14-25\t$vig_ini-$per_ini\t$vig_fin-$per_fin\t\t\t00180\t000517709000\t1\t00\t\n";

/**
 * Campo c8 se pone blanco en vez de 0, segun la $entidad_cliente - 20151026
 */
$sql = "
select 
'01' AS C1,
'00001' AS C2,
RPAD( translate(tab0.nombre_empresa,'áéíóúÁÉÍÓÚ','aeiouAEIOU') ,200,' ') AS C3,
'NI' AS C4,
rPAD(tab0.nit,16,' ') AS C5,
digito_verificacion(tab0.nit) AS C6,
'E' AS C7,
case when $entidad_cliente in (4,6,8,9) then lpad(' ',10,' ') else lpad(0,10,0) end AS C8,
--lpad(0,10,0) AS C8,
rPAD(' ',10,' ') AS C9,
'$letraPlanillaAportes' AS C10,
rPAD('$codigoPlanillaAportes',10,' ') as c11,
rPAD(' ',40,' ') AS C12,
rpad(riesgo.codigo, 6, ' ') as c13,
'$vig_fin-' || lpad($per_fin,2,0) as c14,
'$vig_ini-' || lpad($per_ini,2,0)  AS C15,
rPAD(' ',10,' ') AS C16,
rPAD(' ',10,' ') AS C17,
--lpad(tab.cant + kardex1.cant_ka - salud1.cant_ka,5,0) as c18,
--lpad(kardex1.cant_ka + salud1.cant_ka,5,0) as c18,
lpad(tab.cant,5,0) as c18,
lpad(icbf1.total + nvl(kardex4.valor,0),12,0) as c19,
lpad(1,2,0) as c20,
lpad(0,2,0) as c21

from datos_compania tab0

left join 
(
    select 
    count(total.num_doc) as cant, 
    sum(total.total) as total 
    from (
      select 
      tab0.num_doc as num_doc, 
      sum(tab0.aporte_func) as total 
      from no_liquida_aporte tab0
      where tab0.id_periodo = $id_periodo
      and tab0.tipo_planilla = 'A'
      group by tab0.num_doc 
   )total   
)tab ON 1 = 1

/*
Trae el maximo codigo de riesgo de las afiliaciones - 20130820
Trae el maximo codigo de riesgo de las liquida aportes - 20150724
*/
left join 
(
    select distinct nvl(codfon.codigo,' ') as codigo 
    from no_mae_fondos maefon
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    where maefon.id_mae_fondos = (
        select id_mae_fondos from(
            select 
            aut.id_mae_fondos,
            ROW_NUMBER() OVER (
               --partition by aut.id_mae_fondos
                ORDER BY aut.cant desc
            ) AS rn
            from(
                select 
                id_mae_fondos, count(id_mae_fondos) as cant
                from no_liquida_aporte 
                where id_clase_fondo = 3
                and id_periodo = $id_periodo 
                and TIPO_PLANILLA = 'A'
                group by
                id_mae_fondos
            )aut
            where 
            aut.cant > 0
        )
        where rn = 1
    )
)riesgo ON 1 = 1

left join 
(
    select 
    count(total.num_doc) as cant, 
    sum(total.aporte_ibc) as total1, 
    sum(total.IBC) as total 
    from (
        select tab0.num_doc, sum(nvl(tab0.valor_base,0)) as aporte_IBC, sum(tab0.aporte_func) as aporte, 
        sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, 
        MAX(nvl(tab0.valor_base,0)) AS IBC,
        max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
        from no_liquida_aporte tab0
        where tab0.id_periodo = $id_periodo 
        and tab0.tipo_planilla = 'A' 
        and tab0.id_clase_fondo = 5
        group by tab0.num_doc
   )total   
)icbf1 ON 1 = 1


left join
(
    select 
    count(total.num_doc) as cant_ka, 
    sum(total.CANTIDAD) as total1_ka, 
    sum(total.CANTIDAD) as total_ka 
    from (
      select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD
      from no_novedad_kardex tab0
      left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
      where tab1.afecta_antigu = 1 and tab0.estado = 1 and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
      group by tab0.num_doc
    )total
)kardex1 ON 1 = 1


left join
(
    select    
    nvl(sum( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0))  ,-3) ),0) as valor
    from no_estado_func_v tab0    
    
    --left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
    left join (
      SELECT
       aut.*,
       ROW_NUMBER() OVER (
        partition by aut.num_doc
        ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
       ) AS rn
      from no_nombramiento aut
    )tab5
    on tab5.id_tipo_doc = tab0.id_tipo_doc 
    and tab5.num_doc = tab0.num_doc
    and tab5.rn = 1
    
    --left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
    /*
    Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
    */
    left join(
    
        select * from(
                select 
                concep.id_tipo_doc,
                concep.num_doc,
                concep.valor as asignacion_basica ,

                 ROW_NUMBER() OVER (
                  PARTITION BY concep.num_doc
                  order by per.id_tipo_periodo asc, concep.fecha_hasta desc
                 ) as rn

                from no_concepto_periodo concep

                join no_periodo per
                on concep.PERIODO = per.id_periodo

                where 
                concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 

                and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
                and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
            )where rn = 1

    )tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
    and tab6.rn = 1

    left join
    (
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, max(tab1.suspension) as max_marca
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
        where tab1.afecta_antigu = 1 and tab0.estado = 1 
         /*   
        and (
          tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
          or 
          tab0.id_periodo = $id_periodo
        )*/
        and
        (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        and (
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
          or 
          tab0.id_periodo = $id_periodo
        )
        group by tab0.num_doc
    )kardex1 ON kardex1.num_doc = tab0.num_doc

    /*
    Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
    */
    left join
    (
        select tab0.num_doc, sum(tab0.num_dias) CANTIDAD
        from no_novedad_kardex tab0
        left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
        where tab1.afecta_riesgo = 1 and tab0.estado = 1 and tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
    )kardex4 ON kardex4.num_doc = tab0.num_doc

    left join 
    (
        select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
        max(tab0.porcentaje_patrono)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
        from no_liquida_aporte tab0
        where tab0.id_periodo = $id_periodo 
        and tab0.tipo_planilla = 'A'
        and tab0.id_clase_fondo = 2
        group by tab0.num_doc
    )salud1 ON salud1.num_doc = tab0.num_doc


    WHERE tab0.periodo = $id_periodo 
    and (tab0.actual = 1 or
      ( tab0.actual = 0 
        /*
        Se cambia fecha de termina(ultimo dia de trabajo) por fecha de retiro, 
        para tener encuenta si trabajo en el periodo al menos 1 dia - 20130828                    
        */
        and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and tab5.fecha_termina
      between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
      )
    )
    and kardex1.cantidad > 0    
)kardex4 on 1 = 1


left join 
(
  select 
    count(total.num_doc) as cant_ka
    from (
      select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
      max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
      from no_liquida_aporte tab0
      where tab0.id_periodo = $id_periodo 
      and tab0.tipo_planilla = 'A'
      and tab0.id_clase_fondo = 2
      group by tab0.num_doc
    )total
    where total.dias = 0
)salud1 ON 1 = 1
   
";

//                 echo $sql;



$st = $consul->execute($sql);
$detalle = $st->fetchAll();

/*
 * recorrer arreglo de datos y convertir en csv
 */
$i = 0;
$j = 0;
$sep = ""; //variable global para manejo del separador
foreach ($detalle as $rec) {
//        $shtml.='"';
    foreach ($rec as $key => $value) {
        if ($j != 0) {
//            if ($value != '/') {
            $shtml .= $sep;
//            }
        }
//        $value = str_replace('Ñ', '#', $value);
//        $value = str_replace('ñ', '#', $value);
//        $value = str_replace('[\n|\r|\n\r]', ' ', $value);
        $shtml .= $value;
        $j++;
    }
//        $shtml.='"';
//        $this->logMessage("Linea: " . $i++);
    //salto de linea para separar totales
    $shtml .= $salto_linea;
    $j = 0;
}

fwrite($archivo, $shtml);
fclose($archivo);

$shtmlAuto .= $shtml;
$shtml = "";

//ARCHIVO R2LIQDAP Detalle     
$archivo = fopen("uploads/archivos_banco/r2liqdap.csv", "w"); //generacion del nuevo documento txt.
//$shtml = "R201\tR202\tR203\tR204\tR206\tR206A\tR206B\tR206C\tR206D\tR206E\tR207\tR208\tR209\tR210\tR211\tR212\tR213\tR214\tR215\tR216\tR217\tR218\tR219\tR220\tR221\tR222\tR223\tR224\tR225\tR226\tR227\tR228\tR229\tR230\tR231\tR232\tR233\tR234\tR239A\tR235\tR241A\tR236\tR237\tR238\tR239\tR241\tR242\tR243\tR244\tR245\tR246\tR246A\tR247\tR248\tR249\tR250\tR251\tR252\tR253\tR254\tR255\tR256\tR257\tR258\tR259\tR260\tR261\tR262\tR263\tR264\tR265\tR266\tR267\t\n";
//$shtml .= "";

/*
 * Para riesgo se valida que si no hay dias el valor de riesgo es 0 - 20130729
 * Se activan campo C74 y C75 datos UPC - 20140730
 * Con el fin de retirar de la lógica de la autoliquidación la parte donde estamos tomando el porcentaje de aporte de pension. 
 * DEBE CAMBIAR asi: --- Fondo de pension:  ID_CLASE_FONDO=1   Y  PORCENTAJE_PATRONO > 0 
 * --- FSP:  ID_CLASE_FONDO=1   Y  PORCENTAJE_PATRONO=0 -- 20140910
 * En el registro de marca  por novedad de vacaciones,  
 * no se deben tomar periodos de m,eses posteriores al mes de la liquidación.   
 * Ejemplo en septiembre 2014  registraron una novedad de vacaciones  que afecta agosto  y la está marcando.      
 * El control radica en filtrar las novedades de vacaciones registradas en periodos anterior o igual al mes de liquidación. - 20140910
 * Por favor actualizar  el archivo de Planilla de autoliquidación para quie en la posición 506  tenga "N" - 20141120 
 * Se agragan consultas de IGE, LMA, VAC para registros por dias de novedad, Redondeo es hacia arriba - 20170303
 * Se colocan dias de comision otra entidad para liquidar aportes de retiro, nvl(novper.dias,0) - 20171011
 * Para las novedades de causa liq, se toma dias de fechas anteriores - 20180719
 * Se coloca codigo de tipo_documento - 20180913
 * Incidente #8798, coloca campos C28 y C48 - 20190425
 * Tabla no_suptipo_cotizante_v para el tipo de pensionado - 20190508
 * Se cambia para que tome dias de meses anteriores y sin dia 31, kardek4 inc que afectan riesgo - 20190930
 * Quitar translate campos 11,12,13,14 - 20191101, Se deja translate(tab.c,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') - 20191118
 * Se completa campo 78 con el numero de riesgo - 20200526
 * Dias diferentes a 0 c36 a c39 - 20200602
 * Campo 41 posición 201 = F, Actualización Resolución 454 de 2020, ticket 17985 SGC F= Salario fijo - 20200709
 * Campo 41 para los registros de UPC no va la F - 20200824
 * Se agrega nueva union para filas para personas que se retiran  e  ingresan en el mismo mes - 20211119
 */
$sql = "
select 
tab.c1,
lpad(rownum,5,0) as c2,
tab.c3,
case when tab.c0 = 0 then tab.c4 else tab.c4a end c4,
tab.c5,
tab.c6,
tab.c7,
tab.c8,
tab.c9,
tab.c10,
case when tab.c0 = 0 then translate(tab.c11,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') else translate(tab.c11a,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') end c11,
translate(tab.c12,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as c12,
translate(tab.c13,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as c13,
translate(tab.c14,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as c14,
tab.c15,
tab.c16,
tab.c17,
tab.c18,
tab.c19,
tab.c20,
tab.c21,
tab.c22,
tab.c23,
tab.c24,
tab.c25,
tab.c26,
tab.c27,
tab.c28,
tab.c29,
tab.c30,
tab.c31,
tab.c32,
tab.c33,
tab.c34,
tab.c35,
case when to_number(tab.c6) != 0 then LPAD(0,2,0) else tab.c36 end as c36,
tab.c37,
tab.c38,
--tab.c39, dias parafiscales
case when to_number(tab.c45) = 0 then LPAD(0,2,0) else tab.c39 end c39,
tab.c40,
case when c41 != 'UPC' then 'F'  else ' ' end as c41,
case when to_number(tab.c6) != 0 then LPAD(0,9,0) else tab.c42 end as c42,
tab.c43,
--tab.c44,
case when to_number(tab.c38) = 0 then LPAD(0,9,0) else tab.c44 end c44,
tab.c45,
tab.c46,
tab.c47,
tab.c48,
tab.c49,
tab.c50,
tab.c51,
tab.c52,
tab.c53,
tab.c54,
tab.c55,
tab.c56,
tab.c57,
tab.c58,
tab.c59,
tab.c60,
--tab.c61,
case when to_number(tab.c38) = 0 then LPAD('0.0000000',9,0) else tab.c61 end c61,
tab.c62,
--tab.c63,
case when to_number(tab.c38) = 0 then LPAD(0,9,0) else tab.c63 end c63,
tab.c64,
tab.c65,
tab.c66,
tab.c67,
tab.c68,
tab.c69,
tab.c70,
tab.c71,
tab.c72,
tab.c73,
tab.c74,
tab.c75,
tab.C76 AS C76,
tab.c77,
tab.c78,
tab.c79 AS C79,--campo nuevo de tipo aporte pension - 20160407
tab.c80 AS C80,--ING
tab.c81 AS C81,--RET
tab.c82 AS C82,--VSP
tab.c83 AS C83,--SLN
tab.c84 AS C84,--SLN
tab.c85 AS C85,--IGE
tab.c86 AS C86,--IGE
tab.c87 AS C87,--LMA
tab.c88 AS C88,--LMA
tab.c89 AS C89,--VAC-LR
tab.c90 AS C90,--VAC-LR
tab.c91 AS C91,--VCT
tab.c92 AS C92,--VCT
tab.c93 AS C93,--IRL
tab.c94 AS C94,--IRL
tab.c95 AS C95,--IBC parafiscales
tab.c96 AS C96,--HORAS EXTRAS
tab.c97 AS C97,--Rad exterior
tab.c98 AS C98--Actividad Economica Longitud: 7 Posición: 687-693 Resolución 2012 de 2022 - 20221205::LAVILA

from(

select taborder.* from (

/*
* Registro 2 - Funcionarios con reporte de fondos
* Incidente #4890 <-> 3.Marcación de novedad de retiro para pensionados. 
* 4.Marcación de novedades de ingreso a Caja de Compensación para pensionados e independientes. - 20170222
* Solo dias laborados, las vacaciones y kardex, van entro registro - 20170309
* Se toman dias de kardex2, solo del mes si es de meses anteriores la novedad, si es del mismo mes se toman todos los dias - 20180808
* Incidente #31826, se quita en el campo C15 marca de C - 20220907::LAVILA 
*/

select 

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl( replace( tab4.primer_nombre,' ',' ') ,' '),20,' ') AS C13,
RPAD(nvl( replace( tab4.segundo_nombre,' ',' '),' '),30,' ') AS C14,
case 
when tab5.fecha_ingreso_correc is not null then 'X' 
when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then 'X' 
  else case when to_char(ccf0.fecha_ingreso,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then ' ' 
            when to_char(riesgo.fecha_ingreso,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then 'R' 
            else ' ' end end AS C15,
case when novretiro.num_doc is not null and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then 'X' 
  else case when penfun.id_pension_func is not null and to_char(penfun.fecha_pension,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then 'P' else ' ' end end AS C16,

/*Incidente #40643, GA:SEGUN RESOLUCIÓN 467 DE 2025. SE RETIRAN LAS MARCAS DE CAMBIO DE FONDO - 20250909*/
case when salud.fecha_ingreso   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C17,
case when salud.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C18,
case when pension.fecha_ingreso   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C19,
case when pension.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C20,

case when ascenso.cantidad>0 then 'X' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 or vaca.cantidad>0 or kardexlr.cantidad>0 or kardex2.cantidad>0 or kardex3.cantidad>0 then 'X' else ' 'end AS C23,
-- Dias de comision otra entidad y retirado - 20171011
case when nvl(novper.dias,0) != 0 then 'C' when kardex1.cantidad>0 then ' ' else ' 'end AS C24,
case when kardex2.cantidad>0 then ' ' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then ' ' when kardexlr.cantidad>0 then ' ' else ' 'end AS C27,
case when nvl(aporvol.valor_liquidado,0) > 0 then 'X' else ' ' end AS C28,
' ' AS C29,
/*Se repordan dias del periodo de consulta, solo en la fila de incapacidad, en la mensual NO(20191105) - 20191101*/
--LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
LPAD('0',2,'0') AS C30,
--LPAD( case when pension1.dias = 30 then to_char(nvl(kardex4.cantidad_mes,0)) else '0' end ,2,'0') AS C30,
rpad(nvl(pension.codigo,' '),6,' ') as c31,

/*
Se pone codigo de pension de traslado si la fecha de retiro del fondo esta dentro del periodo a generar la planilla 
se toma del id de la tabla no_liquida_aporte - 20130826
*/
case when pension.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then rPAD( nvl( (select distinct no_cod_fondo.CODIGO from no_mae_fondos join no_cod_fondo on no_cod_fondo.nitocc = no_mae_fondos.num_doc  
  where no_mae_fondos.id_mae_fondos = pension.id_tap AND ( no_cod_fondo.tipo != 'EPS' or no_cod_fondo.tipo != 'CCF' ) ),' ') ,6,' ') 
  else rPAD(' ',6,' ') end AS C32,
--rPAD(' ',6,' ') AS C32,

rPAD(nvl(salud.codigo,' '),6,' ') AS C33,

/*
Se pone codigo de salud de traslado si la fecha de retiro del fondo esta dentro del periodo a generar la planilla
se toma del id de la tabla no_liquida_aporte - 20130826
*/
case when salud.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then rPAD( nvl( (select distinct no_cod_fondo.CODIGO from no_mae_fondos join no_cod_fondo on no_cod_fondo.nitocc = no_mae_fondos.num_doc  
  where no_mae_fondos.id_mae_fondos = salud.id_tae  AND no_cod_fondo.tipo = 'EPS' ),' ') ,6,' ') 
  else rPAD(' ',6,' ') end AS C34,
--rpad(' ',6,' ') as c34,

rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,
LPAD(nvl(pension1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardex2.num_dias_novkar,0)-nvl(kardex3.num_dias_novlicmat,0)-nvl(kardex4.cantidad,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0),2,0) AS C36,
LPAD(nvl(salud1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardex2.num_dias_novkar,0)-nvl(kardex3.num_dias_novlicmat,0)-nvl(kardex4.cantidad,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0),2,0) AS C37,

--LPAD(nvl(salud1.dias-nvl(kardex4.cantidad,0),0),2,0) AS C38,
--LPAD(nvl(riesgo1.dias-nvl(kardex4.cantidad,0),0),2,0) AS C38,
--LPAD(nvl(riesgo1.dias,0),2,0) AS C38,
/*
Toma los dias del riesgo y resta los dias de kardex4 si supera los 30 dias, sino toma los de riesgos
*/
--LPAD( case when nvl(riesgo1.dias,0) + nvl(kardex4.cantidad,0) > 30 and nvl(kardex4.cantidad,0) <= 30  
--then 30 - nvl(kardex4.cantidad,0) else nvl(riesgo1.dias,0) end ,2,0) AS C38,
LPAD(nvl(salud1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardex2.num_dias_novkar,0)-nvl(kardex3.num_dias_novlicmat,0)-nvl(kardex4.cantidad,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0),2,0)  as C38,

--lpad(nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)  -nvl(kardex3.num_dias_novlicmat,0)-nvl(kardex4.cantidad,0) ,0),2,0)
LPAD(nvl(salud1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardex2.num_dias_novkar,0)-nvl(kardex3.num_dias_novlicmat,0)-nvl(kardex4.cantidad,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0),2,0) as c39,
--Se quita la novedad de kardex - 20130725
--LPAD( case when nvl(ccf1.dias,0) + nvl(kardex4.cantidad,0) > 30 
--then 30 - nvl(kardex4.cantidad,0) else nvl(ccf1.dias,0) end ,2,0) AS C39,

LPAD(nvl(tab6.asignacion_basica,0),9,0) AS C40,
' ' AS C41,
LPAD( case 
when nvl(vaca.num_dias_vac,0) != 0 then nvl(riesgo1.ibc,0)
when nvl(kardex2.num_dias_novkar,0) != 0  then nvl(riesgo1.ibc,0) 
when nvl(kardex3.num_dias_novlicmat,0) != 0  then nvl(riesgo1.ibc,0) 
when nvl(kardex4.cantidad,0) != 0  then nvl(riesgo1.ibc,0) 
when nvl(kardexlr.num_dias_novlicrem,0) != 0  then nvl(riesgo1.ibc,0) 
else nvl(pension1.ibc,0) end ,9,0) AS C42,
LPAD( case 
when nvl(vaca.num_dias_vac,0) != 0 then nvl(riesgo1.ibc,0)
when nvl(kardex2.num_dias_novkar,0) != 0  then nvl(riesgo1.ibc,0)
when nvl(kardex3.num_dias_novlicmat,0) != 0  then nvl(riesgo1.ibc,0) 
when nvl(kardex4.cantidad,0) != 0  then nvl(riesgo1.ibc,0) 
when nvl(kardexlr.num_dias_novlicrem,0) != 0  then nvl(riesgo1.ibc,0) 
else nvl(salud1.ibc,0) end ,9,0) AS C43,
LPAD(nvl(riesgo1.ibc,0),9,0) AS C44,

/* Se verifica que toma segun planilla los dias calculados y no siempre 30, se valida que tenga dias diferente de 0 - 20210423 
Se deja que solo reste dias de vac y licrem, no otras - 20210521
Se cambia que tomen dias de ccf1.dias en vez de salud1.dias - 20210624
*/
LPAD( case 
when ccf1.dias != 0 and (nvl(nvl(vaca.num_dias_vac,0),0) != 0 or nvl(kardexlr.num_dias_novlicrem,0) != 0) then ceil( ( nvl(ccf1.ibc,0) / ccf1.dias * nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0) )-0.5 )
when nvl(nvl(vaca.num_dias_vac,0),0) != 0 and nvl(kardexlr.num_dias_novlicrem,0) != 0  then ceil( nvl(ccf1.ibc,0) / 30 * nvl(30-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0),0) )
when nvl(nvl(vaca.num_dias_vac,0),0) != 0  then ceil( nvl(ccf1.ibc,0) / 30 * nvl(30-nvl(vaca.num_dias_vac,0),0) )
when nvl(kardexlr.num_dias_novlicrem,0) != 0  then ceil( nvl(ccf1.ibc,0) / 30 * nvl(30-nvl(kardexlr.num_dias_novlicrem,0),0) )  
else nvl(ccf1.ibc,0) end ,9,0) AS C45,


rpad( case when nvl(pension2.tarifa,0) = 0 then '0.0' when nvl(pension2.tarifa,0) < 1 then '0' else '' end || + nvl(pension2.tarifa,0) ,7,0) as C46,
--lPAD( ceil( ((nvl(pension2.aporte,0) + nvl(pension2.aporte_patrono,0)) - (ceil((nvl(pension2.aporte,0) + nvl(pension2.aporte_patrono,0))/30*nvl(nvl(vaca.num_dias_vac,0),0)/100)*100) - (ceil((nvl(pension2.aporte,0) + nvl(pension2.aporte_patrono,0))/30*nvl(nvl(kardex2.num_dias_novkar,0),0)/100)*100) )/100)*100 ,9,0) AS C47,
LPAD( ceil( case 
when nvl(vaca.num_dias_vac,0) != 0 then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(kardex2.num_dias_novkar,0) != 0  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(pension1.dias-nvl(kardex3.num_dias_novlicmat,0),0) != 30  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(kardex4.cantidad,0) != 0  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(kardexlr.num_dias_novlicrem,0) != 0  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
else nvl(pension2.aporte,0) + nvl(pension2.aporte_patrono,0) end /100)*100 ,9,0) as C47,
lPAD(nvl(aporvol.valor_liquidado,0),9,0) AS C48,
lpad(0,9,0) as C49,
LPAD( ceil( case 
when nvl(pension1.dias-nvl(vaca.num_dias_vac,0),0) != 30 then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(pension1.dias-nvl(kardex2.num_dias_novkar,0),0) != 30  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(pension1.dias-nvl(kardex3.num_dias_novlicmat,0),0) != 30  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(kardex4.cantidad,0) != 0  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
when nvl(kardexlr.num_dias_novlicrem,0) != 0  then nvl(riesgo1.ibc,0) * nvl(pension2.tarifa,0)
else nvl(pension2.aporte,0) + nvl(pension2.aporte_patrono,0) end /100)*100 ,9,0) as C50,

--lpad(nvl(pension3.aporte_fsp,0),9,0) as c51,
LPAD( case 
when nvl(vaca.num_dias_vac,0) != 0 and nvl(pension3.aporte_fsp,0) != 0 then ceil( (nvl(riesgo1.ibc,0) * 0.005) / 100)*100
when nvl(kardex2.num_dias_novkar,0) != 0 and nvl(pension3.aporte_fsp,0) != 0 then ceil( (nvl(riesgo1.ibc,0) * 0.005) / 100)*100
when nvl(kardex3.num_dias_novlicmat,0) != 0 and nvl(pension3.aporte_fsp,0) != 0 then ceil( (nvl(riesgo1.ibc,0) * 0.005) / 100)*100
when nvl(kardex4.cantidad,0) != 0 and nvl(pension3.aporte_fsp,0) != 0 then ceil( (nvl(riesgo1.ibc,0) * 0.005) / 100)*100
when nvl(kardexlr.num_dias_novlicrem,0) != 0 and nvl(pension3.aporte_fsp,0) != 0 then ceil( (nvl(riesgo1.ibc,0) * 0.005) / 100)*100
else nvl(pension3.aporte_fsp,0) end ,9,0) as C51,
--lpad(nvl(pension3.aporte,0) - nvl(pension3.aporte_fsp,0) ,9,0) as c52,
LPAD( case 
when nvl(vaca.num_dias_vac,0) != 0 and nvl(pension3.aporte_fsp,0) != 0  then (ceil( (nvl(riesgo1.ibc,0) * ( nvl(pension3.tarifa,0) - 0.005 ) ) / 100)*100) 
when nvl(kardex2.num_dias_novkar,0) != 0 and nvl(pension3.aporte_fsp,0) != 0   then (ceil( (nvl(riesgo1.ibc,0) * ( nvl(pension3.tarifa,0) - 0.005 ) ) / 100)*100) 
when nvl(kardex3.num_dias_novlicmat,0) != 0 and nvl(pension3.aporte_fsp,0) != 0   then (ceil( (nvl(riesgo1.ibc,0) * ( nvl(pension3.tarifa,0) - 0.005 ) ) / 100)*100) 
when nvl(kardex4.cantidad,0) != 0 and nvl(pension3.aporte_fsp,0) != 0   then (ceil( (nvl(riesgo1.ibc,0) * ( nvl(pension3.tarifa,0) - 0.005 ) ) / 100)*100) 
when nvl(kardexlr.num_dias_novlicrem,0) != 0 and nvl(pension3.aporte_fsp,0) != 0   then (ceil( (nvl(riesgo1.ibc,0) * ( nvl(pension3.tarifa,0) - 0.005 ) ) / 100)*100) 
else nvl(pension3.aporte,0) - nvl(pension3.aporte_fsp,0) end ,9,0) as C52,
rpad(0,9,0) as c53,

rpad( case when nvl(salud1.tarifa,0) = 0 then '0.0' when nvl(salud1.tarifa,0) < 1 then '0' else '' end || + nvl(salud1.tarifa,0) ,7,0) as c54,
--lPAD( ceil( ((nvl(salud1.aporte,0) + nvl(salud1.aporte_patrono,0)) - (ceil((nvl(salud1.aporte,0) + nvl(salud1.aporte_patrono,0))/30*nvl(nvl(vaca.num_dias_vac,0),0)/100)*100) - (ceil((nvl(salud1.aporte,0) + nvl(salud1.aporte_patrono,0))/30*nvl(nvl(kardex2.num_dias_novkar,0),0)/100)*100) )/100)*100 ,9,0) AS c55,
LPAD( ceil( case 
when nvl(vaca.num_dias_vac,0) != 0 then nvl(riesgo1.ibc,0) * salud1.tarifa
when nvl(kardex2.num_dias_novkar,0) != 0  then nvl(riesgo1.ibc,0) * salud1.tarifa
when nvl(kardex3.num_dias_novlicmat,0) != 0  then nvl(riesgo1.ibc,0) * salud1.tarifa
when nvl(kardex4.cantidad,0) != 0  then nvl(riesgo1.ibc,0) * salud1.tarifa
when nvl(kardexlr.num_dias_novlicrem,0) != 0  then nvl(riesgo1.ibc,0) * salud1.tarifa
else nvl(salud1.aporte,0) + nvl(salud1.aporte_patrono,0) end /100)*100 ,9,0) as C55,

lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( nvl(riesgo1.aporte_patrono,0) ,9,0) as c63,
--lpad( ceil( ( nvl(riesgo1.aporte_patrono,0)/30*(nvl(riesgo1.dias,0)) )/100)*100 ,9,0) as c63,
rpad( case when nvl(ccf1.tarifa,0) = 0 then '0.0' when nvl(ccf1.tarifa,0) < 1 then '0' else '' end || + nvl(ccf1.tarifa,0) ,7,0) AS C64,
--lpad( nvl(ccf1.aporte_patrono,0) ,9,0) as c65,
lpad( (case when nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) != 0 and ccf1.dias != 0 then ceil( ( (ccf1.ibc/ccf1.dias*(nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0)))*nvl(ccf1.tarifa,0)  ) /100)*100 else nvl(ccf1.aporte_patrono,0) end) ,9,0) as c65,
rpad( case when nvl(sena1.tarifa,0) = 0 then '0.0' when nvl(sena1.tarifa,0) < 1 then '0' else '' end || + nvl(sena1.tarifa,0) ,7,0) as C66,
--lpad( nvl(sena1.aporte_patrono,0) ,9,0) as c67,
lpad( (case when nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) != 0 and ccf1.dias != 0 then ceil( ( (sena1.ibc/ccf1.dias*(nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0)))*nvl(sena1.tarifa,0)  ) /100)*100 else nvl(sena1.aporte_patrono,0) end) ,9,0) as c67,
rpad( case when nvl(icbf1.tarifa,0) = 0 then '0.0' when nvl(icbf1.tarifa,0) < 1 then '0' else '' end || + nvl(icbf1.tarifa,0) ,7,0) as C68,
--lpad( nvl(icbf1.aporte_patrono,0) ,9,0) as c69,
lpad( (case when nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) != 0 and ccf1.dias != 0 then ceil( ( (icbf1.ibc/ccf1.dias*(nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0)))*nvl(icbf1.tarifa,0)  ) /100)*100 else nvl(icbf1.aporte_patrono,0) end) ,9,0) as c69,
rpad( case when nvl(esap1.tarifa,0) = 0 then '0.0' when nvl(esap1.tarifa,0) < 1 then '0' else '' end || + nvl(esap1.tarifa,0) ,7,0) as C70,
--lpad( nvl(esap1.aporte_patrono,0) ,9,0) as c71,
lpad( (case when nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) != 0 and ccf1.dias != 0 then ceil( ( (nvl(esap1.ibc,0)/ccf1.dias*(nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0)))*nvl(esap1.tarifa,0)  ) /100)*100 else nvl(esap1.aporte_patrono,0) end) ,9,0) as c71,
rpad( case when nvl(men1.tarifa,0) = 0 then '0.0' when nvl(men1.tarifa,0) < 1 then '0' else '' end || + nvl(men1.tarifa,0) ,7,0) as C72,
--lpad( nvl(men1.aporte_patrono,0) ,9,0) as c73,
lpad( (case when nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) != 0 and ccf1.dias != 0 then ceil( ( (nvl(men1.ibc,0)/ccf1.dias*(nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0)))*nvl(men1.tarifa,0)  ) /100)*100 else nvl(men1.aporte_patrono,0) end) ,9,0) as c73,
'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
case when pension.id_tipo_aporte != 1 then '1' else ' ' end  AS C79,

case 
when tab5.fecha_ingreso_correc is not null then to_char(tab5.fecha_ingreso_correc,'yyyy-mm-dd')
when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(tab5.fecha_ingreso,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C80,--ING
case when novretiro.num_doc is not null and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(tab5.fecha_termina,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C81,--RET
  
case when ascenso.fecha_inicial
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(ascenso.fecha_inicial,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C82,--VSP
  
-- Dias de comision otra entidad y retirado - 20171011
case when nvl(novper.dias,0) != 0 then to_char(novper.fecha_ini,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C83,--SLN
case when nvl(novper.dias,0) != 0 then to_char(novper.fecha_fin,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE

RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA

RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR
  
RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT

RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
  
LPAD( case 
when ccf1.dias != 0 and (nvl(nvl(vaca.num_dias_vac,0),0) != 0 or nvl(kardexlr.num_dias_novlicrem,0) != 0) then ceil( ( nvl(ccf1.ibc,0) / ccf1.dias * nvl(ccf1.dias-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0) ,0) )-0.5 )
when nvl(nvl(vaca.num_dias_vac,0),0) != 0 and nvl(kardexlr.num_dias_novlicrem,0) != 0  then ceil( nvl(ccf1.ibc,0) / 30 * nvl(30-nvl(vaca.num_dias_vac,0)-nvl(kardexlr.num_dias_novlicrem,0),0) )
when nvl(nvl(vaca.num_dias_vac,0),0) != 0  then ceil( nvl(icbf1.ibc,0) / 30 * nvl(30-nvl(vaca.num_dias_vac,0),0) ) 
when nvl(kardexlr.num_dias_novlicrem,0) != 0  then ceil( nvl(ccf1.ibc,0) / 30 * nvl(30-nvl(kardexlr.num_dias_novlicrem,0),0) )
else nvl(icbf1.ibc,0) end ,9,0) AS C95,--IBC parafiscales
LPAD(  case when  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) < 300 then  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

/*
left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
correcion de fecha segun tabla - 20210329
*/
left join (
  SELECT
  nomcor.fecha_ingreso as fecha_ingreso_correc,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  left join no_nombra_correc nomcor 
  on nomcor.id_tipo_doc = aut.id_tipo_doc
  and nomcor.num_doc = aut.num_doc
  and nomcor.id_periodo = $id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad,
  max(tab0.fecha_inicial) as fecha_inicial
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 2 - 20210329 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad,
  max(tab0.fecha_inicial) as fecha_inicial
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 2
  and(
    tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  or
    tab0.id_periodo = $id_periodo
  )
  group by tab0.num_doc
) novretiro ON novretiro.num_doc = tab0.num_doc

/*
Variacion de salario
*/
left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
        /*
        Novedad de encargo
        Tiene en cuenta todo el tiempo de la novedad desde empieza hasta que termina - 20130917
        */
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 4, 7 ) 
        and tab0.estado = 1
        and( 
          tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_terminacion  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_inicial and tab0.fecha_terminacion
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_inicial and tab0.fecha_terminacion
        )
        group by tab0.num_doc
        
        union 
        /*
        Identifica bonificacion por servicios
        */
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=0 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        /*
        Verifica horas extras en la tabla
        */
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
        
        union 
        
        --OJO:Id en el codigo para marca concep 1003, 1021, 1023 y 4001 - 20130826
        --Urgente cambiar por parametrizar agrupacion por conceptos - 20130826
        --Se cambia por agrupacion 105-CONCEPTOS DE VARIACIÓN TRANSITORIA PARA LA PLANILLA - 20130902
        select tab0.num_doc,count(tab0.id_liquida_nomina) as cantidad
        from no_liquida_nomina tab0
        where 
        --tab0.id_periodo = $id_periodo
        --and 
        (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
        and id_concep_nomina in (    
            /*
            tab0.id_concep_nomina = 3 
            or
            tab0.id_concep_nomina = 21 
            or
            tab0.id_concep_nomina = 23 
            or
            tab0.id_concep_nomina = 401 
            */
            (select distinct id_concep_nomina from no_agrup_deta where id_agrup_concepto = 105) 
        )
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    /*Se cambia validacion para tener encuenta dias realmente de la novedad segun prorroga - 20150223*/
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANT, 
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    sum( case when tab0.num_dias > 0 and tab0.prorroga = 1 then 1 when tab0.num_dias > (tab1.dias_patrono) and tab0.prorroga = 0 then 1 else 0 end) as CANTIDAD,
    /*nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novkar*/
    case 
    when max((select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo)) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0)
    when nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) > 30
    then 30 else nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) end as num_dias_novkar_ant,
    /*Toma dias correctos de mes actual y fechas anteriores, calcula cada uno por independiente, al final valida si supera 30 dias - 20190610*/
    /*Incidente 14326, Se suspende sumar dia 31 por conflicto con incapacidades - 20190926*/ 
    /*Toma maximo hasta fecha del mes actual - 20191023*/ 
    case 
    when nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo_actual)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end 
        
        -
        
        /*Restar dias 29 y 30 si aplica apra febrero - 20230413::LAVILA*/
        (
            case when EXTRACT(MONTH FROM tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end)) <= 2 and EXTRACT(MONTH FROM (tab0.fecha_fin) ) >= 3
            then 30 - EXTRACT( DAY FROM last_day( TO_DATE('01/02/'||(select id_anhos from no_periodo where id_periodo = $id_periodo),'dd/mm/yyyy') ) )
            else 0 end            
        )
        
    ),0) > 30
    then 30
    else nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end
        
        -
        
        /*Restar dias 29 y 30 si aplica apra febrero - 20230413::LAVILA*/
        (
            case when EXTRACT(MONTH FROM tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end)) <= 2 and EXTRACT(MONTH FROM (tab0.fecha_fin) ) >= 3
            then 30 - EXTRACT( DAY FROM last_day( TO_DATE('01/02/'||(select id_anhos from no_periodo where id_periodo = $id_periodo),'dd/mm/yyyy') ) )
            else 0 end            
        )
        
    ),0) end as num_dias_novkar
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    Toma todos los periodos del mes segun filtro - 20191106
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    /*
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      and 
      (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    )
    */
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select 
    sum(liq.valor_liquidado) as valor_liquidado,
    tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, 
    max(tab0.fecha_ini) as fecha_ini2, 
    case when max(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicmat
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    left join no_liquida_nomina liq on tab0.num_doc = liq.num_doc and tab0.id_tipo_doc = liq.id_tipo_doc
    and liq.id_periodo = $id_periodo and liq.id_concep_nomina in (         
         select ka.id_concep_nomina from no_concep_ka ka where ka.id_tip_nov_ka in (select distinct id_nov_ka_licmat from no_param_concep)    
    )
    
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      TRUNC(LAST_DAY( TO_DATE('01/'|| (select LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS from NO_PERIODO where ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between TAB0.FECHA_INI and TAB0.FECHA_FIN
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
Toma todos los dias de meses anteriores hasta el mes actual - 20191105
Incidente #39574, se valida que si es prorroga no descuente el dia de patrono - 20250312::LAVILA
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD2,    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga = 0 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as CANTIDAD_MES,
                        
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini+ (case when tab0.prorroga = 0 then tab1.dias_patrono else 0 end), ( case when tab0.fecha_fin >= last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy'))
        then last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')) - 1 else tab0.fecha_fin end ) )  ),0)  as CANTIDAD,    
            
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') and max(fecha_fin) >= to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 
    
    and ( 
        tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        /*
        Validacion para que tome el registro en el periodo de la novedad - 20130820
        */
        or tab0.id_periodo = $id_periodo
    )

    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
/*Licencia remunerada descuenta todos los días de meses anteriores - 20190905*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem_ant,
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
*/
left join
(
    select 

   id_tipo_doc,                  
   num_doc,
   sum( nvl(CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(dias_vaciones) as num_dias_vac_ant,
   sum(dias_vaciones) - sum(dias_feb) as num_dias_vac,
   max(fecha_ini) as fecha_ini2, 
   case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
   max(fecha_fin) as fecha_fin2,
   case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin

   from( 

       select
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
       --Para el mes de febrero se restan dias 2 o 1 segun año, ya que estos dias se pagan como laborados - 20170314                 
       (case 
          when (select id_meses from no_periodo where id_periodo = $id_periodo) = 2 and max(tab0.fecha_ini) < (select fecha_fin from no_periodo where id_periodo = $id_periodo) and max(tab0.fecha_fin) > (select fecha_fin from no_periodo where id_periodo = $id_periodo) 
          then case when to_number((select to_char(fecha_fin,'dd') from no_periodo where id_periodo = $id_periodo)) = 28 then 2 else 1 end
          else 0 end) * (case  when tipnov.operador  = 1 then 1 else (-1) end) as dias_feb,     
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   ) 

   group by id_tipo_doc, num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo, afi.fecha_ingreso, afi.fecha_retiro, afilia.id_tap, afi.id_tipo_aporte 
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    left join no_afilia_fondo afi on afi.id_tipo_doc = afilia.id_tipo_doc and afi.num_doc = afilia.num_doc and afi.id_clase_fondo = afilia.id_clase_fondo and afi.id_mae_fondos = afilia.id_mae_fondos
    where afilia.id_clase_fondo = 1 
    
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afi.fecha_ingreso and nvl( afi.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'                    
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo, afi.fecha_ingreso, afi.fecha_retiro, afilia.id_tae
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    left join no_afilia_fondo afi on afi.id_tipo_doc = afilia.id_tipo_doc and afi.num_doc = afilia.num_doc and afi.id_clase_fondo = afilia.id_clase_fondo and afi.id_mae_fondos = afilia.id_mae_fondos
    where afilia.id_clase_fondo = 2  
    
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afi.fecha_ingreso and nvl( afi.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo,
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, afilia.fecha_ingreso
    from no_afilia_fondo afilia
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    where afilia.id_clase_fondo = 4 and afilia.estado = 1
)ccf0 ON ccf0.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc
        
left join(
    select
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(tab0.fecha_ini) as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as dias
    from(
        select 
        
        nov.id_tipo_doc,
        nov.num_doc,
        nov.id_novedad,
        nov.fecha_inicial,
        nov.fecha_terminacion,
        nom.fecha_termina,
        
        case when nov.fecha_inicial > (select fecha_ini from no_periodo where id_periodo = $id_periodo) 
        then nov.fecha_inicial 
        else (select fecha_ini from no_periodo where id_periodo = $id_periodo) end as fecha_ini,
        nom.fecha_termina as fecha_fin
        
        from no_novedad_personal nov
        
        join no_nombramiento_v nom
        on nov.id_tipo_doc = nom.id_tipo_doc
        and nov.num_doc = nom.num_doc
        
        where 
        nov.estado = 1
        and nov.id_novedad = 8
        and (
            (select fecha_ini from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
            or    
            (select fecha_fin from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
        )
        and (
            nom.fecha_termina between (select fecha_ini from no_periodo where id_periodo = $id_periodo) and (select fecha_fin from no_periodo where id_periodo = $id_periodo)
        )
        
    )tab0  
    
    group by 
    tab0.id_tipo_doc,
    tab0.num_doc 
)novper
on novper.id_tipo_doc = tab0.id_tipo_doc and novper.num_doc = tab0.num_doc 


left join(

        select 
        tab0.id_tipo_doc,
        tab0.num_doc,
        count(tab0.id_liquida_nomina) as cantidad,
        sum(tab0.valor_liquidado) as valor_liquidado
        from no_liquida_nomina tab0
        where 
        --tab0.id_periodo = $id_periodo
        --and 
        (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
        and id_concep_nomina in (   
            (select distinct id_concep_nomina from no_agrup_deta where id_agrup_concepto = 130) 
        )
        group by tab0.id_tipo_doc, tab0.num_doc

)aporvol
on aporvol.id_tipo_doc = tab0.id_tipo_doc 
and aporvol.num_doc = tab0.num_doc 


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo_actual) ,'dd/mm/yyyy') ))
  )
)
and salud1.dias > 0
and nvl(vaca.num_dias_vac,0) < 30
and nvl(kardex2.num_dias_novkar,0) < 30
and nvl(kardex3.num_dias_novlicmat,0) < 30
and nvl(kardex4.cantidad,0) < 30 
and nvl(kardexlr.num_dias_novlicrem,0) < 30 

and tab0.num_doc not in (
    
    select 
    nom.num_doc 
    from no_nombramiento nom
    
    left join no_periodo_v per
    on per.id_periodo = $id_periodo
    
    left join no_novedad_personal nov
    on nov.id_tipo_doc = nom.id_tipo_doc
    and nov.num_doc = nom.num_doc
    and nov.id_novedad = 1
    
    where
    nom.estado = 1
    and nov.estado = 1
    and nom.fecha_ingreso BETWEEN per.fecha_ini and per.fecha_fin
    and nov.fecha_terminacion BETWEEN per.fecha_ini and per.fecha_fin

)

union


/*
* Funcionarios con novedades de kardex que afecte antiguedad - SLN
* Para la fecha fin se deja que tenga valor segun dias ed aporte SLN desde el 1 del mes - 20180808
*/
select 

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl(tab4.primer_nombre,' '),20,' ') AS C13,
RPAD(nvl(tab4.segundo_nombre,' '),30,' ') AS C14,
case when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C15,
case when tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C16,
' ' AS C17,
' ' AS C18,
' ' AS C19,
' ' AS C20,
--No La novedad SLN no debe de combinarse con otro tipo de novedad  - 20161122
case when ascenso.cantidad>0 then ' ' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 then ' ' else ' 'end AS C23,
case when kardex1.cantidad>0 and ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then 'X' when kardex1.cantidad>0 and  nvl(max_marca,0) = 1 and nvl(max_marca_susinc,0) = 0 then 'C' else ' ' end AS C24,
case when kardex2.cantidad>0 then ' ' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then ' ' else ' 'end AS C27,
' ' AS C28,
' ' AS C29,
LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
rpad(nvl(pension.codigo,' '),6,' ') as c31,
rPAD(' ',6,' ') AS C32,
rPAD(nvl(salud.codigo,' '),6,' ') AS C33,
rpad(' ',6,' ') as c34,
rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,
lpad(30-nvl(pension1.dias,0) - nvl(tab5.dias_ingreso,0) - nvl(30- case when to_number(to_char(tab5.fecha_termina,'dd')) != 31 then to_number(to_char(tab5.fecha_termina,'dd')) else 30 end ,0) ,2,0) as c36,
lpad(30-nvl(salud1.dias,0) - nvl(tab5.dias_ingreso,0) - nvl(30- case when to_number(to_char(tab5.fecha_termina,'dd')) != 31 then to_number(to_char(tab5.fecha_termina,'dd')) else 30 end ,0) ,2,0) as c37,
LPAD(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - nvl(30- case when to_number(to_char(tab5.fecha_termina,'dd')) != 31 then to_number(to_char(tab5.fecha_termina,'dd')) else 30 end ,0) ,2,0) AS C38,
--39 dias parafiscales
LPAD(30-nvl(salud1.dias,0) - nvl(tab5.dias_ingreso,0) - nvl(30- case when to_number(to_char(tab5.fecha_termina,'dd')) != 31 then to_number(to_char(tab5.fecha_termina,'dd')) else 30 end ,0) ,2,0) AS C39,
LPAD(nvl(tab6.asignacion_basica,0),9,0) AS C40,
' ' AS C41,
-- Se validan los dias de retiro del funionario - 20141007
-- Sin redondeo al 1000 mil - 20170524
LPAD(  case when (30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) != 0 then ceil( (nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ))/1)*1 else ceil( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) ) end ,9,0) AS C42,
LPAD(  case when (30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) != 0 then ceil( (nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ))/1)*1 else ceil( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) ) end ,9,0) AS C43,
LPAD(  case when (30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) != 0 then ceil( (nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ))/1)*1 else ceil( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) ) end ,9,0) AS C44,
LPAD(  case when (30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) != 0 then ceil( (nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ))/1)*1 else ceil( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) ) end ,9,0) AS C45,
-- Se debe calcular a partir de octubre la tarifa del patrono - 20131028
-- No debe llevar registro de pension - 20140729
-- Se coloca que para CYC, si debe llevar registro de pension - 20170127
--rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as c46,
--rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0) as C46,
case when 4 in (1,4) then (rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0)) else rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) end as C46,
--lPAD(nvl(null,0) + nvl(null,0),9,0) AS C47,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(pension2.dias-nvl(kardex4.cantidad,0),0))  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,-2) ,9,0) as c47,
case when 4 in (4) then (lpad(nvl(pension1.aporte_patrono_licnorem,0),9,0)) else lPAD(nvl(null,0) + nvl(null,0),9,0) end as c47,
lPAD(0,9,0) AS C48,
lpad(0,9,0) as c49,
lpad(nvl(null,0) + nvl(null,0),9,0) as C50,
lpad(nvl(null,0),9,0) as c51,
lpad(nvl(null,0) - nvl(null,0) ,9,0) as c52,
rpad(0,9,0) as c53,
rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,7,0) as c54,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0)- (tab5.dias_retiro) )  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,-2) ,9,0) as c55,
lpad(nvl(salud1.aporte_patrono_licnorem,0),9,0) as c55,
lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,9,0) as C61,
lpad(0,9,0) as C62,
lpad( nvl(null,0) ,9,0) as c63,
rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) AS C64,
lpad( nvl(null,0) ,9,0) as c65,
rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as C66,
lpad( nvl(null,0) ,9,0) as c67,
rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as C68,
lpad( nvl(null,0) ,9,0) as c69,
rpad('0.0',7,0) as c70,
lpad(0,9,0) as c71,
rpad('0.0',7,0) as c72,
lpad(0,9,0) as C73,
'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
RPAD(to_char(' '),1,' ') AS C79,

RPAD(to_char(' '),10,' ') AS C80,--ING
RPAD(to_char(' '),10,' ') AS C81,--RET
RPAD(to_char(' '),10,' ') AS C82,--VSP

case when kardex1.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex1.fecha_ini,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C83,--SLN

case when kardex1.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex1.fecha_fin,'yyyy-mm-dd')
when kardex1.fecha_fin < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') 
    then to_char( (kardex1.fecha_ini+(30-nvl(pension1.dias,0) - nvl(30- case when to_number(to_char(tab5.fecha_termina,'dd')) != 31 then to_number(to_char(tab5.fecha_termina,'dd')) else 30 end ,0))) ,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE
RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA
RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR
RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT
RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
LPAD(  case when (30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ) != 1 then ceil( (nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0) - nvl(tab5.dias_ingreso,0) - (tab5.dias_retiro) ))/1)*1 else ceil( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0)  - nvl(tab5.dias_ingreso,0)- (tab5.dias_retiro) ) ) end ,9,0) AS C95,--IBC parafiscales
LPAD(  case when  nvl(tab5.horas_mes,0)+NVL(0,0) < 300 then  nvl(tab5.horas_mes,0)+NVL(0,0) else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

/*left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
Se modifica fecha_termina para no tomarla en cuenta si no es en la fecha del periodo  - 20210128
*/
left join (
  SELECT
  case when aut.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ( to_char(aut.fecha_ingreso,'dd') - 1 ) else 0 end as dias_ingreso,
  
  case when aut.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then (30 - to_char(aut.fecha_termina,'dd') ) else 0 end as dias_retiro,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC
   ) AS rn
  from (
  
    select
    nom.ID_NOMBRAMIENTO,
    nom.id_tipo_doc,
    nom.num_doc,
    nom.id_dp,
    nom.contrato,
    nom.doc_nombra,
    nom.fecha_nombra,
    nom.fecha_ingreso,
    case when nom.fecha_termina between (select fecha_ini from no_periodo where id_periodo = $id_periodo) and (select fecha_fin from no_periodo where id_periodo = $id_periodo) 
        then nom.fecha_termina else null end as fecha_termina,
    nom.dias_mes,
    nom.horas_mes,
    nom.estado,
    nom.asignacion_basica,
    nom.id_sa_niv2,
    nom.id_periodo,
    nom.id_clase_planta,
    nom.fecha_retiro,
    nom.solucion_continuidad,
    nom.no_acta,
    nom.fecha_acta
    from no_nombramiento nom  
    
  ) aut
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
    
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 7 )  
        and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=1 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, max(tab1.suspension) as max_marca,
    max(fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
    )
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1
    
    and tab0.estado = 1 and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    /*
    Se cambia id_tip_nov_ka = 3 por 2 INCI
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    
    and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 and tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*
Incapacidad -> Suspensión por Incapacidad  - 20150312
*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as max_marca_susinc
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
    and tab0.id_tip_nov_ka = (select no_param_concep.id_nov_ka_susinc from no_param_concep where no_param_concep.id_param_concep = 1)
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex5 ON kardex5.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD
    from no_novedad_vac tab0
    where tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 1 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    */--and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 2 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    */
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo,
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/    
    , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
    , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.porcentaje_patrono/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC/*,
    tab0.tarifa/100 as TARIFA, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

/* Tomar aporte_patrono_licnorem de la tabla de aportes - 20150730*/
left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.porcentaje_patrono)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
    , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc
        
left join(
    select
    tab0.id_tipo_doc,
    tab0.num_doc,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as dias
    from(
        select 
        
        nov.id_tipo_doc,
        nov.num_doc,
        nov.id_novedad,
        nov.fecha_inicial,
        nov.fecha_terminacion,
        nom.fecha_termina,
        
        case when nov.fecha_inicial > (select fecha_ini from no_periodo where id_periodo = $id_periodo) 
        then nov.fecha_inicial 
        else (select fecha_ini from no_periodo where id_periodo = $id_periodo) end as fecha_ini,
        nom.fecha_termina as fecha_fin
        
        from no_novedad_personal nov
        
        join no_nombramiento_v nom
        on nov.id_tipo_doc = nom.id_tipo_doc
        and nov.num_doc = nom.num_doc
        
        where 
        nov.estado = 1
        and nov.id_novedad = 8
        and (
            (select fecha_ini from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
            or    
            (select fecha_fin from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
        )
        and (
            nom.fecha_termina between (select fecha_ini from no_periodo where id_periodo = $id_periodo) and (select fecha_fin from no_periodo where id_periodo = $id_periodo)
        )
        
    )tab0  
    
    group by 
    tab0.id_tipo_doc,
    tab0.num_doc 
)novper
on novper.id_tipo_doc = tab0.id_tipo_doc and novper.num_doc = tab0.num_doc


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    /*
    Se cambia fecha de termina(ultimo dia de trabajo) por fecha de retiro, 
    para tener encuenta si trabajo en el periodo al menos 1 dia - 20130828                    
    */
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo_actual) ,'dd/mm/yyyy') ))
  )
)
and kardex1.cantidad > 0 
and nvl(novper.dias,0) = 0 
and (30-nvl(pension1.dias,0) - nvl(tab5.dias_ingreso,0) - nvl(30- case when to_number(to_char(tab5.fecha_termina,'dd')) != 31 then to_number(to_char(tab5.fecha_termina,'dd')) else 30 end ,0)) > 0

union


/*
* UPC Registros para afiliaciones familiares
* Se deja en el campo c37 que tenga los dias de salud, antes 0 - 20150918
*/
select 

1 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
rpad(to_char(upcadic.num_doc),16,' ') as c4,
rpad(to_char(upcadic.num_doc_bene),16,' ') as c4a,
'40' AS C5,
'00' AS C6,
' ' AS C7,
' ' as c8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(upcadic.primer_apellido_bene,' '),20,' ') AS C11a,
rpad(nvl(upcadic.segundo_apellido_bene,' '),30,' ') as c12,
rpad(nvl(upcadic.primer_nombre_bene,' '),20,' ') as c13,
RPAD(nvl(upcadic.segundo_nombre_bene,' '),30,' ') AS C14,
' ' as c15,
' ' AS C16,
' ' AS C17,
' ' AS C18,
' ' AS C19,
' ' AS C20,
' ' AS C21,
' ' AS C22,
' ' AS C23,
' ' AS C24,
' ' AS C25,
' ' AS C26,
' ' AS C27,
' ' AS C28,
' ' as c29,
LPAD('0',2,'0') AS C30,
rpad(nvl(null,' '),6,' ') as c31,
rPAD(' ',6,' ') AS C32,
rPAD(nvl(salud.codigo,' '),6,' ') AS C33,
rpad(' ',6,' ') as c34,
rpad(nvl(null,' '),6,' ') as c35,
LPAD(nvl(null,0),2,0) AS C36,
--lpad(nvl(salud1.dias,0),2,0) as c37,
case when $entidad_cliente in (0) then lpad(nvl(0,0),2,0) else lpad(nvl(salud1.dias,0),2,0) end AS c37,
--lpad(nvl(0,0),2,0) as c37,
lpad(nvl(null,0),2,0) as c38,
LPAD(nvl(null,0),2,0) AS C39,
LPAD(0,9,0) AS C40,
'UPC' AS C41,
LPAD(0,9,0) AS C42,
LPAD(0,9,0) AS C43,
LPAD(0,9,0) AS C44,
LPAD(0,9,0) AS C45,
rpad('0.0',7,0) as c46,
lPAD(0,9,0) AS C47,
lPAD(0,9,0) AS C48,
lpad(0,9,0) as c49,
lpad(0,9,0) as C50,
lpad(0,9,0) as c51,
lpad(0,9,0) as c52,
rpad(0,9,0) as c53,
rpad('0.0',7,0) as c54,
lpad(0,9,0) as c55,
lpad( case when '40' = '40' then upcadic.valor_upc else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
rpad('0.0',9,0) as C61,
lpad(0,9,0) as C62,
lpad(0,9,0) as c63,
rpad('0.0',7,0) AS C64,
lpad(0,9,0) as c65,
rpad('0.0',7,0) as C66,
lpad(0,9,0) as c67,
rpad('0.0',7,0) as C68,
lpad(0,9,0) as c69,
rpad('0.0',7,0) as c70,
lpad(0,9,0) as c71,
rpad('0.0',7,0) as c72,
lpad(0,9,0) as C73,
'CC' AS C74,
RPAD(to_char(upcadic.num_doc),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(' ',6,' ') AS C77,
RPAD(to_char(' '),1,' ') AS C78,
RPAD(to_char(' '),1,' ') AS C79,

RPAD(to_char(' '),10,' ') AS C80,--ING
RPAD(to_char(' '),10,' ') AS C81,--RET
RPAD(to_char(' '),10,' ') AS C82,--VSP
RPAD(to_char(' '),10,' ') AS C83,--SLN
RPAD(to_char(' '),10,' ') AS C84,--SLN
RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE
RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA
RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR
RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT
RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
LPAD(0,9,0) AS C95,--IBC parafiscales
LPAD(  case when nvl(tab5.horas_mes,0)+NVL(0,0)  < 300 then nvl(tab5.horas_mes,0)+NVL(0,0)  else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(' '),7,' ') else '' end AS C98

from no_upc_adicional upcadic 

left join tipo_documento tdoc
on tdoc.id_tipo_doc = upcadic.id_tipo_doc

left join no_estado_func_v tab0 on upcadic.id_tipo_doc = tab0.id_tipo_doc and upcadic.num_doc = tab0.num_doc and tab0.periodo = $id_periodo
left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun

left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = upcadic.id_tipo_doc and tab4.num_doc = upcadic.num_doc

left join (
  SELECT
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = upcadic.id_tipo_doc 
and tab5.num_doc = upcadic.num_doc
and tab5.rn = 1

left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka=4 and tab0.estado = 1 
    and tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = upcadic.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 2 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    */
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'     
)salud ON salud.num_doc = upcadic.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension1 on pension1.num_doc = upcadic.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)salud1 ON salud1.num_doc = upcadic.num_doc

where upcadic.estado = 1

union

/*
* Funcionarios con novedades de vacaciones o LR - 20170308
* Se cambia campo C45 para que tome los dias de la autoliquidacion y no base 30-ccf1.dias, se agrega tambien a los calculos de parafiscales - 20190703
* Se cambia solo VACACIONES - 20210202::LAVILA
* Campo C45,C95 si no tiene IBC toma lo mismo que el C42 - 20210622::LAVILA
* Incidente #39277, Campo C46 y C54 complete tarifa segun corresponda a la liquidacion de aportes - 20250122::LAVILA
*/
select 

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl(tab4.primer_nombre,' '),20,' ') AS C13,
RPAD(nvl(tab4.segundo_nombre,' '),30,' ') AS C14,
case when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C15,
case when tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C16,
' ' AS C17,
' ' AS C18,
' ' AS C19,
' ' AS C20,
--No La novedad SLN no debe de combinarse con otro tipo de novedad  - 20161122
case when ascenso.cantidad>0 then ' ' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 then ' ' else ' 'end AS C23,
case when kardex1.cantidad>0 and ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then ' ' when kardex1.cantidad>0 and  nvl(max_marca,0) = 1 and nvl(max_marca_susinc,0) = 0 then ' ' else ' ' end AS C24,
case when kardex2.cantidad>0 then ' ' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then 'X' when kardexlr.cantidad>0 then 'L' else ' 'end AS C27,
' ' AS C28,
' ' AS C29,
--LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
LPAD('0',2,'0') AS C30,
rpad(nvl(pension.codigo,' '),6,' ') as c31,
rPAD(' ',6,' ') AS C32,
rPAD(nvl(salud.codigo,' '),6,' ') AS C33,
rpad(' ',6,' ') as c34,
rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) as c36,
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) as c37,
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) AS C38, 
--39 dias parafiscales
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) AS C39,
LPAD(nvl(tab6.asignacion_basica,0),9,0) AS C40,
' ' AS C41,
-- Se validan los dias de retiro del funionario - 20141007
LPAD(  case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) then ceil( ( (nvl(sm.valor_mensual,0)*25)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(pension1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C42,
LPAD(  case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) then ceil( ( (nvl(sm.valor_mensual,0)*25)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C43,

LPAD( case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) then ceil( ( (nvl(sm.valor_mensual,0)*25)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C44,
        
LPAD(  case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and nvl(ccf1.ibc,0) = 0 
        then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0
    then ceil( ( nvl(ccf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 
    else ceil( ( nvl(ccf1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C45,


-- Se debe calcular a partir de octubre la tarifa del patrono - 20131028
-- No debe llevar registro de pension - 20140729
-- Se coloca que para CYC, si debe llevar registro de pension - 20170127
--rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as c46,
--rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0) as C46,
--case when 4 in (4) then (rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0)) else rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) end as C46,
rpad( case when nvl(pension2.tarifa,0) = 0 then '0.0' when nvl(pension2.tarifa,0) < 1 then '0' else '' end || + nvl(pension2.tarifa,0) ,7,0) as C46,
--lPAD(nvl(null,0) + nvl(null,0),9,0) AS C47,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(pension2.dias-nvl(kardex4.cantidad,0),0))  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,-2) ,9,0) as c47,
lPAD( ceil( (ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(pension2.tarifa,0)/100)*100 ,9,0) as c47,
lPAD(0,9,0) AS C48,
lpad(0,9,0) as c49,

lPAD( ceil((  ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(pension2.tarifa,0)/100)*100 ,9,0) as C50,
lPAD( ceil((( ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(0.005,0)) /100)*100  *(case when nvl(pension3.aporte_fsp,0) != 0 then 1 else 0 end) ,9,0) as c51,
lpad( ceil((((ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(pension3.tarifa,0)) - ((ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                                                                                                                                            then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                                                                                                                                            )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(0.005,0)) )/100)*100 *(case when nvl(pension3.aporte_fsp,0) != 0 then 1 else 0 end) ,9,0) as c52,

rpad(0,9,0) as c53,
--rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,7,0) as c54,
rpad( case when nvl(salud1.tarifa,0) = 0 then '0.0' when nvl(salud1.tarifa,0) < 1 then '0' else '' end || + nvl(salud1.tarifa,0) ,7,0) as c54,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0)- (tab5.dias_retiro) )  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,-2) ,9,0) as c55,
lPAD( ceil( (ceil( (  ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        ) /30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(salud1.tarifa,0)/100)*100 ,9,0) as c55,
lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
--rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( nvl(0,0) ,9,0) as c63,
--lpad( ceil( ( nvl(riesgo1.aporte_patrono,0)/30*(vaca.num_dias_vac) )/100)*100 ,9,0) as c63,
rpad( case when nvl(ccf1.tarifa,0) = 0 then '0.0' when nvl(ccf1.tarifa,0) < 1 then '0' else '' end || + nvl(ccf1.tarifa,0) ,7,0) AS C64,
--lpad( nvl(ccf1.aporte_patrono,0) ,9,0) as c65,
lpad( ceil( ( ceil( ( nvl(ccf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(ccf1.tarifa,0)/100)*100 ,9,0) as c65,
rpad( case when nvl(sena1.tarifa,0) = 0 then '0.0' when nvl(sena1.tarifa,0) < 1 then '0' else '' end || + nvl(sena1.tarifa,0) ,7,0) as C66,
--lpad( nvl(sena1.aporte_patrono,0) ,9,0) as c67,
lpad( ceil( ( ceil( ( nvl(sena1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(sena1.tarifa,0)/100)*100 ,9,0) as c67,
rpad( case when nvl(icbf1.tarifa,0) = 0 then '0.0' when nvl(icbf1.tarifa,0) < 1 then '0' else '' end || + nvl(icbf1.tarifa,0) ,7,0) as C68,
--lpad( nvl(icbf1.aporte_patrono,0) ,9,0) as c69,
lpad( ceil( ( ceil( ( nvl(icbf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(icbf1.tarifa,0)/100)*100 ,9,0) as c69,
rpad( case when nvl(esap1.tarifa,0) = 0 then '0.0' when nvl(esap1.tarifa,0) < 1 then '0' else '' end || + nvl(esap1.tarifa,0) ,7,0) as C70,
--lpad( nvl(esap1.aporte_patrono,0) ,9,0) as c71,
lpad( ceil( ( ceil( ( nvl(esap1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(esap1.tarifa,0)/100)*100 ,9,0) as c71,
rpad( case when nvl(men1.tarifa,0) = 0 then '0.0' when nvl(men1.tarifa,0) < 1 then '0' else '' end || + nvl(men1.tarifa,0) ,7,0) as C72,
--lpad( nvl(men1.aporte_patrono,0) ,9,0) as c73,
lpad( ceil( ( ceil( ( nvl(men1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(men1.tarifa,0)/100)*100 ,9,0) as c73,
'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
RPAD(to_char(' '),1,' ') AS C79,

RPAD(to_char(' '),10,' ') AS C80,--ING
RPAD(to_char(' '),10,' ') AS C81,--RET
RPAD(to_char(' '),10,' ') AS C82,--VSP

RPAD(to_char(' '),10,' ') AS C83,--SLN
RPAD(to_char(' '),10,' ') AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE
RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA

/* Se omite fechas de lic remune con (1=0 and)  - 20190905 */ 
case when vaca.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(vaca.fecha_ini,'yyyy-mm-dd')
  when 1=0 and kardexlr.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardexlr.fecha_ini,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C89,--VAC-LR
case when vaca.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(vaca.fecha_fin,'yyyy-mm-dd')
  when 1=0 and kardexlr.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardexlr.fecha_fin,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C90,--VAC-LR

RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT
RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
LPAD(  case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and nvl(ccf1.ibc,0) = 0 
        then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( nvl(icbf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(icbf1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) as C95,--IBC parafiscales
LPAD(  case when nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0)  < 300 then  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

/*Validacion de smdlv para el tope de IBC de 25 maximo - 20190507*/
left join no_smdlv sm
on sm.vigencia = tab0.id_anhos

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

--left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
left join (
  SELECT
  case when aut.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then (30 - to_char(aut.fecha_termina,'dd') ) else 0 end as dias_retiro,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

/*Valores de ibc de vacaciones, sin AsigBasica - 20170705*/
left join(

    select 
    concep.num_doc,
    concep.id_tipo_doc,
    sum(nvl(concep.valor,0)) as valor 
     
    from no_concepto_func concep
    where 
    /*concep.num_doc = 39531961 
    and concep.id_tipo_doc = 1 
    and */
    concep.id_concep_nomina in ( (select ID_CONCEP_NOMINA from no_agrup_deta where ID_AGRUP_CONCEPTO = 39) ) 
    and concep.id_concep_nomina not in ( (select id_concep_basica from no_param_concep) ) 
    and concep.estado = 1 and concep.actual = 1 
    
    group by
    concep.num_doc,
    concep.id_tipo_doc
    
)tab66 ON tab66.id_tipo_doc = tab0.id_tipo_doc and tab66.num_doc = tab0.num_doc

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
    
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 7 )  
        and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=1 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, max(tab1.suspension) as max_marca,
    max(fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1
    
    and tab0.estado = 1 and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    /*
    Se cambia id_tip_nov_ka = 3 por 2 INCI
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    
    and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 and tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*
Incapacidad -> Suspensión por Incapacidad  - 20150312
*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as max_marca_susinc
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
    and tab0.id_tip_nov_ka = (select no_param_concep.id_nov_ka_susinc from no_param_concep where no_param_concep.id_param_concep = 1)
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex5 ON kardex5.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
/*Licencia remunerada descuenta todos los días de meses anteriores - 20190905*/
/*Se omite  desde ahora ya que es fila solo de vacacioes -20210202*/ 
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem_ant,
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where 
    1 = 0
    and tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
*/
left join
(
   select 
   
   max((SELECT
   max(perd.id_periodo)
   FROM no_periodo perd where perd.id_tipo_periodo = 1 and perd.fecha_fin < tab.fecha_ini)) as periodo_ant,

   tab.id_tipo_doc,                  
   tab.num_doc,
   sum( nvl(tab.CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(tab.dias_vaciones) as num_dias_vac_ant,
   sum(tab.dias_vaciones) - sum(tab.dias_feb) as num_dias_vac,
   sum(tab.dias_feb) as dias_feb,
   max(tab.fecha_ini) as fecha_ini2, 
   case when max(tab.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(tab.fecha_ini) end as fecha_ini,
   max(tab.fecha_fin) as fecha_fin2,
   case when max(tab.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab.fecha_fin) end as fecha_fin

   from( 

       select 
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
       --Para el mes de febrero se restan dias 2 o 1 segun año, ya que estos dias se pagan como laborados - 20170314                 
       (case 
          when (select id_meses from no_periodo where id_periodo = $id_periodo) = 2 and max(tab0.fecha_ini) < (select fecha_fin from no_periodo where id_periodo = $id_periodo) and max(tab0.fecha_fin) > (select fecha_fin from no_periodo where id_periodo = $id_periodo) 
          then case when to_number((select to_char(fecha_fin,'dd') from no_periodo where id_periodo = $id_periodo)) = 28 then 2 else 1 end
          else 0 end) * (case  when tipnov.operador  = 1 then 1 else (-1) end) as dias_feb,                 
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   )tab

   group by tab.id_tipo_doc, tab.num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 1 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    */--and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 2 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    */
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo, 
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

/* Tomar aporte_patrono_licnorem de la tabla de aportes - 20150730*/
left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
    , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    /*Validar dias = 0 - 20191023*/
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, 
    case when max(tab0.num_dias) = 0 then 1 else max(tab0.num_dias) end AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc

/*Obtener IBC del anterior mes de las vacaciones - 20191220*/
left join(

    SELECT
    id_periodo,
    id_tipo_doc,
    num_doc,
    sum(valor_base) as valor_base
    FROM no_liquida_aporte
    where
    id_periodo < $id_periodo
    --and id_tipo_doc = 1
    --and num_doc = 98565401
    and id_clase_fondo = 2
    and tipo_planilla = 'A' 
    
    group by
    id_periodo,
    id_tipo_doc,
    num_doc

)liqapor
on liqapor.id_periodo = vaca.periodo_ant
and liqapor.id_tipo_doc = tab0.id_tipo_doc
and liqapor.num_doc = tab0.num_doc


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    /*
    Se cambia fecha de termina(ultimo dia de trabajo) por fecha de retiro, 
    para tener encuenta si trabajo en el periodo al menos 1 dia - 20130828                    
    */
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
  )
)
and  ( vaca.cantidad>0 )

union

/*
* Funcionarios con novedades de vacaciones o LR - 20170308
* Se cambia campo C45 para que tome los dias de la autoliquidacion y no base 30-ccf1.dias, se agrega tambien a los calculos de parafiscales - 20190703
* Se cambia solo LICENCIA REMUNERADA - 20210202::LAVILA
*/
select 

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl(tab4.primer_nombre,' '),20,' ') AS C13,
RPAD(nvl(tab4.segundo_nombre,' '),30,' ') AS C14,
case when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C15,
case when tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C16,
' ' AS C17,
' ' AS C18,
' ' AS C19,
' ' AS C20,
--No La novedad SLN no debe de combinarse con otro tipo de novedad  - 20161122
case when ascenso.cantidad>0 then ' ' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 then ' ' else ' 'end AS C23,
case when kardex1.cantidad>0 and ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then ' ' when kardex1.cantidad>0 and  nvl(max_marca,0) = 1 and nvl(max_marca_susinc,0) = 0 then 'C' else ' ' end AS C24,
case when kardex2.cantidad>0 then ' ' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then 'X' when kardexlr.cantidad>0 then 'L' else ' 'end AS C27,
' ' AS C28,
' ' AS C29,
--LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
LPAD('0',2,'0') AS C30,
rpad(nvl(pension.codigo,' '),6,' ') as c31,
rPAD(' ',6,' ') AS C32,
rPAD(nvl(salud.codigo,' '),6,' ') AS C33,
rpad(' ',6,' ') as c34,
rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) as c36,
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) as c37,
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) AS C38, 
--39 dias parafiscales
lpad( nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0) ,2,0) AS C39,
LPAD(nvl(tab6.asignacion_basica,0),9,0) AS C40,
' ' AS C41,
-- Se validan los dias de retiro del funionario - 20141007
LPAD(  case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) then ceil( ( (nvl(sm.valor_mensual,0)*25)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(pension1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C42,
LPAD(  case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) then ceil( ( (nvl(sm.valor_mensual,0)*25)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C43,

LPAD( case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) then ceil( ( (nvl(sm.valor_mensual,0)*25)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C44,
        
LPAD(  case 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 and nvl(ccf1.ibc,0) = 0 
        then ceil( ( (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and 1 = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 
    when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0
        then ceil( ( nvl(ccf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 
    else ceil( ( nvl(ccf1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) AS C45,


-- Se debe calcular a partir de octubre la tarifa del patrono - 20131028
-- No debe llevar registro de pension - 20140729
-- Se coloca que para CYC, si debe llevar registro de pension - 20170127
--rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as c46,
--rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0) as C46,
case when 4 in (4) then (rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0)) else rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) end as C46,
--lPAD(nvl(null,0) + nvl(null,0),9,0) AS C47,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(pension2.dias-nvl(kardex4.cantidad,0),0))  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,-2) ,9,0) as c47,
lPAD( ceil( (ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(pension2.tarifa,0)/100)*100 ,9,0) as c47,
lPAD(0,9,0) AS C48,
lpad(0,9,0) as c49,

lPAD( ceil((  ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(pension2.tarifa,0)/100)*100 ,9,0) as C50,
lPAD( ceil((( ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(0.005,0)) /100)*100  *(case when nvl(pension3.aporte_fsp,0) != 0 then 1 else 0 end) ,9,0) as c51,
lpad( ceil((((ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(pension3.tarifa,0)) - ((ceil( ( ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                                                                                                                                            then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                                                                                                                                            )/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(0.005,0)) )/100)*100 *(case when nvl(pension3.aporte_fsp,0) != 0 then 1 else 0 end) ,9,0) as c52,

rpad(0,9,0) as c53,
rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,7,0) as c54,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0)- (tab5.dias_retiro) )  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,-2) ,9,0) as c55,
lPAD( ceil( (ceil( (  ( case when (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) > 25*( nvl(sm.valor_mensual,0) /30*(30)) 
                        then (nvl(sm.valor_mensual,0)*25) else (case when nvl(vaca.num_dias_vac,0) != 0 and nvl(liqapor.valor_base,0) != 0 and $aplica_ibc_ant_vac = 1 then nvl(liqapor.valor_base,0) else (nvl(tab6.asignacion_basica,0)+nvl(tab66.valor,0)) end) end 
                        ) /30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )/1)*1)*nvl(salud1.tarifa,0)/100)*100 ,9,0) as c55,
lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
--rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( nvl(0,0) ,9,0) as c63,
--lpad( ceil( ( nvl(riesgo1.aporte_patrono,0)/30*(vaca.num_dias_vac) )/100)*100 ,9,0) as c63,
rpad( case when nvl(ccf1.tarifa,0) = 0 then '0.0' when nvl(ccf1.tarifa,0) < 1 then '0' else '' end || + nvl(ccf1.tarifa,0) ,7,0) AS C64,
--lpad( nvl(ccf1.aporte_patrono,0) ,9,0) as c65,
lpad( ceil( ( ceil( ( nvl(ccf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(ccf1.tarifa,0)/100)*100 ,9,0) as c65,
rpad( case when nvl(sena1.tarifa,0) = 0 then '0.0' when nvl(sena1.tarifa,0) < 1 then '0' else '' end || + nvl(sena1.tarifa,0) ,7,0) as C66,
--lpad( nvl(sena1.aporte_patrono,0) ,9,0) as c67,
lpad( ceil( ( ceil( ( nvl(sena1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(sena1.tarifa,0)/100)*100 ,9,0) as c67,
rpad( case when nvl(icbf1.tarifa,0) = 0 then '0.0' when nvl(icbf1.tarifa,0) < 1 then '0' else '' end || + nvl(icbf1.tarifa,0) ,7,0) as C68,
--lpad( nvl(icbf1.aporte_patrono,0) ,9,0) as c69,
lpad( ceil( ( ceil( ( nvl(icbf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(icbf1.tarifa,0)/100)*100 ,9,0) as c69,
rpad( case when nvl(esap1.tarifa,0) = 0 then '0.0' when nvl(esap1.tarifa,0) < 1 then '0' else '' end || + nvl(esap1.tarifa,0) ,7,0) as C70,
--lpad( nvl(esap1.aporte_patrono,0) ,9,0) as c71,
lpad( ceil( ( ceil( ( nvl(esap1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(esap1.tarifa,0)/100)*100 ,9,0) as c71,
rpad( case when nvl(men1.tarifa,0) = 0 then '0.0' when nvl(men1.tarifa,0) < 1 then '0' else '' end || + nvl(men1.tarifa,0) ,7,0) as C72,
--lpad( nvl(men1.aporte_patrono,0) ,9,0) as c73,
lpad( ceil( ( ceil( ( nvl(men1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 )*nvl(men1.tarifa,0)/100)*100 ,9,0) as c73,
'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
RPAD(to_char(' '),1,' ') AS C79,

RPAD(to_char(' '),10,' ') AS C80,--ING
RPAD(to_char(' '),10,' ') AS C81,--RET
RPAD(to_char(' '),10,' ') AS C82,--VSP

RPAD(to_char(' '),10,' ') AS C83,--SLN
RPAD(to_char(' '),10,' ') AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE
RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA

/* Se omite fechas de lic remune con (1=0 and)  - 20190905 */ 
case when vaca.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(vaca.fecha_ini,'yyyy-mm-dd')
  when 1=0 and kardexlr.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardexlr.fecha_ini,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C89,--VAC-LR
case when vaca.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(vaca.fecha_fin,'yyyy-mm-dd')
  when 1=0 and kardexlr.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardexlr.fecha_fin,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C90,--VAC-LR

RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT
RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
LPAD(  case when (nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) != 0 then ceil( ( nvl(icbf1.ibc,0)/ccf1.dias*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) )-0.5/1)*1 else ceil( ( nvl(icbf1.ibc,0)/30*(nvl(vaca.num_dias_vac,0)+nvl(kardexlr.num_dias_novlicrem,0)) ) ) end ,9,0) as C95,--IBC parafiscales
LPAD(  case when nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0)  < 300 then  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

/*Validacion de smdlv para el tope de IBC de 25 maximo - 20190507*/
left join no_smdlv sm
on sm.vigencia = tab0.id_anhos

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

--left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
left join (
  SELECT
  case when aut.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then (30 - to_char(aut.fecha_termina,'dd') ) else 0 end as dias_retiro,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

/*Valores de ibc de vacaciones, sin AsigBasica - 20170705*/
left join(

    select 
    concep.num_doc,
    concep.id_tipo_doc,
    sum(nvl(concep.valor,0)) as valor 
     
    from no_concepto_func concep
    where 
    /*concep.num_doc = 39531961 
    and concep.id_tipo_doc = 1 
    and */
    concep.id_concep_nomina in ( (select ID_CONCEP_NOMINA from no_agrup_deta where ID_AGRUP_CONCEPTO = 39) ) 
    and concep.id_concep_nomina not in ( (select id_concep_basica from no_param_concep) ) 
    and concep.estado = 1 and concep.actual = 1 
    
    group by
    concep.num_doc,
    concep.id_tipo_doc
    
)tab66 ON tab66.id_tipo_doc = tab0.id_tipo_doc and tab66.num_doc = tab0.num_doc

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
    
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 7 )  
        and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=1 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, max(tab1.suspension) as max_marca,
    max(fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1
    
    and tab0.estado = 1 and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    /*
    Se cambia id_tip_nov_ka = 3 por 2 INCI
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    
    and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 and tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*
Incapacidad -> Suspensión por Incapacidad  - 20150312
*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as max_marca_susinc
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
    and tab0.id_tip_nov_ka = (select no_param_concep.id_nov_ka_susinc from no_param_concep where no_param_concep.id_param_concep = 1)
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex5 ON kardex5.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
/*Licencia remunerada descuenta todos los días de meses anteriores - 20190905*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem_ant,
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
* Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
* Se omite  desde ahora ya que es fila solo de LR -20210202
*/
left join
(
   select 
   
   max((SELECT
   max(perd.id_periodo)
   FROM no_periodo perd where perd.id_tipo_periodo = 1 and perd.fecha_fin < tab.fecha_ini)) as periodo_ant,

   tab.id_tipo_doc,                  
   tab.num_doc,
   sum( nvl(tab.CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(tab.dias_vaciones) as num_dias_vac_ant,
   sum(tab.dias_vaciones) - sum(tab.dias_feb) as num_dias_vac,
   sum(tab.dias_feb) as dias_feb,
   max(tab.fecha_ini) as fecha_ini2, 
   case when max(tab.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(tab.fecha_ini) end as fecha_ini,
   max(tab.fecha_fin) as fecha_fin2,
   case when max(tab.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab.fecha_fin) end as fecha_fin

   from( 

       select 
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
       --Para el mes de febrero se restan dias 2 o 1 segun año, ya que estos dias se pagan como laborados - 20170314                 
       (case 
          when (select id_meses from no_periodo where id_periodo = $id_periodo) = 2 and max(tab0.fecha_ini) < (select fecha_fin from no_periodo where id_periodo = $id_periodo) and max(tab0.fecha_fin) > (select fecha_fin from no_periodo where id_periodo = $id_periodo) 
          then case when to_number((select to_char(fecha_fin,'dd') from no_periodo where id_periodo = $id_periodo)) = 28 then 2 else 1 end
          else 0 end) * (case  when tipnov.operador  = 1 then 1 else (-1) end) as dias_feb,                 
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       1 = 0 and
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   )tab

   group by tab.id_tipo_doc, tab.num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 1 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    */--and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 2 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    */
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo, 
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

/* Tomar aporte_patrono_licnorem de la tabla de aportes - 20150730*/
left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
    , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    /*Validar dias = 0 - 20191023*/
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, 
    case when max(tab0.num_dias) = 0 then 1 else max(tab0.num_dias) end AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc

/*Obtener IBC del anterior mes de las vacaciones - 20191220*/
left join(

    SELECT
    id_periodo,
    id_tipo_doc,
    num_doc,
    sum(valor_base) as valor_base
    FROM no_liquida_aporte
    where
    id_periodo < $id_periodo
    --and id_tipo_doc = 1
    --and num_doc = 98565401
    and id_clase_fondo = 2
    and tipo_planilla = 'A' 
    
    group by
    id_periodo,
    id_tipo_doc,
    num_doc

)liqapor
on liqapor.id_periodo = vaca.periodo_ant
and liqapor.id_tipo_doc = tab0.id_tipo_doc
and liqapor.num_doc = tab0.num_doc


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    /*
    Se cambia fecha de termina(ultimo dia de trabajo) por fecha de retiro, 
    para tener encuenta si trabajo en el periodo al menos 1 dia - 20130828                    
    */
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
  )
)
and  ( kardexlr.cantidad>0 )

union

/*
* Funcionarios con novedades de IGE - 20170309
* Para la fecha fin se deja que tenga valor segun dias ed aporte IGE desde el 1 del mes,
* se toman dias de kardex2, solo del mes si es de meses anteriores la novedad, si es del mismo mes se toman todos los dias - 20180808
* Se elimina presentar de fecha para novedad de IGE, por que se esta permitiendo registrar y reportar de novedades anteriores - 20190903
*/
select

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl(tab4.primer_nombre,' '),20,' ') AS C13,
RPAD(nvl(tab4.segundo_nombre,' '),30,' ') AS C14,
case when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C15,
case when tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C16,
' ' AS C17,
' ' AS C18,
' ' AS C19,
' ' AS C20,
--No La novedad SLN no debe de combinarse con otro tipo de novedad  - 20161122
case when ascenso.cantidad>0 then ' ' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 then ' ' else ' 'end AS C23,
--case when kardex1.cantidad>0 and ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then 'X' when kardex1.cantidad>0 and  nvl(max_marca,0) = 1 and nvl(max_marca_susinc,0) = 0 then 'C' else ' ' end AS C24,
case when kardex1.cantidad>0 then ' ' else ' 'end AS C24,
case when kardex2.cantidad>0 then 'X' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then ' ' when kardexlr.cantidad>0 then ' ' else ' 'end AS C27,
' ' AS C28,
' ' AS C29,
LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
rpad(nvl(pension.codigo,' '),6,' ') as c31,
rPAD(' ',6,' ') AS C32,
rPAD(nvl(salud.codigo,' '),6,' ') AS C33,
rpad(' ',6,' ') as c34,
rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,
lpad( kardex2.num_dias_novkar ,2,0) as c36,
lpad( kardex2.num_dias_novkar ,2,0) as c37,
lpad( kardex2.num_dias_novkar ,2,0) AS C38, 
--39 dias parafiscales
lpad( kardex2.num_dias_novkar ,2,0) AS C39,
LPAD( case when nvl(tab6.asignacion_basica,0) != 0 then nvl(tab6.asignacion_basica,0) else ceil( ( nvl(pension1.ibc,0)-nvl(riesgo1.ibc,0) )/1)*1 end  ,9,0) AS C40,
' ' AS C41,

-- Se validan los dias de retiro del funionario - 20141007
LPAD(  case when (kardex2.num_dias_novkar) != 0 then ceil( ( nvl(kardex2.valor_liquidado,0) )/1)*1 else ceil( ( nvl(pension1.ibc,0)/30*(kardex2.num_dias_novkar) ) ) end + nvl(liqhora.valor_liquidado,0) ,9,0) AS C42,
LPAD(  case when (kardex2.num_dias_novkar) != 0 then ceil( ( nvl(kardex2.valor_liquidado,0) )/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(kardex2.num_dias_novkar) ) ) end + nvl(liqhora.valor_liquidado,0) ,9,0) AS C43,
LPAD(  case when (kardex2.num_dias_novkar) != 0 then ceil( ( nvl(kardex2.valor_liquidado,0) )/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(kardex2.num_dias_novkar) ) ) end + nvl(liqhora.valor_liquidado,0) ,9,0) AS C44,
LPAD(  case when (kardex2.num_dias_novkar) != 0 then ceil( ( nvl(kardex2.valor_liquidado,0) )/1)*1 else ceil( ( nvl(ccf1.ibc,0)/30*(kardex2.num_dias_novkar) ) ) end + nvl(liqhora.valor_liquidado,0) ,9,0) AS C45,
-- Se debe calcular a partir de octubre la tarifa del patrono - 20131028
-- No debe llevar registro de pension - 20140729
-- Se coloca que para CYC, si debe llevar registro de pension - 20170127
--rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as c46,
--rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0) as C46,
case when 4 in (4) then (rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0)) else rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) end as C46,
--lPAD(nvl(null,0) + nvl(null,0),9,0) AS C47,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(pension2.dias-nvl(kardex4.cantidad,0),0))  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,-2) ,9,0) as c47,
lPAD( ceil( (ceil( ( nvl(kardex2.valor_liquidado,0) + nvl(liqhora.valor_liquidado,0) )/1)*1)*nvl(pension2.tarifa,0) /100)*100 ,9,0) as c47,
lPAD(0,9,0) AS C48,
lpad(0,9,0) as C49,
lPAD( ceil( (ceil( ( nvl(kardex2.valor_liquidado,0) + nvl(liqhora.valor_liquidado,0) )/1)*1)*nvl(pension2.tarifa,0) /100)*100 ,9,0) as C50,
--lPAD( ceil( ((ceil( ( nvl(kardex2.valor_liquidado,0) )/1)*1)*nvl(pension3.tarifa,0))/2 /100)*100 ,9,0) as c51,
case when nvl(pension3.tarifa,0) = 0 then lPAD(0,9,0) else lPAD( ceil( ((ceil( ( nvl(kardex2.valor_liquidado,0) + nvl(liqhora.valor_liquidado,0) )/1)*1)*0.005)/1 /100)*100 ,9,0) end as c51,
--lpad( ceil(( ((ceil( ( nvl(kardex2.valor_liquidado,0) )/1)*1)*nvl(pension3.tarifa,0)) - ((ceil( ( nvl(kardex2.valor_liquidado,0) )/1)*1)*nvl(pension3.tarifa,0))/2 )/100)*100 ,9,0) as c52,
case when nvl(pension3.tarifa,0) = 0 then lPAD(0,9,0) else lpad( ceil(( ((ceil( ( nvl(kardex2.valor_liquidado,0) + nvl(liqhora.valor_liquidado,0) )/1)*1)*nvl(pension3.tarifa,0)) - ((ceil( ( nvl(kardex2.valor_liquidado,0) + nvl(liqhora.valor_liquidado,0) )/1)*1)*0.005)/1 )/100)*100 ,9,0) end as c52,
rpad(0,9,0) as c53,
rpad( case when nvl(salud1.tarifa,0) = 0 then '0.0' when nvl(salud1.tarifa,0) < 1 then '0' else '' end || + nvl(salud1.tarifa,0) ,7,0) as c54,
lPAD( ceil( (ceil( ( nvl(kardex2.valor_liquidado,0) + nvl(liqhora.valor_liquidado,0) )/1)*1)*nvl(salud1.tarifa,0) /100)*100 ,9,0) AS c55,

lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
--rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( nvl(0,0) ,9,0) as c63,
--lpad( ceil( ( nvl(riesgo1.aporte_patrono,0)/30*(kardex2.num_dias_novkar) )/100)*100 ,9,0) as c63,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) AS C64,
--lpad( nvl(ccf1.aporte_patrono,0) ,9,0) as c65,
lpad( ceil( ( nvl(ccf1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c65,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C66,
--lpad( nvl(sena1.aporte_patrono,0) ,9,0) as c67,
lpad( ceil( ( nvl(sena1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c67,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C68,
--lpad( nvl(icbf1.aporte_patrono,0) ,9,0) as c69,
lpad( ceil( ( nvl(icbf1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c69,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C70,
--lpad( nvl(esap1.aporte_patrono,0) ,9,0) as c71,
lpad( ceil( ( nvl(esap1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c71,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C72,
--lpad( nvl(men1.aporte_patrono,0) ,9,0) as c73,
lpad( ceil( ( nvl(men1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c73,
'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
RPAD(to_char(' '),1,' ') AS C79,

RPAD(to_char(' '),10,' ') AS C80,--ING
RPAD(to_char(' '),10,' ') AS C81,--RET
RPAD(to_char(' '),10,' ') AS C82,--VSP

RPAD(to_char(' '),10,' ') AS C83,--SLN
RPAD(to_char(' '),10,' ') AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE
/*
case when kardex2.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex2.fecha_ini,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C85,--IGE
case when kardex2.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex2.fecha_fin,'yyyy-mm-dd')
when kardex2.fecha_fin < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') 
    then to_char( (kardex2.fecha_ini+(kardex2.num_dias_novkar)) ,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C86,--IGE
*/
RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA

RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR

RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT
RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
LPAD(  case when (kardex2.num_dias_novkar) != 0 then ceil( ( nvl(kardex2.valor_liquidado,0) + nvl(liqhora.valor_liquidado,0) )/1)*1 else ceil( ( nvl(ccf1.ibc,0)/30*(kardex2.num_dias_novkar) ) ) end ,9,0) as C95,--IBC parafiscales
LPAD(  case when  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) < 300 then nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0)  else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

--left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
left join (
  SELECT
  case when aut.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then (30 - to_char(aut.fecha_termina,'dd') ) else 0 end as dias_retiro,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
    
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 7 )  
        and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=1 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, max(tab1.suspension) as max_marca,
    max(fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

/* Valida que si la novedad es superior al IBC tome el IBC - 20210210::LAVILA*/
left join
(
    select 
    case when max(salud1.ibc) < sum(liq.valor_liquidado) then max(salud1.ibc) else sum(liq.valor_liquidado) end as valor_liquidado,
    tab0.num_doc, count(tab0.id_novedad_kardex) CANT, 
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    sum( case when tab0.num_dias > 0 and tab0.prorroga = 1 then 1 when tab0.num_dias > (tab1.dias_patrono) and tab0.prorroga = 0 then 1 else 0 end) as CANTIDAD,
    /*nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novkar*/
    case 
    when max((select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo)) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0)
    when nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) > 30
    then 30 else nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) end as num_dias_novkar_ant,
    /*Toma dias correctos de mes actual y fechas anteriores, calcula cada uno por independiente, al final valida si supera 30 dias - 20190610*/
    /*Incidente 14326, Se suspende sumar dia 31 por conflicto con incapacidades - 20190926*/ 
    /*Toma maximo hasta fecha del mes actual - 20191023*/ 
    case 
    when nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end
        
        -
        
        /*Restar dias 29 y 30 si aplica apra febrero - 20230413::LAVILA*/
        (
            case when EXTRACT(MONTH FROM tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end)) <= 2 and EXTRACT(MONTH FROM (tab0.fecha_fin) ) >= 3
            then 30 - EXTRACT( DAY FROM last_day( TO_DATE('01/02/'||(select id_anhos from no_periodo where id_periodo = $id_periodo),'dd/mm/yyyy') ) )
            else 0 end            
        )
        
    ),0) > 30
    then 30
    else nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end
        
        -
        
        /*Restar dias 29 y 30 si aplica apra febrero - 20230413::LAVILA*/
        (
            case when EXTRACT(MONTH FROM tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end)) <= 2 and EXTRACT(MONTH FROM (tab0.fecha_fin) ) >= 3
            then 30 - EXTRACT( DAY FROM last_day( TO_DATE('01/02/'||(select id_anhos from no_periodo where id_periodo = $id_periodo),'dd/mm/yyyy') ) )
            else 0 end            
        )
        
    ),0) end as num_dias_novkar
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    left join no_liquida_nomina liq on tab0.num_doc = liq.num_doc and tab0.id_tipo_doc = liq.id_tipo_doc
    and liq.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
    and liq.fecha_desde = tab0.fecha_ini and liq.fecha_hasta = tab0.fecha_fin
    and (
        liq.id_concep_nomina in (         
         select ka.id_concep_nomina from no_concep_ka ka where ka.id_tip_nov_ka in (select distinct id_nov_ka_enfcom from no_param_concep)    
        ) or (liq.id_concep_nomina in (1189))
    )
    

    /* Incidente #20399, SGC Tomar ibc ya que supera la novedad el valor - 20210208*/
    left join 
    (
        select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
        max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
        , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
        , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
        from no_liquida_aporte tab0
        where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
        and tab0.tipo_planilla = 'A'     
        group by tab0.num_doc
    )salud1 ON salud1.num_doc = tab0.num_doc
    
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    Toma todos los periodos del mes segun filtro - 20191106
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    /*
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      and 
      (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    )
    */
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    /*
    Se cambia id_tip_nov_ka = 3 por 2 INCI
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    
    and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 and tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*
Incapacidad -> Suspensión por Incapacidad  - 20150312
*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as max_marca_susinc
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
    and tab0.id_tip_nov_ka = (select no_param_concep.id_nov_ka_susinc from no_param_concep where no_param_concep.id_param_concep = 1)
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex5 ON kardex5.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
*/
left join
(
    select 

   id_tipo_doc,                  
   num_doc,
   sum( nvl(CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(dias_vaciones) as num_dias_vac,
   max(fecha_ini) as fecha_ini2, 
   case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
   max(fecha_fin) as fecha_fin2,
   case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin

   from( 

       select 
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   ) 

   group by id_tipo_doc, num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 1 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    */--and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 2 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    */
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo,
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

/* Tomar aporte_patrono_licnorem de la tabla de aportes - 20150730*/
left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
    , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc

/* En la linea de IGE no debe tomar el valor de horas extras, caso CYC - 20200227*/
left join(


    select
    liq.id_periodo,
    liq.id_tipo_doc,
    liq.num_doc,
    --sum(liq.valor_liquidado) as valor_liquidado
    sum(0) as valor_liquidado

    from no_liquida_nomina liq
    
    where
    liq.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
    and (
        liq.id_concep_nomina in (         
        (select id_concep_nomina from no_tipo_hr_extra)
        )
    )

    group by
    liq.id_periodo,
    liq.id_tipo_doc,
    liq.num_doc

)liqhora
ON liqhora.num_doc = tab0.num_doc
and liqhora.id_tipo_doc = tab0.id_tipo_doc


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    /*
    Se cambia fecha de termina(ultimo dia de trabajo) por fecha de retiro, 
    para tener encuenta si trabajo en el periodo al menos 1 dia - 20130828                    
    */
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
  )
)
/*Incidente 14326, Se suspende sumar dia 31 por conflicto con incapacidades, Antes: kardex2.num_dias_novkar >= 0 - 20191101*/
and kardex2.cantidad > 0 and kardex2.num_dias_novkar > 0

union 

/*
* Funcionarios con novedades de LMA - 20170310
*/
select

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl(tab4.primer_nombre,' '),20,' ') AS C13,
RPAD(nvl(tab4.segundo_nombre,' '),30,' ') AS C14,
case when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C15,
case when tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C16,
' ' AS C17,
' ' AS C18,
' ' AS C19,
' ' AS C20,
--No La novedad SLN no debe de combinarse con otro tipo de novedad  - 20161122
case when ascenso.cantidad>0 then ' ' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 then ' ' else ' 'end AS C23,
case when kardex1.cantidad>0 and ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then 'X' when kardex1.cantidad>0 and  nvl(max_marca,0) = 1 and nvl(max_marca_susinc,0) = 0 then 'C' else ' ' end AS C24,
case when kardex2.cantidad>0 then 'X' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then 'X' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then ' ' when kardexlr.cantidad>0 then ' ' else ' 'end AS C27,
' ' AS C28,
' ' AS C29,
LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
rpad(nvl(pension.codigo,' '),6,' ') as c31,
rPAD(' ',6,' ') AS C32,
rPAD(nvl(salud.codigo,' '),6,' ') AS C33,
rpad(' ',6,' ') as c34,
rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,
lpad( kardex3.num_dias_novlicmat ,2,0) as c36,
lpad( kardex3.num_dias_novlicmat ,2,0) as c37,
lpad( kardex3.num_dias_novlicmat ,2,0) AS C38, 
--39 dias parafiscales
lpad( kardex3.num_dias_novlicmat ,2,0) AS C39,
LPAD(nvl(tab6.asignacion_basica,0),9,0) AS C40,
' ' AS C41,
-- Se validan los dias de retiro del funionario - 20141007
LPAD(  case when (kardex3.num_dias_novlicmat) != 0 then ceil( kardex3.valor_liquidado/1)*1 else 0 end ,9,0) AS C42,
LPAD(  case when (kardex3.num_dias_novlicmat) != 0 then ceil( kardex3.valor_liquidado/1)*1 else 0 end ,9,0) AS C43,
LPAD(  case when (kardex3.num_dias_novlicmat) != 0 then ceil( kardex3.valor_liquidado/1)*1 else 0 end ,9,0) AS C44,
LPAD(  case when (kardex3.num_dias_novlicmat) != 0 then ceil( kardex3.valor_liquidado/1)*1 else 0 end ,9,0) AS C45,
-- Se debe calcular a partir de octubre la tarifa del patrono - 20131028
-- No debe llevar registro de pension - 20140729
-- Se coloca que para CYC, si debe llevar registro de pension - 20170127
--rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as c46,
--rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0) as C46,
case when 4 in (4) then (rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0)) else rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) end as C46,
--lPAD(nvl(null,0) + nvl(null,0),9,0) AS C47,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(pension2.dias-nvl(kardex4.cantidad,0),0))  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,-2) ,9,0) as c47,
lPAD( ceil((ceil( kardex3.valor_liquidado/1)*1)*nvl(pension2.tarifa,0)/100)*100 ,9,0) as c47,
lPAD(0,9,0) AS C48,
lpad(0,9,0) as c49,
lPAD( ceil( (ceil( ( ceil( kardex3.valor_liquidado/1)*1 )/1)*1)*nvl(pension2.tarifa,0) /100)*100 ,9,0) as C50,
lPAD( ceil( ((ceil( ( ceil( kardex3.valor_liquidado/1)*1 )/1)*1)*nvl(pension3.tarifa,0))/2 /100)*100 ,9,0) as c51,
lpad( ceil(( ((ceil( ( ceil( kardex3.valor_liquidado/1)*1 )/1)*1)*nvl(pension3.tarifa,0)) - ((ceil( ( ceil( kardex3.valor_liquidado/1)*1 )/1)*1)*nvl(pension3.tarifa,0))/2 )/100)*100 ,9,0) as c52,
rpad(0,9,0) as c53,
rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,7,0) as c54,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(salud1.dias-nvl(kardex4.cantidad,0),0)- (tab5.dias_retiro) )  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then salud1.tarifa else 0 end ,0) ,-2) ,9,0) as c55,
lPAD( ceil((ceil( kardex3.valor_liquidado/1)*1)*nvl(salud1.tarifa,0)/100)*100 ,9,0) as c55,
lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
--rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( nvl(0,0) ,9,0) as c63,
--lpad( ceil( ( nvl(riesgo1.aporte_patrono,0)/30*(kardex2.num_dias_novkar) )/100)*100 ,9,0) as c63,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) AS C64,
--lpad( nvl(ccf1.aporte_patrono,0) ,9,0) as c65,
lpad( ceil( ( nvl(ccf1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c65,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C66,
--lpad( nvl(sena1.aporte_patrono,0) ,9,0) as c67,
lpad( ceil( ( nvl(sena1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c67,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C68,
--lpad( nvl(icbf1.aporte_patrono,0) ,9,0) as c69,
lpad( ceil( ( nvl(icbf1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c69,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C70,
--lpad( nvl(esap1.aporte_patrono,0) ,9,0) as c71,
lpad( ceil( ( nvl(esap1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c71,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C72,
--lpad( nvl(men1.aporte_patrono,0) ,9,0) as c73,
lpad( ceil( ( nvl(men1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c73,
'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
RPAD(to_char(' '),1,' ') AS C79,

RPAD(to_char(' '),10,' ') AS C80,--ING
RPAD(to_char(' '),10,' ') AS C81,--RET
RPAD(to_char(' '),10,' ') AS C82,--VSP

RPAD(to_char(' '),10,' ') AS C83,--SLN
RPAD(to_char(' '),10,' ') AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE
  
case when kardex3.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex3.fecha_ini,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C87,--LMA
case when kardex3.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex3.fecha_fin,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C88,--LMA

RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR

RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT
RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
LPAD(  case when (kardex3.num_dias_novlicmat) != 1 then ceil( kardex3.valor_liquidado/1)*1 else 0 end ,9,0) as C95,--IBC parafiscales
LPAD(nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0),3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

--left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
left join (
  SELECT
  case when aut.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then (30 - to_char(aut.fecha_termina,'dd') ) else 0 end as dias_retiro,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
    
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 7 )  
        and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=1 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, max(tab1.suspension) as max_marca,
    max(fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    /*Se cambia validacion para tener encuenta dias realmente de la novedad segun prorroga - 20150223*/
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANT, min(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
    sum( case when tab0.num_dias > 0 and tab0.prorroga = 1 then 1 when tab0.num_dias > (tab1.dias_patrono) and tab0.prorroga = 0 then 1 else 0 end) as CANTIDAD,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (tab1.dias_patrono),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novkar
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    /*
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      and 
      (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    )
    */
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

/*
Se agrega relacion de fecha de la novedad y la liquidacion, para no generar valores  dobles por mas de un registro dfe liquidacion -20200824
Incidente #24958, verificacion para LMA que si son por los 30 dias tome el IBC de salud y no lo liquidado - 20220317::LAVILA
*/
left join
(
    select
    tab0.id_tipo_doc,
    case when tab0.num_dias_novlicmat < 30 then tab0.valor_liquidado else nvl(liqapo.valor_base,tab0.valor_liquidado) end as valor_liquidado,
    tab0.num_doc,
    tab0.CANTIDAD,
    tab0.fecha_ini2,
    tab0.fecha_ini,
    tab0.fecha_fin2,
    tab0.fecha_fin,
    tab0.num_dias_novlicmat

    from(
        select 
        tab0.id_tipo_doc,
        sum( liq.valor_liquidado ) as valor_liquidado,
        tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, 
        max(tab0.fecha_ini) as fecha_ini2, 
        case when max(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini) end as fecha_ini,
        max(fecha_fin) as fecha_fin2,
        case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin,
        nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicmat
        from no_novedad_kardex tab0
        left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka

        left join no_liquida_nomina liq on tab0.num_doc = liq.num_doc and tab0.id_tipo_doc = liq.id_tipo_doc
        and liq.fecha_desde = tab0.fecha_ini
        and liq.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
        and liq.id_concep_nomina in (         
             select ka.id_concep_nomina from no_concep_ka ka where ka.id_tip_nov_ka in (select distinct id_nov_ka_licmat from no_param_concep)    
        )

        where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
        and (
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          TRUNC(LAST_DAY( TO_DATE('01/'|| (select LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS from NO_PERIODO where ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between TAB0.FECHA_INI and TAB0.FECHA_FIN
          or 
          tab0.id_periodo = $id_periodo
        )
        and
        (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        group by tab0.num_doc,tab0.id_tipo_doc
    
    )tab0

    left join no_liquida_aporte liqapo
    on liqapo.id_tipo_doc = tab0.id_tipo_doc
    and liqapo.num_doc = tab0.num_doc
    and liqapo.id_periodo = $id_periodo
    and liqapo.id_clase_fondo = 2
    and liqapo.tipo_planilla = 'A'
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 and tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*
Incapacidad -> Suspensión por Incapacidad  - 20150312
*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as max_marca_susinc
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
    and tab0.id_tip_nov_ka = (select no_param_concep.id_nov_ka_susinc from no_param_concep where no_param_concep.id_param_concep = 1)
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex5 ON kardex5.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
*/
left join
(
    select 

   id_tipo_doc,                  
   num_doc,
   sum( nvl(CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(dias_vaciones) as num_dias_vac,
   max(fecha_ini) as fecha_ini2, 
   case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
   max(fecha_fin) as fecha_fin2,
   case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin

   from( 

       select 
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   ) 

   group by id_tipo_doc, num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 1 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    */--and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 2 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    */
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo,
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

/* Tomar aporte_patrono_licnorem de la tabla de aportes - 20150730*/
left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
    , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    /*
    Se cambia fecha de termina(ultimo dia de trabajo) por fecha de retiro, 
    para tener encuenta si trabajo en el periodo al menos 1 dia - 20130828                    
    */
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
  )
)
and kardex3.cantidad > 0 and kardex3.num_dias_novlicmat > 0

union

/*
* Funcionarios con novedades de IRL - 20170515
*/
select

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl(tab4.primer_nombre,' '),20,' ') AS C13,
RPAD(nvl(tab4.segundo_nombre,' '),30,' ') AS C14,
case when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C15,
case when tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then 'X' else ' ' end AS C16,
' ' AS C17,
' ' AS C18,
' ' AS C19,
' ' AS C20,
--No La novedad SLN no debe de combinarse con otro tipo de novedad  - 20161122
case when ascenso.cantidad>0 then ' ' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 then ' ' else ' 'end AS C23,
case when kardex1.cantidad>0 and ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then 'X' when kardex1.cantidad>0 and  nvl(max_marca,0) = 1 and nvl(max_marca_susinc,0) = 0 then 'C' else ' ' end AS C24,
case when kardex2.cantidad>0 then 'X' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then ' ' when kardexlr.cantidad>0 then ' ' else ' 'end AS C27,
' ' AS C28,
' ' AS C29,
LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
rpad(nvl(pension.codigo,' '),6,' ') as c31,
rPAD(' ',6,' ') AS C32,
rPAD(nvl(salud.codigo,' '),6,' ') AS C33,
rpad(' ',6,' ') as c34,
rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,
lpad( nvl(kardex4.cantidad,0) ,2,0) as c36,
lpad( nvl(kardex4.cantidad,0) ,2,0) as c37,
lpad( nvl(kardex4.cantidad,0) ,2,0) AS C38, 
--39 dias parafiscales
lpad( nvl(kardex4.cantidad,0) ,2,0) AS C39,
LPAD( case when nvl(tab6.asignacion_basica,0) != 0 then nvl(tab6.asignacion_basica,0) else ceil( ( nvl(pension1.ibc,0)-nvl(riesgo1.ibc,0) )/1)*1 end  ,9,0) AS C40,
' ' AS C41,

-- Se validan los dias de retiro del funionario - 20141007
LPAD(  case when (kardex4.cantidad) != 0 then ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1 else ceil( ( nvl(pension1.ibc,0)/30*(kardex4.cantidad) ) ) end ,9,0) AS C42,
LPAD(  case when (kardex4.cantidad) != 0 then ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(kardex4.cantidad) ) ) end ,9,0) AS C43,
LPAD(  case when (kardex4.cantidad) != 0 then ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1 else ceil( ( nvl(salud1.ibc,0)/30*(kardex4.cantidad) ) ) end ,9,0) AS C44,
LPAD(  case when (kardex4.cantidad) != 0 then ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1 else ceil( ( nvl(ccf1.ibc,0)/30*(kardex4.cantidad) ) ) end ,9,0) AS C45,
-- Se debe calcular a partir de octubre la tarifa del patrono - 20131028
-- No debe llevar registro de pension - 20140729
-- Se coloca que para CYC, si debe llevar registro de pension - 20170127
--rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) as c46,
--rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0) as C46,
case when 4 in (4) then (rpad( case when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) = 0 then '0.0' when nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) < 1 then '0' else '' end || + nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,7,0)) else rpad( case when nvl(null,0) = 0 then '0.0' when nvl(null,0) < 1 then '0' else '' end || + nvl(null,0) ,7,0) end as C46,
--lPAD(nvl(null,0) + nvl(null,0),9,0) AS C47,
--lpad( round( round( nvl(tab6.asignacion_basica,0)/30*(30-nvl(pension2.dias-nvl(kardex4.cantidad,0),0))  ,-3) * nvl( case when ( nvl(max_marca,0) = 0 or nvl(max_marca_susinc,0) = 1 ) then pension2.tarifa else 0 end ,0) ,-2) ,9,0) as c47,
lPAD( ceil( (ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1)*nvl(pension2.tarifa,0) /100)*100 ,9,0) as c47,
lPAD(0,9,0) AS C48,
lpad(0,9,0) as C49,
lPAD( ceil( (ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1)*nvl(pension2.tarifa,0) /100)*100 ,9,0) as C50,
lPAD( ceil( ((ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1)*nvl(pension3.tarifa,0))/2 /100)*100 ,9,0) as c51,
lpad( ceil(( ((ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1)*nvl(pension3.tarifa,0)) - ((ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1)*nvl(pension3.tarifa,0))/2 )/100)*100 ,9,0) as c52,
rpad(0,9,0) as c53,
rpad( case when nvl(salud1.tarifa,0) = 0 then '0.0' when nvl(salud1.tarifa,0) < 1 then '0' else '' end || + nvl(salud1.tarifa,0) ,7,0) as c54,
lPAD( ceil( (ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1)*nvl(salud1.tarifa,0) /100)*100 ,9,0) AS c55,

lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,
rpad(0,9,0) as c60,
--rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( nvl(0,0) ,9,0) as c63,
--lpad( ceil( ( nvl(riesgo1.aporte_patrono,0)/30*(kardex2.num_dias_novkar) )/100)*100 ,9,0) as c63,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) AS C64,
--lpad( nvl(ccf1.aporte_patrono,0) ,9,0) as c65,
lpad( ceil( ( nvl(ccf1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c65,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C66,
--lpad( nvl(sena1.aporte_patrono,0) ,9,0) as c67,
lpad( ceil( ( nvl(sena1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c67,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C68,
--lpad( nvl(icbf1.aporte_patrono,0) ,9,0) as c69,
lpad( ceil( ( nvl(icbf1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c69,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C70,
--lpad( nvl(esap1.aporte_patrono,0) ,9,0) as c71,
lpad( ceil( ( nvl(esap1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c71,
rpad( case when nvl(0,0) = 0 then '0.0' when nvl(0,0) < 1 then '0' else '' end || + nvl(0,0) ,7,0) as C72,
--lpad( nvl(men1.aporte_patrono,0) ,9,0) as c73,
lpad( ceil( ( nvl(men1.aporte_patrono,0)/30*nvl(0,0) )/100)*100 ,9,0) as c73,
'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
RPAD(to_char(' '),1,' ') AS C79,

RPAD(to_char(' '),10,' ') AS C80,--ING
RPAD(to_char(' '),10,' ') AS C81,--RET
RPAD(to_char(' '),10,' ') AS C82,--VSP

RPAD(to_char(' '),10,' ') AS C83,--SLN
RPAD(to_char(' '),10,' ') AS C84,--SLN

case when kardex2.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex2.fecha_ini,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C85,--IGE
case when kardex2.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex2.fecha_fin,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C86,--IGE
  
RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA

RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR

RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT

case when kardex4.fecha_ini
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex4.fecha_ini,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C93,--IRL
case when kardex4.fecha_fin
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(kardex4.fecha_fin,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C94,--IRL

LPAD(  case when (kardex4.cantidad) != 0 then ceil( ( nvl(kardex4.valor_liquidado,0) )/1)*1 else ceil( ( nvl(ccf1.ibc,0)/30*(kardex4.cantidad) ) ) end ,9,0) as C95,--IBC parafiscales
LPAD(  case when  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) < 300 then nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0)  else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

--left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
left join (
  SELECT
  case when aut.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then (30 - to_char(aut.fecha_termina,'dd') ) else 0 end as dias_retiro,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
    
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 7 )  
        and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=1 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, max(tab1.suspension) as max_marca,
    max(fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    select 
    sum(liq.valor_liquidado) as valor_liquidado,
    tab0.num_doc, count(tab0.id_novedad_kardex) CANT, 
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    sum( case when tab0.num_dias > 0 and tab0.prorroga = 1 then 1 when tab0.num_dias > (tab1.dias_patrono) and tab0.prorroga = 0 then 1 else 0 end) as CANTIDAD,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novkar
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    left join no_liquida_nomina liq on tab0.num_doc = liq.num_doc and tab0.id_tipo_doc = liq.id_tipo_doc
    and liq.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
    and liq.fecha_desde = tab0.fecha_ini and liq.fecha_hasta = tab0.fecha_fin
    and liq.id_concep_nomina in (         
         select ka.id_concep_nomina from no_concep_ka ka where ka.id_tip_nov_ka in (select distinct id_nov_ka_enfcom from no_param_concep)    
    )
    
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    /*
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      and 
      (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    )
    */
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    /*
    Se cambia id_tip_nov_ka = 3 por 2 INCI
    Se cambia por id en tabla no_param_concep - 20140916
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    
    and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
Toma todos los dias de meses anteriores hasta el mes actual - 20191105
Incidente #35741, se suma a la fehca ini + dias_patrono - 20230601::LAVILA
Incidente #38696, colocar fechas rango segun dias de novedad, por si son mas dias por fechas anteriores - 20240909::LAVILA
Incidente #39574, se valida que si es prorroga no descuente el dia de patrono - 20250312::LAVILA
*/
left join
(
    select
    valor_liquidado,
    num_doc,
    CANTIDAD2,
    CANTIDAD_ant,
    CANTIDAD,
    fecha_ini2,
    fecha_ini,
    fecha_fin2,
    fecha_fin as fecha_fin3,
    case when (fecha_fin - fecha_ini + 1) < CANTIDAD
    then (case when (fecha_ini + CANTIDAD - 1) >= last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')) then last_day(fecha_ini)  else (fecha_ini + CANTIDAD - 1) end)
    else fecha_fin end as fecha_fin
    from(

        select 
        sum(liq.valor_liquidado) as valor_liquidado,
        tab0.num_doc, sum(tab0.num_dias) CANTIDAD2,    
        nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga = 0 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as CANTIDAD_ant,

        nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini+ (case when tab0.prorroga = 0 then tab1.dias_patrono else 0 end), ( case when tab0.fecha_fin >= last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy'))
            then last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')) - 1 else tab0.fecha_fin end ) )  ),0)  as CANTIDAD,    

        min(tab0.fecha_ini) as fecha_ini2, 
        case when min(tab0.fecha_ini + (case when tab0.prorroga = 0 then tab1.dias_patrono else 0 end)) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') and max(fecha_fin) >= to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini + (case when tab0.prorroga = 0 then tab1.dias_patrono else 0 end)) end as fecha_ini,
        max(fecha_fin) as fecha_fin2,
        case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin

        from no_novedad_kardex tab0
        left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka

        left join no_liquida_nomina liq on tab0.num_doc = liq.num_doc and tab0.id_tipo_doc = liq.id_tipo_doc
        and liq.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) )
        and liq.fecha_desde = tab0.fecha_ini and liq.fecha_hasta = tab0.fecha_fin 
        and liq.id_concep_nomina in (         
             select ka.id_concep_nomina from no_concep_ka ka where ka.id_tip_nov_ka in (tab1.id_tip_nov_ka)    
        )

        where tab1.afecta_riesgo = 1 and tab0.estado = 1 
        and ( 
            tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
            and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
            /*
            Validacion para que tome el registro en el periodo de la novedad - 20130820
            */
            or tab0.id_periodo = $id_periodo
        )

        group by tab0.num_doc

    )    
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*
Incapacidad -> Suspensión por Incapacidad  - 20150312
*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as max_marca_susinc
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 
    and tab0.id_tip_nov_ka = (select no_param_concep.id_nov_ka_susinc from no_param_concep where no_param_concep.id_param_concep = 1)
     /*   
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )*/
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      or 
      tab0.id_periodo = $id_periodo
    )
    group by tab0.num_doc
)kardex5 ON kardex5.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
*/
left join
(
    select 

   id_tipo_doc,                  
   num_doc,
   sum( nvl(CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(dias_vaciones) as num_dias_vac,
   max(fecha_ini) as fecha_ini2, 
   case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
   max(fecha_fin) as fecha_fin2,
   case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin

   from( 

       select 
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   ) 

   group by id_tipo_doc, num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 1 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    */--and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 2 
    /*
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afilia.fecha_ingreso and nvl( afilia.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    */
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo,
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

/* Tomar aporte_patrono_licnorem de la tabla de aportes - 20150730*/
left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    , sum(tab0.aporte_patrono_licnorem) AS aporte_patrono_licnorem
    , sum(tab0.num_dias_licnorem) AS num_dias_licnorem
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    /*
    Se cambia fecha de termina(ultimo dia de trabajo) por fecha de retiro, 
    para tener encuenta si trabajo en el periodo al menos 1 dia - 20130828                    
    */
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
  )
)
and kardex4.cantidad > 0

union

/*
* Fila para funcionarios con retiro e ingreso en el mismo mes - 20211119
* INGRESO
*/

select 

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl( replace( tab4.primer_nombre,' ',' ') ,' '),20,' ') AS C13,
RPAD(nvl( replace( tab4.segundo_nombre,' ',' '),' '),30,' ') AS C14,
case 
when tab5.fecha_ingreso_correc is not null then 'X' 
when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then 'X' 
  else case when to_char(ccf0.fecha_ingreso,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then ' ' 
            when to_char(riesgo.fecha_ingreso,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then ' ' 
            else ' ' end end AS C15,
case when novretiro.num_doc is not null and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then 'X' 
  else case when penfun.id_pension_func is not null and to_char(penfun.fecha_pension,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then 'P' else ' ' end end AS C16,

/*Sin marcas para lo nuevo: retiro e ingreso mismo mes*/
case when salud.fecha_ingreso   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C17,
case when salud.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C18,
case when pension.fecha_ingreso   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C19,
case when pension.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C20,

case when ascenso.cantidad>0 then 'X' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 or vaca.cantidad>0 or kardexlr.cantidad>0 or kardex2.cantidad>0 or kardex3.cantidad>0 then 'X' else ' 'end AS C23,
-- Dias de comision otra entidad y retirado - 20171011
case when nvl(novper.dias,0) != 0 then 'C' when kardex1.cantidad>0 then ' ' else ' 'end AS C24,
case when kardex2.cantidad>0 then ' ' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then ' ' when kardexlr.cantidad>0 then ' ' else ' 'end AS C27,
case when nvl(aporvol.valor_liquidado,0) > 0 then 'X' else ' ' end AS C28,
' ' AS C29,
/*Se repordan dias del periodo de consulta, solo en la fila de incapacidad, en la mensual NO(20191105) - 20191101*/
--LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
LPAD('0',2,'0') AS C30,
--LPAD( case when pension1.dias = 30 then to_char(nvl(kardex4.cantidad_mes,0)) else '0' end ,2,'0') AS C30,
rpad(nvl(pension.codigo,' '),6,' ') as c31,

/*
Se pone codigo de pension de traslado si la fecha de retiro del fondo esta dentro del periodo a generar la planilla 
se toma del id de la tabla no_liquida_aporte - 20130826
*/
case when pension.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then rPAD( nvl( (select distinct no_cod_fondo.CODIGO from no_mae_fondos join no_cod_fondo on no_cod_fondo.nitocc = no_mae_fondos.num_doc  
  where no_mae_fondos.id_mae_fondos = pension.id_tap AND ( no_cod_fondo.tipo != 'EPS' or no_cod_fondo.tipo != 'CCF' ) ),' ') ,6,' ') 
  else rPAD(' ',6,' ') end AS C32,
--rPAD(' ',6,' ') AS C32,

rPAD(nvl(salud.codigo,' '),6,' ') AS C33,

/*
Se pone codigo de salud de traslado si la fecha de retiro del fondo esta dentro del periodo a generar la planilla
se toma del id de la tabla no_liquida_aporte - 20130826
*/
case when salud.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then rPAD( nvl( (select distinct no_cod_fondo.CODIGO from no_mae_fondos join no_cod_fondo on no_cod_fondo.nitocc = no_mae_fondos.num_doc  
  where no_mae_fondos.id_mae_fondos = salud.id_tae  AND no_cod_fondo.tipo = 'EPS' ),' ') ,6,' ') 
  else rPAD(' ',6,' ') end AS C34,
--rpad(' ',6,' ') as c34,

rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,

/*dias segun ingreso retiro - 20211119*/
LPAD(nvl( ingret.dias_ing ,0),2,0) AS C36,
LPAD(nvl( ingret.dias_ing ,0),2,0) AS C37,
LPAD(nvl( ingret.dias_ing ,0),2,0) AS C38,
LPAD(nvl( ingret.dias_ing ,0),2,0) AS C39,

LPAD(nvl(tab6.asignacion_basica,0),9,0) AS C40,
' ' AS C41,
LPAD( round( nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C42,
LPAD( round( nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C43,
LPAD( round( nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C44,
LPAD( round( nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C45,


rpad( case when nvl(pension2.tarifa,0) = 0 then '0.0' when nvl(pension2.tarifa,0) < 1 then '0' else '' end || + nvl(pension2.tarifa,0) ,7,0) as C46,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(pension2.tarifa,0) ) /100)*100 ,9,0) as C47,
lPAD(nvl(aporvol.valor_liquidado,0),9,0) AS C48,
lpad(0,9,0) as C49,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(pension2.tarifa,0) ) /100)*100 ,9,0) as C50,

LPAD( ceil( ( round( case when nvl(pension3.tarifa,0) != 0 then nvl(ingret.valor_ibc_ing,0) else 0 end ) * 0.005) / 100)*100 ,9,0) as C51,
LPAD( (ceil( ( round( case when nvl(pension3.tarifa,0) != 0 then nvl(ingret.valor_ibc_ing,0) else 0 end ) * ( nvl(pension3.tarifa,0) - 0.005 ) ) / 100)*100) ,9,0) as C52,
rpad(0,9,0) as c53,

rpad( case when nvl(salud1.tarifa,0) = 0 then '0.0' when nvl(salud1.tarifa,0) < 1 then '0' else '' end || + nvl(salud1.tarifa,0) ,7,0) as C54,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(salud1.tarifa,0) ) /100)*100 ,9,0) as C55,

lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,

rpad(0,9,0) as c60,
rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(riesgo1.tarifa,0) ) /100)*100 ,9,0) as C63,

rpad( case when nvl(ccf1.tarifa,0) = 0 then '0.0' when nvl(ccf1.tarifa,0) < 1 then '0' else '' end || + nvl(ccf1.tarifa,0) ,7,0) AS C64,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(ccf1.tarifa,0) ) /100)*100 ,9,0) as C65,

rpad( case when nvl(sena1.tarifa,0) = 0 then '0.0' when nvl(sena1.tarifa,0) < 1 then '0' else '' end || + nvl(sena1.tarifa,0) ,7,0) as C66,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(sena1.tarifa,0) ) /100)*100 ,9,0) as C67,

rpad( case when nvl(icbf1.tarifa,0) = 0 then '0.0' when nvl(icbf1.tarifa,0) < 1 then '0' else '' end || + nvl(icbf1.tarifa,0) ,7,0) as C68,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(icbf1.tarifa,0) ) /100)*100 ,9,0) as C69,

rpad( case when nvl(esap1.tarifa,0) = 0 then '0.0' when nvl(esap1.tarifa,0) < 1 then '0' else '' end || + nvl(esap1.tarifa,0) ,7,0) as C70,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(esap1.tarifa,0) ) /100)*100 ,9,0) as C71,

rpad( case when nvl(men1.tarifa,0) = 0 then '0.0' when nvl(men1.tarifa,0) < 1 then '0' else '' end || + nvl(men1.tarifa,0) ,7,0) as C72,
lpad( ceil( ( round( nvl(ingret.valor_ibc_ing,0) ) * nvl(men1.tarifa,0) ) /100)*100 ,9,0) as C73,

'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
case when pension.id_tipo_aporte != 1 then '1' else ' ' end  AS C79,

case 
when tab5.fecha_ingreso_correc is not null then to_char(tab5.fecha_ingreso_correc,'yyyy-mm-dd')
when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(tab5.fecha_ingreso,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C80,--ING
case when novretiro.num_doc is not null and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(tab5.fecha_termina,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C81,--RET
  
case when ascenso.fecha_inicial
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(ascenso.fecha_inicial,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C82,--VSP
  
-- Dias de comision otra entidad y retirado - 20171011
case when nvl(novper.dias,0) != 0 then to_char(novper.fecha_ini,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C83,--SLN
case when nvl(novper.dias,0) != 0 then to_char(novper.fecha_fin,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE

RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA

RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR
  
RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT

RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
  
LPAD( round( nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C95,--IBC parafiscales
LPAD(  case when  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) < 300 then  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

join(
        
    select distinct
    nom.id_tipo_doc,
    nom.num_doc,
    sum(case when perliq.id_tipo_periodo != 5 and liq.fecha_desde >= nom.fecha_ingreso then nvl(liq.num_dias,0) else 0 end) as dias_ing,
    --sum(case when perliq.id_tipo_periodo = 5 then nvl(liq.num_dias,0) else 0 end) as dias_ret,
    sum(nvl(liq.num_dias,0)) - sum(case when perliq.id_tipo_periodo != 5 and liq.fecha_desde >= nom.fecha_ingreso then nvl(liq.num_dias,0) else 0 end) as dias_ret,
    
    sum(case when perliq.id_tipo_periodo != 5 and liq.fecha_desde >= nom.fecha_ingreso then nvl(liq.valor_liquidado,0) else 0 end) as valor_ibc_ing
    
    from no_nombramiento nom
    
    left join no_periodo_v per
    on per.id_periodo = $id_periodo
    
    left join no_novedad_personal nov
    on nov.id_tipo_doc = nom.id_tipo_doc
    and nov.num_doc = nom.num_doc
    and nov.id_novedad = 1
    
    left join no_liquida_nomina liq
    on liq.id_tipo_doc = nom.id_tipo_doc
    and liq.num_doc = nom.num_doc
    and liq.id_concep_nomina = 1
    
    left join no_periodo_v perliq
    on perliq.id_periodo = liq.id_periodo
    
    where
    nom.estado = 1
    and nom.fecha_ingreso BETWEEN per.fecha_ini and per.fecha_fin
    and nov.fecha_terminacion BETWEEN per.fecha_ini and per.fecha_fin
    and perliq.id_anhos = per.id_anhos
    and perliq.id_meses =  per.id_meses
    
    group by
    nom.id_tipo_doc,
    nom.num_doc

)ingret
on ingret.id_tipo_doc = tab0.id_tipo_doc
and ingret.num_doc = tab0.num_doc

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

/*
left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
correcion de fecha segun tabla - 20210329
*/
left join (
  SELECT
  nomcor.fecha_ingreso as fecha_ingreso_correc,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  left join no_nombra_correc nomcor 
  on nomcor.id_tipo_doc = aut.id_tipo_doc
  and nomcor.num_doc = aut.num_doc
  and nomcor.id_periodo = $id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta desc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad,
  max(tab0.fecha_inicial) as fecha_inicial
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 2 - 20210329 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad,
  max(tab0.fecha_inicial) as fecha_inicial
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 2
  and(
    tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  or
    tab0.id_periodo = $id_periodo
  )
  group by tab0.num_doc
) novretiro ON novretiro.num_doc = tab0.num_doc

/*
Variacion de salario
*/
left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
        /*
        Novedad de encargo
        Tiene en cuenta todo el tiempo de la novedad desde empieza hasta que termina - 20130917
        */
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 4, 7 ) 
        and tab0.estado = 1
        and( 
          tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_terminacion  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_inicial and tab0.fecha_terminacion
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_inicial and tab0.fecha_terminacion
        )
        group by tab0.num_doc
        
        union 
        /*
        Identifica bonificacion por servicios
        */
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=0 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        /*
        Verifica horas extras en la tabla
        */
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
        
        union 
        
        --OJO:Id en el codigo para marca concep 1003, 1021, 1023 y 4001 - 20130826
        --Urgente cambiar por parametrizar agrupacion por conceptos - 20130826
        --Se cambia por agrupacion 105-CONCEPTOS DE VARIACIÓN TRANSITORIA PARA LA PLANILLA - 20130902
        select tab0.num_doc,count(tab0.id_liquida_nomina) as cantidad
        from no_liquida_nomina tab0
        where 
        --tab0.id_periodo = $id_periodo
        --and 
        (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
        and id_concep_nomina in (    
            /*
            tab0.id_concep_nomina = 3 
            or
            tab0.id_concep_nomina = 21 
            or
            tab0.id_concep_nomina = 23 
            or
            tab0.id_concep_nomina = 401 
            */
            (select distinct id_concep_nomina from no_agrup_deta where id_agrup_concepto = 105) 
        )
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    /*Se cambia validacion para tener encuenta dias realmente de la novedad segun prorroga - 20150223*/
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANT, 
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    sum( case when tab0.num_dias > 0 and tab0.prorroga = 1 then 1 when tab0.num_dias > (tab1.dias_patrono) and tab0.prorroga = 0 then 1 else 0 end) as CANTIDAD,
    /*nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novkar*/
    case 
    when max((select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo)) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0)
    when nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) > 30
    then 30 else nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) end as num_dias_novkar_ant,
    /*Toma dias correctos de mes actual y fechas anteriores, calcula cada uno por independiente, al final valida si supera 30 dias - 20190610*/
    /*Incidente 14326, Se suspende sumar dia 31 por conflicto con incapacidades - 20190926*/ 
    /*Toma maximo hasta fecha del mes actual - 20191023*/ 
    case 
    when nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end
        
    ),0) > 30
    then 30
    else nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end
        
    ),0) end as num_dias_novkar
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    Toma todos los periodos del mes segun filtro - 20191106
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    /*
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      and 
      (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    )
    */
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select 
    sum(liq.valor_liquidado) as valor_liquidado,
    tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, 
    max(tab0.fecha_ini) as fecha_ini2, 
    case when max(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicmat
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    left join no_liquida_nomina liq on tab0.num_doc = liq.num_doc and tab0.id_tipo_doc = liq.id_tipo_doc
    and liq.id_periodo = $id_periodo and liq.id_concep_nomina in (         
         select ka.id_concep_nomina from no_concep_ka ka where ka.id_tip_nov_ka in (select distinct id_nov_ka_licmat from no_param_concep)    
    )
    
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      TRUNC(LAST_DAY( TO_DATE('01/'|| (select LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS from NO_PERIODO where ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between TAB0.FECHA_INI and TAB0.FECHA_FIN
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
Toma todos los dias de meses anteriores hasta el mes actual - 20191105
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD2,    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (tab1.dias_patrono),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as CANTIDAD_MES,
                        
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini+ (tab1.dias_patrono), ( case when tab0.fecha_fin >= last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy'))
        then last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')) - 1 else tab0.fecha_fin end ) )  ),0)  as CANTIDAD,    
            
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') and max(fecha_fin) >= to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 
    
    and ( 
        tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        /*
        Validacion para que tome el registro en el periodo de la novedad - 20130820
        */
        or tab0.id_periodo = $id_periodo
    )

    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
/*Licencia remunerada descuenta todos los días de meses anteriores - 20190905*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem_ant,
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
*/
left join
(
    select 

   id_tipo_doc,                  
   num_doc,
   sum( nvl(CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(dias_vaciones) as num_dias_vac_ant,
   sum(dias_vaciones) - sum(dias_feb) as num_dias_vac,
   max(fecha_ini) as fecha_ini2, 
   case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
   max(fecha_fin) as fecha_fin2,
   case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin

   from( 

       select
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
       --Para el mes de febrero se restan dias 2 o 1 segun año, ya que estos dias se pagan como laborados - 20170314                 
       (case 
          when (select id_meses from no_periodo where id_periodo = $id_periodo) = 2 and max(tab0.fecha_ini) < (select fecha_fin from no_periodo where id_periodo = $id_periodo) and max(tab0.fecha_fin) > (select fecha_fin from no_periodo where id_periodo = $id_periodo) 
          then case when to_number((select to_char(fecha_fin,'dd') from no_periodo where id_periodo = $id_periodo)) = 28 then 2 else 1 end
          else 0 end) * (case  when tipnov.operador  = 1 then 1 else (-1) end) as dias_feb,     
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   ) 

   group by id_tipo_doc, num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo, afi.fecha_ingreso, afi.fecha_retiro, afilia.id_tap, afi.id_tipo_aporte 
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    left join no_afilia_fondo afi on afi.id_tipo_doc = afilia.id_tipo_doc and afi.num_doc = afilia.num_doc and afi.id_clase_fondo = afilia.id_clase_fondo and afi.id_mae_fondos = afilia.id_mae_fondos
    where afilia.id_clase_fondo = 1 
    
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afi.fecha_ingreso and nvl( afi.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'                    
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo, afi.fecha_ingreso, afi.fecha_retiro, afilia.id_tae
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    left join no_afilia_fondo afi on afi.id_tipo_doc = afilia.id_tipo_doc and afi.num_doc = afilia.num_doc and afi.id_clase_fondo = afilia.id_clase_fondo and afi.id_mae_fondos = afilia.id_mae_fondos
    where afilia.id_clase_fondo = 2  
    
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afi.fecha_ingreso and nvl( afi.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo,
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, afilia.fecha_ingreso
    from no_afilia_fondo afilia
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    where afilia.id_clase_fondo = 4 and afilia.estado = 1
)ccf0 ON ccf0.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc
        
left join(
    select
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(tab0.fecha_ini) as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as dias
    from(
        select 
        
        nov.id_tipo_doc,
        nov.num_doc,
        nov.id_novedad,
        nov.fecha_inicial,
        nov.fecha_terminacion,
        nom.fecha_termina,
        
        case when nov.fecha_inicial > (select fecha_ini from no_periodo where id_periodo = $id_periodo) 
        then nov.fecha_inicial 
        else (select fecha_ini from no_periodo where id_periodo = $id_periodo) end as fecha_ini,
        nom.fecha_termina as fecha_fin
        
        from no_novedad_personal nov
        
        join no_nombramiento_v nom
        on nov.id_tipo_doc = nom.id_tipo_doc
        and nov.num_doc = nom.num_doc
        
        where 
        nov.estado = 1
        and nov.id_novedad = 8
        and (
            (select fecha_ini from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
            or    
            (select fecha_fin from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
        )
        and (
            nom.fecha_termina between (select fecha_ini from no_periodo where id_periodo = $id_periodo) and (select fecha_fin from no_periodo where id_periodo = $id_periodo)
        )
        
    )tab0  
    
    group by 
    tab0.id_tipo_doc,
    tab0.num_doc 
)novper
on novper.id_tipo_doc = tab0.id_tipo_doc and novper.num_doc = tab0.num_doc 


left join(

        select 
        tab0.id_tipo_doc,
        tab0.num_doc,
        count(tab0.id_liquida_nomina) as cantidad,
        sum(tab0.valor_liquidado) as valor_liquidado
        from no_liquida_nomina tab0
        where 
        --tab0.id_periodo = $id_periodo
        --and 
        (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
        and id_concep_nomina in (   
            (select distinct id_concep_nomina from no_agrup_deta where id_agrup_concepto = 130) 
        )
        group by tab0.id_tipo_doc, tab0.num_doc

)aporvol
on aporvol.id_tipo_doc = tab0.id_tipo_doc 
and aporvol.num_doc = tab0.num_doc 


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
  )
)
and ingret.dias_ing > 0

union

/*
* Fila para funcionarios con retiro e ingreso en el mismo mes - 20211119
* RETIRO
*/

select 

0 as c0,
'02' AS C1,
LPAD(rownum,5,0) AS C2,
lpad( (REPLACE(tdoc.abreviacion,'.','')), 2,' ') AS C3,
RPAD(to_char(tab0.num_doc),16,' ') AS C4,
rpad(to_char(tab0.num_doc),16,' ') as c4a,
'01' AS C5,
case when penfun.id_pension_func is not null then penfun.codigo_suptipo else '00' end AS C6,--suptipo de pensionado
' ' AS C7,
' ' AS C8,
RPAD(nvl(tab2.coddepto,' '),2,' ') AS C9,
RPAD(nvl(substr(tab3.codmun_text,3),' '),3,' ') AS C10,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11,
RPAD(nvl(tab4.primer_apellido,' '),20,' ') AS C11a,
RPAD(nvl(tab4.segundo_apellido,' '),30,' ') AS C12,
RPAD(nvl( replace( tab4.primer_nombre,' ',' ') ,' '),20,' ') AS C13,
RPAD(nvl( replace( tab4.segundo_nombre,' ',' '),' '),30,' ') AS C14,
case 
when tab5.fecha_ingreso_correc is not null then 'X' 
when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then 'X' 
  else case when to_char(ccf0.fecha_ingreso,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then ' ' 
            when to_char(riesgo.fecha_ingreso,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then ' ' 
            else ' ' end end AS C15,
case when novretiro.num_doc is not null and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then 'X' 
  else case when penfun.id_pension_func is not null and to_char(penfun.fecha_pension,'mmyyyy') = (SELECT LPAD(ID_MESES,2,'0') ||''||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo)  then 'P' else ' ' end end AS C16,

/*Sin marcas para lo nuevo: retiro e ingreso mismo mes*/
case when salud.fecha_ingreso   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C17,
case when salud.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C18,
case when pension.fecha_ingreso   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C19,
case when pension.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then ' ' else ' ' end AS C20,

case when ascenso.cantidad>0 then 'X' else ' 'end AS C21,
' ' AS C22,
case when encargo.cantidad>0 or vaca.cantidad>0 or kardexlr.cantidad>0 or kardex2.cantidad>0 or kardex3.cantidad>0 then 'X' else ' 'end AS C23,
-- Dias de comision otra entidad y retirado - 20171011
case when nvl(novper.dias,0) != 0 then 'C' when kardex1.cantidad>0 then ' ' else ' 'end AS C24,
case when kardex2.cantidad>0 then ' ' else ' 'end AS C25,--inc temp enfermedad
case when kardex3.cantidad>0 then ' ' else ' 'end AS C26,--lic maternidad
case when vaca.cantidad>0 then ' ' when kardexlr.cantidad>0 then ' ' else ' 'end AS C27,
case when nvl(aporvol.valor_liquidado,0) > 0 then 'X' else ' ' end AS C28,
' ' AS C29,
/*Se repordan dias del periodo de consulta, solo en la fila de incapacidad, en la mensual NO(20191105) - 20191101*/
--LPAD(to_char(nvl(kardex4.cantidad,0)),2,0) AS C30,--inc por accidente de trabajo
LPAD('0',2,'0') AS C30,
--LPAD( case when pension1.dias = 30 then to_char(nvl(kardex4.cantidad_mes,0)) else '0' end ,2,'0') AS C30,
rpad(nvl(pension.codigo,' '),6,' ') as c31,

/*
Se pone codigo de pension de traslado si la fecha de retiro del fondo esta dentro del periodo a generar la planilla 
se toma del id de la tabla no_liquida_aporte - 20130826
*/
case when pension.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then rPAD( nvl( (select distinct no_cod_fondo.CODIGO from no_mae_fondos join no_cod_fondo on no_cod_fondo.nitocc = no_mae_fondos.num_doc  
  where no_mae_fondos.id_mae_fondos = pension.id_tap AND ( no_cod_fondo.tipo != 'EPS' or no_cod_fondo.tipo != 'CCF' ) ),' ') ,6,' ') 
  else rPAD(' ',6,' ') end AS C32,
--rPAD(' ',6,' ') AS C32,

rPAD(nvl(salud.codigo,' '),6,' ') AS C33,

/*
Se pone codigo de salud de traslado si la fecha de retiro del fondo esta dentro del periodo a generar la planilla
se toma del id de la tabla no_liquida_aporte - 20130826
*/
case when salud.fecha_retiro   between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then rPAD( nvl( (select distinct no_cod_fondo.CODIGO from no_mae_fondos join no_cod_fondo on no_cod_fondo.nitocc = no_mae_fondos.num_doc  
  where no_mae_fondos.id_mae_fondos = salud.id_tae  AND no_cod_fondo.tipo = 'EPS' ),' ') ,6,' ') 
  else rPAD(' ',6,' ') end AS C34,
--rpad(' ',6,' ') as c34,

rPAD(nvl(ccf.codigo,' '),6,' ') AS C35,

/*dias segun ingreso retiro - 20211119*/
LPAD(nvl( ingret.dias_ret ,0),2,0) AS C36,
LPAD(nvl( ingret.dias_ret ,0),2,0) AS C37,
LPAD(nvl( ingret.dias_ret ,0),2,0) AS C38,
LPAD(nvl( ingret.dias_ret ,0),2,0) AS C39,

LPAD(nvl(tab6.asignacion_basica,0),9,0) AS C40,
' ' AS C41,
LPAD( round( nvl(pension1.ibc,0) - nvl(ingret.valor_ibc_ing,0) - (nvl(tab6.asignacion_basica,0)/30*nvl(vaca.num_dias_vac,0)) ) ,9,0) AS C42,
LPAD( round( nvl(salud1.ibc,0) - nvl(ingret.valor_ibc_ing,0) - (nvl(tab6.asignacion_basica,0)/30*nvl(vaca.num_dias_vac,0)) ) ,9,0) AS C43,
LPAD( round( nvl(riesgo1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C44,
LPAD( round( nvl(ccf1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C45,


rpad( case when nvl(pension2.tarifa,0) = 0 then '0.0' when nvl(pension2.tarifa,0) < 1 then '0' else '' end || + nvl(pension2.tarifa,0) ,7,0) as C46,
lpad( ceil( ( round( nvl(pension1.ibc,0) - nvl(ingret.valor_ibc_ing,0) - (nvl(tab6.asignacion_basica,0)/30*nvl(vaca.num_dias_vac,0)) ) * nvl(pension2.tarifa,0) ) /100)*100 ,9,0) as C47,
lPAD(nvl(aporvol.valor_liquidado,0),9,0) AS C48,
lpad(0,9,0) as C49,
lpad( ceil( ( round( nvl(pension1.ibc,0) - nvl(ingret.valor_ibc_ing,0) - (nvl(tab6.asignacion_basica,0)/30*nvl(vaca.num_dias_vac,0)) ) * nvl(pension2.tarifa,0) ) /100)*100 ,9,0) as C50,

LPAD( ceil( ( round( case when nvl(pension3.tarifa,0) != 0 then nvl(pension1.ibc,0) - nvl(ingret.valor_ibc_ing,0) - (nvl(tab6.asignacion_basica,0)/30*nvl(vaca.num_dias_vac,0)) else 0 end ) * 0.005) / 100)*100 ,9,0) as C51,
LPAD( (ceil( ( round( case when nvl(pension3.tarifa,0) != 0 then nvl(pension1.ibc,0) - nvl(ingret.valor_ibc_ing,0) - (nvl(tab6.asignacion_basica,0)/30*nvl(vaca.num_dias_vac,0)) else 0 end ) * ( nvl(pension3.tarifa,0) - 0.005 ) ) / 100)*100) ,9,0) as C52,
rpad(0,9,0) as c53,

rpad( case when nvl(salud1.tarifa,0) = 0 then '0.0' when nvl(salud1.tarifa,0) < 1 then '0' else '' end || + nvl(salud1.tarifa,0) ,7,0) as C54,
lpad( ceil( ( round( nvl(salud1.ibc,0) - nvl(ingret.valor_ibc_ing,0) - (nvl(tab6.asignacion_basica,0)/30*nvl(vaca.num_dias_vac,0)) ) * nvl(salud1.tarifa,0) ) /100)*100 ,9,0) as C55,

lpad( case when '01' = '40' then 0 else 0 end ,9,0) as c56,
rpad(' ',15,' ') as c57,
rpad(0,9,0) as C58,
rpad(' ',15,' ') as C59,

rpad(0,9,0) as c60,
rpad( case when nvl(riesgo1.tarifa,0) = 0 then '0.0' when nvl(riesgo1.tarifa,0) < 1 then '0' else '' end || + nvl(riesgo1.tarifa,0) ,9,0) as C61,
lpad(nvl(riesgo.centro_trabajo,0),9,0) as C62,
lpad( ceil( ( round( nvl(riesgo1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) * nvl(riesgo1.tarifa,0) ) /100)*100 ,9,0) as C63,

rpad( case when nvl(ccf1.tarifa,0) = 0 then '0.0' when nvl(ccf1.tarifa,0) < 1 then '0' else '' end || + nvl(ccf1.tarifa,0) ,7,0) AS C64,
lpad( ceil( ( round( nvl(ccf1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) * nvl(ccf1.tarifa,0) ) /100)*100 ,9,0) as C65,

rpad( case when nvl(sena1.tarifa,0) = 0 then '0.0' when nvl(sena1.tarifa,0) < 1 then '0' else '' end || + nvl(sena1.tarifa,0) ,7,0) as C66,
lpad( ceil( ( round( nvl(sena1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) * nvl(sena1.tarifa,0) ) /100)*100 ,9,0) as C67,

rpad( case when nvl(icbf1.tarifa,0) = 0 then '0.0' when nvl(icbf1.tarifa,0) < 1 then '0' else '' end || + nvl(icbf1.tarifa,0) ,7,0) as C68,
lpad( ceil( ( round( nvl(icbf1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) * nvl(icbf1.tarifa,0) ) /100)*100 ,9,0) as C69,

rpad( case when nvl(esap1.tarifa,0) = 0 then '0.0' when nvl(esap1.tarifa,0) < 1 then '0' else '' end || + nvl(esap1.tarifa,0) ,7,0) as C70,
lpad( ceil( ( round( nvl(esap1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) * nvl(esap1.tarifa,0) ) /100)*100 ,9,0) as C71,

rpad( case when nvl(men1.tarifa,0) = 0 then '0.0' when nvl(men1.tarifa,0) < 1 then '0' else '' end || + nvl(men1.tarifa,0) ,7,0) as C72,
lpad( ceil( ( round( nvl(men1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) * nvl(men1.tarifa,0) ) /100)*100 ,9,0) as C73,

'  ' AS C74,
RPAD(to_char(' '),16,' ') AS C75,
RPAD(to_char('N'),1,' ') AS C76,
RPAD(riesgo.codigo,6,' ') AS C77,
nvl(RPAD(riesgo.riesgo,1,' '),' ') AS C78,
case when pension.id_tipo_aporte != 1 then '1' else ' ' end  AS C79,

case 
when tab5.fecha_ingreso_correc is not null then to_char(tab5.fecha_ingreso_correc,'yyyy-mm-dd')
when tab5.fecha_ingreso
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(tab5.fecha_ingreso,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C80,--ING
case when novretiro.num_doc is not null and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(tab5.fecha_termina,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C81,--RET
  
case when ascenso.fecha_inicial
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
  then to_char(ascenso.fecha_inicial,'yyyy-mm-dd')
  else RPAD(to_char(' '),10,' ') end AS C82,--VSP
  
-- Dias de comision otra entidad y retirado - 20171011
case when nvl(novper.dias,0) != 0 then to_char(novper.fecha_ini,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C83,--SLN
case when nvl(novper.dias,0) != 0 then to_char(novper.fecha_fin,'yyyy-mm-dd')
else RPAD(to_char(' '),10,' ') end AS C84,--SLN

RPAD(to_char(' '),10,' ') AS C85,--IGE
RPAD(to_char(' '),10,' ') AS C86,--IGE

RPAD(to_char(' '),10,' ') AS C87,--LMA
RPAD(to_char(' '),10,' ') AS C88,--LMA

RPAD(to_char(' '),10,' ') AS C89,--VAC-LR
RPAD(to_char(' '),10,' ') AS C90,--VAC-LR
  
RPAD(to_char(' '),10,' ') AS C91,--VCT
RPAD(to_char(' '),10,' ') AS C92,--VCT

RPAD(to_char(' '),10,' ') AS C93,--IRL
RPAD(to_char(' '),10,' ') AS C94,--IRL
  
LPAD( round( nvl(ccf1.ibc,0) - nvl(ingret.valor_ibc_ing,0) ) ,9,0) AS C95,--IBC parafiscales
LPAD(  case when  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) < 300 then  nvl(tab5.horas_mes,0)+NVL(hrextra.cantidad,0) else 300 end  ,3,0) AS C96,--HORAS EXTRAS
RPAD(to_char(' '),10,' ') AS C97,--Rad exterior
case when tab0.id_anhos || lpad(tab0.id_meses, 2, '0') >= 202211 then RPAD(to_char(riesgo.cod_riesgo|| riesgo.cod_ciiu || riesgo.cod_ncp),7,' ') else '' end AS C98

from no_estado_func_v tab0

join(
        
    select distinct
    nom.id_tipo_doc,
    nom.num_doc,
    sum(case when perliq.id_tipo_periodo != 5 and liq.fecha_desde >= nom.fecha_ingreso then nvl(liq.num_dias,0) else 0 end) as dias_ing,
    --sum(case when perliq.id_tipo_periodo = 5 then nvl(liq.num_dias,0) else 0 end) as dias_ret,
    sum(nvl(liq.num_dias,0)) - sum(case when perliq.id_tipo_periodo != 5 and liq.fecha_desde >= nom.fecha_ingreso then nvl(liq.num_dias,0) else 0 end) as dias_ret,
    
    sum(case when perliq.id_tipo_periodo != 5 and liq.fecha_desde >= nom.fecha_ingreso then nvl(liq.valor_liquidado,0) else 0 end) as valor_ibc_ing
    
    from no_nombramiento nom
    
    left join no_periodo_v per
    on per.id_periodo = $id_periodo
    
    left join no_novedad_personal nov
    on nov.id_tipo_doc = nom.id_tipo_doc
    and nov.num_doc = nom.num_doc
    and nov.id_novedad = 1
    
    left join no_liquida_nomina liq
    on liq.id_tipo_doc = nom.id_tipo_doc
    and liq.num_doc = nom.num_doc
    and liq.id_concep_nomina = 1
    
    left join no_periodo_v perliq
    on perliq.id_periodo = liq.id_periodo
    
    where
    nom.estado = 1
    and nom.fecha_ingreso BETWEEN per.fecha_ini and per.fecha_fin
    and nov.fecha_terminacion BETWEEN per.fecha_ini and per.fecha_fin
    and perliq.id_anhos = per.id_anhos
    and perliq.id_meses =  per.id_meses
    
    group by
    nom.id_tipo_doc,
    nom.num_doc

)ingret
on ingret.id_tipo_doc = tab0.id_tipo_doc
and ingret.num_doc = tab0.num_doc

left join tipo_documento tdoc
on tdoc.id_tipo_doc = tab0.id_tipo_doc

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

left join (
    select pen.*, sub.descripcion as suptipo_cotizante, sub.codigo as codigo_suptipo
    from no_pension_func pen
    left join no_suptipo_cotizante_v sub
    on pen.id_suptipo_cotizante = sub.id_suptipo_cotizante
    where
    pen.estado = 1
)penfun
on penfun.id_tipo_doc = tab0.id_tipo_doc 
and penfun.num_doc = tab0.num_doc

/*
left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
correcion de fecha segun tabla - 20210329
*/
left join (
  SELECT
  nomcor.fecha_ingreso as fecha_ingreso_correc,
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  left join no_nombra_correc nomcor 
  on nomcor.id_tipo_doc = aut.id_tipo_doc
  and nomcor.num_doc = aut.num_doc
  and nomcor.id_periodo = $id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 2

--left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp
/*
Se cambia para tomar valor de concepto_periodo para el concepto_nomina 1001 del periodo de tipo mensual o nomina adicional - 20130827
*/
left join(
    
    select * from(
            select 
            concep.id_tipo_doc,
            concep.num_doc,
            concep.valor as asignacion_basica ,
            
             ROW_NUMBER() OVER (
              PARTITION BY concep.num_doc
              order by per.id_tipo_periodo asc, concep.fecha_hasta asc
             ) as rn
           
            from no_concepto_periodo concep
  
            join no_periodo per
            on concep.PERIODO = per.id_periodo
            
            where 
            concep.id_concep_nomina = (select id_concep_basica from no_param_concep) 
            
            and (per.id_tipo_periodo = 1 or per.id_tipo_periodo = 2)
            and (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = concep.PERIODO) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
    )where rn = 1
    
)tab6 ON tab6.id_tipo_doc = tab0.id_tipo_doc and tab6.num_doc = tab0.num_doc
and tab6.rn = 1

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 1 - 20150422 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad,
  max(tab0.fecha_inicial) as fecha_inicial
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 1
  and tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  group by tab0.num_doc
) ascenso ON ascenso.num_doc = tab0.num_doc

left join
(
  /* se cambia filtro por estado activo y id_tipo_novedad = 2 - 20210329 */
  select 
  tab0.num_doc,count(tab0.id_novedad_personal) as cantidad,
  max(tab0.fecha_inicial) as fecha_inicial
  from no_novedad_personal tab0
  left join no_novedades nov on tab0.id_novedad = nov.id_novedad
  where 
  tab0.estado = 1 and nov.id_tipo_novedad = 2
  and(
    tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
  or
    tab0.id_periodo = $id_periodo
  )
  group by tab0.num_doc
) novretiro ON novretiro.num_doc = tab0.num_doc

/*
Variacion de salario
*/
left join
(
    select num_doc, sum(cantidad) AS CANTIDAD
    from(
        /*
        Novedad de encargo
        Tiene en cuenta todo el tiempo de la novedad desde empieza hasta que termina - 20130917
        */
        select tab0.num_doc,count(tab0.id_novedad_personal) AS CANTIDAD
        from no_novedad_personal tab0
        where tab0.id_novedad IN ( 3, 4, 7 ) 
        and tab0.estado = 1
        and( 
          tab0.fecha_inicial  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_terminacion  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_inicial and tab0.fecha_terminacion
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_inicial and tab0.fecha_terminacion
        )
        group by tab0.num_doc
        
        union 
        /*
        Identifica bonificacion por servicios
        */
        select tab0.num_doc,count(tab0.id_bonifica_servicios) AS CANTIDAD
        from no_bonifica_servicios tab0
        where tab0.estado=0 and tab0.fecha_bonifica between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        group by tab0.num_doc
        
        union 
        /*
        Verifica horas extras en la tabla
        */
        select tab0.num_doc,count(tab0.id_hr_extra) AS CANTIDAD
        from no_hr_extra tab0
        left join no_lote_hr_extra tab1 ON tab1.id_lote_hr_extra = tab0.id_lote_hr_extra
        where tab1.estado=0 and tab1.id_periodo = $id_periodo
        group by tab0.num_doc
        
        union 
        
        --OJO:Id en el codigo para marca concep 1003, 1021, 1023 y 4001 - 20130826
        --Urgente cambiar por parametrizar agrupacion por conceptos - 20130826
        --Se cambia por agrupacion 105-CONCEPTOS DE VARIACIÓN TRANSITORIA PARA LA PLANILLA - 20130902
        select tab0.num_doc,count(tab0.id_liquida_nomina) as cantidad
        from no_liquida_nomina tab0
        where 
        --tab0.id_periodo = $id_periodo
        --and 
        (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
        and id_concep_nomina in (    
            /*
            tab0.id_concep_nomina = 3 
            or
            tab0.id_concep_nomina = 21 
            or
            tab0.id_concep_nomina = 23 
            or
            tab0.id_concep_nomina = 401 
            */
            (select distinct id_concep_nomina from no_agrup_deta where id_agrup_concepto = 105) 
        )
        group by tab0.num_doc
    
    )GROUP BY num_doc

) encargo ON encargo.num_doc = tab0.num_doc

left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_antigu = 1 and tab0.estado = 1 and tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
    group by tab0.num_doc
)kardex1 ON kardex1.num_doc = tab0.num_doc

left join
(
    /*Se cambia validacion para tener encuenta dias realmente de la novedad segun prorroga - 20150223*/
    select tab0.num_doc, count(tab0.id_novedad_kardex) CANT, 
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    sum( case when tab0.num_dias > 0 and tab0.prorroga = 1 then 1 when tab0.num_dias > (tab1.dias_patrono) and tab0.prorroga = 0 then 1 else 0 end) as CANTIDAD,
    /*nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novkar*/
    case 
    when max((select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo)) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0)
    when nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) > 30
    then 30 else nvl(sum( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ),0) end as num_dias_novkar_ant,
    /*Toma dias correctos de mes actual y fechas anteriores, calcula cada uno por independiente, al final valida si supera 30 dias - 20190610*/
    /*Incidente 14326, Se suspende sumar dia 31 por conflicto con incapacidades - 20190926*/ 
    /*Toma maximo hasta fecha del mes actual - 20191023*/ 
    case 
    when nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end
        
    ),0) > 30
    then 30
    else nvl(sum( 
    
        case 
        when (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) < (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
        then        
        nvl( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ,0)        
        else 
        --nvl( tab0.fecha_fin - (tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end) ) + 1 ,0)
        --nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),tab0.fecha_fin ) ,0) 
        nvl( FECHA_RANGO_SIN_TREINTAYUNO(tab0.fecha_ini + (case when tab0.prorroga != 1 then tab1.dias_patrono else 0 end),
        
        (case when (tab0.fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  
        else (tab0.fecha_fin) end)
        
        ) ,0) 
        end
        
    ),0) end as num_dias_novkar
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    /*
    Se cambia id_tip_nov_ka = 2 por 1 INCI
    Se deja quemado id 9 para novedad por ajuste de conceptos de reintegro ANM - 20140522
    Se cambia por id en tabla no_param_concep - 20140916
    Toma todos los periodos del mes segun filtro - 20191106
    */
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_enfcom from no_param_concep),9) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo in ( select perd.id_periodo from no_periodo perd where perd.id_anhos = (select id_anhos from no_periodo where id_periodo = $id_periodo) and perd.id_meses = (select id_meses from no_periodo where id_periodo = $id_periodo) ) 
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    /*
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
      and 
      (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    )
    */
    group by tab0.num_doc
)kardex2 ON kardex2.num_doc = tab0.num_doc

left join
(
    select 
    sum(liq.valor_liquidado) as valor_liquidado,
    tab0.num_doc, count(tab0.id_novedad_kardex) CANTIDAD, 
    max(tab0.fecha_ini) as fecha_ini2, 
    case when max(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicmat
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    
    left join no_liquida_nomina liq on tab0.num_doc = liq.num_doc and tab0.id_tipo_doc = liq.id_tipo_doc
    and liq.id_periodo = $id_periodo and liq.id_concep_nomina in (         
         select ka.id_concep_nomina from no_concep_ka ka where ka.id_tip_nov_ka in (select distinct id_nov_ka_licmat from no_param_concep)    
    )
    
    where tab1.id_tip_nov_ka in ((select distinct id_nov_ka_licmat from no_param_concep)) and tab0.estado = 1 
    and (
      to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
      or
      TRUNC(LAST_DAY( TO_DATE('01/'|| (select LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS from NO_PERIODO where ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between TAB0.FECHA_INI and TAB0.FECHA_FIN
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    group by tab0.num_doc
)kardex3 ON kardex3.num_doc = tab0.num_doc

/*
Se cambia de id-4 por atributo en  la tabla no_tip_nov_ka de afecta_riesgo, para validar cuales afectan en los dias de ARP-ARL - 20130919
Toma todos los dias de meses anteriores hasta el mes actual - 20191105
*/
left join
(
    select tab0.num_doc, sum(tab0.num_dias) CANTIDAD2,    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini + (tab1.dias_patrono),tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as CANTIDAD_MES,
                        
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini+ (tab1.dias_patrono), ( case when tab0.fecha_fin >= last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy'))
        then last_day(to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')) - 1 else tab0.fecha_fin end ) )  ),0)  as CANTIDAD,    
            
    min(tab0.fecha_ini) as fecha_ini2, 
    case when min(tab0.fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') and max(fecha_fin) >= to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else min(tab0.fecha_ini) end as fecha_ini,
    max(fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(tab0.fecha_fin) end as fecha_fin
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.afecta_riesgo = 1 and tab0.estado = 1 
    
    and ( 
        tab0.fecha_inc between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
        and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        /*
        Validacion para que tome el registro en el periodo de la novedad - 20130820
        */
        or tab0.id_periodo = $id_periodo
    )

    group by tab0.num_doc
)kardex4 ON kardex4.num_doc = tab0.num_doc

/*Licencia remunerada id-10 -- 20170222*/
/*Licencia remunerada descuenta dias para calculo -- 20190414*/
/*Licencia remunerada descuenta todos los días de meses anteriores - 20190905*/
left join
(
    select tab0.num_doc, count(tab0.id_novedad_kardex) as CANTIDAD,  
    min(tab0.fecha_ini) as fecha_ini2, 
    case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin2,
    case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin,
    
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as num_dias_novlicrem_ant,
    nvl(sum( fecha_rango_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin ) ),0) as num_dias_novlicrem
    
    from no_novedad_kardex tab0
    left join no_tip_nov_ka tab1 ON tab1.id_tip_nov_ka = tab0.id_tip_nov_ka
    where tab1.id_tip_nov_ka in (select id_tip_nov_ka from no_tip_nov_ka where tiempo_remunerado = 1) and tab0.estado = 1 
    and (
      tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or
      tab0.fecha_fin between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
      or 
      tab0.id_periodo = $id_periodo
    )
    and
    (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') as vigper from no_periodo where id_periodo = $id_periodo)
    
    group by tab0.num_doc
)kardexlr ON kardexlr.num_doc = tab0.num_doc

/*
Se coloca, tab0.id_periodo en la agrupacion, para tener encuenta todas las novedades - 20161104
*/
left join
(
    select 

   id_tipo_doc,                  
   num_doc,
   sum( nvl(CANTIDAD_vaciones,0) ) as CANTIDAD,
   sum(dias_vaciones) as num_dias_vac_ant,
   sum(dias_vaciones) - sum(dias_feb) as num_dias_vac,
   max(fecha_ini) as fecha_ini2, 
   case when max(fecha_ini) < to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') then to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') else max(fecha_ini) end as fecha_ini,
   max(fecha_fin) as fecha_fin2,
   case when max(fecha_fin) > trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  then trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))  else max(fecha_fin) end as fecha_fin

   from( 

       select
       
       case  when tipnov.operador  = 1 
                 then nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) 
                 else nvl(sum(dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo))),0) * (-1)
                 end as dias_vaciones,
       --Para el mes de febrero se restan dias 2 o 1 segun año, ya que estos dias se pagan como laborados - 20170314                 
       (case 
          when (select id_meses from no_periodo where id_periodo = $id_periodo) = 2 and max(tab0.fecha_ini) < (select fecha_fin from no_periodo where id_periodo = $id_periodo) and max(tab0.fecha_fin) > (select fecha_fin from no_periodo where id_periodo = $id_periodo) 
          then case when to_number((select to_char(fecha_fin,'dd') from no_periodo where id_periodo = $id_periodo)) = 28 then 2 else 1 end
          else 0 end) * (case  when tipnov.operador  = 1 then 1 else (-1) end) as dias_feb,     
                 
       max(tab0.fecha_ini) as fecha_ini, max(tab0.fecha_fin) as fecha_fin,
       tab0.id_tipo_doc, tab0.num_doc, count(tab0.id_novedad_vac) CANTIDAD,
        tipnov.operador,

        case  when tipnov.operador  = 1 
        /*then 1
        else (-1)*/
        then tab0.num_dias_vac
        else (-1 * tab0.num_dias_vac)
        --else nvl(sum( tab0.fecha_fin - tab0.fecha_ini + 1),0) * (-1)
        end as CANTIDAD_vaciones

       from no_novedad_vac tab0
       left join NO_TIPO_NOV_VAC TIPNOV on TIPNOV.ID_TIPO_NOV_VAC = tab0.ID_TIPO_NOV_VAC
       
       where 
       --tipnov.ID_TIPO_NOV_VAC = 1 and
       tipnov.tiempo_liqui = 1 and
       (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) <= (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) and
       
      /*
       tab0.fecha_ini between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
       and trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) 
       */
       /*Marca de vacaciones para todo el tiempo de duracion - 20130917*/
      ( 
          tab0.fecha_ini  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
          or
          tab0.fecha_fin  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
          and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) 
        or
          to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') between tab0.fecha_ini and tab0.fecha_fin
          or
          trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') )) between tab0.fecha_ini and tab0.fecha_fin
        )
        /* Valida que no sea un dia 31, ya que no se cuenta para liquidacion, que posea dias de vac en el periodo liquidado - 20141031 */        
        --and to_char(tab0.fecha_ini,'dd') != 31
        and DIAS_RANGO_MES_SIN_TREINTAYUNO(tab0.fecha_ini,tab0.fecha_fin,(select id_meses from no_periodo where id_periodo = $id_periodo)) > 0
        
        group by tab0.id_tipo_doc, tab0.num_doc,
       tipnov.operador, tab0.num_dias_vac, tab0.id_periodo

   ) 

   group by id_tipo_doc, num_doc
)vaca ON vaca.num_doc = tab0.num_doc


LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo, afi.fecha_ingreso, afi.fecha_retiro, afilia.id_tap, afi.id_tipo_aporte 
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    left join no_afilia_fondo afi on afi.id_tipo_doc = afilia.id_tipo_doc and afi.num_doc = afilia.num_doc and afi.id_clase_fondo = afilia.id_clase_fondo and afi.id_mae_fondos = afilia.id_mae_fondos
    where afilia.id_clase_fondo = 1 
    
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afi.fecha_ingreso and nvl( afi.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
   
    AND ( codigo.tipo != 'EPS' or codigo.tipo != 'CCF' )
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'                    
)pension ON pension.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo, afi.fecha_ingreso, afi.fecha_retiro, afilia.id_tae
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo ON codigo.nitocc = fondo.num_doc
    left join no_afilia_fondo afi on afi.id_tipo_doc = afilia.id_tipo_doc and afi.num_doc = afilia.num_doc and afi.id_clase_fondo = afilia.id_clase_fondo and afi.id_mae_fondos = afilia.id_mae_fondos
    where afilia.id_clase_fondo = 2  
    
    and  (select fecha_fin from no_periodo where id_periodo =  $id_periodo)
    between afi.fecha_ingreso and nvl( afi.fecha_retiro, trunc(last_day( to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy') )) )
    --and afilia.estado = 1
    
    AND codigo.tipo = 'EPS'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)salud ON salud.num_doc = tab0.num_doc

/*Se verifica que si no cambio de fondo no tome fecha ingreso, para quitar la marca de R - 20191030*/
LEFT JOIN 
(
    select distinct 
    CODFON.CODIGO,
    afilia.num_doc, afilia.centro_trabajo as id_centro_trabajo, centra.codigo as centro_trabajo, apo.no_riesgo, centra.cod_ciiu, centra.cod_ncp, apo.no_riesgo as cod_riesgo,
    case when afiant.id_mae_fondos != afilia.id_mae_fondos then afilia.fecha_ingreso else null end as fecha_ingreso,
    afilia.riesgo
    from no_afilia_fondo afilia
    
    left join no_tipo_aporte apo
    on apo.id_tipo_aporte = afilia.id_tipo_aporte
    
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    
    left join no_mae_fondos maefon
    on MAEFON.ID_MAE_FONDOS = afilia.ID_MAE_FONDOS
    
    left join no_cod_fondo codfon
    on maefon.num_doc = codfon.nitocc
    
    left join (
        SELECT
        aut.*,
        ROW_NUMBER() OVER (
            partition by aut.num_doc, aut.id_clase_fondo
            ORDER BY aut.num_doc, aut.id_clase_fondo, aut.fecha_ingreso DESC
        ) AS rn
        from no_afilia_fondo aut
        where
        aut.id_clase_fondo = 3 and aut.estado = 0
    )afiant
    on afiant.num_doc = afilia.num_doc
    and afiant.id_tipo_doc = afilia.id_tipo_doc
    and afiant.rn = 1
    
    where afilia.id_clase_fondo = 3 and afilia.estado = 1 
)riesgo ON riesgo.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, afilia.fecha_ingreso
    from no_afilia_fondo afilia
    left join no_centro_trabajo centra
    on centra.id_centro_trabajo = afilia.centro_trabajo
    where afilia.id_clase_fondo = 4 and afilia.estado = 1
)ccf0 ON ccf0.num_doc = tab0.num_doc

LEFT JOIN 
(
    select distinct afilia.num_doc, codigo.codigo
    from no_liquida_aporte afilia
    left join no_mae_fondos fondo ON fondo.id_mae_fondos = afilia.id_mae_fondos
    left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc
    where afilia.id_clase_fondo = 4 
    --and afilia.estado = 1 
    AND codigo.tipo = 'CCF'
    and afilia.id_periodo = $id_periodo
    and afilia.tipo_planilla = 'A'       
)ccf ON ccf.num_doc = tab0.num_doc


left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension1 ON pension1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa/100) as TARIFA--, tab0.aporte_func AS APORTE
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1  and tab0.porcentaje_patrono > 0 -- and  ( tab0.tarifa = 16 or tab0.tarifa = 26 )
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension2 ON pension2.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, sum(tab0.valor_base_fsp) as aporte_fsp, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 1 and tab0.porcentaje_patrono = 0
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)pension3 ON pension3.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 2
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)salud1 ON salud1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 4
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)ccf1 ON ccf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 5
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)icbf1 ON icbf1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 6
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)sena1 ON sena1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 7
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)esap1 ON esap1.num_doc = tab0.num_doc

left join 
(
    select tab0.num_doc, sum(tab0.aporte_func) AS APORTE, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) AS DIAS, MAX(nvl(tab0.valor_base,0)) AS IBC,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 8
    and tab0.tipo_planilla = 'A'       
    group by tab0.num_doc
)men1 ON men1.num_doc = tab0.num_doc

left join 
(
    select
    id_periodo, num_doc,
    --id_concep_nomina,
    sum(cantidad) as cantidad
    from (
        select
        lotehr.total_horas,
        lotehr.id_periodo,
        hrext.id_tipo_doc,
        hrext.num_doc,
        hrext.cantidad,
        tiphr.id_concep_nomina

        from no_lote_hr_extra lotehr

        left join no_hr_extra hrext
        on lotehr.id_lote_hr_extra = hrext.id_lote_hr_extra

        left join no_tipo_hr_extra tiphr
        on tiphr.id_tipo_hr_extra = hrext.id_tipo_hr_extra

        where lotehr.id_periodo = $id_periodo
        and lotehr.estado = 0
    )

    group by
    id_periodo, num_doc--, id_concep_nomina
)hrextra
ON hrextra.num_doc = tab0.num_doc
        
left join(
    select
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(tab0.fecha_ini) as fecha_ini,
    max(tab0.fecha_fin) as fecha_fin,
    nvl(sum( dias_rango_mes_sin_treintayuno(tab0.fecha_ini,tab0.fecha_fin, (select id_meses from no_periodo where id_periodo = $id_periodo) ) ),0) as dias
    from(
        select 
        
        nov.id_tipo_doc,
        nov.num_doc,
        nov.id_novedad,
        nov.fecha_inicial,
        nov.fecha_terminacion,
        nom.fecha_termina,
        
        case when nov.fecha_inicial > (select fecha_ini from no_periodo where id_periodo = $id_periodo) 
        then nov.fecha_inicial 
        else (select fecha_ini from no_periodo where id_periodo = $id_periodo) end as fecha_ini,
        nom.fecha_termina as fecha_fin
        
        from no_novedad_personal nov
        
        join no_nombramiento_v nom
        on nov.id_tipo_doc = nom.id_tipo_doc
        and nov.num_doc = nom.num_doc
        
        where 
        nov.estado = 1
        and nov.id_novedad = 8
        and (
            (select fecha_ini from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
            or    
            (select fecha_fin from no_periodo where id_periodo = $id_periodo) between nov.fecha_inicial and nov.fecha_terminacion
        )
        and (
            nom.fecha_termina between (select fecha_ini from no_periodo where id_periodo = $id_periodo) and (select fecha_fin from no_periodo where id_periodo = $id_periodo)
        )
        
    )tab0  
    
    group by 
    tab0.id_tipo_doc,
    tab0.num_doc 
)novper
on novper.id_tipo_doc = tab0.id_tipo_doc and novper.num_doc = tab0.num_doc 


left join(

        select 
        tab0.id_tipo_doc,
        tab0.num_doc,
        count(tab0.id_liquida_nomina) as cantidad,
        sum(tab0.valor_liquidado) as valor_liquidado
        from no_liquida_nomina tab0
        where 
        --tab0.id_periodo = $id_periodo
        --and 
        (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = tab0.id_periodo) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
        and id_concep_nomina in (   
            (select distinct id_concep_nomina from no_agrup_deta where id_agrup_concepto = 130) 
        )
        group by tab0.id_tipo_doc, tab0.num_doc

)aporvol
on aporvol.id_tipo_doc = tab0.id_tipo_doc 
and aporvol.num_doc = tab0.num_doc 


WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo) ,'dd/mm/yyyy') ))
  )
)
and ingret.dias_ret > 0


)taborder

where
1 = 1
and ( taborder.c36 != '00' or taborder.c37 != '00' or taborder.c38 != '00' or taborder.c39 != '00' )

order by taborder.c11, taborder.c12, taborder.c24, taborder.c0

)tab 
";

//                 echo $sql;



$st = $consul->execute($sql);
$detalleXLS = $detalle = $st->fetchAll();

//foreach ($detalle as $detalle) {
//
//    $shtml.=$detalle['C1'] . "" . "" . $detalle['C2'] . "" . $detalle['C3'] . "" . $detalle['C4'] . "" . $detalle['C5'] . "" . $detalle['C6'] . "" . $detalle['C7'] . ""
//            . $detalle['C8'] . "" . $detalle['C9'] . "" . $detalle['C10'] . "" . $detalle['C11'] . "" . $detalle['C12'] . "" . $detalle['C13'] . "" . $detalle['C14'] . ""
//            . $detalle['C15'] . "" . $detalle['C16'] . "" . $detalle['C17'] . "" . $detalle['C18'] . "" . $detalle['C19'] . "" . $detalle['C20'] . "" . $detalle['C21'] . ""
//            . $detalle['C22'] . "" . $detalle['C23'] . "" . $detalle['C24'] . "" . $detalle['C25'] . "" . $detalle['C26'] . "" . $detalle['C27'] . "" . $detalle['C28'] . ""
//            . $detalle['C29'] . "" . $detalle['C30'] . "" . $detalle['C31'] . "" . $detalle['C32'] . "" . $detalle['C33'] . "" . $detalle['C34'] . "" . $detalle['C35'] . ""
//            . $detalle['C36'] . "" . $detalle['C37'] . "" . $detalle['C38'] . "" . $detalle['C39'] . "" . $detalle['C40'] . "" . $detalle['C41'] . "" . $detalle['C42'] . ""
//            . $detalle['C43'] . "" . $detalle['C44'] . "" . $detalle['C45'] . "\n";
//}

/*
 * recorrer arreglo de datos y convertir en csv
 */
$i = 1;
$j = 0;
$sep = ""; //variable global para manejo del separador
$custom_logger->info("Actualizar la diferencia de 100, 200 o 300 pesos");
$num_doc_ini = 0;
$valor_c47_sum = 0; //pension
$valor_c55_sum = 0; //salud
$valor_c51_sum = 0; //fsp 1
$valor_c52_sum = 0; //fsp 2
$valor_c65_sum = 0; //parafiscales
$valor_c67_sum = 0; //parafiscales
$valor_c69_sum = 0; //parafiscales
$valor_c71_sum = 0; //parafiscales
$valor_c73_sum = 0; //parafiscales
foreach ($detalle as $rec) {//Filas
    $custom_logger->info("Linea: " . $i++);

    /**
     * Actualizar la diferencia de 100,200 o 300 pesos en los aportes, solo si el periodo esta activo - 20190708
     * Actualizar para pension que no tenga en cuenta FSP segun cambio de (20191115), donde id_clase_fondo = 0 para no tener encuenta - 20210201
     */
    $num_doc_fila = $rec['C4'];
    $valor_c47_fila = $rec['C47']; // + $rec['C51'] + $rec['C52'];Se quita ajustar valores de FSP - 20191115
    $valor_c55_fila = $rec['C55'];
    $valor_c51_fila = $rec['C51']; //Arreglo FSP - 20210201::LAVILA
    $valor_c52_fila = $rec['C52']; //Arreglo FSP - 20210201::LAVILA
    $valor_c65_fila = $rec['C65']; //Arreglo parafiscales - 20210203::LAVILA
    $valor_c67_fila = $rec['C67']; //Arreglo parafiscales - 20210203::LAVILA
    $valor_c69_fila = $rec['C69']; //Arreglo parafiscales - 20210203::LAVILA
    $valor_c71_fila = $rec['C71']; //Arreglo parafiscales - 20210203::LAVILA
    $valor_c73_fila = $rec['C73']; //Arreglo parafiscales - 20210203::LAVILA
    $custom_logger->info("num_doc_ini: " . $num_doc_ini);
    $custom_logger->info("num_doc_fila: " . $num_doc_fila);

    if ($num_doc_ini == $num_doc_fila) {

        $valor_c47_sum += $valor_c47_fila;
        $valor_c55_sum += $valor_c55_fila;
        $valor_c51_sum += $valor_c51_fila;
        $valor_c52_sum += $valor_c52_fila;
        $valor_c65_sum += $valor_c65_fila;
        $valor_c67_sum += $valor_c67_fila;
        $valor_c69_sum += $valor_c69_fila;
        $valor_c71_sum += $valor_c71_fila;
        $valor_c73_sum += $valor_c73_fila;
    } else {

        //Actualiza registro de tercero anterior - PENSION
        $custom_logger->info("Actualiza registro de tercero anterior - PENSION");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c47_sum',0) 
    - (liq.aporte_func + nvl((SELECT   sum(aporte_func) FROM no_liquida_aporte 
        where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 0 and aporte_patrono = 0),0) ) - (liq.aporte_patrono_licnorem)   
where 
liq.id_clase_fondo = 1 and liq.aporte_patrono != 0 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem) + nvl((SELECT sum(aporte_func) FROM no_liquida_aporte where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 1 and aporte_patrono = 0),0) != nvl('$valor_c47_sum',0)
and (nvl('$valor_c47_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem + nvl(((SELECT   sum(aporte_func) FROM no_liquida_aporte where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 0 and aporte_patrono = 0)),0) )) <= 300
and (nvl('$valor_c47_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem + nvl(((SELECT   sum(aporte_func) FROM no_liquida_aporte where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 0 and aporte_patrono = 0)),0) ))  > 0
and liq.num_doc = $num_doc_ini               
EOD;

        CN_TABLE::executeSQL($sql, true);

        //Actualiza registro de tercero anterior - FSP aporte_func - 20210201::LAVILA
        $custom_logger->info("Actualiza registro de tercero anterior - FSP aporte_func");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_func = nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0) 
where 
liq.id_clase_fondo = 1 and liq.aporte_patrono = 0 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func) != nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0)
and (nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0) - (liq.aporte_func) <= 300)
and (nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0) - (liq.aporte_func)  > 0)
and liq.num_doc = $num_doc_ini                 
EOD;

        CN_TABLE::executeSQL($sql, true);

        //Actualiza registro de tercero anterior - FSP valor_base_fsp - 20210201::LAVILA
        $custom_logger->info("Actualiza registro de tercero anterior - FSP valor_base_fsp");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.valor_base_fsp = nvl('$valor_c52_sum',0)
where 
liq.id_clase_fondo = 1 and liq.aporte_patrono = 0 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.valor_base_fsp) != nvl('$valor_c52_sum',0)
and (nvl('$valor_c52_sum',0) - (liq.valor_base_fsp) <= 300)
and (nvl('$valor_c52_sum',0) - (liq.valor_base_fsp)  > 0)
and liq.num_doc = $num_doc_ini                
EOD;

        CN_TABLE::executeSQL($sql, true);

        //Actualiza registro de tercero anterior - SALUD
        $custom_logger->info("Actualiza registro de tercero anterior - SALUD");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c55_sum',0) - (liq.aporte_func) - (liq.aporte_patrono_licnorem)   
where 
liq.id_clase_fondo = 2 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem) != nvl('$valor_c55_sum',0)
and (nvl('$valor_c55_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem)) <= 300
and (nvl('$valor_c55_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

        CN_TABLE::executeSQL($sql, true);

        /*
         * Arreglo parafiscales CAJA DE COMPENSACION FAMILIAR - 20210203::LAVILA
         */
        $custom_logger->info("Actualiza registro de tercero anterior - CAJA");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c65_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 4 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c65_sum',0)
and (nvl('$valor_c65_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c65_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

        CN_TABLE::executeSQL($sql, true);

        /*
         * Arreglo parafiscales INSTITUTO DE BIENESTAR FAMILIAR - ICBF - 20210203::LAVILA
         */
        $custom_logger->info("Actualiza registro de tercero anterior - ICBF");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c69_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 5 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c69_sum',0)
and (nvl('$valor_c69_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c69_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

        CN_TABLE::executeSQL($sql, true);

        /*
         * Arreglo parafiscales SENA - 20210203::LAVILA
         */
        $custom_logger->info("Actualiza registro de tercero anterior - SENA");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c67_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 6 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c67_sum',0)
and (nvl('$valor_c67_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c67_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

        CN_TABLE::executeSQL($sql, true);

        /*
         * Arreglo parafiscales ESAP - 20210203::LAVILA
         */
        $custom_logger->info("Actualiza registro de tercero anterior - ESAP");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c71_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 7 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c71_sum',0)
and (nvl('$valor_c71_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c71_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

        CN_TABLE::executeSQL($sql, true);

        /*
         * Arreglo parafiscales MINISTERIO DE EDUCACION NACION - MEN - 20210203::LAVILA
         */
        $custom_logger->info("Actualiza registro de tercero anterior - MINISTERIO DE EDUCACION NACION - MEN");
        $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c73_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 8 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c73_sum',0)
and (nvl('$valor_c73_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c73_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

        CN_TABLE::executeSQL($sql, true);


        $valor_c47_sum = $valor_c47_fila + 0;
        $valor_c55_sum = $valor_c55_fila + 0;
        $valor_c51_sum = $valor_c51_fila + 0;
        $valor_c52_sum = $valor_c52_fila + 0;
        $valor_c65_sum = $valor_c65_fila + 0;
        $valor_c67_sum = $valor_c67_fila + 0;
        $valor_c69_sum = $valor_c69_fila + 0;
        $valor_c71_sum = $valor_c71_fila + 0;
        $valor_c73_sum = $valor_c73_fila + 0;
    }
    $num_doc_ini = $rec['C4'];
    $custom_logger->info("valor_c55_sum: " . $valor_c55_sum);

//        $shtml.='"';
    foreach ($rec as $key => $value) {//Columnas
        if ($j != 0) {
//            if ($value != '/') {
            $shtml .= $sep;
//            }
        }
//        $value = str_replace('Ñ', '#', $value);
//        $value = str_replace('ñ', '#', $value);
//        $value = str_replace('[\n|\r|\n\r]', ' ', $value);
        $shtml .= $value;
        $j++;
    }
//        $shtml.='"';
//        $this->logMessage("Linea: " . $i++);
    //salto de linea para separar totales
    $shtml .= $salto_linea;
    $j = 0;
}

//Para el ultimo registro de tercero - 20210916::LAVILA
if ($num_doc_ini == $num_doc_fila) {
    //Actualiza registro de tercero anterior - PENSION
    $custom_logger->info("Actualiza registro de tercero anterior - PENSION");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c47_sum',0) 
    - (liq.aporte_func + nvl((SELECT   sum(aporte_func) FROM no_liquida_aporte 
        where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 0 and aporte_patrono = 0),0) ) - (liq.aporte_patrono_licnorem)   
where 
liq.id_clase_fondo = 1 and liq.aporte_patrono != 0 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem) + nvl((SELECT sum(aporte_func) FROM no_liquida_aporte where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 1 and aporte_patrono = 0),0) != nvl('$valor_c47_sum',0)
and (nvl('$valor_c47_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem + nvl(((SELECT   sum(aporte_func) FROM no_liquida_aporte where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 0 and aporte_patrono = 0)),0) )) <= 300
and (nvl('$valor_c47_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem + nvl(((SELECT   sum(aporte_func) FROM no_liquida_aporte where num_doc = $num_doc_ini  and id_periodo = $id_periodo and  id_clase_fondo = 0 and aporte_patrono = 0)),0) ))  > 0
and liq.num_doc = $num_doc_ini               
EOD;

    CN_TABLE::executeSQL($sql, true);

    //Actualiza registro de tercero anterior - FSP aporte_func - 20210201::LAVILA
    $custom_logger->info("Actualiza registro de tercero anterior - FSP aporte_func");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_func = nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0) 
where 
liq.id_clase_fondo = 1 and liq.aporte_patrono = 0 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func) != nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0)
and (nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0) - (liq.aporte_func) <= 300)
and (nvl('$valor_c51_sum',0) + nvl('$valor_c52_sum',0) - (liq.aporte_func)  > 0)
and liq.num_doc = $num_doc_ini                 
EOD;

    CN_TABLE::executeSQL($sql, true);

    //Actualiza registro de tercero anterior - FSP valor_base_fsp - 20210201::LAVILA
    $custom_logger->info("Actualiza registro de tercero anterior - FSP valor_base_fsp");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.valor_base_fsp = nvl('$valor_c52_sum',0)
where 
liq.id_clase_fondo = 1 and liq.aporte_patrono = 0 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.valor_base_fsp) != nvl('$valor_c52_sum',0)
and (nvl('$valor_c52_sum',0) - (liq.valor_base_fsp) <= 300)
and (nvl('$valor_c52_sum',0) - (liq.valor_base_fsp)  > 0)
and liq.num_doc = $num_doc_ini                
EOD;

    CN_TABLE::executeSQL($sql, true);

    //Actualiza registro de tercero anterior - SALUD
    $custom_logger->info("Actualiza registro de tercero anterior - SALUD");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c55_sum',0) - (liq.aporte_func) - (liq.aporte_patrono_licnorem)   
where 
liq.id_clase_fondo = 2 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem) != nvl('$valor_c55_sum',0)
and (nvl('$valor_c55_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem)) <= 300
and (nvl('$valor_c55_sum',0) - (liq.aporte_func + liq.aporte_patrono + liq.aporte_patrono_licnorem))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

    CN_TABLE::executeSQL($sql, true);

    /*
     * Arreglo parafiscales CAJA DE COMPENSACION FAMILIAR - 20210203::LAVILA
     */
    $custom_logger->info("Actualiza registro de tercero anterior - CAJA");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c65_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 4 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c65_sum',0)
and (nvl('$valor_c65_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c65_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

    CN_TABLE::executeSQL($sql, true);

    /*
     * Arreglo parafiscales INSTITUTO DE BIENESTAR FAMILIAR - ICBF - 20210203::LAVILA
     */
    $custom_logger->info("Actualiza registro de tercero anterior - ICBF");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c69_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 5 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c69_sum',0)
and (nvl('$valor_c69_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c69_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

    CN_TABLE::executeSQL($sql, true);

    /*
     * Arreglo parafiscales SENA - 20210203::LAVILA
     */
    $custom_logger->info("Actualiza registro de tercero anterior - SENA");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c67_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 6 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c67_sum',0)
and (nvl('$valor_c67_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c67_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

    CN_TABLE::executeSQL($sql, true);

    /*
     * Arreglo parafiscales ESAP - 20210203::LAVILA
     */
    $custom_logger->info("Actualiza registro de tercero anterior - ESAP");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c71_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 7 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c71_sum',0)
and (nvl('$valor_c71_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c71_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

    CN_TABLE::executeSQL($sql, true);

    /*
     * Arreglo parafiscales MINISTERIO DE EDUCACION NACION - MEN - 20210203::LAVILA
     */
    $custom_logger->info("Actualiza registro de tercero anterior - MINISTERIO DE EDUCACION NACION - MEN");
    $sql = <<<EOD
update no_liquida_aporte liq set liq.aporte_patrono = nvl('$valor_c73_sum',0) - (liq.aporte_func)   
where 
liq.id_clase_fondo = 8 and liq.tipo_planilla = 'A' 
and liq.id_periodo in ( SELECT id_periodo fROM no_periodo where id_periodo = $id_periodo and estado = 1 )
and (liq.aporte_func + liq.aporte_patrono) != nvl('$valor_c73_sum',0)
and (nvl('$valor_c73_sum',0) - (liq.aporte_func + liq.aporte_patrono)) <= 300
and (nvl('$valor_c73_sum',0) - (liq.aporte_func + liq.aporte_patrono))  > 0
and liq.num_doc = $num_doc_ini                
EOD;

    CN_TABLE::executeSQL($sql, true);
}

//echo "Fin";
//die();
fwrite($archivo, $shtml);
fclose($archivo);

$shtmlAuto .= $shtml;
$shtml = "";


//ARCHIVO R6 Total de aportes para riesgos laborales
$archivo = fopen("uploads/archivos_banco/r6totapr.csv", "w"); //generacion del nuevo documento txt.
//$shtml = "R601\tR602\tR603\tR604\tR605\tR606\tR607\tR608\tR609\tR610\tR611\tR612\tR613\tR614,\tR615\tR616\tR617\tR618\t\n";

/**
 * Solo muestra el registro si hay valor de descuento de autorizacion - 20170516
 * Cambios 2017, espacios en blanco y 0 - 20170815
 */
$sql = "
select 

'06' as c1,
lpad(rownum,5,0) as c2,
tab.c3,
tab.C4,
tab.C5,
tab.c6,
tab.c7,
tab.c8,
tab.c9,
tab.c10,
tab.c11,
tab.c12,
tab.c13,
tab.c14,
tab.c15,
tab.c16,
tab.c17,
tab.c18

from (

select 

lpad(tab0.codigo,6,' ') as c3,
rpad(tab0.nitocc,16,' ') as c4,
digito_verificacion(tab0.nitocc) as c5,
lpad(sum(tab0.aporte_patrono),13,0) as c6,
rpad(nvl(tab0.num_autorizacion,' '),15,' ') as c7,
lpad(nvl(tab0.valor_total,0),13,0) as c8,
lpad(nvl(tab0.valor_aporte,0),13,0) as c9,
lpad(sum(tab0.aporte_patrono),13,0) as c10,
lpad(0,4,0) as c11,
lpad(0,11,0) as c12,
lpad(sum(tab0.aporte_patrono),13,0) as c13,
lpad(0,10,0) as c14,
lpad(0,11,0) as c15,
lpad(sum(tab0.aporte_patrono),13,0) as c16,
lpad( round((sum(tab0.aporte_patrono) * 1 / 100) ),11,0) as c17,
LPAD( count (tab0.nitocc),8,0) as c18

from (

select 
autori.num_autorizacion,
autori.valor_total,
autori.valor_aporte,
tab0.num_doc,
rpad(NVL(riesgo1.codigo, ' '),6,' ') AS codigo, 
rpad(nvl(riesgo1.tipo, ' '),15,' ') as tipo, 
nvl(riesgo1.nitocc,0) as nitocc,
nvl(riesgo1.aporte,0) as aporte,
nvl(riesgo1.aporte_patrono,0) as aporte_patrono

from no_estado_func_v tab0

left join centro_operacion tab1 ON tab1.id_cen_op = tab0.id_cen_op
left join departamento tab2 ON tab2.id_depto = tab1.id_depto
left join municipios tab3 ON tab3.codmun = tab1.codmun
left join no_datos_funcionario_v tab4 ON tab4.id_tipo_doc = tab0.id_tipo_doc and tab4.num_doc = tab0.num_doc

--left join no_nombramiento tab5 on tab5.id_tipo_doc = tab0.id_tipo_doc and tab5.num_doc = tab0.num_doc
left join (
  SELECT
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.estado DESC, aut.fecha_ingreso DESC, aut.fecha_nombra DESC, aut.id_nombramiento DESC
   ) AS rn
  from no_nombramiento aut
  
  left join no_periodo_v per
  on per.id_periodo = aut.id_periodo
  
  where 
  per.anho_mes <= ( SELECT anho_mes FROM no_periodo_v where id_periodo = $id_periodo )
)tab5
on tab5.id_tipo_doc = tab0.id_tipo_doc 
and tab5.num_doc = tab0.num_doc
and tab5.rn = 1

left join no_dp_v tab6 on tab6.id_dp = tab0.id_dp

left join 
(
    select 
    tab0.num_doc, codigo.codigo, codigo.tipo, codigo.nitocc,
    sum(tab0.aporte_func) as aporte, sum(tab0.aporte_patrono) as aporte_patrono, max(tab0.num_dias) as dias, max(nvl(tab0.valor_base,0)) as ibc,
    max(tab0.tarifa)/100 as TARIFA/*, tab0.aporte_func AS APORTE*/
    from no_liquida_aporte tab0
    left join no_mae_fondos fondo on fondo.id_mae_fondos = tab0.id_mae_fondos
    
    --left join no_cod_fondo codigo on codigo.nitocc = fondo.num_doc  
    left join (
      SELECT
       aut.*,
       ROW_NUMBER() OVER (
        partition by aut.nitocc
        ORDER BY aut.nitocc 
       ) as rn
      from no_cod_fondo aut
    )codigo
    on codigo.nitocc = fondo.num_doc
    and codigo.rn = 1
    
    where tab0.id_periodo = $id_periodo and tab0.id_clase_fondo = 3
    and tab0.tipo_planilla = 'A'     
    group by tab0.num_doc, codigo.codigo, codigo.tipo, codigo.nitocc
)riesgo1 ON riesgo1.num_doc = tab0.num_doc


left join (
select 
tab1.valor as valor_total,
tab1.aporte_eps + tab1.aporte_afp as valor_aporte,
rownum as rn, 
tab.* 

from(

  select 
  autori.* 
  from no_autorizacion autori
  where autori.id_periodo = $id_periodo
  order by 
  autori.fecha_proceso desc, autori.id_autorizacion desc

)tab

join (
  select 
  sum(nvl(aporte_eps,0)) as aporte_eps, 
  sum(nvl(aporte_afp,0)) as aporte_afp, 
  sum(nvl(valor,0)) as valor, 
  id_periodo 
  from no_autorizacion 
  group by   id_periodo
)tab1 on tab1.id_periodo = tab.id_periodo

where
rownum = 1
)autori on autori.rn = 1 

WHERE tab0.periodo = $id_periodo 
and (tab0.actual = 1 or
  ( tab0.actual = 0 
    and tab5.fecha_retiro != to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
    and tab5.fecha_termina
  between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
  and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo_actual) ,'dd/mm/yyyy') ))
  )
)

)tab0

where
tab0.valor_total != 0

group by 
tab0.codigo, tab0.tipo, tab0.nitocc, tab0.num_autorizacion, tab0.valor_total, tab0.valor_aporte

order by
tab0.codigo

)tab
 
";

$st = $consul->execute($sql);
$detalle = $st->fetchAll();

/*
 * recorrer arreglo de datos y convertir en csv
 */
$i = 0;
$j = 0;
$sep = ""; //variable global para manejo del separador
foreach ($detalle as $rec) {
//        $shtml.='"';
    foreach ($rec as $key => $value) {
        if ($j != 0) {
//            if ($value != '/') {
            $shtml .= $sep;
//            }
        }
//        $value = str_replace('Ñ', '#', $value);
//        $value = str_replace('ñ', '#', $value);
//        $value = str_replace('[\n|\r|\n\r]', ' ', $value);
        $shtml .= $value;
        $j++;
    }
//        $shtml.='"';
//        $this->logMessage("Linea: " . $i++);
    //salto de linea para separar totales
    $shtml .= $salto_linea;
    $j = 0;
}

fwrite($archivo, $shtml);
fclose($archivo);

$shtmlAuto .= $shtml;
$shtml = "";


/*
 * guardar y cerrar archivo
 */
//$shtmlAuto.=$salto_linea;
fwrite($fp, $shtmlAuto);
fclose($fp);

/*
 * Si es XLS - 20180718
 */
if ($type == "XLS") {

    /*
     * Array de cabecera archivo
     */
    $array_head = array(
        "TIPO REGISTRO", "SECUENCIA", "TIPO DOCUMENTO", "IDENTIFICACION", "TIPO COTIZANTE", "SUBTIPO COTIZANTE", "EXTRANJERO NO COTIZA PENSION", "RESIDENTE EXTERIOR", "CODIGO DEPARTAMENTO", "CODIGO MUNICIPIO",
        "PRIMER APELLIDO", "SEGUNDO APELLIDO", "PRIMER NOMBRE", "SEGUNDO NOMBRE", "ING", "RET", "TDE", "TAE", "TDP", "TAP",
        "VSP", "CORRECIONES", "VST", "SLN", "IGE", "LMA", "VAC", "AVP", "VCT", "IRP",
        "CODIGO PENSION", "CODIGO PENSION TRASLADO", "CODIGO SALUD", "CODIGO SALUD TRASLADO", "CODIGO CCF", "DIAS PENSION", "DIAS SALUD", "DIAS RIESGOS", "DIAS CCF", "SALARIO BASICO",
        "SALARIO INTEGRAL", "IBC PENSION", "IBC SALUD", "IBC RIESGOS", "IBC CCF", "TARIFA AFP", "COTIZACION OBLIGATORIA PENSION", "APORTE VOLUNTARIO AFILIADO", "COTIZACION VOLUNTARIA APORTANTE", "TOTAL COTIZACION",
        "FSP SOLIDARIDAD", "FSP SUBSISTENCIA", "VALOR NO RETENIDO", "TARIFA EPS", "COTIZACION SALUD", "VALOR UPC", "NUMERO IGE", "VALOR IGE", "NUMERO LMA", "VALOR LMA",
        "TARIFA RIESGOS", "CENTRO TRABAJO", "COTIZACION RIESGOS", "TARIFA CCF", "VALOR CCF", "TARIFA SENA", "VALOR SENA", "TARIFA ICBF", "VALOR ICBF", "TARIFA ESAP",
        "VALOR ESAP", "TARIFA MINISTERIO", "VALOR MINISTERIO", "74", "75", "76", "CODIGO RIESGO", "78", "TIPO APORTE PENSION", "FECHA ING",
        "FECHA RET", "FECHA VSP", "FECHA SLN INI", "FECHA SLN FIN", "FECHA IGE INI", "FECHA IGE FIN", "FECHA LMA INI", "FECHA LMA FIN", "FECHA VAC-LR INI", "FECHA VAC-LR FIN",
        "FECHA VCT INI", "FECHA VCT FIN", "FECHA IRL INI", "FECHA IRL FIN", "IBC PARAFISCALES", "HORAS EXTRAS", "RAD EXTERIOR"
    );


    $html = "<h2>PLANILLA DE AUTOLIQUIDACION RESOL.2388</h2>";
    $html .= "<h2>" . $nombre_periodo . "</h2>";

    $html .= '<table border="1">';
    $html .= '<tr>';

    foreach ($array_head as $key => $value) {

        $html .= '<td style="text-align:center;background-color:rgb(100, 100, 100); color: rgb(255, 255, 255);">' . $value . '</td>';
    }
    $html .= '</tr>';


    /**
     * FORMATO HTML PARA TABLAS - 20141205
     * Texto . td style='mso-number-format:\@'> 
     * Numero . td style='mso-number-format:\"0\.00'>".str_replace('.',',',$recaudado)
     * Fecha . td style='mso-number-format:\"yyyy\-mm\-dd\"'>
     */
    foreach ($detalleXLS as $keyxls => $value) {
        $html .= '<tr>';

        foreach ($value as $key => $registro) {
            if (!is_numeric($registro)) {

                if ($key == "FECHA_INGRE" || $key == "FECHA_TERMINA") {
                    $html .= '<td style="text-align:center">' . $registro . '</td>';
                } else {

                    $html .= '<td>' . $registro . '</td>';
                }
            } else {
                if ($key == "NUM_DOC" || $key == "NUM_DIAS") {
                    $html .= '<td style="text-align:center">' . $registro . '</td>';
                } elseif ($key == "C1" || $key == "C2" || $key == "C5" || $key == "C6" || $key == "C9" || $key == "C10") {

                    //$html .= '<td style="mso-number-format:\'@\';">\'' . $registro . '</td>';
                    $html .= '<td style="text-align:right" >\'' . $registro . '</td>';
                } else {
                    $html .= '<td style="text-align:right" >' . str_replace('.', ',', $registro) . '</td>';
                }
            }
        }
        $html .= '</tr>';
    }

    $html .= '</table>';


    $nombre = "PlanillaAutoliquidacionResol2388_" . date("d") . date("m") . date("Y") . ".xls";
    header("Content-type: application/vnd.ms-excel; name='excel'");
    header("Content-Disposition: filename=" . $nombre);
    header("Pragma: no-cache");
    header("Expires: 0");
    echo $html;
    die();
    exit();
}

/**
 * Se coloca llamado a saldos del mes si es activo - 20210915::LAVILA
 */
$sql = "
SELECT
$entidad_cliente as entidad_cliente,
id_anhos,
id_meses,
'true' as estado
FROM no_periodo
where
id_periodo = $id_periodo
and estado = 1 
";

$st = $consul->execute($sql);
$records = $st->fetchAll();
if (count($records) > 0) {

    $record = $records[0];

    foreach ($record as $key => $value) {
        $params[strtolower($key)] = $value;
    }

    if ($service_url != null) {

        //URL de servicio correo
        $url = $service_url . "saldo_aporte/update.json";

        CN_TABLE::curlPostAsync($url, $params);
    }
}

/*
 * salida csv
 */
if ($entidad_cliente == 9) {
    echo "<script>
    window.location='" . "/nomina_pub/web/" . $sfile . "'</script>";
} else {
    echo "<script>
    window.location='" . "/nomina/web/" . $sfile . "'</script>";
}
die();
?>
