Skip to content

Move SUBRENT from property_income to sublet_income, after policyengine-uk reads sublet_income #508

Description

@MaxGhenis

Problem

Rent a household gets from subletting part of its home (FRS household SUBRENT) lands in the head's property_income. policyengine_uk_data/datasets/frs.py (origin/main) adds household.tentyp2.isin((5, 6)) * household.subrent, commented "Owned and subletting", to the head's property_income, along with cvpay and royyr1. Nothing populates sublet_income, which policyengine-uk defines as an input (variables/input/sublet_income.py) but reads nowhere today.

The means tests treat the two kinds of rent differently:

  • Rent from a let property the claimant does not occupy is actual income from capital. Pension Credit disregards it (SPC Regs 2002 Sch IV para 18), as does pension-age HB (HB (SPC) Regs 2006 Sch 5 para 22). The property's value counts as capital instead.
  • Rent from someone occupying part of the claimant's home counts, less £20 a week per occupier: SPC Regs reg 15(5)(i) with Sch IV para 9; HB (SPC) reg 29(1)(v) with Sch 5 para 10.

Once policyengine-uk drops property_income from the Pension Credit and HB income lists, which branch legacy-capital-derived-income does, owner-occupier sublet rent would fall out of those means tests while it sits inside property_income.

Change

Write SUBRENT to sublet_income on the household reference person instead of adding it to property_income. In the same change, update the microcosm FRS spine (packages/microcosm-build/src/microcosm/build/uk_runtime/frs_spine.py), which builds the same columns.

Order (do not move the data first)

Nothing in policyengine-uk reads sublet_income yet. If the data moves first, sublet rent drops out of income tax, HBAI net income and every means test until the model catches up. Ship in this order:

  1. A policyengine-uk release that reads sublet_income in income tax (rent-a-room receipts), HBAI income, and the PC, HB, CTR and IS means tests with the £20 per-occupier disregard. The work is in policyengine-uk branches legacy-capital-derived-income and boarder-lodger-rent; they are agreeing one disregard variable and one parameter.
  2. This data move, with a lock bump.

Notes from the SUBRENT fix (branch frs-property-losses-subrent, stacked on #503)

  • That branch makes SUBRENT count for every tenure, not only TENTYP2 5 or 6, because SubLet is asked of all households. The move should take all tenures.
  • SUBALLOW = 1 means the amount is before allowable expenses, so gross receipts; 2 means after. The FRS has no expense amount from which to rebuild gross receipts for SUBALLOW = 2, and it does not record whether the let is furnished, which rent-a-room relief requires. Document the column as "receipts as reported" and say which answers are net.
  • FRS 2024-25 has a few dozen households with SUBRENT > 0. Don't publish a tenure split, because the cells are small.
  • The tests in tests/test_frs_property_income.py (conservation and locality) would split along with the column.

Related: policyengine-uk#1954 (Pension Credit income omissions).

🤖 Generated with Claude Code

Activity

  1. MaxGhenis commented on Oct 1, 2026

    @MaxGhenis
    ContributorAuthor

    Step 1 is now split across two stacked policyengine-uk PRs:

    So the data move can follow once both are released and the lock is bumped. #2002 treats all receipts as furnished accommodation. The FRS does not say whether a let is furnished, so the column note suggested above still applies.

    🤖 Generated with Claude Code

  2. MaxGhenis commented on Oct 3, 2026

    @MaxGhenis
    ContributorAuthor

    Release gate for this move, following the round-2 review of PolicyEngine/policyengine-uk#1995 (finding 5).

    Until SUBRENT moves, #1995 drops owner-occupiers' sublet rent from the IS, HB, Pension Credit and CTR means tests instead of counting it less £20. The model side prepares the channel, but production assessments of that rent are corrected only when all of the following hold:

    1. Treat income derived from capital as capital in the legacy means tests policyengine-uk#1995 (means tests read sublet_income via legacy_benefits_home_letting_income) and #2002 (rent-a-room tax, market_income, HBAI) are both released.

    2. This move ships in the batched data release with an aggregate conservation check in its tests:

      • the total leaving property_income equals the new sublet_income total;
      • the record count is unchanged;
      • property_income falls by exactly that amount.

      Aggregates only.

    3. The policyengine-uk lock is bumped to the rebuilt artefact, and a real Microsimulation on it shows legacy_benefits_home_letting_income non-zero where SUBRENT was reported.

    The raw FRS 2024-25 support is 33 owner households reporting SUBRENT, £0.41bn a year weighted. Fewer than ten of them are in households reporting any of PC, IS, JSA, ESA, HB or CTR.

    🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions