Como construí um simulador de previdência 100% no navegador
A história técnica do Prev Calc: cálculos de VGBL, PGBL e INSS rodando inteiramente no client-side, sem backend, sem cadastro, sem rastrear ninguém. Decisões e armadilhas.
A maior parte das calculadoras de previdência online no Brasil tem um problema em comum: pedem seus dados antes de calcular qualquer coisa. Nome, e-mail, telefone, "para que um especialista entre em contato". O resultado, quando chega, é simplório — porque o objetivo da ferramenta nunca foi te dar uma resposta. Foi capturar lead.
Quando comecei o Prev Calc, a régua era diferente. Eu queria responder uma pergunta concreta: se eu contribuir X por mês até os 60, quanto eu retiro líquido por mês até morrer? E queria que essa resposta fosse honesta — com VGBL, PGBL e INSS combinados, com a tributação certa, com valores em R$ de hoje.
E queria que rodasse 100% no navegador. Sem servidor, sem cadastro, sem rastreamento.
Esse post é sobre como cheguei lá.
Por que client-side?
Tem três motivos práticos para um simulador de previdência rodar inteiramente no navegador:
- Privacidade real. Saldo da minha previdência, salário, idade, expectativa de vida — isso não é o tipo de dado que eu quero numa tabela em algum servidor. Se o cálculo é client-side, esses dados nunca saem do meu dispositivo.
- Custo zero de operação. Sem backend = sem servidor = sem fatura mensal. Posso deixar a ferramenta no ar pra sempre sem que ela me custe nada além do domínio.
- Funciona offline. Service Worker cacheia o app inteiro. Você pode abrir no avião, sem sinal, e o simulador continua respondendo.
A pergunta interessante é: dá para fazer um simulador financeiro decente sem servidor? A resposta é sim, mas tem armadilhas.
A armadilha 1: precisão numérica
JavaScript não tem decimal. Tudo é Number, que é IEEE 754 de 64 bits. Isso tem implicações sérias quando você está somando juros compostos durante 360 meses (30 anos).
// Exemplo simples: 0.1 + 0.2 !== 0.3
console.log(0.1 + 0.2);
// 0.30000000000000004
Para um cálculo de patrimônio futuro, esse erro é desprezível — o resultado vai estar correto até o real, o que é mais do que suficiente para uma simulação. Mas é importante não somar centavos com Number em qualquer aplicação financeira. No meu caso, como o objetivo é planejamento (não escrita contábil), fiquei com Number e arredondo só no display.
Para uma calculadora de salário ou um sistema de pagamento? Aí use uma lib de decimal (big.js, decimal.js) ou armazene tudo em centavos como inteiros.
A armadilha 2: a equação de Fisher
Aqui é onde muitas calculadoras de previdência escorregam.
Quando você diz "meu retorno real é 5% ao ano e a inflação é 4%", a taxa nominal não é 9%. É:
(1 + nominal) = (1 + real) * (1 + inflação)
nominal = (1.05 * 1.04) - 1
nominal = 0.092 = 9.2%
A diferença parece pequena. Em 30 anos de juros compostos, ela vira centenas de milhares de reais. O simulador errado te dá uma resposta otimista demais — e quando você se aposenta, descobre que a conta não fechou.
No Prev Calc, todos os cálculos são feitos com a taxa nominal exata via Fisher, e os valores são depois deflacionados para R$ de hoje. Isso é o que torna a simulação "honesta" no sentido que importa: o número que aparece no gráfico é o poder de compra que aquele patrimônio terá, não o valor nominal do extrato.
A armadilha 3: VGBL ≠ PGBL na hora do resgate
Os dois produtos têm a mesma estrutura na fase de acumulação: você contribui, o dinheiro rende, e o IR é deferido. A diferença mata na hora do resgate:
- VGBL: IR incide só sobre o rendimento (lucro acumulado).
- PGBL: IR incide sobre o total (principal + rendimento).
Por que alguém escolheria PGBL? Porque na fase de acumulação, contribuições para PGBL são dedutíveis no IR até 12% da renda bruta tributável. Você paga menos imposto hoje em troca de pagar mais imposto depois.
A pergunta interessante — e que motivou metade do projeto — é: considerando o reinvestimento da economia de IR, quando PGBL ganha?
A resposta depende:
- Da sua alíquota marginal hoje (quanto mais alta, mais o PGBL ganha)
- Da sua alíquota marginal na aposentadoria (quanto mais baixa, mais o PGBL ganha)
- Do regime tributário escolhido (regressivo ou progressivo)
- Do horizonte de tempo (mais longo favorece o reinvestimento)
O Prev Calc deixa você simular com PGBL puro, VGBL puro, ou um split entre os dois. E mostra a renda mensal líquida em cada cenário, comparável diretamente.
A armadilha 4: a renda mensal não é trivial
A pergunta "quanto patrimônio acumulo aos 60" é uma equação de juros compostos clássica:
FV = PV * (1 + i)^n + PMT * [((1 + i)^n - 1) / i]
A pergunta "quanto retiro por mês até os 90" é uma equação de anuidade:
PMT = PV * [i / (1 - (1 + i)^-n)]
Vários simuladores tratam essa parte de forma simplificada. Pegam o patrimônio acumulado, dividem pelos meses restantes, e dão uma resposta. Mas isso ignora que o patrimônio continua rendendo durante a fase de consumo — e que normalmente você quer zerar o saldo na expectativa de vida (não deixar dinheiro na conta morto).
A fórmula correta é a PMT, e ela exige que você decida:
- Qual a taxa de retorno na fase de consumo (geralmente menor, porque você vai ficando mais conservador)
- Qual a expectativa de vida (eu uso 90 anos por padrão, mas é editável)
- Se você quer renda nominal constante (mais alta no início, perde poder de compra) ou real constante (cresce com inflação)
No Prev Calc, tudo isso é editável. Os defaults seguem premissas razoáveis para o brasileiro médio, mas o usuário avançado pode mexer em tudo.
A stack
Intencionalmente seca:
- HTML/CSS/JS vanilla. Zero framework. Sem React, sem Vue, sem build step.
- Chart.js para os gráficos (uma única dependência via CDN).
- Service Worker customizado para offline.
- localStorage para auto-save da simulação.
Por que não React? Por dois motivos. Primeiro, o app inteiro tem ~5 telas — não justifica framework. Segundo, eu queria que ele rodasse em qualquer browser, em qualquer momento, sem build, sem hidratação, sem nada. Você baixa, abre, funciona. O JS bundle todo dá menos de 50KB minificado.
Já escrevi um post mais detalhado sobre PWA com vanilla JS, se você se interessa por essa parte.
O que aprendi
Três coisas levei pra outros projetos:
1. Calcular antes de pedir dados. O Prev Calc dá uma resposta na primeira interação. Você ajusta sliders e o gráfico se atualiza em tempo real. Isso vira um loop de aprendizado: o usuário entende como cada variável afeta o resultado, e a ferramenta vira um professor de finanças, não um formulário de captura.
2. Premissas explícitas. Toda calculadora financeira tem premissas embutidas (inflação, retorno real, expectativa de vida). É comum elas ficarem escondidas. O Prev Calc deixa todas visíveis e editáveis. Resultado: os usuários confiam mais no número que sai, porque eles mesmos definem o número que entra.
3. Privacidade vira diferencial. Nas primeiras semanas, o feedback que eu mais recebia era variação de "que alívio uma calculadora que não pede meu e-mail". Em 2026, com tanto produto pedindo dado pra qualquer coisa, dizer "nada sai do seu navegador" virou um benefício competitivo de verdade.
O próximo passo
Já tem um roadmap de coisas que quero adicionar — comparativo entre instituições, simulação de portabilidade, tributação progressiva como alternativa à regressiva. Mas o core, hoje, responde a pergunta original: quanto vou ter, quanto vou retirar, e como cada decisão afeta os dois números.
Se você está construindo uma ferramenta financeira para o Brasil, duas coisas que valem prestar atenção: ame o boring math e cuide da privacidade do usuário. O resto se arruma no caminho.