# 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 # Certifique-se de importar o módulo corretamente # 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} """ return valor_inicial, deprec, valor_ter, valor_final 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="Adapataçã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.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") ], live=False, capture_session=True, theme=gr.themes.Monochrome(), title="avalia.EVO", description=f"""

avalia.se

Aplicativo MCDDM com tratamento por fatores / Faça o upload de uma planilha XLS ou XLSX com os dados / Para um exemplo de estrutura de planilha, você pode baixar aqui

""" ) if__name__=="__main__": interface.launch(dedug=True)