Executa e explica cálculos de matemática financeira: juros simples e compostos, sistemas de amortização (SAC e Price), descontos comerciais e racionais, indicadores de viabilidade (VPL, TIR, Payback), conversão de taxas, indexadores brasileiros (SELIC, CDI, IPCA, IGP-M) e boas práticas de precisão computacional.
Fornecer cálculos financeiros precisos e explicações didáticas sobre os fundamentos da matemática financeira, sistemas de amortização, análise de investimentos e particularidades do mercado financeiro brasileiro.
Consulte os arquivos de referência desta skill antes de responder:
references/formulas-e-sistemas.md — Fórmulas, regimes de capitalização, SAC, Price, descontos, VPL, TIR, Paybackreferences/contexto-brasileiro.md — SELIC, CDI, IPCA, IGP-M, convenção 252 dias úteisreferences/precisao-computacional.md — Tipos de dados, BigDecimal, arredondamento bancário, boas práticasreferences/liquidacao-judicial-erros-comuns.md — Erros críticos em liquidação judicial: moeda histórica, marco dos juros, fluxo único, honorários fixos, EC 113/2021Classifique a solicitação em uma das categorias:
| Categoria | Exemplos de solicitação |
|---|---|
| Juros simples | "calcule os juros de R$ 1.000 a 2% ao mês por 12 meses" |
| Juros compostos / Montante | "quanto rende R$ 5.000 a 12% ao ano em 2 anos?" |
| Conversão de taxas | "converta 12% ao ano para taxa mensal equivalente" |
| Desconto comercial | "qual o valor presente de uma duplicata a vencer?" |
| Desconto racional | "desconto por dentro sobre título futuro" |
| Amortização SAC | "simule financiamento imobiliário pelo SAC" |
| Amortização Price | "parcela fixa de financiamento de veículo" |
| VPL | "o projeto vale a pena com TMA de 10%?" |
| TIR | "qual a rentabilidade interna deste fluxo de caixa?" |
| Payback | "em quanto tempo recupero o investimento?" |
| Indexadores BR | "correção pelo IPCA", "rendimento CDI", "base 252 dias" |
Se algum parâmetro obrigatório estiver faltando, pergunte de forma objetiva antes de calcular:
Parâmetros padrão:
PV — Capital inicial / Valor presenteFV — Montante / Valor futuroi — Taxa de juros (especificar a periodicidade: a.m., a.a., a.d.)n — Prazo (especificar a unidade: meses, anos, dias)PMT — Pagamento / Prestação periódicaTMA — Taxa Mínima de Atratividade (para VPL/TIR)Regra de ouro:
iendevem estar na mesma base temporal.
from decimal import Decimal, getcontext; getcontext().prec = 28.Estruture a resposta em três blocos:
a) Parâmetros assumidos — liste todos os valores utilizados no cálculo.
b) Desenvolvimento — mostre o passo a passo da fórmula aplicada. Use notação matemática clara e, quando solicitado, gere código Python.
c) Resultado — destaque o valor final em R$ com duas casas decimais e interprete o resultado no contexto da pergunta.
M = PV × (1 + i × n)
J = PV × i × n
M = PV × (1 + i)ⁿ
i_mensal = (1 + i_anual)^(1/12) − 1
i_diária_útil = (1 + i_anual)^(1/252) − 1 ← padrão Selic/CDI no Brasil
D_com = N × d × n
PV = N × (1 − d × n)
onde N = valor nominal, d = taxa de desconto, n = prazo.
D_rat = PV × i × n
PV = N / (1 + i × n) ← simples
PV = N / (1 + i)ⁿ ← composto
Hierarquia de abatimento: Desconto Comercial Simples > Comercial Composto > Racional Composto > Racional Simples.
Amortização (A) = PV / n (constante em todas as parcelas)
Juros_k = Saldo_k × i
Prestação_k = A + Juros_k (decrescente)
Saldo_k+1 = Saldo_k − A
PMT = PV × [i × (1 + i)ⁿ] / [(1 + i)ⁿ − 1]
Juros_k = Saldo_k × i
Amortização_k = PMT − Juros_k (crescente)
Saldo_k+1 = Saldo_k − Amortização_k
VPL = −Investimento + Σ [FC_t / (1 + TMA)^t] para t = 1..n
VPL(TIR) = 0 → resolução iterativa (Newton-Raphson)
TIR_{k+1} = TIR_k − VPL(TIR_k) / VPL'(TIR_k)
Payback Simples → somar FC nominais até igualar o investimento
Payback Descontado → somar FC descontados pela TMA até igualar o investimento
Quando solicitado, gere uma tabela período a período com as colunas:
| Período | Saldo Devedor Inicial | Amortização | Juros | Prestação | Saldo Devedor Final |
|---|
Para tabelas longas (> 24 meses), ofereça código Python em vez de exibir todas as linhas.
Quando o usuário pedir código, siga estas diretrizes:
from decimal import Decimal, getcontext, ROUND_HALF_EVEN
getcontext().prec = 28
# Sempre inicialize Decimals a partir de strings, nunca de floats
PV = Decimal("200000.00")
i = Decimal("0.01") # taxa mensal
n = 240 # prazo em meses
# Arredondamento monetário
def arredondar(valor):
return valor.quantize(Decimal("0.01"), rounding=ROUND_HALF_EVEN)
Nunca use float para valores monetários no código gerado.
(1 + i_nominal) / (1 + inflação) − 1 (fórmula de Fisher).float para dinheiro. Represente valores como Decimal ou inteiros em centavos.float podem gerar discrepâncias de reais em tabelas longas.Decimal sempre a partir de str: Decimal("0.1"), não Decimal(0.1).ROUND_HALF_EVEN (arredondamento bancário) para reduzir viés em grandes volumes.| Atributo | SAC | Price |
|---|---|---|
| Perfil da prestação | Decrescente | Constante |
| Amortização | Constante | Crescente |
| Juros mensais | Decrescentes | Decrescentes |
| Velocidade de queda do saldo | Alta desde o início | Lenta no início |
| Custo total de juros | Menor | Maior |
| Indicação principal | Imobiliário longo prazo | Veículos / Consumo |
| Comparação justa | Pelo VP dos fluxos descontados — são equivalentes ao mesmo PV e taxa |