Allocation, Lots, and Selling
Every account has a target allocation. It lists each asset and the percentage of the account it should hold. The percentages always add up to 100%. How FinZot keeps an account at its target depends on whether the account is taxable.
- Tax-advantaged accounts, including Roth conversion accounts, are traded back to target at the end of every projection year. Trades in these accounts are tax-free, so they never drift from target. You cannot turn off this yearly rebalance.
- Taxable accounts are never rebalanced by FinZot on its own. Selling holdings that have gone up would realize gains, and FinZot never sells at a gain unless you told it to. These accounts drift from target, and money moving in and out pulls them back. Every buy goes to the assets furthest below target, and never pushes an asset above its target. The default sell order takes from the assets furthest above target first.
If an account holds an asset that is not in its target, FinZot treats that asset as having a 0% target. A tax-advantaged account sells it at the first year-end rebalance. A taxable account stops buying it and sells it before other assets whenever it is the asset furthest above target.
There is no plan-wide target. FinZot never moves money between accounts to reach an overall mix,
and it never chooses which account holds the bonds. A formula can read the resulting mix as
equity_allocation (planner context).
Asset Allocation Changes
Section titled “Asset Allocation Changes”There are two kinds of change you can schedule.
Update Target Allocation replaces the target in one year. By default it changes only the target, and a taxable account then drifts toward it as money moves in and out. Under Execute rebalance immediately, each account in the change has its own checkbox. Checked, FinZot also rebalances that account in the trigger year; in a taxable account this realizes gains, exactly as if you had sold the holdings yourself. The checkbox only matters for taxable accounts. Tax-advantaged accounts reach the new target at year-end either way.
Allocation Glide Path moves from a start allocation to an end allocation in equal yearly steps. You choose how many years it takes, and it must be at least 3. The first year uses the start allocation, the last year uses the end allocation, and each year in between moves the same amount closer. For example, a 5-year glide path from 80% stocks to 60% stocks sets stocks to 80%, 75%, 70%, 65%, then 60%. A glide path can only be placed on retirement accounts, which FinZot rebalances to their target at the end of every year anyway. The account’s rebalance setting therefore only decides when the year’s trades happen: set to rebalance immediately, the account is traded to the new target at the start of each glide year as well; set to retarget only, it reaches the target at year-end. The app sets glide paths to rebalance immediately.
Both kinds of change happen before any other buying or selling in the year. All of that year’s buys and sells use the new target. Any gains from an immediate rebalance are already counted before FinZot works out how much to convert or withdraw that year (how a year works).
A change can apply to one account, or to all of one person’s Roth conversion accounts at once. Applying it to the group also sets the allocation that new conversion accounts start with (contributions).
Rebalance trades do not show up in cash flow reports, because no money entered or left the account. The gains they realize do show up in the capital gains reports and in that year’s taxes.
Tax lots
Section titled “Tax lots”A taxable account tracks holdings the way a brokerage does. Each position is made up of lots, and each lot has its own cost basis and purchase year. Every buy creates a new lot, whether the money came from a contribution or from leftover cash at year-end. The lot is bought at that year’s year-end price, so a dollar invested in year N starts growing in year N+1. A lot you enter at plan start can carry the date you bought it. A lot entered without a date counts as long-term.
A lot with no cost basis entered is treated as having a basis of $0. That means the whole lot is gain, not that it has no gain. If a position has no gain, enter its basis equal to its balance. If you leave the basis blank, the full value is taxed as gain when it is sold.
How a sale picks what to sell
Section titled “How a sale picks what to sell”A sale makes two choices: which assets to sell, then which lots of those assets. You can change both choices only on withdrawals you schedule yourself. Everywhere else FinZot uses the defaults. The defaults are also what FinZot uses when it sells on its own, such as to cover a shortfall or to pay the tax on a Roth conversion. The defaults are: sell toward target, highest cost basis first.
| Choice | Default | Alternative |
|---|---|---|
| Which assets | Favor selling overweight holdings. Sells the assets furthest above target first, so raising cash also moves the account toward target. | Favor selling best lots. Sorts every lot in the account by the lot order below. Ignores the target allocation and picks lots only by tax result. |
| Which lots to sell first | Minimize gains. Sells the lots with the highest cost basis first (HIFO). | Harvest gains. Sells long-term lots with the lowest cost basis first, to raise your cost basis in a year when your tax rate is low. A lot with a date is long-term once it has been held more than a year on December 31. A lot without a date is long-term if you entered it at plan start or it was bought 2 or more projection years ago. |
A scheduled withdrawal can also set realized gain/loss limits: a maximum dollar amount of gain it may realize per year, a maximum loss, or both. Each limit can be adjusted for inflation. Selling stops exactly at the limit, and the last lot is sold in part. If both limits are set, each one is checked on its own. Limits are only available with Favor selling best lots. A limit applies only to the withdrawal it is set on. If that withdrawal falls short, later withdrawals and FinZot’s own shortfall selling can sell from the same accounts with no limit. There are two common uses. One is to harvest gains with a gain limit sized to the 0% long-term capital gains bracket. The other is to minimize gains with a loss limit, to harvest losses.
How realized gains are taxed
Section titled “How realized gains are taxed”FinZot models two capital gains rules in full and simplifies two others.
- Only a lot with a date can realize a short-term gain. A lot has a date when you enter one at plan start. Shares kept from an RSU vest are dated their vest day. FinZot dates every sale December 31, because every trade uses year-end prices. A dated lot held a year or less on that day is short-term. So a vest sold in its vest year is short-term, and in any later year it is long-term. Every lot without a date is long-term, including every buy FinZot makes. A short-term gain is taxed as ordinary income. A realized loss always counts as long-term. Short-term gains you realized this year before the plan start are entered at plan start (plan start date).
- The December 31 sale date understates some short-term tax. In reality, shares vested in October and sold the next June are short-term. FinZot cannot sell in June, so it taxes them as long-term. A lot without a date is taxed as long-term even when it was bought within the year.
- There is no wash-sale rule. Harvested losses are never disallowed. This makes aggressive loss harvesting look better than it would be in reality.
- Cost basis steps up when a spouse dies. In that projection year, the cost basis of every taxable lot moves toward its market value. The step is 100% in community-property states and 50% in common-law states. The same step applies to every lot, no matter which spouse owns the account. Lots with a loss move the same way, so their basis goes down. A stepped-up lot counts as long-term from then on. Everything else a spouse’s death changes is covered in people and life events.
You can query each lot sold and the current list of lots in the investment_lot_sale and
balance tables. The same data backs the realized gains report in the app.