Spaces:
Sleeping
Sleeping
| 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.") | |