Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -59,8 +59,8 @@ def buscar_combinacoes_eficiente(cotas, credito_min, credito_max, entrada_min, e
|
|
| 59 |
resultados = []
|
| 60 |
n = len(cotas)
|
| 61 |
|
| 62 |
-
# Para combinações de 1 a
|
| 63 |
-
for r in range(1, min(
|
| 64 |
for combinacao in itertools.combinations(cotas, r):
|
| 65 |
total_credito = sum(c['valor_credito'] for c in combinacao)
|
| 66 |
total_entrada_base = sum(c['valor_entrada'] for c in combinacao)
|
|
@@ -77,8 +77,8 @@ def buscar_combinacoes_eficiente(cotas, credito_min, credito_max, entrada_min, e
|
|
| 77 |
|
| 78 |
resultados.append((combinacao, diferenca))
|
| 79 |
|
| 80 |
-
# Limita a
|
| 81 |
-
if len(resultados) >=
|
| 82 |
return resultados
|
| 83 |
|
| 84 |
return resultados
|
|
@@ -104,12 +104,12 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
|
|
| 104 |
todas_combinacoes = []
|
| 105 |
|
| 106 |
# PRIMEIRA TENTATIVA: Critérios normais
|
| 107 |
-
credito_min1, credito_max1 = credito_desejado * 0.
|
| 108 |
-
entrada_min1, entrada_max1 = entrada_desejada * 0.
|
| 109 |
-
parcela_min1, parcela_max1 = parcela_desejada * 0.
|
| 110 |
|
| 111 |
for adm, cotas in grupos.items():
|
| 112 |
-
cotas = cotas[:
|
| 113 |
|
| 114 |
combinacoes = buscar_combinacoes_eficiente(
|
| 115 |
cotas, credito_min1, credito_max1, entrada_min1, entrada_max1, parcela_min1, parcela_max1
|
|
@@ -121,15 +121,15 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
|
|
| 121 |
# SEGUNDA TENTATIVA: Se não encontrou pelo menos 15, amplia os critérios
|
| 122 |
if len(todas_combinacoes) < 15:
|
| 123 |
print("⚠️ Ampliando critérios de busca...")
|
| 124 |
-
credito_min2, credito_max2 = credito_desejado * 0.
|
| 125 |
-
entrada_min2, entrada_max2 = entrada_desejada * 0.
|
| 126 |
-
parcela_min2, parcela_max2 = parcela_desejada * 0.
|
| 127 |
|
| 128 |
for adm, cotas in grupos.items():
|
| 129 |
-
if len(todas_combinacoes) >=
|
| 130 |
break
|
| 131 |
|
| 132 |
-
cotas = cotas[:
|
| 133 |
|
| 134 |
combinacoes = buscar_combinacoes_eficiente(
|
| 135 |
cotas, credito_min2, credito_max2, entrada_min2, entrada_max2, parcela_min2, parcela_max2
|
|
@@ -151,7 +151,7 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
|
|
| 151 |
if not ja_existe:
|
| 152 |
todas_combinacoes.append((adm, combinacao, diferenca))
|
| 153 |
|
| 154 |
-
if len(todas_combinacoes) >=
|
| 155 |
break
|
| 156 |
|
| 157 |
if not todas_combinacoes:
|
|
@@ -203,7 +203,6 @@ def formatar_resultados(resultados):
|
|
| 203 |
💠 **Crédito Líquido:** {formatar_moeda(credito_real)}
|
| 204 |
📊 **Taxa Total:** {taxa_percentual:.2f}% ({formatar_moeda(taxa_total)})
|
| 205 |
🗓️ **Taxa Mensal:** {taxa_mensal:.2f}%
|
| 206 |
-
⭐ **Score:** {diferenca:.2f}
|
| 207 |
"""
|
| 208 |
|
| 209 |
# Mensagem informativa
|
|
|
|
| 59 |
resultados = []
|
| 60 |
n = len(cotas)
|
| 61 |
|
| 62 |
+
# Para combinações de 1 a 10 cotas (aumentado para até 10 cotas)
|
| 63 |
+
for r in range(1, min(10, n) + 1):
|
| 64 |
for combinacao in itertools.combinations(cotas, r):
|
| 65 |
total_credito = sum(c['valor_credito'] for c in combinacao)
|
| 66 |
total_entrada_base = sum(c['valor_entrada'] for c in combinacao)
|
|
|
|
| 77 |
|
| 78 |
resultados.append((combinacao, diferenca))
|
| 79 |
|
| 80 |
+
# Limita a 50 combinações por administradora
|
| 81 |
+
if len(resultados) >= 50:
|
| 82 |
return resultados
|
| 83 |
|
| 84 |
return resultados
|
|
|
|
| 104 |
todas_combinacoes = []
|
| 105 |
|
| 106 |
# PRIMEIRA TENTATIVA: Critérios normais
|
| 107 |
+
credito_min1, credito_max1 = credito_desejado * 0.90, credito_desejado * 1.10
|
| 108 |
+
entrada_min1, entrada_max1 = entrada_desejada * 0.90, entrada_desejada * 1.10
|
| 109 |
+
parcela_min1, parcela_max1 = parcela_desejada * 0.70, parcela_desejada * 1.30
|
| 110 |
|
| 111 |
for adm, cotas in grupos.items():
|
| 112 |
+
cotas = cotas[:25] # 25 cotas por administradora
|
| 113 |
|
| 114 |
combinacoes = buscar_combinacoes_eficiente(
|
| 115 |
cotas, credito_min1, credito_max1, entrada_min1, entrada_max1, parcela_min1, parcela_max1
|
|
|
|
| 121 |
# SEGUNDA TENTATIVA: Se não encontrou pelo menos 15, amplia os critérios
|
| 122 |
if len(todas_combinacoes) < 15:
|
| 123 |
print("⚠️ Ampliando critérios de busca...")
|
| 124 |
+
credito_min2, credito_max2 = credito_desejado * 0.85, credito_desejado * 1.15
|
| 125 |
+
entrada_min2, entrada_max2 = entrada_desejada * 0.85, entrada_desejada * 1.15
|
| 126 |
+
parcela_min2, parcela_max2 = parcela_desejada * 0.60, parcela_desejada * 1.40
|
| 127 |
|
| 128 |
for adm, cotas in grupos.items():
|
| 129 |
+
if len(todas_combinacoes) >= 40: # Limite total
|
| 130 |
break
|
| 131 |
|
| 132 |
+
cotas = cotas[:30] # 30 cotas por administradora
|
| 133 |
|
| 134 |
combinacoes = buscar_combinacoes_eficiente(
|
| 135 |
cotas, credito_min2, credito_max2, entrada_min2, entrada_max2, parcela_min2, parcela_max2
|
|
|
|
| 151 |
if not ja_existe:
|
| 152 |
todas_combinacoes.append((adm, combinacao, diferenca))
|
| 153 |
|
| 154 |
+
if len(todas_combinacoes) >= 40:
|
| 155 |
break
|
| 156 |
|
| 157 |
if not todas_combinacoes:
|
|
|
|
| 203 |
💠 **Crédito Líquido:** {formatar_moeda(credito_real)}
|
| 204 |
📊 **Taxa Total:** {taxa_percentual:.2f}% ({formatar_moeda(taxa_total)})
|
| 205 |
🗓️ **Taxa Mensal:** {taxa_mensal:.2f}%
|
|
|
|
| 206 |
"""
|
| 207 |
|
| 208 |
# Mensagem informativa
|