#!/usr/bin/perl -w

use 5.030;

my $DEBUG = 0;

# Supuesto general: la pirÃ¡mide poblacional es la actual. Y suponemos que no puede variar mucho.
# v.3 -> objetivo de saber los parÃ¡metros de un sistema viable (saldo positivo de $fondo) pero no excesivo en el superÃ¡vit

my $edad_trabajo = 24; # este es un supuesto medio entre 18 y 24 (graduados) pero la tendencia es a dejar que trajen antes
                       # sencillamente para mover el otro extremo de la vida laboral. En Holanda se puede cotizar desde los 15
                       # En EspaÃ±a, aunque siempre estuvo de moda decir que la FP "tipo alemana" era lo ideal, el caso es que 
                       # las universidades crecieron como setas y todavÃ­a tienen pedigree. Esta es una variable sensible, y puede
                       # ser necvesario que se cotice desde joven (16), 15 en Holanda
my $edad_jubilacion = 67;

# my $muerte = 86;       # actualmente esta creo que es solo la de las mujeres, pero bueno
my $muerte_estadistica = 101;  # no hay dato       # no comments about comments

# En EspaÃ±a entre 1999 y 2019, la esperanza de vida al nacimiento de los hombres ha pasado de 75,4 a 80,9 aÃ±os y la de las mujeres de 82,3 a 86,2 aÃ±os, segÃºn los indicadores demogrÃ¡ficos bÃ¡sicos que publica el INE.5 jul 2021

my $sueldo_nominal = 19_000; # a la edad de inicio. Es referencial y anual. En miles.
my $sueldo_final = 29_000;  # datos medios artÃ­culo El PaÃ­s
my $gradiente = $sueldo_final / $sueldo_nominal; # para toda la vida laboral, incremento adicional por experiencia
my $g = $gradiente/($edad_jubilacion-$edad_trabajo);
    
my $desempleo = 0.14;  # a largo plazo (se espera 13% 2022)
my $tasa_actividad = 0.5865; # tambiÃ©n a largo plazo, pero deberÃ­a ser mÃ¡s estable, este es de un nivel alto actual 2022
my $actividad = (1-$desempleo) * $tasa_actividad;

my $IPC = 0.04; # a largo plazo, objetivo BCE 2%, que subirÃ¡
my $r = 0.01; # tasa real, por encima del nominal // suele ser algo menos de 2% + euribor

my $porcentaje_financiacion = 0.3;           # aquÃ­ lo normal era 1/3 pero vamos a probar valores mÃ¡s altos
my $porcentaje_coste_jubilacion = 1.2;  # ADDENDA: Como me fustiga el dato positivo vamos a suponer que cuestan mÃ¡s los ancianos
                                       # para simular a grosso modo, es derivado de que los cuidados pueden ir en relaciÃ³n 1:4
                                       # serÃ­a resultado de tratar de implantar un modelo comunal no necesariamente pÃºblico con incentivos
                                       # pero eso se derivarÃ­a de que alguien ahorrase con ello, lo que debe provenir de una renta mayor
                                       # Razonamiento: 5-6 ancianos pueden ser cuidados por 1 persona en 1 puesto, pero para cubrir un puesto 24/7
                                       # necesitamos 5 personas, luego la relaciÃ³n real puede ser 5/6, o mÃ¡s favorable, 4/6
                                        
                                       # A simple vista, las residencias de ancianos son de tamaÃ±o medio-pequeÃ±o 

# my $base = 1;       # 47_500_000;  # sustituido por @pob

my $iteraciones = 1000;

my $num_anos_calculo = 25;  # FÃ³rmula de media de los Ãºltimos 25 aÃ±os para calcular la pensiÃ³n. SubirÃ¡ a 35

my ($sueldo, $fondo, $pension, $c, $cracks) = (0,0,0,0,0);

my @tmp;
my @pob = (0) x 111;

# open IN, '<', "POBLACION.csv" or die $!;
@tmp = <DATA>;
# close IN;

