feat: add GenesysCX study and fix Streamlit chart key collisions

- Add 202512_GenesysCX TEI study (config, seed data, notebooks, README)
  with NPV $10.8M / ROI 266% including AI-token cost line
- Add explicit `key` parameter to all chart wrappers in app/components
  to prevent StreamlitDuplicateElementId errors when the same figure
  type renders across Summary/Benefits/Costs tabs
- Render benefits bar and cost pie charts on their respective tabs
- Add benefits_vs_costs_by_year chart wrapper
This commit is contained in:
2026-06-10 14:26:49 -04:00
parent ecd164ee6d
commit 64fb83257d
34 changed files with 12902 additions and 39 deletions

View File

@@ -4,6 +4,7 @@ from __future__ import annotations
import streamlit as st
from app.components import charts
from app.components.tables import df_to_values, value_editor
from app.utils import icon
@@ -50,3 +51,7 @@ def render(client: TEIClient, tool: dict) -> None:
"applied at calculate time. Use the Recalculate button in the "
"sidebar after saving to refresh the summary."
)
if values:
st.divider()
charts.benefits_bar(values, key=f"benefits_tab_bar_{public_id}")