Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# importando as bibliotecas necessárias
|
| 2 |
+
import gradio as gr
|
| 3 |
+
import pandas as pd
|
| 4 |
+
from datetime import datetime
|
| 5 |
+
from gradio.components import Number, Textbox, Dropdown, Button
|
| 6 |
+
import warnings
|
| 7 |
+
from gradio import Interface # Certifique-se de importar o módulo corretamente
|
| 8 |
+
|
| 9 |
+
# Suprimir todos os avisos durante a execução do script
|
| 10 |
+
warnings.filterwarnings("ignore")
|
| 11 |
+
|
| 12 |
+
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"):
|
| 13 |
+
# Carregar dados dos arquivos Excel
|
| 14 |
+
df_cub = pd.read_excel('TABELAS.xlsx', sheet_name='CUB')
|
| 15 |
+
df_vida = pd.read_excel('TABELAS.xlsx', sheet_name='VUTIL')
|
| 16 |
+
df_dep = pd.read_excel('TABELAS.xlsx', sheet_name='DEP')
|
| 17 |
+
df_estado_cons = pd.read_excel('TABELAS.xlsx', sheet_name='estado_cons')
|
| 18 |
+
|
| 19 |
+
# Converter datas de entrada
|
| 20 |
+
if data_refer_str is None or data_refer_str == "":
|
| 21 |
+
data_refer = datetime.now()
|
| 22 |
+
else:
|
| 23 |
+
data_refer = datetime.strptime(data_refer_str, "%m/%Y")
|
| 24 |
+
data_const = datetime.strptime(data_const_str, "%m/%Y")
|
| 25 |
+
if data_cub_str is None or data_cub_str == "":
|
| 26 |
+
data_cub = datetime.now()
|
| 27 |
+
else:
|
| 28 |
+
data_cub = datetime.strptime(data_cub_str, "%m/%Y")
|
| 29 |
+
|
| 30 |
+
# Filtrar por tipo_cub
|
| 31 |
+
df_tipo_cub = df_cub[df_cub['CÓDIGO'] == tipo_cub]
|
| 32 |
+
|
| 33 |
+
# Obter o valor do CUB na coluna correspondente à data
|
| 34 |
+
valor_cub_column = data_cub.strftime("%m/%Y")
|
| 35 |
+
valor_cub = df_tipo_cub.at[df_tipo_cub.index[0], valor_cub_column]
|
| 36 |
+
|
| 37 |
+
# Idade
|
| 38 |
+
idade = data_refer.toordinal() - data_const.toordinal()
|
| 39 |
+
if idade > 1:
|
| 40 |
+
idade = idade // 365
|
| 41 |
+
else:
|
| 42 |
+
idade = 1
|
| 43 |
+
|
| 44 |
+
# Filtrar por %de Vida
|
| 45 |
+
vdu = df_vida.loc[(df_vida['FINAL'] == tipologia)]
|
| 46 |
+
|
| 47 |
+
# % de vida útil
|
| 48 |
+
percentual_vdu = (idade / vdu['VIDAUTIL']) * 100
|
| 49 |
+
percentual_vdu = int(round(percentual_vdu, 0))
|
| 50 |
+
|
| 51 |
+
if percentual_vdu != 1:
|
| 52 |
+
percentual_vdu = percentual_vdu
|
| 53 |
+
else:
|
| 54 |
+
percentual_vdu = 2
|
| 55 |
+
print(percentual_vdu,"%")
|
| 56 |
+
|
| 57 |
+
# Filtrar conforme o % de vida útil
|
| 58 |
+
df_conserv = df_dep.loc[df_dep['%deVida'] == percentual_vdu]
|
| 59 |
+
|
| 60 |
+
# Converter o valor residual de string para número (float)
|
| 61 |
+
if VR and VR.strip() != "":
|
| 62 |
+
VR = float(VR)
|
| 63 |
+
else:
|
| 64 |
+
VR = 0.0
|
| 65 |
+
# Obter da depreciação
|
| 66 |
+
coef_HH = float(df_conserv[estado]/100)
|
| 67 |
+
coef_HH = round(coef_HH, 2)
|
| 68 |
+
|
| 69 |
+
# Valor do "Kd"
|
| 70 |
+
kd = VR + (1 - coef_HH) * (1 - VR)
|
| 71 |
+
kd = round(kd, 2)
|
| 72 |
+
|
| 73 |
+
# Cálculos
|
| 74 |
+
Valor_sem_deprec = area * valor_cub * percentual_cub * (1 + BDI / 100)
|
| 75 |
+
Valor_sem_deprec = round(Valor_sem_deprec, 2)
|
| 76 |
+
Valor_com_deprec = Valor_sem_deprec * kd
|
| 77 |
+
Valor_com_deprec = round(Valor_com_deprec, 2)
|
| 78 |
+
valor_imovel = (valor_terreno + Valor_com_deprec) * float(fc)
|
| 79 |
+
|
| 80 |
+
# Obter a lista de cabeçalhos (colunas)
|
| 81 |
+
cabecalhos = df_cub.columns.tolist()
|
| 82 |
+
# O último cabeçalho será o último elemento da lista
|
| 83 |
+
ultimo_cabecalho = cabecalhos[-1]
|
| 84 |
+
|
| 85 |
+
# Atributo da coluna "cons" pelo qual você deseja fazer a correspondência
|
| 86 |
+
atributo_desejado = estado
|
| 87 |
+
# Encontrar o valor da coluna "obs" com base no atributo da coluna "cons"
|
| 88 |
+
valor_obs = df_estado_cons.loc[df_estado_cons['cons'] == atributo_desejado, 'obs'].iloc[0]
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
resumo = {
|
| 92 |
+
"01":"---VALOR INICIAL CONST---",
|
| 93 |
+
"Área construída (m²)": area,
|
| 94 |
+
"Data de referência": data_refer.strftime("%m/%Y"),
|
| 95 |
+
"Data da construção": data_const_str,
|
| 96 |
+
"Data do CUB": data_cub.strftime("%m/%Y"),
|
| 97 |
+
"Tipo de CUB": tipo_cub,
|
| 98 |
+
"Percentual para adequação do CUB (%)": percentual_cub,
|
| 99 |
+
"BDI (%)": BDI,
|
| 100 |
+
"Valor CUB": round(valor_cub, 2),
|
| 101 |
+
"Valor_sem_deprec": Valor_sem_deprec,
|
| 102 |
+
"02":"--VALOR DEPRECIADO CONST--",
|
| 103 |
+
"Tipologia": tipologia,
|
| 104 |
+
"Vida útil da tipologia": int(vdu['VIDAUTIL']),
|
| 105 |
+
"Estado de conservação": estado,
|
| 106 |
+
"Estado de conservação - descrição": valor_obs,
|
| 107 |
+
"% de Vida Útil": percentual_vdu,
|
| 108 |
+
"Coeficiente de Depreciação": coef_HH,
|
| 109 |
+
"Valor residual (0, 0.1 ou 0.2)": VR,
|
| 110 |
+
"Kd": kd,
|
| 111 |
+
"Valor final const": Valor_com_deprec,
|
| 112 |
+
"03": "--VALOR DO IMÓVEL (TERRENO + CONSTRUÇÃO)--",
|
| 113 |
+
"Valor do Terreno": valor_terreno,
|
| 114 |
+
"FC (Fator de Comercialização)": fc,
|
| 115 |
+
"Valor do Imóvel": valor_imovel
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
return resumo
|
| 120 |
+
|
| 121 |
+
|
| 122 |
+
entradas = [
|
| 123 |
+
gr.inputs.Number(label="Área construída (m²)", default=100),
|
| 124 |
+
gr.inputs.Textbox(label="Data de referência (mm/aaaa)", default=ultimo_cabecalho),
|
| 125 |
+
gr.inputs.Textbox(label="Data da construção (mm/aaaa)", default=ultimo_cabecalho),
|
| 126 |
+
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)"),
|
| 127 |
+
gr.inputs.Textbox(label="Data do CUB (mm/aaaa)", default=ultimo_cabecalho),
|
| 128 |
+
gr.inputs.Number(label="Percentual para adequação do CUB (%) - (Adapatação do CUB para uma situação atípica)", default=1),
|
| 129 |
+
gr.inputs.Number(label="BDI (%)", default=22.5),
|
| 130 |
+
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"),
|
| 131 |
+
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"),
|
| 132 |
+
gr.inputs.Dropdown(label="Valor residual (0, 0.1 ou 0.2)", choices=["0", "0.1", "0.2"], default="0"),
|
| 133 |
+
gr.inputs.Number(label="Valor do Terreno", default=0),
|
| 134 |
+
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")
|
| 135 |
+
]
|
| 136 |
+
|
| 137 |
+
saida = gr.outputs.JSON()
|
| 138 |
+
|
| 139 |
+
interface = gr.Interface(fn=calcular_valor_imovel, inputs=entradas, outputs=saida, title="Método Evolutivo (NBR 14653-2)" )
|
| 140 |
+
interface.launch()
|