File size: 4,234 Bytes
c5a97b3
 
 
2598bbd
3992853
c5a97b3
99aed09
 
2598bbd
7a6bd46
 
 
 
2598bbd
 
 
 
 
 
 
 
 
7a6bd46
3992853
 
 
 
 
 
 
 
2598bbd
 
 
 
 
c5a97b3
99aed09
f308877
 
99aed09
 
 
 
 
 
 
f308877
 
 
 
 
 
aff5c22
f308877
 
99aed09
78ac961
7a6bd46
2598bbd
c5a97b3
f308877
78ac961
 
 
 
330ebef
99aed09
 
330ebef
c5a97b3
99aed09
 
3bd1e98
f308877
99aed09
f308877
99aed09
 
c4f8c41
205d4a0
 
 
 
 
 
3bd1e98
78ac961
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
import gradio as gr
import requests
import pandas as pd
from difflib import get_close_matches
import re  # Importa o módulo de expressões regulares

bens_df = pd.read_excel('bens_tab.xlsx')

def fetch_data_to_dataframe(query, limit=50, source="mercadolibre"):
    if source == "mercadolibre":
        BASE_URL = "https://api.mercadolibre.com/sites/MLB/search"
        params = {'q': query, 'limit': limit}
        response = requests.get(BASE_URL, params=params)
        if response.status_code == 200:
            data = response.json()
            if 'results' in data:
                items = data['results']
                df = pd.DataFrame(items)
                df = df[['title', 'price', 'currency_id', 'condition', 'permalink']]
                df.columns = ['Title', 'Price', 'Currency', 'Condition', 'Link']
                return df
    return pd.DataFrame()

def refinar_resultados(df):
    # Filtra itens que não contêm "kit" no título e não indicam múltiplas unidades
    df_refinado = df[~df['Title'].str.contains("kit", case=False)]
    # Expressão regular para identificar números seguidos por palavras relacionadas a quantidade
    padrao_unidades = r'\b(\d+)\s*(unidade|unidades|pacote|pacotes|caixa|caixas)\b'
    df_refinado = df_refinado[~df_refinado['Title'].str.contains(padrao_unidades, case=False, regex=True)]
    return df_refinado

def filtrar_itens_similares(df, termo_pesquisa, limite=5):
    titulos = df['Title'].tolist()
    titulos_similares = get_close_matches(termo_pesquisa, titulos, n=limite, cutoff=0.1)
    df_filtrado = df[df['Title'].isin(titulos_similares)]
    return df_filtrado

def calcular_fator_avaliacao(EC, titulo, PU):
    pontuacoes = {'Excelente': 10, 'Bom': 8, 'Regular': 5, 'Péssimo': 2}
    ec_pontuacao = pontuacoes[EC]

    # Buscar VU e VR baseado no título
    bem_info = bens_df[bens_df['TITULO'] == titulo].iloc[0]
    VU = bem_info['VIDA_UTIL']
    VR = bem_info['VALOR_RESIDUAL']

    PU = float(PU)
    PVU = 10 - ((PU - 1) * (10 / VU))
    PVU = min(PVU, 10)
    
    PUB = 10 - (((VU - PU) - 1) * (10 / VU))
    PUB = min(PUB, 10)
    
    fator_avaliacao = max((4 * ec_pontuacao + 6 * PVU - 3 * PUB) / 100, VR)
    return fator_avaliacao

def integrated_app(query, EC, titulo, PU):
    df = fetch_data_to_dataframe(query, 50, "mercadolibre")
    if df.empty:
        return "Nenhum dado encontrado. Tente uma consulta diferente.", pd.DataFrame()

    df = refinar_resultados(df)
    df_similares = filtrar_itens_similares(df, query)
    if df_similares.empty:
        return "Nenhum item similar encontrado.", pd.DataFrame()
    else:
        mean_price = df_similares['Price'].mean()
        fator_avaliacao = calcular_fator_avaliacao(EC, titulo, PU)
        valor_avaliacao = max(mean_price * fator_avaliacao, ((VR)* mean_price))
        return f"Valor Médio do Bem: R$ {mean_price:.2f}, Fator de Avaliação: {fator_avaliacao*100:.2f}%, Valor de Avaliação: R$ {valor_avaliacao:.2f}", df_similares

titulos = bens_df['TITULO'].unique().tolist()

iface = gr.Interface(fn=integrated_app,
                     inputs=[gr.Textbox(label="Digite sua consulta"),
                             gr.Dropdown(label="Classificação Contábil do Bem", choices=titulos),
                             gr.Radio(label="Estado de Conservação do Bem", choices=['Excelente', 'Bom', 'Regular', 'Péssimo']),
                             gr.Number(label="Período utilizado (anos)", value=1)
                     ],
                     outputs=[gr.Textbox(label="Cálculo"), gr.Dataframe(label="Resultados da Pesquisa")],
                     theme=gr.themes.Monochrome(),
                    title = "<span style='color: gray; font-size: 48px;'>aval</span><span style='color: gray; font-size: 48px;'>ia</span><span style='color: gray; font-size: 48px;'>.BEN</span>",
                    description=f"""
                    <p style="text-align: left;"><b><span style='color: gray; font-size: 40px;'>aval</span><span style='color: gray; font-size: 40px;'>ia</span><span style='color: gray; font-size: 40px;'>.se</b></p>
                    <p style="text-align: left;"></span>Aplicativo para avaliação de bens móveis</p>
                    """)

iface.launch()