Calculation catalog › Cash flow and summary

Spending intended annual

Total spending the plan intended to fund before available cash constrained it.

Field: intendedSpending Unit: US dollars Basis: nominal dollars Computed by: Engine Status: Complete chain

Appears in: csv (intendedSpending); scenarios-page (Annual "Intended spending" and lifetime "Intended spending")

Calculation records

  • Annual intended spending with no guardrail cut Composition record, justified by derivation

    Purpose: The whole four-layer request, counted once per layer.

    Statement: projection/internal/annualExpenseSummary.ts#annualExpenseSummary publishes YearExpenses.intendedSpending as targetSpendingBase + idealSpendingBase + excessSpendingBase + skippedTargetNominal + skippedRequiredNominal + skippedIdealNominal + skippedExcessNominal. The required layer is inside targetSpendingBase, so adding the published requiredSpending on top would double-count it; ideal and excess are increments, so their bases add once each. Every skipped goal stays in its own classification layer as intended spending that never happened. Units: nominal USD per year. Rounding: none.

    Formula: intendedSpending = targetSpendingBase + idealSpendingBase + excessSpendingBase + skippedTarget + skippedRequired + skippedIdeal + skippedExcess

    • targetSpendingBase: System costs + required lifestyle + required funded goals + full target lifestyle + target funded goals (unit: usd/year) (domain: nonnegative)
    • idealSpendingBase, excessSpendingBase: Incremental ideal and excess lifestyle plus their funded goals (unit: usd/year) (domain: nonnegative)
    • skipped*: Nominal amounts of skipped goals, one per classification (unit: usd/year) (domain: nonnegative; each counted once)

    Timing: once per projection year, at the expense summary

    Rounding: none

    Limits:

    • Asserted at the annualExpenseSummary seam with the worksheet's component amounts, and cross-checked on a real simulatePlan run where the published intendedSpending equals its own year row's targetSpending plus idealSpending plus excessSpending
    • Required and target are cumulative summaries while ideal and excess are increments; adding all four published summaries double-counts the required base, which is the worksheet's second wrong reading
    • Intended spending is the no-cut request and need not equal the year's actual expenses.total

    Provenance: derived by codex, implemented by claude.

    Independent review: cursor

    Gates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass

    Worksheet: spending-intended-annual.md Mutation receipt: spending-intended-annual.mutation.md

    Evidence tests: annualExpenseSummary.evidence.test.ts

    Implemented in: annualExpenseSummary.ts

    Is the number of: spending-intended-annual

Records that feed this number

  • Annual flexible-goal outcomes: four counts and two amounts Model record, justified by derivation

    Purpose: What the goal scheduler decided this year, as the six numbers the year row publishes.

    Statement: spending/flexibleGoals.ts#createGoalScheduler visits unresolved goals by classification rank (required, target, ideal, excess), then explicit priority, then plan order, and resolves each against a hard flexible-goal budget. A fixed goal funds its inflated amount unconditionally in its target year and does NOT consume the budget. A movable or skippable goal funds fully when budget + 0.005 is at or above the inflated amount; else, when partial funding is allowed and the budget clears minFundingPct of the INFLATED amount, it partially funds for the remaining budget; else it defers while the year is before latestYear and is skipped at latestYear. projection/internal/annualOneTimeGoalFundingPhase.ts#annualOneTimeGoalFundingPhase folds those outcomes into the six counts and amounts published as projection/internal/types/result.ts#YearResult.flexibleGoals: funded and partiallyFunded both add fundedNominal to fundedAmount and unfundedNominal to unfundedAmount, a deferred goal only increments deferred, and a skipped goal adds its whole amountNominal to unfundedAmount and to its classification's skipped total. Outside guardrail mode the scheduler is absent and all six publish exactly 0 while every goal still funds in its target year. Units: counts, and nominal USD per year. Rounding: none.

    Formula: funded/partiallyFunded/deferred/skipped are outcome counts; fundedAmount = sum of fundedNominal over funded and partially funded goals; unfundedAmount = sum of unfundedNominal over those goals plus amountNominal of every skipped goal

    • amountNominal: Goal amount inflated to the year, amountTodayDollars x inflFactor (unit: usd) (domain: nonnegative)
    • budget: Hard flexible-goal budget for the year; null is unlimited (unit: usd) (domain: nonnegative or null)
    • minFundingPct: Minimum share of the inflated amount a partial funding must clear (unit: percent) (domain: 0..100)
    • EPSILON: Half-cent slack in the budget comparisons (unit: usd) (domain: 0.005)

    Timing: once per projection year, before the funding fixed point

    Rounding: none

    Limits:

    • Movable and skippable goals end the same way: one still unfunded at latestYear is skipped and its amount is folded into the layer totals, so neither is dropped from them. The model/plan.ts#GoalFlexibility comment once promised a movable goal a layer shortfall and a skippable goal a silent drop; decision D-GOAL-FLEXIBILITY (2026-09-25) kept the scheduler, and the comment now describes it. This record follows the scheduler, as the worksheet does
    • The worksheet's two cases are states annualOneTimeGoalFundingPhase produces, and the evidence drives the real phase and the real createGoalScheduler with no seam: a pull-forward year (not cutting, goals may be pulled forward), where the phase hands the scheduler the $1,700 remaining upside budget and the budget constrains the goals pulled forward before their target year; and a cutting year, where the budget is 0, goals not yet in the schedule have no outcome, and the skippable goal at its latest year skips. The first derivation paired a cutting year with a positive budget, which the completed YearResult.flexibleGoals comment rules out; it was re-derived on 2026-09-22 and re-approved by the reviewer
    • The zero-guardrail case is asserted on a real simulatePlan run instead, where the scheduler is absent: all six fields publish exactly 0 while the goal still funds and shows up in expenses.oneTimeGoals
    • A fixed goal does not consume the flexible budget; letting it do so changes every later goal's outcome, which is the worksheet's first wrong reading

    Provenance: derived by codex, implemented by claude.

    Independent review: cursor

    Gates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass

    Worksheet: flexible-goal-outcomes-annual.md Mutation receipt: flexible-goal-outcomes-annual.mutation.md

    Evidence tests: annualOneTimeGoalFundingPhase.evidence.test.ts

    Implemented in: flexibleGoals.ts; annualOneTimeGoalFundingPhase.ts; result.ts

    Is the number of: flexible-goals-funded-count-annual, flexible-goals-partially-funded-count-annual, flexible-goals-deferred-count-annual, flexible-goals-skipped-count-annual, flexible-goal-funded-amount-annual, flexible-goal-unfunded-amount-annual

    Feeds: spending-intended-annual

Engine source: engine/src/projection/internal/types/result.ts (YearResult.expenses.intendedSpending)

The evidence links on this page (each record's worksheet, mutation receipt, evidence tests and implementation, and the source links) are pinned to engine commit 2624dbdba9fd, committed 2026-10-11. The live calculation index and output-family census links point at the repository's main branch, so you can check this snapshot against them.