Arthur-Attili commited on
Commit
b375fb2
·
verified ·
1 Parent(s): 13524ad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -115
app.py CHANGED
@@ -25,11 +25,10 @@ df = None
25
  df_auto = None
26
  grupos_auto = None
27
  planilha_carregada = False
28
- ADMINISTRADORAS_LISTA = [] # Lista global de administradoras
29
 
30
  def carregar_planilha():
31
  """Carrega e prepara a planilha para análise."""
32
- global df, df_auto, grupos_auto, planilha_carregada, ADMINISTRADORAS_LISTA
33
 
34
  # Se já carregou, não precisa carregar novamente
35
  if planilha_carregada:
@@ -68,7 +67,7 @@ def carregar_planilha():
68
 
69
  # Padroniza os nomes das administradoras
70
  if 'administradora' in df.columns:
71
- df['administradora'] = df['administradora'].astype(str).str.strip()
72
  print("✅ Administradoras padronizadas")
73
  else:
74
  print("⚠️ Coluna 'administradora' não encontrada")
@@ -113,13 +112,10 @@ def carregar_planilha():
113
  for adm in list(grupos_auto.keys()):
114
  grupos_auto[adm] = grupos_auto[adm][:MAX_COTAS_POR_ADMIN]
115
 
116
- # CARREGA A LISTA DE ADMINISTRADORAS PARA A API
117
- ADMINISTRADORAS_LISTA = obter_lista_administradoras()
118
-
119
  planilha_carregada = True
120
  print("✅ Planilha carregada e pré-processada com sucesso")
121
  print(f"✅ Total de cotas de auto: {len(df_auto)}")
122
- print(f"✅ Administradoras disponíveis: {ADMINISTRADORAS_LISTA}")
123
  return True
124
 
125
  except Exception as e:
@@ -128,50 +124,6 @@ def carregar_planilha():
128
  traceback.print_exc()
129
  return False
130
 
131
- def obter_lista_administradoras():
132
- """Obtém a lista de administradoras da planilha."""
133
- global df
134
-
135
- if df is None:
136
- print("⚠️ DataFrame não carregado, retornando lista padrão")
137
- return ["Ademicon", "Banco do Brasil", "Bancorbrás", "Banrisul", "Bradesco",
138
- "Caixa CNP", "Caixa XS5", "Canopus", "Embracon", "HS",
139
- "HS Consórcio", "Itaú"]
140
-
141
- try:
142
- # Busca por variações do termo 'auto'
143
- termos_auto = ['auto', 'automóvel', 'carro', 'veículo', 'automovel']
144
- mascara_auto = df['tipo_do_bem'].astype(str).str.lower().isin([t.lower() for t in termos_auto])
145
-
146
- if mascara_auto.any():
147
- df_filtrado = df[mascara_auto]
148
- else:
149
- df_filtrado = df
150
-
151
- # Verifica se tem a coluna administradora
152
- if 'administradora' in df_filtrado.columns:
153
- adm_list = df_filtrado['administradora'].dropna().unique()
154
- # Remove strings vazias e mantém o formato original
155
- adm_list = [str(adm).strip() for adm in adm_list if str(adm).strip()]
156
- adm_list = sorted(list(set(adm_list))) # Remove duplicatas e ordena
157
-
158
- if adm_list:
159
- print(f"✅ Lista de administradoras carregada: {len(adm_list)} opções")
160
- return adm_list
161
- else:
162
- print("⚠️ Nenhuma administradora encontrada na planilha")
163
- return ["Ademicon", "Banco do Brasil", "Bancorbrás", "Banrisul", "Bradesco",
164
- "Caixa CNP", "Caixa XS5", "Canopus", "Embracon", "HS",
165
- "HS Consórcio", "Itaú"]
166
-
167
- except Exception as e:
168
- print(f"❌ Erro ao obter lista de administradoras: {str(e)}")
169
-
170
- # Fallback padrão
171
- return ["Ademicon", "Banco do Brasil", "Bancorbrás", "Banrisul", "Bradesco",
172
- "Caixa CNP", "Caixa XS5", "Canopus", "Embracon", "HS",
173
- "HS Consórcio", "Itaú"]
174
-
175
  def agrupar_por_administradora(dataframe):
176
  """Agrupa cotas por administradora."""
177
  grupos = defaultdict(list)
@@ -250,7 +202,7 @@ def buscar_combinacoes_otimizado(credito_desejado, entrada_desejada, parcela_des
250
 
251
  # Filtra administradoras se especificado
252
  if administradoras and len(administradoras) > 0:
253
- administradoras = [a.strip() for a in administradoras]
254
  grupos_filtrados = {adm: cotas for adm, cotas in grupos_auto.items() if adm in administradoras}
255
  print(f"🔍 Filtrando por administradoras: {administradoras}")
256
  else:
@@ -378,7 +330,7 @@ def buscar_combinacoes_amplo(credito_desejado, entrada_desejada, parcela_desejad
378
 
379
  # Filtra administradoras se especificado
380
  if administradoras and len(administradoras) > 0:
381
- administradoras = [a.strip() for a in administradoras]
382
  grupos_filtrados = {adm: cotas for adm, cotas in grupos_auto.items() if adm in administradoras}
383
  else:
384
  grupos_filtrados = grupos_auto
@@ -548,6 +500,14 @@ def ajustar_e_buscar(credito_desejado, entrada_desejada, parcela_desejada, admin
548
  traceback.print_exc()
549
  return f"❌ Erro interno do servidor: {str(e)}"
550
 
 
 
 
 
 
 
 
 
551
  # Criando a interface Gradio
552
  with gr.Blocks(title="Sistema de Busca de Consórcio Auto") as demo:
553
  gr.HTML("""
@@ -622,33 +582,14 @@ with gr.Blocks(title="Sistema de Busca de Consórcio Auto") as demo:
622
  gr.Markdown("Insira os valores desejados para crédito, entrada e parcela, e filtre por administradora.")
623
 
624
  with gr.Row():
625
- credito_input = gr.Number(
626
- label="Crédito Desejado (R$)",
627
- value=30000,
628
- step=1000,
629
- description="Valor do crédito desejado para o consórcio"
630
- )
631
- entrada_input = gr.Number(
632
- label="Entrada Desejada (R$)",
633
- value=3000,
634
- step=100,
635
- description="Valor da entrada desejada"
636
- )
637
- parcela_input = gr.Number(
638
- label="Parcela Desejada (R$)",
639
- value=500,
640
- step=10,
641
- description="Valor da parcela mensal desejada"
642
- )
643
 
644
- # Carrega a lista de administradoras
645
- admin_lista = ADMINISTRADORAS_LISTA if ADMINISTRADORAS_LISTA else obter_lista_administradoras()
646
-
647
  administradoras_multiselect = gr.CheckboxGroup(
648
  label="Filtrar por Administradoras",
649
- choices=admin_lista,
650
- value=admin_lista[:5] if len(admin_lista) >= 5 else admin_lista,
651
- info=f"Total de {len(admin_lista)} administradoras disponíveis"
652
  )
653
 
654
  submit_btn = gr.Button("🔍 Buscar Combinações", variant="primary")
@@ -658,43 +599,9 @@ with gr.Blocks(title="Sistema de Busca de Consórcio Auto") as demo:
658
  lines=20,
659
  max_lines=40,
660
  interactive=False,
661
- placeholder="Os resultados aparecerão aqui...",
662
- show_copy_button=True
663
  )
664
 
665
- # Adiciona documentação da API explicitamente
666
- gr.Markdown("""
667
- ## 📡 API Documentation
668
-
669
- ### Endpoint: `/ajustar_e_buscar`
670
-
671
- **Parameters:**
672
-
673
- | Parameter | Type | Default | Description |
674
- |-----------|------|---------|-------------|
675
- | `credito_desejado` | `number` | 30000 | Valor do crédito desejado em R$ |
676
- | `entrada_desejada` | `number` | 3000 | Valor da entrada desejada em R$ |
677
- | `parcela_desejada` | `number` | 500 | Valor da parcela mensal desejada em R$ |
678
- | `administradoras` | `string[]` | %s | Lista de administradoras para filtrar |
679
-
680
- **Administradoras disponíveis:** %s
681
-
682
- **Example JavaScript API call:**
683
- ```javascript
684
- import { Client } from "@gradio/client";
685
-
686
- const client = await Client.connect("BACKUPMAXCON/combinacoescotas");
687
- const result = await client.predict("/ajustar_e_buscar", {
688
- credito_desejado: 30000,
689
- entrada_desejada: 3000,
690
- parcela_desejada: 500,
691
- administradoras: ["Ademicon"],
692
- });
693
-
694
- console.log(result.data);
695
- ```
696
- """ % (str(admin_lista[:3]), ", ".join(admin_lista)))
697
-
698
  submit_btn.click(
699
  fn=ajustar_e_buscar,
700
  inputs=[credito_input, entrada_input, parcela_input, administradoras_multiselect],
@@ -708,11 +615,9 @@ with gr.Blocks(title="Sistema de Busca de Consórcio Auto") as demo:
708
  # Inicia o aplicativo Gradio
709
  if __name__ == "__main__":
710
  print("🌐 Iniciando servidor Gradio...")
711
- print(f"📋 Administradoras carregadas: {ADMINISTRADORAS_LISTA}")
712
  demo.launch(
713
  server_name="0.0.0.0",
714
  server_port=7860,
715
  debug=True,
716
- show_error=True,
717
- share=False
718
  )
 
25
  df_auto = None
26
  grupos_auto = None
27
  planilha_carregada = False
 
28
 
29
  def carregar_planilha():
30
  """Carrega e prepara a planilha para análise."""
31
+ global df, df_auto, grupos_auto, planilha_carregada
32
 
33
  # Se já carregou, não precisa carregar novamente
34
  if planilha_carregada:
 
67
 
68
  # Padroniza os nomes das administradoras
69
  if 'administradora' in df.columns:
70
+ df['administradora'] = df['administradora'].astype(str).str.strip().str.lower()
71
  print("✅ Administradoras padronizadas")
72
  else:
73
  print("⚠️ Coluna 'administradora' não encontrada")
 
112
  for adm in list(grupos_auto.keys()):
113
  grupos_auto[adm] = grupos_auto[adm][:MAX_COTAS_POR_ADMIN]
114
 
 
 
 
115
  planilha_carregada = True
116
  print("✅ Planilha carregada e pré-processada com sucesso")
117
  print(f"✅ Total de cotas de auto: {len(df_auto)}")
118
+ print(f"✅ Administradoras disponíveis: {list(grupos_auto.keys())}")
119
  return True
120
 
121
  except Exception as e:
 
124
  traceback.print_exc()
125
  return False
126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  def agrupar_por_administradora(dataframe):
128
  """Agrupa cotas por administradora."""
129
  grupos = defaultdict(list)
 
202
 
203
  # Filtra administradoras se especificado
204
  if administradoras and len(administradoras) > 0:
205
+ administradoras = [a.strip().lower() for a in administradoras]
206
  grupos_filtrados = {adm: cotas for adm, cotas in grupos_auto.items() if adm in administradoras}
207
  print(f"🔍 Filtrando por administradoras: {administradoras}")
208
  else:
 
330
 
331
  # Filtra administradoras se especificado
332
  if administradoras and len(administradoras) > 0:
333
+ administradoras = [a.strip().lower() for a in administradoras]
334
  grupos_filtrados = {adm: cotas for adm, cotas in grupos_auto.items() if adm in administradoras}
335
  else:
336
  grupos_filtrados = grupos_auto
 
500
  traceback.print_exc()
501
  return f"❌ Erro interno do servidor: {str(e)}"
502
 
503
+ # Prepara a lista de administradoras para o Gradio
504
+ def get_administradoras_options():
505
+ if df is not None and planilha_carregada:
506
+ if 'administradora' in df.columns and 'tipo_do_bem' in df.columns:
507
+ adm_list = df[df['tipo_do_bem'].astype(str).str.lower() == 'auto']['administradora'].unique()
508
+ return sorted([str(adm) for adm in adm_list if adm])
509
+ return ["bradesco", "santander", "itau", "caixa", "banco do brasil"]
510
+
511
  # Criando a interface Gradio
512
  with gr.Blocks(title="Sistema de Busca de Consórcio Auto") as demo:
513
  gr.HTML("""
 
582
  gr.Markdown("Insira os valores desejados para crédito, entrada e parcela, e filtre por administradora.")
583
 
584
  with gr.Row():
585
+ credito_input = gr.Number(label="Crédito Desejado (R$)", value=30000, step=1000)
586
+ entrada_input = gr.Number(label="Entrada Desejada (R$)", value=3000, step=100)
587
+ parcela_input = gr.Number(label="Parcela Desejada (R$)", value=500, step=10)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
588
 
 
 
 
589
  administradoras_multiselect = gr.CheckboxGroup(
590
  label="Filtrar por Administradoras",
591
+ choices=get_administradoras_options(),
592
+ value=get_administradoras_options()[:3] if len(get_administradoras_options()) >= 3 else get_administradoras_options()
 
593
  )
594
 
595
  submit_btn = gr.Button("🔍 Buscar Combinações", variant="primary")
 
599
  lines=20,
600
  max_lines=40,
601
  interactive=False,
602
+ placeholder="Os resultados aparecerão aqui..."
 
603
  )
604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  submit_btn.click(
606
  fn=ajustar_e_buscar,
607
  inputs=[credito_input, entrada_input, parcela_input, administradoras_multiselect],
 
615
  # Inicia o aplicativo Gradio
616
  if __name__ == "__main__":
617
  print("🌐 Iniciando servidor Gradio...")
 
618
  demo.launch(
619
  server_name="0.0.0.0",
620
  server_port=7860,
621
  debug=True,
622
+ show_error=True
 
623
  )