Skip to content

UC capital: a reported financial-capital figure replaces the whole capital stock, so second-home and non-residential property drop out #2439

Closed

Description

@MaxGhenis

Blocked data PR: PolicyEngine/policyengine-uk-data#552 at f691ba15ed1d860ed16697256f3a987ac10cf48c. Pinned engine/core: 2.126.8 / 3.33.2.

Problem and ownership

benunit_reported_capital documents recorded claimant/partner savings and investments, specifically FRS TOTCAPB4. Its default in uc_reported_capital forwards that financial figure, although the latter documents a complete programme countable-capital override. uc_assessable_capital then selects it instead of all household and person sources. Thus observed financial zero suppresses both imputed second homes and nonresidential property.

The independent ingestion regression is an age-30 claimant with no earnings/rent, no savings, B4=0 and an undisregarded debt-free £50,000 second property. On identical engine dependencies main a43e8c51 assesses £50,000 and pays £0 UC; data head f691ba15 assesses £0 and pays £4,801.68. Applying the omitted sale deduction would assess £45,000, still ineligible. No-property controls are identical.

The data layer correctly records the financial observation, without summing claimant/partner amounts twice. Property is imputed later (datasets/create_datasets.py:172, datasets/imputations/wealth.py). The pinned engine currently indexes these property values and financial capital to GDP. Baking a complete figure into the shared observation would change Pension Credit too. Storing a separate complete uc_reported_capital after imputation could be a one-year workaround, but would duplicate the engine's programme valuation/allocation rules in data preparation; property changes in future simulations would again be ignored. These are reasons to fix the engine boundary rather than add a snapshot workaround in uk-data.

Requested contract and allocation convention

  1. Keep the raw shared input financial. Preserve finite nonnegative B4, B3 fallback, zero and -1 semantics. Preserve an explicitly supplied uc_reported_capital as a complete countable-capital override, including explicit zero. The engine needs separate paths for the financial observation and a complete programme override; simply adding property to every nonnegative programme override changes that existing contract.
  2. Without a complete programme override, replace only the covered financial proxy. Do not add household savings or financial corporate_wealth again when a valid FRS financial total covers them. Likewise avoid adding a claimant LISA twice when covered by that total. Retain existing missing-financial and SPI-synthetic proxy behavior.
  3. Independently retain countable other_residential_property_value and non_residential_property_value. Proposed explicit ownership convention when only household values are known: allocate each property's countable household amount in proportion to the number of claimant/partner adults in each benefit unit, across ALL such adults in the household, including units with financial observations and units not receiving UC. Do not allocate property only to units missing financial reports. This is an assumption about unobserved beneficial ownership, not a statutory ownership rule; state it in variable and parameter documentation. A complete-override unit's conventional property share is consumed by that unit, not redistributed to other units.
  4. Apply programme valuation when computing the property contribution for the assessment year, rather than when loading survey savings. Under regulation 49, where sale entails expenses, deduct 10% of current market value and then secured encumbrances, with a zero floor. Synthetic cases assume sale expenses, no debt, and no Schedule 10 disregard. The dataset currently lacks reliable asset-specific disregard/debt flags, so document those remaining approximations rather than claiming that all second homes are countable. The occupied main home remains excluded. Do not apply a blanket 10% haircut to cash savings.
  5. Define and test mixed complete-override/financial-report/missing-report households explicitly. In particular do not subtract a full override, which may include property, from a financial-only household residual. Keep property and financial allocation pools separate. Test conservation and independence from whether an unrelated benefit unit supplies its financial total. Preserve complete-override API semantics without pretending its unknown asset decomposition is observed.

Legal basis

  • UC regulation 46: capital is included except income/disregarded capital.
  • UC regulation 48 and Schedule 10: specified capital is disregarded; a second property is not automatically excluded.
  • UC regulation 49: current market/surrender value less 10% where sale expenses arise and less secured encumbrances. Read directly in this job.
  • Regulations 18 and 72 retain the £16,000 inclusive limit and £4.35 monthly tariff per started £250 over £6,000.

