Skip to content

Mid-tax-year starts: no way to enter year-to-date income, ISA subscriptions, or AA usage #185

Description

@williajm

From the 2026-08-12 repo-wide review (Codex), finding 1 ("Critical — mid-tax-year runs ignore year-to-date income and allowance usage"), verified against fe0f95b.

Verified behaviour. A run starting mid-tax-year prorates first-period flows (engine.py:874, engine.py:2155) but assesses only the remaining-window income against the full personal allowance and full bands (engine.py:3093-3122; TaxInput has no year-to-date fields). ISA/LISA cap usage restarts at zero each run (engine.py:2534) and the AA carry-forward pool starts empty (engine.py:1563). There is no domain-model input anywhere for year-to-date income, tax paid, ISA subscriptions made, or Annual Allowance used.

Not a bug. This is the documented §4.6 partial-first-period decision — planning.md "Accepted costs" states verbatim that "annual caps, allowances, and tax bands apply whole to the partial year — the pro-rated income of the first modelled year meets full-year bands, understating its tax slightly" — and the empty AA carry-forward pool is recorded as deliberately conservative (§4.1). The review's Critical severity is not supportable.

The trackable gap. A user who has already received a large bonus, made ISA/LISA subscriptions, or used Annual Allowance earlier in the current tax year cannot represent that. Optional year-to-date inputs (income, tax paid, ISA subscriptions, AA used) seeded into the first period would remove the first-year distortion. Impact is bounded to a fraction of one year's allowances/bands, first modelled year only.

Metadata

Metadata

Assignees

No one assigned

    Labels

    coreRegion-agnostic core engineseverity:infoDocumented simplification worth trackingsuggestionProposed enhancement, not yet adopted into the roadmap

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions