DavidSB commited on
Commit
c42059e
·
1 Parent(s): fce6878

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +140 -0
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()