Acceptance evidence and release sequence

The data PR's blocker test (test_property_capital_blocker.py, in the hub's job folder for #552) uses actual MOCK FRS ingestion followed by the pinned real engine. It separates current financial/control contracts from desired property/valuation behavior. A property-positive failure at f691ba15 is expected evidence of this blocker, not a passing fix. The old main fallback also omitted the sale deduction, so a £45,000 valuation assertion is an additional legal acceptance criterion and is not claimed to pass old main.

The engine fix needs property types, mixed financial/property values, B3 fallback, multi-benefit-unit allocation, complete override zero, no financial/LISA double counting, main-home exclusion, missing-financial/SPI fallback, year-specific property changes, and existing statutory tariff boundaries. Preserve Pension Credit behavior or identify and test any intentional change separately.

After the hub opens the issue, implements/tests/releases the engine fix, uk-data can pin that release and regenerate its engine-derived tables, run the ingestion/property regressions, and refresh queue row 5 to the actual corrected head and matched main with identical dependencies/tables/frozen inputs/seeds. No dataset build is authorized until the disk pause is lifted and the hub grants fresh queue GO. PR 552 must wait; neither the property blocker nor the childcare gate is resolved by this hand-off.

Executed head evidence: 22 passed / 9 failed in the combined run. The 18 existing cases and four no-double-count/explicit-override/no-property controls passed; nine property or allocation assertions failed behaviorally. The main-FRS-only same-lock property-loss control is recorded separately in the hub's #552 hand-off.

Activity

  1. MaxGhenis commented on Oct 17, 2026

    @MaxGhenis
    CollaboratorAuthor

    Point 5's independence contract is scoped to property allocation: each unit's property share depends only on claimant/partner adult counts across all units, independently of their financial reports. Complete-override units consume their shares.

    The inherited financial convention is retained: observed financial totals reduce the household financial pool, and the residual is shared among units with neither a financial report nor a complete override. Another unit's financial report can therefore change a missing-report unit's financial capital. With £12,000 savings and no property, reports [-1, -1] give [£6,000, £6,000]; [-1, £0] give [£12,000, £0]. Adding a £6,000-reporting adult to a household with £12,000 savings and £40,000 property moves the original unit from £48,000 to £24,000: £18,000 less property plus £6,000 less financial capital.

    This residual inference predates PR #2447 and is the same on main. Changing it would make a new modelling choice beyond the property-loss fix. Round 2 documents this scope and adds intended-behaviour regression tests for both examples.

  2. MaxGhenis commented on Oct 17, 2026

    @MaxGhenis
    CollaboratorAuthor

    Correction to my round-2 scope comment: it overclaimed that round 2 retained main's complete financial convention. Excluding complete uc_reported_capital overrides from subtraction from the household financial pool was a new change in #2447. Main subtracts those overrides, and round 3 restores that behavior.

    For example, with £12,000 household savings, two one-adult benefit units and a £6,000 complete override for unit 2, main and round 3 assess [£6,000, £6,000]. Round 2 assessed [£12,000, £6,000], counting £18,000 against £12,000 held. A complete override now consumes its amount before residual financial allocation and takes precedence over the same unit's financial report; it still replaces ordinary sources before the existing regulation 77 company substitution.

    The inherited financial-only report convention remains: observed financial reports reduce the financial pool, so another unit's financial report can change a missing-report unit's financial assessment. The independence guarantee remains scoped to property allocation, which depends only on claimant/partner adult counts; complete-override units consume their property shares. Round 3 preserves that property scoping.

    Round-3 head 6cedab28f666a1ad6378b506696afc340f007831: 109 Python tests and 1,377 YAML cases passed, plus allocation probes. Certified-file 2026 caseload/spending exactly match round 2. PR #2447 remains draft for independent hub review.

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