Tax Models¶
monteplan models taxes on withdrawals during retirement. Two tax models are available:
Flat Tax¶
A simple flat effective rate applied to all taxable income. Good for quick analysis or non-US users.
US Federal Tax¶
Progressive tax brackets with separate rates for ordinary income and long-term capital gains (LTCG). Bracket tables are loaded from YAML data files.
How It Works¶
- Traditional account withdrawals are taxed as ordinary income through progressive brackets
- Taxable account gains are taxed at LTCG rates (0%, 15%, or 20% depending on income)
- Roth withdrawals are tax-free
- Standard deduction is applied before bracket calculation
Filing Status¶
| Status | Standard Deduction (2024) | Bracket Widths |
|---|---|---|
single |
$14,600 | Standard |
married_jointly |
$29,200 | ~2x single |
Required Minimum Distributions (RMDs)¶
When tax_model="us_federal", the engine enforces IRS Required Minimum Distributions from traditional accounts starting at age 73. RMDs are calculated using the IRS Uniform Lifetime Table.
The RMD for a year is:
The divisor decreases with age (e.g., 26.5 at age 73, 20.2 at age 80, 12.2 at age 90).
Withdrawal Ordering¶
The withdrawal_order field controls which accounts are drawn from first:
The default order (taxable first, Roth last) is generally tax-efficient because:
- Taxable withdrawals may have low or zero tax (return of basis)
- Traditional withdrawals are taxed as ordinary income
- Roth withdrawals are always tax-free (best saved for last)
Vectorized Implementation¶
Tax calculations are fully vectorized across all paths using compute_annual_tax_vectorized(). There are no per-path Python loops in the hot path.
See Tax Math for bracket tables and calculation details.