Arthur-Attili commited on
Commit
338f121
·
verified ·
1 Parent(s): 33770da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -4
app.py CHANGED
@@ -87,24 +87,42 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
87
 
88
  grupos = agrupar_por_administradora(df_filtrado)
89
  resultados = []
 
 
 
90
 
91
  for adm, cotas in grupos.items():
92
- for r in range(1, min(3, len(cotas)) + 1): # Máximo 3 cotas por combinação
93
- for combinacao in itertools.combinations(cotas, r):
 
 
 
 
 
 
 
 
94
  total_credito = sum(c['valor_credito'] for c in combinacao)
95
  total_entrada_base = sum(c['valor_entrada'] for c in combinacao)
96
- total_entrada = total_entrada_base + (total_credito * 0.085) # aplica os 8,5% sobre o crédito
97
  total_parcelas = sum(c['valor_parcela'] for c in combinacao)
98
 
 
99
  if (credito_min <= total_credito <= credito_max and
100
  entrada_min <= total_entrada <= entrada_max and
101
  parcela_min <= total_parcelas <= parcela_max):
102
 
103
  total_saldo = sum(c['saldo_devedor'] for c in combinacao)
104
  valor_final = round(total_entrada + total_saldo, 2)
105
- diferenca = abs(valor_final - total_credito) # Diferença do valor final pelo crédito (para ordenação)
106
 
107
  resultados.append((adm, combinacao, diferenca))
 
 
 
 
 
 
108
 
109
  if not resultados:
110
  return "🚫 Nenhuma combinação adequada encontrada com os parâmetros fornecidos."
 
87
 
88
  grupos = agrupar_por_administradora(df_filtrado)
89
  resultados = []
90
+
91
+ # Limite máximo de cotas por combinação
92
+ MAX_COTAS = 10
93
 
94
  for adm, cotas in grupos.items():
95
+ # Filtra cotas que estão dentro dos limites individualmente
96
+ cotas_filtradas = [
97
+ c for c in cotas
98
+ if (credito_min <= c['valor_credito'] <= credito_max and
99
+ parcela_min <= c['valor_parcela'] <= parcela_max)
100
+ ]
101
+
102
+ # Busca combinações de 1 a MAX_COTAS cotas
103
+ for r in range(1, min(MAX_COTAS, len(cotas_filtradas)) + 1):
104
+ for combinacao in itertools.combinations(cotas_filtradas, r):
105
  total_credito = sum(c['valor_credito'] for c in combinacao)
106
  total_entrada_base = sum(c['valor_entrada'] for c in combinacao)
107
+ total_entrada = total_entrada_base + (total_credito * 0.085)
108
  total_parcelas = sum(c['valor_parcela'] for c in combinacao)
109
 
110
+ # Verifica se a combinação está dentro dos limites
111
  if (credito_min <= total_credito <= credito_max and
112
  entrada_min <= total_entrada <= entrada_max and
113
  parcela_min <= total_parcelas <= parcela_max):
114
 
115
  total_saldo = sum(c['saldo_devedor'] for c in combinacao)
116
  valor_final = round(total_entrada + total_saldo, 2)
117
+ diferenca = abs(valor_final - total_credito)
118
 
119
  resultados.append((adm, combinacao, diferenca))
120
+
121
+ # Limita o número de resultados por administradora para evitar explosão
122
+ if len(resultados) >= 1000: # Safety limit
123
+ break
124
+ if len(resultados) >= 1000:
125
+ break
126
 
127
  if not resultados:
128
  return "🚫 Nenhuma combinação adequada encontrada com os parâmetros fornecidos."