# importando as bibliotecas necessárias import gradio as gr import pandas as pd from datetime import datetime from gradio.components import Number, Textbox, Dropdown, Button import warnings from gradio import Interface from docx import Document from docx.shared import Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # Suprimir todos os avisos durante a execução do script warnings.filterwarnings("ignore") # Calcular a data mais recente do CUB fora da função df_cub = pd.read_excel('TABELAS.xlsx', sheet_name='CUB') ultimo_cub = df_cub.columns[-1] def calcular_valor_imovel(nome="-", prof="Engenheiro Civil", ent="CREA", reg="-", lograd="-", munic="-", tipo_imo="-", infra="Água Potável", serv="Coleta de Lixo", uso="Residencial", pad_reg="-", tipo_via="-", obs_gerais="-", area=100, data_refer_str=None, data_const_str=None, tipo_cub="R 1-N (Res. Unifamiliar)", data_cub_str=None, percentual_cub=1, BDI=22.5, BDI_tipo ="Arbitrado", fator_local = 1, just_fator_local = "-", tipologia="APARTAMENTOS", estado="B - entre novo e regular", VR=0.0, valor_terreno=0, est_ter="Grau III de fundamentação no métodocomparativo ou no involutivo", fc=1, fc_just="Arbitrado"): # Carregar dados dos arquivos Excel df_cub = pd.read_excel('TABELAS.xlsx', sheet_name='CUB') df_vida = pd.read_excel('TABELAS.xlsx', sheet_name='VUTIL') df_dep = pd.read_excel('TABELAS.xlsx', sheet_name='DEP') df_estado_cons = pd.read_excel('TABELAS.xlsx', sheet_name='estado_cons') # Converter datas de entrada if data_refer_str is None or data_refer_str == "": data_refer = datetime.now() else: data_refer = datetime.strptime(data_refer_str, "%m/%Y") data_const = datetime.strptime(data_const_str, "%m/%Y") if data_cub_str is None or data_cub_str == "": data_cub = datetime.now() else: data_cub = datetime.strptime(data_cub_str, "%m/%Y") # Filtrar por tipo_cub df_tipo_cub = df_cub[df_cub['CÓDIGO'] == tipo_cub] # Obter o valor do CUB na coluna correspondente à data valor_cub_column = data_cub.strftime("%m/%Y") valor_cub = df_tipo_cub.at[df_tipo_cub.index[0], valor_cub_column] # Idade idade = data_refer.toordinal() - data_const.toordinal() if idade > 1: idade = idade // 365 else: idade = 1 # Filtrar por %de Vida vdu = df_vida.loc[(df_vida['FINAL'] == tipologia)] # % de vida útil percentual_vdu = (idade / vdu['VIDAUTIL']) * 100 percentual_vdu = int(round(percentual_vdu, 0)) if percentual_vdu != 1: percentual_vdu = percentual_vdu else: percentual_vdu = 2 print(percentual_vdu,"%") # Filtrar conforme o % de vida útil df_conserv = df_dep.loc[df_dep['%deVida'] == percentual_vdu] # Converter o valor residual de string para número (float) if VR and VR.strip() != "": VR = float(VR) else: VR = 0.0 # Obter da depreciação coef_HH = float(df_conserv[estado]/100) coef_HH = round(coef_HH, 3) # Valor do "Kd" kd = VR + (1 - coef_HH) * (1 - VR) kd = round(kd, 3) # Cálculos Valor_sem_deprec = round(area * valor_cub * percentual_cub * (1 + BDI / 100) * fator_local, 2) Valor_com_deprec = Valor_sem_deprec * kd Valor_com_deprec = round(Valor_com_deprec, 2) valor_imovel = round((valor_terreno + Valor_com_deprec) * float(fc), 2) # Atributo da coluna "cons" pelo qual você deseja fazer a correspondência atributo_desejado = estado # Encontrar o valor da coluna "obs" com base no atributo da coluna "cons" valor_obs = df_estado_cons.loc[df_estado_cons['cons'] == atributo_desejado, 'obs'].iloc[0] dados_resp = f""" Responsável Técnico: {nome} Profissão: {prof} Entidade de Classe: {ent} Nùmero do resgistro: {reg} """ inf_end = f""" Logradouro e número: {lograd} Município: {munic} Tipode imóvel: {tipo_imo} Infraentrutura: {infra} Serviços Públicos: {serv} Uso: {uso} Padrão predominante na região: {pad_reg} Tipo de via de acesso: {tipo_via} Outras oservações: {obs_gerais} """ valor_inicial = f""" Área construída (m²): {area} Data de referência: {data_refer.strftime("%m/%Y")} Data da construção: {data_const_str} Data do CUB: {data_cub.strftime("%m/%Y")} Tipo de CUB: {tipo_cub} Percentual para adequação do CUB (%): {percentual_cub} BDI (%): {BDI} Maneira como o BDI foi elaborado: {BDI_tipo} Valor CUB: {round(valor_cub, 2)} Fator local: {fator_local} Fator local (justificativa): {just_fator_local} Valor sem depreciação: {Valor_sem_deprec} """ deprec = f""" Tipologia: {tipologia} Vida útil da tipologia: {int(vdu['VIDAUTIL'])} Estado de conservação: {estado} Estado de conservação - descrição: {valor_obs} % de Vida Útil: {percentual_vdu} Coeficiente de Depreciação: {coef_HH} Valor residual (0, 0.1 ou 0.2): {VR} Kd: {kd} Valor final construção: {Valor_com_deprec} """ valor_ter = f""" Valor do Terreno: {valor_terreno} Observação sobre o grau de fundamentação: {est_ter} """ valor_final = f""" FC (Fator de Comercialização): {fc} Observação sobre o FC: {fc_just} Valor do Imóvel: {valor_imovel} """ # Criar um novo documento do Word doc = Document() # Definir o título do documento doc.add_heading('Relatório de Avaliação de Imóvel', level=1) # Definir as seções do relatório sections = [ (dados_resp, "Informações do Responsável Técnico"), (inf_end, "Endereço e Informações da Região"), (valor_inicial, "Valor Inicial da Construção"), (deprec, "Cálculo da Depreciação"), (valor_ter, "Valor Estimado para o Terreno"), (valor_final, "Valor Final do Imóvel"), ] for content, title in sections: doc.add_heading(title, level=2) p = doc.add_paragraph() run = p.add_run(content) run.font.size = Pt(12) p.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # Define o alinhamento para à esquerda # Salvar o documento em um arquivo .doc doc.save('relatorio_avaliacao.doc') return dados_resp, inf_end, valor_inicial, deprec, valor_ter, valor_final, 'relatorio_avaliacao.doc' interface = gr.Interface( calcular_valor_imovel, inputs = [ # Informações do Responsável Técnico gr.Textbox(label="Responsável Técnico", value="-"), gr.Dropdown(["Engenheiro Civil", "Arquiteto e Urbanista", "Corretor de Imóveis"],label="Profissão", value="-"), gr.Dropdown(["CREA", "CAU", "CRECI"],label="Entidade de Classe", value="-"), gr.Number(label="Nº do registro", value="0"), # Informações do imóvel e região gr.Textbox(label="Endereço (Logradouro, nº e bairro)", value="-"), gr.Textbox(label="Município", value="-"), gr.Textbox(label="Tipo de Imóvel", value="-"), gr.Dropdown(["Água Potável", "Energia Elétrica", "Telefone", "Pavimentação", "Esgoto Pluvial", "Iluminação Pública"], value=["Água Potável"], multiselect=True, label="Infraestrutura Urbana"), gr.Dropdown(["Coleta de Lixo", "Transporte Coletivo", "Comércio", "Educação", "Saúde"], value=["Coleta de Lixo"], multiselect=True, label="Serviços Públicos"), gr.Radio(["Residencial", "Comercial", "Misto"], label="Uso",value="Residencial"), gr.Radio(["Baixo", "Normal", "Alto"], label="Padrão predominante na região",value="Normal"), gr.Radio(["Local", "Coletora", "Arterial"], label="Tipo de via de acesso ao imóvel",value="Local"), gr.Textbox(label="Outras informação", value="-"), gr.Number(label="Área construída (m²)", value=100), gr.Textbox(label="Data de referência (mm/aaaa)", value=ultimo_cub, info="Data do fato gerador da demanda"), gr.Textbox(label="Data da construção (mm/aaaa)", value=ultimo_cub, info="Data de construção do imóvel"), gr.Dropdown(label="Tipo de CUB", choices=["R 1-B (Res. Unifamiliar)", "R 1-N (Res. Unifamiliar)", "R 1-A (Res. Unifamiliar)", "PP 4-B (Prédio Popular)", "PP 4-N (Prédio Popular)", "R 8-B (Res. Multifamiliar)", "R 8-N (Res. Multifamiliar)", "R 8-A (Res. Multifamiliar)", "R 16-N (Res. Multifamiliar)", "R 16-A (Res. Multifamiliar)", "PIS (Projeto Inter. Social)", "RP1Q (Residência Popular)", "CAL 8-N (Com. Andar Livres)", "CAL 8-A (Com. Andar Livres)", "CSL 8-N (Com.Salas e Lojas)", "CSL 8-A (Com.Salas e Lojas)", "CSL 16-N (Com.Salas e Lojas)", "CSL 16-A (Com.Salas e Lojas)", "GI (Galpão Industrial)"], value="R 1-N (Res. Unifamiliar)"), gr.Textbox(label="Data do CUB (mm/aaaa)", value=ultimo_cub, info="Data do CUB deverá coincidir com a data de referência do laudo"), #gr.Number(label="Percentual para adequação do CUB (%)", value=1, info="Adaptação do CUB para uma situação atípica ou para contemplar insumos/serviços que não constam na composição do CUB"), gr.Slider(0.5, 2.0, value=1, label="Fator para adequação do CUB", info="Adaptação do CUB para uma situação atípica ou para contemplar insumos/serviços que não constam na sua composição (insumos/serviços)", step = 0.1), gr.Number(label="BDI (%)", value=22.5), gr.Radio(["Justificado", "Arbitrado"], label="Tipo de BDI", info="Estipule como foi elaborado o % de BDI", value="Arbitrado"), gr.Slider(0.5, 1.5, value=1, label="Fator local", info="Escolha um coeficiente de valorização local baseado no seu conhecimento de mercado", step = 0.1), gr.Textbox(label="Justificativa para o Fator Local", value="-", info="Justifique tecnicamente a utilização deste fator"), gr.Dropdown(label="Tipologia", choices=["APARTAMENTOS", "BANCOS", "CASAS DE ALVENARIA", "CASAS DE MADEIRA", "HOTÉIS", "LOJAS", "TEATROS", "ARMAZÉNS", "FÁBRICAS", "CONST. RURAIS", "GARAGENS", "EDIFÍCIOS DE ESCRITÓRIOS", "GALPÕES (DEPÓSITOS)", "SILOS"], value="CASAS DE ALVENARIA"), gr.Dropdown(label="Estado de conservação", choices=["A - novo", "B - entre novo e regular", "C - regular", "D - entre regular e reparos simples", "E - reparos simples", "F - entre reparos simples e importantes", "G - reparos importantes", "H - entre reparos importantes e sem valor"], value="A - novo"), gr.Dropdown(label="Valor residual (0, 0.1 ou 0.2)", choices=["0", "0.1", "0.2"], value="0"), gr.Number(label="Valor do Terreno", value=0), gr.Radio(["Grau III de fundamentação no método comparativo ou no involutivo", "Grau II de fundamentação no método comparativo ou no involutivo", "Grau I de fundamentação no método comparativo ou no involutivo"], info="Escolha o Grau de Fundamentação alcançado pelo avaliação do terreno", label="", value="Grau I de fundamentação no método comparativo ou no involutivo"), gr.Slider(0.1, 2.0, value=1.0, label="FC (Fator de Comercialização)", info="O Fator de Comercialização, também chamado de Terceiro Componente ou Vantagem da Coisa Feita, é definido no item 3.20 da NBR 14653-1:2001: “Fator de comercialização: Razão entre o valor de mercado de um bem e o seu custo de reedição ou de substituição, que pode ser maior ou menor que 1", step = 0.1), gr.Radio(["Inferido em mercado semelhante", "Justificado", "Arbitrado"], label="", info="Estipule como foi elaborado o FC",value="Arbitrado"), ], outputs = [ gr.Textbox(label = "Informações do Responsável Técnico"), gr.Textbox(label = "Endereço e Informações da Região"), gr.Textbox(label = "Valor Inicial da Contrução"), gr.Textbox(label = "Cálculo da Depreciação"), gr.Textbox(label = "Valor estimado para o terreno"), gr.Textbox(label = "Valor final do imóvel"), gr.File(label="Relatório em Word"), ], live=False, capture_session=True, theme=gr.themes.Monochrome(), title="avalia.EVO", description=f"""
avalia.se
Aplicativo Método Evolutivo (benfeitorias + terrenos) / Para ver a documentação aqui