# 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(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] 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 = [ (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"), ] # Adicionar cada seção ao documento for content, title in sections: # Adicionar o título da seção doc.add_heading(title, level=2) # Adicionar o conteúdo da seção p = doc.add_paragraph() p.add_run(content).font.size = Pt(12) p.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # Salvar o documento em um arquivo .doc doc.save('relatorio_avaliacao_imovel.doc') return valor_inicial, deprec, valor_ter, valor_final, 'relatorio_avaliacao_imovel.doc' interface = gr.Interface( calcular_valor_imovel, inputs = [ 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 = "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

""" ) if __name__ == "__main__": interface.launch(debug=True)