fschwartzer's picture
Upload app.py
77c4432 verified
Raw
History Blame Contribute Delete
4.19 kB
import streamlit as st
import pandas as pd
import numpy as np
# --- Configurações da Aplicação ---
st.set_page_config(
page_title="Avaliador Imobiliário Simplificado - NBR 14.653-2 (Protótipo)",
page_icon="🏠",
layout="centered",
)
# --- Disclaimer ---
st.warning(
"""
**ATENÇÃO:** Este é um protótipo simplificado de um avaliador imobiliário,
desenvolvido para fins demonstrativos e baseado em uma interpretação conceitual
da norma **NBR 14.653-2 (Avaliação de Imóveis Urbanos)**.
**Não se trata de uma avaliação imobiliária oficial ou pericial.**
Os valores e a metodologia de cálculo aqui apresentados são **ilustrativos**
e não utilizam dados reais de mercado nem consideram todas as complexidades
e requisitos estatísticos rigorosos da norma ABNT NBR 14.653-2.
**Consulte sempre um profissional de engenharia de avaliações ou arquiteto(a)
especializado(a) para avaliações imobiliárias formais.**
"""
)
st.title("🏠 Avaliador Imobiliário - NBR 14.653-2 (Protótipo)")
st.markdown(
"Este aplicativo estima o valor de um imóvel urbano com base em características chave, "
"aplicando um modelo simplificado inspirado nos princípios da ABNT NBR 14.653-2."
)
# --- Modelo Simplificado de Avaliação (Hardcoded para Demonstração) ---
# Em um cenário real, estes coeficientes seriam derivados de uma análise de regressão
# com dados reais de mercado, conforme as diretrizes da NBR 14.653-2.
BASE_PRICE_PER_SQM = 5000 # R$ por m²
QUARTOS_VALUE = 50000 # R$ por quarto
VAGAS_VALUE = 30000 # R$ por vaga de garagem
AGE_DEPRECIATION_PER_YEAR = 1000 # R$ de depreciação por ano de idade
LOCALIZACAO_MULTIPLIERS = {
'A - Excelente': 1.2,
'B - Boa': 1.0,
'C - Regular': 0.8,
'D - Ruim': 0.6,
}
# Coeficiente linear (intercept) - Ajuste base
INTERCEPT = 150000
def estimate_property_value(area_util, quartos, vagas, idade, localizacao_str):
"""
Estima o valor do imóvel usando um modelo linear simplificado.
"""
localizacao_multiplier = LOCALIZACAO_MULTIPLIERS.get(localizacao_str, 1.0)
# Cálculo base
base_value = (
(BASE_PRICE_PER_SQM * area_util) +
(QUARTOS_VALUE * quartos) +
(VAGAS_VALUE * vagas) -
(AGE_DEPRECIATION_PER_YEAR * idade)
)
# Aplica o fator de localização e intercept
final_value = (base_value * localizacao_multiplier) + INTERCEPT
# Garante que o valor não seja negativo
return max(0, final_value)
# --- Interface do Usuário ---
st.header("Características do Imóvel")
with st.form("property_form"):
area_util = st.slider("Área Útil (m²)", min_value=30, max_value=500, value=100, step=5)
quartos = st.slider("Número de Quartos", min_value=1, max_value=5, value=2, step=1)
vagas = st.slider("Número de Vagas de Garagem", min_value=0, max_value=4, value=1, step=1)
idade = st.slider("Idade do Imóvel (anos)", min_value=0, max_value=70, value=10, step=1)
localizacao = st.selectbox(
"Fator de Localização",
options=list(LOCALIZACAO_MULTIPLIERS.keys()),
index=1, # 'B - Boa'
help="Classificação subjetiva da localização: A (Excelente) a D (Ruim)."
)
submitted = st.form_submit_button("Avaliar Imóvel")
if submitted:
if area_util <= 0:
st.error("A Área Útil deve ser maior que zero.")
else:
estimated_value = estimate_property_value(area_util, quartos, vagas, idade, localizacao)
st.subheader("Resultado da Avaliação Simplificada")
st.metric("Valor Estimado", f"R$ {estimated_value:,.2f}".replace(",", "X").replace(".", ",").replace("X", "."))
st.info(
"Este valor é uma estimativa baseada no modelo demonstrativo. "
"Para uma avaliação precisa e conforme a NBR 14.653-2, um trabalho técnico é indispensável."
)
st.markdown("---")
st.markdown("Desenvolvido para demonstração do Gemini CLI.")