New notebooks: Scenario without current spend, VA scenario

This commit is contained in:
2026-07-13 16:32:18 -04:00
parent e88449d15a
commit cbbc9ba839
8 changed files with 19078 additions and 3964 deletions

View File

@@ -25,11 +25,12 @@ def test_verbatim_crossfoots_to_slide_totals():
a4.crossfoot_tolerance(a4.SLIDE_TOTALS["total_3yr"])
def test_benefits_phase_on_the_deck_schedule():
def test_benefits_phase_on_the_pm_schedule():
_, _, benefit_rollout = a4.build_rollouts(SITES)
long = a4.benefits_by_year(benefit_rollout)
by_year = long.groupby("year")["benefit"].sum()
assert by_year[2026] == 0.0, "2026 must be $0 under Genesys's own schedule"
# Earliest region (NA) realizes Jan 2027 → 2026 still $0.
assert by_year[2026] == 0.0, "2026 must be $0 (NA realizes Jan 2027)"
# Scaling at the finest grain reproduces every verbatim 3-yr value exactly.
for (region, cap), (_, three_yr) in a4.VERBATIM_BENEFITS.items():
got = long.query("region == @region and capability == @cap")["benefit"].sum()
@@ -65,16 +66,18 @@ def test_token_hand_checks():
long = a4.token_costs_by_year(SITES, meters, DEFAULT_PRICING,
a4.claim_scenario(0.255), core, email,
token_ro, email_ro)
# STA 2028: NAM/AUZ/EMEA × 12 months + ASIA × 10 months, by hand.
# STA 2028: every site live all 12 months under the compressed PM
# timeline (APAC live from Nov 2027) → full-year STA for all sites.
sta = long.query("cost_line == 'Speech & Text Analytics [named]'")
assert sta.query("year == 2028")["annual_cost"].sum() == pytest.approx(715_800)
assert sta.query("year == 2028")["annual_cost"].sum() == pytest.approx(751_680)
# Agent Copilot 2028 (ASIA off): 1,490 users × 40 tokens × 12 months.
cp = long.query("cost_line == 'Agent Copilot [named]' and year == 2028")
assert cp["annual_cost"].sum() == pytest.approx(1_490 * 40 * 12)
# Rule 1: Copilot covers AI Summary at Copilot sites.
assert (long.query("cost_line == 'AI Summary & Insights'")["annual_cost"] == 0).all()
# Nothing is live in 2026.
assert long.query("year == 2026")["annual_cost"].sum() == 0
# Under the PM timeline NA goes live Oct 2026, so tokens DO accrue in
# 2026 (NA only — three live months); no longer a $0 year.
assert long.query("year == 2026")["annual_cost"].sum() == pytest.approx(424_350)
# PR NAM steady-month tokens.
assert math.ceil(
1_214_358 * DEFAULT_METERS["Predictive Routing"].tokens_per_unit) == 71_433
@@ -130,8 +133,8 @@ def test_sow_milestones_and_managed_services():
assert ps[2028] == 0.0
# The deck's verbatim year-1 lump stays intact for the as-pitched frame.
assert a4.ps_costs_by_year() == {2026: 2_567_000, 2027: 0.0, 2028: 0.0}
# Managed services bill from the month after MCX go-live (Sep 30 → Oct).
# Managed services bill from the month after MCX go-live (Oct 16 → Nov).
ms = a4.managed_services_by_year()
assert ms[2026] == pytest.approx(410_918.40 * 3 / 12)
assert ms[2026] == pytest.approx(410_918.40 * 2 / 12)
assert ms[2027] == pytest.approx(410_918.40)
assert ms[2028] == pytest.approx(410_918.40)