Skip to content

Set the UC start-up period from the FRS claim and business start dates - #527

Draft
MaxGhenis wants to merge 3 commits into
mainfrom
frs-uc-startup-period
Draft

MaxGhenis wants to merge 3 commits into
mainfrom
frs-uc-startup-period

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

What

Sets policyengine-uk's person input uc_is_in_startup_period from the FRS. Until now nothing set it, so its default (false) applied to everyone and the Universal Credit minimum income floor applied from the first assessment period of every self-employed claim.

The rule

UC Regs 2013 reg 63(1), with para (a) as substituted from 23 September 2020 by SI 2019/1152 regs 1(4) and 6(1): a 12-month start-up period "applies from the beginning of the assessment period in which the Secretary of State determines that a claimant is in gainful self-employment where— (a) regulation 62 (minimum income floor) has not previously applied to the claimant in relation to the trade, profession or vocation which is currently the claimant's main employment (whether in relation to the current award or a previous award); and (b) the claimant is taking active steps to increase their earnings". Reg 62(5) keeps the floor off for those assessment periods. (legislation.gov.uk; ADM H4090, H4100-H4103.)

The pre-2020 wording ("has begun to carry on the trade ... in the 12 months preceding") limited the period to new trades. The current wording does not: an established trader who newly claims UC gets one. A special 12-month rule for managed-migration claimants (UC Transitional Provisions Regulations 2014 reg 59) was revoked on the same date, so migrants now fall under reg 63 like everyone else.

DWP determines gainful self-employment at a Gateway Interview at the start of a claim, or when a claimant reports a new trade. Nearly everyone found gainfully self-employed on a new claim gets a start-up period: of 115,000 people who first claimed UC between 30 March 2020 and 31 July 2021 and had been assessed as gainfully self-employed by March 2022, 107,000 were placed in one (written answer, UIN 155753, 25 April 2022). So in survey terms the period is running when the person is self-employed and either their benefit unit's UC claim or their trade began less than 12 calendar months before interview.

What the FRS 2024-25 supports

Field Table What it is
UCSTART BENEFITS Date the UC claim started, from DWP administrative data. Written month/day/year: the first field never exceeds 12 and the second reaches 31.
INTDATE HOUSEHOL Interview date, a SAS date (days since 1 January 1960). This gives 1 April 2024 to 11 April 2025, and DATYRAGO is 365-366 days earlier.
SEJBLONG JOB Completed years in the current self-employed job or business. Months are recorded only when the answer is 0 or 1 year, so "under a year" is SEJBLONG == 0. It is present on 98.9% of self-employed job rows.
JOBBUS, SEEND JOB Whether SEJBLONG was asked about "your current business" or "your current self-employed job"; the date a self-employed job ended.
SAMESIT, SDEMP01-12 ADULT Whether the respondent's situation changed in the last 12 months, and their activity in each month.

Checks on the raw FRS (aggregates only, cells under 10 records suppressed):

  • Linkage. 88% of UC records carry UCSTART. The other 12% have every administrative UC field blank, so they are survey reports with no linked record. The linked share is the same (88%) in every interview quarter.
  • No claims in the last five weeks. No linked claim starts within 37 days of interview, which fits a claim that is in payment.
  • No migration bump. The share of linked UC claims under 12 months old does not drift through 2024-25 (27-29% each quarter), so the cross-section shows no bump from tax credit managed migration.
  • Self-employed claimants. Adults in UC benefit units whose main job is self-employment number 516k weighted (213 records):
    • claim under 12 months old: 143k (65 records);
    • business under a year old: 29k (15 records);
    • either: 164k (76 records);
    • no linked claim date: 92k (40 records).
  • "Current self-employed job" answers. SEJBLONG asks someone not "running a business" how long they have been in their "current self-employed job". For a freelancer that can be a new engagement in an old trade, and ADM H4102 example 4 treats a hairdresser turned hairstylist as one trade. So where the person was self-employed all year (SAMESIT = 2 or every SDEMP month self-employed), such a job under a year old does not date the trade. That affects 42k (22 records) of self-employed adults.
  • Calendar is not a general check. The activity calendar disagrees with SEJBLONG == 0 for 32 of 60 "business" rows too, because it records self-defined activity rather than trade starts. So it is used only for that wording.

What the FRS cannot see:

  • Earlier UC awards. A re-claim after the floor already applied for the same trade, or a second start-up period within five years (reg 63(2)), counts as a start-up period here. That overstates it.
  • Whether the claimant is "taking active steps". Assumed met; the 107,000-of-115,000 figure above supports that.
  • Moves into the all-work-related-requirements group. DWP finds gainful self-employment only in the work-search regimes. Its guidance (V22.0, DEP2025-0769, pp. 3 and 11) applies a start-up period when a claimant moves there, "for example, due to a change in their youngest child's age". On an old claim the flag misses that. This is a model rule, so it is left to policyengine-uk.

Implementation

datasets/frs.py. Self-employed means the main job is self-employed (EMPSTATI 3/4), there is a self-employed job row still held (ETYPE 2-7, no SEEND), or self-employment profit is non-zero. That is a superset of both uk-data#525's gainful rule and policyengine-uk's own formula. The trade's age comes from the person's first self-employed job (main job first), which is the trade the period follows.

