Files
sure/test/fixtures/goals.yml
Guillem Arias bf0f10c21f feat(retirement): PR2 data models — pension sources, statements, bucket
Data plane for Retirement v2 (no FIRE math yet — that is PR3). Five
migrations + four AR models, wired to Goal::Retirement.

Models:
- PensionSource — state/workplace/other source with country, pension
  system, tax treatment, payout shape (string-backed + inclusion
  validations rather than PG enums, so v2 can add countries without
  ALTER TYPE). monetize :amount; end_age required for fixed-term.
- Goal::RetirementStatement — append-only audit journal. default_scope
  excludes soft-deleted rows; soft_replace! does soft-delete + insert;
  points_delta drives the "—"/signed Δ column; monetize against
  projected_currency.
- Goal::RetirementAdjustment — signed today's-money deltas to the
  spending target, ordered, applicable_at?(age).
- RetirementBucketEntry — account selection join, unique per plan,
  same-family guard.

Goal::Retirement gains the four associations + bucket_accounts and an
ADJUSTMENTS_LIMIT (10) cap. retirement_params jsonb added to goals for
PR3 plan settings.

Namespaced fixture classes mapped via set_fixture_class so the
goal_retirement association resolves. Minimal fixtures + model tests
(112 runs green, incl. goal/family/controller regression sweep). No
new gems.
2026-05-29 10:36:18 +02:00

37 lines
873 B
YAML

vacation_italy:
family: dylan_family
name: Vacation in Italy
target_amount: 5000
currency: USD
target_date: <%= 4.months.from_now.to_date %>
color: "#4da568"
state: active
emergency_fund:
family: dylan_family
name: Emergency fund
target_amount: 10000
currency: USD
color: "#6471eb"
state: active
car_paydown:
family: dylan_family
name: Paid-off car
target_amount: 8000
currency: USD
target_date: <%= 12.months.from_now.to_date %>
color: "#e99537"
state: paused
# STI subtype — owner-scoped retirement plan. Excluded from the savings
# goal routes (see Goal.savings); reachable only via RetirementController.
retirement_bob:
family: dylan_family
user_id: <%= ActiveRecord::FixtureSet.identify(:family_admin, :uuid) %>
type: Goal::Retirement
name: Bob's Retirement
target_amount: 1000000
currency: USD
state: active