Código Python: tabela de amortização de um crédito (download grátis)

Código Python: tabela de amortização de um crédito (download grátis)
Contratar um crédito é a parte fácil. Entender como cada parcela se divide é onde quase todo mundo se perde. Quando o banco fala em «parcela fixa», a gente imagina que o capital cai do mesmo jeito todo mês, e não é assim: nas primeiras parcelas quase tudo o que você paga é juro e só uma fatia pequena encosta no capital. Daí aquela sensação ruim de que a dívida «não anda». Este programa em Python monta a tabela de amortização completa, mês a mês, com saldo inicial, parcela, juro, amortização e saldo final, e ainda mostra quanto você vai pagar no total e quanto disso é juro.
Ele serve para três perfis bem concretos. Para o dono da pequena empresa que está avaliando um crédito e quer ver, antes de assinar, quanto o dinheiro realmente custa. Para o contador que precisa do quadro de amortização para lançar o juro do período separado da amortização do capital. E para o encarregado de estoque ou de depósito que pegou o crédito para comprar mercadoria e quer entender por que o saldo que o banco informa não bate com a conta que ele fazia no papel.
O pacote vem pronto para descompactar e não pede mais nada: Python 3.11 ou superior, só isso. Dentro vão o programa, o crédito de exemplo, a saída esperada e um guia curto.
Estes são os arquivos que aparecem quando você descompacta a pasta:
| Arquivo | Para que serve |
|---|---|
amortizacion_credito.py | O programa completo, comentado linha por linha |
datos/credito.csv | O crédito de exemplo: uma só linha com valor, taxa nominal anual, prazo em meses e data da liberação |
salida_ejemplo.txt | A saída que você deve obter, para comparar com a sua |
LEIAME.md | As instruções e os detalhes do cálculo, explicados em resumo |
O que o programa faz
- Lê o arquivo
datos/credito.csv, que traz uma só linha: valor do crédito, taxa nominal anual, prazo em meses e data da liberação. - Transforma a taxa anual em taxa mensal: divide a taxa nominal por cem e por doze. Uma taxa nominal anual de dezoito por cento vira um e meio por cento ao mês.
- Calcula a parcela fixa com a fórmula do sistema francês e arredonda para centavos.
- Percorre os meses, um por um: cobra o juro sobre o saldo que ainda se deve, calcula quanto da parcela baixa o capital e deixa o saldo final daquele mês.
- Ajusta a última parcela ao centavo. Sem esse ajuste o saldo final ficaria num valor mínimo diferente de zero e a tabela nunca fecharia.
- Monta a data de cada vencimento com uma função própria, para não errar quando o dia não existe no mês de destino.
- Mostra o resumo com quatro totais e salva a tabela em
salida/amortizacion.csv, pronta para abrir no Excel.
Como executar
Primeiro instale o Python 3.11 ou superior pelo site oficial, marcando a opção que coloca o Python no PATH do sistema. Depois descompacte o ZIP inteiro numa pasta e abra o terminal dentro dessa pasta: no Windows dá para digitar cmd na barra de endereços do explorador de arquivos. Estando ali, chame o programa pelo nome:
python amortizacion_credito.py
Não há nenhuma biblioteca para instalar: o programa usa apenas o que já vem com o Python. Roda em menos de um segundo, mostra a tabela na tela e deixa o arquivo final na pasta salida. Se o seu sistema não reconhecer o comando python, tente py amortizacion_credito.py, que é a forma curta criada pelo instalador do Windows.
O código, explicado
Estes são os cinco trechos que realmente importam. O resto é leitura de arquivo e formatação de colunas.
A fórmula da parcela fixa. É a do sistema francês: a parcela é igual ao valor multiplicado pela taxa mensal, dividido por um menos o fator de desconto do prazo.
def cuota_fija(monto: Decimal, tasa: Decimal, plazo: int) -> Decimal:
"""Calcula a parcela fixa do sistema francês, arredondada para centavos."""
# # Sistema francês: parcela = valor * i / (1 - (1+i)^-n). O Decimal calcula (1+i)**-n
factor = (UNO + tasa) ** -plazo
return redondear(monto * tasa / (UNO - factor))
A conta é feita com Decimal, e não com números de ponto flutuante, e o resultado é arredondado para centavos. Parece detalhe técnico e é dinheiro: se o valor fosse guardado como decimal binário, os centavos iriam se deslocando parcela após parcela e no fim a soma das amortizações não daria exatamente o valor do crédito.
A taxa mensal. A taxa divulgada pelo banco é nominal anual, então o programa divide por cem e por doze. Nessa linha está a chave de todo o exercício:
tasa = tasa_anual / CIEN / DOCE # # Taxa mensal = taxa nominal anual / 100 / 12
Com uma taxa nominal anual de dezoito por cento, a taxa mensal fica em um e meio por cento. Aplicada todos os meses sobre o saldo que ainda se deve, ela pesa bem mais do que sugere o número anual anunciado na vitrine do banco.
O coração do cálculo. Aqui está o motivo de o crédito parecer parado no começo: o juro é calculado sobre o saldo que ainda se deve, e como esse saldo é grande nos primeiros meses, o juro também é grande.
for numero in range(1, plazo + 1):
interes = redondear(saldo * tasa) # # O juro é cobrado sobre o saldo que ainda se deve: por isso no começo pesa tanto
# # A última parcela absorve os centavos do arredondamento para o saldo fechar em zero
cuota_mes = redondear(saldo + interes) if numero == plazo else cuota
abono = redondear(cuota_mes - interes) # # Amortização: o que de fato baixa a dívida (parcela - juro)
final = redondear(saldo - abono)
Leia o bloco com calma, porque ele resume o sistema inteiro. O juro do mês sai do saldo inicial multiplicado pela taxa. A parcela menos o juro é o que de fato baixa a dívida, e o saldo final é o saldo inicial menos essa amortização. O comentário da última linha é o que explica por que a parcela final quase nunca é igual às outras.
Datas sem sustos. Somar meses a uma data parece trivial até aparecer um dia trinta e um ou um mês de fevereiro:
def sumar_meses(fecha: date, meses: int) -> date:
"""Soma meses a uma data e ajusta o dia para o último do mês quando ele não existe."""
# Se pasa el año a meses para no equivocarse al cruzar diciembre.
total = fecha.year * 12 + (fecha.month - 1) + meses
Se o dia da liberação não existir no mês de destino, o programa usa o último dia daquele mês. Um crédito que nasce num trinta e um nunca devolve uma data impossível.
As duas conferências. Fecham o exercício e são a parte que você mais vai usar quando carregar os seus próprios dados:
print(f" Soma das amortizações = valor: {'FECHA' if total_abono == monto else 'REVISAR'}")
print(f" Saldo final = 0,00: {'FECHA' if saldo_final == 0 else 'REVISAR'}")
A primeira conferência soma todas as amortizações e confirma que dão exatamente o valor do crédito. A segunda confirma que o saldo final fecha em zero. Se alguma delas dissesse REVISAR, algum dado de entrada mudou e não vale a pena continuar lendo a tabela.
O que você vai ver na tela
Com o crédito de exemplo, um valor de 12.000.000,00 em doze meses, o programa mostra primeiro as condições: o valor da parcela fixa e a nota de que a taxa é dividida por doze. Depois vem a tabela, que é esta:
Parcela fixa (sistema francês): 1.100.159,91 Nota: a taxa é nominal anual e é dividida por 12 para obter a taxa mensal. TABELA DE AMORTIZAÇÃO MÊS A MÊS ------------------------------------------------------------------------------------------------ N.º Data Saldo inicial Parcela Juros Amortização Saldo final ------------------------------------------------------------------------------------------------ 1 2026-05-01 12.000.000,00 1.100.159,91 180.000,00 920.159,91 11.079.840,09 2 2026-06-01 11.079.840,09 1.100.159,91 166.197,60 933.962,31 10.145.877,78 3 2026-07-01 10.145.877,78 1.100.159,91 152.188,17 947.971,74 9.197.906,04 4 2026-08-01 9.197.906,04 1.100.159,91 137.968,59 962.191,32 8.235.714,72 5 2026-09-01 8.235.714,72 1.100.159,91 123.535,72 976.624,19 7.259.090,53 6 2026-10-01 7.259.090,53 1.100.159,91 108.886,36 991.273,55 6.267.816,98 7 2026-11-01 6.267.816,98 1.100.159,91 94.017,25 1.006.142,66 5.261.674,32 8 2026-12-01 5.261.674,32 1.100.159,91 78.925,11 1.021.234,80 4.240.439,52 9 2027-01-01 4.240.439,52 1.100.159,91 63.606,59 1.036.553,32 3.203.886,20 10 2027-02-01 3.203.886,20 1.100.159,91 48.058,29 1.052.101,62 2.151.784,58 11 2027-03-01 2.151.784,58 1.100.159,91 32.276,77 1.067.883,14 1.083.901,44 12 2027-04-01 1.083.901,44 1.100.159,96 16.258,52 1.083.901,44 0,00 ------------------------------------------------------------------------------------------------
Repare na primeira parcela: dos 1.100.159,91 que você paga, 180.000,00 vão para juro e apenas 920.159,91 baixam a dívida. Na última parcela a proporção se inverte: o juro já é de 16.258,52 e quase toda a parcela é capital. No fim, o resumo entrega os números que interessam:
RESUMO DO CRÉDITO ================================================================================================ Total pago : 13.201.918,97 Total de juros : 1.201.918,97 Total amortizado: 12.000.000,00 Última parcela : 1.100.159,96 Nota: a última parcela é diferente porque absorve os centavos do arredondamento. Soma das amortizações = valor: FECHA Saldo final = 0,00: FECHA
Ou seja, um crédito de 12.000.000,00 termina custando 13.201.918,97, dos quais 1.201.918,97 são juros. E repare na última parcela: ela vale 1.100.159,96, cinco centavos a mais que as outras onze. Não é erro do programa. É o ajuste de centavos de que falávamos, e é exatamente por isso que os bancos informam o valor exato da última parcela no contrato.
Erros comuns e dicas
- Se a janela fechar no instante em que você dá dois cliques no arquivo, nada quebrou: o programa terminou e o console se fechou sozinho. Abra por um terminal para conseguir ler a tabela inteira.
- Se aparecer um erro citando
datos/credito.csv, quase sempre é porque o ZIP foi aberto dentro do visualizador em vez de ser descompactado. O programa precisa da pastadatosao lado do arquivo do programa. - No arquivo de dados escreva os números de forma simples: o valor sem separador de milhar e a taxa sem o símbolo de porcentagem. Se escrever o valor com pontos, o programa vai ler errado.
- Salve sempre o arquivo de dados em UTF-8. Se você editar e salvar em outro formato, os acentos da saída se quebram e algumas colunas aparecem deslocadas.
- Sempre que mudar o valor, a taxa ou o prazo, confira o resumo: as duas conferências precisam dizer FECHA. Se disserem REVISAR, algum dado de entrada está incoerente e precisa de correção antes de você usar os números.
- A tabela não substitui o extrato do banco. A sua instituição pode usar outra capitalização, seguros, tarifa de administração ou carência; compare linha por linha antes de aceitar que a diferença é real.
- Guarde a sua versão junto com o arquivo de dados. Quando o banco mudar uma condição, é só rodar de novo e comparar as duas tabelas em um minuto.
Quando isso não basta
Este programa responde a uma pergunta bem específica: como uma parcela fixa se divide entre juro e capital. Funciona perfeitamente enquanto o crédito for um só, o prazo for fixo e a taxa não se mexer. Quando a empresa já carrega vários créditos ao mesmo tempo, fornecedores que financiam em trinta, sessenta e noventa dias, taxas revisadas a cada trimestre ou amortizações extraordinárias no meio do caminho, o arquivo de texto fica curto e a tabela deixa de contar a história completa.
É aí que passa a fazer sentido olhar um software de verdade. O Kardex Tauro é um programa gratuito para organizar o estoque e as finanças de uma pequena empresa, e existe justamente para esse momento: quando planilhas e scripts soltos já não bastam e você precisa que os números morarem num só lugar. Ele não substitui o seu contador nem decide por você; deixa as contas arrumadas para que a conversa com o banco comece de um ponto claro.
Baixe o ZIP, troque os dados de exemplo pelo seu crédito e coloque o resultado ao lado do extrato do banco. Meia hora dessa comparação ensina mais sobre o seu crédito do que qualquer folheto. E se o programa for útil, guarde-o por perto: quando o crédito crescer, o Kardex Tauro é o passo seguinte, e o hábito de conferir os números continua exatamente o mesmo.