Conversation
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>
This was referenced Oct 3, 2026
- 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Sets policyengine-uk's person input
uc_is_in_startup_periodfrom 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
UCSTARTINTDATEDATYRAGOis 365-366 days earlier.SEJBLONGSEJBLONG == 0. It is present on 98.9% of self-employed job rows.JOBBUS,SEENDSEJBLONGwas asked about "your current business" or "your current self-employed job"; the date a self-employed job ended.SAMESIT,SDEMP01-12Checks on the raw FRS (aggregates only, cells under 10 records suppressed):
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.SEJBLONGasks 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 everySDEMPmonth self-employed), such a job under a year old does not date the trade. That affects 42k (22 records) of self-employed adults.SEJBLONG == 0for 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:
Implementation
datasets/frs.py. Self-employed means the main job is self-employed (EMPSTATI3/4), there is a self-employed job row still held (ETYPE2-7, noSEEND), 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:
UCSTARTtoINTDATE.Loader.
UCSTARTis 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_STATUSESand thehypothesisdev dependency. Merged locally with #525's head (dc2abf7), both files auto-merge and the 162 tests across both branches pass.Invariants (Hypothesis property tests)
There are also:
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, becauseuc_is_in_startup_periodis 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