Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -6,49 +6,18 @@ import gradio as gr
|
|
| 6 |
from gradio import components
|
| 7 |
from gradio import Interface
|
| 8 |
import xlsxwriter
|
| 9 |
-
from reportlab.lib.units import inch
|
| 10 |
-
from reportlab.lib.pagesizes import letter
|
| 11 |
-
from reportlab.platypus import SimpleDocTemplate, Spacer, Image, Frame, PageTemplate, BaseDocTemplate, Table, Paragraph, NextPageTemplate, PageBreak
|
| 12 |
-
from reportlab.lib.styles import getSampleStyleSheet
|
| 13 |
import shutil
|
| 14 |
import os
|
| 15 |
import plotly.express as px
|
| 16 |
import ast
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
#-----------------#
|
| 19 |
-
|
| 20 |
-
#função para relatórios em pdf
|
| 21 |
-
def save_results_to_pdf(results_formatados, intervalo_confiança, valores_finais, image):
|
| 22 |
-
doc = SimpleDocTemplate("resultados.pdf", pagesize=letter)
|
| 23 |
-
styles = getSampleStyleSheet()
|
| 24 |
-
story = [
|
| 25 |
-
Image('avaliase.jpg', width=3.33 * inch, height=1.28 * inch),
|
| 26 |
-
Spacer(1, 36),
|
| 27 |
-
Paragraph('Relatório', styles['Heading1']),
|
| 28 |
-
Spacer(1, 36),
|
| 29 |
-
Paragraph('Resultados Estatísticos', styles['Heading2'])]
|
| 30 |
-
|
| 31 |
-
lines = results_formatados.splitlines()
|
| 32 |
-
# Create a paragraph for each line
|
| 33 |
-
for line in lines:
|
| 34 |
-
story.append(Paragraph(line, styles['Normal']))
|
| 35 |
-
story.append(Spacer(1, 36))
|
| 36 |
-
story.append(Paragraph('Intervalo de Confiança', styles['Heading2']))
|
| 37 |
-
lines = intervalo_confiança.splitlines()
|
| 38 |
-
for line in lines:
|
| 39 |
-
story.append(Paragraph(line, styles['Normal']))
|
| 40 |
-
story.append(Spacer(1, 36))
|
| 41 |
-
story.append(Paragraph('Valores Finais', styles['Heading2']))
|
| 42 |
-
lines = valores_finais.splitlines()
|
| 43 |
-
for line in lines:
|
| 44 |
-
story.append(Paragraph(line, styles['Normal']))
|
| 45 |
-
story.append(Spacer(1, 36))
|
| 46 |
-
story.append(Image('scatter_plot.png', width=4 * inch, height=4 * inch))
|
| 47 |
-
|
| 48 |
-
doc.build(story)
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
#-----------------#
|
| 52 |
|
| 53 |
#função para criar um mapa no plotly
|
| 54 |
def plotar_mapa_com_dois_dataframes(df1, df2):
|
|
@@ -79,12 +48,15 @@ def plotar_mapa_com_dois_dataframes(df1, df2):
|
|
| 79 |
)
|
| 80 |
# Mostrar o mapa
|
| 81 |
fig1.show()
|
|
|
|
|
|
|
|
|
|
| 82 |
|
| 83 |
-
return fig1
|
| 84 |
|
| 85 |
#-----------------#
|
| 86 |
|
| 87 |
-
|
| 88 |
def grafico_barras(data):
|
| 89 |
# Calcular a média da coluna 'Vunit_hom'
|
| 90 |
media = data['Vunit_hom'].mean()
|
|
@@ -113,12 +85,15 @@ def grafico_barras(data):
|
|
| 113 |
|
| 114 |
#-----------------#
|
| 115 |
|
| 116 |
-
|
| 117 |
-
# Função de avaliação do imóvel
|
| 118 |
def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo de imovel',
|
| 119 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
|
| 121 |
-
|
|
|
|
| 122 |
|
| 123 |
# Lendo a aba 'avaliando' da planilha
|
| 124 |
df_avaliando = pd.read_excel(planilha.name, 'avaliando')
|
|
@@ -133,7 +108,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 133 |
# Excluindo a coluna 'Coordenadas' se você não precisar dela mais
|
| 134 |
df_avaliando = df_avaliando.drop('Coordenadas', axis=1)
|
| 135 |
|
| 136 |
-
|
| 137 |
|
| 138 |
# Lendo a aba 'dados' da planilha, limitando o número de linhas
|
| 139 |
df_dados = pd.read_excel(planilha.name, 'dados').iloc[:int(num_linhas_desejadas)]
|
|
@@ -145,11 +120,10 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 145 |
df_dados['lat'] = df_dados['Coordenadas'].apply(lambda x: round(x[0], 5) if not pd.isna(x) else np.nan)
|
| 146 |
df_dados['lon'] = df_dados['Coordenadas'].apply(lambda x: round(x[1], 5) if not pd.isna(x) else np.nan)
|
| 147 |
|
| 148 |
-
# Excluindo a coluna 'Coordenadas'
|
| 149 |
df_dados = df_dados.drop('Coordenadas', axis=1)
|
| 150 |
|
| 151 |
-
|
| 152 |
-
|
| 153 |
|
| 154 |
# fator de atratividade local (fal)
|
| 155 |
df_transp = df_dados.copy()
|
|
@@ -163,8 +137,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 163 |
|
| 164 |
df_transp = df_transp[['fal']]
|
| 165 |
|
| 166 |
-
|
| 167 |
-
#-----------------#
|
| 168 |
|
| 169 |
# fator de correção da área construída (fac)
|
| 170 |
df_area_const = df_dados.copy()
|
|
@@ -184,8 +157,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 184 |
|
| 185 |
df_area_const = df_area_const[['fac']]
|
| 186 |
|
| 187 |
-
|
| 188 |
-
#-----------------#
|
| 189 |
|
| 190 |
# fator de correção da área do terreno (fat)
|
| 191 |
df_area_terreno = df_dados.copy()
|
|
@@ -205,8 +177,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 205 |
|
| 206 |
df_area_terreno = df_area_terreno[['fat']]
|
| 207 |
|
| 208 |
-
|
| 209 |
-
#-----------------#
|
| 210 |
|
| 211 |
# fator profundidade (fpe)
|
| 212 |
# Define a função coeficiente_profundidade antes de criar os DataFrames
|
|
@@ -248,7 +219,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 248 |
df_profundidade['fpe'] = round(df_profundidade_aval['coef_pe'][0]/df_profundidade['coef_pe'],2)
|
| 249 |
df_profundidade = df_profundidade[['fpe']]
|
| 250 |
|
| 251 |
-
|
| 252 |
|
| 253 |
# fator topografia (ftp)
|
| 254 |
# dicionário topografia
|
|
@@ -277,8 +248,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 277 |
df_topografia['ftp'] = round(df_topografia_aval['coef_tp'][0]/df_topografia['coef_tp'],2)
|
| 278 |
df_topografia = df_topografia[['ftp']]
|
| 279 |
|
| 280 |
-
|
| 281 |
-
|
| 282 |
|
| 283 |
# fator relevo (frv)
|
| 284 |
# dicionário relevo
|
|
@@ -305,7 +275,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 305 |
df_relevo['frv'] = round(df_relevo_aval['coef_rv'][0]/df_relevo['coef_rv'],2)
|
| 306 |
df_relevo = df_relevo[['frv']]
|
| 307 |
|
| 308 |
-
|
| 309 |
|
| 310 |
# fator superfície (fsp)
|
| 311 |
# dicionário superfície
|
|
@@ -333,7 +303,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 333 |
df_superficie['fsp'] = round(df_superficie_aval['coef_sp'][0]/df_superficie['coef_sp'],2)
|
| 334 |
df_superficie = df_superficie[['fsp']]
|
| 335 |
|
| 336 |
-
|
| 337 |
|
| 338 |
# fator aproveitamento (fap)
|
| 339 |
# dicionário aproveitamento
|
|
@@ -360,7 +330,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 360 |
df_aproveitamento['fap'] = round(df_aproveitamento_aval['coef_ap'][0]/df_aproveitamento['coef_ap'],2)
|
| 361 |
df_aproveitamento = df_aproveitamento[['fap']]
|
| 362 |
|
| 363 |
-
|
| 364 |
|
| 365 |
# fator acessibilidade viária (fav)
|
| 366 |
# dicionário acessibilidade
|
|
@@ -390,8 +360,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 390 |
df_acesso['fav'] = round(df_acesso_aval['coef_av'][0]/df_acesso['coef_av'],2)
|
| 391 |
df_acesso = df_acesso[['fav']]
|
| 392 |
|
| 393 |
-
|
| 394 |
-
|
| 395 |
|
| 396 |
# fator idade aparente e conservação (fic)
|
| 397 |
# dicionário padrão construtivo
|
|
@@ -434,7 +403,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 434 |
df_idade_cons['fic'] = round(df_idade_cons_aval['coef_ic'][0] / df_idade_cons['coef_ic'],2)
|
| 435 |
df_idade_cons = df_idade_cons[['fic']]
|
| 436 |
|
| 437 |
-
|
| 438 |
|
| 439 |
# fator padrão construtivo (fpd)
|
| 440 |
# dicionário padrão construtivo
|
|
@@ -467,7 +436,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 467 |
df_padrao['fpd'] = round(df_padrao_aval['coef_pd'][0]/df_padrao['coef_pd'],2)
|
| 468 |
df_padrao = df_padrao[['fpd']]
|
| 469 |
|
| 470 |
-
|
| 471 |
|
| 472 |
# fator vagas de estacionamento (fvg)
|
| 473 |
df_vaga = df_dados[['Vagas']].copy()
|
|
@@ -484,7 +453,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 484 |
df_vaga['fvg'] = round(df_vaga.apply(lambda row: calculate_fcg(row['dif'], row['Vagas']), axis=1), 2)
|
| 485 |
df_vaga = df_vaga[['fvg']]
|
| 486 |
|
| 487 |
-
|
| 488 |
|
| 489 |
# fator extra (à critério do avaliador) (fex)
|
| 490 |
df_exc = df_dados.copy()
|
|
@@ -498,11 +467,9 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 498 |
|
| 499 |
df_exc = df_exc[['fex']]
|
| 500 |
|
| 501 |
-
|
| 502 |
-
|
| 503 |
-
|
| 504 |
|
| 505 |
-
|
| 506 |
result = pd.concat([df_dados, df_transp, df_area_const, df_area_terreno, df_profundidade, df_topografia, df_relevo,
|
| 507 |
df_superficie,df_aproveitamento, df_acesso, df_idade_cons, df_padrao, df_vaga, df_exc], axis=1)
|
| 508 |
result['Valor_desc'] = round(result['Valor']*(result['fof']), 2)
|
|
@@ -518,16 +485,6 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 518 |
'Coeficiente extra', 'Valor', 'fof','Valor_desc', 'Vunit','fal', 'fac', 'fat','fpe', 'ftp','frv','fsp',
|
| 519 |
'fap','fav', 'fic','fpd', 'fvg', 'fex']]
|
| 520 |
|
| 521 |
-
#if finalidade == "Tipologias com área construída":
|
| 522 |
-
|
| 523 |
-
#result = result[['lat','lon','Atratividade local', 'Área Construída', 'Área Terreno',
|
| 524 |
-
#'Idade aparente e conservação', 'Padrão construtivo', 'Vagas','Coeficiente extra', 'Valor',
|
| 525 |
-
#'fof','Valor_desc', 'Vunit','fal', 'fac', 'fat', 'fic','fpd', 'fvg', 'fex']]
|
| 526 |
-
#else:
|
| 527 |
-
|
| 528 |
-
#result = result[['lat','lon','Atratividade local', 'Área Terreno', 'Testada', 'Topografia', 'Superfície',
|
| 529 |
-
#'Coeficiente extra', 'Valor', 'fof','Valor_desc','Vunit','fal', 'fat','fpe', 'ftp','fsp', 'fex']]
|
| 530 |
-
|
| 531 |
|
| 532 |
result['Vunit_hom'] = round(result['Vunit'] * result['fal'] * \
|
| 533 |
result['fac'] * \
|
|
@@ -543,26 +500,8 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 543 |
result['fvg'] * \
|
| 544 |
result['fex'], 2)
|
| 545 |
|
| 546 |
-
|
| 547 |
-
#if finalidade == "Tipologias com área construída":
|
| 548 |
-
#result['Vunit_hom'] = round(result['Vunit'] * result['fal'] * \
|
| 549 |
-
#result['fac'] * \
|
| 550 |
-
#result['fat'] * \
|
| 551 |
-
#result['fic'] * \
|
| 552 |
-
#result['fpd'] * \
|
| 553 |
-
#result['fvg'] * \
|
| 554 |
-
#result['fex'], 2)
|
| 555 |
-
|
| 556 |
-
#else:
|
| 557 |
-
#result['Vunit_hom'] = round(result['Vunit'] * result['fal'] * \
|
| 558 |
-
#result['fat'] * \
|
| 559 |
-
#result['fpe'] * \
|
| 560 |
-
#result['ftp'] * \
|
| 561 |
-
#result['fsp'] * \
|
| 562 |
-
#result['fex'], 2)
|
| 563 |
-
#-----------------#
|
| 564 |
|
| 565 |
-
|
| 566 |
# RESULTADOS ESTATÍSTICOS INICIAIS
|
| 567 |
num = len(result)
|
| 568 |
media = round(result['Vunit_hom'].mean(), 2)
|
|
@@ -594,11 +533,10 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 594 |
# REMOÇÃO DE OUTLIERS PELO CRITÉRIO DE CHAUVENET
|
| 595 |
result = result[result['Status'] != 'rejeitado']
|
| 596 |
|
| 597 |
-
#
|
| 598 |
df_grafico = result.copy()
|
| 599 |
|
| 600 |
# GRAU DE FUNDAMENTAÇÃO
|
| 601 |
-
|
| 602 |
# item_1 - Graus de Fundamentação (Caracterização do imóvel avaliando)
|
| 603 |
if caract_avaliando == "Completa quanto a todos os fatores analisados":
|
| 604 |
item_1 = 3
|
|
@@ -625,7 +563,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 625 |
else:
|
| 626 |
item_3 = 1
|
| 627 |
|
| 628 |
-
# item_4 - Graus de Fundamentação (
|
| 629 |
max = result.iloc[:, 21:34].max().max()
|
| 630 |
min = result.iloc[:, 21:34].min().min()
|
| 631 |
if num >= 5:
|
|
@@ -737,7 +675,6 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 737 |
|
| 738 |
media_pond = round((pC1 + pC2 + pC3) / divisor, 2)
|
| 739 |
|
| 740 |
-
|
| 741 |
# VALORES CALCULADOS
|
| 742 |
|
| 743 |
if finalidade == "Tipologias com área construída":
|
|
@@ -775,7 +712,58 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 775 |
"""
|
| 776 |
#-----------------#
|
| 777 |
|
| 778 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 779 |
|
| 780 |
# Crie um objeto ExcelWriter para escrever no arquivo Excel
|
| 781 |
nome_com_extensao = os.path.basename(planilha.name)
|
|
@@ -789,22 +777,22 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 789 |
# Salve o DataFrame 'avaliando' na planilha 'relatório'
|
| 790 |
df_avaliando.to_excel(writer, sheet_name='avaliando', index=False)
|
| 791 |
|
| 792 |
-
|
| 793 |
|
| 794 |
# Salve o DataFrame 'result' na planilha 'relatório'
|
| 795 |
df_dados.to_excel(writer, sheet_name='dados', index=False)
|
| 796 |
|
| 797 |
-
|
| 798 |
|
| 799 |
# Salve o DataFrame 'dado_hom' na planilha 'relatório'
|
| 800 |
result.to_excel(writer, sheet_name='dados_hom', index=False)
|
| 801 |
|
| 802 |
-
|
| 803 |
|
| 804 |
# Salve o DataFrame 'outliers' na planilha 'relatório'
|
| 805 |
outliers.to_excel(writer, sheet_name='outliers', index=False)
|
| 806 |
|
| 807 |
-
|
| 808 |
|
| 809 |
# Crie um novo DataFrame com os resultados estatísticos
|
| 810 |
result_estatisticos = pd.DataFrame({
|
|
@@ -827,7 +815,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 827 |
result_estatisticos.columns = ['Nome da Coluna', 'Valor']
|
| 828 |
result_estatisticos.to_excel(writer, sheet_name='resultados', index=False)
|
| 829 |
|
| 830 |
-
|
| 831 |
|
| 832 |
# Crie um novo DataFrame com os resultados do IC
|
| 833 |
result_ic = pd.DataFrame({
|
|
@@ -847,7 +835,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 847 |
result_ic.columns = ['Nome da Coluna', 'Valor']
|
| 848 |
result_ic.to_excel(writer, sheet_name='IC', index=False)
|
| 849 |
|
| 850 |
-
|
| 851 |
|
| 852 |
# Crie um novo DataFrame com os resultados do cálculo das classes de Abunahman
|
| 853 |
result_classes = pd.DataFrame({
|
|
@@ -876,7 +864,7 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 876 |
result_classes.columns = ['Nome da Coluna', 'Valor']
|
| 877 |
result_classes.to_excel(writer, sheet_name='classes', index=False)
|
| 878 |
|
| 879 |
-
|
| 880 |
|
| 881 |
# Crie um novo DataFrame com os resultados do valor do imóvel
|
| 882 |
result_valores = pd.DataFrame({
|
|
@@ -896,42 +884,109 @@ def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo
|
|
| 896 |
result_valores.columns = ['Nome da Coluna', 'Valor']
|
| 897 |
result_valores.to_excel(writer, sheet_name='valor', index=False)
|
| 898 |
|
| 899 |
-
|
| 900 |
|
| 901 |
mapa = plotar_mapa_com_dois_dataframes(result, df_avaliando)
|
| 902 |
-
|
| 903 |
|
| 904 |
-
|
| 905 |
|
| 906 |
-
# para gerar um gráfico
|
| 907 |
-
#scatter_plot_with_percent_labels(df_grafico)
|
| 908 |
grafico_barras(df_grafico)
|
| 909 |
|
| 910 |
-
|
| 911 |
-
#-----------------#
|
| 912 |
|
| 913 |
# Salve o DataFrame 'result' em uma planilha
|
| 914 |
result.to_excel(output_file, index=False)
|
| 915 |
-
|
| 916 |
-
#-----------------#
|
| 917 |
-
|
| 918 |
-
save_results_to_pdf(resultados_formatados, intervalo_confiança, valores_finais, 'scatter_plot.png')
|
| 919 |
-
result.to_excel(output_file, index=False)
|
| 920 |
|
| 921 |
-
|
| 922 |
-
|
| 923 |
-
#
|
| 924 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 925 |
|
| 926 |
-
|
|
|
|
|
|
|
| 927 |
interface = gr.Interface(
|
| 928 |
fn=avaliacao_imovel,
|
| 929 |
inputs=[
|
|
|
|
|
|
|
| 930 |
gr.components.File(label="Upload planilha", type="file", info="Importação de planilha padrão com o avaliando e os dados"),
|
| 931 |
-
#gr.components.Number(label="Número de linhas desejadas", default=10),
|
| 932 |
gr.Slider(3, 26, value=26, label="Número de dados", info="Escolha o número de dados", step=1),
|
| 933 |
-
#gr.components.Dropdown(label="Tipo de imóvel", choices=["Terrenos e glebas","Tipologias com área construída"], default="Tipologias com área construída"),
|
| 934 |
gr.Radio(["Terrenos e glebas", "Tipologias com área construída"], label="Tipo de Imóvel", info="Escolha o tipo de imóvel"),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 935 |
gr.Radio(["Completa p/ todos fatores analisados", "Completa p/ os fatores utilizados", "Situação paradigma"],
|
| 936 |
label="Caracterização do avaliando", info="Para enquadramento quanto a fundamentação - ítem 1 da tabela 6 do anexo 2 - NBR 14.653-2"),
|
| 937 |
gr.Radio(["Apresentação de informações relativas a todas as características dos dados analisados, com foto e características observadas pelo autor do laudo",
|
|
@@ -941,14 +996,19 @@ interface = gr.Interface(
|
|
| 941 |
)
|
| 942 |
],
|
| 943 |
outputs=[
|
| 944 |
-
gr.
|
| 945 |
-
gr.
|
|
|
|
|
|
|
|
|
|
| 946 |
gr.Dataframe(label="Dados homogeneizados"),
|
| 947 |
gr.components.Textbox(label="Resultados estatísticos"),
|
| 948 |
gr.components.Textbox(label="Intervalo de confiança de 80%"),
|
| 949 |
gr.components.Textbox(label="Valores Calculados"),
|
| 950 |
gr.Plot(label="Geolocalização da amostra"),
|
| 951 |
gr.Image(label="Gráfico"),
|
|
|
|
|
|
|
| 952 |
|
| 953 |
],
|
| 954 |
live=False,
|
|
|
|
| 6 |
from gradio import components
|
| 7 |
from gradio import Interface
|
| 8 |
import xlsxwriter
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
import shutil
|
| 10 |
import os
|
| 11 |
import plotly.express as px
|
| 12 |
import ast
|
| 13 |
+
from docx import Document
|
| 14 |
+
from docx.shared import Pt
|
| 15 |
+
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
|
| 16 |
+
from docx.shared import Inches
|
| 17 |
+
import plotly.io as pio
|
| 18 |
+
from pandas.plotting import table
|
| 19 |
|
| 20 |
#-----------------#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
#função para criar um mapa no plotly
|
| 23 |
def plotar_mapa_com_dois_dataframes(df1, df2):
|
|
|
|
| 48 |
)
|
| 49 |
# Mostrar o mapa
|
| 50 |
fig1.show()
|
| 51 |
+
|
| 52 |
+
#Salvar a figura como um arquivo PNG
|
| 53 |
+
pio.write_image(fig1, 'fig2.png')
|
| 54 |
|
| 55 |
+
return fig1 #, fig2
|
| 56 |
|
| 57 |
#-----------------#
|
| 58 |
|
| 59 |
+
#função para criação de um gráfio
|
| 60 |
def grafico_barras(data):
|
| 61 |
# Calcular a média da coluna 'Vunit_hom'
|
| 62 |
media = data['Vunit_hom'].mean()
|
|
|
|
| 85 |
|
| 86 |
#-----------------#
|
| 87 |
|
|
|
|
|
|
|
| 88 |
def avaliacao_imovel(planilha, num_linhas_desejadas=3, finalidade='Defina o tipo de imovel',
|
| 89 |
+
nome="-", prof="Engenheiro Civil", ent="CREA", reg="-",
|
| 90 |
+
lograd="-", munic="-", tipo_imo="-", solic="-", final_espec="-", objetivo="-", press="-",
|
| 91 |
+
infra="Água Potável", serv="Coleta de Lixo", uso="Residencial", pad_reg="-", tipo_via="-", obs_gerais="-",
|
| 92 |
+
per="Sem destaque", ofe="Sem destaque", liq="Sem destaque",
|
| 93 |
+
caract_avaliando='Defina o item 1 de Fundamentação', ident_dados='Defina o item 3 de Fundamentação'):
|
| 94 |
|
| 95 |
+
|
| 96 |
+
#-------------------------------------------------INPUT AVALIANDO-------------------------------------------------------#
|
| 97 |
|
| 98 |
# Lendo a aba 'avaliando' da planilha
|
| 99 |
df_avaliando = pd.read_excel(planilha.name, 'avaliando')
|
|
|
|
| 108 |
# Excluindo a coluna 'Coordenadas' se você não precisar dela mais
|
| 109 |
df_avaliando = df_avaliando.drop('Coordenadas', axis=1)
|
| 110 |
|
| 111 |
+
#--------------------------------------------------INPUT DAODS----------------------------------------------------------#
|
| 112 |
|
| 113 |
# Lendo a aba 'dados' da planilha, limitando o número de linhas
|
| 114 |
df_dados = pd.read_excel(planilha.name, 'dados').iloc[:int(num_linhas_desejadas)]
|
|
|
|
| 120 |
df_dados['lat'] = df_dados['Coordenadas'].apply(lambda x: round(x[0], 5) if not pd.isna(x) else np.nan)
|
| 121 |
df_dados['lon'] = df_dados['Coordenadas'].apply(lambda x: round(x[1], 5) if not pd.isna(x) else np.nan)
|
| 122 |
|
| 123 |
+
# Excluindo a coluna 'Coordenadas'
|
| 124 |
df_dados = df_dados.drop('Coordenadas', axis=1)
|
| 125 |
|
| 126 |
+
#-----------------------------------------------------FATORES-----------------------------------------------------------#
|
|
|
|
| 127 |
|
| 128 |
# fator de atratividade local (fal)
|
| 129 |
df_transp = df_dados.copy()
|
|
|
|
| 137 |
|
| 138 |
df_transp = df_transp[['fal']]
|
| 139 |
|
| 140 |
+
#-----------------#
|
|
|
|
| 141 |
|
| 142 |
# fator de correção da área construída (fac)
|
| 143 |
df_area_const = df_dados.copy()
|
|
|
|
| 157 |
|
| 158 |
df_area_const = df_area_const[['fac']]
|
| 159 |
|
| 160 |
+
#-----------------#
|
|
|
|
| 161 |
|
| 162 |
# fator de correção da área do terreno (fat)
|
| 163 |
df_area_terreno = df_dados.copy()
|
|
|
|
| 177 |
|
| 178 |
df_area_terreno = df_area_terreno[['fat']]
|
| 179 |
|
| 180 |
+
#-----------------#
|
|
|
|
| 181 |
|
| 182 |
# fator profundidade (fpe)
|
| 183 |
# Define a função coeficiente_profundidade antes de criar os DataFrames
|
|
|
|
| 219 |
df_profundidade['fpe'] = round(df_profundidade_aval['coef_pe'][0]/df_profundidade['coef_pe'],2)
|
| 220 |
df_profundidade = df_profundidade[['fpe']]
|
| 221 |
|
| 222 |
+
#-----------------#
|
| 223 |
|
| 224 |
# fator topografia (ftp)
|
| 225 |
# dicionário topografia
|
|
|
|
| 248 |
df_topografia['ftp'] = round(df_topografia_aval['coef_tp'][0]/df_topografia['coef_tp'],2)
|
| 249 |
df_topografia = df_topografia[['ftp']]
|
| 250 |
|
| 251 |
+
#-----------------#
|
|
|
|
| 252 |
|
| 253 |
# fator relevo (frv)
|
| 254 |
# dicionário relevo
|
|
|
|
| 275 |
df_relevo['frv'] = round(df_relevo_aval['coef_rv'][0]/df_relevo['coef_rv'],2)
|
| 276 |
df_relevo = df_relevo[['frv']]
|
| 277 |
|
| 278 |
+
#-----------------#
|
| 279 |
|
| 280 |
# fator superfície (fsp)
|
| 281 |
# dicionário superfície
|
|
|
|
| 303 |
df_superficie['fsp'] = round(df_superficie_aval['coef_sp'][0]/df_superficie['coef_sp'],2)
|
| 304 |
df_superficie = df_superficie[['fsp']]
|
| 305 |
|
| 306 |
+
#-----------------#
|
| 307 |
|
| 308 |
# fator aproveitamento (fap)
|
| 309 |
# dicionário aproveitamento
|
|
|
|
| 330 |
df_aproveitamento['fap'] = round(df_aproveitamento_aval['coef_ap'][0]/df_aproveitamento['coef_ap'],2)
|
| 331 |
df_aproveitamento = df_aproveitamento[['fap']]
|
| 332 |
|
| 333 |
+
#-----------------#
|
| 334 |
|
| 335 |
# fator acessibilidade viária (fav)
|
| 336 |
# dicionário acessibilidade
|
|
|
|
| 360 |
df_acesso['fav'] = round(df_acesso_aval['coef_av'][0]/df_acesso['coef_av'],2)
|
| 361 |
df_acesso = df_acesso[['fav']]
|
| 362 |
|
| 363 |
+
#-----------------#
|
|
|
|
| 364 |
|
| 365 |
# fator idade aparente e conservação (fic)
|
| 366 |
# dicionário padrão construtivo
|
|
|
|
| 403 |
df_idade_cons['fic'] = round(df_idade_cons_aval['coef_ic'][0] / df_idade_cons['coef_ic'],2)
|
| 404 |
df_idade_cons = df_idade_cons[['fic']]
|
| 405 |
|
| 406 |
+
#-----------------#
|
| 407 |
|
| 408 |
# fator padrão construtivo (fpd)
|
| 409 |
# dicionário padrão construtivo
|
|
|
|
| 436 |
df_padrao['fpd'] = round(df_padrao_aval['coef_pd'][0]/df_padrao['coef_pd'],2)
|
| 437 |
df_padrao = df_padrao[['fpd']]
|
| 438 |
|
| 439 |
+
#-----------------#
|
| 440 |
|
| 441 |
# fator vagas de estacionamento (fvg)
|
| 442 |
df_vaga = df_dados[['Vagas']].copy()
|
|
|
|
| 453 |
df_vaga['fvg'] = round(df_vaga.apply(lambda row: calculate_fcg(row['dif'], row['Vagas']), axis=1), 2)
|
| 454 |
df_vaga = df_vaga[['fvg']]
|
| 455 |
|
| 456 |
+
#-----------------#
|
| 457 |
|
| 458 |
# fator extra (à critério do avaliador) (fex)
|
| 459 |
df_exc = df_dados.copy()
|
|
|
|
| 467 |
|
| 468 |
df_exc = df_exc[['fex']]
|
| 469 |
|
| 470 |
+
#-----------------#
|
|
|
|
|
|
|
| 471 |
|
| 472 |
+
# concatemando o dataframe principal com as dataframes dos fatores
|
| 473 |
result = pd.concat([df_dados, df_transp, df_area_const, df_area_terreno, df_profundidade, df_topografia, df_relevo,
|
| 474 |
df_superficie,df_aproveitamento, df_acesso, df_idade_cons, df_padrao, df_vaga, df_exc], axis=1)
|
| 475 |
result['Valor_desc'] = round(result['Valor']*(result['fof']), 2)
|
|
|
|
| 485 |
'Coeficiente extra', 'Valor', 'fof','Valor_desc', 'Vunit','fal', 'fac', 'fat','fpe', 'ftp','frv','fsp',
|
| 486 |
'fap','fav', 'fic','fpd', 'fvg', 'fex']]
|
| 487 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 488 |
|
| 489 |
result['Vunit_hom'] = round(result['Vunit'] * result['fal'] * \
|
| 490 |
result['fac'] * \
|
|
|
|
| 500 |
result['fvg'] * \
|
| 501 |
result['fex'], 2)
|
| 502 |
|
| 503 |
+
#-----------------------------------------------------RESULTADOS---------------------------------------------------------#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 504 |
|
|
|
|
| 505 |
# RESULTADOS ESTATÍSTICOS INICIAIS
|
| 506 |
num = len(result)
|
| 507 |
media = round(result['Vunit_hom'].mean(), 2)
|
|
|
|
| 533 |
# REMOÇÃO DE OUTLIERS PELO CRITÉRIO DE CHAUVENET
|
| 534 |
result = result[result['Status'] != 'rejeitado']
|
| 535 |
|
| 536 |
+
# CÓPIA DO DATAFRAME ORIGINAL PARA PLOTAGEM NA INTERFACE
|
| 537 |
df_grafico = result.copy()
|
| 538 |
|
| 539 |
# GRAU DE FUNDAMENTAÇÃO
|
|
|
|
| 540 |
# item_1 - Graus de Fundamentação (Caracterização do imóvel avaliando)
|
| 541 |
if caract_avaliando == "Completa quanto a todos os fatores analisados":
|
| 542 |
item_1 = 3
|
|
|
|
| 563 |
else:
|
| 564 |
item_3 = 1
|
| 565 |
|
| 566 |
+
# item_4 - Graus de Fundamentação (Intervalo admissível de ajuste para o conjunto de fatores)
|
| 567 |
max = result.iloc[:, 21:34].max().max()
|
| 568 |
min = result.iloc[:, 21:34].min().min()
|
| 569 |
if num >= 5:
|
|
|
|
| 675 |
|
| 676 |
media_pond = round((pC1 + pC2 + pC3) / divisor, 2)
|
| 677 |
|
|
|
|
| 678 |
# VALORES CALCULADOS
|
| 679 |
|
| 680 |
if finalidade == "Tipologias com área construída":
|
|
|
|
| 712 |
"""
|
| 713 |
#-----------------#
|
| 714 |
|
| 715 |
+
# criação de strings p/ relatórios (interface/word) dos campos do responsável, introdução, região, diagnóstico e avalaliando.
|
| 716 |
+
dados_resp = f"""
|
| 717 |
+
Responsável Técnico: {nome}
|
| 718 |
+
Profissão: {prof}
|
| 719 |
+
Entidade de Classe: {ent}
|
| 720 |
+
Número do registro: {reg}
|
| 721 |
+
"""
|
| 722 |
+
introd = f"""
|
| 723 |
+
Logradouro e número: {lograd}
|
| 724 |
+
Município: {munic}
|
| 725 |
+
Tipo de imóvel: {tipo_imo}
|
| 726 |
+
Solicitante: {solic}
|
| 727 |
+
Finalidade: {final_espec}
|
| 728 |
+
Objetivo: {objetivo}
|
| 729 |
+
Pressupostos, Ressalvas e Fatores Limitantes: {press}
|
| 730 |
+
"""
|
| 731 |
+
aval_infos = f"""
|
| 732 |
+
Latitude: {df_avaliando['lat'].iloc[0]}
|
| 733 |
+
Longitude: {df_avaliando['lon'].iloc[0]}
|
| 734 |
+
Atratividade local: {df_avaliando['Atratividade local'].iloc[0]}
|
| 735 |
+
Área Construída: {df_avaliando['Área Construída'].iloc[0]}
|
| 736 |
+
Área Terreno: {df_avaliando['Área Terreno'].iloc[0]}
|
| 737 |
+
Testada: {df_avaliando['Testada'].iloc[0]}
|
| 738 |
+
Topografia: {df_avaliando['Topografia'].iloc[0]}
|
| 739 |
+
Relevo: {df_avaliando['Relevo'].iloc[0]}
|
| 740 |
+
Superfície: {df_avaliando['Superfície'].iloc[0]}
|
| 741 |
+
Aproveitamento: {df_avaliando['Aproveitamento'].iloc[0]}
|
| 742 |
+
Acessibilidade: {df_avaliando['Acessibilidade'].iloc[0]}
|
| 743 |
+
Idade aparente e conservação: {df_avaliando['Idade aparente e conservação'].iloc[0]}
|
| 744 |
+
Padrão construtivo: {df_avaliando['Padrão construtivo'].iloc[0]}
|
| 745 |
+
Vagas: {df_avaliando['Vagas'].iloc[0]}
|
| 746 |
+
Coeficiente extra: {df_avaliando['Coeficiente extra'].iloc[0]}
|
| 747 |
+
"""
|
| 748 |
+
regiao = f"""
|
| 749 |
+
Infraestrutura: {infra}
|
| 750 |
+
Serviços públicos: {serv}
|
| 751 |
+
Uso: {uso}
|
| 752 |
+
Padrão predominante na região: {pad_reg}
|
| 753 |
+
Tipo de via de acesso: {tipo_via}
|
| 754 |
+
Outras observações: {obs_gerais}
|
| 755 |
+
"""
|
| 756 |
+
diag = f"""
|
| 757 |
+
Performance: {per}
|
| 758 |
+
Nível de Ofertas do Segmento: {ofe}
|
| 759 |
+
Liquidez: {liq}
|
| 760 |
+
"""
|
| 761 |
+
assinatura = f"""
|
| 762 |
+
{nome} | {prof}
|
| 763 |
+
{ent}{reg}
|
| 764 |
+
"""
|
| 765 |
+
|
| 766 |
+
#-------------------------------------------------------ANEXO EXCEL----------------------------------------------------#
|
| 767 |
|
| 768 |
# Crie um objeto ExcelWriter para escrever no arquivo Excel
|
| 769 |
nome_com_extensao = os.path.basename(planilha.name)
|
|
|
|
| 777 |
# Salve o DataFrame 'avaliando' na planilha 'relatório'
|
| 778 |
df_avaliando.to_excel(writer, sheet_name='avaliando', index=False)
|
| 779 |
|
| 780 |
+
#-----------------#
|
| 781 |
|
| 782 |
# Salve o DataFrame 'result' na planilha 'relatório'
|
| 783 |
df_dados.to_excel(writer, sheet_name='dados', index=False)
|
| 784 |
|
| 785 |
+
#-----------------#
|
| 786 |
|
| 787 |
# Salve o DataFrame 'dado_hom' na planilha 'relatório'
|
| 788 |
result.to_excel(writer, sheet_name='dados_hom', index=False)
|
| 789 |
|
| 790 |
+
#-----------------#
|
| 791 |
|
| 792 |
# Salve o DataFrame 'outliers' na planilha 'relatório'
|
| 793 |
outliers.to_excel(writer, sheet_name='outliers', index=False)
|
| 794 |
|
| 795 |
+
#-----------------#
|
| 796 |
|
| 797 |
# Crie um novo DataFrame com os resultados estatísticos
|
| 798 |
result_estatisticos = pd.DataFrame({
|
|
|
|
| 815 |
result_estatisticos.columns = ['Nome da Coluna', 'Valor']
|
| 816 |
result_estatisticos.to_excel(writer, sheet_name='resultados', index=False)
|
| 817 |
|
| 818 |
+
#-----------------#
|
| 819 |
|
| 820 |
# Crie um novo DataFrame com os resultados do IC
|
| 821 |
result_ic = pd.DataFrame({
|
|
|
|
| 835 |
result_ic.columns = ['Nome da Coluna', 'Valor']
|
| 836 |
result_ic.to_excel(writer, sheet_name='IC', index=False)
|
| 837 |
|
| 838 |
+
#-----------------#
|
| 839 |
|
| 840 |
# Crie um novo DataFrame com os resultados do cálculo das classes de Abunahman
|
| 841 |
result_classes = pd.DataFrame({
|
|
|
|
| 864 |
result_classes.columns = ['Nome da Coluna', 'Valor']
|
| 865 |
result_classes.to_excel(writer, sheet_name='classes', index=False)
|
| 866 |
|
| 867 |
+
#-----------------#
|
| 868 |
|
| 869 |
# Crie um novo DataFrame com os resultados do valor do imóvel
|
| 870 |
result_valores = pd.DataFrame({
|
|
|
|
| 884 |
result_valores.columns = ['Nome da Coluna', 'Valor']
|
| 885 |
result_valores.to_excel(writer, sheet_name='valor', index=False)
|
| 886 |
|
| 887 |
+
#-----------------#
|
| 888 |
|
| 889 |
mapa = plotar_mapa_com_dois_dataframes(result, df_avaliando)
|
| 890 |
+
plt.savefig('mapa_rel.png')
|
| 891 |
|
| 892 |
+
#-----------------#
|
| 893 |
|
| 894 |
+
# para gerar um gráfico
|
|
|
|
| 895 |
grafico_barras(df_grafico)
|
| 896 |
|
| 897 |
+
#-----------------#
|
|
|
|
| 898 |
|
| 899 |
# Salve o DataFrame 'result' em uma planilha
|
| 900 |
result.to_excel(output_file, index=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 901 |
|
| 902 |
+
#-------------------------------------------------------RELATÓRIO NO WORD----------------------------------------------------#
|
| 903 |
+
|
| 904 |
+
# Criação de um relatório da avaliação no word
|
| 905 |
+
# Criar um novo documento do Word
|
| 906 |
+
doc = Document()
|
| 907 |
+
|
| 908 |
+
# Definir o título do documento
|
| 909 |
+
doc.add_heading('Relatório de Avaliação de Imóvel', level=1)
|
| 910 |
+
|
| 911 |
+
# Definir as seções do relatório
|
| 912 |
+
sections = [
|
| 913 |
+
(dados_resp, "Informações do Responsável Técnico"),
|
| 914 |
+
(introd, "Introdução"),
|
| 915 |
+
(aval_infos, "Informações do avaliando"),
|
| 916 |
+
(regiao, "Características da Região"),
|
| 917 |
+
(diag, "Diagmóstico de Mercado"),
|
| 918 |
+
('Ver anexo', "Dados homogeneizados"),
|
| 919 |
+
(resultados_formatados, "Resultados estatísticos"),
|
| 920 |
+
(intervalo_confiança, "Intervalo de confiança de 80%"),
|
| 921 |
+
(valores_finais, "Valores Calculados"),
|
| 922 |
+
('fig2.png', "Geolocalização da amostra"),
|
| 923 |
+
('scatter_plot.png', "Gráfico"),
|
| 924 |
+
(assinatura,""),
|
| 925 |
+
]
|
| 926 |
+
|
| 927 |
+
for content, title in sections:
|
| 928 |
+
doc.add_heading(title, level=2)
|
| 929 |
+
p = doc.add_paragraph()
|
| 930 |
+
if title == "Geolocalização da amostra": # Adiciona mapa como imagem
|
| 931 |
+
doc.add_picture('fig2.png', width=Inches(4)) # Substitua 'mapa.png' pelo seu caminho e nome do arquivo
|
| 932 |
+
elif title == "Gráfico": # Adiciona gráfico como imagem
|
| 933 |
+
doc.add_picture('scatter_plot.png', width=Inches(4)) # Substitua 'scatter_plot.png' pelo seu caminho e nome do arquivo
|
| 934 |
+
else: # Adiciona outros tipos de conteúdo
|
| 935 |
+
run = p.add_run(content)
|
| 936 |
+
run.font.size = Pt(12)
|
| 937 |
+
p.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # Define o alinhamento para à esquerda
|
| 938 |
+
|
| 939 |
+
# Salvar o documento em um arquivo .doc
|
| 940 |
+
doc.save('relatorio_avaliacao.doc')
|
| 941 |
+
|
| 942 |
+
#---------------------------------------------------------OUTPUTS-----------------------------------------------------------#
|
| 943 |
+
|
| 944 |
+
# OUPUTS
|
| 945 |
+
return dados_resp, introd, aval_infos, regiao, diag, df_interface, resultados_formatados, intervalo_confiança, valores_finais, mapa, 'scatter_plot.png', 'relatorio_avaliacao.doc', output_file
|
| 946 |
|
| 947 |
+
#---------------------------------------------------------DEPLOY------------------------------------------------------------#
|
| 948 |
+
|
| 949 |
+
# Interface do Gradio
|
| 950 |
interface = gr.Interface(
|
| 951 |
fn=avaliacao_imovel,
|
| 952 |
inputs=[
|
| 953 |
+
|
| 954 |
+
# Imput da planilha
|
| 955 |
gr.components.File(label="Upload planilha", type="file", info="Importação de planilha padrão com o avaliando e os dados"),
|
|
|
|
| 956 |
gr.Slider(3, 26, value=26, label="Número de dados", info="Escolha o número de dados", step=1),
|
|
|
|
| 957 |
gr.Radio(["Terrenos e glebas", "Tipologias com área construída"], label="Tipo de Imóvel", info="Escolha o tipo de imóvel"),
|
| 958 |
+
|
| 959 |
+
# Informações do Responsável Técnico
|
| 960 |
+
gr.Textbox(label="Responsável Técnico", value="-"),
|
| 961 |
+
gr.Dropdown(["Engenheiro Civil", "Arquiteto e Urbanista", "Corretor de Imóveis"],label="Profissão", value="-"),
|
| 962 |
+
gr.Dropdown(["CREA", "CAU", "CRECI"],label="Entidade de Classe", value="-"),
|
| 963 |
+
gr.Number(label="Nº do registro", value="0"),
|
| 964 |
+
|
| 965 |
+
# Introdução
|
| 966 |
+
gr.Textbox(label="Endereço (Logradouro, nº e bairro)", value="-"),
|
| 967 |
+
gr.Textbox(label="Município", value="-"),
|
| 968 |
+
gr.Textbox(label="Tipo de Imóvel", value="-"),
|
| 969 |
+
gr.Textbox(label="Solicitante", value="-"),
|
| 970 |
+
gr.Textbox(label="Finalidade", value="-"),
|
| 971 |
+
gr.Textbox(label="Objetivo", value="-"),
|
| 972 |
+
|
| 973 |
+
# Características da Região
|
| 974 |
+
gr.Textbox(label="Pressupostos, Ressalvas e Fatores Limitantes", value="-"),
|
| 975 |
+
gr.Dropdown(["Água Potável", "Energia Elétrica", "Telefone", "Pavimentação", "Esgoto Pluvial",
|
| 976 |
+
"Iluminação Pública"], value=["Água Potável"], multiselect=True, label="Infraestrutura Urbana"),
|
| 977 |
+
gr.Dropdown(["Coleta de Lixo", "Transporte Coletivo", "Comércio", "Educação", "Saúde"],
|
| 978 |
+
value=["Coleta de Lixo"], multiselect=True, label="Serviços Públicos"),
|
| 979 |
+
gr.Radio(["Residencial", "Comercial", "Misto"], label="Uso",value="Residencial"),
|
| 980 |
+
gr.Radio(["Baixo", "Normal", "Alto"], label="Padrão predominante na região",value="Normal"),
|
| 981 |
+
gr.Radio(["Local", "Coletora", "Arterial"], label="Tipo de via de acesso ao imóvel",value="Local"),
|
| 982 |
+
gr.Textbox(label="Outras informação", value="-"),
|
| 983 |
+
|
| 984 |
+
# Diagnóstico de Mercado
|
| 985 |
+
gr.Radio(["Aparentemente aquecido", "Sem destaque", "Aparentemente recessivo"], label="Performance",value="Sem destaque"),
|
| 986 |
+
gr.Radio(["Aparentemente alto", "Sem destaque", "Aparentemente baixo"], label="Nível de Ofertas do Segmento",value="Sem destaque"),
|
| 987 |
+
gr.Radio(["Provavelmente alto", "Sem destaque", "Provavelmente baixo"], label="Liquidez",value="Sem destaque"),
|
| 988 |
+
|
| 989 |
+
# Para enquadramento
|
| 990 |
gr.Radio(["Completa p/ todos fatores analisados", "Completa p/ os fatores utilizados", "Situação paradigma"],
|
| 991 |
label="Caracterização do avaliando", info="Para enquadramento quanto a fundamentação - ítem 1 da tabela 6 do anexo 2 - NBR 14.653-2"),
|
| 992 |
gr.Radio(["Apresentação de informações relativas a todas as características dos dados analisados, com foto e características observadas pelo autor do laudo",
|
|
|
|
| 996 |
)
|
| 997 |
],
|
| 998 |
outputs=[
|
| 999 |
+
gr.Textbox(label ="Informações do Responsável Técnico"),
|
| 1000 |
+
gr.Textbox(label ="Introdução"),
|
| 1001 |
+
gr.Textbox(label ="Informações do Avaliando"),
|
| 1002 |
+
gr.Textbox(label ="Características da Região"),
|
| 1003 |
+
gr.Textbox(label ="Diagnóstico de Mercado"),
|
| 1004 |
gr.Dataframe(label="Dados homogeneizados"),
|
| 1005 |
gr.components.Textbox(label="Resultados estatísticos"),
|
| 1006 |
gr.components.Textbox(label="Intervalo de confiança de 80%"),
|
| 1007 |
gr.components.Textbox(label="Valores Calculados"),
|
| 1008 |
gr.Plot(label="Geolocalização da amostra"),
|
| 1009 |
gr.Image(label="Gráfico"),
|
| 1010 |
+
gr.File(label="Laudo de Avaliação"),
|
| 1011 |
+
gr.components.File(label="Anexos"),
|
| 1012 |
|
| 1013 |
],
|
| 1014 |
live=False,
|