Arthur-Attili commited on
Commit
a5df4fb
·
verified ·
1 Parent(s): 6178dc6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -20
app.py CHANGED
@@ -71,32 +71,47 @@ def agrupar_por_administradora(dataframe):
71
  return grupos
72
 
73
  def calcular_tempo_parcelas(combinacao):
74
- """Calcula o tempo de parcelas baseado nas cotas da combinação."""
75
  if not combinacao:
76
  return ""
77
 
78
  try:
79
- # Encontra o maior prazo entre as cotas
80
- maior_prazo = max(int(c.get('qtd_parcelas', 0)) for c in combinacao)
 
 
 
81
 
82
- if maior_prazo <= 0:
83
  return ""
84
 
85
- # Soma os valores das parcelas de todas as cotas
86
- valor_parcela_total = sum(c.get('valor_parcela', 0) for c in combinacao)
87
 
88
- # Define as faixas de parcelamento (lógica similar ao outro sistema)
89
- if maior_prazo <= 36:
90
- # Uma única faixa
91
- return f"1 à {maior_prazo}x: {formatar_moeda(valor_parcela_total)}/mês"
92
- else:
93
- # Duas faixas (exemplo: 1-36 e 37-final)
94
- primeira_faixa = 36
95
- segunda_faixa = maior_prazo - 36
96
 
97
- # Para simplificar, usamos o mesmo valor para ambas as faixas
98
- # Em um sistema mais complexo, você poderia calcular valores diferentes
99
- return f"1 à {primeira_faixa}x: {formatar_moeda(valor_parcela_total)}/mês\n{primeira_faixa+1} à {maior_prazo}x: {formatar_moeda(valor_parcela_total)}/mês"
 
 
 
 
 
 
 
 
 
 
 
 
 
100
 
101
  except Exception as e:
102
  print(f"❌ Erro ao calcular tempo de parcelas: {str(e)}")
@@ -290,7 +305,7 @@ def formatar_moeda(valor):
290
  return f"R$ {valor:,.2f}".replace(",", "v").replace(".", ",").replace("v", ".")
291
 
292
  def formatar_resultados(resultados):
293
- """Formata os resultados para exibição INCLUINDO TEMPO DE PARCELAS."""
294
  if not resultados:
295
  return "🚫 Nenhuma combinação adequada encontrada com os parâmetros fornecidos."
296
 
@@ -310,7 +325,7 @@ def formatar_resultados(resultados):
310
  taxa_percentual = (taxa_total / credito_real) * 100 if credito_real > 0 else 0
311
  taxa_mensal = taxa_percentual / maior_prazo if maior_prazo > 0 else 0
312
 
313
- # NOVO: Calcular tempo de parcelas
314
  tempo_parcelas = calcular_tempo_parcelas(combinacao)
315
 
316
  resposta += f"""
@@ -329,7 +344,7 @@ def formatar_resultados(resultados):
329
  🗓️ Taxa Anual: {taxa_mensal * 12:.2f}%
330
 
331
  ⏰ TEMPO DE PARCELAS:
332
- {tempo_parcelas}
333
 
334
  """
335
  return resposta
 
71
  return grupos
72
 
73
  def calcular_tempo_parcelas(combinacao):
74
+ """Calcula o tempo de parcelas baseado nas cotas da combinação - VERSÃO CORRIGIDA."""
75
  if not combinacao:
76
  return ""
77
 
78
  try:
79
+ # Ordena as cotas pelo prazo (menor prazo primeiro)
80
+ cotas_ordenadas = sorted(combinacao, key=lambda x: int(x.get('qtd_parcelas', 0)))
81
+
82
+ # Encontra todos os prazos únicos e ordena
83
+ prazos = sorted(set(int(c.get('qtd_parcelas', 0)) for c in combinacao))
84
 
85
+ if not prazos or prazos[0] <= 0:
86
  return ""
87
 
88
+ resultado = []
89
+ prazo_anterior = 0
90
 
91
+ for i, prazo_atual in enumerate(prazos):
92
+ # Calcula a soma das parcelas das cotas que estão ativas neste intervalo
93
+ cotas_ativas = [c for c in cotas_ordenadas if int(c.get('qtd_parcelas', 0)) >= prazo_anterior + 1]
94
+ valor_parcela_total = sum(c.get('valor_parcela', 0) for c in cotas_ativas)
95
+
96
+ inicio = prazo_anterior + 1
97
+ fim = prazo_atual
 
98
 
99
+ if inicio <= fim and valor_parcela_total > 0:
100
+ resultado.append(f"{inicio}x à {fim}x: {formatar_moeda(valor_parcela_total)}/mês")
101
+
102
+ prazo_anterior = prazo_atual
103
+
104
+ # Adiciona faixa final se houver cotas com prazos além do último ponto de quebra
105
+ if prazos and prazo_anterior < max(prazos):
106
+ cotas_ativas_finais = [c for c in cotas_ordenadas if int(c.get('qtd_parcelas', 0)) > prazo_anterior]
107
+ if cotas_ativas_finais:
108
+ valor_parcela_final = sum(c.get('valor_parcela', 0) for c in cotas_ativas_finais)
109
+ inicio_final = prazo_anterior + 1
110
+ fim_final = max(prazos)
111
+ if valor_parcela_final > 0:
112
+ resultado.append(f"{inicio_final}x à {fim_final}x: {formatar_moeda(valor_parcela_final)}/mês")
113
+
114
+ return "\n".join(resultado) if resultado else ""
115
 
116
  except Exception as e:
117
  print(f"❌ Erro ao calcular tempo de parcelas: {str(e)}")
 
305
  return f"R$ {valor:,.2f}".replace(",", "v").replace(".", ",").replace("v", ".")
306
 
307
  def formatar_resultados(resultados):
308
+ """Formata os resultados para exibição INCLUINDO TEMPO DE PARCELAS CORRETO."""
309
  if not resultados:
310
  return "🚫 Nenhuma combinação adequada encontrada com os parâmetros fornecidos."
311
 
 
325
  taxa_percentual = (taxa_total / credito_real) * 100 if credito_real > 0 else 0
326
  taxa_mensal = taxa_percentual / maior_prazo if maior_prazo > 0 else 0
327
 
328
+ # CHAMADA CORRIGIDA para calcular tempo de parcelas
329
  tempo_parcelas = calcular_tempo_parcelas(combinacao)
330
 
331
  resposta += f"""
 
344
  🗓️ Taxa Anual: {taxa_mensal * 12:.2f}%
345
 
346
  ⏰ TEMPO DE PARCELAS:
347
+ {tempo_parcelas if tempo_parcelas else "Não foi possível calcular o tempo de parcelas"}
348
 
349
  """
350
  return resposta