Skip to content

Commit 79af6a5

Browse files
authored
Add WTC and CTC documentation page (#771) (#1710)
Ticks off the WTC and CTC entries in #771's docs-pages todo list. Combined into one page because the two tax credits share the means-test machinery in gov.dwp.tax_credits and were jointly closed to new awards on 5 April 2025. The page covers: - the gov.dwp.tax_credits.active flag that short-circuits the entire computation from 2025-04-06, - the WTC and CTC element trees, with pointers to the per-element YAML files, - the hours test for WTC and the two-child limit + qualifying-child tests for CTC, - the shared income threshold / reduction-rate / min-benefit-floor means-test logic in tax_credits_reduction, - take-up via would_claim_WTC / would_claim_CTC, - the managed migration to Universal Credit and the reported-only state of the variables after April 2025, - references (Tax Credits Act 2002, SI 2002/2005, SI 2002/2007, HMRC end-of-scheme announcement, CBP-9984 migration briefing, HMRC tax credits statistics).
1 parent b6a168f commit 79af6a5

2 files changed

Lines changed: 124 additions & 0 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Add a documentation page covering Working Tax Credit and Child Tax Credit — both elements/hours/two-child-limit mechanics and the shared means test — with an explicit note that the scheme ended on 5 April 2025 and PolicyEngine gates the entire computation behind `gov.dwp.tax_credits.active`; ticks off the WTC and CTC entries in the #771 docs-pages todo list.
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# Working Tax Credit and Child Tax Credit
2+
3+
```{note}
4+
Working Tax Credit (WTC) and Child Tax Credit (CTC) are **legacy benefits**.
5+
They closed to new claims at various points from 2018 onwards and the
6+
scheme stopped paying ongoing awards on **5 April 2025**. PolicyEngine
7+
gates the entire tax credits computation behind
8+
`gov.dwp.tax_credits.active`, which flips to `false` from 2025-04-06. This
9+
page describes how WTC and CTC were modelled while the scheme was live.
10+
```
11+
12+
WTC and CTC were jointly administered by HMRC (and historically DWP-routed
13+
on legacy migrations). PolicyEngine UK groups them under
14+
`gov.dwp.tax_credits` because the means-test logic is shared. The
15+
combined household award is the variable `tax_credits`, which sums the
16+
two with a minimum-payment floor:
17+
18+
```python
19+
amount = wtc_pre_minimum + ctc_pre_minimum
20+
tax_credits = where(amount < min_benefit, 0, amount)
21+
```
22+
23+
Parameters live in `policyengine_uk/parameters/gov/dwp/tax_credits/` and
24+
the formulas in `policyengine_uk/variables/gov/dwp/`.
25+
26+
## Working Tax Credit (WTC)
27+
28+
WTC was paid to working-age adults whose hours and income met the
29+
eligibility test. PolicyEngine computes it via `wtc_entitlement`, which
30+
is the **maximum WTC amount** minus the shared `tax_credits_reduction`
31+
from the means test, gated by the `would_claim_WTC` take-up input.
32+
33+
### Elements (`gov.dwp.tax_credits.working_tax_credit.elements`)
34+
35+
| Element | Parameter | Notes |
36+
|---------|-----------|-------|
37+
| Basic | `basic.yaml` | Flat amount everyone meeting the hours test gets |
38+
| Couple | `couple.yaml` | Couple addition |
39+
| Lone parent | `lone_parent.yaml` | Lone-parent addition |
40+
| 30-hour | `worker.yaml` | Awarded when total hours hit the higher band |
41+
| Disabled worker | `disabled.yaml` | |
42+
| Severely disabled worker | `severely_disabled.yaml` | |
43+
| Childcare cap | `childcare_1.yaml`, `childcare_2.yaml`, `childcare_coverage.yaml` | 70% of approved childcare costs up to the weekly cap (one or two-plus children) |
44+
45+
### Hours test
46+
47+
The `min_hours` tree (`min_hours/default.yaml`, `lower.yaml`,
48+
`old_age.yaml`, `couple_with_children.yaml`) encodes the bands that gate
49+
WTC eligibility — typically 30 hours/week for adults with no kids, 16 for
50+
lone parents, with a lower band for over-60s.
51+
52+
## Child Tax Credit (CTC)
53+
54+
CTC supported families with children regardless of whether anyone in the
55+
benunit worked. PolicyEngine computes it via `ctc_entitlement`, gated by
56+
`would_claim_CTC`.
57+
58+
### Elements (`gov.dwp.tax_credits.child_tax_credit.elements`)
59+
60+
| Element | Parameter |
61+
|---------|-----------|
62+
| Family | `family_element.yaml` (extinct from 2017 for new claims) |
63+
| Per qualifying child | `child_element.yaml` |
64+
| Disabled child addition | `dis_child_element.yaml` |
65+
| Severely disabled child addition | `severe_dis_child_element.yaml` |
66+
67+
### Two-child limit
68+
69+
Since April 2017 the child element has been restricted to the first two
70+
qualifying children. The `child_count` parameter under
71+
`child_tax_credit/limit/` and the `start_year/year.yaml` switch encode
72+
this. Children born before the start year and a few specific exceptions
73+
(non-consensual conception, multiple births, kinship care) are exempt;
74+
the exemptions are modelled via `gov/contrib/two_child_limit/` and
75+
related variables.
76+
77+
### Qualifying child tests
78+
79+
A child counts towards CTC if they are under 16, or under 20 and in
80+
approved education or training and meet the qualifying-young-person
81+
conditions. These tests are exposed as a family of `*_for_child_tax_credit`
82+
variables (`is_child_for_child_tax_credit`,
83+
`meets_qualifying_young_person_*_for_child_tax_credit`).
84+
85+
## Shared means test
86+
87+
WTC and CTC share a single income test in
88+
`gov.dwp.tax_credits.means_test`:
89+
90+
```python
91+
threshold = ctc_only ? income_threshold_CTC_only : income_threshold
92+
overage = max(0, tax_credits_applicable_income - threshold)
93+
reduction = overage * income_reduction_rate
94+
```
95+
96+
`tax_credits_applicable_income` is the benunit's total income net of
97+
specific disregards (pension contributions, certain benefits). The
98+
non-earned disregard for unearned income is the
99+
`means_test/non_earned_disregard.yaml` parameter. Awards below
100+
`min_benefit` (a £26-ish floor) are paid as zero.
101+
102+
## Scheme end
103+
104+
From `2025-04-06` onwards the `tax_credits` variable returns zero
105+
unconditionally — the `active` parameter flips off and the formula
106+
short-circuits with an empty array. The remaining caseload was migrated
107+
to Universal Credit via the DWP/HMRC managed-migration programme
108+
finalised on 5 April 2025.
109+
110+
The reported variables (`working_tax_credit_reported`,
111+
`child_tax_credit_reported`) remain available for historical analysis,
112+
and the take-up flags (`would_claim_WTC`, `would_claim_CTC`) continue to
113+
be populated stochastically when the dataset is built so historical
114+
years still match published caseload aggregates.
115+
116+
## References
117+
118+
- [Tax Credits Act 2002](https://www.legislation.gov.uk/ukpga/2002/21/contents) — primary statute.
119+
- [The Working Tax Credit (Entitlement and Maximum Rate) Regulations 2002 (SI 2002/2005)](https://www.legislation.gov.uk/uksi/2002/2005/contents).
120+
- [The Child Tax Credit Regulations 2002 (SI 2002/2007)](https://www.legislation.gov.uk/uksi/2002/2007/contents).
121+
- HMRC, [Tax credits have ended](https://www.gov.uk/tax-credits-have-ended) — official end-of-scheme announcement.
122+
- House of Commons Library, [Completing Universal Credit rollout (CBP-9984)](https://commonslibrary.parliament.uk/research-briefings/cbp-9984/) — managed-migration timeline.
123+
- HMRC, [Child and Working Tax Credit statistics](https://www.gov.uk/government/collections/personal-tax-credits-statistics) — caseload and expenditure outturns used for calibration.

0 commit comments

Comments
 (0)