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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -4
app.py CHANGED
@@ -88,7 +88,8 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
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():
@@ -99,8 +100,12 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
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)
@@ -125,12 +130,22 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
125
  break
126
 
127
  if not resultados:
128
- return "🚫 Nenhuma combinação adequada encontrada com os parâmetros fornecidos."
 
 
 
129
 
130
  resultados.sort(key=lambda x: x[2]) # Ordena pela diferença
131
 
132
  return formatar_resultados(resultados)
133
 
 
 
 
 
 
 
 
134
  def formatar_moeda(valor):
135
  return f"R$ {valor:,.2f}".replace(",", "v").replace(".", ",").replace("v", ".")
136
 
 
88
  grupos = agrupar_por_administradora(df_filtrado)
89
  resultados = []
90
 
91
+ # Configuração: mínimo 3 cotas, máximo 10 cotas por combinação
92
+ MIN_COTAS = 3
93
  MAX_COTAS = 10
94
 
95
  for adm, cotas in grupos.items():
 
100
  parcela_min <= c['valor_parcela'] <= parcela_max)
101
  ]
102
 
103
+ # busca se tiver pelo menos MIN_COTAS cotas
104
+ if len(cotas_filtradas) < MIN_COTAS:
105
+ continue
106
+
107
+ # Busca combinações de MIN_COTAS a MAX_COTAS cotas
108
+ for r in range(MIN_COTAS, min(MAX_COTAS, len(cotas_filtradas)) + 1):
109
  for combinacao in itertools.combinations(cotas_filtradas, r):
110
  total_credito = sum(c['valor_credito'] for c in combinacao)
111
  total_entrada_base = sum(c['valor_entrada'] for c in combinacao)
 
130
  break
131
 
132
  if not resultados:
133
+ # Tenta buscar com tolerâncias mais amplas se não encontrar resultados
134
+ return buscar_combinacoes_com_tolerancia_ampliada(
135
+ credito_desejado, entrada_desejada, parcela_desejada, administradoras
136
+ )
137
 
138
  resultados.sort(key=lambda x: x[2]) # Ordena pela diferença
139
 
140
  return formatar_resultados(resultados)
141
 
142
+ def buscar_combinacoes_com_tolerancia_ampliada(credito_desejado, entrada_desejada, parcela_desejada, administradoras):
143
+ """Busca combinações com tolerâncias mais amplas quando não encontra resultados."""
144
+ # Tolerâncias ampliadas
145
+ credito_min, credito_max = credito_desejado * 0.85, credito_desejado * 1.15
146
+ entrada_min, entrada_max = entrada_desejada * 0.85, entrada_desejada * 1.15
147
+ parcela_min, parcela_max = parcela_desejada * 0.65, parcela_desejada * 1.35
148
+
149
  def formatar_moeda(valor):
150
  return f"R$ {valor:,.2f}".replace(",", "v").replace(".", ",").replace("v", ".")
151