studies/202512_GenesysCX -> studies/202512_TEI_Genesys_CX_Cloud, rebuilt as pattern Variant 4 (TEI composite reproduction): - teicalc/ self-contained engine: Forrester's tables as the never-edited verbatim anchor (incl. the p.14 typo note and the $0 AI-token line), generic model/scenarios/staging carried over from the Amazon Connect study, ClientDrivers overlay (agents / weekly interactions / revenue, flat composite so no growth re-base) with ai_tokens_annual as a direct input for the token line the published study models at $0 - one deliverable notebook (business_case.ipynb): widget-pair sidebar drivers incl. the AI-token price, published-vs-overlay KPI columns, cash-flow/waterfall/scenario charts, verification gate, backstage JSON data appendix - gate + tests reproduce the published totals within $2: NPV $10.8M / ROI 266% (engine $10,783,466 / 265.79%; payback 3.3 months, not headlined in the PDF); 29 study tests, headless nbconvert green, stage simulation leak-free, exports carry the appendix - old Athena workflow (00_provision..04_export, config.py, seed_data.py, PALLADIUM_GENESYSCX_* keys, ATHENA_EXPECTED reconciliation) deleted; git history preserves it With the last legacy study migrated, the retirement lands too: - app/ (Streamlit UI) and core/notebook_helpers deleted; nothing else imported them - streamlit stripped from pyproject extras, requirements.txt, Makefile; .env.example reduced to the Athena keys; 00_setup.ipynb and core/bootstrap.py repointed at the pattern studies - root README reworked: self-contained studies + slim core/ Athena toolkit (tei_client, calculations, export, cli) All suites green: Genesys 29, Amazon Connect 27, CTM 55, template 7, root 58. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
48 lines
1.0 KiB
TOML
48 lines
1.0 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "palladium"
|
|
version = "0.1.0"
|
|
description = "TEI (Total Economic Impact) Calculator — Palladium"
|
|
readme = "README.md"
|
|
requires-python = ">=3.11"
|
|
license = {file = "LICENSE"}
|
|
authors = [{name = "NTT Data"}]
|
|
dependencies = [
|
|
"requests>=2.31",
|
|
"python-dotenv>=1.0",
|
|
"pandas>=2.0",
|
|
"plotly>=5.18",
|
|
"numpy>=1.26",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
notebooks = ["jupyter>=1.0", "ipython>=8.0"]
|
|
dev = ["pytest>=7.4", "ruff>=0.1"]
|
|
|
|
[project.scripts]
|
|
palladium = "core.cli.main:main"
|
|
|
|
[tool.setuptools.packages.find]
|
|
include = ["core*", "palladium*"]
|
|
exclude = ["tests*", "studies*", "docs*"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
addopts = "-q"
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py311"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "B", "UP", "W"]
|
|
ignore = ["E501"] # line length handled by formatter
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"studies/*/notebooks/*.ipynb" = ["E402"]
|
|
"tests/*" = ["F401"]
|