Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
#
|
|
|
|
| 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 |
-
#
|
| 103 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
+
# Só 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 |
|