Wealth Management
Long-term wealth building, investment analytics, and financial planning engine.
Builds on finance-substrate for data ingestion (bank certificates, patrimonio,
TRM rates, salary history) and adds forward-looking projection, optimization,
and scenario analysis.
Architecture
finance-substrate (data layer)
├── certificates.jsonl → current holdings, bank saldos
├── patrimonio_calc.py → net worth snapshot (R29/R30/R31)
├── tax_projection.py → annual tax liability
├── salary-history.jsonl → income trajectory
└── trm-history.jsonl → FX rates
↓
wealth-management (analytics layer)
├── Descriptive: portfolio health, allocation drift, performance
├── Predictive: compound growth, Monte Carlo, goal feasibility
└── Prescriptive: rebalancing trades, contribution strategy, withdrawal order
Data Sources
From finance-substrate (automatic)
| Source |
Data |
Used by |
certificates.jsonl |
Bank saldos, pension funds, cesantías, investment funds |
All modes |
exogena.jsonl |
Real estate (Marval), vehicle, stocks (Ecopetrol) |
summary, project |
salary-history.jsonl |
Income trajectory (monthly USD + TRM) |
project, goal |
patrimonio_calc.py |
Net worth aggregation (deduplication) |
summary, project |
trm-history.jsonl |
USD/COP exchange rates |
FX conversion |
User-provided (portfolio input)
| Source |
Format |
Data |
| Investment holdings |
JSON/CSV |
Ticker, units, cost basis, account type |
| Target allocation |
JSON |
Asset class → target % |
| Goals |
JSON |
Name, target amount, target date, priority |
Portfolio data stored at ~/.wealth-management/portfolio.json.
Skill Modes
Four modes are live (scripts shipped): summary, project, goal, scenario.
Three modes are Planned (design documented below, scripts not yet shipped):
allocation, rebalance, optimize. Planned modes are not in skill.json's
mode enum and have no runnable command yet.
1. summary — Portfolio Health Dashboard (Descriptive)
Current-state analysis of all holdings aggregated from finance-substrate
and user portfolio data.
Script: scripts/portfolio_summary.py --year 2025
Outputs:
- Net worth breakdown by asset class (cash, fixed income, equities, real estate, pension)
- Allocation pie: actual vs target %
- Concentration risk: any single position > 20% of portfolio
- Currency exposure: COP vs USD vs other
- Year-over-year growth: patrimonio líquido trajectory
- Liquidity analysis: liquid vs illiquid assets
2. project — Compound Growth Projection (Predictive)
Forward-looking wealth projection with configurable assumptions.
Script: scripts/project_wealth.py --years 20 --monthly-contribution-usd 2000
Inputs:
- Starting capital (from patrimonio or manual)
- Monthly/annual contribution amount
- Expected real return by asset class (default: equities 7%, bonds 3%, RE 5%)
- Inflation assumption (Colombia CPI: ~5-7%, US CPI: ~2-3%)
- Tax drag (from finance-substrate effective rate)
- TRM trend assumption (mean-reverting to historical average)
Outputs:
- Year-by-year table: contributions, growth, taxes, net value
- Milestones: when you hit $100M, $500M, $1B COP or $100K, $500K, $1M USD
- Contribution vs growth ratio over time (crossover point)
- Inflation-adjusted purchasing power
- Sensitivity table: ±2% return scenarios
Formulas:
FV = PV × (1 + r)^n + PMT × [((1+r)^n - 1) / r]
Real return = nominal - inflation - tax_drag
CAGR = (Ending / Beginning)^(1/Years) - 1
3. goal — Goal-Based Financial Planning (Predictive)
Reverse-engineer: given a target, what's needed?
Script: scripts/goal_planner.py --target-usd 500000 --target-date 2035
Inputs:
- Target amount (COP or USD)
- Target date
- Current savings (from patrimonio)
- Risk tolerance (conservative / moderate / aggressive)
- Income growth assumption
Outputs:
- Required monthly savings (COP + USD)
- Required return rate to meet goal with current savings only
- Probability of success (linked to Monte Carlo)
- Gap analysis: on track / behind / ahead
- Recommended asset allocation for the goal's time horizon
4. allocation — Asset Allocation Strategy (Prescriptive) — Planned
Recommend an optimal asset allocation based on risk profile and time horizon.
Status: Planned — allocate_assets.py is not yet shipped. The design below
is the intended contract; there is no runnable command for this mode yet.
Framework: Modified Bogle Three-Fund + Colombian Extensions
| Risk Profile |
Equities |
Fixed Income |
Real Estate |
Cash/AFC |
| Conservative |
30% |
50% |
10% |
10% |
| Moderate |
55% |
25% |
10% |
10% |
| Aggressive |
75% |
10% |
10% |
5% |
Colombian-specific considerations:
- AFC cuenta as cash/fixed income (tax-deferred, housing-eligible)
- Pensión voluntaria (Skandia) = long-term equity proxy (10yr lock)
- Cesantías = forced savings (annual withdrawal allowed)
- Colombian equities (BVC) vs international via DolarApp/ARQ or US brokerage
- TRM hedging: maintain USD reserves for FX diversification
Outputs:
- Target allocation table
- Current vs target delta
- Rebalancing trades needed
- Tax impact of rebalancing (from finance-substrate tax projection)
5. rebalance — Tactical Rebalancing (Prescriptive) — Planned
Generate specific trades to bring portfolio back to target.
Status: Planned — rebalance.py is not yet shipped. The design below is the
intended contract; there is no runnable command for this mode yet.
Inputs:
- Current holdings (from portfolio.json + certificates)
- Target allocation (from allocation mode or manual)
- Drift threshold (default: 5% absolute deviation triggers rebalance)
- Tax sensitivity (minimize realized gains)
Outputs:
- Trades to execute (buy/sell, amount, account)
- Tax impact estimate (short-term vs long-term gains)
- Priority order (tax-loss harvest first, then rebalance)
- "Do nothing" zones where drift is within tolerance
6. scenario — Monte Carlo & Stress Testing (Predictive)
Simulate portfolio outcomes under uncertainty.
Script: scripts/scenario_analysis.py --simulations 10000 --years 20
Scenarios:
- Monte Carlo: 10,000 simulations with log-normal returns, historical volatility
- Historical stress: 2008 GFC, 2020 COVID, 2022 rate hike, 1999 Colombian crisis
- COP devaluation: TRM shock (+30%, +50%)
- Stagflation: High inflation (10%) + low growth (0%) for 5 years
- Career disruption: 0 income for 6-12 months
Outputs:
- Success probability (% of simulations meeting goal)
- Percentile outcomes: P10, P25, P50, P75, P90
- Worst-case scenario: minimum portfolio value
- Sequence-of-returns risk: early vs late bear market impact
- Safe withdrawal rate for given success probability
7. optimize — Tax-Efficient Strategy (Prescriptive) — Planned
Maximize after-tax wealth growth using Colombian tax law.
Status: Planned — optimize_strategy.py is not yet shipped. The design below
is the intended contract; there is no runnable command for this mode yet.
Strategies analyzed:
Contribution ordering: AFC vs voluntaria vs libre inversión
- AFC: tax-deferred, 10yr lock or housing withdrawal
- Voluntaria: tax-deferred, 10yr lock or pension age
- Libre: no tax benefit, full liquidity
- Decision depends on marginal tax rate and cap utilization (1,340 UVT)
Account type placement: Which assets in which account?
- High-growth (equities) → tax-deferred (voluntaria/AFC) for tax-free compounding
- Income-producing (bonds, rendimientos) → taxable, claim INCR deduction
- International (USD equities) → DolarApp/ARQ for FX diversification
Withdrawal sequencing (for wealth distribution phase):
- Taxable accounts first (lower tax rate on capital gains)
- AFC for housing needs (tax-free withdrawal)
- Voluntaria after 10yr + pension age (tax-free)
- Cesantías annually (forced, taxable)
Tax-loss harvesting: Identify positions with unrealized losses to offset gains
Outputs:
- Optimal contribution plan (monthly amounts by account)
- Account placement recommendations
- 5-year after-tax growth comparison: optimized vs naive
- Marginal benefit table (extra $1M COP in each account → after-tax impact)
Integration with finance-substrate
wealth-management imports directly from finance-substrate scripts:
# Import patrimonio for current net worth
from patrimonio_calc import compute_patrimonio
# Import tax projection for effective rates
from tax_projection import project_tax
# Import budget for contribution capacity
from budget_planner import estimate_annual_tax
# Read salary trajectory
salary = load_jsonl("~/.finance-substrate/tax/salary-history.jsonl")
Data Directory
~/.wealth-management/
├── portfolio.json # Current holdings (user-maintained)
├── targets.json # Target allocation profiles
├── goals.json # Financial goals with timelines
├── projections/ # Saved projection results
│ └── projection-YYYY-MM-DD.json
├── scenarios/ # Monte Carlo results
│ └── scenario-YYYY-MM-DD.json
└── history/ # Net worth snapshots over time
└── networth-history.jsonl
References
Key Formulas
| Formula |
Expression |
Use |
| Future Value |
FV = PV(1+r)^n + PMT[((1+r)^n - 1)/r] |
Compound growth |
| CAGR |
(FV/PV)^(1/n) - 1 |
Historical return |
| Real Return |
(1+nominal)/(1+inflation) - 1 |
Purchasing power |
| Sharpe Ratio |
(R_p - R_f) / σ_p |
Risk-adjusted return |
| Safe Withdrawal |
Annual spend / Portfolio value |
Distribution phase |
| Tax Drag |
r_nominal × effective_tax_rate |
After-tax return |
| Rule of 72 |
72 / r |
Years to double |
Colombian-Specific Parameters
| Parameter |
Value |
Source |
| UVT 2025 |
$49,799 COP |
DIAN |
| AFC/VP cap |
1,340 UVT ($66.7M) |
Art. 336, Ley 2277/2022 |
| Pensión oblig. rate |
16% of IBC |
Ley 797/2003 |
| Colombian CPI (2024) |
~6.1% |
DANE |
| US CPI (2024) |
~2.9% |
BLS |
| Avg TRM 2025 |
~4,052 COP/USD |
datos.gov.co |
| BVC COLCAP return (5yr avg) |
~8-12% nominal |
BVC |
| S&P 500 return (10yr avg) |
~12% nominal |
Historical |
| CDT rates (2024) |
~10-13% nominal |
Banks |
| FIC (fondos inversión colectiva) |
~7-10% nominal |
Skandia/Davivienda |
Asset Class Expected Returns (Real, After Inflation)
| Asset Class |
Conservative |
Moderate |
Aggressive |
| Colombian equities (BVC) |
3% |
5% |
7% |
| US equities (S&P 500) |
5% |
7% |
9% |
| Colombian CDT/bonds |
2% |
3% |
4% |
| Real estate (Colombia) |
3% |
5% |
6% |
| Pension voluntaria (Skandia) |
3% |
5% |
7% |
| AFC (Davivienda) |
1% |
2% |
2% |
| Cash/savings |
0% |
0% |
0% |
Compound: Autoany Integration (EGRI)
This skill is EGRI-aware. When a user's request implies iterative optimization
of savings strategies, contribution plans, or investment horizons, the agent
should scaffold a problem-spec and delegate to /autoany.
Optimization Triggers
Invoke /autoany when the user asks to:
- "Optimize contributions" — AFC vs pension vs brokerage split
- "Maximize probability" — probability of reaching a financial goal
- "Best allocation for my goals" — multi-horizon allocation
- "How should I split my savings" — tax-efficient contribution ordering
- "Run simulations" — with optimization intent (not just a single run)
- "Stress test my plan" — combined with finding a better plan
EGRI Problem-Spec Templates
| Template |
Artifact |
Evaluator |
Score |
Use When |
contribution-optimization |
contribution_plan.yaml |
scenario_analysis.py --egri |
P(goal) |
Optimizing savings splits |
horizon-evaluation |
horizon_plan.yaml |
scenario_analysis.py --egri |
Risk-adjusted P(all goals) |
Multi-goal allocation |
Templates are at templates/egri/.
Delegation Flow
1. User request → agent detects optimization intent
2. Load personal context:
- patrimonio from finance-substrate (starting capital)
- salary trajectory (budget constraint)
- TRM rates (COP/USD conversion)
- existing goals from ~/.wealth-management/goals.json
3. Scaffold problem-spec from template
4. Invoke /autoany
5. EGRI loop: Proposer → Executor (scenario_analysis.py) → Evaluator → Selector
6. Return promoted plan + ledger summary
7. Show concrete action items:
- "Increase AFC contributions to $X/month"
- "Shift 10% from fixed income to equities in retirement bucket"
EGRI Evaluator Bridge
scenario_analysis.py --egri outputs structured Outcome for autoany:
- Score:
probability_of_goal_pct (0-100)
- Constraints:
median_max_drawdown_pct > -25, probability_of_ruin_pct <= 5
- Metrics: full Monte Carlo statistics for the proposer to learn from
Safety Constraints (enforced in EGRI loops)
- All simulations use historical/synthetic data only (no live data risk)
- Contribution plans are advisory — no automatic financial actions
- AFC + pensión voluntaria combined cap: 1,340 UVT (~$66.7M COP)
- Monthly contribution cannot exceed income
- Ruin probability must stay below 5%
- Budget: 20-40 trials max, 10-40 minutes total
Related Skills
- finance-substrate — Data layer: bank certificates, patrimonio, tax projection, salary history, TRM rates
- investment-management — Execution layer: security screening, scoring, market data, trade execution, factor analysis, backtesting
- autoany — EGRI framework for recursive improvement loops
Dependencies
- Python 3.10+
finance-substrate skill (data layer — certificates, patrimonio, tax, salary)
autoany (optional, for EGRI optimization loops)
numpy (optional, for Monte Carlo simulations)
- No paid services. All data stays local.
File Structure
wealth-management/
├── SKILL.md # This file
├── skill.json # Schema definition (4 live modes)
├── scripts/ # 4 shipped scripts (modes 4/5/7 Planned)
│ ├── portfolio_summary.py # Mode 1: descriptive dashboard
│ ├── project_wealth.py # Mode 2: compound growth projection
│ ├── goal_planner.py # Mode 3: goal-based planning
│ └── scenario_analysis.py # Mode 6: Monte Carlo & stress tests
├── references/
│ ├── compounding-formulas.md # Mathematical foundations
│ └── colombian-investment-landscape.md # Local market reference
├── templates/
│ └── egri/ # EGRI problem-spec templates (autoany)
│ ├── contribution-optimization.yaml # Savings split optimization
│ └── horizon-evaluation.yaml # Multi-goal horizon allocation
└── README.md
1---2name: wealth-management3description: Wealth management, financial planning, and investment analytics skill. Compounds on finance-substrate for Colombian tax-optimized wealth building. Runs descriptive (portfolio health), predictive (compound growth projections, Monte Carlo), and prescriptive (allocation, rebalancing, tax-efficient withdrawal) analytics. Use when: (1) projecting long-term wealth growth, (2) optimizing asset allocation, (3) running scenario/stress tests on a portfolio, (4) planning tax-efficient contributions or withdrawals, (5) generating a wealth dashboard or net worth timeline, (6) goal-based financial planning (retirement, housing, education). Triggers on: 'wealth management', 'compound interest', 'asset allocation', 'portfolio projection', 'net worth forecast', 'retirement planning', 'investment strategy', 'rebalancing', 'monte carlo', 'financial plan'.4---56# Wealth Management78Long-term wealth building, investment analytics, and financial planning engine.9Builds on `finance-substrate` for data ingestion (bank certificates, patrimonio,10TRM rates, salary history) and adds forward-looking projection, optimization,11and scenario analysis.1213## Architecture1415```16finance-substrate (data layer)17 ├── certificates.jsonl → current holdings, bank saldos18 ├── patrimonio_calc.py → net worth snapshot (R29/R30/R31)19 ├── tax_projection.py → annual tax liability20 ├── salary-history.jsonl → income trajectory21 └── trm-history.jsonl → FX rates22 ↓23wealth-management (analytics layer)24 ├── Descriptive: portfolio health, allocation drift, performance25 ├── Predictive: compound growth, Monte Carlo, goal feasibility26 └── Prescriptive: rebalancing trades, contribution strategy, withdrawal order27```2829## Data Sources3031### From finance-substrate (automatic)3233| Source | Data | Used by |34|--------|------|---------|35| `certificates.jsonl` | Bank saldos, pension funds, cesantías, investment funds | All modes |36| `exogena.jsonl` | Real estate (Marval), vehicle, stocks (Ecopetrol) | `summary`, `project` |37| `salary-history.jsonl` | Income trajectory (monthly USD + TRM) | `project`, `goal` |38| `patrimonio_calc.py` | Net worth aggregation (deduplication) | `summary`, `project` |39| `trm-history.jsonl` | USD/COP exchange rates | FX conversion |4041### User-provided (portfolio input)4243| Source | Format | Data |44|--------|--------|------|45| Investment holdings | JSON/CSV | Ticker, units, cost basis, account type |46| Target allocation | JSON | Asset class → target % |47| Goals | JSON | Name, target amount, target date, priority |4849Portfolio data stored at `~/.wealth-management/portfolio.json`.5051## Skill Modes5253Four modes are **live** (scripts shipped): `summary`, `project`, `goal`, `scenario`.54Three modes are **Planned** (design documented below, scripts not yet shipped):55`allocation`, `rebalance`, `optimize`. Planned modes are not in `skill.json`'s56`mode` enum and have no runnable command yet.5758### 1. `summary` — Portfolio Health Dashboard (Descriptive)5960Current-state analysis of all holdings aggregated from finance-substrate61and user portfolio data.6263**Script:** `scripts/portfolio_summary.py --year 2025`6465**Outputs:**66- Net worth breakdown by asset class (cash, fixed income, equities, real estate, pension)67- Allocation pie: actual vs target %68- Concentration risk: any single position > 20% of portfolio69- Currency exposure: COP vs USD vs other70- Year-over-year growth: patrimonio líquido trajectory71- Liquidity analysis: liquid vs illiquid assets7273### 2. `project` — Compound Growth Projection (Predictive)7475Forward-looking wealth projection with configurable assumptions.7677**Script:** `scripts/project_wealth.py --years 20 --monthly-contribution-usd 2000`7879**Inputs:**80- Starting capital (from patrimonio or manual)81- Monthly/annual contribution amount82- Expected real return by asset class (default: equities 7%, bonds 3%, RE 5%)83- Inflation assumption (Colombia CPI: ~5-7%, US CPI: ~2-3%)84- Tax drag (from finance-substrate effective rate)85- TRM trend assumption (mean-reverting to historical average)8687**Outputs:**88- Year-by-year table: contributions, growth, taxes, net value89- Milestones: when you hit $100M, $500M, $1B COP or $100K, $500K, $1M USD90- Contribution vs growth ratio over time (crossover point)91- Inflation-adjusted purchasing power92- Sensitivity table: ±2% return scenarios9394**Formulas:**95```96FV = PV × (1 + r)^n + PMT × [((1+r)^n - 1) / r]97Real return = nominal - inflation - tax_drag98CAGR = (Ending / Beginning)^(1/Years) - 199```100101### 3. `goal` — Goal-Based Financial Planning (Predictive)102103Reverse-engineer: given a target, what's needed?104105**Script:** `scripts/goal_planner.py --target-usd 500000 --target-date 2035`106107**Inputs:**108- Target amount (COP or USD)109- Target date110- Current savings (from patrimonio)111- Risk tolerance (conservative / moderate / aggressive)112- Income growth assumption113114**Outputs:**115- Required monthly savings (COP + USD)116- Required return rate to meet goal with current savings only117- Probability of success (linked to Monte Carlo)118- Gap analysis: on track / behind / ahead119- Recommended asset allocation for the goal's time horizon120121### 4. `allocation` — Asset Allocation Strategy (Prescriptive) — Planned122123Recommend an optimal asset allocation based on risk profile and time horizon.124125**Status:** Planned — `allocate_assets.py` is not yet shipped. The design below126is the intended contract; there is no runnable command for this mode yet.127128**Framework: Modified Bogle Three-Fund + Colombian Extensions**129130| Risk Profile | Equities | Fixed Income | Real Estate | Cash/AFC |131|-------------|----------|--------------|-------------|----------|132| Conservative | 30% | 50% | 10% | 10% |133| Moderate | 55% | 25% | 10% | 10% |134| Aggressive | 75% | 10% | 10% | 5% |135136**Colombian-specific considerations:**137- AFC cuenta as cash/fixed income (tax-deferred, housing-eligible)138- Pensión voluntaria (Skandia) = long-term equity proxy (10yr lock)139- Cesantías = forced savings (annual withdrawal allowed)140- Colombian equities (BVC) vs international via DolarApp/ARQ or US brokerage141- TRM hedging: maintain USD reserves for FX diversification142143**Outputs:**144- Target allocation table145- Current vs target delta146- Rebalancing trades needed147- Tax impact of rebalancing (from finance-substrate tax projection)148149### 5. `rebalance` — Tactical Rebalancing (Prescriptive) — Planned150151Generate specific trades to bring portfolio back to target.152153**Status:** Planned — `rebalance.py` is not yet shipped. The design below is the154intended contract; there is no runnable command for this mode yet.155156**Inputs:**157- Current holdings (from portfolio.json + certificates)158- Target allocation (from allocation mode or manual)159- Drift threshold (default: 5% absolute deviation triggers rebalance)160- Tax sensitivity (minimize realized gains)161162**Outputs:**163- Trades to execute (buy/sell, amount, account)164- Tax impact estimate (short-term vs long-term gains)165- Priority order (tax-loss harvest first, then rebalance)166- "Do nothing" zones where drift is within tolerance167168### 6. `scenario` — Monte Carlo & Stress Testing (Predictive)169170Simulate portfolio outcomes under uncertainty.171172**Script:** `scripts/scenario_analysis.py --simulations 10000 --years 20`173174**Scenarios:**175- **Monte Carlo:** 10,000 simulations with log-normal returns, historical volatility176- **Historical stress:** 2008 GFC, 2020 COVID, 2022 rate hike, 1999 Colombian crisis177- **COP devaluation:** TRM shock (+30%, +50%)178- **Stagflation:** High inflation (10%) + low growth (0%) for 5 years179- **Career disruption:** 0 income for 6-12 months180181**Outputs:**182- Success probability (% of simulations meeting goal)183- Percentile outcomes: P10, P25, P50, P75, P90184- Worst-case scenario: minimum portfolio value185- Sequence-of-returns risk: early vs late bear market impact186- Safe withdrawal rate for given success probability187188### 7. `optimize` — Tax-Efficient Strategy (Prescriptive) — Planned189190Maximize after-tax wealth growth using Colombian tax law.191192**Status:** Planned — `optimize_strategy.py` is not yet shipped. The design below193is the intended contract; there is no runnable command for this mode yet.194195**Strategies analyzed:**1961. **Contribution ordering:** AFC vs voluntaria vs libre inversión197 - AFC: tax-deferred, 10yr lock or housing withdrawal198 - Voluntaria: tax-deferred, 10yr lock or pension age199 - Libre: no tax benefit, full liquidity200 - Decision depends on marginal tax rate and cap utilization (1,340 UVT)2012022. **Account type placement:** Which assets in which account?203 - High-growth (equities) → tax-deferred (voluntaria/AFC) for tax-free compounding204 - Income-producing (bonds, rendimientos) → taxable, claim INCR deduction205 - International (USD equities) → DolarApp/ARQ for FX diversification2062073. **Withdrawal sequencing** (for wealth distribution phase):208 - Taxable accounts first (lower tax rate on capital gains)209 - AFC for housing needs (tax-free withdrawal)210 - Voluntaria after 10yr + pension age (tax-free)211 - Cesantías annually (forced, taxable)2122134. **Tax-loss harvesting:** Identify positions with unrealized losses to offset gains214215**Outputs:**216- Optimal contribution plan (monthly amounts by account)217- Account placement recommendations218- 5-year after-tax growth comparison: optimized vs naive219- Marginal benefit table (extra $1M COP in each account → after-tax impact)220221## Integration with finance-substrate222223wealth-management imports directly from finance-substrate scripts:224225```python226# Import patrimonio for current net worth227from patrimonio_calc import compute_patrimonio228229# Import tax projection for effective rates230from tax_projection import project_tax231232# Import budget for contribution capacity233from budget_planner import estimate_annual_tax234235# Read salary trajectory236salary = load_jsonl("~/.finance-substrate/tax/salary-history.jsonl")237```238239## Data Directory240241```242~/.wealth-management/243├── portfolio.json # Current holdings (user-maintained)244├── targets.json # Target allocation profiles245├── goals.json # Financial goals with timelines246├── projections/ # Saved projection results247│ └── projection-YYYY-MM-DD.json248├── scenarios/ # Monte Carlo results249│ └── scenario-YYYY-MM-DD.json250└── history/ # Net worth snapshots over time251 └── networth-history.jsonl252```253254## References255256### Key Formulas257258| Formula | Expression | Use |259|---------|-----------|-----|260| Future Value | `FV = PV(1+r)^n + PMT[((1+r)^n - 1)/r]` | Compound growth |261| CAGR | `(FV/PV)^(1/n) - 1` | Historical return |262| Real Return | `(1+nominal)/(1+inflation) - 1` | Purchasing power |263| Sharpe Ratio | `(R_p - R_f) / σ_p` | Risk-adjusted return |264| Safe Withdrawal | `Annual spend / Portfolio value` | Distribution phase |265| Tax Drag | `r_nominal × effective_tax_rate` | After-tax return |266| Rule of 72 | `72 / r` | Years to double |267268### Colombian-Specific Parameters269270| Parameter | Value | Source |271|-----------|-------|--------|272| UVT 2025 | $49,799 COP | DIAN |273| AFC/VP cap | 1,340 UVT ($66.7M) | Art. 336, Ley 2277/2022 |274| Pensión oblig. rate | 16% of IBC | Ley 797/2003 |275| Colombian CPI (2024) | ~6.1% | DANE |276| US CPI (2024) | ~2.9% | BLS |277| Avg TRM 2025 | ~4,052 COP/USD | datos.gov.co |278| BVC COLCAP return (5yr avg) | ~8-12% nominal | BVC |279| S&P 500 return (10yr avg) | ~12% nominal | Historical |280| CDT rates (2024) | ~10-13% nominal | Banks |281| FIC (fondos inversión colectiva) | ~7-10% nominal | Skandia/Davivienda |282283### Asset Class Expected Returns (Real, After Inflation)284285| Asset Class | Conservative | Moderate | Aggressive |286|-------------|-------------|----------|-----------|287| Colombian equities (BVC) | 3% | 5% | 7% |288| US equities (S&P 500) | 5% | 7% | 9% |289| Colombian CDT/bonds | 2% | 3% | 4% |290| Real estate (Colombia) | 3% | 5% | 6% |291| Pension voluntaria (Skandia) | 3% | 5% | 7% |292| AFC (Davivienda) | 1% | 2% | 2% |293| Cash/savings | 0% | 0% | 0% |294295## Compound: Autoany Integration (EGRI)296297This skill is EGRI-aware. When a user's request implies iterative optimization298of savings strategies, contribution plans, or investment horizons, the agent299should scaffold a problem-spec and delegate to `/autoany`.300301### Optimization Triggers302303Invoke `/autoany` when the user asks to:304- **"Optimize contributions"** — AFC vs pension vs brokerage split305- **"Maximize probability"** — probability of reaching a financial goal306- **"Best allocation for my goals"** — multi-horizon allocation307- **"How should I split my savings"** — tax-efficient contribution ordering308- **"Run simulations"** — with optimization intent (not just a single run)309- **"Stress test my plan"** — combined with finding a better plan310311### EGRI Problem-Spec Templates312313| Template | Artifact | Evaluator | Score | Use When |314|----------|----------|-----------|-------|----------|315| `contribution-optimization` | `contribution_plan.yaml` | `scenario_analysis.py --egri` | P(goal) | Optimizing savings splits |316| `horizon-evaluation` | `horizon_plan.yaml` | `scenario_analysis.py --egri` | Risk-adjusted P(all goals) | Multi-goal allocation |317318Templates are at `templates/egri/`.319320### Delegation Flow321322```3231. User request → agent detects optimization intent3242. Load personal context:325 - patrimonio from finance-substrate (starting capital)326 - salary trajectory (budget constraint)327 - TRM rates (COP/USD conversion)328 - existing goals from ~/.wealth-management/goals.json3293. Scaffold problem-spec from template3304. Invoke /autoany3315. EGRI loop: Proposer → Executor (scenario_analysis.py) → Evaluator → Selector3326. Return promoted plan + ledger summary3337. Show concrete action items:334 - "Increase AFC contributions to $X/month"335 - "Shift 10% from fixed income to equities in retirement bucket"336```337338### EGRI Evaluator Bridge339340`scenario_analysis.py --egri` outputs structured `Outcome` for autoany:341- Score: `probability_of_goal_pct` (0-100)342- Constraints: `median_max_drawdown_pct > -25`, `probability_of_ruin_pct <= 5`343- Metrics: full Monte Carlo statistics for the proposer to learn from344345### Safety Constraints (enforced in EGRI loops)346347- All simulations use **historical/synthetic data only** (no live data risk)348- Contribution plans are **advisory** — no automatic financial actions349- AFC + pensión voluntaria combined cap: 1,340 UVT (~$66.7M COP)350- Monthly contribution cannot exceed income351- Ruin probability must stay below 5%352- Budget: 20-40 trials max, 10-40 minutes total353354## Related Skills355356- **[finance-substrate](https://github.com/broomva/finance-substrate)** — Data layer: bank certificates, patrimonio, tax projection, salary history, TRM rates357- **[investment-management](https://github.com/broomva/investment-management)** — Execution layer: security screening, scoring, market data, trade execution, factor analysis, backtesting358- **[autoany](https://github.com/broomva/autoany)** — EGRI framework for recursive improvement loops359360## Dependencies361362- Python 3.10+363- `finance-substrate` skill (data layer — certificates, patrimonio, tax, salary)364- `autoany` (optional, for EGRI optimization loops)365- `numpy` (optional, for Monte Carlo simulations)366- No paid services. All data stays local.367368## File Structure369370```371wealth-management/372├── SKILL.md # This file373├── skill.json # Schema definition (4 live modes)374├── scripts/ # 4 shipped scripts (modes 4/5/7 Planned)375│ ├── portfolio_summary.py # Mode 1: descriptive dashboard376│ ├── project_wealth.py # Mode 2: compound growth projection377│ ├── goal_planner.py # Mode 3: goal-based planning378│ └── scenario_analysis.py # Mode 6: Monte Carlo & stress tests379├── references/380│ ├── compounding-formulas.md # Mathematical foundations381│ └── colombian-investment-landscape.md # Local market reference382├── templates/383│ └── egri/ # EGRI problem-spec templates (autoany)384│ ├── contribution-optimization.yaml # Savings split optimization385│ └── horizon-evaluation.yaml # Multi-goal horizon allocation386└── README.md387```