Migrate Amazon Connect TEI study to the Mercury Notebook Pattern
studies/202602_AmazonConnect -> studies/202602_TEI_Amazon_Connect, rebuilt as pattern Variant 4 (TEI composite reproduction): - teicalc/ self-contained engine (stdlib-only): Forrester's tables as the never-edited verbatim anchor, NPV/ROI/payback + risk adjustment transplanted from core/calculations, ClientDrivers overlay (contacts/ agents/fixed driver map, growth re-base, identity at composite scale), scenario stress with core-identical semantics - one deliverable notebook (business_case.ipynb): widget-pair sidebar drivers, published-vs-overlay KPI columns, cash-flow/waterfall/scenario charts, verification gate, backstage JSON data appendix - gate + tests reproduce the published totals within PDF rounding: NPV $78.7M / ROI 342% / payback <6 months (engine $78,713,492 / 342.48% / 0.7 months); 27 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) deleted; git history preserves it; root test fixture repointed to teicalc.anchor - docs: study README rewritten; root README points new studies at template/MercuryNotebook; pattern doc stale ctm-token-calculator paths now cite studies/202607_CTM_GenesysCX; Variant 4 cites this study as its realized reference Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -22,11 +22,16 @@ def _env(monkeypatch):
|
||||
|
||||
@pytest.fixture
|
||||
def amazon_connect_seed():
|
||||
"""Load the Amazon Connect study's seed data."""
|
||||
sys.path.insert(0, str(ROOT / "studies" / "202602_AmazonConnect"))
|
||||
"""Load the Amazon Connect study's verbatim anchor (post-migration the
|
||||
study is self-contained; teicalc is stdlib-only, so importing it here
|
||||
needs no study venv — the row shape matches the old seed_data)."""
|
||||
from types import SimpleNamespace
|
||||
|
||||
sys.path.insert(0, str(ROOT / "studies" / "202602_TEI_Amazon_Connect"))
|
||||
try:
|
||||
import seed_data # type: ignore[import-not-found]
|
||||
return seed_data
|
||||
from teicalc import anchor # type: ignore[import-not-found]
|
||||
return SimpleNamespace(BENEFITS=anchor.BENEFITS_VERBATIM,
|
||||
COSTS=anchor.COSTS_VERBATIM)
|
||||
finally:
|
||||
# Leave the path alone — many tests will use the seed
|
||||
pass
|
||||
|
||||
@@ -65,7 +65,7 @@ class TestBuildReportData:
|
||||
|
||||
def test_envelope_shape(self, amazon_connect_seed):
|
||||
client = self._stub_client(amazon_connect_seed)
|
||||
env = build_report_data(client, "pid", study_slug="202602_AmazonConnect")
|
||||
env = build_report_data(client, "pid", study_slug="202602_TEI_Amazon_Connect")
|
||||
assert set(env) >= {
|
||||
"metadata",
|
||||
"report",
|
||||
@@ -75,7 +75,7 @@ class TestBuildReportData:
|
||||
"athena_export",
|
||||
"scenarios",
|
||||
}
|
||||
assert env["metadata"]["study_slug"] == "202602_AmazonConnect"
|
||||
assert env["metadata"]["study_slug"] == "202602_TEI_Amazon_Connect"
|
||||
assert env["metadata"]["proposal"] == 7
|
||||
assert env["values"]["benefits"]
|
||||
assert env["values"]["costs"]
|
||||
|
||||
Reference in New Issue
Block a user