Simulador SAC vs PRICE: Qual o melhor financiamento? | O Estrategista Imobiliário
SAC vs PRICE, Amortização Imobiliária, Simulador Financiamento, Equity Imobiliário
A Escolha que Define seu Patrimônio
Ao financiar um imóvel, a maioria das pessoas foca apenas na parcela que cabe no orçamento mensal. No entanto, para quem busca eficiência de capital, as perguntas são outras:
- SAC ou Price: Qual realmente preserva meu patrimônio?
- Liquidez: Quanto desse dinheiro volta para mim se eu vender o imóvel em 5 anos?
- Amortização: Quanto do prazo eu destruo com aportes estratégicos?
Neste guia, apresentamos ferramentas exclusivas para que você possa simular cenários reais de financiamento, testar o impacto de aportes para amortização extraordinária e entender os aspectos técnicos mais importantes de forma simplificada. Nosso objetivo é fornecer a clareza necessária para que você tome a melhor decisão para o seu patrimônio.
Como base de comparação, utilizamos um cenário de referência de R$ 500.000,00 com aportes anuais de R$ 20.000,00, demonstrando visualmente como o tempo e os juros se comportam.
Nota: Você não está preso a estes números. Utilize as ferramentas dinâmicas abaixo para inserir seus próprios valores e descobrir o cenário ideal para o seu perfil.
1. Contexto das Taxas (Março de 2026)
Para que esta simulação seja fiel à realidade, utilizamos os indicadores médios vigentes:
CET (Custo Efetivo Total): 11,8% a 15,5% a.a. O CET é a métrica real do seu financiamento. Diferente da “Taxa Nominal” anunciada pelo marketing dos bancos, o CET inclui seguros obrigatórios (MIP e DFH) e taxas administrativas. É o valor exato que sai do seu bolso. Em contratos longos, uma redução de apenas 0,5% no CET pode representar uma economia de dezenas de milhares de reais.
CDI (Benchmark de Investimento): 14,65% a.a. Referenciado pela Taxa Selic (Meta de 14,75% a.a. conforme o BCB). Este valor representa o custo do dinheiro no mercado. Quando o CET do seu financiamento está abaixo do CDI, você tem uma “eficiência de capital” interessante, pois o custo da sua dívida é menor do que o rendimento que você obteria em aplicações seguras de renda fixa.
2. O Simulador Estratégico
Utilize a ferramenta interativa abaixo para comparar os sistemas. Ajuste os sliders para ver o valor das Parcelas Mensais, a evolução do Saldo Devedor (Dívida), Custo Total Acumulado (Despesa), Saldo de Oportunidade (Invest.) e Patrimônio Líquido (Equity).
#| '!! shinylive warning !!': |
#| shinylive does not work in self-contained HTML documents.
#| Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 820
## file: app.py
#| standalone: true
#| viewerHeight: 820
from shiny import App, render, ui, reactive
import pandas as pd
import plotly.graph_objs as go
from shinywidgets import output_widget, render_widget
# --- MOTOR FINANCEIRO ---
def calcular_tabelas(valor_fin, cet_anual, prazo_anos):
prazo_meses = prazo_anos * 12
taxa_mensal = (1 + cet_anual)**(1/12) - 1
dados_sac = []
saldo_sac = valor_fin
amort_sac = valor_fin / prazo_meses
pago_acum_sac = 0
for m in range(1, prazo_meses + 1):
juros = saldo_sac * taxa_mensal
parcela = amort_sac + juros
saldo_sac -= amort_sac
pago_acum_sac += parcela
dados_sac.append({"Mes": m, "Ano": m/12, "Parcela": parcela, "Amort": amort_sac, "Juros": juros, "Saldo": max(0, saldo_sac), "Total_Pago": pago_acum_sac})
dados_price = []
saldo_price = valor_fin
parcela_price = valor_fin * (taxa_mensal * (1 + taxa_mensal)**prazo_meses) / ((1 + taxa_mensal)**prazo_meses - 1)
pago_acum_price = 0
for m in range(1, prazo_meses + 1):
juros = saldo_price * taxa_mensal
amort = parcela_price - juros
saldo_price -= amort
pago_acum_price += parcela_price
dados_price.append({"Mes": m, "Ano": m/12, "Parcela": parcela_price, "Amort": amort, "Juros": juros, "Saldo": max(0, saldo_price), "Total_Pago": pago_acum_price})
return pd.DataFrame(dados_sac), pd.DataFrame(dados_price)
# --- CONFIGURACAO VISUAL ---
ESTILO_LAYOUT_BASE = dict(
template="plotly_white",
font=dict(family="Arial, sans-serif", size=11), # Reduzi um pouco o padrão para mobile
margin=dict(l=50, r=20, t=40, b=50), # Margens mais enxutas
hovermode="x unified",
legend=dict(orientation="h", yanchor="bottom", y=-0.3, xanchor="center", x=0.5), # Legenda embaixo ajuda no mobile
xaxis=dict(title="Anos", showline=True, linewidth=1, dtick=5),
yaxis=dict(showline=True, linewidth=1, tickformat=",.0f")
)
app_ui = ui.page_fluid(
ui.head_content(
# Meta tag para garantir que o mobile entenda o redimensionamento
ui.tags.meta(name="viewport", content="width=device-width, initial-scale=0.8, maximum-scale=1.0, user-scalable=yes"),
ui.tags.style("""
body { background-color: #f8f9fa; }
.insight-card {
background: white;
border-left: 5px solid #27ae60;
padding: 12px;
border-radius: 8px;
margin-bottom: 15px;
border: 1px solid #eee;
font-size: 0.9rem;
}
/* Ajuste para telas pequenas */
@media (max-width: 768px) {
h2 { font-size: 1.4rem !important; }
.insight-card { font-size: 0.8rem; padding: 8px; }
.control-panel .shiny-input-container { margin-bottom: 5px !important; }
}
""")
),
ui.markdown("## Estrategista Imobiliário: SAC vs PRICE"),
# Layout responsivo: 1 coluna no mobile, 4 no desktop
ui.layout_column_wrap(
ui.input_numeric("valor", "Valor (R$)", 500000, step=10000),
ui.input_slider("taxa", "CET (%)", 5.0, 20.0, 13.5, step=0.1),
ui.input_slider("selic", "Selic (%)", 5.0, 20.0, 14.65, step=0.05),
ui.input_slider("prazo", "Prazo (Anos)", 5, 35, 35),
width=1/2, # No mobile o Shiny tenta ajustar, mas o 'width' aqui define a base
widths_sm=1,
class_="control-panel"
),
ui.div(ui.output_ui("texto_insights"), class_="insight-card"),
ui.navset_tab(
ui.nav_panel("Parcelas", output_widget("grafico_parcelas")),
ui.nav_panel("Dívida", output_widget("grafico_saldo")),
ui.nav_panel("Despesa", output_widget("grafico_acumulado")),
ui.nav_panel("Invest.", output_widget("grafico_investimento")),
ui.nav_panel("Equity", output_widget("grafico_equity"))
)
)
def server(input, output, session):
@reactive.calc
def dados():
return calcular_tabelas(input.valor(), input.taxa()/100, input.prazo())
@output
@render.ui
def texto_insights():
df_sac, df_price = dados()
try:
idx_p = df_sac[df_sac['Parcela'] <= df_price['Parcela'].iloc[0]].index[0]
anos_p, meses_p = int(df_sac.iloc[idx_p]['Mes'] // 12), int(df_sac.iloc[idx_p]['Mes'] % 12)
ponto_c = df_price[df_price['Total_Pago'] > df_sac['Total_Pago']].iloc[0]
anos_c, meses_c = int(ponto_c['Mes'] // 12), int(ponto_c['Mes'] % 12)
economia = df_price['Total_Pago'].iloc[-1] - df_sac['Total_Pago'].iloc[-1]
return ui.markdown(f"""
* **Inversão de parcelas:** As parcelas SAC tornam-se mais econômicas que a PRICE após **{anos_p} anos e {meses_p} meses**.
* **Custo Total:** O sistema SAC torna-se mais vantajoso no valor acumulado após **{anos_c} anos e {meses_c} meses**.
* **Resultado Final:** A economia real do SAC ao quitar o contrato será de **R$ {economia:,.2f}**.
""")
except: return ui.markdown("Ajuste os filtros.")
@render_widget
def grafico_parcelas():
df_sac, df_price = dados()
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_sac['Ano'], y=df_sac['Parcela'], name="SAC", line=dict(color='#0984e3', width=2)))
fig.add_trace(go.Scatter(x=df_sac['Ano'], y=df_sac['Juros'], name="Juros", line=dict(color='#0984e3', width=2, dash='dash')))
fig.add_trace(go.Scatter(x=df_price['Ano'], y=df_price['Parcela'], name="PRICE", line=dict(color='#d63031', width=2)))
fig.add_trace(go.Scatter(x=df_price['Ano'], y=df_price['Juros'], name="Juros", line=dict(color='#d63031', width=2, dash='dash')))
fig.update_layout(**ESTILO_LAYOUT_BASE, title="Parcela Mensal")
return fig
@render_widget
def grafico_saldo():
df_sac, df_price = dados()
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_sac['Ano'], y=df_sac['Saldo'], name="SAC", line=dict(color='#0984e3', width=2)))
fig.add_trace(go.Scatter(x=df_price['Ano'], y=df_price['Saldo'], name="PRICE", line=dict(color='#d63031', width=2)))
fig.update_layout(**ESTILO_LAYOUT_BASE, title="Saldo Devedor")
return fig
@render_widget
def grafico_acumulado():
df_sac, df_price = dados()
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_sac['Ano'], y=df_sac['Total_Pago'], name="Total SAC", line=dict(color='#0984e3')))
fig.add_trace(go.Scatter(x=df_price['Ano'], y=df_price['Total_Pago'], name="Total PRICE", line=dict(color='#d63031')))
fig.update_layout(**ESTILO_LAYOUT_BASE, title="Custo Total Pago")
return fig
@render_widget
def grafico_investimento():
df_sac, df_price = dados()
cdi_base, ir = input.selic() / 100, 0.15
percentuais = [1.0, 1.05, 1.10] # Reduzi para 3 curvas no mobile para não poluir
cores = ['#e74c3c', '#f1c40f', '#27ae60']
fig = go.Figure()
for pct, cor in zip(percentuais, cores):
taxa_anual = cdi_base * pct
taxa_m = (1 + taxa_anual)**(1/12) - 1
invest = [0]
for i in range(len(df_sac)):
diff = df_sac['Parcela'].iloc[i] - df_price['Parcela'].iloc[i]
saldo = invest[-1] * (1 + taxa_m * (1 - ir)) + diff
invest.append(max(0, saldo))
invest.pop(0)
fig.add_trace(go.Scatter(x=df_sac['Ano'], y=invest, name=f"{int(pct*100)}% CDI", line=dict(color=cor, width=2)))
fig.update_layout(**ESTILO_LAYOUT_BASE, title="Saldo de Oportunidade")
return fig
@render_widget
def grafico_equity():
df_sac, df_price = dados()
v_fin = input.valor()
cdi_base, ir = input.selic() / 100, 0.15
equity_sac = v_fin - df_sac['Saldo']
equity_price_puro = v_fin - df_price['Saldo']
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_sac['Ano'], y=equity_sac, name="Equity SAC", line=dict(color='#0984e3', width=2)))
fig.add_trace(go.Scatter(x=df_price['Ano'], y=equity_price_puro, name="Equity PRICE", line=dict(color='#d63031', width=2)))
# Apenas 100% CDI para limpar o gráfico mobile
taxa_m = (1 + cdi_base)**(1/12) - 1
invest = [0]
divida = [0]
for i in range(len(df_sac)):
diff = df_sac['Parcela'].iloc[i] - df_price['Parcela'].iloc[i]
saldo = invest[-1] * (1 + taxa_m * (1 - ir)) + diff
invest.append(max(0, saldo))
divida.append(min(0, saldo))
invest.pop(0)
divida.pop(0)
# Eficiência de gerar patrimônio caso invista o dinheiro
eff = ((equity_price_puro+invest)/(df_sac['Total_Pago']-divida))
fig.add_trace(go.Scatter(x=df_sac['Ano'], y=equity_price_puro + invest, name="PRICE + 100% CDI", line=dict(color='#f1c40f', dash='dash')))
fig.update_layout(**ESTILO_LAYOUT_BASE, title="Evolução do Patrimônio")
return fig
app = App(app_ui, server)
## file: requirements.txt
pandas
plotly
shinywidgets
shiny
exceptiongroup; python_version < "3.11"
Insight de Investidor: Repare na aba Saldo de Oportunidade (Invest.). Ela revela o “cabo de guerra” entre as tabelas: no início, você acumula capital investindo a diferença que economiza na PRICE (Saldo de Oportunidade). No entanto, conforme as parcelas da SAC caem, o jogo inverte e você passa a sacar desse fundo para cobrir o custo da PRICE. O sucesso dessa estratégia depende de o saldo terminar positivo após décadas de “põe e tira” de capital.
3. Quando a Tabela PRICE vale a pena?
Embora o sistema SAC seja matematicamente mais barato ao final do contrato, a Tabela PRICE pode ser uma ferramenta estratégica para quem possui disciplina financeira e capacidade de investimento. A vantagem da PRICE não está no custo do juro, mas no Custo de Oportunidade.
O Conceito do Investimento da Diferença
Nos primeiros anos, a parcela da PRICE é consideravelmente menor que a do SAC. Se você optar pela PRICE e investir a diferença em uma aplicação de Renda Fixa (como o CDI), o rendimento acumulado pode superar o custo extra de juros pago ao banco.
Observe a aba de Saldo de Oportunidade (Invest.) no simulador:
- Fase de Acúmulo: Enquanto a parcela do SAC for superior à da PRICE, você “alimenta” o investimento com a economia mensal e ele rentabiliza com juros sobre juros.
- Fase de Resgate: Quando ocorre a inversão das parcelas e o SAC se torna mais barato que a PRICE, você passa a “retirar” dinheiro desse fundo para cobrir a diferença e manter o mesmo desembolso que teria no SAC.
O veredito: Se, ao final dos 35 anos, o saldo desse investimento for superior a zero após o pagamento de todos os impostos, a estratégia de investir a diferença terá valido a pena. Caso contrário, você terá pago mais caro para o banco sem obter o retorno necessário para compensar o risco.
A Regra do Equilíbrio (Break-even)
Para que a comparação entre investir ou amortizar seja precisa, não olhe apenas para a taxa de juros nominal do contrato. O valor que realmente importa é o CET (Custo Efetivo Total). Ele representa o custo real anualizado, incluindo seguros obrigatórios e taxas administrativas.
Para que essa estratégia faça sentido, o rendimento líquido do seu investimento precisa render, no mínimo, o equivalente ao CET do financiamento após o pagamento de impostos. Considerando a alíquota de 15% de Imposto de Renda sobre os ganhos de capital, utilizamos a seguinte fórmula:
\[Taxa\ Alvo\ Bruta = \frac{CET\ do\ Financiamento}{0,85}\]
Tabela de Referência (CDI a 14,75%)
| CET do Banco (a.a.) | Taxa Alvo Líquida | Retorno Necessário (% do CDI) |
|---|---|---|
| 12,0% | 14,12% | 95,7% do CDI |
| 13,5% | 15,88% | 107,7% do CDI |
| 15,0% | 17,65% | 119,6% do CDI |
Nota: Se o seu investimento rende apenas 100% do CDI, qualquer financiamento com CET acima de 12,54% a.a. já torna o sistema SAC (amortização acelerada) matematicamente superior ao investimento da diferença.
Nota sobre Volatilidade: Embora os juros do seu contrato sejam fixados no momento da assinatura (o CET que usamos aqui), o saldo devedor é vivo. Ele é corrigido mensalmente pela TR. Por isso, em períodos de juros altos, a dívida parece não baixar: o banco corrige o que você deve antes de calcular quanto você pagou. Por outro lado, a variação da taxa Selic altera o custo de oportunidade: em certos momentos, investir o capital pode render mais do que a economia gerada pela amortização, e essa dinâmica deve ser monitorada ao longo dos anos.
4. Estratégia de Saída: Equity e Venda do Imóvel antes do Prazo
A vida é dinâmica: uma promoção, um novo emprego ou o crescimento da família podem exigir a venda do imóvel muito antes dos 30 ou 35 anos contratados. Quando o futuro é incerto, a escolha do sistema de amortização define a sua velocidade de construção de riqueza, o chamado Patrimônio Líquido (Equity).
O que é o Equity Imobiliário?
Ao morar em um imóvel financiado, o seu capital real não é o valor de mercado da casa, mas sim a sua posição líquida. A fórmula da riqueza no financiamento é:
\[ \begin{aligned} \text{Patrimônio Líquido} = \space &(\text{Valor de Mercado} - \text{Saldo Devedor}) \\ & + \text{Saldo dos Investimentos} \end{aligned} \]
SAC vs. PRICE: Dois Caminhos para a Riqueza
- SAC (Acelerador de Patrimônio Físico): É a escolha de quem prioriza “ser dono” da casa o quanto antes. Como a amortização é maior desde a primeira parcela, você constrói patrimônio dentro das paredes do imóvel.
- PRICE (Estratégia de Patrimônio Financeiro): O sucesso deste modelo depende do Custo de Oportunidade. Para não ficar para trás, o comprador deve investir religiosamente a diferença entre a parcela da SAC e a da PRICE. Se essa diferença for gasta em consumo, você chegará aos 15 anos de contrato com quase nenhuma evolução patrimonial real.
Neste cenário, o seu patrimônio não cresce dentro da parede da casa (amortização), mas sim em uma conta de investimentos. Se o rendimento desse investimento superar o custo do financiamento (CET), o investidor pode chegar ao final do período com um patrimônio líquido superior ao de quem escolheu a SAC. No entanto, se essa diferença for gasta em consumo, o comprador da PRICE chegará aos 15 ou 20 anos de contrato com quase nenhuma evolução patrimonial real.
Comparativo de Acúmulo de Patrimônio (%)
Veja quanto do valor original você efetivamente “conquista” ao longo do tempo. Note a diferença drástica nos primeiros 10 anos:
| Prazo Decorrido | Equity (SAC) | Equity (PRICE Pura) | PRICE + Invest (100% CDI) | PRICE + Invest (110% CDI) |
|---|---|---|---|---|
| 5 anos | ~14% | ~1% | ~13% | ~14% |
| 10 anos | ~29% | ~3% | ~27% | ~29% |
| 20 anos | ~57% | ~14% | ~44% | ~58% |
| 25 anos | ~71% | ~27% | ~45% | ~73% |
| 30 anos | ~86% | ~53% | ~53% | ~88% |
| 35 anos | 100% | 100% | 100% | 104% |
*Cálculo base: Diferença entre parcelas investida com IR de 15%. Considera CDI de 14,65% e CET de 13,5% a.a.
O Saldo Devedor como “Âncora”
Note que, no cenário de 20 anos, enquanto no SAC você já é dono de mais da metade do imóvel (57%), na PRICE você ainda deve mais de 85% do valor original ao banco. Se você precisar vender o imóvel para fazer um upgrade, na PRICE você terá pouquíssimo dinheiro na mão após quitar a dívida com o banco, a menos que seus investimentos tenham performado muito acima da média.
Eficiência de Capital: Quanto cada R$ 1,00 gera de riqueza?
Para o Estrategista Imobiliário, a métrica de ouro é a Taxa de Conversão: para cada R$ 1,00 que sai do seu bolso, quanto se transforma em patrimônio?
A tabela abaixo mostra essa “eficiência” (Razão entre Equity / Custo Total Pago):
| Prazo Decorrido | SAC | PRICE (Pura) | PRICE + Invest¹* | PRICE + Invest²* |
|---|---|---|---|---|
| 5 anos | 0,19 | 0,02 | 0,19 | 0,19 |
| 10 anos | 0,21 | 0,02 | 0,19 | 0,21 |
| 15 anos | 0,22 | 0,04 | 0,19 | 0,22 |
| 20 anos | 0,24 | 0,05 | 0,18 | 0,24 |
| 25 anos | 0,26 | 0,08 | 0,16 | 0,26 |
| 30 anos | 0,28 | 0,14 | 0,17 | 0,29 |
| 35 anos | 0,31 | 0,22 | 0,31 | 0,33 |
*Cálculo base: Proporção entre o Patrimônio Líquido Acumulado e o Total de Desembolso. Parcelas + Investimentos a 100%¹* e 110%²* do CDI descontando IR de 15% sobre o rendimento. Considera CDI de 14,65% e CET de 13,5%.
O que esses números dizem ao Estrategista?
- A Armadilha da PRICE Pura: Nos primeiros 10 anos, para cada real pago, apenas 4 centavos viram patrimônio. Os outros 96 centavos são juros e taxas que “somem”
- O Ponto de Virada: A estratégia de investir a diferença (PRICE + Invest) só supera a SAC no longuíssimo prazo (após 30 anos) e apenas se o rendimento líquido for consistentemente superior ao custo do financiamento.
Se você pretende mudar de imóvel em 10 ou 15 anos, a Tabela SAC é tecnicamente superior. Ela protege seu capital inicial e garante que, no momento da venda, você tenha um saldo devedor baixo e uma “entrada” robusta para sua próxima casa.
5. Estratégias de Amortização: Acelerando a Quitação
A amortização extraordinária (como o uso do FGTS ou bônus anuais) segue a mesma lógica do custo de oportunidade. Se você possui um capital extra, a decisão entre “Amortizar a Dívida” ou “Investir o Dinheiro” depende da comparação entre o CET do seu contrato e o rendimento líquido do seu investimento.
Regra de Ouro: Se o seu investimento não rende pelo menos CET / 0,85, o melhor “investimento” que você pode fazer é amortizar. Amortizar é, na prática, garantir um retorno livre de risco igual ao custo do seu financiamento.
Ao decidir amortizar, você deve escolher entre duas estratégias com objetivos distintos:
A. Redução de Parcela (Foco: Fôlego no Caixa)
Nesta modalidade, você mantém o prazo original do contrato, mas o valor da sua mensalidade cai proporcionalmente ao aporte.
- Na Tabela SAC: Como a amortização mensal é fixa, ao reduzir o saldo devedor, o componente de juros da próxima parcela cai imediatamente. É a estratégia ideal para quem busca reduzir o peso do financiamento no orçamento mensal.
- Na Tabela PRICE: A redução também ocorre, mas como as parcelas são originalmente fixas, o alívio pode parecer mais sutil no início, embora ajude a manter a previsibilidade do caixa.
B. Redução de Prazo (Foco: Quitação Rápida e Economia de Juros)
Aqui, você mantém o valor da parcela que já paga hoje, mas o banco recalcula o tempo restante. Esta é, matematicamente, a estratégia mais eficiente para economizar juros.
- Na Tabela PRICE: É onde o efeito é mais impactante. Como a PRICE amortiza muito pouco no início da dívida, um aporte extra de valor modesto pode “limpar” vários meses de juros puros do final do contrato.
- Na Tabela SAC: Também é extremamente eficaz, pois ao reduzir o prazo, você elimina anos de taxas administrativas e seguros obrigatórios (MIP/DFI) que incidiriam sobre o saldo devedor.
Simulador de Amortização Extraordinária
Abaixo, você pode simular o impacto de aportes únicos ou anuais no seu saldo devedor.
#| '!! shinylive warning !!': |
#| shinylive does not work in self-contained HTML documents.
#| Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 600
## file: app.py
from shiny import App, render, ui, reactive
import pandas as pd
def simular_vida_real(saldo_atual, cet_anual, prazo_restante_meses, aporte_extra):
taxa_m = (1 + cet_anual)**(1/12) - 1
# --- CENARIO PRICE ---
# 1. Prestacao que o usuario ja paga hoje (fixa)
if saldo_atual > 0:
pmt_original = saldo_atual * (taxa_m * (1 + taxa_m)**prazo_restante_meses) / ((1 + taxa_m)**prazo_restante_meses - 1)
# 2. Novo saldo apos o aporte
saldo_p = saldo_atual - aporte_extra
meses_p = 0
while saldo_p > 0 and meses_p < 600:
j_m = saldo_p * taxa_m
am = pmt_original - j_m
saldo_p -= am
meses_p += 1
else:
meses_p = 0
# --- CENARIO SAC ---
# Na SAC, a amortizacao mensal e fixa (Saldo / Prazo).
# Reduzir prazo mantendo a prestacao inicial significa manter essa cota de amortizacao.
if saldo_atual > 0:
amort_fixa_sac = saldo_atual / prazo_restante_meses
saldo_s = saldo_atual - aporte_extra
meses_s = saldo_s / amort_fixa_sac
else:
meses_s = 0
return meses_s, meses_p
app_ui = ui.page_fluid(
ui.head_content(ui.tags.style("""
.insight-card { background: #f8f9fa; border-left: 5px solid #27ae60; padding: 15px; border-radius: 8px; margin-bottom: 15px; border: 1px solid #dee2e6; }
.table { font-size: 14px; }
""")),
ui.markdown("### Simulador de Amortizacao Extraordinaria"),
ui.layout_column_wrap(
ui.input_numeric("valor_2", "Valor Financiado (R$)", 500000, step=10000),
ui.input_slider("taxa_2", "CET Anual (%)", 5.0, 20.0, 13.5, step=0.1),
ui.input_numeric("prazo_2", "Prazo Restante (Anos)", 35),
ui.input_numeric("aporte", "Valor do Aporte (R$)", 20000, step=5000),
width=1/4, fill=False
),
ui.navset_tab(
ui.nav_panel("Reducao de Valor",
ui.div(ui.output_ui("insight_valor"), class_="insight-card"),
ui.output_table("tabela_valor")
),
ui.nav_panel("Reducao de Prazo",
ui.div(ui.output_ui("insight_prazo"), class_="insight-card"),
ui.output_table("tabela_prazo")
)
)
)
def server(input, output, session):
@reactive.calc
def gerar_dados():
p_orig_m = input.prazo_2() * 12
taxa_m = (1 + (input.taxa_2()/100))**(1/12) - 1
res = []
for i in range(6):
ap_total = i * input.aporte()
saldo_v = max(0, input.valor_2() - ap_total)
# Reducao Valor
p_sac = (saldo_v / p_orig_m) + (saldo_v * taxa_m) if saldo_v > 0 else 0
p_price = saldo_v * (taxa_m * (1 + taxa_m)**p_orig_m) / ((1 + taxa_m)**p_orig_m - 1) if saldo_v > 0 else 0
# Reducao Prazo
m_sac, m_price = simular_vida_real(input.valor_2(), input.taxa_2()/100, p_orig_m, ap_total)
res.append({
"Saldo Devedor": f"R$ {saldo_v:,.2f}",
"Parcela SAC": p_sac,
"Parcela PRICE": p_price,
"Red_SAC": max(0, p_orig_m - m_sac),
"Red_PRICE": max(0, p_orig_m - m_price)
})
return pd.DataFrame(res)
@output
@render.ui
def insight_valor():
df = gerar_dados()
diff_sac = df["Parcela SAC"].iloc[0] - df["Parcela SAC"].iloc[1]
diff_price = df["Parcela PRICE"].iloc[0] - df["Parcela PRICE"].iloc[1]
return ui.markdown(f"**Insight:** Cada aporte de R$ {input.aporte():,.2f} reduz sua próxima parcela em **R$ {diff_sac:,.2f}** no SAC e **R$ {diff_price:,.2f}** na PRICE (mantendo o prazo original).")
@output
@render.ui
def insight_prazo():
df = gerar_dados()
red_sac_1 = df["Red_SAC"].iloc[1]
red_price_1 = df["Red_PRICE"].iloc[1]
return ui.markdown(f"""
**Insight:**
* No **SAC**, a redução é linear: cada aporte reduz o prazo em exatos **{red_sac_1:.1f} meses**.
* Na **PRICE**, o primeiro aporte elimina **{red_price_1:.1f} meses**. Note que essa potência diminui conforme a dívida reduz, pois você tem menos 'juros futuros' para economizar.
""")
@output
@render.table
def tabela_valor():
df = gerar_dados()[["Saldo Devedor", "Parcela SAC", "Parcela PRICE"]].copy()
df["Parcela SAC"] = df["Parcela SAC"].map("R$ {:,.2f}".format)
df["Parcela PRICE"] = df["Parcela PRICE"].map("R$ {:,.2f}".format)
return df
@output
@render.table
def tabela_prazo():
df = gerar_dados()[["Saldo Devedor", "Red_SAC", "Red_PRICE"]].copy()
df.columns = ["Saldo Devedor", "Reducao Prazo SAC", "Reducao Prazo PRICE"]
df["Reducao Prazo SAC"] = df["Reducao Prazo SAC"].map("{:.1f} meses".format)
df["Reducao Prazo PRICE"] = df["Reducao Prazo PRICE"].map("{:.1f} meses".format)
return df
app = App(app_ui, server)
## file: requirements.txt
pandas
plotly
shinywidgets
shiny
exceptiongroup; python_version < "3.11"
Comparativo Estratégico: SAC vs. PRICE
| Objetivo | Melhor Sistema | Por que? |
|---|---|---|
| Reduzir Parcela | SAC | Gera um alívio de caixa imediato e decrescente, aumentando sua segurança financeira mensal. |
| Reduzir Prazo | PRICE | Compensa a baixa amortização inicial da PRICE, ‘limpando’ parcelas do final do contrato que são compostas quase inteiramente por juros. |
O Lucro da Quitação Antecipada: Quanto você economiza de verdade?
Muitas pessoas olham apenas para o valor da parcela mensal, mas o verdadeiro segredo de um Estrategista Imobiliário está no controle do Custo Total da Dívida. Quando você faz uma amortização extraordinária, você não está apenas “adiantando um pagamento”, você está cancelando o “aluguel do dinheiro” que o banco cobraria de você no futuro.
1. O “Efeito Multiplicador” na Tabela PRICE
Na PRICE, as primeiras parcelas são compostas por quase 80% a 90% de juros e apenas uma pequena fração de amortização real.
- O Impacto: Ao amortizar o equivalente a uma parcela extra no início do contrato, você pode estar “limpando” o equivalente a 3, 4 ou até 5 parcelas do final do financiamento.
- Gerando valor: A redução de juros na Tabela PRICE é exponencial quando feita nos primeiros 5 anos, pois você ataca diretamente o saldo devedor antes que os juros compostos ajam sobre ele.
2. O Ganho Real na Tabela SAC
Como a SAC já amortiza um valor fixo desde o início, o impacto no prazo é mais linear, mas a economia de juros é massiva porque o Saldo Devedor (a base de cálculo dos juros) despenca mais rápido.
- O Impacto: Cada real amortizado na SAC reduz imediatamente os juros da parcela seguinte. A longo prazo, isso evita o efeito “bola de neve” das taxas administrativas e seguros obrigatórios (MIP/DFI).
Lembre-se: Cada real amortizado antecipadamente é um real sobre o qual você nunca mais pagará juros, taxas ou seguros pelos próximos 20 ou 30 anos.
6. Simulador Estratégico + Amortização Recorrente
Simule sua Economia Real: Utilize o simulador abaixo para comparar como pequenos aportes extras hoje podem transformar o custo total do seu imóvel. Descubra quanto você economiza em juros ao escolher entre reduzir o prazo ou o valor da sua parcela.
#| '!! shinylive warning !!': |
#| shinylive does not work in self-contained HTML documents.
#| Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 820
## file: app.py
#| standalone: true
#| viewerHeight: 820
from shiny import App, render, ui, reactive
import pandas as pd
import plotly.graph_objs as go
from shinywidgets import output_widget, render_widget
# --- MOTOR FINANCEIRO COM AMORTIZAÇÃO ---
def calcular_simulacao(valor_fin, cet_anual, prazo_anos, tipo_amtz, freq_amtz, valor_amtz):
prazo_meses = prazo_anos * 12
taxa_mensal = (1 + cet_anual)**(1/12) - 1
def simular(sistema="SAC"):
dados = []
saldo = valor_fin
pago_acum = 0
m = 1
# Parâmetros iniciais
parcela_base_price = valor_fin * (taxa_mensal * (1 + taxa_mensal)**prazo_meses) / ((1 + taxa_mensal)**prazo_meses - 1)
amort_sac_base = valor_fin / prazo_meses
meses_restantes = prazo_meses
while saldo > 0.01 and m <= 600: # Limite de 50 anos por segurança
juros = saldo * taxa_mensal
# Cálculo da parcela base do sistema
if sistema == "SAC":
amort_sistema = amort_sac_base if tipo_amtz == "Prazo" else saldo / meses_restantes # Amortização fixa do contrato original
parcela = amort_sistema + juros
else: # PRICE
# No recálculo de prazo, a parcela PRICE original se mantém
parcela = parcela_base_price if tipo_amtz == "Prazo" else saldo * (taxa_mensal * (1 + taxa_mensal)**meses_restantes) / ((1 + taxa_mensal)**meses_restantes - 1)
amort_sistema = parcela - juros
# Aplicação da Amortização Extraordinária
extra = 0
if freq_amtz == "Mensal":
extra = valor_amtz
elif freq_amtz == "Anual" and m % 12 == 0:
extra = valor_amtz
# Ajuste se o extra for maior que o saldo
extra = min(extra, max(0, saldo - amort_sistema))
amort_total = amort_sistema + extra
saldo -= amort_total
pago_acum += (parcela + extra)
dados.append({
"Mes": m, "Ano": m/12, "Parcela": parcela,
"Saldo": max(0, saldo), "Total_Pago": pago_acum
})
if tipo_amtz == "Valor":
meses_restantes -= 1
m += 1
return pd.DataFrame(dados)
# Calculamos Original (sem extra) e Amortizada
return {
"sac_orig": simular("SAC") if valor_amtz == 0 else calcular_simulacao(valor_fin, cet_anual, prazo_anos, "Prazo", "Mensal", 0)["sac_orig"],
"sac_amtz": simular("SAC"),
"price_orig": simular("PRICE") if valor_amtz == 0 else calcular_simulacao(valor_fin, cet_anual, prazo_anos, "Prazo", "Mensal", 0)["price_orig"],
"price_amtz": simular("PRICE")
}
# --- UI ---
app_ui = ui.page_fluid(
ui.head_content(
# Meta tag para garantir que o mobile entenda o redimensionamento
ui.tags.meta(name="viewport", content="width=device-width, initial-scale=0.8, maximum-scale=1.0, user-scalable=yes"),
ui.tags.style("""
body { background-color: #f8f9fa; }
.insight-card {
background: white;
border-left: 5px solid #27ae60;
padding: 12px;
border-radius: 8px;
margin-bottom: 15px;
border: 1px solid #eee;
font-size: 0.9rem;
}
/* Ajuste para telas pequenas */
@media (max-width: 768px) {
h2 { font-size: 1.4rem !important; }
.insight-card { font-size: 0.8rem; padding: 8px; }
.control-panel .shiny-input-container { margin-bottom: 5px !important; }
}
""")
),
ui.markdown("## Estrategista Imobiliário: Simulador de Amortização"),
ui.layout_column_wrap(
ui.input_numeric("valor", "Valor Financiado (R$)", 500000),
ui.input_slider("taxa", "Taxa CET Anual (%)", 5.0, 20.0, 13.5, step=0.1),
ui.input_slider("prazo", "Prazo Original (Anos)", 5, 35, 35),
width=1/3
),
ui.layout_column_wrap(
ui.input_select("freq", "Frequência", {"Mensal": "Mensal", "Anual": "Anual (13º/Bônus)"}),
ui.input_select("tipo", "Objetivo", {"Prazo": "Reduzir Prazo (Tempo)", "Valor": "Reduzir Parcela (Fôlego)"}),
ui.input_numeric("extra", "Valor do Aporte Extra (R$)", 1000, step=100),
width=1/3
),
ui.div(ui.output_ui("texto_insights"), class_="insight-card"),
ui.navset_tab(
ui.nav_panel("Parcelas", output_widget("grafico_parcelas")),
ui.nav_panel("Dívida", output_widget("grafico_saldo")),
ui.nav_panel("Despesa", output_widget("grafico_acumulado"))
)
)
def server(input, output, session):
@reactive.calc
def dados():
return calcular_simulacao(
input.valor(), input.taxa()/100, input.prazo(),
input.tipo(), input.freq(), input.extra()
)
@output
@render.ui
def texto_insights():
res = dados()
df_sa = res["sac_amtz"]
df_pa = res["price_amtz"]
df_so = res["sac_orig"]
prazo_sa = df_sa['Mes'].iloc[-1]
prazo_pa = df_pa['Mes'].iloc[-1]
economia_s = res["sac_orig"]["Total_Pago"].iloc[-1] - df_sa["Total_Pago"].iloc[-1]
economia_p = res["price_orig"]["Total_Pago"].iloc[-1] - df_pa["Total_Pago"].iloc[-1]
return ui.markdown(f"""
* **Impacto no Prazo:** Você quita o imóvel em: **SAC - {prazo_sa/12:.1f} anos** e **PRICE - {prazo_pa/12:.1f} anos**
* **Economia de Juros (SAC):** R$ {economia_s:,.2f} evitados.
* **Economia de Juros (PRICE):** R$ {economia_p:,.2f} evitados.
""")
def criar_figura(titulo, y_label):
fig = go.Figure()
fig.update_layout(
template="plotly_white",
font=dict(family="Arial, sans-serif", size=11), # Reduzi um pouco o padrão para mobile
margin=dict(l=50, r=20, t=40, b=50), # Margens mais enxutas
hovermode="x unified",
legend=dict(orientation="h", yanchor="bottom", y=-0.3, xanchor="center", x=0.5), # Legenda embaixo ajuda no mobile
xaxis=dict(title="Anos", showline=True, linewidth=1, dtick=5),
yaxis=dict(showline=True, linewidth=1, tickformat=",.0f"),
title=titulo
)
return fig
@render_widget
def grafico_parcelas():
res = dados()
fig = criar_figura("Evolução da Parcela (Mensalidade + Extra)", "R$")
fig.add_trace(go.Scatter(x=res["sac_orig"]["Ano"], y=res["sac_orig"]["Parcela"], name="SAC Original", line=dict(color='#0984e3', dash='dash', width = 1)))
fig.add_trace(go.Scatter(x=res["sac_amtz"]["Ano"], y=res["sac_amtz"]["Parcela"], name="SAC Amortizada", line=dict(color='#0984e3')))
fig.add_trace(go.Scatter(x=res["price_orig"]["Ano"], y=res["price_orig"]["Parcela"], name="PRICE Original", line=dict(color='#d63031', dash='dash', width = 1)))
fig.add_trace(go.Scatter(x=res["price_amtz"]["Ano"], y=res["price_amtz"]["Parcela"], name="PRICE Amortizada", line=dict(color='#d63031')))
return fig
@render_widget
def grafico_saldo():
res = dados()
fig = criar_figura("Redução do Saldo Devedor", "R$")
fig.add_trace(go.Scatter(x=res["sac_orig"]["Ano"], y=res["sac_orig"]["Saldo"], name="SAC Original", line=dict(color='#0984e3', dash='dash', width = 1)))
fig.add_trace(go.Scatter(x=res["sac_amtz"]["Ano"], y=res["sac_amtz"]["Saldo"], name="SAC Amortizada", line=dict(color='#0984e3')))
fig.add_trace(go.Scatter(x=res["price_orig"]["Ano"], y=res["price_orig"]["Saldo"], name="PRICE Original", line=dict(color='#d63031', dash='dash', width = 1)))
fig.add_trace(go.Scatter(x=res["price_amtz"]["Ano"], y=res["price_amtz"]["Saldo"], name="PRICE Amortizada", line=dict(color='#d63031')))
return fig
@render_widget
def grafico_acumulado():
res = dados()
fig = criar_figura("Despesa Total Acumulada (Juros + Amortização)", "R$")
fig.add_trace(go.Scatter(x=res["sac_orig"]["Ano"], y=res["sac_orig"]["Total_Pago"], name="SAC Original", line=dict(color='#0984e3', dash='dash', width = 1)))
fig.add_trace(go.Scatter(x=res["sac_amtz"]["Ano"], y=res["sac_amtz"]["Total_Pago"], name="SAC Amortizada", line=dict(color='#0984e3')))
fig.add_trace(go.Scatter(x=res["price_orig"]["Ano"], y=res["price_orig"]["Total_Pago"], name="PRICE Original", line=dict(color='#d63031', dash='dash', width = 1)))
fig.add_trace(go.Scatter(x=res["price_amtz"]["Ano"], y=res["price_amtz"]["Total_Pago"], name="PRICE Amortizada", line=dict(color='#d63031')))
return fig
app = App(app_ui, server)
## file: requirements.txt
pandas
plotly
shinywidgets
shiny
exceptiongroup; python_version < "3.11"
Ao escolher a Redução de Prazo, você está “comprando tempo”. No sistema bancário brasileiro, os juros são capitalizados mensalmente sobre o saldo devedor. Ao remover esse saldo hoje, você impede que os juros compostos trabalhem contra o seu patrimônio pelos próximos 20 ou 30 anos.
Conclusão Estratégica: Qual seu próximo passo?
A estratégia ideal depende do seu momento financeiro atual:
- Foco em segurança:Se o seu orçamento está apertado, reduza a parcela para ganhar fôlego mensal.
- Foco em riqueza: Se o seu foco é patrimonial, reduza o prazo para aniquilar os juros e quitar o imóvel na metade do tempo.
A Visão do Investidor(Arbitragem)
Para quem busca eficiência máxima, a regra é clara:
- Mantenha o dinheiro investido enquanto o seu rendimento líquido (pós-impostos) for maior que o CET do seu financiamento.
- Amortize agressivamente (Reduzindo Prazo) no momento em que as taxas de juros do mercado caírem e o rendimento das aplicações ficar abaixo do custo do seu financiamento.
Dessa forma, você faz o banco trabalhar com o seu dinheiro enquanto os juros estão altos e protege seu patrimônio quando o cenário de investimentos deixar de ser atrativo.
Gostou dessa ferramenta? Salve este link nos seus favoritos (Simulador de Amortização e Simulador de Financiamento + Amortização. Volte sempre que receber um bônus, 13º salário ou tiver saldo de FGTS disponível para planejar seu próximo aporte estratégico e visualizar sua rota de quitação antecipada.
Próximo Passo: Sua Simulação Personalizada
O mercado imobiliário não é feito de certezas absolutas, mas de decisões fundamentadas. Agora que você entende a mecânica por trás das tabelas SAC e PRICE, o custo real do CET e a importância da eficiência de capital, você tem as ferramentas necessárias para não ser apenas mais um cliente do banco, mas um estrategista do seu próprio patrimônio.
Não deixe seu planejamento apenas na teoria. Volte aos simuladores acima, insira os dados reais da sua proposta e observe como pequenos ajustes no sistema de amortização ou aportes extras podem economizar anos de trabalho e centenas de milhares de reais.
Lembre-se: No mundo dos juros compostos, o custo da indecisão é pago mensalmente no boleto.
Aproveite nossas calculadoras e, se este guia foi útil para sua jornada, compartilhe com quem também está prestes a tomar uma das maiores decisões financeiras da vida.
Este guia é atualizado periodicamente com os indicadores vigentes do Banco Central e as melhores práticas de mercado. Última atualização: Abril de 2026.