Overview
Step 8 is the final step in the annual processing cycle. It rolls account balances forward, applies yearly evolution to employee data (age, service, compensation), and captures the complete year’s results.This step transforms in-progress allocations into opening balances for the next year and advances the simulation forward in time.
Core Responsibilities
Balance Rollover
Move allocated/diversified amounts to opening balances
Yearly Evolution
Age employees by 1 year, grow compensation, increment service
Remove Paid-Out Participants
Clean up fully distributed accounts
Capture Results
Store year-end snapshots and KPIs
Processing Phases
Phase 1: Roll Balances Forward
For active employees (not terminated), consolidate the year’s activity:| Field | Beginning | Step 3 Allocation | Step 6 Diversification | Year-End |
|---|---|---|---|---|
opening_shares | 1,500 | N/A | N/A | 2,000 |
allocated_shares | 0 | +500 | N/A | 0 (reset) |
diversified_shares | 0 | N/A | 0 | 0 |
Terminated employees do NOT roll balances—their accounts are frozen and distributions are handled via
pending_distributions in Step 7.Phase 2: Identify Fully Paid-Out Participants
Participants who have received all scheduled distributions are marked for removal:- Employee terminated in 2020
- 5-year distribution schedule completed in 2025
- Remaining payout: $0.00
- Result: Removed from active list after 2025
Removing fully paid-out participants keeps the simulation efficient. They’re preserved in historical snapshots but don’t participate in future processing.
Phase 3: Capture Annual Results
Create a comprehensive year-end snapshot:- ✅ Share price at year-end
- ✅ Total shares allocated this year
- ✅ Total cash allocated
- ✅ Forfeitures captured
- ✅ Distributions paid
- ✅ Active participant count
- ✅ All compliance events (audit trail)
Phase 4: Apply Yearly Evolution
For remaining active employees, advance time by one year:- Age Increment
- Service Increment
- Compensation Growth
- Structured Event
- Beginning: Age 35
- End: Age 36
This affects eligibility for diversification (age 55+) and RMD (age 73+).
Phase 5: TrustCashLedger Reconciliation
Emit a complete reconciliation of the TrustCashLedger (no investment earnings in v0.3):Data Flow
Inputs
- Employee Data (Pre-Evolution)
- Financial Assumptions
- Carry-Over State
Outputs
- Employee Data (Post-Evolution)
- Year Result
- Carry-Over State (Reset)
Compliance Events
- yearly_evolution_applied
- ledger_reconciliation
Per employee:
Edge Cases
Terminated Employees
Terminated Employees
Do NOT roll balances or evolve:
- Balances frozen at termination
- Age/service/comp don’t increment
- Distributions handled via
pending_distributions
Mid-Year Terminations
Mid-Year Terminations
Employees who terminated during year:
- Participated in Steps 1-7 with beginning-of-year data
- Do NOT evolve in Step 8
- Marked as terminated for future years
Negative Balances
Negative Balances
In rare cases, corrections might create negative balances:Floor at zero to prevent negative opening balances.
Zero Compensation Growth
Zero Compensation Growth
If no compensation growth assumption:Compensation stays flat year-over-year.
Impact on Next Year
Step 8 sets the stage for the next year’s simulation:- Opening Balances
- Vesting Percentage
- Diversification Eligibility
- RMD Enforcement
What was
allocated_shares this year becomes opening_shares next year:Year 2025 End:- opening_shares: 2,000
- allocated_shares: 0
- opening_shares: 2,000 ← from 2025 rollover
- allocated_shares: 0 ← fresh accumulator
Performance Optimization
Remove Fully Paid-Out Participants
Remove Fully Paid-Out Participants
Purpose: Reduce active employee list size over timeImpact:
- Fewer employees to iterate in Steps 1-8
- Faster projections in later years
- No loss of data (preserved in snapshots)
Reset Accumulators
Reset Accumulators
Clear year-specific accumulators to prepare for next year:
allocated_shares = 0allocated_cash = 0- OIA tracking variables reset
Batch Evolution
Batch Evolution
All employees evolved in single loop for efficiency:Vectorization opportunities if using NumPy/Pandas.
Related Steps
Step 1: Initialization
Uses evolved data from Step 8 of previous year
Step 7: Repurchase
Generates distribution data captured in Step 8
Simulation Core
How Step 8 fits into the annual cycle
TrustCashLedger
Ledger reconciliation details
Summary
Step 8 is the year-end finalization step that:- ✅ Rolls share/cash balances forward for active employees
- ✅ Identifies and removes fully paid-out participants
- ✅ Captures comprehensive year-end results and KPIs
- ✅ Applies yearly evolution (age +1, service +1, comp growth)
- ✅ Reconciles OIA ledger with sources/uses/earnings
- ✅ Reconciles TrustCashLedger movements (no earnings in v0.3)
- ✅ Resets accumulators for next year
- ✅ Emits evolution events for audit trail
After Step 8 completes, the engine is ready to loop back to Step 1 for the next year, repeating the 8-step cycle until the projection period ends.
.png?fit=max&auto=format&n=_b1oFDtC7brS6c3Z&q=85&s=d3ec56559a51e770e67aa19d77e1da67)
.png?fit=max&auto=format&n=AWN49C5ILGJ2VJNX&q=85&s=9e43d95342e1c0ca7d9eadaa6d3acb0d)