Calculation catalog › Cash flow and summary

Spending one time goals annual

One-time goal spending paid during the projection year.

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

Appears in: csv (goals); chart (Spending by category "One-time goals"); cash-flow-drilldown (oneTimeGoal use line)

Calculation records

  • Annual funded one-time goals Formula record, justified by derivation

    Purpose: What this year's one-time goals actually cost, as distinct from what was intended.

    Statement: projection/internal/types/yearLedger.ts#YearExpenses.oneTimeGoals, produced by projection/internal/annualOneTimeGoalFundingPhase.ts#annualOneTimeGoalFundingPhase, is the funded nominal amount of goals in the current year. With no guardrail scheduler every goal funds exactly in its target year at amount x the cumulative inflation factor; a skipped amount is an intended-but-unfunded miss tracked separately and is not in this field. Nothing funds when nobody in the household is alive. Units: nominal USD per year. Rounding: none.

    Formula: oneTimeGoals = sum over goals with targetYear = y of amount x f

    • amount: Goal amount, today dollars (unit: usd) (domain: nonnegative)
    • f: Cumulative general-inflation factor to this year (unit: 1) (domain: positive)

    Timing: once per projection year, in goal order

    Rounding: none

    Limits:

    • Asserted at the exported phase helper with the worksheet's three goals, target years, amounts, current year, null scheduler and alive flag verbatim; the helper receives the caller's already-resolved inflation factor, so the 1.10 is supplied rather than compounded from plan assumptions
    • The worksheet's third wrong reading is a guardrail case: with no scheduler the phase reports four exact zero skip accumulators, which the test asserts, so no skipped amount can reach this field here
    • Restated 2026-09-28 under decision D-2027-ROLLOVER: a goal whose target year (and, for a movable or skippable goal, whose whole window) is before the projection start year funds nothing, as before, and the projection now names it in a warning (projection/preStartEvents.ts#preStartEvents): the goal is dated before the plan starts, so it is not counted, and if it has not happened the household moves it to the start year or later. From a 2027 start the derivation's U1 household's $30,000 car goal dated 2026 dropped out with only an editor note to say so

    Provenance: derived by codex, implemented by claude.

    Independent review: grok

    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-one-time-goals-annual.md Mutation receipt: spending-one-time-goals-annual.mutation.md

    Evidence tests: annualOneTimeGoalFundingPhase.evidence.test.ts

    Implemented in: yearLedger.ts; annualOneTimeGoalFundingPhase.ts; preStartEvents.ts

    Is the number of: spending-one-time-goals-annual

    Feeds: spending-total-annual

Records that feed this number

  • Flexible goal scheduling Model record, justified by derivation

    Purpose: Schedule and fund flexible goals within their timing, priority and budget rules.

    Statement: spending/flexibleGoals.ts#createGoalScheduler resolves each goal at most once, ordering candidates by classification, explicit priority, then original order, inflating today's-dollar cost and permitting partial funding only when its minimum percentage and budget rules are met.

    Formula: A = costToday * inflation; minimum = A * minFundingPct/100; funded = min(A,budget); unfunded = A - funded

    • costToday: Goal cost (unit: today USD) (domain: nonnegative)
    • inflation: Cumulative inflation factor (unit: nominal/today) (domain: positive)
    • budget: Available flexible funding (unit: nominal USD) (domain: nonnegative)
    • minFundingPct: Partial funding minimum (unit: percent) (domain: 0..100)

    Timing: annual scheduling; each goal resolves once

    Rounding: none; budget comparisons use half-cent epsilon

    Limits:

    • The test uses a flexible target goal during a cut so the stated budget binds. At or after target without a cut, resolveBudget returns unlimited funding; fixed goals also ignore the flexible budget. projection/internal/annualOneTimeGoalFundingPhase.ts sums per-goal funded and unfunded amounts and counts outcomes; all seven annual families are downstream aggregates, not this record's individual amounts.

    Provenance: derived by codex, implemented by codex.

    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-scheduling.md Mutation receipt: flexible-goal-scheduling.mutation.md

    Evidence tests: flexibleGoals.evidence.test.ts

    Implemented in: flexibleGoals.ts

    Feeds: flexible-goal-funded-amount-annual, flexible-goal-unfunded-amount-annual, flexible-goals-funded-count-annual, flexible-goals-partially-funded-count-annual, flexible-goals-deferred-count-annual, flexible-goals-skipped-count-annual, spending-one-time-goals-annual

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

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.