my $e;
for my $line (@tmp){
    chomp $line;
    next if ($line =~ /^#/);
    last if ($line =~ /__END__/);
    if ( $line =~ m/sexos\;(\d+)/ ){
	$e = $1;
	if ( $line =~ m/2021\;(\d+\.\d+)/ ){
	    $pob[$e] = $1;
	    $pob[$e] =~ s/\.//g;
	    say "pob[$e] = $pob[$e]" if $DEBUG;
	}
    }
}
say "File readed";

my $MINIMAX = 9e99;

my @salario_que_cuenta;
for (my $p = $porcentaje_financiacion; $p <= 0.41; $p += 0.01){
    for (my $q = $porcentaje_coste_jubilacion; $q >= 0.8 ; $q -= 0.05){
 
	my $max = -9e99;
	my $min = 9e99;
	$c = 0;
	$cracks=0;

	for my $k (1 .. $iteraciones){
	    $sueldo = $sueldo_nominal;
	    $fondo = $pension = 0;
	    @salario_que_cuenta = ();
	
	    for (my $i = $edad_trabajo ; $i < $muerte_estadistica ; $i++) {    # 0j0, son desigualdades a propÃ³sito 
		if ($i < $edad_jubilacion){
		    $fondo += $pob[$i] * $sueldo * $p * $actividad;
		    $sueldo += $sueldo_nominal * $g;     # subida debida a la experiencia
		    push @salario_que_cuenta, $sueldo if ($i >= $edad_jubilacion-$num_anos_calculo);
		    $sueldo += $sueldo * $IPC * coef();  # sueldo aleatorizado
		}else{     #
		    if ($i == $edad_jubilacion) { $pension = calculo_p(@salario_que_cuenta); }
		    $fondo -= ( $pob[$i] * $q * $pension );  # esto podrÃ­a hacerse creciente o mÃ¡s variable con la edad
		    $cracks++ if $fondo < 0;
		    $pension += $pension * $IPC;
		}
		$fondo += ($fondo * r2()) if ($fondo > 0);     # rendimientos aleatorizados
		say "$i $pob[$i] $sueldo $pension -> $fondo" if $DEBUG;
	    }
	    
	    $max = $fondo if ($fondo > $max);
	    $min = $fondo if ($fondo < $min);
	    if ($fondo > 0){ $c++; }
	    print "\r$k" if $DEBUG;
	}
#	$cracks /= $iteraciones;
#	$c /= $iteraciones;   
	if ($c >= 0.75 * $iteraciones && $cracks == 0 && $max <= $MINIMAX && $min >= 0){
	    $MINIMAX = $max;
	    say "\n$0 $iteraciones p=$p q=$q gradiente=$gradiente ocupaciÃ³n=$actividad  =>  fondo  MINIMAX $MINIMAX  Npositivo $c  Ncracks $cracks";
	}
    }
}

exit 1;


sub coef {
    # el coeficiente de la simulaciÃ³n a aplicar a ciertos parÃ¡metros 
    # para calcular todos los posibles escenarios    
    return 0.95 + rand() * 0.1;
}
sub r2 {
    # la rentabilidad puede oscilar entre IPC-0.05 y IPC+0.049, del interÃ©s real
    return ($IPC + $r) * coef();
}
sub calculo_p {
    my @d = @_;
    die if scalar(@d) != $num_anos_calculo;
    my $sum;
    for (@d){
	$sum += $_;
    }
    return $sum / $num_anos_calculo;
}
__DATA__
# Sexo;Edad;Provincias;Periodo;Total
#Ambos sexos;Total;Total Nacional;1 de julio de 2021;47.326.687
Ambos sexos;99 años;Total Nacional;1 de julio de 2021;10.681
Ambos sexos;98 años;Total Nacional;1 de julio de 2021;15.739
Ambos sexos;97 años;Total Nacional;1 de julio de 2021;22.271
Ambos sexos;96 años;Total Nacional;1 de julio de 2021;30.676
Ambos sexos;95 años;Total Nacional;1 de julio de 2021;41.505
Ambos sexos;94 años;Total Nacional;1 de julio de 2021;53.951
Ambos sexos;93 años;Total Nacional;1 de julio de 2021;70.290
Ambos sexos;92 años;Total Nacional;1 de julio de 2021;89.488
Ambos sexos;91 años;Total Nacional;1 de julio de 2021;111.608
Ambos sexos;90 años;Total Nacional;1 de julio de 2021;134.008
Ambos sexos;9 años;Total Nacional;1 de julio de 2021;478.212
Ambos sexos;89 años;Total Nacional;1 de julio de 2021;157.984
Ambos sexos;88 años;Total Nacional;1 de julio de 2021;183.365
Ambos sexos;87 años;Total Nacional;1 de julio de 2021;201.652
Ambos sexos;86 años;Total Nacional;1 de julio de 2021;218.905
#Ambos sexos;85 y más años;Total Nacional;1 de julio de 2021;1.597.299
Ambos sexos;85 años;Total Nacional;1 de julio de 2021;241.174
Ambos sexos;84 años;Total Nacional;1 de julio de 2021;249.399
Ambos sexos;83 años;Total Nacional;1 de julio de 2021;237.391
Ambos sexos;82 años;Total Nacional;1 de julio de 2021;220.949
Ambos sexos;81 años;Total Nacional;1 de julio de 2021;271.891
Ambos sexos;80 años;Total Nacional;1 de julio de 2021;305.482
Ambos sexos;8 años;Total Nacional;1 de julio de 2021;457.582
Ambos sexos;79 años;Total Nacional;1 de julio de 2021;295.593
Ambos sexos;78 años;Total Nacional;1 de julio de 2021;340.575
Ambos sexos;77 años;Total Nacional;1 de julio de 2021;376.560
Ambos sexos;76 años;Total Nacional;1 de julio de 2021;397.396
Ambos sexos;75 años;Total Nacional;1 de julio de 2021;405.656
Ambos sexos;74 años;Total Nacional;1 de julio de 2021;412.677
Ambos sexos;73 años;Total Nacional;1 de julio de 2021;448.047
Ambos sexos;72 años;Total Nacional;1 de julio de 2021;463.427
Ambos sexos;71 años;Total Nacional;1 de julio de 2021;449.760
Ambos sexos;70 años;Total Nacional;1 de julio de 2021;450.617
Ambos sexos;7 años;Total Nacional;1 de julio de 2021;447.990
Ambos sexos;69 años;Total Nacional;1 de julio de 2021;474.940
Ambos sexos;68 años;Total Nacional;1 de julio de 2021;495.196
Ambos sexos;67 años;Total Nacional;1 de julio de 2021;499.650
Ambos sexos;66 años;Total Nacional;1 de julio de 2021;514.402
Ambos sexos;65 años;Total Nacional;1 de julio de 2021;537.131
Ambos sexos;64 años;Total Nacional;1 de julio de 2021;567.567
Ambos sexos;63 años;Total Nacional;1 de julio de 2021;596.927
Ambos sexos;62 años;Total Nacional;1 de julio de 2021;613.965
Ambos sexos;61 años;Total Nacional;1 de julio de 2021;632.683
Ambos sexos;60 años;Total Nacional;1 de julio de 2021;642.574
Ambos sexos;6 años;Total Nacional;1 de julio de 2021;447.018
Ambos sexos;59 años;Total Nacional;1 de julio de 2021;650.962
Ambos sexos;58 años;Total Nacional;1 de julio de 2021;672.037
Ambos sexos;57 años;Total Nacional;1 de julio de 2021;702.554
Ambos sexos;56 años;Total Nacional;1 de julio de 2021;717.111
Ambos sexos;55 años;Total Nacional;1 de julio de 2021;716.900
Ambos sexos;54 años;Total Nacional;1 de julio de 2021;729.917
Ambos sexos;53 años;Total Nacional;1 de julio de 2021;737.967
Ambos sexos;52 años;Total Nacional;1 de julio de 2021;740.126
Ambos sexos;51 años;Total Nacional;1 de julio de 2021;747.929
Ambos sexos;50 años;Total Nacional;1 de julio de 2021;757.745
Ambos sexos;5 años;Total Nacional;1 de julio de 2021;437.754
Ambos sexos;49 años;Total Nacional;1 de julio de 2021;769.726
Ambos sexos;48 años;Total Nacional;1 de julio de 2021;777.865
Ambos sexos;47 años;Total Nacional;1 de julio de 2021;789.491
Ambos sexos;46 años;Total Nacional;1 de julio de 2021;802.135
Ambos sexos;45 años;Total Nacional;1 de julio de 2021;808.171
Ambos sexos;44 años;Total Nacional;1 de julio de 2021;803.885
Ambos sexos;43 años;Total Nacional;1 de julio de 2021;791.365
Ambos sexos;42 años;Total Nacional;1 de julio de 2021;769.113
Ambos sexos;41 años;Total Nacional;1 de julio de 2021;741.069
Ambos sexos;40 años;Total Nacional;1 de julio de 2021;713.066
Ambos sexos;4 años;Total Nacional;1 de julio de 2021;420.410
Ambos sexos;39 años;Total Nacional;1 de julio de 2021;681.233
Ambos sexos;38 años;Total Nacional;1 de julio de 2021;648.396
Ambos sexos;37 años;Total Nacional;1 de julio de 2021;620.402
Ambos sexos;36 años;Total Nacional;1 de julio de 2021;599.107
Ambos sexos;35 años;Total Nacional;1 de julio de 2021;578.241
Ambos sexos;34 años;Total Nacional;1 de julio de 2021;561.959
Ambos sexos;33 años;Total Nacional;1 de julio de 2021;551.906
Ambos sexos;32 años;Total Nacional;1 de julio de 2021;544.018
Ambos sexos;31 años;Total Nacional;1 de julio de 2021;535.499
Ambos sexos;30 años;Total Nacional;1 de julio de 2021;527.539
Ambos sexos;3 años;Total Nacional;1 de julio de 2021;395.826
Ambos sexos;29 años;Total Nacional;1 de julio de 2021;524.812
Ambos sexos;28 años;Total Nacional;1 de julio de 2021;518.210
Ambos sexos;27 años;Total Nacional;1 de julio de 2021;501.074
Ambos sexos;26 años;Total Nacional;1 de julio de 2021;487.416
Ambos sexos;25 años;Total Nacional;1 de julio de 2021;481.464
Ambos sexos;24 años;Total Nacional;1 de julio de 2021;480.356
Ambos sexos;23 años;Total Nacional;1 de julio de 2021;476.559
Ambos sexos;22 años;Total Nacional;1 de julio de 2021;476.459
Ambos sexos;21 años;Total Nacional;1 de julio de 2021;483.667
Ambos sexos;20 años;Total Nacional;1 de julio de 2021;484.377
Ambos sexos;2 años;Total Nacional;1 de julio de 2021;373.710
Ambos sexos;19 años;Total Nacional;1 de julio de 2021;480.033
Ambos sexos;18 años;Total Nacional;1 de julio de 2021;484.095
Ambos sexos;17 años;Total Nacional;1 de julio de 2021;493.014
Ambos sexos;16 años;Total Nacional;1 de julio de 2021;497.498
Ambos sexos;15 años;Total Nacional;1 de julio de 2021;503.573
Ambos sexos;14 años;Total Nacional;1 de julio de 2021;509.164
Ambos sexos;13 años;Total Nacional;1 de julio de 2021;519.047
Ambos sexos;12 años;Total Nacional;1 de julio de 2021;514.640
Ambos sexos;11 años;Total Nacional;1 de julio de 2021;496.537
Ambos sexos;100 y más años;Total Nacional;1 de julio de 2021;14.001
Ambos sexos;10 años;Total Nacional;1 de julio de 2021;489.217
Ambos sexos;1 año;Total Nacional;1 de julio de 2021;353.564
Ambos sexos;0 años;Total Nacional;1 de julio de 2021;328.226
__END__
  
Del cÃ¡lculo simple se deduce que es prÃ¡cticamente posible que una persona aislada 
  autofinancie su pensiÃ³n a menos que incremente notablemente su sueldo durante la
  vida laboral.
Al parecer el efecto de alisado a la baja de la fÃ³rmula de cÃ¡lculo de pensiones es
    suficente aplicÃ¡ndose a 25 aÃ±os y puede retrasarse la ampliaciÃ³n a 35.
Por contra, siempre parece buena idea que la incorporaciÃ³n al mercado sea cuanto 
    antes posible.
  
