#!/usr/bin/perl -w

use strict;

my $DEBUG = 0;

my $INGRESO_FISCAL_2020 = 164_630; # millones â‚¬  -> es el mÃ¡s bajo desde 2011

my @pob;
my @tmp;
open IN, '<', "pob_edad.csv" or die $!;
@tmp = <IN>;
for (@tmp){
    chomp;
    chop; # windows
    next if (/^#/);
    m/^(\d+) \s (.+) \; (\d+)$/x;
    if (defined $1 && defined $3) {
	$pob[$1] = $3;
	print "$1 $3\n" if $DEBUG;
    }else{
	warn "DATO CHUNGO";
    }
}
close IN;

my $SUPUESTO_FIN_TRABAJO = 67;    # pone rentas de mayores de 65 luego hay duda

my $SUPUESTA_COTIZACION = 0.279;  # by hand

my @renta = (0) x 101;
open IN2, '<', "renta_edad.csv" or die $!; # problema: es renta NETA media "estadÃ­stica" y lo que interesa es INGRESO INTEGRO TRABAJO FISCAL
@tmp = <IN2>;
for (@tmp){
    chomp;
    chop;
    next if (/^#/);
    if (/^\+/ && /2020\;/){
	m/\;(\d+)$/;
	my $data = $1;                     # problema: son muy pocos datos
	warn "Dato chungo" unless defined $data; 
	$data /= (1 - $SUPUESTA_COTIZACION) ;   # asÃ­ "aumento" la renta neta a la renta bruta
	print "$data\n" if $DEBUG;
	if (/enores/){
	    for (0..15){
		$renta[$_] = 0;   # $data; la renta neta media de menores de 16 estÃ¡ calculada pero no tiene interpretaciÃ³n porque no COTIZAN. La ESO es obligatoria, etc.
	    }
	}elsif (/16/ && /29/){
	    for (16 .. 29){
		$renta[$_] = $data;
	    }
	}elsif (/30/ && /44/){
	    for (30 .. 44){
		$renta[$_] = $data;
	    }
	}elsif (/45/ && /64/){
	    for (45 .. 64){
		$renta[$_] = $data;
	    }
	}elsif (/65/){
	    for (65 .. $SUPUESTO_FIN_TRABAJO){
		$renta[$_] = $data;
	    }
	}else{
	    warn "DATO CHUNGO";
	}
    }
}
close IN2;

# ya aquÃ­ la cosa se ve que estÃ¡ mal de datos, pero seguimos

my $ingresos_reales_2020 =  157_562_000_000;
my $gastos_reales_2020 = 171_883_286_720;

my $SUPUESTA_PENSION_MEDIA = 1566 *14;
$SUPUESTA_COTIZACION = 0.279;
my ($res1, $res2) = (1566*14, 0.279);
my ($res, $resant);
$resant = 9e99;
my $resant1 = $res1;
my $resant2 = $res2;
my $sumaingresos;
my $sumagastos;
# my ($flag1,$flag2) = (1,1);
my $kount;
my ($SPM, $SC) = ($SUPUESTA_PENSION_MEDIA, $SUPUESTA_COTIZACION);     # OJO A LO DE SIEMPRE
my ($SPMANT, $SCANT) = ($SPM, $SC);
do{
    $kount++;
    
    $SUPUESTA_PENSION_MEDIA =  $SPM + (rand()-0.5) / 10_000; # if $flag2;
    
    $SUPUESTA_COTIZACION =  $SC + (rand()-0.5) /10_000; #  if $flag1;    # como mucho, ya que desempleo, contingencias, etc. no cuenta 

    $sumaingresos = $sumagastos = 0;
    for my $i (0 .. scalar(@pob)-1){
	if ($i <= $SUPUESTO_FIN_TRABAJO){
	    $sumaingresos += $pob[$i] * $renta[$i] * $SUPUESTA_COTIZACION;
	}else{
	    $sumagastos += $pob[$i] * $SUPUESTA_PENSION_MEDIA;
	}
    }

    $res1 = abs($sumaingresos-$ingresos_reales_2020);
    $res2 = abs($sumagastos-$gastos_reales_2020);
    
    $res = $res1+$res2;
    print "Resultado = $res\n" if $DEBUG;
    
#    if (($res1+$res2) <= ($resant1+$resant2)){

    if ($resant1 >= $res1 || $res <= $resant){
	print "Supuesta cotizaciÃ³n efectiva = $SUPUESTA_COTIZACION\n";
	$resant1 = $res1;
	$resant = $res;
	$SC = $SUPUESTA_COTIZACION;
	$SCANT = $SC;
    }else{
	$SC = $SCANT;
    }

    if ($resant2 >= $res2 || $res <= $resant){
	print "Supuesta pensiÃ³n media = $SUPUESTA_PENSION_MEDIA\n";
	$resant2 = $res2;
	$resant = $res;
	$SPM = $SUPUESTA_PENSION_MEDIA;              # OJO CON LA CIFRA QUE VA AL PAN
	$SPMANT = $SPM;
    }else{
	$SPM = $SPMANT;
    }  

}until ($res < 100);

print "Error = $res Iteraciones = $kount\n";

print "Primera estimaciÃ³n de ingresos = $sumaingresos\n";
print "Primera estimaciÃ³n de gastos = $sumagastos\n";

print "\tEstimaciÃ³n primera dÃ©ficit = ", $sumaingresos-$sumagastos, "\n";
print "\tParte del ingreso fiscal = ", ($sumaingresos-$sumagastos)/(1e6*$INGRESO_FISCAL_2020), "\n";

if (0) {
    my $comment = <<EOT;
    El Presupuesto consolidado de la Seguridad Social para 2021 presenta un volumen de gasto
      no financiero de 171.840,8 millones de euros, unos ingresos de 157.547,6 millones y, por
      tanto, un dÃ©ficit de -14.293,2 millones de euros, en torno a un -1,3 % del PIB estimado
      para ese aÃ±o
EOT
      ;
}

my $CRECIMIENTO_VEGETATIVO = -153_167;   # dato a 2021
my $POBLACION_TOTAL = 47_394_223;

my $PORCENTAJE_PROYECTAR = $CRECIMIENTO_VEGETATIVO / $POBLACION_TOTAL;


print "SUPUESTO 1: crecimiento vegetativo negativo con subida IPC\n";

print "El porcentaje a proyectar 2020 es de $PORCENTAJE_PROYECTAR\n";

# $PORCENTAJE_PR0YECTAR = -0.0012;   # segÃºn Climent, pero lo obvio y sigo con lo mio porque es mayor (mÃ¡s desigual) y aÃ±o reciente


my $SUPUESTO_INCREMENTO = 0.015;  # IPC SIMULADO

my $sumaingresos2 = 0;
my $sumagastos2 = 0;
for my $i (0 .. scalar(@pob)-1){
    if ($i <= $SUPUESTO_FIN_TRABAJO){
	$sumaingresos2 += $pob[$i] * $renta[$i] * $SUPUESTA_COTIZACION * (1 + $PORCENTAJE_PROYECTAR) ** 5;        # ejemplo 5 aÃ±os  v3. interÃ©s compuesto
    }else{
	$sumagastos2 += $pob[$i] * $SUPUESTA_PENSION_MEDIA * (1 + $SUPUESTO_INCREMENTO) ** 5;
    }
}
print "Segunda estimaciÃ³n de ingresos = $sumaingresos2\n";
print "Segunda estimaciÃ³n de gastos = $sumagastos2\n";

print "\tEstimaciÃ³n segunda de dÃ©ficit = ", $sumaingresos2-$sumagastos2, "\n";

my $INGRESO_FISCAL_2025 = $INGRESO_FISCAL_2020 * (1 + 0.06) * (1 + 0.03) ** 4; # el primer aÃ±o crece al 6% y el resto al 3% v3. interÃ©s compuesto

print "\tParte del ingreso fiscal = ", ($sumaingresos2-$sumagastos2)/(1e6*$INGRESO_FISCAL_2025), "\n";



print "SUPUESTO 2: crecimiento vegetativo nulo con subida IPC\n";

my $sumaingresos3 = 0;
my $sumagastos3 = 0;
for my $i (0 .. scalar(@pob)-1){
    if ($i <= $SUPUESTO_FIN_TRABAJO){
	$sumaingresos3 += $pob[$i] * $renta[$i] * $SUPUESTA_COTIZACION * (1 + 0) ** 5;        # ejemplo 5 aÃ±os v3. interÃ©s compuesto
    }else{
	$sumagastos3 += $pob[$i] * $SUPUESTA_PENSION_MEDIA * (1 + $SUPUESTO_INCREMENTO) ** 5;
    }
}
print "3.Âª estimaciÃ³n de ingresos = $sumaingresos3\n";
print "3.Âª estimaciÃ³n de gastos = $sumagastos3\n";

print "\tEstimaciÃ³n 3.Âª de dÃ©ficit = ", $sumaingresos3-$sumagastos3, "\n";
print "\tParte del ingreso fiscal = ", ($sumaingresos3-$sumagastos3)/(1e6*$INGRESO_FISCAL_2025), "\n";



print "SUPUESTO 3: crecimiento vegetativo negativo con congelaciÃ³n pensiones\n";

my $sumaingresos4 = 0;
my $sumagastos4 = 0;
for my $i (0 .. scalar(@pob)-1){
    if ($i <= $SUPUESTO_FIN_TRABAJO){
	$sumaingresos4 += $pob[$i] * $renta[$i] * $SUPUESTA_COTIZACION * (1 + $PORCENTAJE_PROYECTAR) ** 5;        # ejemplo 5 aÃ±os v3. interÃ©s compuesto
    }else{
	$sumagastos4 += $pob[$i] * $SUPUESTA_PENSION_MEDIA * (1 + 0) ** 5;    # CONGELACION NOMINAL DE PENSIONES
    }
}
print "4.Âª estimaciÃ³n de ingresos = $sumaingresos4\n";
print "4.Âª estimaciÃ³n de gastos = $sumagastos4\n";

print "\tEstimaciÃ³n 4.Âª de dÃ©ficit = ", $sumaingresos4-$sumagastos4, "\n";
print "\tParte del ingreso fiscal = ", ($sumaingresos4-$sumagastos4)/(1e6*$INGRESO_FISCAL_2025), "\n";


print "SUPUESTO 4: crecimiento vegetativo negativo con semicongelaciÃ³n pensiones\n";

$SUPUESTO_INCREMENTO = 0.008;   # tiene que ser bajo 

print "Supuesto de incremento = $SUPUESTO_INCREMENTO\n";

my $sumaingresos5 = 0;
my $sumagastos5 = 0;
for my $i (0 .. scalar(@pob)-1){
    if ($i <= $SUPUESTO_FIN_TRABAJO){
	$sumaingresos5 += $pob[$i] * $renta[$i] * $SUPUESTA_COTIZACION * (1 + $PORCENTAJE_PROYECTAR) ** 5;        # ejemplo 5 aÃ±os v3. interÃ©s compuesto
    }else{
	$sumagastos5 += $pob[$i] * $SUPUESTA_PENSION_MEDIA * (1 + $SUPUESTO_INCREMENTO) ** 5;    # CONGELACION NOMINAL DE PENSIONES
    }
}
print "5.Âª estimaciÃ³n de ingresos = $sumaingresos5\n";
print "5.Âª estimaciÃ³n de gastos = $sumagastos5\n";

print "\tEstimaciÃ³n 5.Âª de dÃ©ficit = ", $sumaingresos5-$sumagastos5, "\n";
print "\tParte del ingreso fiscal = ", ($sumaingresos5-$sumagastos5)/(1e6*$INGRESO_FISCAL_2025), "\n";











exit 1;

__END__ 
  Esta estimaciÃ³n se puede hacer mÃ¡s precisa, lo cual estarÃ­a bien,
  pero descubre que un mÃ©todo efectivo para contener el desbalanceo 
  de ingresos y gastos es la contenciÃ³n del incremento de las pensiones 
  (la Ãºltima simulaciÃ³n) y otra manera es seguir el marco del pacto
  de Toledo, financiando parte de las pensiones con impuestos otros.
  
A continuaciÃ³n incluyo un par de ficheros de datos que se usan:

-----------------------------------------------pob_edad.csv
# Sexo;Edad;Provincias;Periodo;Total
# Total;47.394.223
0 años;338786
1 año;363341
2 años;382059
3 años;408287
4 años;431472
5 años;443170
6 años;450016
7 años;445284
8 años;469239
9 años;486596
10 años;491380
11 años;501426
12 años;527716
13 años;510018
14 años;507740
15 años;498747
16 años;495260
17 años;488794
18 años;475565
19 años;479813
20 años;484847
21 años;479183
22 años;470774
23 años;479101
24 años;478719
25 años;481718
26 años;490899
27 años;509736
28 años;525781
29 años;523378
30 años;531524
31 años;539644
32 años;549056
33 años;555864
34 años;569230
35 años;588611
36 años;611266
37 años;631276
38 años;667423
39 años;697388
40 años;731529
41 años;753631
42 años;787828
43 años;798467
44 años;812938
45 años;806728
46 años;800884
47 años;781296
48 años;777575
49 años;765164
50 años;753516
51 años;745521
52 años;738061
53 años;741354
54 años;721854
55 años;715168
56 años;722272
57 años;686102
58 años;661337
59 años;644202
60 años;644806
61 años;624692
62 años;607662
63 años;590685
64 años;549081
65 años;530169
66 años;503637
67 años;500877
68 años;495402
69 años;460630
70 años;446989
71 años;459503
72 años;475082
73 años;429268
74 años;404434
75 años;416011
76 años;388845
77 años;374888
78 años;317167
79 años;284752
80 años;338743
81 años;217288
82 años;236104
83 años;252791
84 años;262547
85 años;237765
86 años;218866
87 años;204540
88 años;182691
89 años;153104
90 años;134152
91 años;107330
92 años;88281
93 años;66962
94 años;53675
95 años;40002
96 años;29854
97 años;21407
98 años;15093
99 años;9851
100 y más años;13043
# 85 y más años;1.576.614
--------------------------------------------------renta_edad.csv
# Sexo;Edad;Renta anual neta media por persona y por unidad de consumo;Periodo;Total
# Total;Renta  ;2020;12292
# Total;Renta  ;2019;11680
# Total;Renta  ;2018;11412
# Total;Renta  ;2017;11074
# Total;Renta  ;2016;10708
# Total;Renta  ;2015;10419
# Total;Renta  ;2014;10391
# Total;Renta  ;2013;10531
# Total;Renta  ;2012;10795
# Total;Renta  ;2011;10858
# Total;Renta  ;2010;11284
# Total;Renta  ;2009;11318
# Total;Renta  ;2008;10737
+Menores de 16 años;Renta  ;2020;9025
Menores de 16 años;Renta  ;2019;8899
Menores de 16 años;Renta  ;2018;8919
Menores de 16 años;Renta  ;2017;8354
Menores de 16 años;Renta  ;2016;8078
Menores de 16 años;Renta  ;2015;7841
Menores de 16 años;Renta  ;2014;7726
Menores de 16 años;Renta  ;2013;7741
Menores de 16 años;Renta  ;2012;8151
Menores de 16 años;Renta  ;2011;8259
Menores de 16 años;Renta  ;2010;8355
Menores de 16 años;Renta  ;2009;8444
Menores de 16 años;Renta  ;2008;8005
+De 16 a 29 años;Renta  ;2020;11031
De 16 a 29 años;Renta  ;2019;10345
De 16 a 29 años;Renta  ;2018;10156
De 16 a 29 años;Renta  ;2017;9815
De 16 a 29 años;Renta  ;2016;9373
De 16 a 29 años;Renta  ;2015;8935
De 16 a 29 años;Renta  ;2014;9004
De 16 a 29 años;Renta  ;2013;9438
De 16 a 29 años;Renta  ;2012;9727
De 16 a 29 años;Renta  ;2011;10032
De 16 a 29 años;Renta  ;2010;10651
De 16 a 29 años;Renta  ;2009;10797
De 16 a 29 años;Renta  ;2008;10321
+De 30 a 44 años;Renta  ;2020;12053
De 30 a 44 años;Renta  ;2019;11422
De 30 a 44 años;Renta  ;2018;11397
De 30 a 44 años;Renta  ;2017;11040
De 30 a 44 años;Renta  ;2016;10536
De 30 a 44 años;Renta  ;2015;10353
De 30 a 44 años;Renta  ;2014;10348
De 30 a 44 años;Renta  ;2013;10543
De 30 a 44 años;Renta  ;2012;10912
De 30 a 44 años;Renta  ;2011;11106
De 30 a 44 años;Renta  ;2010;11480
De 30 a 44 años;Renta  ;2009;11687
De 30 a 44 años;Renta  ;2008;11024
+De 45 a 64 años;Renta  ;2020;13626
De 45 a 64 años;Renta  ;2019;12988
De 45 a 64 años;Renta  ;2018;12550
De 45 a 64 años;Renta  ;2017;12311
De 45 a 64 años;Renta  ;2016;11931
De 45 a 64 años;Renta  ;2015;11591
De 45 a 64 años;Renta  ;2014;11626
De 45 a 64 años;Renta  ;2013;11921
De 45 a 64 años;Renta  ;2012;12270
De 45 a 64 años;Renta  ;2011;12374
De 45 a 64 años;Renta  ;2010;13047
De 45 a 64 años;Renta  ;2009;12906
De 45 a 64 años;Renta  ;2008;12413
+65 y más años;Renta  ;2020;14132
65 y más años;Renta  ;2019;13315
65 y más años;Renta  ;2018;12758
65 y más años;Renta  ;2017;12528
65 y más años;Renta  ;2016;12416
65 y más años;Renta  ;2015;12206
65 y más años;Renta  ;2014;12183
65 y más años;Renta  ;2013;11960
65 y más años;Renta  ;2012;11867
65 y más años;Renta  ;2011;11463
65 y más años;Renta  ;2010;11783
65 y más años;Renta  ;2009;11685
65 y más años;Renta  ;2008;10893
# Menos de 18 años;Renta  ;2020;9110
# Menos de 18 años;Renta  ;2019;8944
# Menos de 18 años;Renta  ;2018;8909
# Menos de 18 años;Renta  ;2017;8479
# Menos de 18 años;Renta  ;2016;8153
# Menos de 18 años;Renta  ;2015;7824
# Menos de 18 años;Renta  ;2014;7702
# Menos de 18 años;Renta  ;2013;7710
# Menos de 18 años;Renta  ;2012;8155
# Menos de 18 años;Renta  ;2011;8259
# Menos de 18 años;Renta  ;2010;8354
# Menos de 18 años;Renta  ;2009;8468
# Menos de 18 años;Renta  ;2008;8024
# De 18 a 64 años;Renta  ;2020;12624
# De 18 a 64 años;Renta  ;2019;11961
# De 18 a 64 años;Renta  ;2018;11727
# De 18 a 64 años;Renta  ;2017;11390
# De 18 a 64 años;Renta  ;2016;10948
# De 18 a 64 años;Renta  ;2015;10650
# De 18 a 64 años;Renta  ;2014;10660
# De 18 a 64 años;Renta  ;2013;10942
# De 18 a 64 años;Renta  ;2012;11252
# De 18 a 64 años;Renta  ;2011;11415
# De 18 a 64 años;Renta  ;2010;11964
# De 18 a 64 años;Renta  ;2009;12002
# De 18 a 64 años;Renta  ;2008;11428
  