Claim inside the window:

  • Linked claims count whole calendar months from UCSTART to INTDATE.
  • UC records with no linked date are drawn at the survey-weighted share of linked self-employed claimants inside the window (0.320). The draw uses its own seeded generator, so the existing take-up draws do not move.
  • Benefit units without UC use the trade route only.

Loader. UCSTART is kept as a string column before numeric conversion, which would otherwise blank it. A missing column or an unparseable value raises, so a changed release fails the build.

datasets/imputations/income.py. SPI-synthetic copies keep their donor's flag only where their own status or imputed self-employment income still shows self-employment.

The flag is point-in-time. It says whether a period was running at interview. Across a steady population that equals the expected share of the year spent in one.

Independent of uk-data#525. No shared lines, except two hunks that are byte-identical to #525's: SELF_EMPLOYED_STATUSES and the hypothesis dev dependency. Merged locally with #525's head (dc2abf7), both files auto-merge and the 162 tests across both branches pass.

Invariants (Hypothesis property tests)

  • Self-employed only. The flag is never true without self-employment, and only with a claim or trade under a year old. Either route alone is enough.
  • Monotone.
    • An older trade never adds the flag.
    • A later claim start never removes it.
    • An earlier claim start never adds it.
    • A higher imputed share never removes it.
  • Linked claims. These ignore the draw.
  • Unlinked claims. These are drawn at the share, and a unit with no UC is never flagged.
  • Calendar months:
    • zero for the same date;
    • k whole months for a k-month offset (k − 1 where the day clips at a month end);
    • swapping the dates negates the count, less one unless the days match;
    • non-decreasing in the end date.
  • Trade age. It equals the job's age or is unknown, and is unknown only in the new-engagement case.
  • Vectorised. Results equal elementwise results.

There are also:

  • Case table. 20 end-to-end cases on raw-shaped tables, including:
    • couples, side trades, new engagements and ceased jobs;
    • two UC rows on one unit;
    • the calendar-month boundary.
  • Unlinked share: survey-weighted, per person, and over self-employed claimants only.
  • SPI copy rule.
  • Global random state. It is left alone.
  • Built-dataset check. The flag is bool and never set for children. It covers 3-25% of self-employed adults, and 20-55% of those in benefit units reporting UC.

Mutation check: 23 of 23 mutants killed (analysis/mutation_check.py). Local suite: see below.

Impact

Pending: a seeded production build of this head merged with #525 (dc2abf7), then real policyengine-uk microsimulations on #2081's head (94b7129b4) and on main (3c48247eb). This section will carry the numbers.

Merge

Part of the d833 batch (~/reviews/uk-data-release-batch-2026-10/BATCH.md). It does not need policyengine-uk#2081 to merge, because uc_is_in_startup_period is already on policyengine-uk main. On main the floor applies to any self-employment profit outside a start-up period, so this input bites there too.

🤖 Generated with Claude Code

UC Regs 2013 reg 63 (as substituted from 23.9.2020 by SI 2019/1152) gives a
self-employed claimant a 12-month start-up period from the assessment period
in which DWP determines gainful self-employment, unless the minimum income
floor has already applied to them for that trade. It is not limited to new
trades. policyengine-uk's uc_is_in_startup_period defaulted to false for
everyone, so the floor applied from the first day of every claim.

The FRS 2024-25 carries the UC claim start date from DWP administrative data
(BENEFITS.UCSTART, month/day/year) and how long each self-employed job has
run (JOB.SEJBLONG). The input is true for a self-employed adult whose benefit
unit's claim or current business began less than 12 months before interview
(HOUSEHOL.INTDATE, a SAS date). UC records not linked to admin data (12%)
are drawn at the survey-weighted share of linked self-employed claims inside
the window, from their own seeded generator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 3, 2026 07:29
- A self-employed job (JOBBUS other than "a business") under a year old,
  held by someone self-employed all year (SAMESIT = 2 or every SDEMP month
  self-employed), is a new engagement in the same trade (ADM H4102 ex. 4),
  so it no longer dates the trade.
- Self-employed jobs with SEEND (given up) no longer count.
- The 12-month window counts whole calendar months.
- UCSTART is kept as a column on the benefits table, with a clear error
  when the column is missing.
- SPI-synthetic copies keep the donor's flag only where their own status or
  imputed self-employment income still shows self-employment.
- Docstrings name the regime-transition limit (DWP decides gainful
  self-employment on entering the all-work-related-requirements group) and
  the point-in-time reading.
- Tests: calendar-month and trade-age properties, mixed couples, two UC rows
  on one unit, the share over self-employed claimants only and per person,
  the SPI copy rule, and a UC-reporter bound in the built-data check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The unlinked share reuses uc_claim_began_in_start_up_window for the
  linked claims instead of repeating the 12-month comparison.
- A missing INTDATE raises instead of turning a linked claim into an
  unlinked one.
- Docstring: the 2024-25 managed-migration overlap and the evidence that
  the under-12-month share did not rise across interview quarters; comment:
  the missing-at-random assumption for unlinked records; the SPI comment
  names the donor's status.
- Tests: the loader's UCSTART error and the INTDATE error.

Flags on the raw FRS 2024-25 are identical to 118fbf1 (222 of 34,966 rows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant