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.")