Calculadora de porcentagem de contribuição de 401k

Alguns administradores de 401k não têm a opção de definir as contribuições para um nível que
atinja a contribuição adiável máxima. Para 2017, esse valor é de $ 18.000.
Este pequeno script irá ajudá-lo a calcular a porcentagem que você precisa usar
quando essa é a única coisa que você pode definir.

Por que os vários intervalos de porcentagem? Alguns administradores 401k não permitem que você defina
uma porcentagem de alta precisão. Essas linhas dirão o quanto você está perdendo
por causa dessa imprecisão.

TL; DR Diga ao seu administrador 401k para entrar no programa e
maximizar o adiamento .

#!/usr/bin/env ruby
MAX_DEFERRABLE
= ENV['MAX_DEFERRABLE'] || 18_000.00

if ARGV.size <= 1
me
= File.basename($PROGRAM_NAME, File.extname($PROGRAM_NAME))
STDERR
.puts "Usage: #{me} <number of periods remaining> <pretax pay per period> [amount already contributed]"
STDERR
.puts 'Example, for the beginning of the year for someone who makes $60,000/yr with 24 pay periods:'
STDERR
.puts "t#{me} 24 2500"
STDERR
.puts "Set MAX_DEFERRABLE envvar if it's not #{MAX_DEFERRABLE}."
exit
1
end

PERIODS_REMAINING
= ARGV[0].to_f
PAY_PER_PERIOD
= ARGV[1].to_f

ALREADY_CONTRIBUTED
= if ARGV.size == 3
ARGV
[2].to_f
else
0.0
end

remaining
= MAX_DEFERRABLE - ALREADY_CONTRIBUTED
per_period
= remaining / PERIODS_REMAINING

puts
<<~EH
#{MAX_DEFERRABLE} max deferrable.
#{ALREADY_CONTRIBUTED} already contributed.
#{remaining} remaining to be contributed.
#{PERIODS_REMAINING} periods remaining.
#{per_period} contribution per period to reach #{remaining}.
#{PAY_PER_PERIOD} pay each period.
EH


contribution
= per_period / PAY_PER_PERIOD
(0...5).each do |places|
percent
= (contribution * 100.0).floor(places)
year_total
= ((percent / 100.0) * PAY_PER_PERIOD * PERIODS_REMAINING).round(2)
missed_out
= (remaining - year_total).round(2)
puts
"#{percent}% is recommended contribution at #{places} decimal places, totaling #{year_total} for the year, missing out on #{missed_out} because of safe decimal truncation."
end