Docs Técnicas
Pension Plans
TREA includes two pension templates for long-term accumulation products:
TREA includes two pension templates for long-term accumulation products:
IndividualPensionPlan -> one participant, one beneficiary, vesting/carencia
CorporatePensionPlan -> sponsor matching, employer vesting, forfeitureBoth contracts model plan rules, participant rights, lifecycle events, and receipts. They do not manage the underlying investment portfolio. NAV, profitability, and portfolio composition can come from an administrator, manager, oracle, TokenizedVault, or RWA Fund integration later.
Individual Pension
contracts/products/individual_pension_plan.trea models a personal retirement plan.
The lifecycle is:
initialize -> enroll -> contribute -> update_quota_value
\-> redeem after vesting
\-> request_portability after vesting
\-> pay_benefit after vestingThe participant position is tracked as internal units. Contributions move the managed token into vault_account and increase participant_units one-to-one. quota_value is informational and audit-oriented: only value_authority can publish it, and each update carries version, timestamp, and evidence.
Important views:
position()total_contributed_view()contribution_count_view()quota_value_view()quota_value_version_view()is_vested()eligible_for_redemption()vesting_ends_at()
Corporate Pension
contracts/products/corporate_pension_plan.trea extends the same model with a sponsor and employer matching.
Balances are separated:
| Balance | Meaning | |---------|---------| | participant_contributed | employee/participant money, vested immediately | | employer_contributed | sponsor matching, subject to vesting | | employer_forfeited | unvested employer amount returned to sponsor |
Matching uses match_percent_bps and match_cap_per_contribution. For example, 5000 bps means 50%; a non-zero cap limits the sponsor contribution per matching event.
Vesting And Forfeiture
Employer money vests with a cliff plus linear schedule:
before cliff -> 0% vested
between cliff/full -> linear vesting
after full -> 100% vestedIf the participant leaves before full vesting, terminate_participant() returns the unvested employer amount to the sponsor and preserves only vested employer rights plus the participant's own balance.
Portability follows the same rule: only the participant balance plus vested employer balance can move to the target plan. Unvested employer balance is forfeited back to the sponsor during portability, so no value is trapped in a terminal Ported state.
Receipts
Both plans emit PensionReceipt events for lifecycle steps:
- initialization and enrollment;
- participant contributions;
- employer matching;
- quota value updates;
- redemption;
- portability;
- benefit payment;
- closure or forfeiture.
These receipts are meant for wallets and product dashboards: the user sees "contribution", "vested employer balance", "ported out", or "benefit paid", not just an opaque contract call.
Product Boundary
The pension contract is not payroll, tax logic, or asset management. It is the governance layer for the participant's rights. This keeps the TREA surface stable while allowing different institutions to plug in their own portfolio, actuarial, or jurisdiction-specific systems around it.