Spaces:
Running
Running
# 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") | |
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, tipologia="APARTAMENTOS", estado="B - entre novo e regular", VR=0.2, valor_terreno=0, fc="0.1"): | |
# 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, 2) | |
# Valor do "Kd" | |
kd = VR + (1 - coef_HH) * (1 - VR) | |
kd = round(kd, 2) | |
# Cálculos | |
Valor_sem_deprec = area * valor_cub * percentual_cub * (1 + BDI / 100) | |
Valor_sem_deprec = round(Valor_sem_deprec, 2) | |
Valor_com_deprec = Valor_sem_deprec * kd | |
Valor_com_deprec = round(Valor_com_deprec, 2) | |
valor_imovel = (valor_terreno + Valor_com_deprec) * float(fc) | |
# Obter a lista de cabeçalhos (colunas) | |
cabecalhos = df_cub.columns.tolist() | |
# O último cabeçalho será o último elemento da lista | |
ultimo_cabecalho = cabecalhos[-1] | |
# 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] | |
resumo = { | |
"01":"---VALOR INICIAL CONST---", | |
"Á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, | |
"Valor CUB": round(valor_cub, 2), | |
"Valor_sem_deprec": Valor_sem_deprec, | |
"02":"--VALOR DEPRECIADO CONST--", | |
"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 const": Valor_com_deprec, | |
"03": "--VALOR DO IMÓVEL (TERRENO + CONSTRUÇÃO)--", | |
"Valor do Terreno": valor_terreno, | |
"FC (Fator de Comercialização)": fc, | |
"Valor do Imóvel": valor_imovel | |
} | |
return resumo | |
entradas = [ | |
gr.inputs.Number(label="Área construída (m²)", default=100), | |
gr.inputs.Textbox(label="Data de referência (mm/aaaa)", default=ultimo_cabecalho), | |
gr.inputs.Textbox(label="Data da construção (mm/aaaa)", default=ultimo_cabecalho), | |
gr.inputs.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)"],default="R 1-N (Res. Unifamiliar)"), | |
gr.inputs.Textbox(label="Data do CUB (mm/aaaa)", default=ultimo_cabecalho), | |
gr.inputs.Number(label="Percentual para adequação do CUB (%) - (Adapatação do CUB para uma situação atípica)", default=1), | |
gr.inputs.Number(label="BDI (%)", default=22.5), | |
gr.inputs.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"], default="CASAS DE ALVENARIA"), | |
gr.inputs.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"], default="A - novo"), | |
gr.inputs.Dropdown(label="Valor residual (0, 0.1 ou 0.2)", choices=["0", "0.1", "0.2"], default="0"), | |
gr.inputs.Number(label="Valor do Terreno", default=0), | |
gr.inputs.Dropdown(label="FC (Fator de Comercialização)", choices=["0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1.0","1.1","1.2","1.3","1.4","1.5","1.6","1.7","1.8","1.9","2.0"], default="1") | |
] | |
saida = gr.outputs.JSON() | |
interface = gr.Interface(fn=calcular_valor_imovel, inputs=entradas, outputs=saida, title="Método Evolutivo (NBR 14653-2)" ) | |
interface.launch() | |