#!/usr/bin/perl -w use 5.034; # use Term::ANSIColor; # print color('bold white'); my $DEBUG = 1; my $RETARD = 0; say $0; say scalar localtime(); # 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 $cifra_deficit = -11_192_000_000 ; # año 2021 my $gastos_generales_SS = -4_200_000_000; # año 2021 my $gastos_transfer_2021 = -167_341_679.32; # -> base de ajuste my $pensiones_no_contributivas = -2_600_000_000; # redondeando, año 2022. Son muy bajas mensualmente. my $edad_trabajo = 21; # 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; # la adopción de los 67 es gradual. Por otro lado es posible que sea imposible parar las jubilaciones anticipadas # 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 @renta; my $z = 1.1; for my $j (16 .. $edad_jubilacion){ # si parte de 16 o no, no importa, ya que el salario bruto que se usa es > $edad_trabajo que en media es más alto # 2018: Todas las edades 24.009,12 # Como estamos en 2022 multiplico todo por ... 1.1, y en general, esto puede proyectarse if ($j < 25){ $renta[$j] = 12417.98 * $z; }elsif ($j <= 34){ $renta[$j] = 19350.14 * $z; }elsif ($j <= 44){ $renta[$j] = 24380.69 * $z; }elsif ($j <= 54){ $renta[$j] = 26416.99 * $z; }elsif ($j <= $edad_jubilacion){ $renta[$j] = 27150.93 * $z; }else{ die "Error gordo"; } say "$j $renta[$j]" if $DEBUG; } my $desempleo = 0.14; # a largo plazo (a largo plazo puede ser del 14% pero ahora para mayores de 24 está en 11.4%) RESUMIENDO: 14% 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. No veo el porqué habría que esperar # que decayese porque toda la nueva tecnología abre mercados en fondo y forma. Lo que no lo hacían eran los mecheros de pastores my $actividad_efectiva = (1-$desempleo) * $tasa_actividad; # lo mejor es aleatorizarlo porque min=52% MAX=60% say "Supuesto: actividad_efectiva = $actividad_efectiva" if $DEBUG; my $IPC = 0.05; # a largo plazo, objetivo BCE 2%, que subirá. Esto es importante pero desconocido. «Será lo que nos dé la gana» diría el BCE my $r = $IPC-0.01; # tasa real, por encima del nominal (este es el problema)// suele ser algo menos de 2% + euribor /* Como lo uso para capitalizar, resto */ my $eps = 0.05; # variable sin uso my $porcentaje_financiacion = 0.283+0.0705+0.002+0.007; # aquí lo normal era 1/3 pero vamos a probar valores más altos # Más bajos se puede meter 0.283 de contingencias comunes SS régimen gral. actual, pero tambnién # hay desempleo, FOGASA y formación profesional... my $morosos_SS = 0.04; # artículo 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 # Resumen: tomo 1 como punto de duda # my $base = 1; # 47_500_000; # sustituido por @pob my ($fondo, $cracks) = (0,0); my @pob = (0) x 111; my @tmp = ; my $e; my $s = 0; 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; $s += $pob[$e]; say "pob[$e] = $pob[$e]" if $DEBUG; } } } say "File readed. $s habitants."; # my (@salario_que_cuenta, @salario_que_cuenta2); my $k = 0; my ($pmax, $qmax, $actmax) = ($porcentaje_financiacion, $porcentaje_coste_jubilacion, $actividad_efectiva); my ($p, $q, $tope_fondo, $act, $yant) = ($pmax,$qmax,0,$actmax,0); my $MINI = 9e99; my $iteraciones = 10_000_000; my $num_anos_calculo = 25; # Fórmula de media de los últimos 25 años para calcular la pensión. Subirá a 35 my $num_anos_calculo2 = 35; # fórmula alternativa # $pension = $renta[$i]*12/14; my $pension = calculo_p25( @renta ); # splice que representa los últimos años my $pension2 = calculo_p35( @renta ); say "La diferencia de pensiones s25=$pension y s35=$pension2 es = ", ($pension-$pension2); my $p2; # pension actualizada while (++$k <= $iteraciones){ # loop: $cracks=0; # $p = $pmax + (rand()-0.5) * (0.44 - $porcentaje_financiacion) / 1000; $p += (rand()-0.5) /1000; # cada aleatorio con su lista de censuras, pero por cansancio y economía de la verdad, se queda fijo con taco. if ($p > 0.45) { $p = $pmax; } # CENSURA A DEDO if ($p < 0.33) { $p = $pmax; } $q += (rand()-0.5) / 1000; if ($q < 0.8) { $q = $qmax; } # CENSURA A DEDO if ($q > 1.5) { $q = $qmax; } # LO MISMO # $q = 1.3; # $act = (53 + rand()*7) * (1-$desempleo); $act += (rand()-0.5) / 1000; if ($act > 0.59) { $act = $actmax; } if ($act < 0.45 ) { $act = $actmax; } $fondo = $tope_fondo = 0; $p2 = $pension2; for my $i ( $edad_trabajo .. $edad_jubilacion-1 ) { $fondo += $pob[$i] * $renta[$i] * $p * $act * (1-$morosos_SS); # $actividad_efectiva); # $renta[$i+1] += ($renta[$i] * $IPC); # * coef(); # incremento de sueldo NO aleatorizado BUG GORDO: CORRUPCION EN LA RENTA!!! $fondo += ( $fondo * $r ); # rendimientos NO aleatorizados } for my $i ( $edad_jubilacion .. $muerte_estadistica-1){ if ($i == $edad_jubilacion) { $tope_fondo = $fondo; } $fondo += $pob[$i] * $p2 * $act * $q if ($fondo > 0); $fondo += $gastos_generales_SS if ($fondo > 0); # el que parte y reparte... $fondo += $pensiones_no_contributivas if ($fondo > 0); # pensiones no contributivas, por mes natural al ser el dato medio de gasto $cracks++ if $fondo < 0; $p2 += ( $p2 * $IPC ); # * coef(); # NO aleatorizado $fondo += ( $fondo * $r ) if ($fondo > 0); # rendimientos NO aleatorizados # say "$i $pob[$i] $renta[$i] $p2 -> $fondo" if $DEBUG; } # print "\r$k" if $DEBUG; my $y = $k / $iteraciones; print "\r" . qw( · - o \ | / )[ $k % 6 ] . " |" . "=" x int(50*$y) . ">" . " " x int(50*(1-$y)) . "| " . int(100*$y) . "% "; if ($fondo >= $cifra_deficit && $cracks == 0 && $fondo <= $MINI){ $MINI = $fondo; $pmax = $p; $qmax = $q; $actmax = $act; say "\n$0 $k p=$p q=$q criterio MIN => actividad_efectiva $act fondo $fondo tope $tope_fondo Ncracks $cracks"; # $MINI = 9e99; # $qmax = $porcentaje_coste_jubilacion; # $actmax = $actividad_efectiva; # goto loop; } # if ($k % 10_000 == 1){ # $q = $qmax; # $act = $actmax; # $yant = $y; # } select(undef, undef, undef, 0.001) if $RETARD; } say "\n"; exit 2; sub calculo_p25 { my @d = @_; @d = splice (@d, ($edad_jubilacion-$num_anos_calculo), $num_anos_calculo); die if scalar(@d) != $num_anos_calculo; # en realidad no son 25 años sino 300 meses (12 meses por año), y el divisor es 350 (14 pagas en el mismo periodo) my $sum = 0; my $c = 0; for (@d){ $sum += $_; $c++; } return -$sum / $c; # ($c*14/12); # mensual # y vale ya (según la fórmula) } sub calculo_p35 { my @d = @_; @d = splice (@d, ($edad_jubilacion-$num_anos_calculo2), $num_anos_calculo2); die if scalar(@d) != $num_anos_calculo2; # en realidad no son 25 años sino 300 meses (12 meses por año), y el divisor es 350 (14 pagas en el mismo periodo) my $sum = 0; my $c = 0; for (@d){ $sum += $_; $c++; } return -$sum / $c; # ($c*14/12); # mensual # y vale ya (según la fórmula) } sub calculo_p2 { my @d = @_; my $sum; my $count; my $sumkount; $sumkount += (++$count) for (@d); # método experimental de los dígitos $count = 0; for (@d){ $count++; $sum += $_ * $count / $sumkount; } return $sum; } __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. v5 .- Vamos a ver, el problema depende mucho de la tasa efectiva de empleo, lo cual depende de la tasa de actividad general (que puede descender) y la emigración, que, en cambio, puede ascender arbitrariamente. El problema es que, integrados en nuestra pirámide financiera de población, sí nos importa la edad (y el sexo, pero bueno) de los inmigrantes.