Este documento apresenta a modelagem e a simulação de diferentes sistemas de amortização de dívidas, com o objetivo de ilustrar suas principais características, a evolução dos saldos devedores e o comportamento das prestações ao longo do tempo. A construção dos fluxos financeiros considera valores nominais, a aplicação de taxas de juros efetivas e, em alguns casos, a adoção de mecanismos de correção monetária periódica.
Os resultados de cada simulação são organizados na forma de séries temporais, permitindo uma análise detalhada da dinâmica de pagamento associada a cada sistema.
Os sistemas de amortização abordados neste trabalho são:
- Sistema Price (Sistema Francês de Amortização);
- Sistema de Amortização Constante (SAC), sem carência;
- Sistema de Amortização Constante (SAC), com carência inicial;
- Sistema SAC Corrigido, com aplicação de correção monetária;
- Sistema SAC parametrizado, com carência e correção, representando contratos como o BNDES;
- Modelo de pagamentos semestrais, utilizado em contratos internacionais, exemplificado pelo contrato BID.
1. Sistema Price
O Sistema Price, também denominado Sistema Francês de Amortização, é caracterizado pelo pagamento de prestações constantes ao longo de todo o contrato. A cada vencimento, a parcela de juros é calculada sobre o saldo devedor do período anterior, enquanto a parcela de amortização corresponde à diferença entre o valor fixo da prestação e os juros incidentes. Ao longo do tempo, a participação dos juros nas prestações diminui gradativamente, enquanto a parcela de amortização aumenta, promovendo a redução progressiva do saldo devedor.
# Carregar pacotes necessários
library(mondate)
library(xts)
# Definições iniciais
PV <- 116000 # Valor presente
i <- (1.1102)^(1/12) - 1 # Taxa de juros mensal
TR <- (1.00)^(1/12) - 1 # Correção monetária (neste caso, zero)
n <- 156 # Número de períodos (meses)
# Inicializar vetores
Juros <- Amort <- Prest <- Saldo <- rep(0, n)
# Cálculo do 1º mês
Prest[1] <- PV * (i * (1 + i)^n) / ((1 + i)^n - 1)
Juros[1] <- PV * i * (1 + TR)
Amort[1] <- Prest[1] - Juros[1]
Saldo[1] <- PV - Amort[1]
# Cálculo dos demais meses
for (t in 2:n) {
Prest[t] <- Saldo[t - 1] * (i * (1 + i)^(n - t + 1)) / ((1 + i)^(n - t + 1) - 1)
Juros[t] <- Saldo[t - 1] * i * (1 + TR)
Amort[t] <- Prest[t] - Juros[t]
Saldo[t] <- Saldo[t - 1] - Amort[t]
}
# Construir data.frame
Price_df <- round(data.frame(
Amortizacao = Amort,
Juros = Juros,
Prestacao = Prest,
Saldo_Devedor = Saldo
), 2)
# Criar índice de datas
datas <- seq(as.Date("2022-01-01"), by = "month", length.out = n)
# Converter para xts
Price_xts <- xts(Price_df, order.by = datas)
# Exibir resultado
Price_xts
## Amortizacao Juros Prestacao Saldo_Devedor
## 2022-01-01 350.91 1014.97 1365.88 115649.09
## 2022-02-01 353.98 1011.90 1365.88 115295.11
## 2022-03-01 357.08 1008.80 1365.88 114938.03
## 2022-04-01 360.20 1005.68 1365.88 114577.83
## 2022-05-01 363.35 1002.53 1365.88 114214.47
## 2022-06-01 366.53 999.35 1365.88 113847.94
## 2022-07-01 369.74 996.14 1365.88 113478.20
## 2022-08-01 372.98 992.90 1365.88 113105.22
## 2022-09-01 376.24 989.64 1365.88 112728.98
## 2022-10-01 379.53 986.35 1365.88 112349.45
## ...
## 2034-03-01 1251.93 113.96 1365.88 11771.94
## 2034-04-01 1262.88 103.00 1365.88 10509.06
## 2034-05-01 1273.93 91.95 1365.88 9235.13
## 2034-06-01 1285.08 80.80 1365.88 7950.05
## 2034-07-01 1296.32 69.56 1365.88 6653.73
## 2034-08-01 1307.66 58.22 1365.88 5346.07
## 2034-09-01 1319.10 46.78 1365.88 4026.97
## 2034-10-01 1330.65 35.23 1365.88 2696.32
## 2034-11-01 1342.29 23.59 1365.88 1354.03
## 2034-12-01 1354.03 11.85 1365.88 0.00
2. Sistema SAC (sem carência)
O Sistema de Amortização Constante (SAC) é caracterizado pela realização de pagamentos periódicos com parcelas de amortização fixas e valores de prestação decrescentes ao longo do tempo. Em cada período, a parcela destinada à amortização do saldo devedor permanece constante, enquanto a parcela de juros é calculada sobre o saldo remanescente, resultando na redução gradual do valor total pago a cada mês. Esse sistema é amplamente utilizado em financiamentos de longo prazo, pois proporciona uma diminuição progressiva do encargo financeiro para o devedor.
# Carregar pacotes necessários
library(mondate)
library(xts)
# Definições iniciais
PV <- 116000 # Valor presente
i <- (1.1102)^(1/12) - 1 # Taxa de juros mensal
n <- 156 # Número de períodos (meses)
# Inicializar vetores
Amort <- rep(PV / n, n)
Juros <- Prest <- Saldo <- rep(0, n)
# Cálculo do 1º mês
Juros[1] <- PV * i
Prest[1] <- Juros[1] + Amort[1]
Saldo[1] <- PV - Amort[1]
# Cálculo dos demais meses
for (t in 2:n) {
Juros[t] <- i * Saldo[t - 1]
Saldo[t] <- Saldo[t - 1] - Amort[t]
Prest[t] <- Juros[t] + Amort[t]
}
# Construir data.frame
SAC_sem_carencia_df <- round(data.frame(
Amortizacao = Amort,
Juros = Juros,
Prestacao = Prest,
Saldo_Devedor = Saldo
), 2)
# Criar índice de datas
datas <- seq(as.Date("2022-01-01"), by = "month", length.out = n)
# Converter para xts
SAC_sem_carencia_xts <- xts(SAC_sem_carencia_df, order.by = datas)
# Exibir resultado
SAC_sem_carencia_xts
## Amortizacao Juros Prestacao Saldo_Devedor
## 2022-01-01 743.59 1014.97 1758.56 115256.41
## 2022-02-01 743.59 1008.46 1752.05 114512.82
## 2022-03-01 743.59 1001.96 1745.55 113769.23
## 2022-04-01 743.59 995.45 1739.04 113025.64
## 2022-05-01 743.59 988.94 1732.53 112282.05
## 2022-06-01 743.59 982.44 1726.03 111538.46
## 2022-07-01 743.59 975.93 1719.52 110794.87
## 2022-08-01 743.59 969.43 1713.02 110051.28
## 2022-09-01 743.59 962.92 1706.51 109307.69
## 2022-10-01 743.59 956.41 1700.00 108564.10
## ...
## 2034-03-01 743.59 65.06 808.65 6692.31
## 2034-04-01 743.59 58.56 802.15 5948.72
## 2034-05-01 743.59 52.05 795.64 5205.13
## 2034-06-01 743.59 45.54 789.13 4461.54
## 2034-07-01 743.59 39.04 782.63 3717.95
## 2034-08-01 743.59 32.53 776.12 2974.36
## 2034-09-01 743.59 26.02 769.61 2230.77
## 2034-10-01 743.59 19.52 763.11 1487.18
## 2034-11-01 743.59 13.01 756.60 743.59
## 2034-12-01 743.59 6.51 750.10 0.00
3. Sistema SAC (com carência)
# Carregar pacotes necessários
library(mondate)
library(xts)
# Definições iniciais
PV <- 116000 # Valor presente
i <- (1.1102)^(1/12) - 1 # Taxa de juros mensal
n <- 156 # Número de períodos (meses)
c <- 6 # Carência de 6 meses
# Inicializar vetores
Amort <- Juros <- Prest <- Saldo <- rep(0, n)
# Cálculo
for (t in 1:n) {
Juros[t] <- ifelse(t == 1, PV * i, i * Saldo[t - 1])
Amort[t] <- ifelse(t <= c, 0, PV / (n - c))
Saldo[t] <- ifelse(t == 1, PV - Amort[t], Saldo[t - 1] - Amort[t])
Prest[t] <- Juros[t] + Amort[t]
}
# Construir data.frame
SAC_com_carencia_df <- round(data.frame(
Amortizacao = Amort,
Juros = Juros,
Prestacao = Prest,
Saldo_Devedor = Saldo
), 2)
# Criar índice de datas
datas <- seq(as.Date("2022-01-01"), by = "month", length.out = n)
# Converter para xts
SAC_com_carencia_xts <- xts(SAC_com_carencia_df, order.by = datas)
# Exibir resultado
SAC_com_carencia_xts
## Amortizacao Juros Prestacao Saldo_Devedor
## 2022-01-01 0.00 1014.97 1014.97 116000.00
## 2022-02-01 0.00 1014.97 1014.97 116000.00
## 2022-03-01 0.00 1014.97 1014.97 116000.00
## 2022-04-01 0.00 1014.97 1014.97 116000.00
## 2022-05-01 0.00 1014.97 1014.97 116000.00
## 2022-06-01 0.00 1014.97 1014.97 116000.00
## 2022-07-01 773.33 1014.97 1788.30 115226.67
## 2022-08-01 773.33 1008.20 1781.54 114453.33
## 2022-09-01 773.33 1001.44 1774.77 113680.00
## 2022-10-01 773.33 994.67 1768.00 112906.67
## ...
## 2034-03-01 773.33 67.66 841.00 6960.00
## 2034-04-01 773.33 60.90 834.23 6186.67
## 2034-05-01 773.33 54.13 827.47 5413.33
## 2034-06-01 773.33 47.37 820.70 4640.00
## 2034-07-01 773.33 40.60 813.93 3866.67
## 2034-08-01 773.33 33.83 807.17 3093.33
## 2034-09-01 773.33 27.07 800.40 2320.00
## 2034-10-01 773.33 20.30 793.63 1546.67
## 2034-11-01 773.33 13.53 786.87 773.33
## 2034-12-01 773.33 6.77 780.10 0.00
4. Sistema SAC Corrido (com indexação)
# Carregar pacotes necessários
library(mondate)
library(xts)
# Definições iniciais
PV <- 116000 # Valor presente
i <- (1.1102)^(1/12) - 1 # Taxa de juros mensal
TR <- (1.03)^(1/12) - 1 # Correção monetária mensal
n <- 156 # Número de períodos (meses)
# Inicializar vetores
Amort <- rep(PV / n, n)
Juros <- Prest <- Saldo <- rep(0, n)
# Cálculo do 1º mês
Juros[1] <- PV * i * (1 + TR)
Saldo[1] <- (PV - Amort[1]) * (1 + TR)
Prest[1] <- Juros[1] + Amort[1]
# Cálculo dos demais meses
for (t in 2:n) {
Juros[t] <- Saldo[t - 1] * i * (1 + TR)
Saldo[t] <- (Saldo[t - 1] - Amort[t]) * (1 + TR)
Prest[t] <- Juros[t] + Amort[t]
}
# Ajuste final: zerar saldo residual
Saldo[n] <- 0
# Construir data.frame
SAC_corrigido_df <- round(data.frame(
Amortizacao = Amort,
Juros = Juros,
Prestacao = Prest,
Saldo_Devedor = Saldo
), 2)
# Criar índice de datas
datas <- seq(as.Date("2022-01-01"), by = "month", length.out = n)
# Converter para xts
SAC_corrigido_xts <- xts(SAC_corrigido_df, order.by = datas)
# Exibir resultado
SAC_corrigido_xts
## Amortizacao Juros Prestacao Saldo_Devedor
## 2022-01-01 743.59 1017.47 1761.06 115540.66
## 2022-02-01 743.59 1013.44 1757.03 115080.19
## 2022-03-01 743.59 1009.40 1752.99 114618.59
## 2022-04-01 743.59 1005.36 1748.95 114155.85
## 2022-05-01 743.59 1001.30 1744.89 113691.96
## 2022-06-01 743.59 997.23 1740.82 113226.93
## 2022-07-01 743.59 993.15 1736.74 112760.76
## 2022-08-01 743.59 989.06 1732.65 112293.43
## 2022-09-01 743.59 984.96 1728.55 111824.95
## 2022-10-01 743.59 980.85 1724.44 111355.32
## ...
## 2034-03-01 743.59 310.43 1054.02 34733.58
## 2034-04-01 743.59 304.66 1048.25 34073.82
## 2034-05-01 743.59 298.87 1042.46 33412.43
## 2034-06-01 743.59 293.07 1036.66 32749.41
## 2034-07-01 743.59 287.26 1030.85 32084.76
## 2034-08-01 743.59 281.43 1025.02 31418.46
## 2034-09-01 743.59 275.58 1019.17 30750.52
## 2034-10-01 743.59 269.72 1013.31 30080.94
## 2034-11-01 743.59 263.85 1007.44 29409.70
## 2034-12-01 743.59 257.96 1001.55 0.00
5. Sistema SAC com função - Correção e Carência (Exemplo BNDES)
calculate_sac <- function(ano_base, ano_final, carencia, P, i) {
n <- ceiling(as.numeric((as.Date(ano_final) - as.Date(ano_base)) / 30.4375))
Juros <- Amort <- Prest <- Saldo <- rep(0, n)
Amort[(carencia + 1):n] <- P / (n - carencia)
Juros[1] <- P * i
Prest[1] <- Juros[1] + Amort[1]
Saldo[1] <- P - Amort[1]
for (t in 2:n) {
Juros[t] <- i * Saldo[t - 1]
Saldo[t] <- Saldo[t - 1] - Amort[t]
Prest[t] <- Juros[t] + Amort[t]
}
dates <- seq(as.Date(ano_base), by = "month", length.out = n)
result <- round(data.frame(Juros, Amortizacao = Amort, Prestacao = Prest, Saldo_Devedor = Saldo), 2)
xts(result, order.by = dates)
}
resultado_c1410 <- calculate_sac(
ano_base = as.mondate("2022-01-01"),
ano_final = as.mondate("2031-12-15"),
carencia = 1,
P = 36921.46996,
i = (1.08)^(1/12) - 1
)
resultado_c1410
## Juros Amortizacao Prestacao Saldo_Devedor
## 2022-01-01 237.55 0.00 237.55 36921.47
## 2022-02-01 237.55 310.26 547.82 36611.21
## 2022-03-01 235.56 310.26 545.82 36300.94
## 2022-04-01 233.56 310.26 543.83 35990.68
## 2022-05-01 231.57 310.26 541.83 35680.41
## 2022-06-01 229.57 310.26 539.83 35370.15
## 2022-07-01 227.57 310.26 537.84 35059.88
## 2022-08-01 225.58 310.26 535.84 34749.62
## 2022-09-01 223.58 310.26 533.84 34439.35
## 2022-10-01 221.58 310.26 531.85 34129.09
## ...
## 2031-03-01 19.96 310.26 330.23 2792.38
## 2031-04-01 17.97 310.26 328.23 2482.12
## 2031-05-01 15.97 310.26 326.23 2171.85
## 2031-06-01 13.97 310.26 324.24 1861.59
## 2031-07-01 11.98 310.26 322.24 1551.32
## 2031-08-01 9.98 310.26 320.25 1241.06
## 2031-09-01 7.99 310.26 318.25 930.79
## 2031-10-01 5.99 310.26 316.25 620.53
## 2031-11-01 3.99 310.26 314.26 310.26
## 2031-12-01 2.00 310.26 312.26 0.00
6. Contratos Internacionais - Pagamentos Semestrais (Exemplo BID)
Em contratos internacionais de financiamento, como aqueles firmados com organismos multilaterais, é comum a adoção de sistemas de pagamento semestrais. Nesse modelo, os juros são calculados com base no saldo devedor existente a cada semestre, e as amortizações ocorrem de forma periódica, reduzindo gradativamente o montante principal da dívida. Entre os pagamentos, o saldo devedor permanece constante. Essa estrutura proporciona previsibilidade aos fluxos financeiros do devedor e facilita a gestão do serviço da dívida ao longo do período contratual.
calculate_c1343 <- function(ano_base, ano_final, P, i, mes_primeiro_pagamento = 6) {
n <- ceiling(as.numeric(ano_final - ano_base))
numero_semestres <- round(ceiling(as.numeric(ano_final - ano_base)) / 12 * 2, 0)
seq_pgtos <- seq(from = mes_primeiro_pagamento, to = n, by = 6)
Juros <- Amort <- Prest <- Saldo <- rep(0, n)
Saldo[1] <- P
for (t in 1:n) {
if (t %in% seq_pgtos) {
Amort[t] <- P / numero_semestres
SaldoAnt <- ifelse(t == mes_primeiro_pagamento, Saldo[1], Saldo[t - 6])
Juros[t] <- i * SaldoAnt
Saldo[t] <- SaldoAnt - Amort[t]
Prest[t] <- Juros[t] + Amort[t]
} else if (t > 1) {
Saldo[t] <- Saldo[t - 1]
}
}
dates <- seq(as.Date(ano_base), by = "month", length.out = n)
result <- round(data.frame(Juros, Amortizacao = Amort, Prestacao = Prest, Saldo_Devedor = Saldo), 2)
xts(result, order.by = dates)
}
resultado_c1343 <- calculate_c1343(
ano_base = as.mondate("2022-01-01"),
ano_final = as.mondate("2031-12-31"),
P = 251122.50,
i = 2.65 / 200,
mes_primeiro_pagamento = 6
)
resultado_c1343
## Juros Amortizacao Prestacao Saldo_Devedor
## 2022-01-01 0.00 0.00 0.00 251122.50
## 2022-02-01 0.00 0.00 0.00 251122.50
## 2022-03-01 0.00 0.00 0.00 251122.50
## 2022-04-01 0.00 0.00 0.00 251122.50
## 2022-05-01 0.00 0.00 0.00 251122.50
## 2022-06-01 3327.37 12556.12 15883.50 238566.38
## 2022-07-01 0.00 0.00 0.00 238566.38
## 2022-08-01 0.00 0.00 0.00 238566.38
## 2022-09-01 0.00 0.00 0.00 238566.38
## 2022-10-01 0.00 0.00 0.00 238566.38
## ...
## 2031-03-01 0.00 0.00 0.00 25112.25
## 2031-04-01 0.00 0.00 0.00 25112.25
## 2031-05-01 0.00 0.00 0.00 25112.25
## 2031-06-01 332.74 12556.12 12888.86 12556.12
## 2031-07-01 0.00 0.00 0.00 12556.12
## 2031-08-01 0.00 0.00 0.00 12556.12
## 2031-09-01 0.00 0.00 0.00 12556.12
## 2031-10-01 0.00 0.00 0.00 12556.12
## 2031-11-01 0.00 0.00 0.00 12556.12
## 2031-12-01 166.37 12556.12 12722.49 0.00