Pegumenezes commited on
Commit
179af1a
·
verified ·
1 Parent(s): d3b7e64

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +21 -19
src/streamlit_app.py CHANGED
@@ -85,7 +85,7 @@ st.markdown("""
85
  """, unsafe_allow_html=True)
86
 
87
 
88
- # --- 3. DEFINIÇÃO DAS FUNÇÕES GLOBAIS (sem alterações) ---
89
  def formatar_brl(valor): return f"R$ {valor:,.2f}"
90
  def formatar_percentual(valor): return f"{valor:.2%}" if pd.notna(valor) and not np.isinf(valor) else "N/A"
91
  def calcular_vpl(fluxo_caixa, taxa_desconto):
@@ -129,7 +129,7 @@ def gerar_fluxo_caixa_projeto(investimento_inicial, receita_anual_base, custos_o
129
  fluxo_caixa.append(fluxo_liquido_ano)
130
  return fluxo_caixa
131
 
132
- # --- 4. CARREGAMENTO DE DADOS (sem alterações) ---
133
  @st.cache_data
134
  def carregar_dados():
135
  meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
@@ -184,16 +184,11 @@ st.sidebar.info(f"Dados atualizados em: {pd.Timestamp.now(tz='America/Sao_Paulo'
184
 
185
 
186
  # --- 6. LÓGICA DE RENDERIZAÇÃO DAS PÁGINAS ---
187
-
188
- # ===================================================================
189
- # PÁGINA 1: ANÁLISE EXPLORATÓRIA
190
- # ===================================================================
191
  if pagina_selecionada == "🔎 Análise Exploratória":
192
  st.title("🔎 Análise Exploratória dos Dados de Coleta")
193
  st.markdown("O primeiro passo para uma projeção robusta é entender o passado. Aqui, exploramos os dados históricos de coleta para identificar padrões, tendências e pontos de atenção.")
194
  st.divider()
195
 
196
- # Layout de colunas e seus conteúdos estão DENTRO do IF
197
  col1, col2 = st.columns(2)
198
  with col1:
199
  st.subheader("Coleta Mensal por Material (2024)")
@@ -232,10 +227,6 @@ if pagina_selecionada == "🔎 Análise Exploratória":
232
  st.plotly_chart(fig_evol_coleta, use_container_width=True)
233
  st.warning("**Observação:** A queda na coleta em 2023, principalmente em Plástico, é um ponto crítico. É crucial investigar se isso reflete a realidade operacional ou uma anomalia nos dados antes de basear decisões estratégicas nessas projeções.")
234
 
235
-
236
- # ===================================================================
237
- # PÁGINA 2: SIMULAÇÃO DE FATURAMENTO
238
- # ===================================================================
239
  elif pagina_selecionada == "🎯 Simulação de Faturamento":
240
  st.title("🎯 Simulação e Projeção de Faturamento Anual")
241
  st.markdown("Utilizando a técnica de *bootstrapping*, simulamos 2.000 possíveis anos de faturamento com base na volatilidade histórica e nas premissas de preço e eficiência definidas.")
@@ -284,10 +275,6 @@ elif pagina_selecionada == "🎯 Simulação de Faturamento":
284
  fig_comp.update_layout(legend_title_text='Material', plot_bgcolor='white', font_color='#333')
285
  st.plotly_chart(fig_comp, use_container_width=True)
286
 
287
-
288
- # ===================================================================
289
- # PÁGINA 3: ANÁLISE DE VIABILIDADE
290
- # ===================================================================
291
  elif pagina_selecionada == "📊 Análise de Viabilidade":
292
  st.title("📊 Análise de Viabilidade Financeira e Risco")
293
  st.markdown("Esta é a etapa final, onde combinamos as projeções de receita com as premissas de investimento e custos para avaliar a viabilidade do projeto sob a ótica de risco.")
@@ -367,7 +354,22 @@ elif pagina_selecionada == "📊 Análise de Viabilidade":
367
  st.markdown("---")
368
  st.markdown("#### Detalhes da Análise:")
369
  conclusoes = []
370
- if vpl >= 0: conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[2]};'>✔</span> **Viabilidade Financeira:** O projeto é considerado **VIÁVEL** com um VPL de **{formatar_brl(vpl)}**.</li>")
371
- else: conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[3]};'>❌</span> **Viabilidade Financeira:** O projeto é **INVIÁVEL** com um VPL negativo de **{formatar_brl(vpl)}**.</li>")
372
- if not pd.isna(tir) and tir > taxa_desconto: conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[2]};'>✔</span> **Atratividade do Retorno:** A TIR de **{formatar_percentual(tir)}** supera a TMA de {formatar_percentual(taxa_desconto)}, reforçando a atratividade.</li>")
373
- else: conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[3]};'>❌</span> **Atratividade do
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  """, unsafe_allow_html=True)
86
 
87
 
88
+ # --- 3. DEFINIÇÃO DAS FUNÇÕES GLOBAIS ---
89
  def formatar_brl(valor): return f"R$ {valor:,.2f}"
90
  def formatar_percentual(valor): return f"{valor:.2%}" if pd.notna(valor) and not np.isinf(valor) else "N/A"
91
  def calcular_vpl(fluxo_caixa, taxa_desconto):
 
129
  fluxo_caixa.append(fluxo_liquido_ano)
130
  return fluxo_caixa
131
 
132
+ # --- 4. CARREGAMENTO DE DADOS ---
133
  @st.cache_data
134
  def carregar_dados():
135
  meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
 
184
 
185
 
186
  # --- 6. LÓGICA DE RENDERIZAÇÃO DAS PÁGINAS ---
 
 
 
 
187
  if pagina_selecionada == "🔎 Análise Exploratória":
188
  st.title("🔎 Análise Exploratória dos Dados de Coleta")
189
  st.markdown("O primeiro passo para uma projeção robusta é entender o passado. Aqui, exploramos os dados históricos de coleta para identificar padrões, tendências e pontos de atenção.")
190
  st.divider()
191
 
 
192
  col1, col2 = st.columns(2)
193
  with col1:
194
  st.subheader("Coleta Mensal por Material (2024)")
 
227
  st.plotly_chart(fig_evol_coleta, use_container_width=True)
228
  st.warning("**Observação:** A queda na coleta em 2023, principalmente em Plástico, é um ponto crítico. É crucial investigar se isso reflete a realidade operacional ou uma anomalia nos dados antes de basear decisões estratégicas nessas projeções.")
229
 
 
 
 
 
230
  elif pagina_selecionada == "🎯 Simulação de Faturamento":
231
  st.title("🎯 Simulação e Projeção de Faturamento Anual")
232
  st.markdown("Utilizando a técnica de *bootstrapping*, simulamos 2.000 possíveis anos de faturamento com base na volatilidade histórica e nas premissas de preço e eficiência definidas.")
 
275
  fig_comp.update_layout(legend_title_text='Material', plot_bgcolor='white', font_color='#333')
276
  st.plotly_chart(fig_comp, use_container_width=True)
277
 
 
 
 
 
278
  elif pagina_selecionada == "📊 Análise de Viabilidade":
279
  st.title("📊 Análise de Viabilidade Financeira e Risco")
280
  st.markdown("Esta é a etapa final, onde combinamos as projeções de receita com as premissas de investimento e custos para avaliar a viabilidade do projeto sob a ótica de risco.")
 
354
  st.markdown("---")
355
  st.markdown("#### Detalhes da Análise:")
356
  conclusoes = []
357
+ if vpl >= 0:
358
+ conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[2]};'>✔</span> **Viabilidade Financeira:** O projeto é considerado **VIÁVEL** com um VPL de **{formatar_brl(vpl)}**.</li>")
359
+ else:
360
+ conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[3]};'>❌</span> **Viabilidade Financeira:** O projeto é **INVIÁVEL** com um VPL negativo de **{formatar_brl(vpl)}**.</li>")
361
+
362
+ if not pd.isna(tir) and tir > taxa_desconto:
363
+ conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[2]};'>✔</span> **Atratividade do Retorno:** A TIR de **{formatar_percentual(tir)}** supera a TMA de {formatar_percentual(taxa_desconto)}, reforçando a atratividade.</li>")
364
+ else:
365
+ # ESTA É A LINHA CORRIGIDA
366
+ conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[3]};'>❌</span> **Atratividade do Retorno:** A TIR de **{formatar_percentual(tir)}** é inferior à TMA, um forte indicador contra o projeto.</li>")
367
+
368
+ if prob_viabilidade > 0.75:
369
+ conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[2]};'>✔</span> **Análise de Risco:** A simulação aponta uma **alta probabilidade de sucesso de {formatar_percentual(prob_viabilidade)}**, conferindo robustez à decisão.</li>")
370
+ elif prob_viabilidade > 0.5:
371
+ conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[1]};'>⚠️</span> **Análise de Risco:** A probabilidade de sucesso de **{formatar_percentual(prob_viabilidade)} é moderada**, indicando sensibilidade às variações.</li>")
372
+ else:
373
+ conclusoes.append(f"<li><span style='color: {PALETA_CORES_PROFISSIONAL[3]};'>❌</span> **Análise de Risco:** A probabilidade de sucesso de **{formatar_percentual(prob_viabilidade)} é baixa**, indicando um risco elevado.</li>")
374
+
375
+ st.markdown("<ul>" + "".join(conclusoes) + "</ul>", unsafe_allow_html=True)