Spaces:
Sleeping
Sleeping
File size: 10,314 Bytes
c42059e ab42b12 ab9c2d7 0109644 c42059e 8add0d9 c42059e 8add0d9 c42059e ab9c2d7 c42059e ab9c2d7 c42059e ad82f17 c42059e ab9c2d7 9e60391 ab9c2d7 0109644 ab9c2d7 0109644 ab9c2d7 c42059e ab9c2d7 0109644 ab9c2d7 0109644 ab9c2d7 c42059e ab9c2d7 9e60391 ab9c2d7 52ec269 ab9c2d7 c42059e ab9c2d7 c42059e 36d058f cffed16 12994fc ea5d367 36d058f ab9c2d7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# 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
entradas = [
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="-"),
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=""),
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="Tipo de BDI", info="Estipule como foi elaborado o % de BDI"),
]
saida = [
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")
]
interface = gr.Interface(fn=calcular_valor_imovel, inputs=entradas, outputs=saida, title="<span style='color: gray; font-size: 52px;'>aval</span><span style='color: black; font-size: 52px;'>ia</span><span style='color: gray; font-size: 56px;'>.EVO</span>",
description=f"""
<p style="text-align: left;"><b><span style='color: gray; font-size: 40px;'>aval</span><span style='color: black; font-size: 40px;'>ia</span><span style='color: gray; font-size: 40px;'>.se</b></p>
""",
theme=gr.themes.Monochrome()
)
interface.launch() |