# `accounts.srf` reference `accounts.srf` describes each account referenced by your portfolio: its tax treatment, the institution it lives at, and a few flags that tune analysis and reconciliation. It powers the **By Tax Type** and **By Account** breakdowns in [`zfin analysis`](../cli/analysis.md), the umbrella-exposure estimate, the audit staleness checks, and broker reconciliation. zfin loads `accounts.srf` from the same directory as the resolved portfolio file. It is optional -- without it, accounts show up as "Unknown" in the tax-type breakdown and everything else still works. ## File format One record per account. The `account` name must match the `account::` value used on your portfolio lots **exactly**. ```srf #!srfv1 account::Pat 401k,tax_type::traditional,institution::fidelity,account_number::P401 account::Joint taxable,tax_type::taxable,institution::schwab,account_number::JT01 ``` ## Fields | Field | Type | Required | Default | Description | |------------------------|--------|----------|-----------|----------------------------------------------------------------------------------------------------------------------------------| | `account` | string | Yes | -- | Account name; must match `account::` on lots exactly. | | `tax_type` | string | Yes | -- | `taxable`, `roth`, `traditional`, or `hsa`. | | `institution` | string | No | -- | Broker key, e.g. `fidelity`, `schwab`, `vanguard`, `wells_fargo`. Used by [`zfin audit`](../cli/audit.md) to match export files. | | `account_number` | string | No | -- | Account identifier used with `institution` for audit matching. Use a placeholder, not a full real number. | | `update_cadence` | string | No | `weekly` | How often you refresh this account's manual data: `weekly`, `monthly`, `quarterly`, or `none`. Drives the audit staleness nag. | | `cash_is_contribution` | bool | No | `false` | When `true`, raw cash-balance increases on this account count as real external contributions (see below). | | `direct_indexing` | bool | No | `false` | Marks an account whose lots track a benchmark with tracking-error drift (loosens contribution/audit tolerances). | | `shielded` | bool | No | (derived) | Umbrella-exposure override (see below). | ## Tax types | Value | Display label | |---------------|-----------------------| | `taxable` | Taxable | | `roth` | Roth (Post-Tax) | | `traditional` | Traditional (Pre-Tax) | | `hsa` | HSA (Triple Tax-Free) | Any other value is shown as-is. Accounts missing from `accounts.srf` appear as "Unknown". ## `update_cadence` and the audit nag [`zfin audit`](../cli/audit.md) (run flagless) flags accounts you haven't refreshed within their cadence window: `weekly` = 7 days, `monthly` = 30, `quarterly` = 90, `none` = never nag. The default is `weekly`, so every account reminds you until you silence it -- set `update_cadence::none` for accounts that update themselves (a live brokerage feed) or that you simply don't track closely. ## `cash_is_contribution` Most cash-balance movement is internal noise -- interest postings, dividend credits, CD coupons, settlement sweeps -- which would inflate the [`zfin contributions`](../cli/contributions.md) attribution total if counted as new money. So cash deltas are ignored by default. Set `cash_is_contribution:bool:true` only on accounts whose cash movement is dominated by external deposits (payroll ESPP accrual, direct 401k cash contributions). ## `shielded` (umbrella exposure) The umbrella-exposure estimate in [`zfin analysis`](../cli/analysis.md) splits your liquid net worth into "shielded" (retirement accounts, assumed judgment-protected) and "exposed" (taxable). The default proxy is "anything not `taxable` is shielded." Override it when that's wrong: - `shielded:bool:false` on a pre-tax account that is **not** ERISA-protected (deferred-comp plans, non-qualified annuities), or on IRAs in states with weak IRA protection. - `shielded:bool:true` to mark a taxable account as shielded (rare; e.g. some asset-protection trusts). IRA protection varies by state and is not modeled automatically; set this explicitly if it matters to you. ## Example (from `examples/pre-retirement-both`) ```srf #!srfv1 account::Pat 401k,tax_type::traditional,institution::fidelity,account_number::P401 account::Pat Roth,tax_type::roth,institution::fidelity,account_number::PROTH account::Sam 401k,tax_type::traditional,institution::vanguard,account_number::S401 account::Sam Roth,tax_type::roth,institution::vanguard,account_number::SROTH account::Joint taxable,tax_type::taxable,institution::schwab,account_number::JT01 account::Family HSA,tax_type::hsa,institution::fidelity,account_number::HSA01 account::Kids 529,tax_type::taxable,institution::vanguard,account_number::C529 ``` ## See also - [Map your accounts](../../guides/set-up-accounts.md) -- the walkthrough. - [`zfin analysis`](../cli/analysis.md) -- tax-type and account breakdowns. - [`zfin audit`](../cli/audit.md) -- staleness checks and broker reconciliation. --- [Documentation home](../../README.md#reference)