#!/usr/bin/perl -w

use 5.034;

my $DEBUG = 0;

# El tema es que el día x el sueldo devengado es y 
# pero el cliente puede sacar menos (con un mínimo)
# o más (pongamos un 120%). Para cada transacción 
# simulada, se debe calcular un beneficio de transacción.

# El juego de los intereses: debe de haber uno "normal"
# que se va aumentando para la parte crediticia pura (<= 150% y)

# Vamos a suponer que esto es fijo, ya que el tiempo 
# afecta a la base que multiplica al interés.

# Para que el juego o simulación sea transaparente vamos 
# a suponer que no hay (primero) cuota fija de uso, después
# a la vista de los beneficios transaccionales, suponer 
# cuál y cómo debe ser.

my ($k, $Bm, $ACC);  # iteración, beneficio medio, beneficio o pérdida acumulado

my $cuota_fija = 2; # euritos/mes por disponibilidad del servicio
my $diasmes = 30;   # siempre se supuso eso e incluso se hablaba 
# en mis tiempos de que el año comercial son 360 días

##### a partir de aquí todo son tantos por uno
my $interes_base = 0.05 /(12*$diasmes);  
my $morosidad = 0.03;   # pending
my $prima_credito = 0.03 /(12*$diasmes);

my $rango_minimo = 0.2;  # estos rangos se deben a lo devengado (como parte del sueldo) y
my $rango_maximo = 1.5;  # no debería ser problema prestar el 150% porque solo el 50% es crédito puro

my ($xdia, $devengado, $t, $sueldo); # día de uso, importe devengado, tiempo hasta cobro (todos), base salarial

my $int = $interes_base;

while (1) {
    $sueldo = 1500 - 500 + int(rand()*2000);   # mínimo 1000 neto
    $xdia = 1+int (rand()*30);   # esto se puede mejorar porque la probabilidad es decreciente: día 1 poco probable, día 29 muy probable
    $t = 30 - $xdia;  # vamos a suponer que se paga el último día 30 y no el 28 o antes
    $devengado = $sueldo * ($xdia / 30);  # sueldo devengado
    say "sueldo=$sueldo xdia=$xdia t=$t devengado=$devengado" if $DEBUG;
    
##### a partir de aquí se mete cuánto se quiere, por debajo de $y * 1.2
        
    my $peticion = int ($rango_maximo * $devengado * rand());
    if ($peticion < $rango_minimo * $devengado){
	$peticion = 0;
    }elsif ($peticion >= $devengado){
	$int = $interes_base + $prima_credito;
    }
    say " peticion=$peticion int=$int" if $DEBUG;
    my $beneficio_transaccion = $t * $peticion * $int - ($peticion * $interes_base * $t) + $cuota_fija;

    $k++;    
    $ACC += $beneficio_transaccion; 
    $Bm = $ACC / $k;    
    
    say "$k) Ganancia acumulada = $ACC   Beneficio transacción = $beneficio_transaccion   Beneficio medio = $Bm";        

    last if $k >= 100_000; # o 1_000_000;
}

exit 2;


__END__
  
No sé si tiene sentido usar interés compuesto. (1+ia) = (1+i12)^12
  El caso es que el interés i12 es menor que el interés anual simplemente 
  dividido por 12. Ergo, la comparación de intereses se puede ver mejor.
  
La óptica es la del prestamista.
  
Solo con cuota de afiliación y muchos clientes se consigue buena rentabilidad.
  Realmente lo importante del sistema es motivar a la plantilla con bajo coste. 
  
Por otro lado, son préstamos sin apenas riesgo, por lo que se puede ofertar 
  más que lo devengado.
  
