Spaces:
Sleeping
Sleeping
File size: 4,299 Bytes
c5a97b3 2598bbd 3992853 f2141ad c5a97b3 99aed09 53ae920 99aed09 2598bbd 7a6bd46 2598bbd c7f2259 2598bbd 7a6bd46 3992853 2598bbd c5a97b3 2fe5b5e 99aed09 d3db32a 99aed09 d310004 99aed09 f308877 aff5c22 f308877 2fe5b5e 78ac961 7a6bd46 2598bbd c5a97b3 f308877 78ac961 3ad1d5e 78ac961 330ebef 4b652b7 1a9e4db 330ebef c5a97b3 f2141ad 99aed09 3bd1e98 f308877 4d527e1 99aed09 c4f8c41 205d4a0 65d60d7 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 90 91 92 93 94 95 96 97 98 |
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
import csv
import datetime
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']
df['Marketplace'] = "Mercado Livre"
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(titulo, EC, PU):
# Buscar VU e VR baseado no título
filtered_df = bens_df[bens_df['TITULO'] == titulo]
if filtered_df.empty:
raise ValueError(f"Nenhum bem encontrado com o título: {titulo}")
bem_info = filtered_df.iloc[0]
VU = bem_info['VIDA_UTIL']
VR = bem_info['VALOR_RESIDUAL']
pontuacoes = {'Excelente': 10, 'Bom': 8, 'Regular': 5, 'Péssimo': 2}
ec_pontuacao = pontuacoes[EC]
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, titulo, EC, 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(titulo, EC, PU)
valor_avaliacao = mean_price * fator_avaliacao
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, value="MOBILIÁRIO EM GERAL"),
gr.Radio(label="Estado de Conservação do Bem", choices=['Excelente', 'Bom', 'Regular', 'Péssimo'], value="Excelente"),
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;'>Avaliação de Bens Móveis</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>
""")
iface.launch()
|