From f2e215a212fd8bb0c0d926fdf736b11e9acccad8 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 06:36:20 -0400 Subject: [PATCH 01/30] Make the shared UK copy, section hubs and header label country-aware - Rules and Data hub pages read the country and stop showing US-only copy (federal/state/local, CPS/FRS/SCF) on the UK side; their links keep ?country= and ?embed= like the sidebar does. - The header's Model menu says Behavioural responses on the UK side. - The overview's UK ingredient cards no longer say 'Over 55 federal, state, and local programs', and the UK walkthrough no longer cites the elasticity of taxable income. - The walkthrough says its five households are illustrative, and its table scrolls instead of clipping columns on narrow screens. - Parameter source links fetch the YAML tree from the public prefix (/{country}/model/param-tree-*.json); the root path 404s on policyengine.org, so every link fell back to a directory. Co-Authored-By: Claude Opus 5.5 --- app/data/page.tsx | 33 ++---- app/rules/page.tsx | 33 ++---- proxy.ts | 2 + src/components/layout/PEHeader.tsx | 5 +- src/components/layout/SectionOverview.tsx | 5 +- src/components/microsim/ThreeIngredients.tsx | 8 +- src/components/microsim/Walkthrough.tsx | 6 +- src/components/parameters/ParameterDetail.tsx | 6 +- src/data/microsimSteps.ts | 2 +- src/data/sectionOverviews.ts | 110 ++++++++++++++++++ src/test/proxy.test.ts | 4 + 11 files changed, 163 insertions(+), 51 deletions(-) create mode 100644 src/data/sectionOverviews.ts diff --git a/app/data/page.tsx b/app/data/page.tsx index 6f5812d..387486c 100644 --- a/app/data/page.tsx +++ b/app/data/page.tsx @@ -1,31 +1,20 @@ import SectionOverview from '../../src/components/layout/SectionOverview'; +import { detectCountry } from '../../src/components/comparison/detectCountry'; +import { dataSection } from '../../src/data/sectionOverviews'; -export default function DataOverviewPage() { +export default async function DataOverviewPage({ + searchParams, +}: { + searchParams: Promise<{ country?: string | string[] }>; +}) { + const country = await detectCountry((await searchParams).country); + const copy = dataSection[country]; return ( ); } diff --git a/app/rules/page.tsx b/app/rules/page.tsx index e1134e0..a468f4b 100644 --- a/app/rules/page.tsx +++ b/app/rules/page.tsx @@ -1,31 +1,20 @@ import SectionOverview from '../../src/components/layout/SectionOverview'; +import { detectCountry } from '../../src/components/comparison/detectCountry'; +import { rulesSection } from '../../src/data/sectionOverviews'; -export default function RulesOverviewPage() { +export default async function RulesOverviewPage({ + searchParams, +}: { + searchParams: Promise<{ country?: string | string[] }>; +}) { + const country = await detectCountry((await searchParams).country); + const copy = rulesSection[country]; return ( ); } diff --git a/proxy.ts b/proxy.ts index 32afc70..f22e2f5 100644 --- a/proxy.ts +++ b/proxy.ts @@ -100,5 +100,7 @@ export const config = { '/((?!_next|.*\\..*).*)', '/:country(us|uk)/programs-:registry(us|uk).json', '/:country(us|uk)/model/programs-:registry(us|uk).json', + '/:country(us|uk)/param-tree-:registry(us|uk).json', + '/:country(us|uk)/model/param-tree-:registry(us|uk).json', ], }; diff --git a/src/components/layout/PEHeader.tsx b/src/components/layout/PEHeader.tsx index a272f33..d5c78a4 100644 --- a/src/components/layout/PEHeader.tsx +++ b/src/components/layout/PEHeader.tsx @@ -109,7 +109,10 @@ function getNavItems(country: Country): NavItemSetup[] { { label: 'Validation', href: `${base}/model/data/validation` }, ], }, - { label: 'Behavioral responses', href: `${base}/model/behavioral` }, + { + label: country === 'uk' ? 'Behavioural responses' : 'Behavioral responses', + href: `${base}/model/behavioral`, + }, ], }, { label: 'API', href: `${base}/api` }, diff --git a/src/components/layout/SectionOverview.tsx b/src/components/layout/SectionOverview.tsx index 965319e..ded352e 100644 --- a/src/components/layout/SectionOverview.tsx +++ b/src/components/layout/SectionOverview.tsx @@ -1,6 +1,7 @@ 'use client'; import Link from 'next/link'; +import { useSearchParams } from 'next/navigation'; import { IconArrowRight } from '@tabler/icons-react'; import { colors, spacing, typography } from '../../designTokens'; import { usePublicBasePrefix } from '../../hooks/usePublicBasePrefix'; @@ -31,7 +32,9 @@ export default function SectionOverview({ children, }: SectionOverviewProps) { const basePrefix = usePublicBasePrefix(); - const href = (path: string) => `${basePrefix}${path}`; + // Keep ?country= and ?embed= on the way into a child page, as the sidebar does. + const search = useSearchParams().toString(); + const href = (path: string) => `${basePrefix}${path}${search ? `?${search}` : ''}`; return (
diff --git a/src/components/microsim/ThreeIngredients.tsx b/src/components/microsim/ThreeIngredients.tsx index e3ad1cd..54f6526 100644 --- a/src/components/microsim/ThreeIngredients.tsx +++ b/src/components/microsim/ThreeIngredients.tsx @@ -47,14 +47,18 @@ export default function ThreeIngredients({ activeIngredient, country = 'us' }: T { title: 'Policy rules', description: - 'Tax codes, benefit formulas, and eligibility rules encoded as executable logic. Over 55 federal, state, and local programs.', + country === 'uk' + ? 'Tax codes, benefit formulas, and eligibility rules encoded as executable logic, from income tax and National Insurance to Universal Credit and Scottish Child Payment.' + : 'Tax codes, benefit formulas, and eligibility rules encoded as executable logic. Over 55 federal, state, and local programs.', icon: , key: 'policies' as const, }, { title: 'Household data', description: - 'A representative microdata sample of the population, with income, demographics, and program participation for each household.', + country === 'uk' + ? 'A representative sample of UK households, with the incomes, demographics, and benefit receipt of each.' + : 'A representative microdata sample of the population, with income, demographics, and program participation for each household.', icon: , key: 'households' as const, }, diff --git a/src/components/microsim/Walkthrough.tsx b/src/components/microsim/Walkthrough.tsx index 8faad81..cf23906 100644 --- a/src/components/microsim/Walkthrough.tsx +++ b/src/components/microsim/Walkthrough.tsx @@ -151,7 +151,7 @@ export default function Walkthrough({ country = 'us' }: { country?: Country }) { {/* Single persistent table — only visible columns rendered */}
+

+ Illustrative example: five hypothetical households, a simplified tax schedule, and a + single elasticity. The figures are not output from the model. +

); } diff --git a/src/components/parameters/ParameterDetail.tsx b/src/components/parameters/ParameterDetail.tsx index fe00f11..8cf1072 100644 --- a/src/components/parameters/ParameterDetail.tsx +++ b/src/components/parameters/ParameterDetail.tsx @@ -3,6 +3,7 @@ import { motion } from 'framer-motion'; import { IconExternalLink, IconChevronDown, IconChevronRight } from '@tabler/icons-react'; import type { Parameter, ParameterLeaf } from '../../types/Variable'; import { colors, typography, spacing } from '../../designTokens'; +import { publicBasePrefixFromPath } from '../../hooks/usePublicBasePrefix'; interface ParameterDetailProps { parameter: Parameter; @@ -267,7 +268,10 @@ const treeCache = new Map | null>(); async function loadParamTree(country: string): Promise | null> { if (treeCache.has(country)) return treeCache.get(country)!; try { - const res = await fetch(`/param-tree-${country}.json`); + // Snapshots sit beside the app, so under policyengine.org/{country}/model + // they are served at that prefix, not at the site root. + const prefix = publicBasePrefixFromPath(window.location.pathname); + const res = await fetch(`${prefix}/param-tree-${country}.json`); if (!res.ok) throw new Error('not found'); const paths: string[] = await res.json(); const set = new Set(paths); diff --git a/src/data/microsimSteps.ts b/src/data/microsimSteps.ts index 49c9f12..8aff046 100644 --- a/src/data/microsimSteps.ts +++ b/src/data/microsimSteps.ts @@ -167,7 +167,7 @@ export function getMicrosimSteps(country: Country): MicrosimStep[] { id: 3, title: country === 'uk' ? 'Model behavioural responses' : 'Model behavioral responses', description: country === 'uk' - ? 'People change their behaviour in response to tax changes. Using elasticity of taxable income, we estimate how earnings shift.' + ? 'People change their behaviour in response to tax changes. Using labour supply elasticities, we estimate how earnings shift.' : 'People change their behavior in response to tax changes. Using elasticity of taxable income, we estimate how earnings shift.', ingredient: 'dynamics', }, diff --git a/src/data/sectionOverviews.ts b/src/data/sectionOverviews.ts new file mode 100644 index 0000000..5c8fa75 --- /dev/null +++ b/src/data/sectionOverviews.ts @@ -0,0 +1,110 @@ +import type { Country } from '../hooks/useCountry'; + +export interface SectionCopy { + description: string; + children: { label: string; description: string; path: string }[]; +} + +/** Hub-page copy for the Rules section, per country. */ +export const rulesSection: Record = { + us: { + description: + 'How PolicyEngine encodes tax-and-benefit rules — which programs are covered, the legislative parameters that drive calculations, and the input and output variables exposed to households and microsimulations.', + children: [ + { + label: 'Coverage tracker', + description: + 'Which federal, state, and local tax-and-benefit programs PolicyEngine and peer models implement.', + path: '/rules/coverage', + }, + { + label: 'Parameters', + description: + 'Browse every legislative parameter that drives the model — thresholds, rates, brackets, eligibility cut-offs.', + path: '/rules/parameters', + }, + { + label: 'Variables', + description: + 'Inspect the input and output variables computed at the person, family, tax unit, and household level.', + path: '/rules/variables', + }, + ], + }, + uk: { + description: + 'How PolicyEngine encodes UK tax and benefit rules: which programmes are covered, the legislative parameters that drive calculations, and the input and output variables exposed to households and microsimulations.', + children: [ + { + label: 'Coverage tracker', + description: + 'Which UK-wide and devolved taxes and benefits PolicyEngine UK models, by department, with the status of each.', + path: '/rules/coverage', + }, + { + label: 'Parameters', + description: + 'Browse every legislative parameter that drives the model: rates, thresholds, allowances, and eligibility cut-offs.', + path: '/rules/parameters', + }, + { + label: 'Variables', + description: + 'Inspect the input and output variables computed for each person, benefit unit, and household.', + path: '/rules/variables', + }, + ], + }, +}; + +/** Hub-page copy for the Data section, per country. */ +export const dataSection: Record = { + us: { + description: + 'How PolicyEngine builds the microdata behind its simulations — from raw survey records to calibrated, validated datasets that match official population totals.', + children: [ + { + label: 'Pipeline', + description: + 'Each stage that turns survey and tax records into PolicyEngine-ready microdata.', + path: '/data/pipeline', + }, + { + label: 'Calibration targets', + description: + 'The population totals (program enrollment, income aggregates, demographic counts) used to reweight the underlying survey.', + path: '/data/calibration', + }, + { + label: 'Validation', + description: + 'How simulated outputs are cross-checked against published official statistics.', + path: '/data/validation', + }, + ], + }, + uk: { + description: + 'How PolicyEngine builds the UK household data behind its simulations: from Family Resources Survey households to a calibrated file whose weighted totals match official statistics.', + children: [ + { + label: 'Pipeline', + description: + 'Each stage that turns Family Resources Survey households into the enhanced dataset PolicyEngine UK runs on.', + path: '/data/pipeline', + }, + { + label: 'Calibration targets', + description: + 'The OBR, DWP, HMRC, ONS, and other official statistics the household weights are fitted to, nationally and for each constituency and local authority.', + path: '/data/calibration', + }, + { + label: 'Validation', + description: + 'How closely the calibrated data matches its targets, and how it does on statistics held out of calibration.', + path: '/data/validation', + }, + ], + }, +}; diff --git a/src/test/proxy.test.ts b/src/test/proxy.test.ts index e1082d0..b755fa7 100644 --- a/src/test/proxy.test.ts +++ b/src/test/proxy.test.ts @@ -25,6 +25,9 @@ describe('country proxy', () => { ['/us/model/programs-uk.json', '/programs-uk.json'], ['/uk/model/programs-us.json', '/programs-us.json'], ['/uk/model/programs-uk.json', '/programs-uk.json'], + ['/uk/param-tree-uk.json', '/param-tree-uk.json'], + ['/uk/model/param-tree-uk.json', '/param-tree-uk.json'], + ['/us/model/param-tree-us.json', '/param-tree-us.json'], ])('matches and rewrites the registry snapshot at %s', (path, expected) => { expect(unstable_doesMiddlewareMatch({ config, url: `${ORIGIN}${path}` })).toBe(true); @@ -37,6 +40,7 @@ describe('country proxy', () => { '/programs-us.json', '/us/model/logo.svg', '/us/model/programs-ca.json', + '/us/model/param-tree-ca.json', '/_next/static/chunks/main.js', ])('keeps unrelated static paths outside the proxy: %s', (path) => { expect(unstable_doesMiddlewareMatch({ config, url: `${ORIGIN}${path}` })).toBe(false); From 5fa293dbcdc952fb4e255ec200a327a7668defed Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 06:51:11 -0400 Subject: [PATCH 02/30] Group UK parameters and variables by UK department, not US agencies The UK explorers put HMRC and DWP parameters under 'Federal: IRS, HHS, USDA, SSA, HUD' and council schemes under 'City and county programs'. The UK metadata API serves no moduleName, so all 937 UK variables fell into 'Household inputs' and had no source link. - categoryUtils takes a country. UK levels are UK government (by department), Devolved (Revenue Scotland, Social Security Scotland, Scottish Government, Welsh Revenue Authority), Local authorities, Reforms, Assumptions and settings, and Household inputs. US behaviour is unchanged. - fetch-metadata snapshots policyengine-{country}/variables at the same pinned commit as the registry; the UK explorer maps each variable to the one file named after it, so variables group by department and link to their source. - Property tests: no UK path lands in a US level or the reverse, and a filled module is always a real file named after the variable. Co-Authored-By: Claude Opus 5.5 --- .gitignore | 1 + bun.lock | 5 + package.json | 1 + proxy.ts | 2 + scripts/fetch-metadata.js | 49 ++++-- .../parameters/ParameterExplorer.tsx | 55 ++++--- src/components/shared/categoryUtils.ts | 152 +++++++++++++++++- src/components/variables/VariableExplorer.tsx | 60 +++---- src/data/fetchMetadata.ts | 49 +++++- src/test/fetchMetadataScript.test.ts | 32 ++++ src/test/ukTaxonomy.test.ts | 96 +++++++++++ 11 files changed, 425 insertions(+), 77 deletions(-) create mode 100644 src/test/ukTaxonomy.test.ts diff --git a/.gitignore b/.gitignore index 2bd2cfa..a6b03ff 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ policyengine-uk-data public/metadata-*.json public/param-tree-*.json public/programs-*.json +public/variable-tree-*.json diff --git a/bun.lock b/bun.lock index 335d7de..e3446ca 100644 --- a/bun.lock +++ b/bun.lock @@ -29,6 +29,7 @@ "eslint": "^9.39.1", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-react-hooks": "^7.0.1", + "fast-check": "4.3.0", "globals": "^16.5.0", "jsdom": "^28.1.0", "typescript": "~5.9.3", @@ -706,6 +707,8 @@ "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], + "fast-check": ["fast-check@4.3.0", "", { "dependencies": { "pure-rand": "^7.0.0" } }, "sha512-JVw/DJSxVKl8uhCb7GrwanT9VWsCIdBkK3WpP37B/Au4pyaspriSjtrY2ApbSFwTg3ViPfniT13n75PhzE7VEQ=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], @@ -976,6 +979,8 @@ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + "pure-rand": ["pure-rand@7.0.1", "", {}, "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ=="], + "radix-ui": ["radix-ui@1.4.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-accessible-icon": "1.1.7", "@radix-ui/react-accordion": "1.2.12", "@radix-ui/react-alert-dialog": "1.1.15", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-aspect-ratio": "1.1.7", "@radix-ui/react-avatar": "1.1.10", "@radix-ui/react-checkbox": "1.3.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-context-menu": "2.2.16", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-dropdown-menu": "2.1.16", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-form": "0.1.8", "@radix-ui/react-hover-card": "1.1.15", "@radix-ui/react-label": "2.1.7", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-menubar": "1.1.16", "@radix-ui/react-navigation-menu": "1.2.14", "@radix-ui/react-one-time-password-field": "0.1.8", "@radix-ui/react-password-toggle-field": "0.1.3", "@radix-ui/react-popover": "1.1.15", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-progress": "1.1.7", "@radix-ui/react-radio-group": "1.3.8", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-scroll-area": "1.2.10", "@radix-ui/react-select": "2.2.6", "@radix-ui/react-separator": "1.1.7", "@radix-ui/react-slider": "1.3.6", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-switch": "1.2.6", "@radix-ui/react-tabs": "1.1.13", "@radix-ui/react-toast": "1.2.15", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-toggle-group": "1.1.11", "@radix-ui/react-toolbar": "1.1.11", "@radix-ui/react-tooltip": "1.2.8", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-escape-keydown": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA=="], "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], diff --git a/package.json b/package.json index ec6b659..6eb5f8b 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "eslint": "^9.39.1", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-react-hooks": "^7.0.1", + "fast-check": "4.3.0", "globals": "^16.5.0", "jsdom": "^28.1.0", "typescript": "~5.9.3", diff --git a/proxy.ts b/proxy.ts index f22e2f5..95b98c6 100644 --- a/proxy.ts +++ b/proxy.ts @@ -102,5 +102,7 @@ export const config = { '/:country(us|uk)/model/programs-:registry(us|uk).json', '/:country(us|uk)/param-tree-:registry(us|uk).json', '/:country(us|uk)/model/param-tree-:registry(us|uk).json', + '/:country(us|uk)/variable-tree-:registry(us|uk).json', + '/:country(us|uk)/model/variable-tree-:registry(us|uk).json', ], }; diff --git a/scripts/fetch-metadata.js b/scripts/fetch-metadata.js index 8a57424..3a7e8e1 100644 --- a/scripts/fetch-metadata.js +++ b/scripts/fetch-metadata.js @@ -112,25 +112,37 @@ export async function fetchRegistrySnapshot(country, source, { return snapshot; } -/** Fetch only the parameter subtree, using the same resolved commit as coverage. */ -export async function fetchParameterYamlPaths(country, source, fetchImpl = globalThis.fetch) { +/** List every file in one directory of the country package at the resolved commit. */ +async function fetchPackageSubtree(country, source, directory, fetchImpl) { const treeRoot = `https://api.github.com/repos/${source.repo}/git/trees`; const root = await (await request(`${treeRoot}/${source.commit}`, fetchImpl)).json(); const packageTree = root.tree?.find(entry => entry.path === `policyengine_${country}`); if (!packageTree?.sha) throw new Error('Package directory missing from repository tree'); const packageFiles = await (await request(`${treeRoot}/${packageTree.sha}`, fetchImpl)).json(); - const parameters = packageFiles.tree?.find(entry => entry.path === 'parameters'); - if (!parameters?.sha) throw new Error('Parameter directory missing from repository tree'); - - const files = await (await request(`${treeRoot}/${parameters.sha}?recursive=1`, fetchImpl)).json(); - if (files.truncated) throw new Error('GitHub returned a truncated parameter tree'); - if (!Array.isArray(files.tree)) throw new Error('GitHub did not return a parameter tree'); - return files.tree - .filter(entry => entry.type === 'blob' - && entry.path.endsWith('.yaml') - && !entry.path.startsWith('calibration/')) - .map(entry => entry.path); + const subtree = packageFiles.tree?.find(entry => entry.path === directory); + if (!subtree?.sha) throw new Error(`${directory} directory missing from repository tree`); + + const files = await (await request(`${treeRoot}/${subtree.sha}?recursive=1`, fetchImpl)).json(); + if (files.truncated) throw new Error(`GitHub returned a truncated ${directory} tree`); + if (!Array.isArray(files.tree)) throw new Error(`GitHub did not return a ${directory} tree`); + return files.tree.filter(entry => entry.type === 'blob').map(entry => entry.path); +} + +/** Fetch only the parameter subtree, using the same resolved commit as coverage. */ +export async function fetchParameterYamlPaths(country, source, fetchImpl = globalThis.fetch) { + const paths = await fetchPackageSubtree(country, source, 'parameters', fetchImpl); + return paths.filter(path => path.endsWith('.yaml') && !path.startsWith('calibration/')); +} + +/** + * Variable module files at the same commit, e.g. `gov/hmrc/income_tax/income_tax.py`. + * The UK metadata API serves no `moduleName`, so the explorer maps variable names to + * these files to group variables by department and link their source. + */ +export async function fetchVariableModulePaths(country, source, fetchImpl = globalThis.fetch) { + const paths = await fetchPackageSubtree(country, source, 'variables', fetchImpl); + return paths.filter(path => path.endsWith('.py') && !path.endsWith('__init__.py')); } export async function fetchMetadataFiles({ @@ -179,6 +191,17 @@ export async function fetchMetadataFiles({ logger.warn(` ${country}: parameter tree skipped — ${error.message}`); } })(), + (async () => { + const treePath = join(outputDir, `variable-tree-${country}.json`); + try { + rmSync(treePath, { force: true }); + const paths = await fetchVariableModulePaths(country, source, fetchImpl); + writeFileSync(treePath, JSON.stringify({ source, paths })); + logger.log(` ${country}: wrote ${treePath} (${paths.length} files)`); + } catch (error) { + logger.warn(` ${country}: variable tree skipped — ${error.message}`); + } + })(), ]); } logger.log('Done.'); diff --git a/src/components/parameters/ParameterExplorer.tsx b/src/components/parameters/ParameterExplorer.tsx index 677a134..2ed7403 100644 --- a/src/components/parameters/ParameterExplorer.tsx +++ b/src/components/parameters/ParameterExplorer.tsx @@ -6,7 +6,7 @@ import { colors, typography, spacing } from '../../designTokens'; import { useDebounce } from '../../hooks/useDebounce'; import { getLevel, getSubGroup, getSubGroupLabel, getSubGroupDescription, - LEVEL_CONFIG, LEVELS_ORDERED, + levelConfig, levelsFor, emptyLevelRecord, type Level, } from '../shared/categoryUtils'; import ParameterCard from './ParameterCard'; @@ -284,11 +284,13 @@ function StateTileGrid({ function SubGroupCardGrid({ subGroups, level, + country, levelColor, onSelect, }: { subGroups: [string, ParameterLeaf[]][]; level: Level; + country: string; levelColor: string; onSelect: (key: string) => void; }) { @@ -298,8 +300,8 @@ function SubGroupCardGrid({ style={{ gap: spacing.md }} > {subGroups.map(([key, params], i) => { - const label = getSubGroupLabel(key, level); - const desc = getSubGroupDescription(key, level); + const label = getSubGroupLabel(key, level, country); + const desc = getSubGroupDescription(key, level, country); return ( { - const seen: Record> = { federal: new Set(), state: new Set(), local: new Set(), territory: new Set(), reform: new Set(), household: new Set() }; + const seen = emptyLevelRecord(() => new Set()); for (const p of allParameters) { - seen[getLevel(p.parameter)].add(getParameterGroup(p.parameter)); + seen[getLevel(p.parameter, country)].add(getParameterGroup(p.parameter)); } return Object.fromEntries(Object.entries(seen).map(([k, v]) => [k, v.size])) as Record; - }, [allParameters]); + }, [allParameters, country]); // Filtered list const filtered = useMemo(() => { @@ -573,22 +575,22 @@ export default function ParameterExplorer({ parameters, country }: ParameterExpl }); } - if (activeLevel) result = result.filter((p) => getLevel(p.parameter) === activeLevel); + if (activeLevel) result = result.filter((p) => getLevel(p.parameter, country) === activeLevel); return result; - }, [allParameters, debouncedSearch, activeLevel]); + }, [allParameters, debouncedSearch, activeLevel, country]); // Sub-groups for the active level const subGroups = useMemo(() => { if (!activeLevel) return []; const map = new Map(); for (const p of filtered) { - const key = getSubGroup(p.parameter); + const key = getSubGroup(p.parameter, country); if (!map.has(key)) map.set(key, []); map.get(key)!.push(p); } return [...map.entries()].sort(([a], [b]) => a.localeCompare(b)); - }, [filtered, activeLevel]); + }, [filtered, activeLevel, country]); // Parameters in active sub-group const subGroupParams = useMemo(() => { @@ -701,13 +703,13 @@ export default function ParameterExplorer({ parameters, country }: ParameterExpl if (activeLevel) { items.push({ - label: LEVEL_CONFIG[activeLevel].label, + label: levelConfig(activeLevel, country).label, onClick: () => { setActiveLevel(activeLevel); setActiveSubGroup(null); setFolderStack([]); setActiveGroup(null); setSelectedParam(null); }, }); } if (activeSubGroup && activeLevel) { items.push({ - label: getSubGroupLabel(activeSubGroup, activeLevel), + label: getSubGroupLabel(activeSubGroup, activeLevel, country), onClick: () => { setFolderStack([]); setActiveGroup(null); setSelectedParam(null); }, }); } @@ -725,7 +727,7 @@ export default function ParameterExplorer({ parameters, country }: ParameterExpl }); } return items; - }, [activeLevel, activeSubGroup, folderStack, activeGroup, parameters]); + }, [activeLevel, activeSubGroup, folderStack, activeGroup, parameters, country]); // Current heading label const currentHeadingLabel = activeGroup @@ -733,7 +735,7 @@ export default function ParameterExplorer({ parameters, country }: ParameterExpl : folderStack.length > 0 ? getGroupLabel(currentFolder, parameters) : activeSubGroup && activeLevel - ? getSubGroupLabel(activeSubGroup, activeLevel) + ? getSubGroupLabel(activeSubGroup, activeLevel, country) : ''; // Param count summary for folder view (count groups, not individual leaves) @@ -772,9 +774,9 @@ export default function ParameterExplorer({ parameters, country }: ParameterExpl {isSearching && (
- {([null, ...LEVELS_ORDERED] as (Level | null)[]).map((level) => { - const label = level ? LEVEL_CONFIG[level].label : 'All'; - const clr = level ? LEVEL_CONFIG[level].color : colors.text.secondary; + {([null, ...levelsFor(country)] as (Level | null)[]).map((level) => { + const label = level ? levelConfig(level, country).label : 'All'; + const clr = level ? levelConfig(level, country).color : colors.text.secondary; const isActive = activeLevel === level; return ( +
+ +
+
+ + + {statusLabels[program.status]} + +
+ + {agencyOf(program).label} + + {program.coverage && ( + Applies in: {program.coverage} + )} + {program.verifiedYears && ( + Verified years: {program.verifiedYears} + )} +
+ + {program.notes && ( +
+ {program.notes.replace(/\. Years: .*$/, '').replace(/^Years: .*$/, '')} +
+ )} + +
+ {links.parameters && ( + Parameters + )} + {links.source && ( + Source code + )} + {program.variable && ( + + Computation tree + + )} +
+ + ); +} + +/** + * Coverage of policyengine-uk's own programme registry (`programs.yaml`), read + * from the snapshot pinned at build time. Status, coverage and verified years + * are the registry's; nothing here is typed in by hand. + */ +export default function UkCoverageTracker() { + const [loaded, setLoaded] = useState(null); + const [trees, setTrees] = useState(null); + const [selected, setSelected] = useState(null); + const [search, setSearch] = useState(''); + const [yearFilter, setYearFilter] = useState(null); + + useEffect(() => { + let active = true; + fetchProgramsWithSource('uk').then((result) => { if (active) setLoaded(result); }); + loadTrees().then((result) => { if (active) setTrees(result); }); + return () => { active = false; }; + }, []); + + const programs = useMemo(() => loaded?.programs ?? [], [loaded]); + const ref = loaded?.source.kind === 'snapshot' ? loaded.source.commit : 'main'; + const availableYears = useMemo(() => collectAllYears(programs), [programs]); + + const visible = useMemo(() => { + const q = search.trim().toLowerCase(); + return programs.filter((p) => + (yearFilter === null || programIncludesYear(p, yearFilter)) && + (!q || [p.name, p.fullName, p.notes ?? '', p.coverage ?? '', agencyOf(p).label] + .some((field) => field.toLowerCase().includes(q))), + ); + }, [programs, search, yearFilter]); + + const counts = useMemo(() => { + const c: Record = { complete: 0, partial: 0, inProgress: 0, notStarted: 0 }; + for (const p of visible) c[p.status]++; + return c; + }, [visible]); + + const grouped = useMemo(() => { + const bySection = new Map>(); + for (const p of visible) { + const { section, label } = agencyOf(p); + if (!bySection.has(section)) bySection.set(section, new Map()); + const departments = bySection.get(section)!; + if (!departments.has(label)) departments.set(label, []); + departments.get(label)!.push(p); + } + return SECTIONS.filter((s) => bySection.has(s)).map((s) => ({ + section: s, + departments: [...bySection.get(s)!.entries()].sort((a, b) => b[1].length - a[1].length || a[0].localeCompare(b[0])), + })); + }, [visible]); + + if (!loaded) { + return

Loading programmes…

; + } + + if (programs.length === 0) { + return ( +

+ The UK programme registry could not be loaded. See{' '} + + programs.yaml in policyengine-uk + + . +

+ ); + } + + const selectedProgram = programs.find((p) => p.id === selected) ?? null; + + return ( +
+ +

+ Each programme below is an entry in PolicyEngine UK's programme registry, shown with the status, + coverage, verified years and notes the registry records. +

+ +
+ + + + +
+ +
+ setSearch(e.target.value)} + className="tw:flex-1" + style={{ + padding: `${spacing.sm} ${spacing.lg}`, + borderRadius: spacing.radius.lg, + border: `1px solid ${colors.border.light}`, + fontSize: typography.fontSize.sm, + fontFamily: typography.fontFamily.primary, + outline: 'none', + minWidth: '200px', + maxWidth: '400px', + }} + /> + {availableYears.length > 0 && ( +
+ + +
+ )} +
+ + + {selectedProgram && ( +
+ setSelected(null)} + /> +
+ )} +
+ + {grouped.length === 0 && ( +

No programmes match.

+ )} + + {grouped.map(({ section, departments }) => ( +
+

+ {section} + {departments.length === 1 && departments[0][0] === section ? ` (${departments[0][1].length})` : ''} +

+ {departments.map(([label, list]) => ( +
+ {label !== section && ( +

+ {label} ({list.length}) +

+ )} +
+ {list.map((program) => { + const isSelected = selected === program.id; + return ( + + ); + })} +
+
+ ))} +
+ ))} +
+ ); +} diff --git a/src/components/rules/coverageParts.tsx b/src/components/rules/coverageParts.tsx new file mode 100644 index 0000000..9164188 --- /dev/null +++ b/src/components/rules/coverageParts.tsx @@ -0,0 +1,100 @@ +import { motion } from 'framer-motion'; +import { colors, typography, spacing, statusColors } from '../../designTokens'; +import type { CoverageStatus, Program } from '../../types/Program'; + +const MAX_FORWARD_YEAR = new Date().getFullYear() + 5; + +/** Parse a verifiedYears string like "2022-2026", "2022+", or "2024" into a Set of year numbers. */ +export function parseYearRange(verifiedYears?: string): Set { + if (!verifiedYears) return new Set(); + const trimmed = verifiedYears.trim(); + // "2022+" means from 2022 onward (no end year — uprating covers future) + const openMatch = trimmed.match(/^(\d{4})\+$/); + if (openMatch) { + const start = parseInt(openMatch[1], 10); + const years = new Set(); + for (let y = start; y <= MAX_FORWARD_YEAR; y++) years.add(y); + return years; + } + // "2022-2026" range + const rangeMatch = trimmed.match(/^(\d{4})\s*-\s*(\d{4})$/); + if (rangeMatch) { + const start = parseInt(rangeMatch[1], 10); + const end = parseInt(rangeMatch[2], 10); + const years = new Set(); + for (let y = start; y <= end; y++) years.add(y); + return years; + } + // Single year "2024" + const singleMatch = trimmed.match(/^(\d{4})$/); + if (singleMatch) return new Set([parseInt(singleMatch[1], 10)]); + return new Set(); +} + +/** Collect all unique years across all programs' verifiedYears fields. */ +export function collectAllYears(programs: Program[]): number[] { + const allYears = new Set(); + for (const p of programs) { + for (const y of parseYearRange(p.verifiedYears)) allYears.add(y); + } + return Array.from(allYears).sort((a, b) => a - b); +} + +/** Check if a program's verifiedYears includes a given year. */ +export function programIncludesYear(program: Program, year: number): boolean { + return parseYearRange(program.verifiedYears).has(year); +} + +export const statusLabels: Record = { + complete: 'Complete', + partial: 'Partial', + inProgress: 'In progress', + notStarted: 'Not started', +}; + +const statusIcons: Record = { + complete: '\u2713', + partial: '\u25D1', + inProgress: '\u21BB', + notStarted: '\u25CB', +}; + +export function StatusDot({ status, size = 10 }: { status: CoverageStatus; size?: number }) { + return ( + + {size >= 14 ? statusIcons[status] : ''} + + ); +} + +export function StatCard({ label, count, color, delay }: { label: string; count: number; color: string; delay: number }) { + return ( + +
{count}
+
{label}
+
+ ); +} diff --git a/src/data/fetchPrograms.ts b/src/data/fetchPrograms.ts index 54b3c4e..f0a6629 100644 --- a/src/data/fetchPrograms.ts +++ b/src/data/fetchPrograms.ts @@ -109,6 +109,7 @@ function transformProgram(p: ApiProgram, githubBase: string): Program { coverage: p.coverage, hasStateVariation: p.has_state_variation, variable: p.variable, + parameterPrefix: p.parameter_prefix, notes: p.notes ? (verifiedYears ? `${p.notes}. Years: ${verifiedYears}` : p.notes) : (verifiedYears ? `Years: ${verifiedYears}` : undefined), @@ -188,7 +189,8 @@ export async function fetchProgramsWithSource(country: Country = 'us'): Promise< return result; } catch (err) { console.warn('Failed to fetch programs from API, using fallback:', err); - // Fall back to hardcoded data + // The bundled fallback registry is the US one; never show it for another country. + if (country !== 'us') return { programs: [], source: { kind: 'fallback' } }; const { programs } = await import('./programs'); return { programs, source: { kind: 'fallback' } }; } diff --git a/src/test/coverageProvenance.test.tsx b/src/test/coverageProvenance.test.tsx index 988961d..d002e02 100644 --- a/src/test/coverageProvenance.test.tsx +++ b/src/test/coverageProvenance.test.tsx @@ -90,10 +90,35 @@ describe('Coverage provenance', () => { expect(within(partialCard).getByText('0')).toBeInTheDocument(); }); - it('preserves the static UK introduction without assigning it registry provenance', () => { + it('renders the UK registry by department with its own provenance, never US programs', async () => { + vi.mocked(fetchProgramsWithSource).mockResolvedValue({ + source: { ...snapshotSource, repo: 'PolicyEngine/policyengine-uk', version: '2.130.1', apiVersion: '2.102.3' }, + programs: [ + { id: 'universal_credit', name: 'Universal Credit', fullName: 'Universal Credit', status: 'complete', agency: 'DWP' as never, coverage: 'UK', githubLinks: {} }, + { id: 'alcohol_duty', name: 'Alcohol duty', fullName: 'Alcohol Duty', status: 'partial', agency: 'HMRC' as never, coverage: 'UK', githubLinks: {} }, + { id: 'scottish_child_payment', name: 'Scottish Child Payment', fullName: 'Scottish Child Payment', status: 'complete', agency: 'Social Security Scotland' as never, coverage: 'Scotland', githubLinks: {} }, + { id: 'council_tax_reduction', name: 'Council Tax Reduction', fullName: 'Council Tax Reduction', status: 'partial', agency: 'Local', coverage: 'UK', githubLinks: {} }, + ], + }); + + render(); + + expect(await screen.findByText(/Coverage reflects policyengine-uk 2.130.1/)).toBeInTheDocument(); + expect(fetchProgramsWithSource).toHaveBeenCalledWith('uk'); + expect(screen.getByText('Department for Work and Pensions (DWP) (1)')).toBeInTheDocument(); + expect(screen.getByText('HM Revenue and Customs (HMRC) (1)')).toBeInTheDocument(); + expect(screen.getByRole('heading', { name: 'Devolved' })).toBeInTheDocument(); + expect(screen.getByRole('heading', { name: 'Local authorities (1)' })).toBeInTheDocument(); + expect(screen.getByText('Scotland')).toBeInTheDocument(); + const totalCard = screen.getByText('Programmes').parentElement!; + expect(within(totalCard).getByText('4')).toBeInTheDocument(); + expect(screen.queryByText(/Federal|State programs|By state|PolicyEngine UK models over 50/)).not.toBeInTheDocument(); + }); + + it('says the UK registry could not be loaded instead of showing the bundled US registry', async () => { + vi.mocked(fetchProgramsWithSource).mockResolvedValue({ source: { kind: 'fallback' }, programs: [] }); render(); - expect(screen.getByText(/PolicyEngine UK models over 50/)).toBeInTheDocument(); - expect(screen.queryByText(/Coverage reflects/)).not.toBeInTheDocument(); - expect(fetchProgramsWithSource).not.toHaveBeenCalled(); + expect(await screen.findByText(/UK programme registry could not be loaded/)).toBeInTheDocument(); + expect(screen.queryByText('TANF')).not.toBeInTheDocument(); }); }); diff --git a/src/test/ukTaxonomy.test.ts b/src/test/ukTaxonomy.test.ts index 064b4e0..a1fa3ce 100644 --- a/src/test/ukTaxonomy.test.ts +++ b/src/test/ukTaxonomy.test.ts @@ -94,3 +94,36 @@ describe('fillModuleNames', () => { })); }); }); + +describe('UK coverage links', () => { + it('links only to parameter folders and variable files that the pinned snapshot has', async () => { + const { verifiedLinks } = await import('../components/rules/UkCoverageTracker'); + const segment = fc.stringMatching(/^[a-z][a-z_]{0,8}$/); + fc.assert(fc.property( + fc.array(fc.array(segment, { minLength: 1, maxLength: 4 }), { maxLength: 6 }), + fc.array(segment, { minLength: 1, maxLength: 4 }), + segment, + (paramDirs, prefixParts, variable) => { + const parameterPaths = new Set(paramDirs.map((d) => `${d.join('/')}.yaml`)); + const variablePaths = new Map([[variable, `gov/x/${variable}.py`]]); + const prefix = prefixParts.join('.'); + const links = verifiedLinks( + { id: 'p', name: 'P', fullName: 'P', status: 'complete', variable, githubLinks: {} }, + prefix, { parameterPaths, variablePaths }, 'abc123', + ); + const dir = prefixParts.join('/'); + const exists = parameterPaths.has(`${dir}.yaml`) || [...parameterPaths].some((p) => p.startsWith(`${dir}/`)); + expect(Boolean(links.parameters)).toBe(exists); + expect(links.source).toBe(`https://github.com/PolicyEngine/policyengine-uk/blob/abc123/policyengine_uk/variables/gov/x/${variable}.py`); + if (links.parameters) expect(links.parameters).toContain('/abc123/policyengine_uk/parameters/'); + }, + )); + }); + + it('gives no links before the snapshot trees load, and none for ambiguous variable names', async () => { + const { verifiedLinks } = await import('../components/rules/UkCoverageTracker'); + const program = { id: 'p', name: 'P', fullName: 'P', status: 'complete' as const, variable: 'rent', githubLinks: {} }; + expect(verifiedLinks(program, 'gov.dwp', null, 'main')).toEqual({}); + expect(verifiedLinks(program, undefined, { parameterPaths: new Set(), variablePaths: new Map([['rent', null]]) }, 'main')).toEqual({}); + }); +}); diff --git a/src/types/Program.ts b/src/types/Program.ts index 2113a0d..f3eab7d 100644 --- a/src/types/Program.ts +++ b/src/types/Program.ts @@ -28,6 +28,7 @@ export interface Program { stateImplementations?: StateImplementation[]; hasStateVariation?: boolean; // Indicates program has full state-by-state variation variable?: string; // Variable name for flowchart visualization + parameterPrefix?: string; // Registry parameter_prefix, e.g. gov.hmrc.income_tax githubLinks: { parameters?: string; variables?: string; From 762fe28db2a03f2c3f6b8dd1f1c7090eb2f0560f Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:27:06 -0400 Subject: [PATCH 04/30] Rewrite the UK data pipeline from the policyengine-uk-data 1.58.0 release policyengine.org/uk/model/data/pipeline described an older build: FRS 2023-24 with ~20,000 households, WAS Round 7, LCFS 2021-22, SPI 2020-21, a 1.3x fuel uprating, PyTorch weight splits and two final weight matrices. policyengine.py 6.3.4 pins policyengine-uk-data 1.58.0 (enhanced_frs_2024_25), so the page now describes that release: - FRS 2024-25: 16,288 households, 34,966 people. - WAS Round 8, LCFS 2023-24, ETB 1977-2024, SPI 2022-23 imputations. - 10,000 zero-weight SPI copies and a capital gains copy of each household, plus 270 HMRC size-band donors: 52,846 households. - One Output Area per household in Great Britain (the publish run sets PE_UK_DATA_OA_CLONES=1); Northern Ireland's 5,660 households get none (policyengine-uk-data#580). - 650 x 52,846 constituency and 360 x 52,846 local authority weight matrices; the default file's weights are the constituency fit's column sums, scaled back to 2024. - policyengine.py serves constituencies and local authorities as row filters on the households' Output Area codes. scripts/extract_uk_release.py builds src/data/ukDataRelease.json from the release's own files (sha256-checked against the release manifest), its calibration logs, the target registry, and a run of the pinned model on the saved file (scripts/run_uk_target_check.py). The pipeline copy quotes that file, so a new pin is a re-extraction. The extractor refuses a release other than the pin, unlabelled target groups, unclaimed local metrics, repeated source households and a pinned check from another model version; a differential test compares the committed JSON with a fresh extraction. The stage rows scroll inside themselves on narrow screens, as in #49. Co-Authored-By: Claude Opus 5.5 --- scripts/dump_uk_target_registry.py | 32 + scripts/extract_uk_release.py | 868 +++++++++++++++ scripts/run_uk_target_check.py | 49 + scripts/test_extract_uk_release.py | 441 ++++++++ src/components/data/DataPipeline.tsx | 20 +- src/data/ukDataRelease.json | 1489 ++++++++++++++++++++++++++ src/data/ukDataRelease.ts | 164 +++ src/data/ukPipelineStages.ts | 365 ++++--- src/data/ukTargetChecks.json | 1 + src/test/ukDataPages.test.tsx | 84 ++ 10 files changed, 3349 insertions(+), 164 deletions(-) create mode 100644 scripts/dump_uk_target_registry.py create mode 100644 scripts/extract_uk_release.py create mode 100644 scripts/run_uk_target_check.py create mode 100644 scripts/test_extract_uk_release.py create mode 100644 src/data/ukDataRelease.json create mode 100644 src/data/ukDataRelease.ts create mode 100644 src/data/ukTargetChecks.json create mode 100644 src/test/ukDataPages.test.tsx diff --git a/scripts/dump_uk_target_registry.py b/scripts/dump_uk_target_registry.py new file mode 100644 index 0000000..4c3475b --- /dev/null +++ b/scripts/dump_uk_target_registry.py @@ -0,0 +1,32 @@ +"""Dump policyengine-uk-data's calibration target registry to JSON. + +Run it against the data package at the release tag, with the model version +that built the release, e.g. for policyengine-uk-data 1.58.0: + + git -C policyengine-uk-data archive 1.58.0 | tar -x -C /tmp/uk-data-1.58.0 + uv run --no-project --python 3.13 --with policyengine-uk==2.122.2 \\ + --with policyengine-core==3.32.13 --with pydantic --with pyyaml \\ + --with /tmp/uk-data-1.58.0 python scripts/dump_uk_target_registry.py registry_targets.json + +The registry reads only target statistics bundled with the package, no microdata. +""" + +import json +import sys + +from policyengine_uk_data.targets.registry import get_all_targets + + +def main(out_path: str) -> None: + targets = [] + for target in get_all_targets(): + row = target.model_dump(exclude={"custom_compute"}) + row["values"] = {str(year): value for year, value in row["values"].items()} + targets.append(row) + with open(out_path, "w") as f: + json.dump(targets, f, indent=1, default=str) + print(f"wrote {len(targets)} targets to {out_path}") + + +if __name__ == "__main__": + main(sys.argv[1]) diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py new file mode 100644 index 0000000..86548f1 --- /dev/null +++ b/scripts/extract_uk_release.py @@ -0,0 +1,868 @@ +"""Summarise the UK data release that policyengine.py pins, for the model pages. + +The UK pipeline, calibration and validation pages quote this file, not +typed-in numbers. Regenerate it whenever policyengine.py moves its UK pin: + + uv run --no-project --with h5py --with tables --with pandas --with numpy \\ + python scripts/extract_uk_release.py --artifacts \\ + --out src/data/ukDataRelease.json --rows-out src/data/ukTargetChecks.json + +```` holds the pinned release's files, unmodified: + +- ``bundle_manifest.json``: policyengine.py ``src/policyengine/data/bundle/manifest.json`` + at the pinned tag. +- ``release_manifest.json``: the data release's manifest, from the revision the + bundle names (``data_package.release_manifest_revision``). +- ``frs_2024_25.h5``, ``enhanced_frs_2024_25.h5``, + ``parliamentary_constituency_weights.h5``, ``local_authority_weights.h5``: + release files; their sha256 must match the release manifest. +- ``constituency_calibration_log.csv``, ``la_calibration_log.csv``: the + calibration logs the publish run uploads as GitHub Actions artifacts. +- ``registry_targets.json``: the release's national target registry, dumped + with ``scripts/dump_uk_target_registry.py`` from the data package at the + release tag. +- ``pinned_target_check.csv``: every national target scored on the released + file by the model version the bundle pins, from + ``scripts/run_uk_target_check.py``. + +Only aggregates are written. No household record leaves the input files. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import math +from pathlib import Path + +import numpy as np +import pandas as pd + +SCHEMA_VERSION = 1 +WITHIN = 0.10 # "within 10%" is |estimate / target - 1| < 0.10 + +# Who publishes each registry `source`. Labels follow GOV.UK's organisation titles. +PUBLISHERS = { + "dwp": "DWP", + "ehs": "English Housing Survey and ONS", + "hmrc": "HMRC", + "hmrc_spi": "HMRC Survey of Personal Incomes", + "nts": "DfT National Travel Survey", + "obr": "OBR", + "ons": "ONS", + "scotland_census": "Scotland's Census", + "scottish_government": "Scottish Government", + "slc": "Student Loans Company", + "voa": "Valuation Office Agency", +} + +# Registry targets whose `source` code names the wrong publisher; the +# reference URL in the registry is the authority. +PUBLISHER_BY_TARGET = { + "obr/private_school_students": "Independent Schools Council census", + "obr/salary_sacrifice_users_total": "HM Treasury and HMRC", + "obr/salary_sacrifice_users_below_cap": "HM Treasury and HMRC", + "obr/salary_sacrifice_users_above_cap": "HM Treasury and HMRC", +} + +# One row per (source, variable, geographic level, breakdown). Every group in +# the release must have a label here, or extraction fails. +GROUP_LABELS = { + ( + "dwp", + "benefit_cap_reduction", + "national", + None, + ): "Benefit cap: households capped and total reduction", + ("dwp", "esa", "national", None): "Employment and Support Allowance claimants", + ("dwp", "esa_contrib", "national", None): "Contribution-based ESA claimants", + ("dwp", "esa_income", "national", None): "Income-related ESA claimants", + ("dwp", "jsa_contrib", "national", None): "Jobseeker's Allowance claimants", + ( + "dwp", + "housing_benefit", + "national", + None, + ): "Housing Benefit claims and spending, by age group", + ("dwp", "pension_credit", "national", None): "Pension Credit claims and spending", + ( + "dwp", + "pip_dl_category", + "national", + None, + ): "PIP daily living claimants, standard and enhanced rate", + ( + "dwp", + "universal_credit", + "national", + None, + ): "Universal Credit households by family type and number of children", + ( + "dwp", + "universal_credit", + "national", + "universal_credit", + ): "Universal Credit households by family type and annual award band", + ("ehs", "rent", "national", None): "Private and social rent paid", + ( + "hmrc", + "capital_gains", + "national", + None, + ): "Capital gains: taxpayers and gains, in total and by size of gain", + ( + "hmrc", + "income_tax", + "national", + None, + ): "Salary sacrifice: income tax relief by rate band", + ( + "hmrc", + "ni_employee", + "national", + None, + ): "Salary sacrifice: employee National Insurance relief", + ( + "hmrc", + "ni_employer", + "national", + None, + ): "Salary sacrifice: employer National Insurance relief", + ( + "hmrc", + "pension_contributions_via_salary_sacrifice", + "national", + None, + ): "Pension contributions made through salary sacrifice", + ( + "hmrc_spi", + "employment_income", + "national", + "total_income", + ): "Employment income: taxpayers and amounts, by total income band", + ( + "hmrc_spi", + "self_employment_income", + "national", + "total_income", + ): "Self-employment income: taxpayers and amounts, by total income band", + ( + "hmrc_spi", + "private_pension_income", + "national", + "total_income", + ): "Private pension income: taxpayers and amounts, by total income band", + ( + "hmrc_spi", + "state_pension", + "national", + "total_income", + ): "State Pension: taxpayers and amounts, by total income band", + ( + "hmrc_spi", + "property_income", + "national", + "total_income", + ): "Property income: taxpayers and amounts, by total income band", + ( + "hmrc_spi", + "dividend_income", + "national", + "total_income", + ): "Dividend income: taxpayers and amounts, by total income band", + ( + "nts", + "num_vehicles", + "national", + None, + ): "Households with no, one, and two or more vehicles", + ("obr", "income_tax", "national", None): "Income tax receipts", + ( + "obr", + "ni_employee", + "national", + None, + ): "National Insurance receipts, in total and from employees", + ("obr", "ni_employer", "national", None): "Employer National Insurance receipts", + ( + "obr", + "ni_self_employed", + "national", + None, + ): "Self-employed National Insurance receipts", + ("obr", "vat", "national", None): "VAT receipts", + ("obr", "fuel_duty", "national", None): "Fuel duty receipts", + ("obr", "capital_gains_tax", "national", None): "Capital gains tax receipts", + ("obr", "stamp_duty_land_tax", "national", None): "Stamp Duty Land Tax receipts", + ("obr", "council_tax", "national", None): "Council tax receipts, UK and by nation", + ( + "obr", + "domestic_rates", + "national", + None, + ): "Northern Ireland domestic rates receipts", + ("obr", "tv_licence", "national", None): "TV licence fee receipts", + ("obr", "universal_credit", "national", None): "Universal Credit spending", + ("obr", "state_pension", "national", None): "State Pension spending", + ("obr", "pip", "national", None): "Personal Independence Payment spending", + ("obr", "child_benefit", "national", None): "Child Benefit spending", + ("obr", "attendance_allowance", "national", None): "Attendance Allowance spending", + ("obr", "carers_allowance", "national", None): "Carer's Allowance spending", + ( + "obr", + "esa_income", + "national", + None, + ): "Employment and Support Allowance spending", + ("obr", "jsa", "national", None): "Jobseeker's Allowance spending", + ("obr", "winter_fuel_allowance", "national", None): "Winter Fuel Payment spending", + ( + "obr", + "statutory_maternity_pay", + "national", + None, + ): "Statutory Maternity Pay spending", + ( + "obr", + "attends_private_school", + "national", + None, + ): "Pupils at independent schools", + ( + "obr", + "pension_contributions_via_salary_sacrifice", + "national", + None, + ): "Salary sacrifice users, in total and either side of the £2,000 cap", + ( + "ons", + "age", + "national", + None, + ): "UK population, in total and by sex and five-year age band", + ("ons", "age", "region", None): "Population by region and ten-year age band", + ("ons", "family_type", "national", None): "Households by family type", + ("ons", "tenure_type", "country", None): "Dwellings by tenure, by nation", + ( + "ons", + "employment_status", + "national", + None, + ): "Employees and self-employed people", + ("ons", "employment_sector", "national", None): "Public sector employment", + ("ons", "savings_interest_income", "national", None): "Household savings interest", + ("ons", "mortgage_capital_repayment", "national", None): "Mortgage payments", + ("ons", "land_value", "national", None): "Total land value", + ("ons", "household_land_value", "national", None): "Household land value", + ("ons", "household_land_value", "region", None): "Household land value by region", + ("ons", "corporate_land_value", "national", None): "Corporate land value", + ( + "scotland_census", + "is_child", + "country", + None, + ): "Scottish households with three or more children", + ( + "scottish_government", + "scottish_child_payment", + "country", + None, + ): "Scottish Child Payment spending", + ( + "slc", + "maintenance_loan", + "national", + None, + ): "Maintenance loans: recipients and spending", + ( + "slc", + "adult_dependants_grant", + "national", + None, + ): "Adult Dependants' Grant: recipients and spending", + ( + "slc", + "parents_learning_allowance", + "national", + None, + ): "Parents' Learning Allowance: recipients and spending", + ( + "slc", + "student_loan_plan", + "national", + None, + ): "Plan 2 and Plan 5 borrowers, liable and above the repayment threshold", + ( + "slc", + "student_loan_repayment", + "country", + None, + ): "Student loan repayments, by nation and plan", + ( + "voa", + "council_tax_band", + "region", + None, + ): "Dwellings by council tax band and region", +} + +# Local (per-area) metric families. Sources are the ones each loss builder's +# docstring and source module name. +LOCAL_FAMILIES = [ + ( + "age/", + "Population by ten-year age band, 0 to 79", + "ONS mid-year population estimates", + ), + ( + "hmrc/employment_income/amount", + "Employment income of income taxpayers", + "HMRC Survey of Personal Incomes, table 3.15", + ), + ( + "hmrc/employment_income/count", + "Income taxpayers with employment income", + "HMRC Survey of Personal Incomes, table 3.15", + ), + ( + "hmrc/self_employment_income/", + "Self-employment income: taxpayers and amount", + "HMRC Survey of Personal Incomes, table 3.15", + ), + ("uc_households", "Universal Credit households", "DWP Stat-Xplore"), + ("uc_hh_", "Universal Credit households by number of children", "DWP Stat-Xplore"), + ( + "housing/scotland_", + "Private renters and rent in Scottish constituencies", + "Country totals set in the build, shared by population", + ), + ( + "housing/wales_", + "Private renters and rent in Welsh constituencies", + "Country totals set in the build, shared by population", + ), + ( + "ons/equiv_", + "Equivalised income before and after housing costs, and housing costs", + "ONS small area income estimates", + ), + ("tenure/", "Households by tenure", "English Housing Survey and ONS"), + ("rent/private_rent", "Private rent paid", "ONS private rental market statistics"), + ( + "voa/council_tax/", + "Dwellings by council tax band, A to H", + "VOA council tax stock of properties", + ), + ( + "housing/council_tax_net", + "Council tax paid, net of Council Tax Reduction", + "MHCLG and Welsh Government council tax statistics", + ), +] + +# The build logs these by area but does not train on them (create_datasets.py, +# VALIDATION_ONLY_LOCAL_TARGETS). +HELD_OUT_LOCAL = "hmrc/employment_income/count" + + +class ExtractionError(ValueError): + """The inputs do not describe one consistent, pinned release.""" + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with open(path, "rb") as f: + for chunk in iter(lambda: f.read(1 << 20), b""): + digest.update(chunk) + return digest.hexdigest() + + +def fit_share( + estimate: pd.Series, target: pd.Series, tolerance: float = WITHIN +) -> float | None: + """Share of targets whose estimate is within `tolerance` of the target. + + Relative error is undefined for a zero target, so zero targets are left + out (and counted separately by the callers that can have them). Returns + None when no target is scorable. + """ + scorable = target != 0 + if not scorable.any(): + return None + error = (estimate[scorable] / target[scorable] - 1).abs() + return round(float((error < tolerance).mean()), 4) + + +def pinned_release(bundle: dict) -> dict: + try: + release = bundle["data_releases"]["uk"] + return { + "policyengine": bundle["bundle_version"], + "modelVersion": release["model_package"]["version"], + "dataPackage": release["data_package"]["name"], + "dataVersion": release["data_package"]["version"], + "releaseManifestRevision": release["data_package"][ + "release_manifest_revision" + ], + "defaultDataset": release["default_dataset"], + "datasetSha256": release["datasets"][release["default_dataset"]]["sha256"], + "regionDatasets": sorted(release.get("region_datasets", {})), + } + except KeyError as missing: + raise ExtractionError( + f"bundle manifest has no UK release field {missing}" + ) from None + + +def check_release(pin: dict, manifest: dict, artifacts: Path) -> dict: + if manifest["data_package"]["version"] != pin["dataVersion"]: + raise ExtractionError( + f"release manifest is {manifest['data_package']['version']}, bundle pins {pin['dataVersion']}" + ) + if manifest["default_datasets"].get("national") != pin["defaultDataset"]: + raise ExtractionError( + "release manifest's national default is not the bundle's default dataset" + ) + files = {} + for name in ( + pin["defaultDataset"], + "frs_2024_25", + "parliamentary_constituency_weights", + "local_authority_weights", + ): + entry = manifest["artifacts"].get(name) + if entry is None: + raise ExtractionError(f"release manifest lists no artifact {name}") + path = artifacts / entry["path"] + actual = sha256(path) + if actual != entry["sha256"]: + raise ExtractionError( + f"{entry['path']} sha256 {actual} does not match the release manifest" + ) + files[name] = path + if manifest["artifacts"][pin["defaultDataset"]]["sha256"] != pin["datasetSha256"]: + raise ExtractionError( + "bundle and release manifest disagree on the default dataset's sha256" + ) + return files + + +def read_tables(path: Path) -> dict[str, pd.DataFrame]: + return { + table: pd.read_hdf(path, table) + for table in ("household", "benunit", "person", "time_period") + } + + +def household_summary(tables: dict[str, pd.DataFrame]) -> dict: + household = tables["household"] + return { + "households": len(household), + "benefitUnits": len(tables["benunit"]), + "people": len(tables["person"]), + "weightedHouseholds": int(round(float(household["household_weight"].sum()))), + "timePeriod": str(np.asarray(tables["time_period"]).ravel()[0]), + } + + +def composition(household: pd.DataFrame, base_households: int) -> dict: + spi = household["household_is_spi_synthetic"].astype(bool) + gains = household["household_is_capital_gains_clone"].astype(bool) + donor = household["household_is_cgt_band_donor"].astype(bool) + frs = ~spi & ~gains & ~donor + spi_copies = spi & ~gains & ~donor + if int(frs.sum()) != base_households: + raise ExtractionError( + f"{int(frs.sum())} unflagged households, base FRS has {base_households}" + ) + if int(gains.sum() - (gains & donor).sum()) != int(frs.sum() + spi_copies.sum()): + raise ExtractionError( + "capital gains copies do not pair one-to-one with FRS and SPI households" + ) + weight = household["household_weight"] + return { + "frs": int(frs.sum()), + "spiCopies": int(spi_copies.sum()), + "capitalGainsCopies": int((gains & ~donor).sum()), + "cgtBandDonors": int(donor.sum()), + "spiWeightShare": round(float(weight[spi].sum() / weight.sum()), 4), + } + + +def geography(household: pd.DataFrame) -> dict: + constituency = household["constituency_code_oa"].astype(str).str.strip() + authority = household["la_code_oa"].astype(str).str.strip() + has_area = constituency.str.len() > 0 + if not (has_area == (authority.str.len() > 0)).all(): + raise ExtractionError( + "constituency and local authority codes are not assigned together" + ) + region = household["region"].astype(str) + without = region[~has_area].unique().tolist() + clones = household["clone_index"].nunique() + if household["source_household_id"].nunique() != len(household): + raise ExtractionError( + "source households repeat: the file has more than one Output Area draw per household" + ) + per_area = constituency[has_area].value_counts() + return { + "outputAreaDrawsPerHousehold": int(clones), + "householdsWithArea": int(has_area.sum()), + "householdsWithoutArea": int((~has_area).sum()), + "regionsWithoutArea": sorted(without), + "constituenciesWithHouseholds": int(per_area.size), + "householdsPerConstituency": { + "min": int(per_area.min()), + "median": float(per_area.median()), + "max": int(per_area.max()), + }, + } + + +def weight_matrix(path: Path, households: int) -> dict: + import h5py + + with h5py.File(path, "r") as f: + keys = list(f.keys()) + if len(keys) != 1: + raise ExtractionError( + f"{path.name} holds {keys}, expected one calibration year" + ) + matrix = f[keys[0]][:] + if matrix.ndim != 2 or matrix.shape[1] != households: + raise ExtractionError( + f"{path.name} has shape {matrix.shape}, expected (areas, {households})" + ) + return { + "areas": int(matrix.shape[0]), + "households": int(matrix.shape[1]), + "year": keys[0], + "matrix": matrix, + } + + +def last_epoch(log: pd.DataFrame) -> pd.DataFrame: + epoch = log["epoch"].max() + return log[log["epoch"] == epoch].copy() + + +def national_groups( + national: pd.DataFrame, registry: pd.DataFrame, pinned: pd.DataFrame +) -> tuple[list[dict], list[dict]]: + missing = sorted(set(national["metric"]) - set(registry.index)) + if missing: + raise ExtractionError( + f"logged national targets missing from the registry: {missing[:5]}" + ) + rows = national.join(registry, on="metric") + rows = rows.join( + pinned.set_index("metric")[["target", "estimate"]].add_prefix("pinned_"), + on="metric", + ) + rows["breakdown"] = rows["breakdown_variable"].where( + rows["breakdown_variable"].notna(), None + ) + groups = [] + target_rows = [] + for key, group in rows.groupby( + ["source", "variable", "geographic_level", "breakdown"], + dropna=False, + sort=False, + ): + source, variable, level, breakdown = key + breakdown = ( + None + if breakdown is None + or (isinstance(breakdown, float) and math.isnan(breakdown)) + else breakdown + ) + label = GROUP_LABELS.get((source, variable, level, breakdown)) + if label is None: + raise ExtractionError( + f"no label for target group {(source, variable, level, breakdown)}" + ) + publishers = sorted( + { + PUBLISHER_BY_TARGET.get(m, PUBLISHERS.get(source, source)) + for m in group["metric"] + } + ) + units = sorted(set(group["unit"])) + entry = { + "source": source, + "label": label, + "publisher": " and ".join(publishers), + "geography": {"national": "UK", "region": "Region", "country": "Nation"}[ + level + ], + "units": units, + "targets": len(group), + "zeroTargets": int((group["target"] == 0).sum()), + "within10": fit_share(group["estimate"], group["target"]), + "pinnedWithin10": fit_share( + group["pinned_estimate"], group["pinned_target"] + ), + "urls": sorted(set(group["reference_url"].dropna())), + "vintages": sorted(set(group["forecast_vintage"].dropna())), + } + if len(group) == 1: + entry["value"] = float(group["target"].iloc[0]) + groups.append(entry) + for _, row in group.iterrows(): + target_rows.append( + { + "id": row["metric"], + "group": label, + "unit": row["unit"], + "target": float(row["pinned_target"]), + "estimate": float(row["pinned_estimate"]), + "calibrationEstimate": float(row["estimate"]), + } + ) + order = [ + "obr", + "hmrc", + "hmrc_spi", + "dwp", + "ons", + "voa", + "slc", + "nts", + "ehs", + "scottish_government", + "scotland_census", + ] + groups.sort( + key=lambda g: ( + order.index(g["source"]) if g["source"] in order else len(order), + -g["targets"], + g["label"], + ) + ) + target_rows.sort(key=lambda r: r["id"]) + return groups, target_rows + + +def read_pinned_check(path: Path, model_version: str) -> tuple[dict, pd.DataFrame]: + meta = {} + with open(path) as f: + for line in f: + if not line.startswith("# "): + break + key, value = line[2:].strip().split("=", 1) + meta[key] = value + if meta.get("policyengine_uk") != model_version: + raise ExtractionError( + f"pinned check ran policyengine-uk {meta.get('policyengine_uk')}, the bundle pins {model_version}" + ) + checked = pd.read_csv(path, comment="#") + if ( + checked["metric"].duplicated().any() + or not np.isfinite(checked[["target", "estimate"]].to_numpy()).all() + ): + raise ExtractionError("pinned check has repeated or non-finite rows") + return meta, checked + + +def local_summary(local: pd.DataFrame, areas: int) -> dict: + if local["index"].nunique() != areas: + raise ExtractionError( + f"log covers {local['index'].nunique()} areas, the weight matrix {areas}" + ) + finite = local[np.isfinite(local["target"])] + trained = finite[finite["metric"] != HELD_OUT_LOCAL] + nonzero = trained[trained["target"] != 0] + zero = trained[trained["target"] == 0] + if (zero["estimate"].abs() > 1e-6).any(): + raise ExtractionError( + "a zero local target has a non-zero estimate; it is not a structural zero" + ) + held = finite[finite["metric"] == HELD_OUT_LOCAL] + families = [] + claimed: set[str] = set() + for prefix, label, source in LOCAL_FAMILIES: + metrics = sorted( + m + for m in local["metric"].unique() + if m.startswith(prefix) and m not in claimed + ) + if prefix == "uc_households": + metrics = [m for m in metrics if m == "uc_households"] + if not metrics: + continue + claimed.update(metrics) + cells = nonzero[nonzero["metric"].isin(metrics)] + held_family = held[held["metric"].isin(metrics)] + family = { + "label": label, + "source": source, + "metrics": len(metrics), + "heldOut": bool(len(held_family)) and not len(cells), + } + scored = held_family if family["heldOut"] else cells + family["cells"] = len(scored) + family["within10"] = fit_share(scored["estimate"], scored["target"]) + families.append(family) + unclaimed = sorted(set(local["metric"]) - claimed) + if unclaimed: + raise ExtractionError(f"local metrics with no family: {unclaimed}") + return { + "areas": int(areas), + "metrics": int(local["metric"].nunique()), + "cellsWithTarget": len(finite), + "cellsWithoutSource": int(len(local) - len(finite)), + "structuralZeroCells": len(zero), + "trainingCells": len(nonzero), + "trainingWithin10": fit_share(nonzero["estimate"], nonzero["target"]), + "heldOut": { + "metric": HELD_OUT_LOCAL, + "cells": len(held), + "within10": fit_share(held["estimate"], held["target"]), + }, + "families": families, + } + + +def calibration( + log_path: Path, registry: pd.DataFrame, areas: int +) -> tuple[dict, pd.DataFrame]: + columns = ["index", "name", "metric", "estimate", "target", "validation", "epoch"] + log = last_epoch(pd.read_csv(log_path, usecols=columns)) + national = log[log["name"] == "UK"] + local = log[log["name"] != "UK"] + if national["metric"].duplicated().any(): + raise ExtractionError(f"{log_path.name} repeats a national target") + if national["validation"].astype(bool).any(): + raise ExtractionError( + "a national target is marked validation-only; the pages assume all train" + ) + flagged = set(local.loc[local["validation"].astype(bool), "metric"]) + if flagged != {HELD_OUT_LOCAL}: + raise ExtractionError( + f"held-out local metrics are {sorted(flagged)}, expected [{HELD_OUT_LOCAL}]" + ) + summary = { + "epoch": int(log["epoch"].iloc[0]), + "nationalTargets": len(national), + "nationalWithin10": fit_share(national["estimate"], national["target"]), + "nationalWithin5": fit_share(national["estimate"], national["target"], 0.05), + "nationalZeroTargets": int((national["target"] == 0).sum()), + "local": local_summary(local, areas), + } + return summary, national + + +def extract(artifacts: Path, registry_path: Path) -> dict: + bundle = json.loads((artifacts / "bundle_manifest.json").read_text()) + manifest = json.loads((artifacts / "release_manifest.json").read_text()) + pin = pinned_release(bundle) + files = check_release(pin, manifest, artifacts) + + base = read_tables(files["frs_2024_25"]) + enhanced = read_tables(files[pin["defaultDataset"]]) + base_summary = household_summary(base) + enhanced_summary = household_summary(enhanced) + household = enhanced["household"] + + constituency = weight_matrix( + files["parliamentary_constituency_weights"], len(household) + ) + authority = weight_matrix(files["local_authority_weights"], len(household)) + ratio = ( + constituency["matrix"].sum(axis=0) / household["household_weight"].to_numpy() + ) + if ratio.max() - ratio.min() > 1e-4: + raise ExtractionError( + "constituency matrix column sums are not one uniform multiple of the saved weights" + ) + + registry = pd.DataFrame(json.loads(registry_path.read_text())).set_index("name") + run, pinned = read_pinned_check( + artifacts / "pinned_target_check.csv", pin["modelVersion"] + ) + constituency_cal, national = calibration( + artifacts / "constituency_calibration_log.csv", registry, constituency["areas"] + ) + authority_cal, authority_national = calibration( + artifacts / "la_calibration_log.csv", registry, authority["areas"] + ) + if set(national["metric"]) != set(authority_national["metric"]): + raise ExtractionError("the two calibrations fit different national targets") + if set(pinned["metric"]) != set(national["metric"]): + raise ExtractionError( + "the pinned check scored a different set of national targets from calibration" + ) + groups, target_rows = national_groups(national, registry, pinned) + + build = manifest["build"] + return { + "schemaVersion": SCHEMA_VERSION, + "release": { + **{k: v for k, v in pin.items() if k != "datasetSha256"}, + "datasetSha256": pin["datasetSha256"], + "builtAt": build["built_at"], + "builtWithModelVersion": build["built_with_model_package"]["version"], + "dataGitSha": build["metadata"]["data_package_git_sha"], + }, + "base": {**base_summary, "dataset": "frs_2024_25"}, + "enhanced": { + **enhanced_summary, + "dataset": pin["defaultDataset"], + "composition": composition(household, base_summary["households"]), + "geography": geography(household), + }, + "weightMatrices": { + "constituency": {k: v for k, v in constituency.items() if k != "matrix"}, + "localAuthority": {k: v for k, v in authority.items() if k != "matrix"}, + "columnSumPerSavedWeight": round(float(ratio.mean()), 6), + }, + "calibration": { + "epoch": constituency_cal["epoch"], + "nationalTargets": constituency_cal["nationalTargets"], + "nationalZeroTargets": constituency_cal["nationalZeroTargets"], + "nationalWithin10": constituency_cal["nationalWithin10"], + "nationalWithin5": constituency_cal["nationalWithin5"], + "constituency": constituency_cal["local"], + "localAuthority": authority_cal["local"], + "nationalGroups": groups, + }, + "validation": { + "modelVersion": run["policyengine_uk"], + "coreVersion": run["policyengine_core"], + "year": int(run["year"]), + "people": int(round(float(run["people"]))), + "households": int(round(float(run["households"]))), + "targets": len(pinned), + "zeroTargets": int((pinned["target"] == 0).sum()), + "within10": fit_share(pinned["estimate"], pinned["target"]), + "within5": fit_share(pinned["estimate"], pinned["target"], 0.05), + "rows": target_rows, + }, + } + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--artifacts", type=Path, required=True) + parser.add_argument( + "--registry", type=Path, help="defaults to /registry_targets.json" + ) + parser.add_argument("--out", type=Path, required=True, help="release summary JSON") + parser.add_argument( + "--rows-out", type=Path, required=True, help="per-target check rows JSON" + ) + args = parser.parse_args() + summary = extract( + args.artifacts, args.registry or args.artifacts / "registry_targets.json" + ) + rows = summary["validation"].pop("rows") + args.out.write_text(json.dumps(summary, indent=2, allow_nan=False) + "\n") + args.rows_out.write_text( + json.dumps(rows, separators=(",", ":"), allow_nan=False) + "\n" + ) + print(f"wrote {args.out} and {args.rows_out} ({len(rows)} targets)") + + +if __name__ == "__main__": + main() diff --git a/scripts/run_uk_target_check.py b/scripts/run_uk_target_check.py new file mode 100644 index 0000000..d184b6b --- /dev/null +++ b/scripts/run_uk_target_check.py @@ -0,0 +1,49 @@ +"""Run the pinned UK model on the pinned dataset and score every national target. + +This is the check behind the UK validation page: the released household file, +run by the model version policyengine.py pins, for the calibration year, +against the same national targets the release was calibrated to. It writes +one row per target (aggregates only). + + git -C policyengine-uk-data archive 1.58.0 | tar -x -C /tmp/uk-data-1.58.0 + uv run --no-project --python 3.13 --with policyengine-uk==2.126.12 \\ + --with policyengine-core==3.33.0 --with pydantic --with pyyaml \\ + --with /tmp/uk-data-1.58.0 python scripts/run_uk_target_check.py \\ + /enhanced_frs_2024_25.h5 2025 /pinned_target_check.csv +""" + +import sys +from importlib.metadata import version + +import pandas as pd +from policyengine_uk import Microsimulation +from policyengine_uk.data import UKSingleYearDataset +from policyengine_uk_data.targets.build_loss_matrix import create_target_matrix + + +def main(dataset_path: str, year: str, out_path: str) -> None: + dataset = UKSingleYearDataset(file_path=dataset_path) + matrix, targets = create_target_matrix(dataset, time_period=year) + sim = Microsimulation(dataset=dataset) + weights = sim.calculate("household_weight", int(year)).values + estimates = weights @ matrix.values + out = pd.DataFrame( + {"metric": targets.index, "target": targets.values, "estimate": estimates} + ) + out.attrs = {} + meta = { + "policyengine_uk": version("policyengine-uk"), + "policyengine_core": version("policyengine-core"), + "year": year, + "people": float(sim.calculate("people", int(year)).sum()), + "households": float(weights.sum()), + } + with open(out_path, "w") as f: + for key, value in meta.items(): + f.write(f"# {key}={value}\n") + out.to_csv(f, index=False) + print(meta, len(out), "targets") + + +if __name__ == "__main__": + main(*sys.argv[1:4]) diff --git a/scripts/test_extract_uk_release.py b/scripts/test_extract_uk_release.py new file mode 100644 index 0000000..3f7db54 --- /dev/null +++ b/scripts/test_extract_uk_release.py @@ -0,0 +1,441 @@ +"""Tests for extract_uk_release.py on a small synthetic release. + + uv run --no-project --with pytest --with hypothesis --with h5py --with tables \\ + --with pandas --with numpy pytest scripts/test_extract_uk_release.py +""" + +from __future__ import annotations + +import hashlib +import json +from pathlib import Path + +import extract_uk_release as ex +import h5py +import numpy as np +import pandas as pd +import pytest +from hypothesis import given, settings +from hypothesis import strategies as st + +N_FRS = 4 +N_SPI = 2 + + +def _households() -> pd.DataFrame: + """4 FRS households, 2 SPI copies, a capital gains copy of each, 1 donor.""" + rows = [] + for i in range(N_FRS): + rows.append( + dict( + spi=False, + gains=False, + donor=False, + region="WALES" if i == 0 else "LONDON", + ) + ) + for i in range(N_SPI): + rows.append(dict(spi=True, gains=False, donor=False, region="LONDON")) + for r in list(rows): + rows.append({**r, "gains": True}) + rows.append(dict(spi=False, gains=True, donor=True, region="NORTHERN_IRELAND")) + hh = pd.DataFrame(rows) + n = len(hh) + ni = hh["region"] == "NORTHERN_IRELAND" + return pd.DataFrame( + { + "household_id": np.arange(n), + "household_weight": np.linspace(100, 200, n), + "region": hh["region"], + "household_is_spi_synthetic": hh["spi"], + "household_is_capital_gains_clone": hh["gains"], + "household_is_cgt_band_donor": hh["donor"], + "source_household_id": np.arange(n) + 1000, + "clone_index": 0, + "constituency_code_oa": np.where( + ni, "", np.where(hh["region"] == "WALES", "W07000001", "E14000001") + ), + "la_code_oa": np.where(ni, "", "E06000001"), + } + ) + + +def _write_dataset( + path: Path, household: pd.DataFrame, people_per_household: int = 2 +) -> None: + n = len(household) + person = pd.DataFrame( + { + "person_household_id": np.repeat( + household["household_id"], people_per_household + ) + } + ) + benunit = pd.DataFrame({"benunit_id": np.arange(n)}) + household.to_hdf(path, key="household", format="table") + person.to_hdf(path, key="person", format="table") + benunit.to_hdf(path, key="benunit", format="table") + pd.Series(["2024"]).to_hdf(path, key="time_period", format="table") + + +def _write_weights(path: Path, areas: int, weights: np.ndarray, ratio: float) -> None: + matrix = np.tile(weights * ratio / areas, (areas, 1)) + with h5py.File(path, "w") as f: + f.create_dataset("2025", data=matrix.astype(np.float64)) + + +def _log( + areas: int, + national: list[tuple[str, float, float]], + local_metrics: dict[str, tuple[float, float]], +) -> pd.DataFrame: + rows = [] + for epoch in (0, 10): + for a in range(areas): + for metric, (target, estimate) in local_metrics.items(): + rows.append( + dict( + index=f"A{a}", + name=f"Area {a}", + metric=metric, + estimate=estimate if epoch else 0.0, + target=target, + validation=metric == ex.HELD_OUT_LOCAL, + epoch=epoch, + ) + ) + for metric, target, estimate in national: + rows.append( + dict( + index=0, + name="UK", + metric=metric, + estimate=estimate if epoch else 0.0, + target=target, + validation=False, + epoch=epoch, + ) + ) + return pd.DataFrame(rows) + + +NATIONAL = [ + ("obr/income_tax", 100.0, 105.0), + ("obr/vat", 50.0, 80.0), + ("slc/plan_5_borrowers_above_threshold", 0.0, 3.0), +] +LOCAL = { + "age/0_10": (10.0, 10.5), + "hmrc/employment_income/amount": (20.0, 30.0), + ex.HELD_OUT_LOCAL: (5.0, 9.0), + "housing/wales_private_rent_amount": (0.0, 0.0), +} +REGISTRY = [ + dict( + name="obr/income_tax", + variable="income_tax", + source="obr", + unit="gbp", + geographic_level="national", + breakdown_variable=None, + reference_url="https://obr.uk/x", + forecast_vintage="march_2026", + ), + dict( + name="obr/vat", + variable="vat", + source="obr", + unit="gbp", + geographic_level="national", + breakdown_variable=None, + reference_url="https://obr.uk/x", + forecast_vintage="march_2026", + ), + dict( + name="slc/plan_5_borrowers_above_threshold", + variable="student_loan_plan", + source="slc", + unit="count", + geographic_level="national", + breakdown_variable=None, + reference_url="https://slc.example", + forecast_vintage=None, + ), +] + + +def _sha(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +@pytest.fixture +def artifacts(tmp_path: Path) -> Path: + d = tmp_path / "release" + d.mkdir() + base = ( + _households() + .query( + "~household_is_spi_synthetic and ~household_is_capital_gains_clone and ~household_is_cgt_band_donor" + ) + .copy() + ) + _write_dataset(d / "frs_2024_25.h5", base) + enhanced = _households() + _write_dataset(d / "enhanced_frs_2024_25.h5", enhanced) + _write_weights( + d / "parliamentary_constituency_weights.h5", + 3, + enhanced["household_weight"].to_numpy(), + 1.01, + ) + _write_weights( + d / "local_authority_weights.h5", + 2, + enhanced["household_weight"].to_numpy(), + 1.0, + ) + _log(3, NATIONAL, LOCAL).to_csv(d / "constituency_calibration_log.csv", index=False) + _log(2, NATIONAL, LOCAL).to_csv(d / "la_calibration_log.csv", index=False) + (d / "registry_targets.json").write_text(json.dumps(REGISTRY)) + with open(d / "pinned_target_check.csv", "w") as f: + f.write( + "# policyengine_uk=2.126.12\n# policyengine_core=3.33.0\n# year=2025\n# people=40\n# households=1500\n" + ) + pd.DataFrame( + [(m, t, e * 1.02) for m, t, e in NATIONAL], + columns=["metric", "target", "estimate"], + ).to_csv(f, index=False) + names = [ + "enhanced_frs_2024_25", + "frs_2024_25", + "parliamentary_constituency_weights", + "local_authority_weights", + ] + files = { + "enhanced_frs_2024_25": "enhanced_frs_2024_25.h5", + "frs_2024_25": "frs_2024_25.h5", + "parliamentary_constituency_weights": "parliamentary_constituency_weights.h5", + "local_authority_weights": "local_authority_weights.h5", + } + manifest = { + "data_package": {"name": "policyengine-uk-data", "version": "1.58.0"}, + "default_datasets": {"national": "enhanced_frs_2024_25"}, + "artifacts": { + n: {"path": files[n], "sha256": _sha(d / files[n])} for n in names + }, + "build": { + "built_at": "2026-10-07T17:31:53Z", + "built_with_model_package": {"version": "2.122.2"}, + "metadata": {"data_package_git_sha": "abc"}, + }, + } + (d / "release_manifest.json").write_text(json.dumps(manifest)) + bundle = { + "bundle_version": "6.3.4", + "data_releases": { + "uk": { + "model_package": {"version": "2.126.12"}, + "data_package": { + "name": "policyengine-uk-data", + "version": "1.58.0", + "release_manifest_revision": "rev", + }, + "default_dataset": "enhanced_frs_2024_25", + "datasets": { + "enhanced_frs_2024_25": { + "sha256": manifest["artifacts"]["enhanced_frs_2024_25"][ + "sha256" + ] + } + }, + "region_datasets": {"national": {}}, + } + }, + } + (d / "bundle_manifest.json").write_text(json.dumps(bundle)) + return d + + +def run(d: Path) -> dict: + return ex.extract(d, d / "registry_targets.json") + + +def test_extracts_counts_composition_and_geography(artifacts): + out = run(artifacts) + assert ( + out["release"]["dataVersion"] == "1.58.0" + and out["release"]["modelVersion"] == "2.126.12" + ) + assert out["base"]["households"] == N_FRS and out["base"]["people"] == 2 * N_FRS + c = out["enhanced"]["composition"] + assert (c["frs"], c["spiCopies"], c["capitalGainsCopies"], c["cgtBandDonors"]) == ( + N_FRS, + N_SPI, + N_FRS + N_SPI, + 1, + ) + assert ( + c["frs"] + c["spiCopies"] + c["capitalGainsCopies"] + c["cgtBandDonors"] + == out["enhanced"]["households"] + ) + g = out["enhanced"]["geography"] + assert g["householdsWithoutArea"] == 1 and g["regionsWithoutArea"] == [ + "NORTHERN_IRELAND" + ] + assert g["outputAreaDrawsPerHousehold"] == 1 + assert out["weightMatrices"]["columnSumPerSavedWeight"] == pytest.approx(1.01) + + +def test_scores_fit_on_nonzero_targets_and_holds_out_the_validation_metric(artifacts): + out = run(artifacts) + cal = out["calibration"] + assert cal["nationalTargets"] == 3 and cal["nationalZeroTargets"] == 1 + assert ( + cal["nationalWithin10"] == 0.5 + ) # income tax within 10%, VAT not, zero target unscored + local = cal["constituency"] + assert ( + local["structuralZeroCells"] == 3 + ) # the Welsh rent anchor, zero and met in every area + assert local["trainingCells"] == 6 and local["trainingWithin10"] == 0.5 + assert local["heldOut"] == { + "metric": ex.HELD_OUT_LOCAL, + "cells": 3, + "within10": 0.0, + } + held = [f for f in local["families"] if f["heldOut"]] + assert ( + len(held) == 1 and held[0]["label"] == "Income taxpayers with employment income" + ) + v = out["validation"] + assert ( + v["targets"] == 3 and v["zeroTargets"] == 1 and v["modelVersion"] == "2.126.12" + ) + assert len(v["rows"]) == 3 and {r["id"] for r in v["rows"]} == { + m for m, *_ in NATIONAL + } + + +def test_is_deterministic_and_independent_of_log_row_order(artifacts): + first = run(artifacts) + log = pd.read_csv(artifacts / "constituency_calibration_log.csv") + log.sample(frac=1, random_state=3).to_csv( + artifacts / "constituency_calibration_log.csv", index=False + ) + assert run(artifacts) == first + + +def _expect_error(d: Path, match: str): + with pytest.raises(ex.ExtractionError, match=match): + run(d) + + +def test_rejects_a_file_whose_hash_differs_from_the_release(artifacts): + with h5py.File(artifacts / "local_authority_weights.h5", "a") as f: + f["2025"][0, 0] = 1e9 + _expect_error(artifacts, "sha256") + + +def test_rejects_a_release_other_than_the_pin(artifacts): + manifest = json.loads((artifacts / "release_manifest.json").read_text()) + manifest["data_package"]["version"] = "1.58.1" + (artifacts / "release_manifest.json").write_text(json.dumps(manifest)) + _expect_error(artifacts, "bundle pins") + + +def test_rejects_an_unlabelled_target_group(artifacts, monkeypatch): + monkeypatch.delitem(ex.GROUP_LABELS, ("obr", "vat", "national", None)) + _expect_error(artifacts, "no label") + + +def test_rejects_a_local_metric_with_no_family(artifacts): + log = pd.read_csv(artifacts / "la_calibration_log.csv") + extra = log[log["metric"] == "age/0_10"].assign(metric="mystery/metric") + pd.concat([log, extra]).to_csv(artifacts / "la_calibration_log.csv", index=False) + _expect_error(artifacts, "no family") + + +def test_rejects_a_pinned_check_from_another_model_version(artifacts): + text = ( + (artifacts / "pinned_target_check.csv") + .read_text() + .replace("2.126.12", "2.130.1") + ) + (artifacts / "pinned_target_check.csv").write_text(text) + _expect_error(artifacts, "bundle pins") + + +def test_rejects_a_zero_local_target_with_a_nonzero_estimate(artifacts): + log = pd.read_csv(artifacts / "constituency_calibration_log.csv") + log.loc[ + (log["metric"] == "housing/wales_private_rent_amount") & (log["epoch"] == 10), + "estimate", + ] = 4.0 + log.to_csv(artifacts / "constituency_calibration_log.csv", index=False) + _expect_error(artifacts, "structural zero") + + +def test_rejects_repeated_source_households(artifacts): + tables = { + k: pd.read_hdf(artifacts / "enhanced_frs_2024_25.h5", k) + for k in ("household", "person", "benunit", "time_period") + } + hh = tables["household"] + hh.loc[1, "source_household_id"] = hh.loc[0, "source_household_id"] + path = artifacts / "enhanced_frs_2024_25.h5" + path.unlink() + for k, frame in tables.items(): + frame.to_hdf(path, key=k, format="table") + manifest = json.loads((artifacts / "release_manifest.json").read_text()) + manifest["artifacts"]["enhanced_frs_2024_25"]["sha256"] = _sha(path) + (artifacts / "release_manifest.json").write_text(json.dumps(manifest)) + bundle = json.loads((artifacts / "bundle_manifest.json").read_text()) + bundle["data_releases"]["uk"]["datasets"]["enhanced_frs_2024_25"]["sha256"] = _sha( + path + ) + (artifacts / "bundle_manifest.json").write_text(json.dumps(bundle)) + _expect_error(artifacts, "more than one Output Area") + + +finite = st.floats( + min_value=-1e12, max_value=1e12, allow_nan=False, allow_infinity=False +) + + +@settings(max_examples=200, deadline=None) +@given( + st.lists(st.tuples(finite, finite), min_size=1, max_size=40), st.floats(0.001, 2) +) +def test_fit_share_is_a_share_of_the_nonzero_targets(pairs, tolerance): + targets = pd.Series([t for t, _ in pairs]) + estimates = pd.Series([e for _, e in pairs]) + share = ex.fit_share(estimates, targets, tolerance) + scorable = [(t, e) for t, e in pairs if t != 0] + if not scorable: + assert share is None + return + expected = sum(abs(e / t - 1) < tolerance for t, e in scorable) / len(scorable) + assert 0 <= share <= 1 + assert share == round(expected, 4) + assert ( + ex.fit_share(estimates, targets, tolerance * 2) >= share + ) # wider tolerance never scores fewer + + +REPO = Path(__file__).resolve().parent.parent + + +@pytest.mark.skipif( + not __import__("os").environ.get("UK_RELEASE_ARTIFACTS"), + reason="set UK_RELEASE_ARTIFACTS to the pinned release's files to run the differential check", +) +def test_committed_summary_equals_a_fresh_extraction(): + artifacts = Path(__import__("os").environ["UK_RELEASE_ARTIFACTS"]) + fresh = ex.extract(artifacts, artifacts / "registry_targets.json") + rows = fresh["validation"].pop("rows") + assert json.loads((REPO / "src/data/ukDataRelease.json").read_text()) == json.loads( + json.dumps(fresh) + ) + assert json.loads( + (REPO / "src/data/ukTargetChecks.json").read_text() + ) == json.loads(json.dumps(rows)) diff --git a/src/components/data/DataPipeline.tsx b/src/components/data/DataPipeline.tsx index 73d54c1..bbebcbd 100644 --- a/src/components/data/DataPipeline.tsx +++ b/src/components/data/DataPipeline.tsx @@ -5,7 +5,7 @@ import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import { colors, typography, spacing } from '../../designTokens'; import { pipelineStages } from '../../data/pipelineStages'; -import { ukPipelineStages } from '../../data/ukPipelineStages'; +import { ukPipelineStages, ukPipelineIntro, ukBranchLabels } from '../../data/ukPipelineStages'; import type { PipelineStage } from '../../data/pipelineStages'; import type { Country } from '../../hooks/useCountry'; import { usePublicBasePrefix } from '../../hooks/usePublicBasePrefix'; @@ -124,11 +124,11 @@ export default function DataPipeline({ country = 'us' }: { country?: Country }) }; const introText = country === 'uk' - ? 'PolicyEngine constructs its representative household dataset through a multi-stage pipeline, starting from the Family Resources Survey and producing two weight matrices: one for 650 parliamentary constituencies and one for 360 local authorities.' + ? ukPipelineIntro : 'PolicyEngine constructs its representative household dataset through a 14-step pipeline. Public survey data is merged, stratified, and cloned to 10 geographic variants per household. Each clone is simulated through PolicyEngine US with stochastic take-up, then calibrated via L0-regularized optimization against administrative targets at the national, state, and congressional district levels simultaneously, producing 488 geographically representative datasets.'; - const nationalLabel = country === 'uk' ? 'Constituency (national)' : 'National'; - const localLabel = country === 'uk' ? 'Local authority' : 'Geography-specific'; + const nationalLabel = country === 'uk' ? ukBranchLabels.national : 'National'; + const localLabel = country === 'uk' ? ukBranchLabels.local : 'Geography-specific'; return (
@@ -138,8 +138,8 @@ export default function DataPipeline({ country = 'us' }: { country?: Country }) {/* Pipeline flow - branching layout */}
- {/* Shared linear portion */} -
+ {/* Shared linear portion; scrolls inside itself on narrow screens */} +
{sharedStages.map((s, i) => (
{/* National branch */} -
+
{nationalLabel}
-
+
{nationalStages.map((s, i) => (
{/* Local branch */} -
+
{localLabel}
-
+
{localStages.map((s, i) => (
"16,288" */ +export const fmtInt = (n: number) => Math.round(n).toLocaleString('en-GB'); + +/** 0.8682 -> "86.8%"; a share with nothing to score -> "–" */ +export const fmtPct = (share: number | null) => (share === null ? '–' : `${(share * 100).toFixed(1)}%`); + +/** 28972433 -> "29.0 million" */ +export const fmtMillions = (n: number) => `${(n / 1e6).toFixed(1)} million`; + +/** "2026-10-07T17:31:53Z" -> "7 October 2026" */ +export const fmtDate = (iso: string) => + new Date(iso).toLocaleDateString('en-GB', { day: 'numeric', month: 'long', year: 'numeric', timeZone: 'UTC' }); + +/** £ amounts in the UK style: £331.4bn, £494m, £9,540. */ +export function fmtGbp(n: number): string { + const abs = Math.abs(n); + if (abs >= 1e12) return `£${(n / 1e12).toFixed(2)}tn`; + if (abs >= 1e9) return `£${(n / 1e9).toFixed(1)}bn`; + if (abs >= 1e6) return `£${(n / 1e6).toFixed(0)}m`; + return `£${fmtInt(n)}`; +} + +/** A target value in its unit. */ +export const fmtTarget = (value: number, unit: 'gbp' | 'count') => + unit === 'gbp' ? fmtGbp(value) : fmtInt(value); + +const uk = ukRelease; +const geo = uk.enhanced.geography; + +/** Facts the UK pages state, each derived from the release summary. */ +export const ukFacts = { + pin: `policyengine.py ${uk.release.policyengine}`, + data: `${uk.release.dataPackage} ${uk.release.dataVersion}`, + builtOn: fmtDate(uk.release.builtAt), + baseHouseholds: fmtInt(uk.base.households), + basePeople: fmtInt(uk.base.people), + households: fmtInt(uk.enhanced.households), + people: fmtInt(uk.enhanced.people), + constituencies: fmtInt(uk.weightMatrices.constituency.areas), + localAuthorities: fmtInt(uk.weightMatrices.localAuthority.areas), + nationalTargets: fmtInt(uk.calibration.nationalTargets), + niHouseholds: fmtInt(geo.householdsWithoutArea), + gbConstituencies: fmtInt(geo.constituenciesWithHouseholds), +}; diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index c3a578c..57cd67f 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -1,33 +1,56 @@ import type { PipelineStage } from './pipelineStages'; +import { ukRelease as uk, ukFacts as f, fmtInt, fmtPct, fmtMillions } from './ukDataRelease'; + +/* + * The UK build as policyengine-uk-data runs it for the release policyengine.py + * pins (datasets/create_datasets.py at the release tag, with the publish run's + * settings). Mechanisms cite that code; counts and fit come from + * ukDataRelease.json, which scripts/extract_uk_release.py extracts from the + * release's own files and calibration logs. + */ + +const c = uk.enhanced.composition; +const g = uk.enhanced.geography; +const cal = uk.calibration; +const stacked = c.frs + c.spiCopies; +const donorBands = c.cgtBandDonors / 30; + +export const ukPipelineIntro = + `PolicyEngine UK runs on the enhanced Family Resources Survey that ${f.pin} pins: ` + + `${f.data}, built on ${f.builtOn}. The build starts from ${f.baseHouseholds} households in the ` + + `Family Resources Survey 2024-25, imputes wealth, spending, top incomes and capital gains from other ` + + `surveys, places each household in Great Britain in an Output Area, and fits household weights to ` + + `official statistics for every constituency and for the UK as a whole.`; + +export const ukBranchLabels = { national: 'UK and constituencies', local: 'Local authorities' }; export const ukPipelineStages: PipelineStage[] = [ { id: 'frs', branch: 'shared', title: 'Family Resources Survey', - subtitle: 'Base microdata', - description: 'The Family Resources Survey (FRS) 2023-24 provides the baseline microdata, covering income, benefits, housing, and demographics for ~20,000 UK households. Variables are mapped to PolicyEngine\'s system, and benefit take-up rates are stochastically assigned.', + subtitle: 'FRS 2024-25', + description: + `The build starts from the Family Resources Survey 2024-25 (UK Data Service study 9563): ` + + `${f.baseHouseholds} households and ${f.basePeople} people. It maps the survey’s answers to PolicyEngine ` + + `UK’s inputs, keeps DWP’s grossing weights, and decides who takes up each benefit.`, icon: 'chart-bar', - inputSize: '~20,000 households', - outputSize: '~20,000 households', - dataSources: ['DWP Family Resources Survey 2023-24'], + outputSize: `${f.baseHouseholds} households`, + dataSources: ['DWP Family Resources Survey 2024-25'], details: [ - 'Demographics: age, gender, marital status, employment status, education, region (12 UK regions)', - '18+ reported benefit types: child benefit, universal credit, PIP, DLA, ESA, JSA, state pension, pension credit, housing benefit, carer\'s allowance, and more', - 'Income: employment, self-employment, private pension, savings interest, dividends, property, maintenance', - 'Housing: rent, council tax (with imputation for ~75% missing), mortgage interest/capital, tenure type, accommodation type', - 'Stochastic take-up: child benefit, UC, pension credit, marriage allowance, Scottish Child Payment, tax-free childcare, extended/universal/targeted childcare', - 'Grossing weights from FRS GROSS4 field', + `The FRS grossing weights sum to ${fmtMillions(uk.base.weightedHouseholds)} households`, + 'Families that report Child Benefit, Pension Credit or Universal Credit claim it; the build draws other families at random, at take-up rates set in the data package', + 'A family whose adults have all reached State Pension age never claims Universal Credit', + 'The build draws Marriage Allowance, Tax-Free Childcare, free childcare entitlements and Scottish Child Payment at random, at rates set in the data package', + 'Households without a reported council tax bill get the mean reported bill for their region, band and number of adults (one or more); the build nets Scottish water and sewerage charges out', + 'The build places each family in a broad rental market area at random, in proportion to privately renting households of its size in its region', ], imputations: [ - { name: 'Council tax (missing ~75%)', source: 'FRS 2023-24', method: 'Imputed from council tax band and regional rates' }, - { name: 'Benefit take-up (child benefit)', source: 'HMRC/DWP', method: 'Stochastic assignment at reported take-up rates' }, - { name: 'Benefit take-up (UC, pension credit)', source: 'DWP', method: 'Stochastic assignment at reported rates' }, - { name: 'Benefit take-up (tax-free childcare)', source: 'HMRC', method: 'Stochastic assignment at reported rate' }, - { name: 'Benefit take-up (childcare entitlements)', source: 'DfE', method: 'Stochastic assignment: extended, universal, targeted childcare' }, - { name: 'Property purchase', source: 'HMRC transaction data', method: '3.85% stochastic assignment' }, - { name: 'Private school attendance', source: 'ISC Census 2024', method: 'Stochastic assignment by region' }, - { name: 'TV ownership and licence evasion', source: 'TV Licensing data', method: 'Stochastic assignment' }, + { name: 'Council tax (unreported bills)', source: 'FRS 2024-25 reported bills', method: 'Mean by region, band and single-adult household' }, + { name: 'Benefit take-up', source: 'Reported receipt and data package take-up rates', method: 'Reporters claim; others drawn at random' }, + { name: 'Broad rental market area', source: 'Privately renting households by area', method: 'Seeded random draw' }, + { name: 'Property purchase', source: 'HMRC transactions ÷ ONS households', method: '3.85% of households, seeded random draw' }, + { name: 'TV ownership, licence evasion, first-time buyers', source: 'Rates set in the data package', method: 'Seeded random draws' }, ], }, { @@ -35,59 +58,52 @@ export const ukPipelineStages: PipelineStage[] = [ branch: 'shared', title: 'Wealth imputation', subtitle: 'WAS → FRS', - description: 'Wealth and vehicle ownership variables are imputed from the Wealth and Assets Survey (WAS) Round 7 onto FRS households using quantile random forests. This adds property, financial, and pension wealth needed for capital tax calculations, and vehicle ownership needed for fuel consumption bridging.', + description: + 'A quantile random forest trained on the Wealth and Assets Survey (Round 8, UK Data Service study 7215) ' + + 'imputes property, financial and pension wealth, vehicles and student loan balances. The build then ' + + 'rescales main residence values so each region’s mean matches the UK House Price Index.', icon: 'coin', - inputSize: '~20,000 households', - outputSize: '~20,000 households', - dataSources: ['Wealth and Assets Survey Round 7 (2018–20, released March 2022)'], + inputSize: `${f.baseHouseholds} households`, + outputSize: `${f.baseHouseholds} households`, + dataSources: ['Wealth and Assets Survey Round 8', 'UK House Price Index'], details: [ - '11 predictors: household net income, adults, children, pension/employment/self-employment/capital income, bedrooms, council tax, renting, region', - 'Northern Ireland households mapped to Wales (WAS does not sample NI)', - 'Must run before consumption imputation (num_vehicles needed as predictor)', + '11 predictors: household net income; adults; children; employment, self-employment, private pension and capital income; bedrooms; council tax; renting; region', + 'The Wealth and Assets Survey does not cover Northern Ireland, so the forest treats Northern Ireland households as if they lived in Wales', + 'This stage runs before the spending stage, which uses the imputed number of vehicles', ], imputations: [ - { name: 'Owned land', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Property wealth', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Corporate wealth (pensions + shares + ISAs)', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Gross/net financial wealth', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Main residence value', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Other residential property', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Non-residential property', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Savings', source: 'WAS Round 7', method: 'Quantile random forest' }, - { name: 'Number of vehicles', source: 'WAS Round 7', method: 'Quantile random forest' }, + { name: 'Main residence value', source: 'WAS Round 8, UK HPI', method: 'Quantile random forest, rescaled to regional means' }, + { name: 'Property, corporate and financial wealth (gross and net)', source: 'WAS Round 8', method: 'Quantile random forest' }, + { name: 'Other residential and non-residential property, land', source: 'WAS Round 8', method: 'Quantile random forest' }, + { name: 'Savings', source: 'WAS Round 8', method: 'Quantile random forest' }, + { name: 'Number of vehicles', source: 'WAS Round 8', method: 'Quantile random forest' }, + { name: 'Student loan balance', source: 'WAS Round 8', method: 'Quantile random forest, allocated to people in the household' }, ], }, { id: 'consumption', branch: 'shared', - title: 'Consumption imputation', + title: 'Spending imputation', subtitle: 'LCFS → FRS', - description: 'Spending patterns are imputed from the Living Costs and Food Survey (LCFS) onto FRS households, enabling VAT, fuel duty, and indirect tax modeling. A two-step bridge via WAS vehicle ownership corrects LCFS fuel underreporting.', + description: + 'A quantile random forest trained on the Living Costs and Food Survey 2023-24 (UK Data Service study 9468) ' + + 'imputes spending, so PolicyEngine UK can model VAT, duties and energy policy. Petrol and diesel spending ' + + 'depend on whether a household runs a fuel-burning car: the build gives one to 90% of households with a ' + + 'vehicle from the wealth stage, at random, the share in the National Travel Survey 2024.', icon: 'shopping-cart', - inputSize: '~20,000 households', - outputSize: '~20,000 households', - dataSources: ['Living Costs and Food Survey 2021-22', 'NTS 2024 (vehicle ownership)'], + inputSize: `${f.baseHouseholds} households`, + outputSize: `${f.baseHouseholds} households`, + dataSources: ['Living Costs and Food Survey 2023-24', 'NEED 2023', 'National Travel Survey 2024'], details: [ - '12 COICOP categories + petrol/diesel + domestic energy = 14 consumption variables', - '8 predictors: adult/child status, region, employment/self-employment/pension income, household net income, has_fuel_consumption', - 'Two-step fuel bridge: WAS vehicle ownership (78%) corrects LCFS diary undercount (58%)', - 'LCFS data uprated from 2021 to 2024 using CPI from OBR, with separate 1.3x fuel uprating', + '10 predictors: adults, children, region, employment income, self-employment income, private pension income, household net income, tenure, accommodation type, and fuel-burning car', + '18 outputs: the 12 COICOP spending categories, petrol, diesel, bus fares, domestic energy, electricity and gas', + 'The build rakes electricity and gas to NEED 2023 average use by income band, tenure, accommodation type and region, priced at Ofgem’s April 2026 price cap', ], imputations: [ - { name: 'Food and non-alcoholic beverages', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Alcohol and tobacco', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Clothing and footwear', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Housing, water, and electricity', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Household furnishings', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Health', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Transport', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Communication', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Recreation', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Education', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Restaurants and hotels', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Miscellaneous goods and services', source: 'LCFS 2021-22', method: 'Quantile random forest' }, - { name: 'Petrol and diesel spending', source: 'LCFS 2021-22', method: 'Quantile random forest (fuel-bridged)' }, - { name: 'Domestic energy consumption', source: 'LCFS 2021-22', method: 'Quantile random forest' }, + { name: '12 COICOP spending categories', source: 'LCFS 2023-24', method: 'Quantile random forest' }, + { name: 'Petrol and diesel spending', source: 'LCFS 2023-24, NTS 2024', method: 'Quantile random forest, given a fuel-burning car' }, + { name: 'Bus fares', source: 'LCFS 2023-24', method: 'Quantile random forest' }, + { name: 'Electricity and gas', source: 'LCFS 2023-24, NEED 2023, Ofgem', method: 'Quantile random forest, raked to NEED' }, ], }, { @@ -95,153 +111,194 @@ export const ukPipelineStages: PipelineStage[] = [ branch: 'shared', title: 'VAT and public services', subtitle: 'ETB + NHS data', - description: 'VAT expenditure rates and public service usage (NHS, education, transport subsidies) are imputed from the Effects of Taxes and Benefits survey and NHS administrative data.', + description: + 'Forests trained on the Effects of Taxes and Benefits survey impute the share of spending taxed at the ' + + 'full VAT rate and the education, rail and bus subsidies each household receives. The build assigns NHS ' + + 'visits and spending by age and sex, scaled to a £202bn 2025-26 NHS budget.', icon: 'heart-pulse', - inputSize: '~20,000 households', - outputSize: '~20,000 households', - dataSources: ['Effects of Taxes and Benefits survey (2020)', 'NHS consumption by age/gender', 'NTS 2024'], + inputSize: `${f.baseHouseholds} households`, + outputSize: `${f.baseHouseholds} households`, + dataSources: ['Effects of Taxes and Benefits 1977-2024', 'NHS activity and cost by age and sex'], details: [ - 'VAT: full-rate expenditure share imputed via QRF (assumes 3% at reduced rate per OBR)', - 'NHS: deterministic assignment of per-person spending by age-gender cell, scaled to £202bn 2025/26 budget', - 'NHS visit types: A&E, admitted patient, outpatient (6 variables)', - 'Education: DfE spending by primary/secondary/further education', - 'Transport: rail and bus subsidy spending from ETB', + 'VAT: a forest on adults, children, State Pension age and household net income predicts the share of spending taxed at the full rate', + 'Public services: a forest on age groups, pupils by school stage, DLA and PIP receipt, and household net income predicts education, rail and bus subsidy spending', + 'NHS: A&E, admitted patient and outpatient visits and spending, by age and sex', + 'After calibration, the build scales rail subsidy to £21.6bn and bus subsidy to £3.0bn, uplifted from England to the UK by population', ], imputations: [ - { name: 'Full-rate VAT expenditure rate', source: 'ETB 2020', method: 'Quantile random forest' }, - { name: 'NHS A&E/admitted/outpatient visits and spending', source: 'NHS data', method: 'Deterministic by age-gender cell' }, - { name: 'Education spending (DfE)', source: 'ETB 2020', method: 'Quantile random forest' }, - { name: 'Rail and bus subsidy', source: 'ETB 2020', method: 'Quantile random forest' }, + { name: 'Full-rate VAT spending share', source: 'ETB, financial year ending 2024', method: 'Quantile random forest' }, + { name: 'Education, rail and bus subsidy', source: 'ETB, latest year', method: 'Quantile random forest' }, + { name: 'NHS visits and spending', source: 'NHS activity and cost data', method: 'Average by age and sex, scaled to £202bn' }, ], }, { id: 'spi-income', branch: 'shared', - title: 'SPI income imputation', - subtitle: 'HMRC → FRS (stacked)', - description: 'Income variables are imputed from the HMRC Survey of Personal Incomes (SPI) to enrich the high-income tail. The FRS is stacked: original records keep their income, and a subsampled zero-weight copy (10,000 households) receives SPI-imputed incomes. Calibration later activates the most informative records.', + title: 'Top incomes', + subtitle: 'SPI → FRS (stacked)', + description: + `To represent high incomes, the build adds ${fmtInt(c.spiCopies)} copies of FRS households with zero ` + + `weight and incomes drawn from HMRC’s Survey of Personal Incomes 2022-23. Calibration then sets how much ` + + `weight each copy gets: in the released file, these households hold ${fmtPct(c.spiWeightShare)} of ` + + `household weight.`, icon: 'building-bank', - inputSize: '~20,000 households + 100,000 SPI records', - outputSize: '~30,000 households (stacked)', - dataSources: ['HMRC Survey of Personal Incomes 2020-21'], + inputSize: `${f.baseHouseholds} households`, + outputSize: `${fmtInt(stacked)} households`, + dataSources: ['HMRC Survey of Personal Incomes 2022-23'], details: [ - 'Original FRS: only dividend_income imputed from SPI', - 'Zero-weight copy (10,000 households): all 6 income variables imputed', - 'Stacked: original + zero-weight records (calibration decides which to activate)', - '3 predictors: age, gender, region', - 'Rent and mortgage adjusted proportionally to income changes', + 'One quantile random forest per earnings group (none, employee, self-employed, both) predicts incomes from age, sex and region; each trains on 100,000 SPI records drawn by weight', + 'Copies get all six income types plus Gift Aid and charitable gifts of investments; the original FRS households get only dividend income', + 'A second forest re-imputes each copy’s pension contributions and reported benefits from its new incomes, and the build redraws its Universal Credit and Pension Credit take-up', + 'Children keep their own values', ], imputations: [ - { name: 'Employment income', source: 'SPI 2020-21', method: 'Quantile random forest (zero-weight copy)' }, - { name: 'Self-employment income', source: 'SPI 2020-21', method: 'Quantile random forest (zero-weight copy)' }, - { name: 'Savings interest income', source: 'SPI 2020-21', method: 'Quantile random forest (zero-weight copy)' }, - { name: 'Dividend income', source: 'SPI 2020-21', method: 'Quantile random forest (both copies)' }, - { name: 'Private pension income', source: 'SPI 2020-21', method: 'Quantile random forest (zero-weight copy)' }, - { name: 'Property income', source: 'SPI 2020-21', method: 'Quantile random forest (zero-weight copy)' }, + { name: 'Employment, self-employment, pension, property and savings income', source: 'SPI 2022-23', method: 'Forest per earnings group (copies only)' }, + { name: 'Dividend income', source: 'SPI 2022-23', method: 'Forest per earnings group (all households)' }, + { name: 'Gift Aid and charitable gifts of investments', source: 'SPI 2022-23', method: 'Forest per earnings group (copies only)' }, + { name: 'Pension contributions and reported benefits', source: 'FRS 2024-25', method: 'Second forest, given the new incomes (copies only)' }, ], }, { id: 'capital-gains', branch: 'shared', title: 'Capital gains', - subtitle: 'Advani-Summers distribution', - description: 'Capital gains are imputed using percentile distributions from Advani & Summers research, split by income band. The dataset is doubled: each household appears as a "has gains" and "no gains" copy, with PyTorch-optimised weight splitting matching the income-band-specific percentage with gains.', + subtitle: 'Advani-Summers + HMRC', + description: + 'The build duplicates every household and gives capital gains to the first adult in each copy. An ' + + 'optimiser splits each household’s weight between its two versions so the share with gains in each income ' + + `band matches Advani and Summers’ estimates. ${fmtInt(c.cgtBandDonors)} donor households then carry ` + + `HMRC’s average gain for each size-of-gain band from £12,300 up, covering gains beyond the 95th ` + + 'percentiles where the income-band distributions stop.', icon: 'trending-up', - inputSize: '~30,000 households', - outputSize: '~60,000 households (doubled)', - dataSources: ['Advani & Summers capital gains percentile distributions'], + inputSize: `${fmtInt(stacked)} households`, + outputSize: `${f.households} households`, + dataSources: ['Advani & Summers capital gains distributions', 'HMRC Capital Gains Tax statistics, table 2.1a'], details: [ - 'Dataset duplicated: each household gets "has CG" and "no CG" versions', - 'PyTorch Adam optimiser with sigmoid blend factors splits each household\'s weight', - '100 optimisation epochs matching income-band-specific gain percentages', - 'CG amounts assigned via univariate splines fit to percentile distributions (p05-p95)', + 'Weight split: an Adam optimiser takes up to 100 steps, with each household’s share passed through a sigmoid', + 'Gain amounts: a random draw from a piecewise-linear fit to the 5th–95th percentiles of gains in the household’s income band', + `Donors: 30 for each of HMRC’s ${fmtInt(donorBands)} size-of-gain bands from £12,300 (2023-24), each starting at the weight that reproduces its band’s taxpayers`, ], }, { id: 'misc-imputations', branch: 'shared', title: 'Other imputations', - subtitle: 'Salary sacrifice, student loans', - description: 'Remaining imputations cover salary sacrifice pension contributions (from FRS respondents asked about SALSAC) and student loan plan assignment based on age and reported repayments.', + subtitle: 'Salary sacrifice, student loans, Pension Credit', + description: + 'The build sets pension contributions through salary sacrifice, student loan plans and Pension Credit ' + + 'take-up last, because each depends on incomes or wealth imputed earlier.', icon: 'school', - inputSize: '~60,000 households', - outputSize: '~60,000 households', - dataSources: ['FRS 2023-24 (SALSAC field)', 'Student loan plan rules'], + inputSize: `${f.households} households`, + outputSize: `${f.households} households`, + dataSources: ['FRS 2024-25', 'Student Loans Company', 'DWP take-up statistics'], details: [ - 'Salary sacrifice: QRF trained on ~4,000 FRS jobs with SALSAC response, imputed to ~13,000 not asked', - 'Student loan plan: rule-based from age and repayments (Plan 1 before 2012, Plan 2 2012-2023, Plan 5 2023+)', - 'Uprating from 2023 to 2025 using OBR economic assumptions for all variables', + 'Salary sacrifice: a forest on age and employment income fills in jobs whose holders the FRS did not ask, then the build switches pension contributors to salary sacrifice at random, aiming for about 5.4 million users for calibration to fit', + 'Student loans: people repaying get Plan 1, 2 or 5 from their estimated university start year; in England, the build adds Plan 2 and Plan 5 holders below the repayment threshold to match Student Loans Company totals', + 'Pension Credit: the build solves the take-up probability among entitled families so weighted take-up in Great Britain equals DWP’s caseload take-up rate; families that report Pension Credit keep claiming', ], imputations: [ - { name: 'Pension contributions via salary sacrifice', source: 'FRS 2023-24', method: 'Quantile random forest from age, employment income' }, - { name: 'Student loan plan type', source: 'Rules', method: 'Deterministic from age and repayment status' }, + { name: 'Salary sacrifice pension contributions', source: 'FRS 2024-25', method: 'Quantile random forest, then random switching' }, + { name: 'Student loan plan', source: 'Student Loans Company totals', method: 'Rules, then random assignment in England' }, + { name: 'Pension Credit take-up', source: 'DWP take-up rate', method: 'Probability solved over entitled families' }, + ], + }, + { + id: 'geography', + branch: 'shared', + title: 'Small-area geography', + subtitle: 'Output Areas', + description: + 'The build gives each household in Great Britain one Output Area, drawn at random in proportion to ' + + 'population within its survey region, which fixes its local authority and constituency. It then uprates ' + + 'the file to 2025, the year the calibration targets describe.', + icon: 'map-pin', + inputSize: `${f.households} households`, + outputSize: `${f.households} households`, + dataSources: ['ONS and NRS Output Area lookups', 'Census 2021 and 2022 populations'], + details: [ + `${fmtInt(g.householdsWithArea)} households have an Output Area; each of the ${f.gbConstituencies} constituencies in Great Britain has ${g.householdsPerConstituency.min} to ${g.householdsPerConstituency.max} of them`, + `Northern Ireland’s ${f.niHouseholds} households have none in this release: the build skips Northern Ireland while its small-area lookup is unavailable (policyengine-uk-data#580)`, + `The build can draw several Output Areas per household; the publish run drew ${g.outputAreaDrawsPerHousehold}`, ], }, { id: 'constituency-calibration', branch: 'national', - isFinalDataset: true, title: 'Constituency calibration', - subtitle: '650 × N weight matrix', - description: 'Unlike the US L0 approach, the UK uses a weight matrix: a single 650 × N matrix where each constituency gets its own set of household weights, optimised jointly with national targets using gradient descent. Column sums give the national weights. This single dataset serves both national and constituency-level analysis.', + subtitle: `${f.constituencies} × ${f.households} weights`, + description: + `Calibration gives each of the ${f.constituencies} constituencies its own weight for every household in ` + + `its nation, and fits all of them together: each constituency’s weights match its local targets, and their ` + + `sum over constituencies matches ${f.nationalTargets} UK-wide targets. That sum becomes each household’s ` + + `national weight.`, icon: 'checkbox', - inputSize: '~60,000 households (uprated)', - outputSize: '650 × ~60,000 weight matrix', - dataSources: ['ONS mid-year population estimates', 'HMRC SPI by constituency', 'DWP Stat-Xplore (UC)', 'OBR', 'HMRC', 'DWP', 'VOA'], + inputSize: `${f.households} households`, + outputSize: `${f.constituencies} × ${f.households} weights`, + dataSources: ['ONS', 'HMRC', 'DWP', 'OBR', 'VOA', 'Student Loans Company', 'and others'], details: [ - 'PyTorch Adam optimiser (lr=0.1, 512 epochs), not L0 regularisation', - 'Country mask: households only get weight in constituencies of the same country (England/Wales/Scotland/NI)', - 'Country-aware initialisation: initial weight ÷ number of areas in household\'s country', - '5% weight dropout for regularisation', - 'Symmetric relative loss: min(((1+x)/(1+y)-1)², ((1+y)/(1+x)-1)²)', - 'Joint optimisation of constituency-level and national targets simultaneously', - 'Column sums = national weights (no separate national calibration needed)', - 'Boundary mapping: 2010-boundary constituency targets transformed to 2024 boundaries via population overlap matrix', + 'An Adam optimiser fits log weights at learning rate 0.1 for 512 epochs, replacing a random 5% of weights with their mean at each step', + 'The loss adds the mean squared relative error over local targets to the same over national targets, measured symmetrically between target and estimate', + 'Starting weights divide each FRS weight by the number of constituencies in the household’s nation; the zero-weight top-income copies share half the starting total', + 'The build maps local targets from 2010 constituency boundaries to the 2024 boundaries', + `At the end of calibration, ${fmtPct(cal.nationalWithin10)} of national and ${fmtPct(cal.constituency.trainingWithin10)} of constituency targets lie within 10%`, ], calibrationTargets: [ - { variable: 'Income tax revenue', target: 'National total', source: 'OBR' }, - { variable: 'National Insurance (employee + employer)', target: 'National total', source: 'OBR' }, - { variable: 'Council tax (England/Scotland/Wales separately)', target: 'National + country', source: 'OBR' }, - { variable: 'VAT, fuel duties, CGT, SDLT, TV licence', target: 'National total', source: 'OBR' }, - { variable: 'Universal credit (total + jobseekers split)', target: 'National + per constituency', source: 'DWP Stat-Xplore' }, - { variable: 'State pension, pension credit, child benefit', target: 'National totals + caseloads', source: 'DWP/OBR' }, - { variable: 'PIP, DLA, ESA, JSA, housing benefit, carer\'s allowance', target: 'National totals + caseloads', source: 'DWP/OBR' }, - { variable: 'Population by region × age band', target: '12 regions × 9 bands', source: 'ONS mid-year estimates' }, - { variable: 'Income distribution by band', target: '6 income types × ~14 bands', source: 'HMRC income projection' }, - { variable: 'Employment/self-employment income by constituency', target: '650 constituencies', source: 'HMRC SPI' }, - { variable: 'Age demographics by constituency', target: '650 × 8 age bands', source: 'ONS' }, - { variable: 'Council tax bands by region', target: '11 regions × 8 bands', source: 'VOA/Scottish Govt' }, - { variable: 'Salary sacrifice', target: 'IT relief by band + total', source: 'HMRC' }, - { variable: 'Scottish Child Payment', target: '£471m total spend', source: 'Scottish Government' }, - { variable: 'Vehicle ownership', target: '0/1/2+ distribution', source: 'NTS 2024' }, - { variable: 'Mortgage payments, private rent', target: 'National totals', source: 'ONS' }, + ...cal.constituency.families.map((fam) => ({ + variable: fam.heldOut ? `${fam.label} (logged, not fitted)` : fam.label, + target: `${f.constituencies} × ${fam.metrics}`, + source: fam.source, + })), + { variable: 'UK-wide targets', target: f.nationalTargets, source: 'See calibration targets' }, + ], + link: { label: 'All calibration targets', path: '/data/calibration' }, + }, + { + id: 'final-dataset', + branch: 'national', + isFinalDataset: true, + title: 'Enhanced FRS 2024-25', + subtitle: 'Default dataset', + description: + `The build scales the national weights back to 2024, the file’s year, and PolicyEngine UK uprates them ` + + `when it loads the file. It rescales rail and bus subsidies, bus fares and road fuel volumes to published ` + + `totals and saves the file as ${uk.release.defaultDataset}, the dataset ${f.pin} runs for the UK.`, + icon: 'stack-2', + inputSize: `${f.constituencies} × ${f.households} weights`, + outputSize: `${f.households} households`, + dataSources: [f.data], + details: [ + `${f.households} households and ${f.people} people, weighted to ${fmtMillions(uk.enhanced.weightedHouseholds)} households in 2024`, + `${fmtInt(c.frs)} FRS households, ${fmtInt(c.spiCopies)} top-income copies, ${fmtInt(c.capitalGainsCopies)} capital gains copies and ${fmtInt(c.cgtBandDonors)} capital gains donors`, + 'policyengine.py analyses a constituency or local authority with the households whose Output Area lies in it, at their national weights', + 'Northern Ireland constituencies and local authorities have no households in this release, so policyengine.py stops with an error for them', ], + link: { label: 'How the data compares with official statistics', path: '/data/validation' }, }, { id: 'la-calibration', branch: 'local', - isFinalDataset: true, title: 'Local authority calibration', - subtitle: '360 × N weight matrix', - description: 'A second weight matrix covers 360 local authorities, using the same gradient descent approach but with additional LA-specific targets including ONS income estimates, tenure type, and private rents by area.', + subtitle: `${f.localAuthorities} × ${f.households} weights`, + description: + `The same fit runs over ${f.localAuthorities} local authorities, with more local targets: income and ` + + `housing costs, tenure, private rents, and council tax bands and bills. The loss leaves out any target ` + + `with no local source. The release ships these weights as local_authority_weights.h5; the default ` + + `dataset’s weights come from the constituency fit.`, icon: 'building-community', - inputSize: '~60,000 households (uprated)', - outputSize: '360 × ~60,000 weight matrix', - dataSources: ['ONS income estimates by MSOA', 'DWP Stat-Xplore (UC by LA)', 'ONS Census tenure data', 'VOA private rents'], + inputSize: `${f.households} households`, + outputSize: `${f.localAuthorities} × ${f.households} weights`, + dataSources: ['ONS', 'HMRC', 'DWP', 'VOA', 'MHCLG', 'Welsh Government'], details: [ - 'Same PyTorch Adam optimiser and loss function as constituency calibration', - 'Same national targets plus LA-specific targets', - 'Additional targets not in constituency calibration: tenure type, private rents, ONS income estimates', - 'Output saved as separate local_authority_weights.h5', + `${fmtInt(cal.localAuthority.cellsWithTarget)} local targets across ${cal.localAuthority.metrics} measures; ${fmtInt(cal.localAuthority.cellsWithoutSource)} area and measure pairs have no source`, + `At the end of calibration, ${fmtPct(cal.localAuthority.trainingWithin10)} of local authority targets lie within 10%`, ], calibrationTargets: [ - { variable: 'Age demographics by LA', target: '360 × 8 age bands', source: 'ONS' }, - { variable: 'Employment/self-employment income by LA', target: '360 LAs', source: 'HMRC SPI' }, - { variable: 'UC households by LA', target: '360 LAs', source: 'DWP Stat-Xplore' }, - { variable: 'Equivalent net income (BHC/AHC)', target: 'Per LA', source: 'ONS MSOA income (uprated)' }, - { variable: 'Tenure type (owned/mortgage/private/social)', target: 'Per LA', source: 'ONS Census' }, - { variable: 'Private rent amounts', target: 'Per LA', source: 'VOA median rents' }, - { variable: '+ all national targets from constituency calibration', target: 'See above', source: 'OBR/HMRC/DWP/ONS' }, + ...cal.localAuthority.families.map((fam) => ({ + variable: fam.heldOut ? `${fam.label} (logged, not fitted)` : fam.label, + target: `${f.localAuthorities} × ${fam.metrics}`, + source: fam.source, + })), + { variable: 'UK-wide targets', target: f.nationalTargets, source: 'See calibration targets' }, ], }, ]; diff --git a/src/data/ukTargetChecks.json b/src/data/ukTargetChecks.json new file mode 100644 index 0000000..7e07249 --- /dev/null +++ b/src/data/ukTargetChecks.json @@ -0,0 +1 @@ +[{"id":"dwp/benefit_cap_total_reduction","group":"Benefit cap: households capped and total reduction","unit":"gbp","target":320866000.0,"estimate":416482947.560074,"calibrationEstimate":330069710.0619365},{"id":"dwp/benefit_capped_households","group":"Benefit cap: households capped and total reduction","unit":"count","target":110637.0,"estimate":147944.28814807534,"calibrationEstimate":114504.09350681303},{"id":"dwp/esa_claimants","group":"Employment and Support Allowance claimants","unit":"count","target":999000.0,"estimate":904541.0915792732,"calibrationEstimate":909849.9250053912},{"id":"dwp/esa_contrib_claimants","group":"Contribution-based ESA claimants","unit":"count","target":620000.0,"estimate":716681.2252025008,"calibrationEstimate":719872.2350563705},{"id":"dwp/esa_income_claimants","group":"Income-related ESA claimants","unit":"count","target":180000.0,"estimate":188801.45329512656,"calibrationEstimate":190923.46925877035},{"id":"dwp/housing_benefit/over_pension_credit_age","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":7114700000.0,"estimate":7111903913.229882,"calibrationEstimate":7293068999.985946},{"id":"dwp/housing_benefit/over_pension_credit_age_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":1109000.0,"estimate":1093247.9535357058,"calibrationEstimate":1168281.94529891},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":584800000.0,"estimate":645921139.0904175,"calibrationEstimate":601213368.3664361},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":107000.0,"estimate":108791.38991189004,"calibrationEstimate":109275.78261888029},{"id":"dwp/jsa_claimants","group":"Jobseeker's Allowance claimants","unit":"count","target":71000.0,"estimate":69247.07556176186,"calibrationEstimate":69555.39922833443},{"id":"dwp/pension_credit","group":"Pension Credit claims and spending","unit":"gbp","target":6144470000.0,"estimate":6602274120.813976,"calibrationEstimate":6377744108.750391},{"id":"dwp/pension_credit_claims","group":"Pension Credit claims and spending","unit":"count","target":1382000.0,"estimate":1451705.6834389567,"calibrationEstimate":1452205.295378387},{"id":"dwp/pip_dl_enhanced_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1608000.0,"estimate":1953368.303418666,"calibrationEstimate":1962065.646411702},{"id":"dwp/pip_dl_standard_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1283000.0,"estimate":1419466.81792067,"calibrationEstimate":1425786.9713478386},{"id":"dwp/scotland_uc_households_child_under_1","group":"Universal Credit households by family type and number of children","unit":"count","target":14000.0,"estimate":14566.249044418337,"calibrationEstimate":14631.105303406715},{"id":"dwp/uc/claimants_couple_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":231368.0,"estimate":250896.79244339463,"calibrationEstimate":251991.6941986084},{"id":"dwp/uc/claimants_couple_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":839379.0,"estimate":913383.3023456336,"calibrationEstimate":920606.89293769},{"id":"dwp/uc/claimants_single_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2868011.0,"estimate":2889435.6531457454,"calibrationEstimate":2918404.0829007328},{"id":"dwp/uc/claimants_single_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2156879.0,"estimate":2380399.2202840894,"calibrationEstimate":2392176.4252111316},{"id":"dwp/uc/claimants_with_1_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1222944.0,"estimate":1295755.060847789,"calibrationEstimate":1302878.9863807857},{"id":"dwp/uc/claimants_with_2_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1058967.0,"estimate":1121193.9276535958,"calibrationEstimate":1125632.9012648463},{"id":"dwp/uc/claimants_with_3_children","group":"Universal Credit households by family type and number of children","unit":"count","target":473500.0,"estimate":502609.9927156568,"calibrationEstimate":507203.147459805},{"id":"dwp/uc/claimants_with_4_children","group":"Universal Credit households by family type and number of children","unit":"count","target":166790.0,"estimate":174326.93197226524,"calibrationEstimate":175103.1191417575},{"id":"dwp/uc/claimants_with_5+_children","group":"Universal Credit households by family type and number of children","unit":"count","target":75910.0,"estimate":79091.86563810706,"calibrationEstimate":79444.01964199543},{"id":"dwp/uc/households","group":"Universal Credit households by family type and number of children","unit":"count","target":6700000.0,"estimate":6348971.35797745,"calibrationEstimate":6395623.053902179},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":7610.0,"estimate":7420.538169384003,"calibrationEstimate":7514.299792408943},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12370.0,"estimate":15733.237529218197,"calibrationEstimate":12799.954794287682},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":15175.0,"estimate":11472.3235373199,"calibrationEstimate":15871.05467006564},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":12297.0,"estimate":12021.353377342224,"calibrationEstimate":12654.892155706882},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17828.0,"estimate":19456.112460017204,"calibrationEstimate":18263.504908561707},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":14427.0,"estimate":15080.27974140644,"calibrationEstimate":15080.074879169464},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":11892.0,"estimate":17644.776905357838,"calibrationEstimate":11945.356312990189},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":9463.0,"estimate":10057.979517936708,"calibrationEstimate":9759.450750350952},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8443.0,"estimate":9638.97747528553,"calibrationEstimate":8904.66766166687},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8906.0,"estimate":8274.131901025772,"calibrationEstimate":9022.64424419403},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5770.0,"estimate":4132.918827056885,"calibrationEstimate":5968.669494628906},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":3485.0,"estimate":5987.513103485107,"calibrationEstimate":3668.190024375915},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":2360.0,"estimate":2347.807508468628,"calibrationEstimate":2415.9390258789062},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":1815.0,"estimate":443.7221064567566,"calibrationEstimate":1831.3727984428408},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":1186.0,"estimate":2170.6248083114624,"calibrationEstimate":1187.413498878479},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":935.0,"estimate":1428.0487060546875,"calibrationEstimate":967.2799072265624},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":632.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":580.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":11750.0,"estimate":13848.374123096466,"calibrationEstimate":11923.90768444538},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":1424.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":10802.0,"estimate":8128.508852601051,"calibrationEstimate":10862.276925444605},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12168.0,"estimate":16164.80532181263,"calibrationEstimate":12346.467386484146},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":12461.0,"estimate":5748.578682214022,"calibrationEstimate":12841.8128490448},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":15787.0,"estimate":17204.907525718212,"calibrationEstimate":16464.121763527393},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":14248.0,"estimate":14648.581487357616,"calibrationEstimate":14936.235798239708},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":17559.0,"estimate":15425.641696095468,"calibrationEstimate":18029.333872824907},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":18714.0,"estimate":17000.313221901655,"calibrationEstimate":18860.421827226877},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":42188.0,"estimate":37726.34860146046,"calibrationEstimate":44076.01454716921},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":41520.0,"estimate":47141.35041385889,"calibrationEstimate":43324.978789806366},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":41159.0,"estimate":41947.755105018616,"calibrationEstimate":43194.09025865793},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":42515.0,"estimate":43577.436663627625,"calibrationEstimate":44944.778411865234},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":38527.0,"estimate":41018.2691783905,"calibrationEstimate":40481.27525937557},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":38894.0,"estimate":38215.3523761034,"calibrationEstimate":40602.91079157591},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":38659.0,"estimate":41123.29328751564,"calibrationEstimate":40460.888354063034},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34318.0,"estimate":48566.454991579056,"calibrationEstimate":35928.6571059227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":22489.0,"estimate":21205.43173134327,"calibrationEstimate":23000.909938097},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":30116.0,"estimate":28863.080528736115,"calibrationEstimate":31526.387284994125},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":28519.0,"estimate":21444.73471069336,"calibrationEstimate":29762.76909518242},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":26014.0,"estimate":23408.44104397297,"calibrationEstimate":26872.75042545795},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":23159.0,"estimate":35138.78228497505,"calibrationEstimate":24115.846549868584},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":20618.0,"estimate":16612.729299545288,"calibrationEstimate":21560.06649184227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17493.0,"estimate":19232.653191685677,"calibrationEstimate":18100.27004623413},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":15437.0,"estimate":20070.599754333496,"calibrationEstimate":15988.015625},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12836.0,"estimate":11836.146595954897,"calibrationEstimate":13421.761481285095},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":26734.0,"estimate":28675.483907222748,"calibrationEstimate":27596.403090000153},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":61727.0,"estimate":65997.26235544682,"calibrationEstimate":64758.198789417744},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":29189.0,"estimate":28463.220873951912,"calibrationEstimate":30442.063633084297},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":33137.0,"estimate":31760.17704331875,"calibrationEstimate":34303.848853588104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":35834.0,"estimate":26437.818723022938,"calibrationEstimate":37270.02708786726},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":38338.0,"estimate":54036.251175284386,"calibrationEstimate":40042.640211343765},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":40685.0,"estimate":44348.22739729285,"calibrationEstimate":42527.98726695776},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":40564.0,"estimate":34501.503211796284,"calibrationEstimate":42208.232148468494},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":24639.0,"estimate":39168.9606487751,"calibrationEstimate":25625.726674437523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":126949.0,"estimate":142487.4302058667,"calibrationEstimate":133277.48989093304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":131129.0,"estimate":95377.8368690312,"calibrationEstimate":137752.16340973973},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":131289.0,"estimate":157107.79431578517,"calibrationEstimate":137750.63612690568},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":119355.0,"estimate":129818.38890782,"calibrationEstimate":124892.34173852204},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":130802.0,"estimate":131328.063896209,"calibrationEstimate":136759.86128601432},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":141848.0,"estimate":150728.17493000627,"calibrationEstimate":148309.65001174808},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":136835.0,"estimate":133713.73497787118,"calibrationEstimate":142901.4171705842},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":107556.0,"estimate":111484.7263495922,"calibrationEstimate":113109.20482206345},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34670.0,"estimate":29272.17201089859,"calibrationEstimate":36466.16493701935},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":86616.0,"estimate":104096.27746334672,"calibrationEstimate":90422.71904051304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":80294.0,"estimate":73354.04017925262,"calibrationEstimate":84354.22553360462},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":70309.0,"estimate":89331.43440103531,"calibrationEstimate":73447.99977698922},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":50510.0,"estimate":72202.29325729609,"calibrationEstimate":53156.73221343756},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":42522.0,"estimate":18497.629060208797,"calibrationEstimate":44506.54565644264},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":33508.0,"estimate":49045.771344304085,"calibrationEstimate":35145.99563121796},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":27063.0,"estimate":30266.55286216736,"calibrationEstimate":28766.448501110077},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":21663.0,"estimate":26942.793876886368,"calibrationEstimate":22648.643339395523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":43623.0,"estimate":37809.548577189445,"calibrationEstimate":45833.974639594555},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":82905.0,"estimate":97151.36844921112,"calibrationEstimate":87104.91118597984},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":55622.0,"estimate":60510.223631858826,"calibrationEstimate":58795.10524368286},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":67901.0,"estimate":71725.4553387165,"calibrationEstimate":70821.50663983822},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":89314.0,"estimate":86143.68657708168,"calibrationEstimate":93578.26927548648},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":118641.0,"estimate":119403.35334032774,"calibrationEstimate":124258.13893908262},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":99069.0,"estimate":97294.37053111196,"calibrationEstimate":103667.6788329184},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":102251.0,"estimate":96173.39577645063,"calibrationEstimate":107101.9515336156},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":102312.0,"estimate":87279.16967123747,"calibrationEstimate":107319.9899930358},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":95698.0,"estimate":135695.77643716335,"calibrationEstimate":100056.6025826335},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":106663.0,"estimate":124074.26766955853,"calibrationEstimate":111498.78546503186},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":181180.0,"estimate":188187.3756595254,"calibrationEstimate":191690.2932780385},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":189861.0,"estimate":186351.02785767615,"calibrationEstimate":199963.96529877183},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":129174.0,"estimate":185164.77054291964,"calibrationEstimate":136010.89976614714},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":84690.0,"estimate":54264.40361404419,"calibrationEstimate":88587.68869447708},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":46244.0,"estimate":71491.7329352498,"calibrationEstimate":47919.61390686035},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":26481.0,"estimate":35623.84896039963,"calibrationEstimate":27905.27891921997},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":120819.0,"estimate":128539.76422923803,"calibrationEstimate":126547.3099425435},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":18143.0,"estimate":31588.639366149902,"calibrationEstimate":18797.771575927734},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":12325.0,"estimate":4426.75733757019,"calibrationEstimate":12941.009860992432},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":9555.0,"estimate":10281.057233810425,"calibrationEstimate":9941.590031147003},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":6230.0,"estimate":8126.360444545746,"calibrationEstimate":6391.2335205078125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":5884.0,"estimate":6362.902786254883,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5362.0,"estimate":1998.391206741333,"calibrationEstimate":5583.823296546936},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":1786.0,"estimate":2339.0858516693115,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":1491.0,"estimate":1221.5946044921875,"calibrationEstimate":1580.0684814453125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":173925.0,"estimate":173553.54143616557,"calibrationEstimate":180896.03793656823},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":3518.0,"estimate":5268.748246669769,"calibrationEstimate":3712.138840675354},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":375706.0,"estimate":405618.4962475896,"calibrationEstimate":399359.66108581424},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":200713.0,"estimate":186214.24044963715,"calibrationEstimate":212072.70295926929},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":107860.0,"estimate":76928.3390161097,"calibrationEstimate":113803.28732386231},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":144036.0,"estimate":167346.22477129102,"calibrationEstimate":151404.9450480342},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":377221.0,"estimate":349366.41928082705,"calibrationEstimate":405079.322792083},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":341138.0,"estimate":368394.08331155777,"calibrationEstimate":365472.416688472},{"id":"hmrc/capital_gains_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5805652941.176472,"estimate":2178688648.0482244,"calibrationEstimate":2141544289.3825493},{"id":"hmrc/capital_gains_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":6567201680.67227,"estimate":7324580857.580844,"calibrationEstimate":5995201312.511488},{"id":"hmrc/capital_gains_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":1457322689.0756304,"estimate":876994527.1745476,"calibrationEstimate":832080688.7293456},{"id":"hmrc/capital_gains_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":9443821008.403362,"estimate":8915647072.518879,"calibrationEstimate":8817479175.49674},{"id":"hmrc/capital_gains_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":2718348739.4957986,"estimate":1471546074.3489742,"calibrationEstimate":1444078653.7115064},{"id":"hmrc/capital_gains_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":4898166386.554623,"estimate":3799760749.882065,"calibrationEstimate":3788282184.501421},{"id":"hmrc/capital_gains_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":3834464705.882354,"estimate":1744185904.570274,"calibrationEstimate":1735553375.6752963},{"id":"hmrc/capital_gains_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5863205882.3529415,"estimate":4403841031.357599,"calibrationEstimate":5555259154.762842},{"id":"hmrc/capital_gains_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":23343884033.61345,"estimate":21727639789.17903,"calibrationEstimate":21488402885.15877},{"id":"hmrc/capital_gains_total","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":67727478991.59665,"estimate":55861737820.9182,"calibrationEstimate":55238457530.72525},{"id":"hmrc/cgt_taxpayers","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":378000.0,"estimate":594003.8427731246,"calibrationEstimate":593891.4494462013},{"id":"hmrc/cgt_taxpayers_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":37000.0,"estimate":13544.740693077443,"calibrationEstimate":13360.691625073552},{"id":"hmrc/cgt_taxpayers_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":5000.0,"estimate":5812.870928764343,"calibrationEstimate":4586.156556129456},{"id":"hmrc/cgt_taxpayers_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":79000.0,"estimate":50256.21771013737,"calibrationEstimate":46247.366893053055},{"id":"hmrc/cgt_taxpayers_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":3000.0,"estimate":2788.615041732788,"calibrationEstimate":2801.031301498413},{"id":"hmrc/cgt_taxpayers_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":74000.0,"estimate":43994.12303459644,"calibrationEstimate":43312.22687217593},{"id":"hmrc/cgt_taxpayers_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":14000.0,"estimate":10944.578097075224,"calibrationEstimate":11016.595499932766},{"id":"hmrc/cgt_taxpayers_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":53000.0,"estimate":24514.88641294837,"calibrationEstimate":24518.887231260534},{"id":"hmrc/cgt_taxpayers_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":8000.0,"estimate":6178.642288446426,"calibrationEstimate":7360.933691740036},{"id":"hmrc/cgt_taxpayers_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":2000.0,"estimate":1832.8698182106016,"calibrationEstimate":1841.0306429862976},{"id":"hmrc/dividend_income_count_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":222000.0,"estimate":229554.611115098,"calibrationEstimate":229451.83542212844},{"id":"hmrc/dividend_income_count_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":115000.0,"estimate":122498.21870449184,"calibrationEstimate":116450.05363586544},{"id":"hmrc/dividend_income_count_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":92000.0,"estimate":95837.3041176498,"calibrationEstimate":94981.9433400631},{"id":"hmrc/dividend_income_count_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":372000.0,"estimate":347627.6361439526,"calibrationEstimate":382888.00691989064},{"id":"hmrc/dividend_income_count_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":19000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_count_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":75000.0,"estimate":76900.66770100594,"calibrationEstimate":77183.34881728888},{"id":"hmrc/dividend_income_count_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":843000.0,"estimate":867481.3310358822,"calibrationEstimate":871528.9038848877},{"id":"hmrc/dividend_income_count_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":49000.0,"estimate":45323.63685941696,"calibrationEstimate":50523.88130879402},{"id":"hmrc/dividend_income_count_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":667000.0,"estimate":703025.5269361734,"calibrationEstimate":686016.7727653384},{"id":"hmrc/dividend_income_count_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":627000.0,"estimate":650857.9845430255,"calibrationEstimate":655597.3248263001},{"id":"hmrc/dividend_income_count_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":32000.0,"estimate":18903.09976196289,"calibrationEstimate":13924.291625976562},{"id":"hmrc/dividend_income_count_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":673194.9035950899,"calibrationEstimate":665673.386961177},{"id":"hmrc/dividend_income_count_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":336000.0,"estimate":343528.61046367884,"calibrationEstimate":346362.1282174885},{"id":"hmrc/dividend_income_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":6870000000.0,"estimate":7095222924.861016,"calibrationEstimate":7114063772.399986},{"id":"hmrc/dividend_income_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":175000000.0,"estimate":192951222.35627183,"calibrationEstimate":173661019.52219003},{"id":"hmrc/dividend_income_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3450000000.0,"estimate":3692746817.185143,"calibrationEstimate":3550464125.442072},{"id":"hmrc/dividend_income_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":855000000.0,"estimate":845993440.2610878,"calibrationEstimate":880729109.8346382},{"id":"hmrc/dividend_income_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":11100000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3700000000.0,"estimate":3828837168.167787,"calibrationEstimate":3797956584.5345135},{"id":"hmrc/dividend_income_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3330000000.0,"estimate":3395614770.515832,"calibrationEstimate":3442786712.469958},{"id":"hmrc/dividend_income_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3430000000.0,"estimate":3496980217.987605,"calibrationEstimate":3447032285.480977},{"id":"hmrc/dividend_income_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":4700000000.0,"estimate":4851171796.430717,"calibrationEstimate":4835994933.974208},{"id":"hmrc/dividend_income_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":8400000000.0,"estimate":8938303214.071344,"calibrationEstimate":8791437358.27874},{"id":"hmrc/dividend_income_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3820000000.0,"estimate":156339333.4031915,"calibrationEstimate":154123616.4699381},{"id":"hmrc/dividend_income_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":12500000000.0,"estimate":13160523430.36148,"calibrationEstimate":12946721023.778358},{"id":"hmrc/dividend_income_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":9440000000.0,"estimate":10052671812.436289,"calibrationEstimate":9911749501.39766},{"id":"hmrc/employment_income_count_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":791000.0,"estimate":843150.2165419757,"calibrationEstimate":826560.6833594143},{"id":"hmrc/employment_income_count_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1360000.0,"estimate":1381056.812882781,"calibrationEstimate":1389994.5120541155},{"id":"hmrc/employment_income_count_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":264000.0,"estimate":283089.4560998976,"calibrationEstimate":272207.9791575968},{"id":"hmrc/employment_income_count_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3100000.0,"estimate":2941183.2826600075,"calibrationEstimate":3131268.366346717},{"id":"hmrc/employment_income_count_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_count_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":180000.0,"estimate":183886.50804448128,"calibrationEstimate":191119.33520907164},{"id":"hmrc/employment_income_count_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":7470000.0,"estimate":7394907.693445265,"calibrationEstimate":7696814.897311896},{"id":"hmrc/employment_income_count_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":93000.0,"estimate":107923.93404233456,"calibrationEstimate":100106.93683218956},{"id":"hmrc/employment_income_count_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":5370000.0,"estimate":5930080.231027737,"calibrationEstimate":5646706.61297296},{"id":"hmrc/employment_income_count_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3500000.0,"estimate":3692167.4615677,"calibrationEstimate":3691681.077874422},{"id":"hmrc/employment_income_count_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":44000.0,"estimate":51452.47190284729,"calibrationEstimate":46618.58825778961},{"id":"hmrc/employment_income_count_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3430000.0,"estimate":3712399.601767317,"calibrationEstimate":3598074.21717},{"id":"hmrc/employment_income_count_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1640000.0,"estimate":1755926.1428863704,"calibrationEstimate":1737828.3395847082},{"id":"hmrc/employment_income_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":82300000000.0,"estimate":91413568331.97716,"calibrationEstimate":89270291253.19441},{"id":"hmrc/employment_income_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17625951516.993526,"calibrationEstimate":17707792264.599216},{"id":"hmrc/employment_income_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":39200000000.0,"estimate":43121325615.01092,"calibrationEstimate":41343663545.83801},{"id":"hmrc/employment_income_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":48600000000.0,"estimate":48521133900.22364,"calibrationEstimate":51842432145.73113},{"id":"hmrc/employment_income_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":35500000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":36600000000.0,"estimate":36151749235.49467,"calibrationEstimate":38383016939.89171},{"id":"hmrc/employment_income_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":172000000000.0,"estimate":177253034078.8408,"calibrationEstimate":185685923740.2714},{"id":"hmrc/employment_income_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":29000000000.0,"estimate":32519523768.135063,"calibrationEstimate":30656152523.340366},{"id":"hmrc/employment_income_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":170000000000.0,"estimate":195144568163.3972,"calibrationEstimate":186138215953.9731},{"id":"hmrc/employment_income_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":139000000000.0,"estimate":152968049441.96802,"calibrationEstimate":152580231489.52524},{"id":"hmrc/employment_income_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":23100000000.0,"estimate":27980302639.935696,"calibrationEstimate":25227641740.95949},{"id":"hmrc/employment_income_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":174000000000.0,"estimate":205992790440.03635,"calibrationEstimate":198611833647.03937},{"id":"hmrc/employment_income_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":118000000000.0,"estimate":132579308720.52338,"calibrationEstimate":130650324064.52023},{"id":"hmrc/private_pension_income_count_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":109000.0,"estimate":111826.396561265,"calibrationEstimate":111957.39517956972},{"id":"hmrc/private_pension_income_count_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1070000.0,"estimate":1108551.329273358,"calibrationEstimate":1078785.8509754688},{"id":"hmrc/private_pension_income_count_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":29000.0,"estimate":32248.34685358405,"calibrationEstimate":31194.256974309683},{"id":"hmrc/private_pension_income_count_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2140000.0,"estimate":2185144.9934265465,"calibrationEstimate":2193027.785250634},{"id":"hmrc/private_pension_income_count_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_count_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":20000.0,"estimate":19481.926417827606,"calibrationEstimate":20442.59133195877},{"id":"hmrc/private_pension_income_count_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2660000.0,"estimate":2728957.4601238817,"calibrationEstimate":2748158.453831658},{"id":"hmrc/private_pension_income_count_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":10000.0,"estimate":10305.892645597458,"calibrationEstimate":10287.247063875198},{"id":"hmrc/private_pension_income_count_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1450000.0,"estimate":1495237.3086971492,"calibrationEstimate":1487679.527325362},{"id":"hmrc/private_pension_income_count_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":779000.0,"estimate":789672.3607301563,"calibrationEstimate":800476.0575524122},{"id":"hmrc/private_pension_income_count_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":4000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/private_pension_income_count_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":652041.4562733769,"calibrationEstimate":663726.9767524898},{"id":"hmrc/private_pension_income_count_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":259000.0,"estimate":272814.0429994464,"calibrationEstimate":263811.19149279594},{"id":"hmrc/private_pension_income_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":5430000000.0,"estimate":5345797328.280829,"calibrationEstimate":5427845559.415028},{"id":"hmrc/private_pension_income_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":4350000000.0,"estimate":4392698634.534128,"calibrationEstimate":4454604694.336378},{"id":"hmrc/private_pension_income_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1810000000.0,"estimate":2014665212.2989984,"calibrationEstimate":1885743095.2678227},{"id":"hmrc/private_pension_income_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":13600000000.0,"estimate":13722906422.39004,"calibrationEstimate":13929122214.140656},{"id":"hmrc/private_pension_income_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":370000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1570000000.0,"estimate":1432815920.066187,"calibrationEstimate":1611508589.181299},{"id":"hmrc/private_pension_income_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":30200000000.0,"estimate":30088725766.291286,"calibrationEstimate":30519628145.421444},{"id":"hmrc/private_pension_income_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1120000000.0,"estimate":1123939358.7086189,"calibrationEstimate":1138804412.324136},{"id":"hmrc/private_pension_income_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":24804135722.331135,"calibrationEstimate":25052549773.94475},{"id":"hmrc/private_pension_income_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":16767697312.554628,"calibrationEstimate":17124010213.256632},{"id":"hmrc/private_pension_income_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":640000000.0,"estimate":212929517.2376833,"calibrationEstimate":216246361.45302057},{"id":"hmrc/private_pension_income_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":17400000000.0,"estimate":17412935832.904785,"calibrationEstimate":17785168436.302177},{"id":"hmrc/private_pension_income_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":9470000000.0,"estimate":9381575140.683311,"calibrationEstimate":9543800186.733513},{"id":"hmrc/property_income_count_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":137000.0,"estimate":148813.48041003942,"calibrationEstimate":142931.6233434677},{"id":"hmrc/property_income_count_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":101000.0,"estimate":105099.43739584088,"calibrationEstimate":105464.95491817594},{"id":"hmrc/property_income_count_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":54000.0,"estimate":50794.22146773338,"calibrationEstimate":56650.596049278975},{"id":"hmrc/property_income_count_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":232000.0,"estimate":209372.79957795143,"calibrationEstimate":241816.69853043556},{"id":"hmrc/property_income_count_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":7000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_count_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":41000.0,"estimate":54315.05261707306,"calibrationEstimate":53937.36399555206},{"id":"hmrc/property_income_count_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":431000.0,"estimate":467851.6959067285,"calibrationEstimate":449476.7096900046},{"id":"hmrc/property_income_count_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":23000.0,"estimate":23663.82657933235,"calibrationEstimate":23704.657059669495},{"id":"hmrc/property_income_count_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":364000.0,"estimate":382716.5398760289,"calibrationEstimate":374246.09900937974},{"id":"hmrc/property_income_count_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":325000.0,"estimate":325976.1076962948,"calibrationEstimate":335583.4356379807},{"id":"hmrc/property_income_count_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":13000.0,"estimate":17876.553053617477,"calibrationEstimate":17956.148045539856},{"id":"hmrc/property_income_count_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":397000.0,"estimate":430521.93068769574,"calibrationEstimate":424372.62478613853},{"id":"hmrc/property_income_count_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":226000.0,"estimate":232345.40000730753,"calibrationEstimate":233399.38142344356},{"id":"hmrc/property_income_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":4845000000.0,"estimate":5066855184.377646,"calibrationEstimate":4887522606.587887},{"id":"hmrc/property_income_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1273000000.0,"estimate":1339419048.615897,"calibrationEstimate":1325054081.26916},{"id":"hmrc/property_income_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":2185000000.0,"estimate":2065674668.677865,"calibrationEstimate":2156647507.286356},{"id":"hmrc/property_income_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":3211000000.0,"estimate":2853691727.4237776,"calibrationEstimate":3390429218.5297017},{"id":"hmrc/property_income_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":834100000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1995000000.0,"estimate":1671991571.1694071,"calibrationEstimate":1648499114.259529},{"id":"hmrc/property_income_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7258000000.0,"estimate":7985707953.629425,"calibrationEstimate":7489906615.405917},{"id":"hmrc/property_income_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1453500000.0,"estimate":1492957063.3158894,"calibrationEstimate":1475921673.247523},{"id":"hmrc/property_income_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7220000000.0,"estimate":7746035188.249613,"calibrationEstimate":7542554031.193575},{"id":"hmrc/property_income_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7182000000.0,"estimate":7333197347.813547,"calibrationEstimate":7434714030.345675},{"id":"hmrc/property_income_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":900600000.0,"estimate":867971878.096458,"calibrationEstimate":858414921.8552154},{"id":"hmrc/property_income_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":10260000000.0,"estimate":10953681291.205402,"calibrationEstimate":10644669240.112694},{"id":"hmrc/property_income_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7163000000.0,"estimate":7576565136.2291155,"calibrationEstimate":7469779867.330262},{"id":"hmrc/salary_sacrifice_contributions","group":"Pension contributions made through salary sacrifice","unit":"gbp","target":24720000000.0,"estimate":28216254605.196114,"calibrationEstimate":29398246248.53289},{"id":"hmrc/salary_sacrifice_employee_nics_relief","group":"Salary sacrifice: employee National Insurance relief","unit":"gbp","target":1030000000.0,"estimate":944128480.1682006,"calibrationEstimate":999028962.9642977},{"id":"hmrc/salary_sacrifice_employer_nics_relief","group":"Salary sacrifice: employer National Insurance relief","unit":"gbp","target":3806521739.1304345,"estimate":3734371027.861629,"calibrationEstimate":3910216698.4462447},{"id":"hmrc/salary_sacrifice_it_relief_additional_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1854000000.0,"estimate":1898508492.1189609,"calibrationEstimate":1916649378.3206043},{"id":"hmrc/salary_sacrifice_it_relief_basic_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1648000000.0,"estimate":1599588723.537782,"calibrationEstimate":1694024183.192099},{"id":"hmrc/salary_sacrifice_it_relief_higher_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":5665000000.0,"estimate":5447769552.639022,"calibrationEstimate":5730857548.478475},{"id":"hmrc/self_employment_income_count_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":85000.0,"estimate":91807.65111103654,"calibrationEstimate":86962.28155221045},{"id":"hmrc/self_employment_income_count_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":444000.0,"estimate":495899.16801068187,"calibrationEstimate":474827.5627250821},{"id":"hmrc/self_employment_income_count_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":40000.0,"estimate":34321.580459713936,"calibrationEstimate":40915.38135620952},{"id":"hmrc/self_employment_income_count_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":651000.0,"estimate":595662.3852557838,"calibrationEstimate":689170.4667981565},{"id":"hmrc/self_employment_income_count_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":11000.0,"estimate":12097.602172851562,"calibrationEstimate":12151.466918945312},{"id":"hmrc/self_employment_income_count_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":34000.0,"estimate":35412.47289919853,"calibrationEstimate":36050.296272322536},{"id":"hmrc/self_employment_income_count_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":961000.0,"estimate":983380.3177103548,"calibrationEstimate":1018702.9982424974},{"id":"hmrc/self_employment_income_count_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21693.4504237175,"calibrationEstimate":21790.04023075104},{"id":"hmrc/self_employment_income_count_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":595000.0,"estimate":660941.2836752534,"calibrationEstimate":627534.0292263627},{"id":"hmrc/self_employment_income_count_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":359000.0,"estimate":380762.3792635501,"calibrationEstimate":372850.943356663},{"id":"hmrc/self_employment_income_count_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":15000.0,"estimate":14243.284211874008,"calibrationEstimate":14306.702473640442},{"id":"hmrc/self_employment_income_count_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":311000.0,"estimate":306679.82031068206,"calibrationEstimate":320621.6229124218},{"id":"hmrc/self_employment_income_count_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":143000.0,"estimate":124774.42495456338,"calibrationEstimate":149187.17315804958},{"id":"hmrc/self_employment_income_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4980000000.0,"estimate":5636157348.958165,"calibrationEstimate":5105386257.929018},{"id":"hmrc/self_employment_income_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4810000000.0,"estimate":5335150863.284746,"calibrationEstimate":5017249946.560387},{"id":"hmrc/self_employment_income_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":3650000000.0,"estimate":2822716021.3632445,"calibrationEstimate":3787992559.540904},{"id":"hmrc/self_employment_income_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8030000000.0,"estimate":6887636692.712797,"calibrationEstimate":8444995513.4183855},{"id":"hmrc/self_employment_income_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":19500000000.0,"estimate":18284049776.80005,"calibrationEstimate":19086845273.0652},{"id":"hmrc/self_employment_income_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4390000000.0,"estimate":4193355831.884856,"calibrationEstimate":4476251711.722663},{"id":"hmrc/self_employment_income_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":15700000000.0,"estimate":17136849507.671976,"calibrationEstimate":16997008937.802246},{"id":"hmrc/self_employment_income_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4840000000.0,"estimate":4906102850.49662,"calibrationEstimate":5121514459.116575},{"id":"hmrc/self_employment_income_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":12600000000.0,"estimate":12605641784.231354,"calibrationEstimate":13432114897.320862},{"id":"hmrc/self_employment_income_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8730000000.0,"estimate":9895760941.4199,"calibrationEstimate":9284919847.082878},{"id":"hmrc/self_employment_income_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":6670000000.0,"estimate":9660794971.01818,"calibrationEstimate":10084969640.620115},{"id":"hmrc/self_employment_income_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8220000000.0,"estimate":7173913950.503402,"calibrationEstimate":8589968865.463936},{"id":"hmrc/self_employment_income_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":5360000000.0,"estimate":4555003804.413581,"calibrationEstimate":5622179443.45382},{"id":"hmrc/state_pension_count_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":74000.0,"estimate":76148.16276955605,"calibrationEstimate":75922.86912208796},{"id":"hmrc/state_pension_count_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1140000.0,"estimate":1244077.6809774786,"calibrationEstimate":1133583.8249693066},{"id":"hmrc/state_pension_count_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":22832.874069213867,"calibrationEstimate":22125.147695302963},{"id":"hmrc/state_pension_count_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2050000.0,"estimate":2048411.1118015796,"calibrationEstimate":2048046.7279076576},{"id":"hmrc/state_pension_count_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_count_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":14000.0,"estimate":13532.682774543762,"calibrationEstimate":14466.858582496645},{"id":"hmrc/state_pension_count_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2320000.0,"estimate":2286300.7773593217,"calibrationEstimate":2301933.0940366536},{"id":"hmrc/state_pension_count_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":8000.0,"estimate":8824.107450008392,"calibrationEstimate":8798.864166736603},{"id":"hmrc/state_pension_count_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1160000.0,"estimate":1172676.499942258,"calibrationEstimate":1168167.4859495014},{"id":"hmrc/state_pension_count_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":568000.0,"estimate":575256.3978573233,"calibrationEstimate":577815.7180559486},{"id":"hmrc/state_pension_count_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":3000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/state_pension_count_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":441000.0,"estimate":438393.6089271605,"calibrationEstimate":441668.3965354562},{"id":"hmrc/state_pension_count_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":176000.0,"estimate":175826.47564059496,"calibrationEstimate":177026.6087565422},{"id":"hmrc/state_pension_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":847000000.0,"estimate":854450089.7419467,"calibrationEstimate":844536099.8908701},{"id":"hmrc/state_pension_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":11800000000.0,"estimate":13670650067.511356,"calibrationEstimate":12372946997.791916},{"id":"hmrc/state_pension_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":265000000.0,"estimate":282114083.0780946,"calibrationEstimate":271975929.42016745},{"id":"hmrc/state_pension_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":22200000000.0,"estimate":23998719050.76559,"calibrationEstimate":23797516261.50798},{"id":"hmrc/state_pension_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":20000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":179000000.0,"estimate":172983951.4445731,"calibrationEstimate":182038746.25456983},{"id":"hmrc/state_pension_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":26825875119.04113,"calibrationEstimate":26781706814.29911},{"id":"hmrc/state_pension_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":96000000.0,"estimate":91457269.84436607,"calibrationEstimate":90425861.10211164},{"id":"hmrc/state_pension_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":12300000000.0,"estimate":13220363004.652786,"calibrationEstimate":13047202267.625652},{"id":"hmrc/state_pension_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":6020000000.0,"estimate":6333296578.738886,"calibrationEstimate":6303111646.291419},{"id":"hmrc/state_pension_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":43000000.0,"estimate":56836446.07211137,"calibrationEstimate":56614218.6125021},{"id":"hmrc/state_pension_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":4660000000.0,"estimate":4958283295.041033,"calibrationEstimate":4957592229.717251},{"id":"hmrc/state_pension_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":1890000000.0,"estimate":1925819081.9875,"calibrationEstimate":1921803586.7496536},{"id":"housing/rent_private","group":"Private and social rent paid","unit":"gbp","target":89035200000.0,"estimate":94232257148.01346,"calibrationEstimate":89015844391.93204},{"id":"housing/rent_social","group":"Private and social rent paid","unit":"gbp","target":30680000000.0,"estimate":36221593791.554085,"calibrationEstimate":33687842434.35097},{"id":"housing/total_mortgage","group":"Mortgage payments","unit":"gbp","target":99000000000.0,"estimate":112166702689.27348,"calibrationEstimate":113284488090.43108},{"id":"nts/households_no_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":6512000.0,"estimate":6886208.031410232,"calibrationEstimate":6916868.755762011},{"id":"nts/households_one_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":13024000.0,"estimate":15020756.833521975,"calibrationEstimate":15087636.514661329},{"id":"nts/households_two_plus_vehicles","group":"Households with no, one, and two or more vehicles","unit":"count","target":10064000.0,"estimate":9336322.44734241,"calibrationEstimate":9377892.274253026},{"id":"obr/attendance_allowance","group":"Attendance Allowance spending","unit":"gbp","target":8492497075.074617,"estimate":8738849002.944973,"calibrationEstimate":8777451467.048658},{"id":"obr/capital_gains_tax","group":"Capital gains tax receipts","unit":"gbp","target":21801546197.09165,"estimate":12717204530.457554,"calibrationEstimate":12569294855.576912},{"id":"obr/carers_allowance","group":"Carer's Allowance spending","unit":"gbp","target":4569403813.760573,"estimate":4546109316.312273,"calibrationEstimate":4668875054.2856655},{"id":"obr/child_benefit","group":"Child Benefit spending","unit":"gbp","target":13389272724.45089,"estimate":16225320972.639776,"calibrationEstimate":16338080740.281445},{"id":"obr/council_tax","group":"Council tax receipts, UK and by nation","unit":"gbp","target":50925163826.30539,"estimate":48221464271.11403,"calibrationEstimate":45300509759.81859},{"id":"obr/council_tax_england","group":"Council tax receipts, UK and by nation","unit":"gbp","target":44117237614.71528,"estimate":41824069103.301254,"calibrationEstimate":39205804365.029305},{"id":"obr/council_tax_scotland","group":"Council tax receipts, UK and by nation","unit":"gbp","target":3051227494.93594,"estimate":3763028655.037571,"calibrationEstimate":3638929999.068658},{"id":"obr/council_tax_wales","group":"Council tax receipts, UK and by nation","unit":"gbp","target":2400769752.36827,"estimate":2634366512.7752094,"calibrationEstimate":2455775395.7206206},{"id":"obr/domestic_rates","group":"Northern Ireland domestic rates receipts","unit":"gbp","target":494000000.0,"estimate":584068659.0970445,"calibrationEstimate":560119544.8439525},{"id":"obr/esa","group":"Employment and Support Allowance spending","unit":"gbp","target":7206287181.538654,"estimate":7343384263.9225025,"calibrationEstimate":7378653735.424012},{"id":"obr/fuel_duties","group":"Fuel duty receipts","unit":"gbp","target":24241874775.213375,"estimate":24533360153.833393,"calibrationEstimate":22246272742.96544},{"id":"obr/income_tax","group":"Income tax receipts","unit":"gbp","target":331437583074.4429,"estimate":301478832377.7914,"calibrationEstimate":296476469549.9654},{"id":"obr/jobseekers_allowance","group":"Jobseeker's Allowance spending","unit":"gbp","target":280558748.04472804,"estimate":299505958.51263523,"calibrationEstimate":300361802.45431787},{"id":"obr/ni","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":200081395082.7125,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employee","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":49544363784.26465,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employer","group":"Employer National Insurance receipts","unit":"gbp","target":145324007512.71753,"estimate":154541037552.12073,"calibrationEstimate":152621840639.53052},{"id":"obr/ni_self_employed","group":"Self-employed National Insurance receipts","unit":"gbp","target":2902816090.4147716,"estimate":2609995976.5472517,"calibrationEstimate":2776828111.0540338},{"id":"obr/pip","group":"Personal Independence Payment spending","unit":"gbp","target":36910059270.5278,"estimate":26930742886.35225,"calibrationEstimate":27048283769.854137},{"id":"obr/private_school_students","group":"Pupils at independent schools","unit":"count","target":557000.0,"estimate":761425.2593497187,"calibrationEstimate":577547.7305030972},{"id":"obr/salary_sacrifice_users_above_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":3379200.0,"estimate":3416752.2773837894,"calibrationEstimate":3473463.5649632365},{"id":"obr/salary_sacrifice_users_below_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":4403200.0,"estimate":4567515.046537325,"calibrationEstimate":4546353.57234703},{"id":"obr/salary_sacrifice_users_total","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":7884800.0,"estimate":7984267.323921114,"calibrationEstimate":8019817.137310267},{"id":"obr/sdlt","group":"Stamp Duty Land Tax receipts","unit":"gbp","target":15406516698.785578,"estimate":16316115361.020012,"calibrationEstimate":15970017665.29672},{"id":"obr/state_pension","group":"State Pension spending","unit":"gbp","target":146185954351.57382,"estimate":123608848585.71336,"calibrationEstimate":123129508170.07487},{"id":"obr/statutory_maternity_pay","group":"Statutory Maternity Pay spending","unit":"gbp","target":3194800881.520547,"estimate":3337974284.302048,"calibrationEstimate":3347441886.5270486},{"id":"obr/tv_licence_fee","group":"TV licence fee receipts","unit":"gbp","target":3872000000.0,"estimate":4306586174.401851,"calibrationEstimate":4326303524.671558},{"id":"obr/universal_credit","group":"Universal Credit spending","unit":"gbp","target":79286349139.54411,"estimate":77648740273.65004,"calibrationEstimate":76378495756.28294},{"id":"obr/vat","group":"VAT receipts","unit":"gbp","target":180168938685.4179,"estimate":317136171663.4592,"calibrationEstimate":318035670462.85565},{"id":"obr/winter_fuel_allowance","group":"Winter Fuel Payment spending","unit":"gbp","target":1911040880.4619167,"estimate":1703858030.6710331,"calibrationEstimate":1712963122.996131},{"id":"ons/corporate_land_value","group":"Corporate land value","unit":"gbp","target":2057128451236.5017,"estimate":2058648990687.032,"calibrationEstimate":2509581347940.138},{"id":"ons/couple_3_plus_children_households","group":"Households by family type","unit":"count","target":931000.0,"estimate":939145.8302041292,"calibrationEstimate":943327.3600209357},{"id":"ons/couple_no_children_households","group":"Households by family type","unit":"count","target":8119000.0,"estimate":12928875.782972127,"calibrationEstimate":12986441.399504378},{"id":"ons/couple_non_dependent_children_only_households","group":"Households by family type","unit":"count","target":1848000.0,"estimate":1526672.7015325427,"calibrationEstimate":1533470.184832275},{"id":"ons/couple_under_3_children_households","group":"Households by family type","unit":"count","target":5439000.0,"estimate":5319173.021537095,"calibrationEstimate":5342856.555537075},{"id":"ons/east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":726000.0,"estimate":770230.939494133,"calibrationEstimate":773660.3856868744},{"id":"ons/east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":740606.7134604454,"calibrationEstimate":743904.2511110306},{"id":"ons/east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":749000.0,"estimate":756168.8946352005,"calibrationEstimate":759535.7300329208},{"id":"ons/east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":890000.0,"estimate":868918.0768876076,"calibrationEstimate":872786.9326715469},{"id":"ons/east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":851000.0,"estimate":843856.841021061,"calibrationEstimate":847614.101943016},{"id":"ons/east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":867000.0,"estimate":885889.451540947,"calibrationEstimate":889833.8577439785},{"id":"ons/east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":746000.0,"estimate":717175.1693952084,"calibrationEstimate":720368.3822858334},{"id":"ons/east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":643000.0,"estimate":602970.5396468639,"calibrationEstimate":605655.2605879307},{"id":"ons/east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":379000.0,"estimate":380440.2481365204,"calibrationEstimate":382134.1495399475},{"id":"ons/east_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":532000.0,"estimate":560764.1695084572,"calibrationEstimate":563260.9665122032},{"id":"ons/east_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":585000.0,"estimate":591315.0727558136,"calibrationEstimate":593947.8992090225},{"id":"ons/east_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":632000.0,"estimate":646598.6443405151,"calibrationEstimate":649477.6217494011},{"id":"ons/east_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":669000.0,"estimate":666351.030916214,"calibrationEstimate":669317.9424901009},{"id":"ons/east_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":621000.0,"estimate":627317.6343212128,"calibrationEstimate":630110.758951664},{"id":"ons/east_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":681000.0,"estimate":705804.5902404785,"calibrationEstimate":708947.1764411926},{"id":"ons/east_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":592000.0,"estimate":583389.1525392532,"calibrationEstimate":585986.6843750477},{"id":"ons/east_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":500000.0,"estimate":480258.3571476936,"calibrationEstimate":482396.70089006424},{"id":"ons/east_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":273000.0,"estimate":274763.10668992996,"calibrationEstimate":275986.48183584213},{"id":"ons/female_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1698816.0,"estimate":1839466.5737319589,"calibrationEstimate":1847656.770164296},{"id":"ons/female_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2041879.0,"estimate":1973291.4082101283,"calibrationEstimate":1982077.4540842024},{"id":"ons/female_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2036402.0,"estimate":1976182.4684885591,"calibrationEstimate":1984981.3977429569},{"id":"ons/female_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2033478.0,"estimate":2091247.116039395,"calibrationEstimate":2100558.3663989007},{"id":"ons/female_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2258028.0,"estimate":2327819.72517778,"calibrationEstimate":2338184.332134992},{"id":"ons/female_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2443559.0,"estimate":2426926.0614604205,"calibrationEstimate":2437731.887076691},{"id":"ons/female_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2497122.0,"estimate":2407409.1889739037,"calibrationEstimate":2418128.139254883},{"id":"ons/female_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2356214.0,"estimate":2354626.8180732727,"calibrationEstimate":2365110.7586767823},{"id":"ons/female_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2135556.0,"estimate":2146838.039360285,"calibrationEstimate":2156396.7979279608},{"id":"ons/female_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2206473.0,"estimate":2297529.9983963966,"calibrationEstimate":2307759.7106489986},{"id":"ons/female_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2340737.0,"estimate":2437237.7694670856,"calibrationEstimate":2448089.5275103897},{"id":"ons/female_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1918180.0,"estimate":2070228.5422207713,"calibrationEstimate":2079446.1990244535},{"id":"ons/female_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2248908.0,"estimate":2073595.834327519,"calibrationEstimate":2082828.495167717},{"id":"ons/female_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1890892.0,"estimate":1781039.4390323013,"calibrationEstimate":1788969.4821397066},{"id":"ons/female_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1619328.0,"estimate":1592091.0710516274,"calibrationEstimate":1599179.8343619704},{"id":"ons/female_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1575830.0,"estimate":1541204.8275257498,"calibrationEstimate":1548067.0152519343},{"id":"ons/female_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1064043.0,"estimate":2664726.503213957,"calibrationEstimate":2676591.14880161},{"id":"ons/female_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":766765.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/household_land_value","group":"Household land value","unit":"gbp","target":5042871548763.499,"estimate":5198482896887.592,"calibrationEstimate":5215371409340.588},{"id":"ons/household_land_value/EAST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":304799621177.5439,"estimate":311792425913.57996,"calibrationEstimate":312988388945.29297},{"id":"ons/household_land_value/EAST_OF_ENGLAND","group":"Household land value by region","unit":"gbp","target":542672059385.554,"estimate":546010650314.9476,"calibrationEstimate":548396090228.3013},{"id":"ons/household_land_value/LONDON","group":"Household land value by region","unit":"gbp","target":1188167933642.289,"estimate":1203185297593.549,"calibrationEstimate":1208464858198.298},{"id":"ons/household_land_value/NORTH_EAST","group":"Household land value by region","unit":"gbp","target":119603822538.99867,"estimate":120248252547.38388,"calibrationEstimate":120670781170.64792},{"id":"ons/household_land_value/NORTH_WEST","group":"Household land value by region","unit":"gbp","target":422892569458.29254,"estimate":432857394071.48694,"calibrationEstimate":433189776637.8822},{"id":"ons/household_land_value/SCOTLAND","group":"Household land value by region","unit":"gbp","target":280395193712.8084,"estimate":276640745849.4535,"calibrationEstimate":277860896632.4937},{"id":"ons/household_land_value/SOUTH_EAST","group":"Household land value by region","unit":"gbp","target":885848048153.7532,"estimate":895724028534.7693,"calibrationEstimate":899487561852.2374},{"id":"ons/household_land_value/SOUTH_WEST","group":"Household land value by region","unit":"gbp","target":456726035827.05096,"estimate":465653362247.4888,"calibrationEstimate":467005989225.08545},{"id":"ons/household_land_value/WALES","group":"Household land value by region","unit":"gbp","target":179320185054.4999,"estimate":188184118702.406,"calibrationEstimate":188687411488.70615},{"id":"ons/household_land_value/WEST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":364340113693.65784,"estimate":378739467069.95465,"calibrationEstimate":378904015968.6325},{"id":"ons/household_land_value/YORKSHIRE","group":"Household land value by region","unit":"gbp","target":298105966119.05054,"estimate":305323058887.67285,"calibrationEstimate":305558366397.4229},{"id":"ons/land_value","group":"Total land value","unit":"gbp","target":7100000000000.0,"estimate":7257131889855.828,"calibrationEstimate":7724952750742.861},{"id":"ons/lfs_employees","group":"Employees and self-employed people","unit":"count","target":29590000.0,"estimate":30415831.925368626,"calibrationEstimate":30551257.921766207},{"id":"ons/lfs_self_employed","group":"Employees and self-employed people","unit":"count","target":4395000.0,"estimate":4403629.709998399,"calibrationEstimate":4423236.792703286},{"id":"ons/london_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1042000.0,"estimate":1131491.4573817253,"calibrationEstimate":1136529.397939682},{"id":"ons/london_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1038000.0,"estimate":1037544.3274979593,"calibrationEstimate":1042163.9750480652},{"id":"ons/london_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1470000.0,"estimate":1451632.7812190056,"calibrationEstimate":1458096.1668362615},{"id":"ons/london_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1585000.0,"estimate":1492286.394011021,"calibrationEstimate":1498930.7603902817},{"id":"ons/london_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1314000.0,"estimate":1286887.5299487114,"calibrationEstimate":1292617.3732566831},{"id":"ons/london_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1078000.0,"estimate":1097971.444237709,"calibrationEstimate":1102860.1428632736},{"id":"ons/london_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":778000.0,"estimate":750930.0480790138,"calibrationEstimate":754273.5447840691},{"id":"ons/london_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":509000.0,"estimate":486360.6602535248,"calibrationEstimate":488526.16434693336},{"id":"ons/london_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":304000.0,"estimate":303559.92478847504,"calibrationEstimate":304911.5145406723},{"id":"ons/lone_households_over_65","group":"Households by family type","unit":"count","target":4254000.0,"estimate":5454455.018509299,"calibrationEstimate":5478740.884796768},{"id":"ons/lone_households_under_65","group":"Households by family type","unit":"count","target":4316000.0,"estimate":5250786.593510598,"calibrationEstimate":5274165.638094544},{"id":"ons/lone_parent_dependent_children_households","group":"Households by family type","unit":"count","target":1835000.0,"estimate":2798771.157480851,"calibrationEstimate":2811232.6388974935},{"id":"ons/lone_parent_non_dependent_children_households","group":"Households by family type","unit":"count","target":1204000.0,"estimate":1057331.2494069785,"calibrationEstimate":1062038.9998702407},{"id":"ons/male_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1784490.0,"estimate":1917864.3619012684,"calibrationEstimate":1926403.6264294984},{"id":"ons/male_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2143309.0,"estimate":2053535.895194322,"calibrationEstimate":2062679.227788061},{"id":"ons/male_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2149930.0,"estimate":2047459.0866241455,"calibrationEstimate":2056575.355904788},{"id":"ons/male_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2136737.0,"estimate":2167020.575371682,"calibrationEstimate":2176669.196182668},{"id":"ons/male_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2246892.0,"estimate":2353607.326105356,"calibrationEstimate":2364086.752364412},{"id":"ons/male_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2323977.0,"estimate":2306814.134287983,"calibrationEstimate":2317085.1808172166},{"id":"ons/male_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2325815.0,"estimate":2250484.0878130943,"calibrationEstimate":2260504.326561913},{"id":"ons/male_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2208064.0,"estimate":2202735.8511286825,"calibrationEstimate":2212543.500215322},{"id":"ons/male_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2040636.0,"estimate":2050379.9052236676,"calibrationEstimate":2059509.1825666577},{"id":"ons/male_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2119462.0,"estimate":2209499.6434261203,"calibrationEstimate":2219337.4005533904},{"id":"ons/male_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2234921.0,"estimate":2360950.5306516886,"calibrationEstimate":2371462.6275383234},{"id":"ons/male_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2011903.0,"estimate":2176776.512379959,"calibrationEstimate":2186468.5711850673},{"id":"ons/male_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2138720.0,"estimate":1998740.968729228,"calibrationEstimate":2007640.3199545296},{"id":"ons/male_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1785048.0,"estimate":1707467.9938359708,"calibrationEstimate":1715070.4678450525},{"id":"ons/male_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1472190.0,"estimate":1503642.8762648106,"calibrationEstimate":1510337.8170289395},{"id":"ons/male_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1370172.0,"estimate":1395090.3332718164,"calibrationEstimate":1401301.957366705},{"id":"ons/male_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":853423.0,"estimate":1009312.8459606916,"calibrationEstimate":1013806.7878290116},{"id":"ons/male_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":524918.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/multi_family_households","group":"Households by family type","unit":"count","target":244000.0,"estimate":3137645.9858644456,"calibrationEstimate":3151616.293736607},{"id":"ons/north_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":281000.0,"estimate":292283.856153965,"calibrationEstimate":293585.24245643616},{"id":"ons/north_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":311000.0,"estimate":316212.322912693,"calibrationEstimate":317620.25323677063},{"id":"ons/north_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":352029.96956157684,"calibrationEstimate":353597.3771824837},{"id":"ons/north_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":356000.0,"estimate":359699.50099754333,"calibrationEstimate":361301.0569238663},{"id":"ons/north_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":323000.0,"estimate":327139.90297079086,"calibrationEstimate":328596.4853038788},{"id":"ons/north_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":369000.0,"estimate":378836.79312348366,"calibrationEstimate":380523.55742669106},{"id":"ons/north_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":353000.0,"estimate":351102.3077030182,"calibrationEstimate":352665.5838704109},{"id":"ons/north_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":278000.0,"estimate":273663.8987689018,"calibrationEstimate":274882.38518714905},{"id":"ons/north_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":153000.0,"estimate":154565.45491456983,"calibrationEstimate":155253.65523910522},{"id":"ons/north_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":847000.0,"estimate":907878.5675086976,"calibrationEstimate":911920.8865337372},{"id":"ons/north_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":901000.0,"estimate":905132.2707009315,"calibrationEstimate":909162.354482174},{"id":"ons/north_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":986000.0,"estimate":1002199.312697649,"calibrationEstimate":1006661.592706442},{"id":"ons/north_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1056000.0,"estimate":1021326.8112883568,"calibrationEstimate":1025874.23654747},{"id":"ons/north_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":938000.0,"estimate":930422.6213030816,"calibrationEstimate":934565.3206562996},{"id":"ons/north_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1011000.0,"estimate":1030291.0328922272,"calibrationEstimate":1034878.3873639108},{"id":"ons/north_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":888000.0,"estimate":844032.2021713257,"calibrationEstimate":847790.2315773964},{"id":"ons/north_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":715000.0,"estimate":663851.5968799591,"calibrationEstimate":666807.391629219},{"id":"ons/north_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":399000.0,"estimate":395580.82154369354,"calibrationEstimate":397342.1398239136},{"id":"ons/northern_ireland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":234000.0,"estimate":238573.53098157048,"calibrationEstimate":239635.77313242853},{"id":"ons/northern_ireland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":244000.0,"estimate":247808.06932733953,"calibrationEstimate":248911.4319036454},{"id":"ons/northern_ireland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":230000.0,"estimate":232551.80645041168,"calibrationEstimate":233587.23901306093},{"id":"ons/northern_ireland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":264000.0,"estimate":269491.1257661581,"calibrationEstimate":270691.02561856806},{"id":"ons/northern_ireland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":254000.0,"estimate":257494.5271097273,"calibrationEstimate":258641.01725278795},{"id":"ons/northern_ireland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":257000.0,"estimate":258119.9789763689,"calibrationEstimate":259269.25098092857},{"id":"ons/northern_ireland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":224000.0,"estimate":232054.6853407323,"calibrationEstimate":233087.90260344744},{"id":"ons/northern_ireland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":165000.0,"estimate":170104.10925373435,"calibrationEstimate":170861.4931807816},{"id":"ons/northern_ireland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":93000.0,"estimate":98419.55169644952,"calibrationEstimate":98857.76071341336},{"id":"ons/public_sector_employment","group":"Public sector employment","unit":"count","target":5940000.0,"estimate":6304094.97840783,"calibrationEstimate":6332163.859895036},{"id":"ons/savings_interest_income","group":"Household savings interest","unit":"gbp","target":95477000000.0,"estimate":80129221535.43391,"calibrationEstimate":79246943861.21257},{"id":"ons/scotland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":526000.0,"estimate":647600.8949885368,"calibrationEstimate":650484.328666091},{"id":"ons/scotland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":597000.0,"estimate":659703.4958338141,"calibrationEstimate":662640.8183342814},{"id":"ons/scotland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":709000.0,"estimate":740762.218244791,"calibrationEstimate":744060.4591063857},{"id":"ons/scotland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":736000.0,"estimate":773940.4599794149,"calibrationEstimate":777386.4158806205},{"id":"ons/scotland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":691000.0,"estimate":725636.149921596,"calibrationEstimate":728867.0354478359},{"id":"ons/scotland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":788000.0,"estimate":794386.7686737776,"calibrationEstimate":797923.7666577101},{"id":"ons/scotland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":727000.0,"estimate":654615.490395546,"calibrationEstimate":657530.1593027711},{"id":"ons/scotland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":546000.0,"estimate":518987.09887486696,"calibrationEstimate":521297.8820120692},{"id":"ons/scotland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":297000.0,"estimate":309508.9369607568,"calibrationEstimate":310887.0211943984},{"id":"ons/scotland_babies_under_1","group":"Population by region and ten-year age band","unit":"count","target":46000.0,"estimate":48106.95701152086,"calibrationEstimate":48321.15257507563},{"id":"ons/scotland_children_under_16","group":"Population by region and ten-year age band","unit":"count","target":892000.0,"estimate":956540.2894876004,"calibrationEstimate":960799.27374506},{"id":"ons/scotland_households_3plus_children","group":"Scottish households with three or more children","unit":"count","target":82000.0,"estimate":86080.43200981617,"calibrationEstimate":86463.70450717211},{"id":"ons/south_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1039000.0,"estimate":1114232.5491027832,"calibrationEstimate":1119193.650694847},{"id":"ons/south_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1114000.0,"estimate":1104025.5058307648,"calibrationEstimate":1108941.1569581032},{"id":"ons/south_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1093000.0,"estimate":1101930.081794262,"calibrationEstimate":1106836.4138650894},{"id":"ons/south_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1283000.0,"estimate":1222137.9367275238,"calibrationEstimate":1227579.4830198288},{"id":"ons/south_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1273000.0,"estimate":1233437.5373487473,"calibrationEstimate":1238929.3965697289},{"id":"ons/south_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1287000.0,"estimate":1315585.8211021423,"calibrationEstimate":1321443.4466571808},{"id":"ons/south_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":1089000.0,"estimate":1013925.5353107452,"calibrationEstimate":1018440.030857563},{"id":"ons/south_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":927000.0,"estimate":834819.8441057205,"calibrationEstimate":838536.8671865463},{"id":"ons/south_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":559000.0,"estimate":542841.088037014,"calibrationEstimate":545258.0736494064},{"id":"ons/south_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":576000.0,"estimate":604655.1198301315,"calibrationEstimate":607347.3345069885},{"id":"ons/south_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":646000.0,"estimate":654375.9588766098,"calibrationEstimate":657289.5604567528},{"id":"ons/south_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":694000.0,"estimate":709386.0963587761,"calibrationEstimate":712544.6284022331},{"id":"ons/south_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":732462.76395607,"calibrationEstimate":735724.0381350517},{"id":"ons/south_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":704000.0,"estimate":701804.148378849,"calibrationEstimate":704928.919002533},{"id":"ons/south_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":794000.0,"estimate":812267.9054384232,"calibrationEstimate":815884.5122971535},{"id":"ons/south_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":714519.8350300789,"calibrationEstimate":717701.2218279839},{"id":"ons/south_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":662000.0,"estimate":619540.1825652122,"calibrationEstimate":622298.66963768},{"id":"ons/south_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":388000.0,"estimate":382782.8248333931,"calibrationEstimate":384487.1622633934},{"id":"ons/tenure_england_owned_outright","group":"Dwellings by tenure, by nation","unit":"count","target":8374612.0,"estimate":8764165.854846716,"calibrationEstimate":8803188.14887619},{"id":"ons/tenure_england_owned_with_mortgage","group":"Dwellings by tenure, by nation","unit":"count","target":7667051.0,"estimate":7360170.187984467,"calibrationEstimate":7392941.221483231},{"id":"ons/tenure_england_rented_privately","group":"Dwellings by tenure, by nation","unit":"count","target":5299840.0,"estimate":5789919.019839287,"calibrationEstimate":5815698.559220791},{"id":"ons/tenure_england_social_rent","group":"Dwellings by tenure, by nation","unit":"count","target":4274613.0,"estimate":4272671.371180296,"calibrationEstimate":4291695.364801168},{"id":"ons/tenure_england_total","group":"Dwellings by tenure, by nation","unit":"count","target":25616116.0,"estimate":26186926.433850765,"calibrationEstimate":26303523.29438138},{"id":"ons/uk_population","group":"UK population, in total and by sex and five-year age band","unit":"count","target":69502341.0,"estimate":69712844.3129216,"calibrationEstimate":70023239.6145},{"id":"ons/unrelated_adult_households","group":"Households by family type","unit":"count","target":813000.0,"estimate":1057450.6047298163,"calibrationEstimate":1062158.8866242766},{"id":"ons/wales_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":325000.0,"estimate":348106.06233742833,"calibrationEstimate":349655.9994878471},{"id":"ons/wales_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":362000.0,"estimate":377852.1347847581,"calibrationEstimate":379534.51495823264},{"id":"ons/wales_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":389000.0,"estimate":421177.7128336728,"calibrationEstimate":423053.0000615418},{"id":"ons/wales_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":408000.0,"estimate":408298.51544573903,"calibrationEstimate":410116.45715788007},{"id":"ons/wales_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":374000.0,"estimate":386225.7205041647,"calibrationEstimate":387945.3860552907},{"id":"ons/wales_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":432000.0,"estimate":453846.15008094907,"calibrationEstimate":455866.8945379853},{"id":"ons/wales_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":407000.0,"estimate":411359.2729103267,"calibrationEstimate":413190.8414015472},{"id":"ons/wales_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":340773.34702190757,"calibrationEstimate":342290.63411542773},{"id":"ons/wales_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":190000.0,"estimate":193830.5397951007,"calibrationEstimate":194693.5690819025},{"id":"ons/west_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":700000.0,"estimate":739812.0893673897,"calibrationEstimate":743106.0936331749},{"id":"ons/west_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":750032.0111775398,"calibrationEstimate":753371.5123896599},{"id":"ons/west_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":774000.0,"estimate":782119.0841474533,"calibrationEstimate":785601.4645900726},{"id":"ons/west_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":834000.0,"estimate":829667.6420812607,"calibrationEstimate":833361.7243332863},{"id":"ons/west_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":758000.0,"estimate":759738.0727472305,"calibrationEstimate":763120.7843537331},{"id":"ons/west_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":800000.0,"estimate":820177.6517162323,"calibrationEstimate":823829.4666743279},{"id":"ons/west_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":685000.0,"estimate":663277.1520633698,"calibrationEstimate":666230.3836565018},{"id":"ons/west_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":570000.0,"estimate":543874.736948967,"calibrationEstimate":546296.3349237442},{"id":"ons/west_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":337000.0,"estimate":342024.45200538635,"calibrationEstimate":343547.31078481674},{"id":"ons/yorkshire_and_the_humber_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":618000.0,"estimate":648706.7535791397,"calibrationEstimate":651595.1075530052},{"id":"ons/yorkshire_and_the_humber_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":666000.0,"estimate":665860.9753584862,"calibrationEstimate":668825.70743227},{"id":"ons/yorkshire_and_the_humber_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":733000.0,"estimate":743138.1404109001,"calibrationEstimate":746446.95353508},{"id":"ons/yorkshire_and_the_humber_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":764000.0,"estimate":747053.2144784927,"calibrationEstimate":750379.460542202},{"id":"ons/yorkshire_and_the_humber_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":686000.0,"estimate":674619.9282107353,"calibrationEstimate":677623.6605932713},{"id":"ons/yorkshire_and_the_humber_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":745000.0,"estimate":752040.3539185524,"calibrationEstimate":755388.8066067696},{"id":"ons/yorkshire_and_the_humber_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":658000.0,"estimate":624463.3849864006,"calibrationEstimate":627243.798564434},{"id":"ons/yorkshire_and_the_humber_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":536000.0,"estimate":496824.7366466522,"calibrationEstimate":499036.8403120041},{"id":"ons/yorkshire_and_the_humber_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":302000.0,"estimate":295722.3997733593,"calibrationEstimate":297039.09796380997},{"id":"slc/adult_dependants_grant_recipients","group":"Adult Dependants' Grant: recipients and spending","unit":"count","target":18611.0,"estimate":10488.390624523165,"calibrationEstimate":17919.595499515533},{"id":"slc/adult_dependants_grant_spend","group":"Adult Dependants' Grant: recipients and spending","unit":"gbp","target":55364917.0,"estimate":37181344.76393461,"calibrationEstimate":63524966.045782566},{"id":"slc/maintenance_loan_recipients","group":"Maintenance loans: recipients and spending","unit":"count","target":1159761.0,"estimate":1115007.2203326223,"calibrationEstimate":1119971.7707395554},{"id":"slc/maintenance_loan_spend","group":"Maintenance loans: recipients and spending","unit":"gbp","target":8591659718.0,"estimate":9243921660.334114,"calibrationEstimate":9310652595.32858},{"id":"slc/parents_learning_allowance_recipients","group":"Parents' Learning Allowance: recipients and spending","unit":"count","target":99645.0,"estimate":98858.3031744957,"calibrationEstimate":99298.4696264267},{"id":"slc/parents_learning_allowance_spend","group":"Parents' Learning Allowance: recipients and spending","unit":"gbp","target":181421659.0,"estimate":200089205.6251793,"calibrationEstimate":200980102.52388763},{"id":"slc/plan_2_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":3985000.0,"estimate":4365258.374378204,"calibrationEstimate":4384694.640698433},{"id":"slc/plan_2_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":8940000.0,"estimate":6805751.482197762,"calibrationEstimate":6836054.020182133},{"id":"slc/plan_5_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":0.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/plan_5_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":10000.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/student_loan_repayment/england","group":"Student loan repayments, by nation and plan","unit":"gbp","target":5018231834.95,"estimate":5119208721.2338,"calibrationEstimate":4961058450.910856},{"id":"slc/student_loan_repayment/england/plan_1","group":"Student loan repayments, by nation and plan","unit":"gbp","target":1852699178.55,"estimate":1953753088.251544,"calibrationEstimate":1935645687.413804},{"id":"slc/student_loan_repayment/england/plan_2","group":"Student loan repayments, by nation and plan","unit":"gbp","target":2778253361.64,"estimate":3163065937.3426647,"calibrationEstimate":3023410861.2912726},{"id":"slc/student_loan_repayment/england/plan_5","group":"Student loan repayments, by nation and plan","unit":"gbp","target":40869580.81,"estimate":2389695.639591503,"calibrationEstimate":2001902.205781548},{"id":"slc/student_loan_repayment/england/postgraduate","group":"Student loan repayments, by nation and plan","unit":"gbp","target":346409713.95,"estimate":0.0,"calibrationEstimate":0.0},{"id":"slc/student_loan_repayment/northern_ireland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":181700000.0,"estimate":195403289.8778463,"calibrationEstimate":188624377.49343297},{"id":"slc/student_loan_repayment/scotland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":203300000.0,"estimate":221132909.0659362,"calibrationEstimate":213564948.46889892},{"id":"slc/student_loan_repayment/wales","group":"Student loan repayments, by nation and plan","unit":"gbp","target":229100000.0,"estimate":247405370.84255865,"calibrationEstimate":238897353.28110468},{"id":"sss/scottish_child_payment","group":"Scottish Child Payment spending","unit":"gbp","target":471000000.0,"estimate":497726869.8419191,"calibrationEstimate":499942991.15633214},{"id":"voa/council_tax/EAST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":804340.0,"estimate":812220.3750844002,"calibrationEstimate":815836.7769055367},{"id":"voa/council_tax/EAST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":505610.0,"estimate":512867.9080028534,"calibrationEstimate":515151.44179964066},{"id":"voa/council_tax/EAST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":403840.0,"estimate":409527.9134449959,"calibrationEstimate":411351.3289835453},{"id":"voa/council_tax/EAST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":247850.0,"estimate":252952.60029935837,"calibrationEstimate":254078.8680486679},{"id":"voa/council_tax/EAST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":154970.0,"estimate":158834.98216819763,"calibrationEstimate":159542.19471597672},{"id":"voa/council_tax/EAST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":73920.0,"estimate":76145.44448757172,"calibrationEstimate":76484.48072099686},{"id":"voa/council_tax/EAST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":39400.0,"estimate":40296.69438171387,"calibrationEstimate":40476.11449241638},{"id":"voa/council_tax/EAST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":3480.0,"estimate":3560.398073196411,"calibrationEstimate":3576.250594139099},{"id":"voa/council_tax/EAST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2233400.0,"estimate":2266406.315942287,"calibrationEstimate":2276497.4562609196},{"id":"voa/council_tax/EAST_OF_ENGLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":403180.0,"estimate":410904.2397751808,"calibrationEstimate":412733.7905740738},{"id":"voa/council_tax/EAST_OF_ENGLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":598950.0,"estimate":611632.8573641777,"calibrationEstimate":614356.1372361183},{"id":"voa/council_tax/EAST_OF_ENGLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":739570.0,"estimate":750946.7586493492,"calibrationEstimate":754290.3465647697},{"id":"voa/council_tax/EAST_OF_ENGLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":506540.0,"estimate":517253.3751280308,"calibrationEstimate":519556.4378812313},{"id":"voa/council_tax/EAST_OF_ENGLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":313840.0,"estimate":318550.18431663513,"calibrationEstimate":319968.5263018608},{"id":"voa/council_tax/EAST_OF_ENGLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":172960.0,"estimate":177523.18523740768,"calibrationEstimate":178313.60445976257},{"id":"voa/council_tax/EAST_OF_ENGLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":113720.0,"estimate":116179.86512231828,"calibrationEstimate":116697.15281319618},{"id":"voa/council_tax/EAST_OF_ENGLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":14830.0,"estimate":15408.850413322449,"calibrationEstimate":15477.458395004272},{"id":"voa/council_tax/EAST_OF_ENGLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2863600.0,"estimate":2918399.316006422,"calibrationEstimate":2931393.454226017},{"id":"voa/council_tax/LONDON/A","group":"Dwellings by council tax band and region","unit":"count","target":144550.0,"estimate":150375.55367183685,"calibrationEstimate":151045.09367752075},{"id":"voa/council_tax/LONDON/B","group":"Dwellings by council tax band and region","unit":"count","target":499130.0,"estimate":511106.1657552719,"calibrationEstimate":513381.8522338867},{"id":"voa/council_tax/LONDON/C","group":"Dwellings by council tax band and region","unit":"count","target":1040280.0,"estimate":1052713.1613850594,"calibrationEstimate":1057400.3456015587},{"id":"voa/council_tax/LONDON/D","group":"Dwellings by council tax band and region","unit":"count","target":975750.0,"estimate":988912.67416811,"calibrationEstimate":993315.7964680196},{"id":"voa/council_tax/LONDON/E","group":"Dwellings by council tax band and region","unit":"count","target":585130.0,"estimate":604620.8762998581,"calibrationEstimate":607312.9413566589},{"id":"voa/council_tax/LONDON/F","group":"Dwellings by council tax band and region","unit":"count","target":298920.0,"estimate":308940.16441679,"calibrationEstimate":310315.7166080475},{"id":"voa/council_tax/LONDON/G","group":"Dwellings by council tax band and region","unit":"count","target":225170.0,"estimate":230670.46613502505,"calibrationEstimate":231697.5183286667},{"id":"voa/council_tax/LONDON/H","group":"Dwellings by council tax band and region","unit":"count","target":68500.0,"estimate":70754.35682678223,"calibrationEstimate":71069.39036178589},{"id":"voa/council_tax/LONDON/total","group":"Dwellings by council tax band and region","unit":"count","target":3837430.0,"estimate":3918093.4186587334,"calibrationEstimate":3935538.6546361446},{"id":"voa/council_tax/NORTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":667540.0,"estimate":680737.9537260532,"calibrationEstimate":683768.9220235348},{"id":"voa/council_tax/NORTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":206790.0,"estimate":211970.4058327675,"calibrationEstimate":212914.200009346},{"id":"voa/council_tax/NORTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":196180.0,"estimate":202087.55218410492,"calibrationEstimate":202987.3474559784},{"id":"voa/council_tax/NORTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":113460.0,"estimate":115930.2783408165,"calibrationEstimate":116446.45661735536},{"id":"voa/council_tax/NORTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":61090.0,"estimate":61207.41867017746,"calibrationEstimate":61479.942474365234},{"id":"voa/council_tax/NORTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":26600.0,"estimate":26356.495221138,"calibrationEstimate":26473.84709215164},{"id":"voa/council_tax/NORTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":14600.0,"estimate":15486.845539569857,"calibrationEstimate":15555.80025434494},{"id":"voa/council_tax/NORTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":1570.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":1287830.0,"estimate":1313776.9495146277,"calibrationEstimate":1319626.5159270763},{"id":"voa/council_tax/NORTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":1386260.0,"estimate":1391080.06063509,"calibrationEstimate":1397273.8202409744},{"id":"voa/council_tax/NORTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":705450.0,"estimate":715903.5987789631,"calibrationEstimate":719091.151144743},{"id":"voa/council_tax/NORTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":616070.0,"estimate":626632.3857769966,"calibrationEstimate":629422.4471478462},{"id":"voa/council_tax/NORTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":363970.0,"estimate":371361.08140420914,"calibrationEstimate":373014.5641813278},{"id":"voa/council_tax/NORTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":216990.0,"estimate":223131.46934127808,"calibrationEstimate":224124.959856987},{"id":"voa/council_tax/NORTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":104330.0,"estimate":107420.41505765916,"calibrationEstimate":107898.70176649094},{"id":"voa/council_tax/NORTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":65750.0,"estimate":67545.51971292496,"calibrationEstimate":67846.26735258102},{"id":"voa/council_tax/NORTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":7350.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":3466140.0,"estimate":3503074.530707121,"calibrationEstimate":3518671.9116909504},{"id":"voa/council_tax/SCOTLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":501021.459,"estimate":519230.9023320675,"calibrationEstimate":521542.7701560855},{"id":"voa/council_tax/SCOTLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":584962.227,"estimate":602046.806920588,"calibrationEstimate":604727.4127128124},{"id":"voa/council_tax/SCOTLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":427573.287,"estimate":445115.3774691224,"calibrationEstimate":447097.24797928333},{"id":"voa/council_tax/SCOTLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":367240.86,"estimate":390433.5805595517,"calibrationEstimate":392171.9807073474},{"id":"voa/council_tax/SCOTLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":364617.711,"estimate":383971.6045381427,"calibrationEstimate":385681.2364856601},{"id":"voa/council_tax/SCOTLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":220344.516,"estimate":230924.03558689356,"calibrationEstimate":231952.2210955024},{"id":"voa/council_tax/SCOTLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":141650.046,"estimate":147640.03100788593,"calibrationEstimate":148297.3968727589},{"id":"voa/council_tax/SCOTLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":15738.894,"estimate":14844.596238613129,"calibrationEstimate":14910.691596031187},{"id":"voa/council_tax/SCOTLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2623149.0,"estimate":2734206.934652865,"calibrationEstimate":2746380.957605481},{"id":"voa/council_tax/SOUTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":367610.0,"estimate":376721.3822689056,"calibrationEstimate":378398.7290725708},{"id":"voa/council_tax/SOUTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":687430.0,"estimate":700808.5503644943,"calibrationEstimate":703928.8838472366},{"id":"voa/council_tax/SOUTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":1075940.0,"estimate":1090040.558608532,"calibrationEstimate":1094893.946111679},{"id":"voa/council_tax/SOUTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":843560.0,"estimate":858553.6785125732,"calibrationEstimate":862376.3792462349},{"id":"voa/council_tax/SOUTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":551730.0,"estimate":567477.6824498177,"calibrationEstimate":570004.3656759262},{"id":"voa/council_tax/SOUTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":337260.0,"estimate":344590.2440838814,"calibrationEstimate":346124.52712106705},{"id":"voa/council_tax/SOUTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":265610.0,"estimate":273549.8351545334,"calibrationEstimate":274767.8116083145},{"id":"voa/council_tax/SOUTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":40390.0,"estimate":41414.243516922,"calibrationEstimate":41598.64037132263},{"id":"voa/council_tax/SOUTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":4169520.0,"estimate":4253156.17495966,"calibrationEstimate":4272093.283054352},{"id":"voa/council_tax/SOUTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":473020.0,"estimate":482912.787299633,"calibrationEstimate":485062.9522204399},{"id":"voa/council_tax/SOUTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":644890.0,"estimate":652833.0327134132,"calibrationEstimate":655739.7580933571},{"id":"voa/council_tax/SOUTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":624030.0,"estimate":630313.4024662971,"calibrationEstimate":633119.8610377312},{"id":"voa/council_tax/SOUTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":432070.0,"estimate":436333.3158068657,"calibrationEstimate":438276.0832939148},{"id":"voa/council_tax/SOUTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":292090.0,"estimate":296615.94530296326,"calibrationEstimate":297936.61835718155},{"id":"voa/council_tax/SOUTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":147920.0,"estimate":150589.5069141388,"calibrationEstimate":151260.00522136688},{"id":"voa/council_tax/SOUTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":81960.0,"estimate":83527.61182880402,"calibrationEstimate":83899.51695775986},{"id":"voa/council_tax/SOUTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":8430.0,"estimate":8669.152314662933,"calibrationEstimate":8707.751531600952},{"id":"voa/council_tax/SOUTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":2704390.0,"estimate":2741794.754646778,"calibrationEstimate":2754002.546713352},{"id":"voa/council_tax/WALES/A","group":"Dwellings by council tax band and region","unit":"count","target":215380.0,"estimate":224605.6820923984,"calibrationEstimate":225605.73692715168},{"id":"voa/council_tax/WALES/B","group":"Dwellings by council tax band and region","unit":"count","target":307070.0,"estimate":320208.17440497875,"calibrationEstimate":321633.8936638236},{"id":"voa/council_tax/WALES/C","group":"Dwellings by council tax band and region","unit":"count","target":323220.0,"estimate":335451.0971978903,"calibrationEstimate":336944.68964356184},{"id":"voa/council_tax/WALES/D","group":"Dwellings by council tax band and region","unit":"count","target":241220.0,"estimate":250254.17059534788,"calibrationEstimate":251368.4234211743},{"id":"voa/council_tax/WALES/E","group":"Dwellings by council tax band and region","unit":"count","target":200840.0,"estimate":211026.1240774095,"calibrationEstimate":211965.71487867832},{"id":"voa/council_tax/WALES/F","group":"Dwellings by council tax band and region","unit":"count","target":122650.0,"estimate":126898.85001176596,"calibrationEstimate":127463.86601752044},{"id":"voa/council_tax/WALES/G","group":"Dwellings by council tax band and region","unit":"count","target":55190.0,"estimate":58875.90761309862,"calibrationEstimate":59138.051686525345},{"id":"voa/council_tax/WALES/H","group":"Dwellings by council tax band and region","unit":"count","target":13190.0,"estimate":13777.90127837658,"calibrationEstimate":13839.247251331806},{"id":"voa/council_tax/WALES/total","group":"Dwellings by council tax band and region","unit":"count","target":1484410.0,"estimate":1580971.558793813,"calibrationEstimate":1588010.8121637702},{"id":"voa/council_tax/WEST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":786010.0,"estimate":801264.3020524979,"calibrationEstimate":804831.908847332},{"id":"voa/council_tax/WEST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":654140.0,"estimate":667366.4046912193,"calibrationEstimate":670337.8446173668},{"id":"voa/council_tax/WEST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":526260.0,"estimate":542465.0707445145,"calibrationEstimate":544880.3880476952},{"id":"voa/council_tax/WEST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":302500.0,"estimate":308908.68011569977,"calibrationEstimate":310284.0953936577},{"id":"voa/council_tax/WEST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":193700.0,"estimate":198747.3023056984,"calibrationEstimate":199632.22103261948},{"id":"voa/council_tax/WEST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":105630.0,"estimate":107414.5040140152,"calibrationEstimate":107892.76392650604},{"id":"voa/council_tax/WEST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":62780.0,"estimate":65637.16608524323,"calibrationEstimate":65929.41587018967},{"id":"voa/council_tax/WEST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":6170.0,"estimate":6236.679645061493,"calibrationEstimate":6264.44837474823},{"id":"voa/council_tax/WEST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2637190.0,"estimate":2698040.1096539497,"calibrationEstimate":2710053.086110115},{"id":"voa/council_tax/YORKSHIRE/A","group":"Dwellings by council tax band and region","unit":"count","target":1070830.0,"estimate":1081951.5106871128,"calibrationEstimate":1086768.8853447435},{"id":"voa/council_tax/YORKSHIRE/B","group":"Dwellings by council tax band and region","unit":"count","target":514190.0,"estimate":523395.8514652252,"calibrationEstimate":525726.2633414268},{"id":"voa/council_tax/YORKSHIRE/C","group":"Dwellings by council tax band and region","unit":"count","target":432290.0,"estimate":438533.7035779953,"calibrationEstimate":440486.2676320076},{"id":"voa/council_tax/YORKSHIRE/D","group":"Dwellings by council tax band and region","unit":"count","target":249530.0,"estimate":251634.06920957565,"calibrationEstimate":252754.46445512772},{"id":"voa/council_tax/YORKSHIRE/E","group":"Dwellings by council tax band and region","unit":"count","target":158600.0,"estimate":159460.23387098312,"calibrationEstimate":160170.2293252945},{"id":"voa/council_tax/YORKSHIRE/F","group":"Dwellings by council tax band and region","unit":"count","target":75690.0,"estimate":76176.12427806854,"calibrationEstimate":76515.29922580719},{"id":"voa/council_tax/YORKSHIRE/G","group":"Dwellings by council tax band and region","unit":"count","target":42180.0,"estimate":43033.37067222595,"calibrationEstimate":43224.9764380455},{"id":"voa/council_tax/YORKSHIRE/H","group":"Dwellings by council tax band and region","unit":"count","target":3770.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/YORKSHIRE/total","group":"Dwellings by council tax band and region","unit":"count","target":2547080.0,"estimate":2574184.8637611866,"calibrationEstimate":2585646.385762453}] diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx new file mode 100644 index 0000000..60f8198 --- /dev/null +++ b/src/test/ukDataPages.test.tsx @@ -0,0 +1,84 @@ +import { describe, expect, it, vi } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import release from '../data/ukDataRelease.json'; +import { ukPipelineIntro, ukPipelineStages, ukBranchLabels } from '../data/ukPipelineStages'; +import { fmtInt, fmtPct } from '../data/ukDataRelease'; + +vi.mock('next/navigation', () => ({ + usePathname: () => '/uk/model/data/pipeline', + useSearchParams: () => new URLSearchParams(), +})); + +import DataPipeline from '../components/data/DataPipeline'; + +/** Every string the UK pipeline can show, across all stages and expanders. */ +function allPipelineText(): string { + const parts: string[] = [ukPipelineIntro, ukBranchLabels.national, ukBranchLabels.local]; + for (const s of ukPipelineStages) { + parts.push(s.title, s.subtitle, s.description, s.inputSize ?? '', s.outputSize ?? '', ...(s.dataSources ?? []), ...s.details); + for (const i of s.imputations ?? []) parts.push(i.name, i.source, i.method); + for (const t of s.calibrationTargets ?? []) parts.push(t.variable, t.target, t.source); + } + return parts.join('\n'); +} + +// Claims the UK pages made before policyengine.py pinned policyengine-uk-data +// 1.58.0, or that never applied to the UK. +const STALE_UK_PHRASES = [ + /FRS\)? 2023-24/, + /~20,000/, + /Round 7/, + /LCFS 2021-22|Living Costs and Food Survey 2021-22/, + /SPI 2020-21|2020-21 SPI/, + /1\.3x/, + /\b78%|\b58%/, + /PyTorch/, + /Constituency \(national\)/, + /~60,000|~30,000/, + /zero-weight copy \(10,000/, + /TAXSIM|CBO|federal|congressional/i, + /certified/i, +]; + +describe('UK pipeline copy', () => { + const text = allPipelineText(); + + it.each(STALE_UK_PHRASES.map((p) => [p.source, p]))('never says %s', (_, phrase) => { + expect(text).not.toMatch(phrase as RegExp); + }); + + it('quotes the pinned release and its counts from the extracted release file', () => { + expect(ukPipelineIntro).toContain(`policyengine.py ${release.release.policyengine}`); + expect(ukPipelineIntro).toContain(`${release.release.dataPackage} ${release.release.dataVersion}`); + expect(text).toContain(`${fmtInt(release.base.households)} households`); + expect(text).toContain(`${fmtInt(release.enhanced.households)} households`); + expect(text).toContain(`${fmtInt(release.weightMatrices.constituency.areas)} × ${fmtInt(release.enhanced.households)} weights`); + expect(text).toContain(`${fmtInt(release.weightMatrices.localAuthority.areas)} × ${fmtInt(release.enhanced.households)} weights`); + expect(text).toContain(fmtPct(release.calibration.nationalWithin10)); + expect(text).toContain(`${fmtInt(release.enhanced.geography.householdsWithoutArea)} households have none`); + }); + + it('describes one Output Area draw per household when the release used one', () => { + expect(release.enhanced.geography.outputAreaDrawsPerHousehold).toBe(1); + expect(text).toContain('the publish run drew 1'); + expect(text).not.toMatch(/10 (clones|geographic variants|Output Areas)/); + }); + + it('accounts for every household in the released file', () => { + const c = release.enhanced.composition; + expect(c.frs).toBe(release.base.households); + expect(c.capitalGainsCopies).toBe(c.frs + c.spiCopies); + expect(c.frs + c.spiCopies + c.capitalGainsCopies + c.cgtBandDonors).toBe(release.enhanced.households); + expect(release.weightMatrices.constituency.households).toBe(release.enhanced.households); + expect(release.weightMatrices.localAuthority.households).toBe(release.enhanced.households); + const g = release.enhanced.geography; + expect(g.householdsWithArea + g.householdsWithoutArea).toBe(release.enhanced.households); + }); + + it('renders the UK intro and branch labels', () => { + render(); + expect(screen.getByText(ukPipelineIntro)).toBeInTheDocument(); + expect(screen.getByText(ukBranchLabels.national)).toBeInTheDocument(); + expect(screen.getByText(ukBranchLabels.local)).toBeInTheDocument(); + }); +}); From 9fd94f57093dff38657a685c73ea0ebf33fb5f97 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:32:30 -0400 Subject: [PATCH 05/30] Show UK calibration targets and validation from the pinned release /data/calibration said calibration details were 'available for the US model only', and /data/validation told UK readers PolicyEngine checks its tax calculations against NBER's TAXSIM across federal and state income taxes. Both pages now describe the UK release policyengine.py 6.3.4 pins. Calibration targets: the 645 UK-wide targets in 66 families, with publisher, source link, forecast vintage, area (Great Britain where the registry scopes a target to it), 2025 value and fit at the last logged epoch; and the constituency and local authority target families with their fit, held-out metric and missing-source counts. Validation: policyengine-uk 2.126.12 runs the saved enhanced_frs_2024_25 for 2025-26 and uk-data 1.58.0's own target matrix scores it: 73.6% of the 644 non-zero targets within 10% (87.0% at the end of calibration with 2.122.2). The page shows the OBR March 2026 receipts and spending lines against the model, fit by family, the held-out HMRC employment counts, known issues (policyengine-uk-data#537, #570, #580, #581; policyengine-uk#1996), and every target on request. Co-Authored-By: Claude Opus 5.5 --- app/data/calibration/page.tsx | 3 +- app/data/validation/page.tsx | 3 +- scripts/extract_uk_release.py | 22 ++- scripts/test_extract_uk_release.py | 14 ++ src/data/ukDataRelease.json | 6 +- src/data/ukDataRelease.ts | 3 +- src/test/ukDataPages.test.tsx | 50 ++++++ src/views/data/UkCalibrationPage.tsx | 154 +++++++++++++++++++ src/views/data/UkValidationPage.tsx | 217 +++++++++++++++++++++++++++ src/views/data/ukTables.tsx | 110 ++++++++++++++ 10 files changed, 573 insertions(+), 9 deletions(-) create mode 100644 src/views/data/UkCalibrationPage.tsx create mode 100644 src/views/data/UkValidationPage.tsx create mode 100644 src/views/data/ukTables.tsx diff --git a/app/data/calibration/page.tsx b/app/data/calibration/page.tsx index da0c921..52d460e 100644 --- a/app/data/calibration/page.tsx +++ b/app/data/calibration/page.tsx @@ -1,4 +1,5 @@ import CalibrationPage from '../../../src/views/data/CalibrationPageClient'; +import UkCalibrationPage from '../../../src/views/data/UkCalibrationPage'; import CalibrationComparison from '../../../src/components/comparison/CalibrationComparison'; import { loadComparisonData } from '../../../src/data/comparisons'; import { detectComparePeers } from '../../../src/components/comparison/detectComparePeers'; @@ -18,7 +19,7 @@ export default async function CalibrationRoute({ ); if (!parsed.compareMode) { - return ; + return country === 'uk' ? : ; } const data = loadComparisonData(); diff --git a/app/data/validation/page.tsx b/app/data/validation/page.tsx index ac4f570..0a18f27 100644 --- a/app/data/validation/page.tsx +++ b/app/data/validation/page.tsx @@ -1,4 +1,5 @@ import ValidationPage from '../../../src/views/data/ValidationPage'; +import UkValidationPage from '../../../src/views/data/UkValidationPage'; import ValidationComparison from '../../../src/components/comparison/ValidationComparison'; import { loadComparisonData } from '../../../src/data/comparisons'; import { detectComparePeers } from '../../../src/components/comparison/detectComparePeers'; @@ -18,7 +19,7 @@ export default async function ValidationRoute({ ); if (!parsed.compareMode) { - return ; + return country === 'uk' ? : ; } const data = loadComparisonData(); diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index 86548f1..acc3daf 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -547,6 +547,24 @@ def last_epoch(log: pd.DataFrame) -> pd.DataFrame: return log[log["epoch"] == epoch].copy() +GREAT_BRITAIN = {"ENGLAND", "SCOTLAND", "WALES"} + + +def area_label(level: str, countries: pd.Series) -> str: + """The area a target family covers: the registry's country scope, else its level.""" + scopes = { + tuple(sorted(c)) if isinstance(c, (list, tuple)) else None for c in countries + } + if len(scopes) != 1: + raise ExtractionError(f"a target family mixes country scopes: {scopes}") + scope = scopes.pop() + if scope is None: + return {"national": "UK", "region": "Region", "country": "Nation"}[level] + if set(scope) == GREAT_BRITAIN: + return "Great Britain" + return ", ".join(c.replace("_", " ").title() for c in scope) + + def national_groups( national: pd.DataFrame, registry: pd.DataFrame, pinned: pd.DataFrame ) -> tuple[list[dict], list[dict]]: @@ -593,9 +611,7 @@ def national_groups( "source": source, "label": label, "publisher": " and ".join(publishers), - "geography": {"national": "UK", "region": "Region", "country": "Nation"}[ - level - ], + "geography": area_label(level, group["countries"]), "units": units, "targets": len(group), "zeroTargets": int((group["target"] == 0).sum()), diff --git a/scripts/test_extract_uk_release.py b/scripts/test_extract_uk_release.py index 3f7db54..5bfa0d7 100644 --- a/scripts/test_extract_uk_release.py +++ b/scripts/test_extract_uk_release.py @@ -140,6 +140,7 @@ def _log( breakdown_variable=None, reference_url="https://obr.uk/x", forecast_vintage="march_2026", + countries=None, ), dict( name="obr/vat", @@ -150,6 +151,7 @@ def _log( breakdown_variable=None, reference_url="https://obr.uk/x", forecast_vintage="march_2026", + countries=None, ), dict( name="slc/plan_5_borrowers_above_threshold", @@ -160,6 +162,7 @@ def _log( breakdown_variable=None, reference_url="https://slc.example", forecast_vintage=None, + countries=["ENGLAND", "SCOTLAND", "WALES"], ), ] @@ -439,3 +442,14 @@ def test_committed_summary_equals_a_fresh_extraction(): assert json.loads( (REPO / "src/data/ukTargetChecks.json").read_text() ) == json.loads(json.dumps(rows)) + + +def test_labels_a_family_by_its_country_scope(artifacts): + groups = {g["label"]: g for g in run(artifacts)["calibration"]["nationalGroups"]} + assert groups["Income tax receipts"]["geography"] == "UK" + assert ( + groups["Plan 2 and Plan 5 borrowers, liable and above the repayment threshold"][ + "geography" + ] + == "Great Britain" + ) diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index edf6748..6600bdf 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -645,7 +645,7 @@ "source": "obr", "label": "Universal Credit spending", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", "units": [ "gbp" ], @@ -939,7 +939,7 @@ "source": "dwp", "label": "Housing Benefit claims and spending, by age group", "publisher": "DWP", - "geography": "UK", + "geography": "Great Britain", "units": [ "count", "gbp" @@ -994,7 +994,7 @@ "source": "dwp", "label": "Pension Credit claims and spending", "publisher": "DWP", - "geography": "UK", + "geography": "Great Britain", "units": [ "count", "gbp" diff --git a/src/data/ukDataRelease.ts b/src/data/ukDataRelease.ts index 48dc788..df105d9 100644 --- a/src/data/ukDataRelease.ts +++ b/src/data/ukDataRelease.ts @@ -31,7 +31,8 @@ export interface UkTargetGroup { source: string; label: string; publisher: string; - geography: 'UK' | 'Region' | 'Nation'; + /** UK, Great Britain, Region or Nation: the registry's country scope, else the target's level. */ + geography: string; units: ('gbp' | 'count')[]; targets: number; zeroTargets: number; diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx index 60f8198..aadf9eb 100644 --- a/src/test/ukDataPages.test.tsx +++ b/src/test/ukDataPages.test.tsx @@ -82,3 +82,53 @@ describe('UK pipeline copy', () => { expect(screen.getByText(ukBranchLabels.local)).toBeInTheDocument(); }); }); + +import fc from 'fast-check'; +import UkCalibrationPage from '../views/data/UkCalibrationPage'; +import UkValidationPage, { fmtDifference, obrRows } from '../views/data/UkValidationPage'; +import checks from '../data/ukTargetChecks.json'; + +describe('UK calibration and validation pages', () => { + it('lists every UK-wide target family with the release counts, and no US-only text', () => { + const { container } = render(); + const text = container.textContent ?? ''; + expect(text).toContain(`${release.calibration.nationalTargets} UK-wide targets`); + expect(text).toContain(`${release.calibration.nationalGroups.length} families`); + for (const g of release.calibration.nationalGroups) expect(text).toContain(g.label); + expect(text).not.toMatch(/US model only|congressional|IRS|L0/); + const families = release.calibration.nationalGroups.reduce((n, g) => n + g.targets, 0); + expect(families).toBe(release.calibration.nationalTargets); + }); + + it('shows the pinned run and never claims TAXSIM for the UK', () => { + const { container } = render(); + const text = container.textContent ?? ''; + expect(text).not.toMatch(/TAXSIM|federal|state income tax|filing status/i); + expect(text).toContain(`policyengine-uk ${release.validation.modelVersion}`); + expect(text).toContain(fmtPct(release.validation.within10)); + for (const n of [537, 570, 580, 581, 1996]) expect(text).toContain(`#${n}`); + }); + + it('scores the same targets the release calibrates to', () => { + expect(checks.length).toBe(release.calibration.nationalTargets); + expect(release.validation.targets).toBe(checks.length); + expect(new Set(checks.map((r) => r.id)).size).toBe(checks.length); + expect(obrRows.length).toBe(checks.filter((r) => r.id.startsWith('obr/') && r.unit === 'gbp').length); + expect(obrRows.find((r) => r.id === 'obr/universal_credit')?.label).toMatch(/Great Britain/); + }); + + it('formats differences with the sign of estimate minus target', () => { + fc.assert(fc.property( + fc.double({ min: 1, max: 1e12, noNaN: true }), + fc.double({ min: 0, max: 1e12, noNaN: true }), + (target, estimate) => { + const out = fmtDifference(target, estimate); + const pct = Number(out.replace('−', '-').replace('%', '')); + expect(Math.abs(pct - (estimate / target - 1) * 100)).toBeLessThanOrEqual(0.05 + 1e-9); + if (estimate > target * 1.001) expect(out.startsWith('+')).toBe(true); + if (estimate < target * 0.999) expect(out.startsWith('−')).toBe(true); + }, + )); + expect(fmtDifference(0, 10)).toBe('–'); + }); +}); diff --git a/src/views/data/UkCalibrationPage.tsx b/src/views/data/UkCalibrationPage.tsx new file mode 100644 index 0000000..f0c8687 --- /dev/null +++ b/src/views/data/UkCalibrationPage.tsx @@ -0,0 +1,154 @@ +'use client'; + +import { useMemo, useState } from 'react'; +import { colors, typography, spacing } from '../../designTokens'; +import PageHeader from '../../components/layout/PageHeader'; +import SearchInput from '../../components/layout/SearchInput'; +import { + ukRelease as uk, + ukFacts as f, + fmtInt, + fmtPct, + fmtTarget, + type UkLocalCalibration, + type UkTargetGroup, +} from '../../data/ukDataRelease'; +import { DataTable, ExternalLink, PageLink, StatTile, bodyText, cell, issueUrl, sectionHeading } from './ukTables'; + +const cal = uk.calibration; + +const VINTAGES: Record = { + march_2026: 'March 2026 forecast', + spring_2026: 'Spring 2026 forecast', + '2023-24 outturn': '2023-24 outturn', +}; + +function groupValue(g: UkTargetGroup): string { + if (g.value === undefined) return '–'; + return fmtTarget(g.value, g.units[0]); +} + +function LocalTable({ local, areaName }: { local: UkLocalCalibration; areaName: string }) { + return ( + + {local.families.map((fam) => ( + + + {fam.label} + {fam.heldOut && ( +
+ Logged, not fitted +
+ )} + + {fam.source} + {fmtInt(fam.metrics)} + {fmtInt(fam.cells)} + {fmtPct(fam.within10)} + + ))} +
+ ); +} + +/** + * The targets the UK release is calibrated to, from the release's calibration + * logs and target registry (scripts/extract_uk_release.py). Fit figures are + * the final logged epoch of the build's own calibration. + */ +export default function UkCalibrationPage() { + const [search, setSearch] = useState(''); + const groups = useMemo(() => { + const q = search.trim().toLowerCase(); + if (!q) return cal.nationalGroups; + return cal.nationalGroups.filter((g) => + [g.label, g.publisher, g.geography].some((field) => field.toLowerCase().includes(q)), + ); + }, [search]); + const scored = cal.nationalTargets - cal.nationalZeroTargets; + + return ( +
+ + +
+ + + + +
+ +

+ These figures come from the release’s calibration logs, at the last logged epoch ({cal.epoch}), and its + target registry. A target with no 2025 figure takes the nearest earlier year, up to three years back. To see + how the saved file does when policyengine.py’s pinned model runs it, see{' '} + validation. +

+ +
+

UK-wide targets

+

+ {f.nationalTargets} targets in {cal.nationalGroups.length} families. At the end of calibration,{' '} + {fmtPct(cal.nationalWithin10)} of the {fmtInt(scored)} non-zero targets lie within 10% of their value, and{' '} + {fmtPct(cal.nationalWithin5)} within 5%. Relative error is undefined for a target whose value is zero, so the + shares leave out the {cal.nationalZeroTargets === 1 ? 'one such target' : `${cal.nationalZeroTargets} such targets`}. +

+ + + {groups.map((g) => ( + + {g.label} + + {g.urls.length > 0 ? {g.publisher} : g.publisher} + {g.vintages.length > 0 && ( +
{g.vintages.map((v) => VINTAGES[v] ?? v).join(', ')}
+ )} + + {g.geography} + {fmtInt(g.targets)} + {groupValue(g)} + {fmtPct(g.within10)} + + ))} +
+ {groups.length === 0 &&

No targets match.

} +

+ The UK-wide National Insurance target compares OBR’s total receipts with employee contributions alone, which + calibration cannot match;{' '} + policyengine-uk-data#537 removes it. +

+
+ +
+

Constituency targets

+

+ {f.constituencies} constituencies × {cal.constituency.metrics} measures. Calibration fits{' '} + {fmtInt(cal.constituency.trainingCells)} non-zero area targets, and {fmtPct(cal.constituency.trainingWithin10)} of + them lie within 10% at the end. The other {fmtInt(cal.constituency.structuralZeroCells)} are Scottish and Welsh + renting targets in constituencies outside those nations, which calibration meets exactly. HMRC counts of + taxpayers with employment income are logged but not fitted. +

+ +
+ +
+

Local authority targets

+

+ {f.localAuthorities} local authorities × {cal.localAuthority.metrics} measures. Calibration fits{' '} + {fmtInt(cal.localAuthority.trainingCells)} area targets, and {fmtPct(cal.localAuthority.trainingWithin10)} of + them lie within 10% at the end. {fmtInt(cal.localAuthority.cellsWithoutSource)} area and measure pairs have no + local source and stay out of the loss. +

+ +
+
+ ); +} diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx new file mode 100644 index 0000000..1aafa03 --- /dev/null +++ b/src/views/data/UkValidationPage.tsx @@ -0,0 +1,217 @@ +'use client'; + +import { useMemo, useState } from 'react'; +import { colors, typography, spacing } from '../../designTokens'; +import PageHeader from '../../components/layout/PageHeader'; +import SearchInput from '../../components/layout/SearchInput'; +import checks from '../../data/ukTargetChecks.json'; +import { + ukRelease as uk, + ukFacts as f, + fmtInt, + fmtPct, + fmtTarget, + type UkTargetCheck, +} from '../../data/ukDataRelease'; +import { DataTable, ExternalLink, PageLink, StatTile, bodyText, cell, issueUrl, sectionHeading } from './ukTables'; + +const rows = checks as UkTargetCheck[]; +const v = uk.validation; +const cal = uk.calibration; + +// Rows in multi-target OBR families, named one by one. +const OBR_ROW_LABELS: Record = { + 'obr/ni': 'National Insurance receipts, total', + 'obr/ni_employee': 'Employee National Insurance receipts', + 'obr/council_tax': 'Council tax receipts, UK', + 'obr/council_tax_england': 'Council tax receipts, England', + 'obr/council_tax_scotland': 'Council tax receipts, Scotland', + 'obr/council_tax_wales': 'Council tax receipts, Wales', +}; + +const areaOf = new Map(cal.nationalGroups.map((g) => [g.label, g.geography])); + +/** OBR receipts and spending lines, in £, from the March 2026 forecast. */ +export const obrRows = rows + .filter((r) => r.id.startsWith('obr/') && r.unit === 'gbp') + .map((r) => { + const label = OBR_ROW_LABELS[r.id] ?? r.group; + const area = areaOf.get(r.group); + return { ...r, label: area && area !== 'UK' ? `${label} (${area})` : label }; + }) + .sort((a, b) => b.target - a.target); + +/** "+5.2%" / "−12.0%"; a zero target has no relative difference. */ +export function fmtDifference(target: number, estimate: number): string { + if (target === 0) return '–'; + const pct = (estimate / target - 1) * 100; + return `${pct >= 0 ? '+' : '−'}${Math.abs(pct).toFixed(1)}%`; +} + +const KNOWN_ISSUES = [ + { + repo: 'policyengine-uk-data', + n: 581, + text: `The build calibrated the release with policyengine-uk ${uk.release.builtWithModelVersion}; policyengine.py runs it with ${uk.release.modelVersion}. UK-wide fit within 10% falls from ${fmtPct(cal.nationalWithin10)} to ${fmtPct(v.within10)} between the two.`, + }, + { + repo: 'policyengine-uk-data', + n: 537, + text: 'The total National Insurance target is compared with employee contributions alone.', + }, + { repo: 'policyengine-uk', n: 1996, text: 'Modelled VAT exceeds OBR receipts.' }, + { repo: 'policyengine-uk-data', n: 570, text: 'Capital gains fall short of HMRC’s totals.' }, + { + repo: 'policyengine-uk-data', + n: 580, + text: 'Northern Ireland households have no Output Area, so Northern Ireland constituencies and local authorities have no households.', + }, +]; + +/** + * How the UK default dataset compares with official statistics: the saved + * file run by the model policyengine.py pins (scripts/run_uk_target_check.py), + * scored on the release's own UK-wide calibration targets, plus the area + * targets the build holds out of calibration. + */ +export default function UkValidationPage() { + const [search, setSearch] = useState(''); + const [showAll, setShowAll] = useState(false); + const scored = v.targets - v.zeroTargets; + + const filtered = useMemo(() => { + const q = search.trim().toLowerCase(); + return q ? rows.filter((r) => r.id.toLowerCase().includes(q) || r.group.toLowerCase().includes(q)) : rows; + }, [search]); + + return ( +
+ + +
+ + + + +
+ +
+

The default dataset against its UK-wide targets

+

+ policyengine-uk {v.modelVersion}, the version {f.pin} pins, runs {uk.release.defaultDataset} from {f.data}{' '} + for {v.year}-{String(v.year + 1).slice(2)}, and the build’s own code scores the result against the{' '} + {f.nationalTargets} UK-wide targets the release is calibrated to. {fmtPct(v.within10)} of the{' '} + {fmtInt(scored)} non-zero targets lie within 10%, and {fmtPct(v.within5)} within 5%. At the end of + calibration, with policyengine-uk {uk.release.builtWithModelVersion}, the shares were{' '} + {fmtPct(cal.nationalWithin10)} and {fmtPct(cal.nationalWithin5)}. The run counts {fmtInt(v.people)} people + in {fmtInt(v.households)} households. +

+

+ The OBR’s March 2026 Economic and Fiscal Outlook forecasts these receipts and spending lines for 2025-26: +

+ + {obrRows.map((r) => ( + + {r.label} + {fmtTarget(r.target, 'gbp')} + {fmtTarget(r.estimate, 'gbp')} + {fmtDifference(r.target, r.estimate)} + + ))} + +
+ +
+

Fit by target family

+

+ Share of each family’s targets within 10%, at the end of calibration and with the pinned model. The{' '} + calibration targets page lists each family’s publisher. +

+ + {cal.nationalGroups.map((g) => ( + + {g.label} + {fmtInt(g.targets)} + {fmtPct(g.within10)} + {fmtPct(g.pinnedWithin10)} + + ))} + +
+ +
+

Held out of calibration

+

+ The build logs HMRC’s counts of income taxpayers with employment income for each constituency and local + authority, but does not fit them: HMRC’s counts cover every income taxpayer with pay in the year, including + people the FRS finds out of work when it interviews them. At the end of calibration,{' '} + {fmtPct(cal.constituency.heldOut.within10)} of the {f.constituencies} constituency counts and{' '} + {fmtPct(cal.localAuthority.heldOut.within10)} of the {f.localAuthorities} local authority counts lie within 10%. +

+
+ +
+

Known issues

+
    + {KNOWN_ISSUES.map((issue) => ( +
  • + {issue.text}{' '} + {`${issue.repo}#${issue.n}`} +
  • + ))} +
+
+ +
+

Every UK-wide target

+

+ All {fmtInt(rows.length)} targets, with the pinned model’s {v.year}-{String(v.year + 1).slice(2)} estimate. + Target identifiers match policyengine-uk-data’s target registry. +

+ {showAll ? ( + <> + + + {filtered.map((r) => ( + + +
{r.id}
+
{r.group}
+ + {fmtTarget(r.target, r.unit)} + {fmtTarget(r.estimate, r.unit)} + {fmtDifference(r.target, r.estimate)} + + ))} +
+ + ) : ( + + )} +
+
+ ); +} diff --git a/src/views/data/ukTables.tsx b/src/views/data/ukTables.tsx new file mode 100644 index 0000000..ac49bd4 --- /dev/null +++ b/src/views/data/ukTables.tsx @@ -0,0 +1,110 @@ +import type { CSSProperties, ReactNode } from 'react'; +import Link from 'next/link'; +import { useSearchParams } from 'next/navigation'; +import { usePublicBasePrefix } from '../../hooks/usePublicBasePrefix'; +import { colors, typography, spacing } from '../../designTokens'; + +/** Shared table chrome for the UK data pages. Scrolls inside itself on narrow screens. */ +export function DataTable({ head, children, minWidth = 640 }: { head: string[]; children: ReactNode; minWidth?: number }) { + return ( +
+ + + + {head.map((label, i) => ( + + ))} + + + {children} +
+ {label} +
+
+ ); +} + +export const cell = (align: 'left' | 'right' = 'right', extra: CSSProperties = {}): CSSProperties => ({ + padding: `${spacing.sm} ${spacing.lg}`, + textAlign: align, + fontSize: typography.fontSize.sm, + color: colors.text.primary, + borderTop: `1px solid ${colors.border.light}`, + verticalAlign: 'top', + fontVariantNumeric: 'tabular-nums', + ...extra, +}); + +export const sectionHeading: CSSProperties = { + fontSize: typography.fontSize['2xl'], + fontWeight: typography.fontWeight.bold, + color: colors.primary[900], + margin: `0 0 ${spacing.md}`, +}; + +export const bodyText: CSSProperties = { + fontSize: typography.fontSize.base, + color: colors.text.secondary, + lineHeight: 1.7, + margin: `0 0 ${spacing.lg}`, + maxWidth: '760px', +}; + +export function StatTile({ value, label }: { value: string; label: string }) { + return ( +
+
+ {value} +
+
+ {label} +
+
+ ); +} + +export function ExternalLink({ href, children }: { href: string; children: ReactNode }) { + return ( + + {children} + + ); +} + +export const issueUrl = (repo: string, n: number) => `https://github.com/PolicyEngine/${repo}/issues/${n}`; + +/** A link to another model page that keeps the public prefix and ?country=/?embed=. */ +export function PageLink({ path, children }: { path: string; children: ReactNode }) { + const base = usePublicBasePrefix(); + const search = useSearchParams().toString(); + return ( + + {children} + + ); +} From 8662731a170750333b14e9cb2fdfb9474b45ae35 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:37:49 -0400 Subject: [PATCH 06/30] Show PolicyEngine UK's own behavioural responses on the UK page The UK behavioural responses page showed the CBO's US elasticity presets, a CBO-based US budget-constraint chart, US spelling ('labor') and a link to the US methodology post, and said PolicyEngine uses the elasticity of taxable income. It now describes what policyengine-uk 2.126.12 (the version policyengine.py 6.3.4 pins) models: - Static by default. - Labour supply: income and substitution elasticities (default 0) on employment income, each relative change capped at 100%, fed back into the reform. - The OBR-method module (Simulation.apply_dynamics): elasticities by family type and youngest child from the OBR's note on the Autumn 2023 NICs cut, for the two eldest adults in each household, hours only, reported alongside the reform. - Capital gains: retention-rate elasticity (default 0), with an optional 1.4 elasticity for BADR gains from the OBR's January 2025 costing. A differential test checks the defaults and elasticities against the policyengine-uk source when UK_MODEL_SOURCE is set. Co-Authored-By: Claude Opus 5.5 --- src/components/theory/BehavioralResponses.tsx | 10 +- .../theory/UkBehaviouralResponses.tsx | 121 ++++++++++++++++++ src/data/ukBehaviouralResponses.ts | 67 ++++++++++ src/test/ukBehavioural.test.tsx | 89 +++++++++++++ 4 files changed, 283 insertions(+), 4 deletions(-) create mode 100644 src/components/theory/UkBehaviouralResponses.tsx create mode 100644 src/data/ukBehaviouralResponses.ts create mode 100644 src/test/ukBehavioural.test.tsx diff --git a/src/components/theory/BehavioralResponses.tsx b/src/components/theory/BehavioralResponses.tsx index 3428e70..2507f1c 100644 --- a/src/components/theory/BehavioralResponses.tsx +++ b/src/components/theory/BehavioralResponses.tsx @@ -3,6 +3,7 @@ import { colors, typography, spacing } from '../../designTokens'; import { cboDefaults, BLOG_URL, sources } from '../../data/elasticities'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, ReferenceLine } from 'recharts'; import type { Country } from '../../hooks/useCountry'; +import UkBehaviouralResponses from './UkBehaviouralResponses'; function generateBudgetData(substitutionElasticity: number, incomeElasticity: number) { const data = []; @@ -24,7 +25,8 @@ function generateBudgetData(substitutionElasticity: number, incomeElasticity: nu } export default function BehavioralResponses({ country = 'us' }: { country?: Country }) { - const currencySymbol = country === 'uk' ? '£' : '$'; + if (country === 'uk') return ; + const currencySymbol = '$'; const avgSubstitution = cboDefaults.substitutionElasticities.reduce((a, b) => a + b.central, 0) / cboDefaults.substitutionElasticities.length; const budgetData = generateBudgetData(avgSubstitution, cboDefaults.incomeElasticity.central); @@ -32,7 +34,7 @@ export default function BehavioralResponses({ country = 'us' }: { country?: Coun

Tax and benefit reforms change incentives to work and earn. PolicyEngine models these - {country === 'uk' ? ' behavioural' : ' behavioral'} responses using the elasticity of taxable income framework, capturing both + {' behavioral'} responses using the elasticity of taxable income framework, capturing both substitution effects (changing work effort) and income effects (adjusting for changes in after-tax income).

@@ -75,7 +77,7 @@ export default function BehavioralResponses({ country = 'us' }: { country?: Coun - +

@@ -89,7 +91,7 @@ export default function BehavioralResponses({ country = 'us' }: { country?: Coun
- {country === 'uk' ? 'Reform (behavioural)' : 'Reform (behavioral)'} + Reform (behavioral)
diff --git a/src/components/theory/UkBehaviouralResponses.tsx b/src/components/theory/UkBehaviouralResponses.tsx new file mode 100644 index 0000000..aab75fa --- /dev/null +++ b/src/components/theory/UkBehaviouralResponses.tsx @@ -0,0 +1,121 @@ +import { colors, typography, spacing } from '../../designTokens'; +import { + UK_MODEL_VERSION, + capitalGainsParameters, + labourSupplyParameters, + obrElasticities, + ukSourceLinks, + type ParameterRow, +} from '../../data/ukBehaviouralResponses'; +import { DataTable, ExternalLink, bodyText, cell, sectionHeading } from '../../views/data/ukTables'; + +const fmtElasticity = (x: number) => (x === 0 ? '0' : x < 0 ? `−${Math.abs(x).toFixed(3).replace(/0+$/, '')}` : x.toFixed(3).replace(/0+$/, '')); + +function ParameterTable({ rows }: { rows: ParameterRow[] }) { + return ( + + {rows.map((r) => ( + + +
{r.label}
+
+ {r.path} +
+ + {r.value} + + ))} +
+ ); +} + +/** PolicyEngine UK's behavioural responses, from policyengine-uk's own parameters and code. */ +export default function UkBehaviouralResponses() { + return ( +
+

+ PolicyEngine UK simulates reforms statically by default: earnings and capital gains stay as they were before + the reform. policyengine-uk {UK_MODEL_VERSION}, the version policyengine.py 6.3.4 pins, offers three optional + behavioural responses. +

+ +
+

Labour supply

+

+ Two elasticities set how employment income responds to a reform, and both are 0 by default. When either is + set, each person’s employment income changes by +

+

+ employment income × (income elasticity × change in household net income + substitution elasticity × change + in marginal wage) +

+

+ Each change compares the reform with the baseline and stops at 100%. Employment income means the amount + before the response, and the marginal wage means one minus the person’s marginal tax rate. The response + feeds into the reform’s taxes and benefits. +

+ +
+ +
+

Labour supply, the OBR’s way

+

+ A module in policyengine-uk’s Python interface (Simulation.apply_dynamics) estimates how + working hours respond to a reform with elasticities that vary by family type and the age of the youngest + child, which it takes from the OBR’s note on{' '} + the labour supply effects of the Autumn 2023 National Insurance cut. + It covers the two eldest adults in each household, except the self-employed, full-time students and people + aged 60 or over, and models hours only: the participation response is not yet switched on. It reports the + change in earnings and in full-time-equivalent employment alongside the reform, without feeding it back + into the reform’s taxes and benefits. +

+ + {obrElasticities.map((r) => ( + + {r.group} + {r.youngestChild} + {fmtElasticity(r.substitution)} + {fmtElasticity(r.income)} + + ))} + +

+ Married means married or in a civil partnership; children are members of the benefit unit under 18. The module + gives no elasticity to unmarried men with children. +

+
+ +
+

Capital gains

+

+ An elasticity of realised gains with respect to the retention rate, the share of a marginal pound of gains + kept after tax, sets how gains respond, and it is 0 by default. Under a reform, each person’s gains scale by + the ratio of their reform to baseline retention rates, raised to the elasticity. Gains that qualify for + Business Asset Disposal Relief can take their own elasticity, 1.4, the value the OBR used for those gains in + its January 2025 capital gains tax costing; until that + switch is on, they take the main elasticity. +

+ +
+ +

+ Sources: policyengine-uk {UK_MODEL_VERSION}{' '} + simulation parameters and{' '} + labour supply module. +

+
+ ); +} diff --git a/src/data/ukBehaviouralResponses.ts b/src/data/ukBehaviouralResponses.ts new file mode 100644 index 0000000..d0cfffd --- /dev/null +++ b/src/data/ukBehaviouralResponses.ts @@ -0,0 +1,67 @@ +/** + * PolicyEngine UK's behavioural responses, as policyengine-uk 2.126.12 (the + * version policyengine.py 6.3.4 pins) defines them. Values mirror: + * - parameters/gov/simulation/labour_supply_responses/*.yaml + * - parameters/gov/simulation/capital_gains_responses/*.yaml + * - dynamics/progression.py: calculate_labour_substitution_elasticities and + * calculate_labour_net_income_elasticities + * src/test/ukBehavioural.test.ts compares them with that source when + * UK_MODEL_SOURCE points at a policyengine-uk checkout. + */ + +export const UK_MODEL_VERSION = '2.126.12'; + +const REPO = 'https://github.com/PolicyEngine/policyengine-uk'; +export const ukSourceLinks = { + parameters: `${REPO}/tree/${UK_MODEL_VERSION}/policyengine_uk/parameters/gov/simulation`, + dynamics: `${REPO}/blob/${UK_MODEL_VERSION}/policyengine_uk/dynamics/progression.py`, + obrNote: 'https://obr.uk/docs/dlm_uploads/NICS-Cut-Impact-on-Labour-Supply-Note.pdf', + obrCgt: 'https://obr.uk/docs/dlm_uploads/CGT-supplementary-release-Jan-2025.pdf', +}; + +export interface ParameterRow { + path: string; + label: string; + value: string; +} + +/** Simulation parameters: elasticities applied inside a reform simulation. */ +export const labourSupplyParameters: ParameterRow[] = [ + { path: 'gov.simulation.labour_supply_responses.income_elasticity', label: 'Income elasticity', value: '0' }, + { path: 'gov.simulation.labour_supply_responses.substitution_elasticity', label: 'Substitution elasticity', value: '0' }, + { path: 'gov.simulation.labour_supply_responses.bounds.income_change', label: 'Cap on the relative change in net income', value: '1 (100%)' }, + { path: 'gov.simulation.labour_supply_responses.bounds.effective_wage_rate_change', label: 'Cap on the relative change in the marginal wage', value: '1 (100%)' }, +]; + +export const capitalGainsParameters: ParameterRow[] = [ + { path: 'gov.simulation.capital_gains_responses.elasticity', label: 'Retention-rate elasticity of realisations', value: '0' }, + { path: 'gov.simulation.capital_gains_responses.separate_badr_elasticity', label: 'Separate elasticity for Business Asset Disposal Relief gains', value: 'Off' }, + { path: 'gov.simulation.capital_gains_responses.badr_elasticity', label: 'Elasticity for those gains, when on', value: '1.4' }, + { path: 'gov.simulation.capital_gains_responses.mtr_elasticity', label: 'Tax-rate elasticity (alternative convention)', value: '0' }, +]; + +export interface ElasticityRow { + group: string; + youngestChild: string; + substitution: number; + income: number; +} + +/** + * The OBR-method module's elasticities by group. "Married" is the model's + * is_married: married or in a civil partnership. Children are benefit-unit + * members under 18. Unmarried men with children get no elasticity. + */ +export const obrElasticities: ElasticityRow[] = [ + { group: 'Married women', youngestChild: 'No children', substitution: 0.14, income: 0 }, + { group: 'Married women', youngestChild: '0–2', substitution: 0.301, income: -0.185 }, + { group: 'Married women', youngestChild: '3–4', substitution: 0.439, income: -0.173 }, + { group: 'Married women', youngestChild: '5–10', substitution: 0.173, income: -0.102 }, + { group: 'Married women', youngestChild: '11–17', substitution: 0.16, income: -0.063 }, + { group: 'Unmarried women with children', youngestChild: '0–4', substitution: 0.094, income: -0.037 }, + { group: 'Unmarried women with children', youngestChild: '5–10', substitution: 0.128, income: -0.075 }, + { group: 'Unmarried women with children', youngestChild: '11–17', substitution: 0.136, income: -0.054 }, + { group: 'Unmarried women without children', youngestChild: '–', substitution: 0.15, income: -0.05 }, + { group: 'Men, except unmarried men with children', youngestChild: '–', substitution: 0.15, income: -0.05 }, + { group: 'Unmarried men with children', youngestChild: '–', substitution: 0, income: 0 }, +]; diff --git a/src/test/ukBehavioural.test.tsx b/src/test/ukBehavioural.test.tsx new file mode 100644 index 0000000..3182ec5 --- /dev/null +++ b/src/test/ukBehavioural.test.tsx @@ -0,0 +1,89 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { describe, expect, it, vi } from 'vitest'; +import { render } from '@testing-library/react'; +import { + capitalGainsParameters, + labourSupplyParameters, + obrElasticities, +} from '../data/ukBehaviouralResponses'; + +vi.mock('next/navigation', () => ({ + usePathname: () => '/uk/model/behavioral', + useSearchParams: () => new URLSearchParams(), +})); + +import BehavioralPage from '../views/BehavioralPage'; + +describe('UK behavioural responses page', () => { + it('shows PolicyEngine UK’s own responses, not the CBO’s US presets', () => { + const { container } = render(); + const text = container.textContent ?? ''; + expect(container.querySelector('h1')).toHaveTextContent('Behavioural responses'); + expect(text).not.toMatch(/CBO|\blabor\b|behavioral|taxable income|decile|\$/); + expect(text).toContain('statically by default'); + for (const row of [...labourSupplyParameters, ...capitalGainsParameters]) expect(text).toContain(row.path); + const link = container.querySelector('a[href*="NICS-Cut-Impact-on-Labour-Supply"]'); + expect(link).not.toBeNull(); + }); + + it('keeps the US page on the CBO presets', () => { + const { container } = render(); + expect(container.textContent).toContain('CBO preset elasticity parameters'); + }); + + it('gives every group a substitution elasticity of at least zero and an income elasticity of at most zero', () => { + for (const row of obrElasticities) { + expect(row.substitution).toBeGreaterThanOrEqual(0); + expect(row.income).toBeLessThanOrEqual(0); + } + }); +}); + +/** + * Differential check against the policyengine-uk source the page describes: + * UK_MODEL_SOURCE=/path/to/policyengine-uk (checked out at UK_MODEL_VERSION). + */ +const source = process.env.UK_MODEL_SOURCE; + +describe.skipIf(!source)('UK behavioural values match policyengine-uk', () => { + const read = (path: string) => readFileSync(join(source!, 'policyengine_uk', path), 'utf8'); + const yamlValue = (path: string) => { + const match = read(path).match(/values:\s*\n\s*[\d-]+:\s*([^\s#]+)/); + return match?.[1]; + }; + + it('matches the parameter defaults', () => { + const files: Record = { + 'gov.simulation.labour_supply_responses.income_elasticity': 'parameters/gov/simulation/labour_supply_responses/income_elasticity.yaml', + 'gov.simulation.labour_supply_responses.substitution_elasticity': 'parameters/gov/simulation/labour_supply_responses/substitution_elasticity.yaml', + 'gov.simulation.labour_supply_responses.bounds.income_change': 'parameters/gov/simulation/labour_supply_responses/bounds/income_change.yaml', + 'gov.simulation.labour_supply_responses.bounds.effective_wage_rate_change': 'parameters/gov/simulation/labour_supply_responses/bounds/effective_wage_rate_change.yaml', + 'gov.simulation.capital_gains_responses.elasticity': 'parameters/gov/simulation/capital_gains_responses/elasticity.yaml', + 'gov.simulation.capital_gains_responses.separate_badr_elasticity': 'parameters/gov/simulation/capital_gains_responses/separate_badr_elasticity.yaml', + 'gov.simulation.capital_gains_responses.badr_elasticity': 'parameters/gov/simulation/capital_gains_responses/badr_elasticity.yaml', + 'gov.simulation.capital_gains_responses.mtr_elasticity': 'parameters/gov/simulation/capital_gains_responses/mtr_elasticity.yaml', + }; + for (const row of [...labourSupplyParameters, ...capitalGainsParameters]) { + expect(existsSync(join(source!, 'policyengine_uk', files[row.path]))).toBe(true); + const raw = yamlValue(files[row.path]); + const shown = row.value.split(' ')[0]; + expect(raw === 'false' ? 'Off' : raw === 'true' ? 'On' : raw).toBe(shown); + } + }); + + it('matches the OBR-method elasticities in dynamics/progression.py', () => { + const code = read('dynamics/progression.py'); + const body = (name: string) => { + const start = code.indexOf(`def ${name}`); + return code.slice(start, code.indexOf('return elasticities', start)); + }; + // Non-zero literals assigned in each function, as a sorted multiset. + const literals = (text: string) => + [...text.matchAll(/(? Number(m[0])).filter((x) => x !== 0).sort((a, b) => a - b); + const shown = (key: 'substitution' | 'income') => + obrElasticities.map((r) => r[key]).filter((x) => x !== 0).sort((a, b) => a - b); + expect(literals(body('calculate_labour_substitution_elasticities'))).toEqual(shown('substitution')); + expect(literals(body('calculate_labour_net_income_elasticities'))).toEqual(shown('income')); + }); +}); From d2c565c978d58eadec075734b82cb0211d5d272e Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:39:18 -0400 Subject: [PATCH 07/30] Say programmes on the UK parameter explorer; sentence-case entity labels Co-Authored-By: Claude Opus 5.5 --- src/components/parameters/ParameterExplorer.tsx | 2 +- src/components/variables/VariableCard.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/parameters/ParameterExplorer.tsx b/src/components/parameters/ParameterExplorer.tsx index 2ed7403..fbfaf57 100644 --- a/src/components/parameters/ParameterExplorer.tsx +++ b/src/components/parameters/ParameterExplorer.tsx @@ -943,7 +943,7 @@ export default function ParameterExplorer({ parameters, country }: ParameterExpl {currentFolderTotalParams.toLocaleString()} parameters - {currentFolderTotalItems > 1 && ` across ${currentFolderTotalItems} ${folderContents.folders.length > 0 ? 'programs' : 'groups'}`} + {currentFolderTotalItems > 1 && ` across ${currentFolderTotalItems} ${folderContents.folders.length > 0 ? (country === 'uk' ? 'programmes' : 'programs') : 'groups'}`}
diff --git a/src/components/variables/VariableCard.tsx b/src/components/variables/VariableCard.tsx index 24b7916..aa67f24 100644 --- a/src/components/variables/VariableCard.tsx +++ b/src/components/variables/VariableCard.tsx @@ -19,12 +19,12 @@ const entityColors: Record = { export const entityLabels: Record = { person: 'Person', - tax_unit: 'Tax Unit', - spm_unit: 'SPM Unit', + tax_unit: 'Tax unit', + spm_unit: 'SPM unit', household: 'Household', family: 'Family', - marital_unit: 'Marital Unit', - benunit: 'Benefit Unit', + marital_unit: 'Marital unit', + benunit: 'Benefit unit', }; export default function VariableCard({ variable, isSelected, onClick }: VariableCardProps) { From 4a9e5e380c686d4fe21b598cae3de2d6d1bff860 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:47:29 -0400 Subject: [PATCH 08/30] Show what each UK validation figure measures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The release scores two OBR lines against narrower variables: total National Insurance against employee NICs (policyengine-uk-data#537) and the 'Incapacity benefits' line against income-related ESA. The validation table no longer shows £50.5bn as PolicyEngine's total NICs; it compares OBR's total with the three classes' sum (£207.7bn, +3.8%), names the ESA comparison for what it is, and says each figure sums the variable the target registry assigns. The pipeline's calibration-table rows count fitted area targets instead of areas × measures. Co-Authored-By: Claude Opus 5.5 --- scripts/extract_uk_release.py | 2 +- src/data/ukDataRelease.json | 12 ++++++------ src/data/ukPipelineStages.ts | 4 ++-- src/data/ukTargetChecks.json | 2 +- src/test/ukDataPages.test.tsx | 17 ++++++++++++++--- src/views/data/UkValidationPage.tsx | 24 +++++++++++++++++++++--- 6 files changed, 45 insertions(+), 16 deletions(-) diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index acc3daf..b23990b 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -214,7 +214,7 @@ "esa_income", "national", None, - ): "Employment and Support Allowance spending", + ): "Incapacity benefits spending, scored against income-related ESA", ("obr", "jsa", "national", None): "Jobseeker's Allowance spending", ("obr", "winter_fuel_allowance", "national", None): "Winter Fuel Payment spending", ( diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index 6600bdf..bab25ec 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -405,7 +405,7 @@ }, { "source": "obr", - "label": "Employment and Support Allowance spending", + "label": "Fuel duty receipts", "publisher": "OBR", "geography": "UK", "units": [ @@ -416,16 +416,16 @@ "within10": 1.0, "pinnedWithin10": 1.0, "urls": [ - "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/" + "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/" ], "vintages": [ "march_2026" ], - "value": 7206287181.538654 + "value": 24241874775.213375 }, { "source": "obr", - "label": "Fuel duty receipts", + "label": "Incapacity benefits spending, scored against income-related ESA", "publisher": "OBR", "geography": "UK", "units": [ @@ -436,12 +436,12 @@ "within10": 1.0, "pinnedWithin10": 1.0, "urls": [ - "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/" + "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/" ], "vintages": [ "march_2026" ], - "value": 24241874775.213375 + "value": 7206287181.538654 }, { "source": "obr", diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index 57cd67f..aefed00 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -245,7 +245,7 @@ export const ukPipelineStages: PipelineStage[] = [ calibrationTargets: [ ...cal.constituency.families.map((fam) => ({ variable: fam.heldOut ? `${fam.label} (logged, not fitted)` : fam.label, - target: `${f.constituencies} × ${fam.metrics}`, + target: `${fmtInt(fam.cells)} area targets`, source: fam.source, })), { variable: 'UK-wide targets', target: f.nationalTargets, source: 'See calibration targets' }, @@ -295,7 +295,7 @@ export const ukPipelineStages: PipelineStage[] = [ calibrationTargets: [ ...cal.localAuthority.families.map((fam) => ({ variable: fam.heldOut ? `${fam.label} (logged, not fitted)` : fam.label, - target: `${f.localAuthorities} × ${fam.metrics}`, + target: `${fmtInt(fam.cells)} area targets`, source: fam.source, })), { variable: 'UK-wide targets', target: f.nationalTargets, source: 'See calibration targets' }, diff --git a/src/data/ukTargetChecks.json b/src/data/ukTargetChecks.json index 7e07249..240c1d0 100644 --- a/src/data/ukTargetChecks.json +++ b/src/data/ukTargetChecks.json @@ -1 +1 @@ -[{"id":"dwp/benefit_cap_total_reduction","group":"Benefit cap: households capped and total reduction","unit":"gbp","target":320866000.0,"estimate":416482947.560074,"calibrationEstimate":330069710.0619365},{"id":"dwp/benefit_capped_households","group":"Benefit cap: households capped and total reduction","unit":"count","target":110637.0,"estimate":147944.28814807534,"calibrationEstimate":114504.09350681303},{"id":"dwp/esa_claimants","group":"Employment and Support Allowance claimants","unit":"count","target":999000.0,"estimate":904541.0915792732,"calibrationEstimate":909849.9250053912},{"id":"dwp/esa_contrib_claimants","group":"Contribution-based ESA claimants","unit":"count","target":620000.0,"estimate":716681.2252025008,"calibrationEstimate":719872.2350563705},{"id":"dwp/esa_income_claimants","group":"Income-related ESA claimants","unit":"count","target":180000.0,"estimate":188801.45329512656,"calibrationEstimate":190923.46925877035},{"id":"dwp/housing_benefit/over_pension_credit_age","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":7114700000.0,"estimate":7111903913.229882,"calibrationEstimate":7293068999.985946},{"id":"dwp/housing_benefit/over_pension_credit_age_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":1109000.0,"estimate":1093247.9535357058,"calibrationEstimate":1168281.94529891},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":584800000.0,"estimate":645921139.0904175,"calibrationEstimate":601213368.3664361},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":107000.0,"estimate":108791.38991189004,"calibrationEstimate":109275.78261888029},{"id":"dwp/jsa_claimants","group":"Jobseeker's Allowance claimants","unit":"count","target":71000.0,"estimate":69247.07556176186,"calibrationEstimate":69555.39922833443},{"id":"dwp/pension_credit","group":"Pension Credit claims and spending","unit":"gbp","target":6144470000.0,"estimate":6602274120.813976,"calibrationEstimate":6377744108.750391},{"id":"dwp/pension_credit_claims","group":"Pension Credit claims and spending","unit":"count","target":1382000.0,"estimate":1451705.6834389567,"calibrationEstimate":1452205.295378387},{"id":"dwp/pip_dl_enhanced_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1608000.0,"estimate":1953368.303418666,"calibrationEstimate":1962065.646411702},{"id":"dwp/pip_dl_standard_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1283000.0,"estimate":1419466.81792067,"calibrationEstimate":1425786.9713478386},{"id":"dwp/scotland_uc_households_child_under_1","group":"Universal Credit households by family type and number of children","unit":"count","target":14000.0,"estimate":14566.249044418337,"calibrationEstimate":14631.105303406715},{"id":"dwp/uc/claimants_couple_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":231368.0,"estimate":250896.79244339463,"calibrationEstimate":251991.6941986084},{"id":"dwp/uc/claimants_couple_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":839379.0,"estimate":913383.3023456336,"calibrationEstimate":920606.89293769},{"id":"dwp/uc/claimants_single_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2868011.0,"estimate":2889435.6531457454,"calibrationEstimate":2918404.0829007328},{"id":"dwp/uc/claimants_single_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2156879.0,"estimate":2380399.2202840894,"calibrationEstimate":2392176.4252111316},{"id":"dwp/uc/claimants_with_1_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1222944.0,"estimate":1295755.060847789,"calibrationEstimate":1302878.9863807857},{"id":"dwp/uc/claimants_with_2_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1058967.0,"estimate":1121193.9276535958,"calibrationEstimate":1125632.9012648463},{"id":"dwp/uc/claimants_with_3_children","group":"Universal Credit households by family type and number of children","unit":"count","target":473500.0,"estimate":502609.9927156568,"calibrationEstimate":507203.147459805},{"id":"dwp/uc/claimants_with_4_children","group":"Universal Credit households by family type and number of children","unit":"count","target":166790.0,"estimate":174326.93197226524,"calibrationEstimate":175103.1191417575},{"id":"dwp/uc/claimants_with_5+_children","group":"Universal Credit households by family type and number of children","unit":"count","target":75910.0,"estimate":79091.86563810706,"calibrationEstimate":79444.01964199543},{"id":"dwp/uc/households","group":"Universal Credit households by family type and number of children","unit":"count","target":6700000.0,"estimate":6348971.35797745,"calibrationEstimate":6395623.053902179},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":7610.0,"estimate":7420.538169384003,"calibrationEstimate":7514.299792408943},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12370.0,"estimate":15733.237529218197,"calibrationEstimate":12799.954794287682},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":15175.0,"estimate":11472.3235373199,"calibrationEstimate":15871.05467006564},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":12297.0,"estimate":12021.353377342224,"calibrationEstimate":12654.892155706882},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17828.0,"estimate":19456.112460017204,"calibrationEstimate":18263.504908561707},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":14427.0,"estimate":15080.27974140644,"calibrationEstimate":15080.074879169464},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":11892.0,"estimate":17644.776905357838,"calibrationEstimate":11945.356312990189},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":9463.0,"estimate":10057.979517936708,"calibrationEstimate":9759.450750350952},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8443.0,"estimate":9638.97747528553,"calibrationEstimate":8904.66766166687},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8906.0,"estimate":8274.131901025772,"calibrationEstimate":9022.64424419403},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5770.0,"estimate":4132.918827056885,"calibrationEstimate":5968.669494628906},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":3485.0,"estimate":5987.513103485107,"calibrationEstimate":3668.190024375915},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":2360.0,"estimate":2347.807508468628,"calibrationEstimate":2415.9390258789062},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":1815.0,"estimate":443.7221064567566,"calibrationEstimate":1831.3727984428408},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":1186.0,"estimate":2170.6248083114624,"calibrationEstimate":1187.413498878479},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":935.0,"estimate":1428.0487060546875,"calibrationEstimate":967.2799072265624},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":632.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":580.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":11750.0,"estimate":13848.374123096466,"calibrationEstimate":11923.90768444538},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":1424.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":10802.0,"estimate":8128.508852601051,"calibrationEstimate":10862.276925444605},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12168.0,"estimate":16164.80532181263,"calibrationEstimate":12346.467386484146},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":12461.0,"estimate":5748.578682214022,"calibrationEstimate":12841.8128490448},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":15787.0,"estimate":17204.907525718212,"calibrationEstimate":16464.121763527393},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":14248.0,"estimate":14648.581487357616,"calibrationEstimate":14936.235798239708},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":17559.0,"estimate":15425.641696095468,"calibrationEstimate":18029.333872824907},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":18714.0,"estimate":17000.313221901655,"calibrationEstimate":18860.421827226877},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":42188.0,"estimate":37726.34860146046,"calibrationEstimate":44076.01454716921},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":41520.0,"estimate":47141.35041385889,"calibrationEstimate":43324.978789806366},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":41159.0,"estimate":41947.755105018616,"calibrationEstimate":43194.09025865793},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":42515.0,"estimate":43577.436663627625,"calibrationEstimate":44944.778411865234},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":38527.0,"estimate":41018.2691783905,"calibrationEstimate":40481.27525937557},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":38894.0,"estimate":38215.3523761034,"calibrationEstimate":40602.91079157591},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":38659.0,"estimate":41123.29328751564,"calibrationEstimate":40460.888354063034},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34318.0,"estimate":48566.454991579056,"calibrationEstimate":35928.6571059227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":22489.0,"estimate":21205.43173134327,"calibrationEstimate":23000.909938097},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":30116.0,"estimate":28863.080528736115,"calibrationEstimate":31526.387284994125},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":28519.0,"estimate":21444.73471069336,"calibrationEstimate":29762.76909518242},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":26014.0,"estimate":23408.44104397297,"calibrationEstimate":26872.75042545795},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":23159.0,"estimate":35138.78228497505,"calibrationEstimate":24115.846549868584},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":20618.0,"estimate":16612.729299545288,"calibrationEstimate":21560.06649184227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17493.0,"estimate":19232.653191685677,"calibrationEstimate":18100.27004623413},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":15437.0,"estimate":20070.599754333496,"calibrationEstimate":15988.015625},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12836.0,"estimate":11836.146595954897,"calibrationEstimate":13421.761481285095},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":26734.0,"estimate":28675.483907222748,"calibrationEstimate":27596.403090000153},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":61727.0,"estimate":65997.26235544682,"calibrationEstimate":64758.198789417744},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":29189.0,"estimate":28463.220873951912,"calibrationEstimate":30442.063633084297},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":33137.0,"estimate":31760.17704331875,"calibrationEstimate":34303.848853588104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":35834.0,"estimate":26437.818723022938,"calibrationEstimate":37270.02708786726},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":38338.0,"estimate":54036.251175284386,"calibrationEstimate":40042.640211343765},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":40685.0,"estimate":44348.22739729285,"calibrationEstimate":42527.98726695776},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":40564.0,"estimate":34501.503211796284,"calibrationEstimate":42208.232148468494},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":24639.0,"estimate":39168.9606487751,"calibrationEstimate":25625.726674437523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":126949.0,"estimate":142487.4302058667,"calibrationEstimate":133277.48989093304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":131129.0,"estimate":95377.8368690312,"calibrationEstimate":137752.16340973973},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":131289.0,"estimate":157107.79431578517,"calibrationEstimate":137750.63612690568},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":119355.0,"estimate":129818.38890782,"calibrationEstimate":124892.34173852204},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":130802.0,"estimate":131328.063896209,"calibrationEstimate":136759.86128601432},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":141848.0,"estimate":150728.17493000627,"calibrationEstimate":148309.65001174808},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":136835.0,"estimate":133713.73497787118,"calibrationEstimate":142901.4171705842},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":107556.0,"estimate":111484.7263495922,"calibrationEstimate":113109.20482206345},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34670.0,"estimate":29272.17201089859,"calibrationEstimate":36466.16493701935},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":86616.0,"estimate":104096.27746334672,"calibrationEstimate":90422.71904051304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":80294.0,"estimate":73354.04017925262,"calibrationEstimate":84354.22553360462},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":70309.0,"estimate":89331.43440103531,"calibrationEstimate":73447.99977698922},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":50510.0,"estimate":72202.29325729609,"calibrationEstimate":53156.73221343756},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":42522.0,"estimate":18497.629060208797,"calibrationEstimate":44506.54565644264},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":33508.0,"estimate":49045.771344304085,"calibrationEstimate":35145.99563121796},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":27063.0,"estimate":30266.55286216736,"calibrationEstimate":28766.448501110077},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":21663.0,"estimate":26942.793876886368,"calibrationEstimate":22648.643339395523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":43623.0,"estimate":37809.548577189445,"calibrationEstimate":45833.974639594555},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":82905.0,"estimate":97151.36844921112,"calibrationEstimate":87104.91118597984},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":55622.0,"estimate":60510.223631858826,"calibrationEstimate":58795.10524368286},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":67901.0,"estimate":71725.4553387165,"calibrationEstimate":70821.50663983822},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":89314.0,"estimate":86143.68657708168,"calibrationEstimate":93578.26927548648},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":118641.0,"estimate":119403.35334032774,"calibrationEstimate":124258.13893908262},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":99069.0,"estimate":97294.37053111196,"calibrationEstimate":103667.6788329184},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":102251.0,"estimate":96173.39577645063,"calibrationEstimate":107101.9515336156},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":102312.0,"estimate":87279.16967123747,"calibrationEstimate":107319.9899930358},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":95698.0,"estimate":135695.77643716335,"calibrationEstimate":100056.6025826335},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":106663.0,"estimate":124074.26766955853,"calibrationEstimate":111498.78546503186},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":181180.0,"estimate":188187.3756595254,"calibrationEstimate":191690.2932780385},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":189861.0,"estimate":186351.02785767615,"calibrationEstimate":199963.96529877183},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":129174.0,"estimate":185164.77054291964,"calibrationEstimate":136010.89976614714},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":84690.0,"estimate":54264.40361404419,"calibrationEstimate":88587.68869447708},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":46244.0,"estimate":71491.7329352498,"calibrationEstimate":47919.61390686035},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":26481.0,"estimate":35623.84896039963,"calibrationEstimate":27905.27891921997},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":120819.0,"estimate":128539.76422923803,"calibrationEstimate":126547.3099425435},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":18143.0,"estimate":31588.639366149902,"calibrationEstimate":18797.771575927734},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":12325.0,"estimate":4426.75733757019,"calibrationEstimate":12941.009860992432},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":9555.0,"estimate":10281.057233810425,"calibrationEstimate":9941.590031147003},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":6230.0,"estimate":8126.360444545746,"calibrationEstimate":6391.2335205078125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":5884.0,"estimate":6362.902786254883,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5362.0,"estimate":1998.391206741333,"calibrationEstimate":5583.823296546936},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":1786.0,"estimate":2339.0858516693115,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":1491.0,"estimate":1221.5946044921875,"calibrationEstimate":1580.0684814453125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":173925.0,"estimate":173553.54143616557,"calibrationEstimate":180896.03793656823},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":3518.0,"estimate":5268.748246669769,"calibrationEstimate":3712.138840675354},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":375706.0,"estimate":405618.4962475896,"calibrationEstimate":399359.66108581424},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":200713.0,"estimate":186214.24044963715,"calibrationEstimate":212072.70295926929},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":107860.0,"estimate":76928.3390161097,"calibrationEstimate":113803.28732386231},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":144036.0,"estimate":167346.22477129102,"calibrationEstimate":151404.9450480342},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":377221.0,"estimate":349366.41928082705,"calibrationEstimate":405079.322792083},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":341138.0,"estimate":368394.08331155777,"calibrationEstimate":365472.416688472},{"id":"hmrc/capital_gains_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5805652941.176472,"estimate":2178688648.0482244,"calibrationEstimate":2141544289.3825493},{"id":"hmrc/capital_gains_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":6567201680.67227,"estimate":7324580857.580844,"calibrationEstimate":5995201312.511488},{"id":"hmrc/capital_gains_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":1457322689.0756304,"estimate":876994527.1745476,"calibrationEstimate":832080688.7293456},{"id":"hmrc/capital_gains_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":9443821008.403362,"estimate":8915647072.518879,"calibrationEstimate":8817479175.49674},{"id":"hmrc/capital_gains_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":2718348739.4957986,"estimate":1471546074.3489742,"calibrationEstimate":1444078653.7115064},{"id":"hmrc/capital_gains_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":4898166386.554623,"estimate":3799760749.882065,"calibrationEstimate":3788282184.501421},{"id":"hmrc/capital_gains_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":3834464705.882354,"estimate":1744185904.570274,"calibrationEstimate":1735553375.6752963},{"id":"hmrc/capital_gains_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5863205882.3529415,"estimate":4403841031.357599,"calibrationEstimate":5555259154.762842},{"id":"hmrc/capital_gains_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":23343884033.61345,"estimate":21727639789.17903,"calibrationEstimate":21488402885.15877},{"id":"hmrc/capital_gains_total","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":67727478991.59665,"estimate":55861737820.9182,"calibrationEstimate":55238457530.72525},{"id":"hmrc/cgt_taxpayers","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":378000.0,"estimate":594003.8427731246,"calibrationEstimate":593891.4494462013},{"id":"hmrc/cgt_taxpayers_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":37000.0,"estimate":13544.740693077443,"calibrationEstimate":13360.691625073552},{"id":"hmrc/cgt_taxpayers_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":5000.0,"estimate":5812.870928764343,"calibrationEstimate":4586.156556129456},{"id":"hmrc/cgt_taxpayers_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":79000.0,"estimate":50256.21771013737,"calibrationEstimate":46247.366893053055},{"id":"hmrc/cgt_taxpayers_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":3000.0,"estimate":2788.615041732788,"calibrationEstimate":2801.031301498413},{"id":"hmrc/cgt_taxpayers_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":74000.0,"estimate":43994.12303459644,"calibrationEstimate":43312.22687217593},{"id":"hmrc/cgt_taxpayers_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":14000.0,"estimate":10944.578097075224,"calibrationEstimate":11016.595499932766},{"id":"hmrc/cgt_taxpayers_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":53000.0,"estimate":24514.88641294837,"calibrationEstimate":24518.887231260534},{"id":"hmrc/cgt_taxpayers_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":8000.0,"estimate":6178.642288446426,"calibrationEstimate":7360.933691740036},{"id":"hmrc/cgt_taxpayers_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":2000.0,"estimate":1832.8698182106016,"calibrationEstimate":1841.0306429862976},{"id":"hmrc/dividend_income_count_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":222000.0,"estimate":229554.611115098,"calibrationEstimate":229451.83542212844},{"id":"hmrc/dividend_income_count_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":115000.0,"estimate":122498.21870449184,"calibrationEstimate":116450.05363586544},{"id":"hmrc/dividend_income_count_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":92000.0,"estimate":95837.3041176498,"calibrationEstimate":94981.9433400631},{"id":"hmrc/dividend_income_count_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":372000.0,"estimate":347627.6361439526,"calibrationEstimate":382888.00691989064},{"id":"hmrc/dividend_income_count_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":19000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_count_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":75000.0,"estimate":76900.66770100594,"calibrationEstimate":77183.34881728888},{"id":"hmrc/dividend_income_count_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":843000.0,"estimate":867481.3310358822,"calibrationEstimate":871528.9038848877},{"id":"hmrc/dividend_income_count_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":49000.0,"estimate":45323.63685941696,"calibrationEstimate":50523.88130879402},{"id":"hmrc/dividend_income_count_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":667000.0,"estimate":703025.5269361734,"calibrationEstimate":686016.7727653384},{"id":"hmrc/dividend_income_count_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":627000.0,"estimate":650857.9845430255,"calibrationEstimate":655597.3248263001},{"id":"hmrc/dividend_income_count_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":32000.0,"estimate":18903.09976196289,"calibrationEstimate":13924.291625976562},{"id":"hmrc/dividend_income_count_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":673194.9035950899,"calibrationEstimate":665673.386961177},{"id":"hmrc/dividend_income_count_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":336000.0,"estimate":343528.61046367884,"calibrationEstimate":346362.1282174885},{"id":"hmrc/dividend_income_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":6870000000.0,"estimate":7095222924.861016,"calibrationEstimate":7114063772.399986},{"id":"hmrc/dividend_income_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":175000000.0,"estimate":192951222.35627183,"calibrationEstimate":173661019.52219003},{"id":"hmrc/dividend_income_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3450000000.0,"estimate":3692746817.185143,"calibrationEstimate":3550464125.442072},{"id":"hmrc/dividend_income_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":855000000.0,"estimate":845993440.2610878,"calibrationEstimate":880729109.8346382},{"id":"hmrc/dividend_income_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":11100000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3700000000.0,"estimate":3828837168.167787,"calibrationEstimate":3797956584.5345135},{"id":"hmrc/dividend_income_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3330000000.0,"estimate":3395614770.515832,"calibrationEstimate":3442786712.469958},{"id":"hmrc/dividend_income_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3430000000.0,"estimate":3496980217.987605,"calibrationEstimate":3447032285.480977},{"id":"hmrc/dividend_income_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":4700000000.0,"estimate":4851171796.430717,"calibrationEstimate":4835994933.974208},{"id":"hmrc/dividend_income_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":8400000000.0,"estimate":8938303214.071344,"calibrationEstimate":8791437358.27874},{"id":"hmrc/dividend_income_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3820000000.0,"estimate":156339333.4031915,"calibrationEstimate":154123616.4699381},{"id":"hmrc/dividend_income_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":12500000000.0,"estimate":13160523430.36148,"calibrationEstimate":12946721023.778358},{"id":"hmrc/dividend_income_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":9440000000.0,"estimate":10052671812.436289,"calibrationEstimate":9911749501.39766},{"id":"hmrc/employment_income_count_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":791000.0,"estimate":843150.2165419757,"calibrationEstimate":826560.6833594143},{"id":"hmrc/employment_income_count_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1360000.0,"estimate":1381056.812882781,"calibrationEstimate":1389994.5120541155},{"id":"hmrc/employment_income_count_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":264000.0,"estimate":283089.4560998976,"calibrationEstimate":272207.9791575968},{"id":"hmrc/employment_income_count_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3100000.0,"estimate":2941183.2826600075,"calibrationEstimate":3131268.366346717},{"id":"hmrc/employment_income_count_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_count_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":180000.0,"estimate":183886.50804448128,"calibrationEstimate":191119.33520907164},{"id":"hmrc/employment_income_count_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":7470000.0,"estimate":7394907.693445265,"calibrationEstimate":7696814.897311896},{"id":"hmrc/employment_income_count_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":93000.0,"estimate":107923.93404233456,"calibrationEstimate":100106.93683218956},{"id":"hmrc/employment_income_count_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":5370000.0,"estimate":5930080.231027737,"calibrationEstimate":5646706.61297296},{"id":"hmrc/employment_income_count_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3500000.0,"estimate":3692167.4615677,"calibrationEstimate":3691681.077874422},{"id":"hmrc/employment_income_count_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":44000.0,"estimate":51452.47190284729,"calibrationEstimate":46618.58825778961},{"id":"hmrc/employment_income_count_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3430000.0,"estimate":3712399.601767317,"calibrationEstimate":3598074.21717},{"id":"hmrc/employment_income_count_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1640000.0,"estimate":1755926.1428863704,"calibrationEstimate":1737828.3395847082},{"id":"hmrc/employment_income_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":82300000000.0,"estimate":91413568331.97716,"calibrationEstimate":89270291253.19441},{"id":"hmrc/employment_income_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17625951516.993526,"calibrationEstimate":17707792264.599216},{"id":"hmrc/employment_income_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":39200000000.0,"estimate":43121325615.01092,"calibrationEstimate":41343663545.83801},{"id":"hmrc/employment_income_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":48600000000.0,"estimate":48521133900.22364,"calibrationEstimate":51842432145.73113},{"id":"hmrc/employment_income_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":35500000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":36600000000.0,"estimate":36151749235.49467,"calibrationEstimate":38383016939.89171},{"id":"hmrc/employment_income_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":172000000000.0,"estimate":177253034078.8408,"calibrationEstimate":185685923740.2714},{"id":"hmrc/employment_income_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":29000000000.0,"estimate":32519523768.135063,"calibrationEstimate":30656152523.340366},{"id":"hmrc/employment_income_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":170000000000.0,"estimate":195144568163.3972,"calibrationEstimate":186138215953.9731},{"id":"hmrc/employment_income_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":139000000000.0,"estimate":152968049441.96802,"calibrationEstimate":152580231489.52524},{"id":"hmrc/employment_income_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":23100000000.0,"estimate":27980302639.935696,"calibrationEstimate":25227641740.95949},{"id":"hmrc/employment_income_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":174000000000.0,"estimate":205992790440.03635,"calibrationEstimate":198611833647.03937},{"id":"hmrc/employment_income_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":118000000000.0,"estimate":132579308720.52338,"calibrationEstimate":130650324064.52023},{"id":"hmrc/private_pension_income_count_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":109000.0,"estimate":111826.396561265,"calibrationEstimate":111957.39517956972},{"id":"hmrc/private_pension_income_count_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1070000.0,"estimate":1108551.329273358,"calibrationEstimate":1078785.8509754688},{"id":"hmrc/private_pension_income_count_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":29000.0,"estimate":32248.34685358405,"calibrationEstimate":31194.256974309683},{"id":"hmrc/private_pension_income_count_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2140000.0,"estimate":2185144.9934265465,"calibrationEstimate":2193027.785250634},{"id":"hmrc/private_pension_income_count_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_count_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":20000.0,"estimate":19481.926417827606,"calibrationEstimate":20442.59133195877},{"id":"hmrc/private_pension_income_count_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2660000.0,"estimate":2728957.4601238817,"calibrationEstimate":2748158.453831658},{"id":"hmrc/private_pension_income_count_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":10000.0,"estimate":10305.892645597458,"calibrationEstimate":10287.247063875198},{"id":"hmrc/private_pension_income_count_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1450000.0,"estimate":1495237.3086971492,"calibrationEstimate":1487679.527325362},{"id":"hmrc/private_pension_income_count_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":779000.0,"estimate":789672.3607301563,"calibrationEstimate":800476.0575524122},{"id":"hmrc/private_pension_income_count_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":4000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/private_pension_income_count_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":652041.4562733769,"calibrationEstimate":663726.9767524898},{"id":"hmrc/private_pension_income_count_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":259000.0,"estimate":272814.0429994464,"calibrationEstimate":263811.19149279594},{"id":"hmrc/private_pension_income_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":5430000000.0,"estimate":5345797328.280829,"calibrationEstimate":5427845559.415028},{"id":"hmrc/private_pension_income_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":4350000000.0,"estimate":4392698634.534128,"calibrationEstimate":4454604694.336378},{"id":"hmrc/private_pension_income_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1810000000.0,"estimate":2014665212.2989984,"calibrationEstimate":1885743095.2678227},{"id":"hmrc/private_pension_income_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":13600000000.0,"estimate":13722906422.39004,"calibrationEstimate":13929122214.140656},{"id":"hmrc/private_pension_income_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":370000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1570000000.0,"estimate":1432815920.066187,"calibrationEstimate":1611508589.181299},{"id":"hmrc/private_pension_income_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":30200000000.0,"estimate":30088725766.291286,"calibrationEstimate":30519628145.421444},{"id":"hmrc/private_pension_income_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1120000000.0,"estimate":1123939358.7086189,"calibrationEstimate":1138804412.324136},{"id":"hmrc/private_pension_income_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":24804135722.331135,"calibrationEstimate":25052549773.94475},{"id":"hmrc/private_pension_income_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":16767697312.554628,"calibrationEstimate":17124010213.256632},{"id":"hmrc/private_pension_income_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":640000000.0,"estimate":212929517.2376833,"calibrationEstimate":216246361.45302057},{"id":"hmrc/private_pension_income_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":17400000000.0,"estimate":17412935832.904785,"calibrationEstimate":17785168436.302177},{"id":"hmrc/private_pension_income_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":9470000000.0,"estimate":9381575140.683311,"calibrationEstimate":9543800186.733513},{"id":"hmrc/property_income_count_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":137000.0,"estimate":148813.48041003942,"calibrationEstimate":142931.6233434677},{"id":"hmrc/property_income_count_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":101000.0,"estimate":105099.43739584088,"calibrationEstimate":105464.95491817594},{"id":"hmrc/property_income_count_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":54000.0,"estimate":50794.22146773338,"calibrationEstimate":56650.596049278975},{"id":"hmrc/property_income_count_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":232000.0,"estimate":209372.79957795143,"calibrationEstimate":241816.69853043556},{"id":"hmrc/property_income_count_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":7000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_count_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":41000.0,"estimate":54315.05261707306,"calibrationEstimate":53937.36399555206},{"id":"hmrc/property_income_count_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":431000.0,"estimate":467851.6959067285,"calibrationEstimate":449476.7096900046},{"id":"hmrc/property_income_count_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":23000.0,"estimate":23663.82657933235,"calibrationEstimate":23704.657059669495},{"id":"hmrc/property_income_count_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":364000.0,"estimate":382716.5398760289,"calibrationEstimate":374246.09900937974},{"id":"hmrc/property_income_count_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":325000.0,"estimate":325976.1076962948,"calibrationEstimate":335583.4356379807},{"id":"hmrc/property_income_count_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":13000.0,"estimate":17876.553053617477,"calibrationEstimate":17956.148045539856},{"id":"hmrc/property_income_count_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":397000.0,"estimate":430521.93068769574,"calibrationEstimate":424372.62478613853},{"id":"hmrc/property_income_count_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":226000.0,"estimate":232345.40000730753,"calibrationEstimate":233399.38142344356},{"id":"hmrc/property_income_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":4845000000.0,"estimate":5066855184.377646,"calibrationEstimate":4887522606.587887},{"id":"hmrc/property_income_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1273000000.0,"estimate":1339419048.615897,"calibrationEstimate":1325054081.26916},{"id":"hmrc/property_income_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":2185000000.0,"estimate":2065674668.677865,"calibrationEstimate":2156647507.286356},{"id":"hmrc/property_income_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":3211000000.0,"estimate":2853691727.4237776,"calibrationEstimate":3390429218.5297017},{"id":"hmrc/property_income_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":834100000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1995000000.0,"estimate":1671991571.1694071,"calibrationEstimate":1648499114.259529},{"id":"hmrc/property_income_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7258000000.0,"estimate":7985707953.629425,"calibrationEstimate":7489906615.405917},{"id":"hmrc/property_income_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1453500000.0,"estimate":1492957063.3158894,"calibrationEstimate":1475921673.247523},{"id":"hmrc/property_income_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7220000000.0,"estimate":7746035188.249613,"calibrationEstimate":7542554031.193575},{"id":"hmrc/property_income_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7182000000.0,"estimate":7333197347.813547,"calibrationEstimate":7434714030.345675},{"id":"hmrc/property_income_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":900600000.0,"estimate":867971878.096458,"calibrationEstimate":858414921.8552154},{"id":"hmrc/property_income_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":10260000000.0,"estimate":10953681291.205402,"calibrationEstimate":10644669240.112694},{"id":"hmrc/property_income_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7163000000.0,"estimate":7576565136.2291155,"calibrationEstimate":7469779867.330262},{"id":"hmrc/salary_sacrifice_contributions","group":"Pension contributions made through salary sacrifice","unit":"gbp","target":24720000000.0,"estimate":28216254605.196114,"calibrationEstimate":29398246248.53289},{"id":"hmrc/salary_sacrifice_employee_nics_relief","group":"Salary sacrifice: employee National Insurance relief","unit":"gbp","target":1030000000.0,"estimate":944128480.1682006,"calibrationEstimate":999028962.9642977},{"id":"hmrc/salary_sacrifice_employer_nics_relief","group":"Salary sacrifice: employer National Insurance relief","unit":"gbp","target":3806521739.1304345,"estimate":3734371027.861629,"calibrationEstimate":3910216698.4462447},{"id":"hmrc/salary_sacrifice_it_relief_additional_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1854000000.0,"estimate":1898508492.1189609,"calibrationEstimate":1916649378.3206043},{"id":"hmrc/salary_sacrifice_it_relief_basic_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1648000000.0,"estimate":1599588723.537782,"calibrationEstimate":1694024183.192099},{"id":"hmrc/salary_sacrifice_it_relief_higher_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":5665000000.0,"estimate":5447769552.639022,"calibrationEstimate":5730857548.478475},{"id":"hmrc/self_employment_income_count_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":85000.0,"estimate":91807.65111103654,"calibrationEstimate":86962.28155221045},{"id":"hmrc/self_employment_income_count_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":444000.0,"estimate":495899.16801068187,"calibrationEstimate":474827.5627250821},{"id":"hmrc/self_employment_income_count_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":40000.0,"estimate":34321.580459713936,"calibrationEstimate":40915.38135620952},{"id":"hmrc/self_employment_income_count_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":651000.0,"estimate":595662.3852557838,"calibrationEstimate":689170.4667981565},{"id":"hmrc/self_employment_income_count_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":11000.0,"estimate":12097.602172851562,"calibrationEstimate":12151.466918945312},{"id":"hmrc/self_employment_income_count_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":34000.0,"estimate":35412.47289919853,"calibrationEstimate":36050.296272322536},{"id":"hmrc/self_employment_income_count_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":961000.0,"estimate":983380.3177103548,"calibrationEstimate":1018702.9982424974},{"id":"hmrc/self_employment_income_count_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21693.4504237175,"calibrationEstimate":21790.04023075104},{"id":"hmrc/self_employment_income_count_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":595000.0,"estimate":660941.2836752534,"calibrationEstimate":627534.0292263627},{"id":"hmrc/self_employment_income_count_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":359000.0,"estimate":380762.3792635501,"calibrationEstimate":372850.943356663},{"id":"hmrc/self_employment_income_count_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":15000.0,"estimate":14243.284211874008,"calibrationEstimate":14306.702473640442},{"id":"hmrc/self_employment_income_count_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":311000.0,"estimate":306679.82031068206,"calibrationEstimate":320621.6229124218},{"id":"hmrc/self_employment_income_count_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":143000.0,"estimate":124774.42495456338,"calibrationEstimate":149187.17315804958},{"id":"hmrc/self_employment_income_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4980000000.0,"estimate":5636157348.958165,"calibrationEstimate":5105386257.929018},{"id":"hmrc/self_employment_income_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4810000000.0,"estimate":5335150863.284746,"calibrationEstimate":5017249946.560387},{"id":"hmrc/self_employment_income_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":3650000000.0,"estimate":2822716021.3632445,"calibrationEstimate":3787992559.540904},{"id":"hmrc/self_employment_income_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8030000000.0,"estimate":6887636692.712797,"calibrationEstimate":8444995513.4183855},{"id":"hmrc/self_employment_income_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":19500000000.0,"estimate":18284049776.80005,"calibrationEstimate":19086845273.0652},{"id":"hmrc/self_employment_income_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4390000000.0,"estimate":4193355831.884856,"calibrationEstimate":4476251711.722663},{"id":"hmrc/self_employment_income_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":15700000000.0,"estimate":17136849507.671976,"calibrationEstimate":16997008937.802246},{"id":"hmrc/self_employment_income_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4840000000.0,"estimate":4906102850.49662,"calibrationEstimate":5121514459.116575},{"id":"hmrc/self_employment_income_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":12600000000.0,"estimate":12605641784.231354,"calibrationEstimate":13432114897.320862},{"id":"hmrc/self_employment_income_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8730000000.0,"estimate":9895760941.4199,"calibrationEstimate":9284919847.082878},{"id":"hmrc/self_employment_income_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":6670000000.0,"estimate":9660794971.01818,"calibrationEstimate":10084969640.620115},{"id":"hmrc/self_employment_income_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8220000000.0,"estimate":7173913950.503402,"calibrationEstimate":8589968865.463936},{"id":"hmrc/self_employment_income_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":5360000000.0,"estimate":4555003804.413581,"calibrationEstimate":5622179443.45382},{"id":"hmrc/state_pension_count_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":74000.0,"estimate":76148.16276955605,"calibrationEstimate":75922.86912208796},{"id":"hmrc/state_pension_count_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1140000.0,"estimate":1244077.6809774786,"calibrationEstimate":1133583.8249693066},{"id":"hmrc/state_pension_count_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":22832.874069213867,"calibrationEstimate":22125.147695302963},{"id":"hmrc/state_pension_count_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2050000.0,"estimate":2048411.1118015796,"calibrationEstimate":2048046.7279076576},{"id":"hmrc/state_pension_count_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_count_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":14000.0,"estimate":13532.682774543762,"calibrationEstimate":14466.858582496645},{"id":"hmrc/state_pension_count_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2320000.0,"estimate":2286300.7773593217,"calibrationEstimate":2301933.0940366536},{"id":"hmrc/state_pension_count_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":8000.0,"estimate":8824.107450008392,"calibrationEstimate":8798.864166736603},{"id":"hmrc/state_pension_count_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1160000.0,"estimate":1172676.499942258,"calibrationEstimate":1168167.4859495014},{"id":"hmrc/state_pension_count_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":568000.0,"estimate":575256.3978573233,"calibrationEstimate":577815.7180559486},{"id":"hmrc/state_pension_count_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":3000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/state_pension_count_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":441000.0,"estimate":438393.6089271605,"calibrationEstimate":441668.3965354562},{"id":"hmrc/state_pension_count_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":176000.0,"estimate":175826.47564059496,"calibrationEstimate":177026.6087565422},{"id":"hmrc/state_pension_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":847000000.0,"estimate":854450089.7419467,"calibrationEstimate":844536099.8908701},{"id":"hmrc/state_pension_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":11800000000.0,"estimate":13670650067.511356,"calibrationEstimate":12372946997.791916},{"id":"hmrc/state_pension_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":265000000.0,"estimate":282114083.0780946,"calibrationEstimate":271975929.42016745},{"id":"hmrc/state_pension_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":22200000000.0,"estimate":23998719050.76559,"calibrationEstimate":23797516261.50798},{"id":"hmrc/state_pension_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":20000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":179000000.0,"estimate":172983951.4445731,"calibrationEstimate":182038746.25456983},{"id":"hmrc/state_pension_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":26825875119.04113,"calibrationEstimate":26781706814.29911},{"id":"hmrc/state_pension_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":96000000.0,"estimate":91457269.84436607,"calibrationEstimate":90425861.10211164},{"id":"hmrc/state_pension_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":12300000000.0,"estimate":13220363004.652786,"calibrationEstimate":13047202267.625652},{"id":"hmrc/state_pension_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":6020000000.0,"estimate":6333296578.738886,"calibrationEstimate":6303111646.291419},{"id":"hmrc/state_pension_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":43000000.0,"estimate":56836446.07211137,"calibrationEstimate":56614218.6125021},{"id":"hmrc/state_pension_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":4660000000.0,"estimate":4958283295.041033,"calibrationEstimate":4957592229.717251},{"id":"hmrc/state_pension_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":1890000000.0,"estimate":1925819081.9875,"calibrationEstimate":1921803586.7496536},{"id":"housing/rent_private","group":"Private and social rent paid","unit":"gbp","target":89035200000.0,"estimate":94232257148.01346,"calibrationEstimate":89015844391.93204},{"id":"housing/rent_social","group":"Private and social rent paid","unit":"gbp","target":30680000000.0,"estimate":36221593791.554085,"calibrationEstimate":33687842434.35097},{"id":"housing/total_mortgage","group":"Mortgage payments","unit":"gbp","target":99000000000.0,"estimate":112166702689.27348,"calibrationEstimate":113284488090.43108},{"id":"nts/households_no_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":6512000.0,"estimate":6886208.031410232,"calibrationEstimate":6916868.755762011},{"id":"nts/households_one_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":13024000.0,"estimate":15020756.833521975,"calibrationEstimate":15087636.514661329},{"id":"nts/households_two_plus_vehicles","group":"Households with no, one, and two or more vehicles","unit":"count","target":10064000.0,"estimate":9336322.44734241,"calibrationEstimate":9377892.274253026},{"id":"obr/attendance_allowance","group":"Attendance Allowance spending","unit":"gbp","target":8492497075.074617,"estimate":8738849002.944973,"calibrationEstimate":8777451467.048658},{"id":"obr/capital_gains_tax","group":"Capital gains tax receipts","unit":"gbp","target":21801546197.09165,"estimate":12717204530.457554,"calibrationEstimate":12569294855.576912},{"id":"obr/carers_allowance","group":"Carer's Allowance spending","unit":"gbp","target":4569403813.760573,"estimate":4546109316.312273,"calibrationEstimate":4668875054.2856655},{"id":"obr/child_benefit","group":"Child Benefit spending","unit":"gbp","target":13389272724.45089,"estimate":16225320972.639776,"calibrationEstimate":16338080740.281445},{"id":"obr/council_tax","group":"Council tax receipts, UK and by nation","unit":"gbp","target":50925163826.30539,"estimate":48221464271.11403,"calibrationEstimate":45300509759.81859},{"id":"obr/council_tax_england","group":"Council tax receipts, UK and by nation","unit":"gbp","target":44117237614.71528,"estimate":41824069103.301254,"calibrationEstimate":39205804365.029305},{"id":"obr/council_tax_scotland","group":"Council tax receipts, UK and by nation","unit":"gbp","target":3051227494.93594,"estimate":3763028655.037571,"calibrationEstimate":3638929999.068658},{"id":"obr/council_tax_wales","group":"Council tax receipts, UK and by nation","unit":"gbp","target":2400769752.36827,"estimate":2634366512.7752094,"calibrationEstimate":2455775395.7206206},{"id":"obr/domestic_rates","group":"Northern Ireland domestic rates receipts","unit":"gbp","target":494000000.0,"estimate":584068659.0970445,"calibrationEstimate":560119544.8439525},{"id":"obr/esa","group":"Employment and Support Allowance spending","unit":"gbp","target":7206287181.538654,"estimate":7343384263.9225025,"calibrationEstimate":7378653735.424012},{"id":"obr/fuel_duties","group":"Fuel duty receipts","unit":"gbp","target":24241874775.213375,"estimate":24533360153.833393,"calibrationEstimate":22246272742.96544},{"id":"obr/income_tax","group":"Income tax receipts","unit":"gbp","target":331437583074.4429,"estimate":301478832377.7914,"calibrationEstimate":296476469549.9654},{"id":"obr/jobseekers_allowance","group":"Jobseeker's Allowance spending","unit":"gbp","target":280558748.04472804,"estimate":299505958.51263523,"calibrationEstimate":300361802.45431787},{"id":"obr/ni","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":200081395082.7125,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employee","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":49544363784.26465,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employer","group":"Employer National Insurance receipts","unit":"gbp","target":145324007512.71753,"estimate":154541037552.12073,"calibrationEstimate":152621840639.53052},{"id":"obr/ni_self_employed","group":"Self-employed National Insurance receipts","unit":"gbp","target":2902816090.4147716,"estimate":2609995976.5472517,"calibrationEstimate":2776828111.0540338},{"id":"obr/pip","group":"Personal Independence Payment spending","unit":"gbp","target":36910059270.5278,"estimate":26930742886.35225,"calibrationEstimate":27048283769.854137},{"id":"obr/private_school_students","group":"Pupils at independent schools","unit":"count","target":557000.0,"estimate":761425.2593497187,"calibrationEstimate":577547.7305030972},{"id":"obr/salary_sacrifice_users_above_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":3379200.0,"estimate":3416752.2773837894,"calibrationEstimate":3473463.5649632365},{"id":"obr/salary_sacrifice_users_below_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":4403200.0,"estimate":4567515.046537325,"calibrationEstimate":4546353.57234703},{"id":"obr/salary_sacrifice_users_total","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":7884800.0,"estimate":7984267.323921114,"calibrationEstimate":8019817.137310267},{"id":"obr/sdlt","group":"Stamp Duty Land Tax receipts","unit":"gbp","target":15406516698.785578,"estimate":16316115361.020012,"calibrationEstimate":15970017665.29672},{"id":"obr/state_pension","group":"State Pension spending","unit":"gbp","target":146185954351.57382,"estimate":123608848585.71336,"calibrationEstimate":123129508170.07487},{"id":"obr/statutory_maternity_pay","group":"Statutory Maternity Pay spending","unit":"gbp","target":3194800881.520547,"estimate":3337974284.302048,"calibrationEstimate":3347441886.5270486},{"id":"obr/tv_licence_fee","group":"TV licence fee receipts","unit":"gbp","target":3872000000.0,"estimate":4306586174.401851,"calibrationEstimate":4326303524.671558},{"id":"obr/universal_credit","group":"Universal Credit spending","unit":"gbp","target":79286349139.54411,"estimate":77648740273.65004,"calibrationEstimate":76378495756.28294},{"id":"obr/vat","group":"VAT receipts","unit":"gbp","target":180168938685.4179,"estimate":317136171663.4592,"calibrationEstimate":318035670462.85565},{"id":"obr/winter_fuel_allowance","group":"Winter Fuel Payment spending","unit":"gbp","target":1911040880.4619167,"estimate":1703858030.6710331,"calibrationEstimate":1712963122.996131},{"id":"ons/corporate_land_value","group":"Corporate land value","unit":"gbp","target":2057128451236.5017,"estimate":2058648990687.032,"calibrationEstimate":2509581347940.138},{"id":"ons/couple_3_plus_children_households","group":"Households by family type","unit":"count","target":931000.0,"estimate":939145.8302041292,"calibrationEstimate":943327.3600209357},{"id":"ons/couple_no_children_households","group":"Households by family type","unit":"count","target":8119000.0,"estimate":12928875.782972127,"calibrationEstimate":12986441.399504378},{"id":"ons/couple_non_dependent_children_only_households","group":"Households by family type","unit":"count","target":1848000.0,"estimate":1526672.7015325427,"calibrationEstimate":1533470.184832275},{"id":"ons/couple_under_3_children_households","group":"Households by family type","unit":"count","target":5439000.0,"estimate":5319173.021537095,"calibrationEstimate":5342856.555537075},{"id":"ons/east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":726000.0,"estimate":770230.939494133,"calibrationEstimate":773660.3856868744},{"id":"ons/east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":740606.7134604454,"calibrationEstimate":743904.2511110306},{"id":"ons/east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":749000.0,"estimate":756168.8946352005,"calibrationEstimate":759535.7300329208},{"id":"ons/east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":890000.0,"estimate":868918.0768876076,"calibrationEstimate":872786.9326715469},{"id":"ons/east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":851000.0,"estimate":843856.841021061,"calibrationEstimate":847614.101943016},{"id":"ons/east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":867000.0,"estimate":885889.451540947,"calibrationEstimate":889833.8577439785},{"id":"ons/east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":746000.0,"estimate":717175.1693952084,"calibrationEstimate":720368.3822858334},{"id":"ons/east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":643000.0,"estimate":602970.5396468639,"calibrationEstimate":605655.2605879307},{"id":"ons/east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":379000.0,"estimate":380440.2481365204,"calibrationEstimate":382134.1495399475},{"id":"ons/east_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":532000.0,"estimate":560764.1695084572,"calibrationEstimate":563260.9665122032},{"id":"ons/east_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":585000.0,"estimate":591315.0727558136,"calibrationEstimate":593947.8992090225},{"id":"ons/east_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":632000.0,"estimate":646598.6443405151,"calibrationEstimate":649477.6217494011},{"id":"ons/east_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":669000.0,"estimate":666351.030916214,"calibrationEstimate":669317.9424901009},{"id":"ons/east_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":621000.0,"estimate":627317.6343212128,"calibrationEstimate":630110.758951664},{"id":"ons/east_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":681000.0,"estimate":705804.5902404785,"calibrationEstimate":708947.1764411926},{"id":"ons/east_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":592000.0,"estimate":583389.1525392532,"calibrationEstimate":585986.6843750477},{"id":"ons/east_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":500000.0,"estimate":480258.3571476936,"calibrationEstimate":482396.70089006424},{"id":"ons/east_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":273000.0,"estimate":274763.10668992996,"calibrationEstimate":275986.48183584213},{"id":"ons/female_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1698816.0,"estimate":1839466.5737319589,"calibrationEstimate":1847656.770164296},{"id":"ons/female_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2041879.0,"estimate":1973291.4082101283,"calibrationEstimate":1982077.4540842024},{"id":"ons/female_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2036402.0,"estimate":1976182.4684885591,"calibrationEstimate":1984981.3977429569},{"id":"ons/female_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2033478.0,"estimate":2091247.116039395,"calibrationEstimate":2100558.3663989007},{"id":"ons/female_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2258028.0,"estimate":2327819.72517778,"calibrationEstimate":2338184.332134992},{"id":"ons/female_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2443559.0,"estimate":2426926.0614604205,"calibrationEstimate":2437731.887076691},{"id":"ons/female_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2497122.0,"estimate":2407409.1889739037,"calibrationEstimate":2418128.139254883},{"id":"ons/female_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2356214.0,"estimate":2354626.8180732727,"calibrationEstimate":2365110.7586767823},{"id":"ons/female_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2135556.0,"estimate":2146838.039360285,"calibrationEstimate":2156396.7979279608},{"id":"ons/female_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2206473.0,"estimate":2297529.9983963966,"calibrationEstimate":2307759.7106489986},{"id":"ons/female_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2340737.0,"estimate":2437237.7694670856,"calibrationEstimate":2448089.5275103897},{"id":"ons/female_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1918180.0,"estimate":2070228.5422207713,"calibrationEstimate":2079446.1990244535},{"id":"ons/female_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2248908.0,"estimate":2073595.834327519,"calibrationEstimate":2082828.495167717},{"id":"ons/female_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1890892.0,"estimate":1781039.4390323013,"calibrationEstimate":1788969.4821397066},{"id":"ons/female_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1619328.0,"estimate":1592091.0710516274,"calibrationEstimate":1599179.8343619704},{"id":"ons/female_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1575830.0,"estimate":1541204.8275257498,"calibrationEstimate":1548067.0152519343},{"id":"ons/female_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1064043.0,"estimate":2664726.503213957,"calibrationEstimate":2676591.14880161},{"id":"ons/female_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":766765.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/household_land_value","group":"Household land value","unit":"gbp","target":5042871548763.499,"estimate":5198482896887.592,"calibrationEstimate":5215371409340.588},{"id":"ons/household_land_value/EAST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":304799621177.5439,"estimate":311792425913.57996,"calibrationEstimate":312988388945.29297},{"id":"ons/household_land_value/EAST_OF_ENGLAND","group":"Household land value by region","unit":"gbp","target":542672059385.554,"estimate":546010650314.9476,"calibrationEstimate":548396090228.3013},{"id":"ons/household_land_value/LONDON","group":"Household land value by region","unit":"gbp","target":1188167933642.289,"estimate":1203185297593.549,"calibrationEstimate":1208464858198.298},{"id":"ons/household_land_value/NORTH_EAST","group":"Household land value by region","unit":"gbp","target":119603822538.99867,"estimate":120248252547.38388,"calibrationEstimate":120670781170.64792},{"id":"ons/household_land_value/NORTH_WEST","group":"Household land value by region","unit":"gbp","target":422892569458.29254,"estimate":432857394071.48694,"calibrationEstimate":433189776637.8822},{"id":"ons/household_land_value/SCOTLAND","group":"Household land value by region","unit":"gbp","target":280395193712.8084,"estimate":276640745849.4535,"calibrationEstimate":277860896632.4937},{"id":"ons/household_land_value/SOUTH_EAST","group":"Household land value by region","unit":"gbp","target":885848048153.7532,"estimate":895724028534.7693,"calibrationEstimate":899487561852.2374},{"id":"ons/household_land_value/SOUTH_WEST","group":"Household land value by region","unit":"gbp","target":456726035827.05096,"estimate":465653362247.4888,"calibrationEstimate":467005989225.08545},{"id":"ons/household_land_value/WALES","group":"Household land value by region","unit":"gbp","target":179320185054.4999,"estimate":188184118702.406,"calibrationEstimate":188687411488.70615},{"id":"ons/household_land_value/WEST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":364340113693.65784,"estimate":378739467069.95465,"calibrationEstimate":378904015968.6325},{"id":"ons/household_land_value/YORKSHIRE","group":"Household land value by region","unit":"gbp","target":298105966119.05054,"estimate":305323058887.67285,"calibrationEstimate":305558366397.4229},{"id":"ons/land_value","group":"Total land value","unit":"gbp","target":7100000000000.0,"estimate":7257131889855.828,"calibrationEstimate":7724952750742.861},{"id":"ons/lfs_employees","group":"Employees and self-employed people","unit":"count","target":29590000.0,"estimate":30415831.925368626,"calibrationEstimate":30551257.921766207},{"id":"ons/lfs_self_employed","group":"Employees and self-employed people","unit":"count","target":4395000.0,"estimate":4403629.709998399,"calibrationEstimate":4423236.792703286},{"id":"ons/london_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1042000.0,"estimate":1131491.4573817253,"calibrationEstimate":1136529.397939682},{"id":"ons/london_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1038000.0,"estimate":1037544.3274979593,"calibrationEstimate":1042163.9750480652},{"id":"ons/london_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1470000.0,"estimate":1451632.7812190056,"calibrationEstimate":1458096.1668362615},{"id":"ons/london_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1585000.0,"estimate":1492286.394011021,"calibrationEstimate":1498930.7603902817},{"id":"ons/london_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1314000.0,"estimate":1286887.5299487114,"calibrationEstimate":1292617.3732566831},{"id":"ons/london_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1078000.0,"estimate":1097971.444237709,"calibrationEstimate":1102860.1428632736},{"id":"ons/london_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":778000.0,"estimate":750930.0480790138,"calibrationEstimate":754273.5447840691},{"id":"ons/london_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":509000.0,"estimate":486360.6602535248,"calibrationEstimate":488526.16434693336},{"id":"ons/london_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":304000.0,"estimate":303559.92478847504,"calibrationEstimate":304911.5145406723},{"id":"ons/lone_households_over_65","group":"Households by family type","unit":"count","target":4254000.0,"estimate":5454455.018509299,"calibrationEstimate":5478740.884796768},{"id":"ons/lone_households_under_65","group":"Households by family type","unit":"count","target":4316000.0,"estimate":5250786.593510598,"calibrationEstimate":5274165.638094544},{"id":"ons/lone_parent_dependent_children_households","group":"Households by family type","unit":"count","target":1835000.0,"estimate":2798771.157480851,"calibrationEstimate":2811232.6388974935},{"id":"ons/lone_parent_non_dependent_children_households","group":"Households by family type","unit":"count","target":1204000.0,"estimate":1057331.2494069785,"calibrationEstimate":1062038.9998702407},{"id":"ons/male_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1784490.0,"estimate":1917864.3619012684,"calibrationEstimate":1926403.6264294984},{"id":"ons/male_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2143309.0,"estimate":2053535.895194322,"calibrationEstimate":2062679.227788061},{"id":"ons/male_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2149930.0,"estimate":2047459.0866241455,"calibrationEstimate":2056575.355904788},{"id":"ons/male_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2136737.0,"estimate":2167020.575371682,"calibrationEstimate":2176669.196182668},{"id":"ons/male_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2246892.0,"estimate":2353607.326105356,"calibrationEstimate":2364086.752364412},{"id":"ons/male_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2323977.0,"estimate":2306814.134287983,"calibrationEstimate":2317085.1808172166},{"id":"ons/male_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2325815.0,"estimate":2250484.0878130943,"calibrationEstimate":2260504.326561913},{"id":"ons/male_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2208064.0,"estimate":2202735.8511286825,"calibrationEstimate":2212543.500215322},{"id":"ons/male_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2040636.0,"estimate":2050379.9052236676,"calibrationEstimate":2059509.1825666577},{"id":"ons/male_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2119462.0,"estimate":2209499.6434261203,"calibrationEstimate":2219337.4005533904},{"id":"ons/male_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2234921.0,"estimate":2360950.5306516886,"calibrationEstimate":2371462.6275383234},{"id":"ons/male_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2011903.0,"estimate":2176776.512379959,"calibrationEstimate":2186468.5711850673},{"id":"ons/male_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2138720.0,"estimate":1998740.968729228,"calibrationEstimate":2007640.3199545296},{"id":"ons/male_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1785048.0,"estimate":1707467.9938359708,"calibrationEstimate":1715070.4678450525},{"id":"ons/male_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1472190.0,"estimate":1503642.8762648106,"calibrationEstimate":1510337.8170289395},{"id":"ons/male_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1370172.0,"estimate":1395090.3332718164,"calibrationEstimate":1401301.957366705},{"id":"ons/male_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":853423.0,"estimate":1009312.8459606916,"calibrationEstimate":1013806.7878290116},{"id":"ons/male_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":524918.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/multi_family_households","group":"Households by family type","unit":"count","target":244000.0,"estimate":3137645.9858644456,"calibrationEstimate":3151616.293736607},{"id":"ons/north_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":281000.0,"estimate":292283.856153965,"calibrationEstimate":293585.24245643616},{"id":"ons/north_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":311000.0,"estimate":316212.322912693,"calibrationEstimate":317620.25323677063},{"id":"ons/north_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":352029.96956157684,"calibrationEstimate":353597.3771824837},{"id":"ons/north_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":356000.0,"estimate":359699.50099754333,"calibrationEstimate":361301.0569238663},{"id":"ons/north_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":323000.0,"estimate":327139.90297079086,"calibrationEstimate":328596.4853038788},{"id":"ons/north_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":369000.0,"estimate":378836.79312348366,"calibrationEstimate":380523.55742669106},{"id":"ons/north_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":353000.0,"estimate":351102.3077030182,"calibrationEstimate":352665.5838704109},{"id":"ons/north_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":278000.0,"estimate":273663.8987689018,"calibrationEstimate":274882.38518714905},{"id":"ons/north_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":153000.0,"estimate":154565.45491456983,"calibrationEstimate":155253.65523910522},{"id":"ons/north_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":847000.0,"estimate":907878.5675086976,"calibrationEstimate":911920.8865337372},{"id":"ons/north_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":901000.0,"estimate":905132.2707009315,"calibrationEstimate":909162.354482174},{"id":"ons/north_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":986000.0,"estimate":1002199.312697649,"calibrationEstimate":1006661.592706442},{"id":"ons/north_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1056000.0,"estimate":1021326.8112883568,"calibrationEstimate":1025874.23654747},{"id":"ons/north_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":938000.0,"estimate":930422.6213030816,"calibrationEstimate":934565.3206562996},{"id":"ons/north_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1011000.0,"estimate":1030291.0328922272,"calibrationEstimate":1034878.3873639108},{"id":"ons/north_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":888000.0,"estimate":844032.2021713257,"calibrationEstimate":847790.2315773964},{"id":"ons/north_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":715000.0,"estimate":663851.5968799591,"calibrationEstimate":666807.391629219},{"id":"ons/north_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":399000.0,"estimate":395580.82154369354,"calibrationEstimate":397342.1398239136},{"id":"ons/northern_ireland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":234000.0,"estimate":238573.53098157048,"calibrationEstimate":239635.77313242853},{"id":"ons/northern_ireland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":244000.0,"estimate":247808.06932733953,"calibrationEstimate":248911.4319036454},{"id":"ons/northern_ireland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":230000.0,"estimate":232551.80645041168,"calibrationEstimate":233587.23901306093},{"id":"ons/northern_ireland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":264000.0,"estimate":269491.1257661581,"calibrationEstimate":270691.02561856806},{"id":"ons/northern_ireland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":254000.0,"estimate":257494.5271097273,"calibrationEstimate":258641.01725278795},{"id":"ons/northern_ireland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":257000.0,"estimate":258119.9789763689,"calibrationEstimate":259269.25098092857},{"id":"ons/northern_ireland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":224000.0,"estimate":232054.6853407323,"calibrationEstimate":233087.90260344744},{"id":"ons/northern_ireland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":165000.0,"estimate":170104.10925373435,"calibrationEstimate":170861.4931807816},{"id":"ons/northern_ireland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":93000.0,"estimate":98419.55169644952,"calibrationEstimate":98857.76071341336},{"id":"ons/public_sector_employment","group":"Public sector employment","unit":"count","target":5940000.0,"estimate":6304094.97840783,"calibrationEstimate":6332163.859895036},{"id":"ons/savings_interest_income","group":"Household savings interest","unit":"gbp","target":95477000000.0,"estimate":80129221535.43391,"calibrationEstimate":79246943861.21257},{"id":"ons/scotland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":526000.0,"estimate":647600.8949885368,"calibrationEstimate":650484.328666091},{"id":"ons/scotland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":597000.0,"estimate":659703.4958338141,"calibrationEstimate":662640.8183342814},{"id":"ons/scotland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":709000.0,"estimate":740762.218244791,"calibrationEstimate":744060.4591063857},{"id":"ons/scotland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":736000.0,"estimate":773940.4599794149,"calibrationEstimate":777386.4158806205},{"id":"ons/scotland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":691000.0,"estimate":725636.149921596,"calibrationEstimate":728867.0354478359},{"id":"ons/scotland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":788000.0,"estimate":794386.7686737776,"calibrationEstimate":797923.7666577101},{"id":"ons/scotland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":727000.0,"estimate":654615.490395546,"calibrationEstimate":657530.1593027711},{"id":"ons/scotland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":546000.0,"estimate":518987.09887486696,"calibrationEstimate":521297.8820120692},{"id":"ons/scotland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":297000.0,"estimate":309508.9369607568,"calibrationEstimate":310887.0211943984},{"id":"ons/scotland_babies_under_1","group":"Population by region and ten-year age band","unit":"count","target":46000.0,"estimate":48106.95701152086,"calibrationEstimate":48321.15257507563},{"id":"ons/scotland_children_under_16","group":"Population by region and ten-year age band","unit":"count","target":892000.0,"estimate":956540.2894876004,"calibrationEstimate":960799.27374506},{"id":"ons/scotland_households_3plus_children","group":"Scottish households with three or more children","unit":"count","target":82000.0,"estimate":86080.43200981617,"calibrationEstimate":86463.70450717211},{"id":"ons/south_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1039000.0,"estimate":1114232.5491027832,"calibrationEstimate":1119193.650694847},{"id":"ons/south_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1114000.0,"estimate":1104025.5058307648,"calibrationEstimate":1108941.1569581032},{"id":"ons/south_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1093000.0,"estimate":1101930.081794262,"calibrationEstimate":1106836.4138650894},{"id":"ons/south_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1283000.0,"estimate":1222137.9367275238,"calibrationEstimate":1227579.4830198288},{"id":"ons/south_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1273000.0,"estimate":1233437.5373487473,"calibrationEstimate":1238929.3965697289},{"id":"ons/south_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1287000.0,"estimate":1315585.8211021423,"calibrationEstimate":1321443.4466571808},{"id":"ons/south_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":1089000.0,"estimate":1013925.5353107452,"calibrationEstimate":1018440.030857563},{"id":"ons/south_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":927000.0,"estimate":834819.8441057205,"calibrationEstimate":838536.8671865463},{"id":"ons/south_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":559000.0,"estimate":542841.088037014,"calibrationEstimate":545258.0736494064},{"id":"ons/south_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":576000.0,"estimate":604655.1198301315,"calibrationEstimate":607347.3345069885},{"id":"ons/south_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":646000.0,"estimate":654375.9588766098,"calibrationEstimate":657289.5604567528},{"id":"ons/south_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":694000.0,"estimate":709386.0963587761,"calibrationEstimate":712544.6284022331},{"id":"ons/south_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":732462.76395607,"calibrationEstimate":735724.0381350517},{"id":"ons/south_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":704000.0,"estimate":701804.148378849,"calibrationEstimate":704928.919002533},{"id":"ons/south_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":794000.0,"estimate":812267.9054384232,"calibrationEstimate":815884.5122971535},{"id":"ons/south_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":714519.8350300789,"calibrationEstimate":717701.2218279839},{"id":"ons/south_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":662000.0,"estimate":619540.1825652122,"calibrationEstimate":622298.66963768},{"id":"ons/south_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":388000.0,"estimate":382782.8248333931,"calibrationEstimate":384487.1622633934},{"id":"ons/tenure_england_owned_outright","group":"Dwellings by tenure, by nation","unit":"count","target":8374612.0,"estimate":8764165.854846716,"calibrationEstimate":8803188.14887619},{"id":"ons/tenure_england_owned_with_mortgage","group":"Dwellings by tenure, by nation","unit":"count","target":7667051.0,"estimate":7360170.187984467,"calibrationEstimate":7392941.221483231},{"id":"ons/tenure_england_rented_privately","group":"Dwellings by tenure, by nation","unit":"count","target":5299840.0,"estimate":5789919.019839287,"calibrationEstimate":5815698.559220791},{"id":"ons/tenure_england_social_rent","group":"Dwellings by tenure, by nation","unit":"count","target":4274613.0,"estimate":4272671.371180296,"calibrationEstimate":4291695.364801168},{"id":"ons/tenure_england_total","group":"Dwellings by tenure, by nation","unit":"count","target":25616116.0,"estimate":26186926.433850765,"calibrationEstimate":26303523.29438138},{"id":"ons/uk_population","group":"UK population, in total and by sex and five-year age band","unit":"count","target":69502341.0,"estimate":69712844.3129216,"calibrationEstimate":70023239.6145},{"id":"ons/unrelated_adult_households","group":"Households by family type","unit":"count","target":813000.0,"estimate":1057450.6047298163,"calibrationEstimate":1062158.8866242766},{"id":"ons/wales_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":325000.0,"estimate":348106.06233742833,"calibrationEstimate":349655.9994878471},{"id":"ons/wales_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":362000.0,"estimate":377852.1347847581,"calibrationEstimate":379534.51495823264},{"id":"ons/wales_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":389000.0,"estimate":421177.7128336728,"calibrationEstimate":423053.0000615418},{"id":"ons/wales_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":408000.0,"estimate":408298.51544573903,"calibrationEstimate":410116.45715788007},{"id":"ons/wales_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":374000.0,"estimate":386225.7205041647,"calibrationEstimate":387945.3860552907},{"id":"ons/wales_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":432000.0,"estimate":453846.15008094907,"calibrationEstimate":455866.8945379853},{"id":"ons/wales_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":407000.0,"estimate":411359.2729103267,"calibrationEstimate":413190.8414015472},{"id":"ons/wales_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":340773.34702190757,"calibrationEstimate":342290.63411542773},{"id":"ons/wales_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":190000.0,"estimate":193830.5397951007,"calibrationEstimate":194693.5690819025},{"id":"ons/west_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":700000.0,"estimate":739812.0893673897,"calibrationEstimate":743106.0936331749},{"id":"ons/west_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":750032.0111775398,"calibrationEstimate":753371.5123896599},{"id":"ons/west_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":774000.0,"estimate":782119.0841474533,"calibrationEstimate":785601.4645900726},{"id":"ons/west_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":834000.0,"estimate":829667.6420812607,"calibrationEstimate":833361.7243332863},{"id":"ons/west_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":758000.0,"estimate":759738.0727472305,"calibrationEstimate":763120.7843537331},{"id":"ons/west_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":800000.0,"estimate":820177.6517162323,"calibrationEstimate":823829.4666743279},{"id":"ons/west_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":685000.0,"estimate":663277.1520633698,"calibrationEstimate":666230.3836565018},{"id":"ons/west_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":570000.0,"estimate":543874.736948967,"calibrationEstimate":546296.3349237442},{"id":"ons/west_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":337000.0,"estimate":342024.45200538635,"calibrationEstimate":343547.31078481674},{"id":"ons/yorkshire_and_the_humber_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":618000.0,"estimate":648706.7535791397,"calibrationEstimate":651595.1075530052},{"id":"ons/yorkshire_and_the_humber_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":666000.0,"estimate":665860.9753584862,"calibrationEstimate":668825.70743227},{"id":"ons/yorkshire_and_the_humber_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":733000.0,"estimate":743138.1404109001,"calibrationEstimate":746446.95353508},{"id":"ons/yorkshire_and_the_humber_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":764000.0,"estimate":747053.2144784927,"calibrationEstimate":750379.460542202},{"id":"ons/yorkshire_and_the_humber_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":686000.0,"estimate":674619.9282107353,"calibrationEstimate":677623.6605932713},{"id":"ons/yorkshire_and_the_humber_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":745000.0,"estimate":752040.3539185524,"calibrationEstimate":755388.8066067696},{"id":"ons/yorkshire_and_the_humber_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":658000.0,"estimate":624463.3849864006,"calibrationEstimate":627243.798564434},{"id":"ons/yorkshire_and_the_humber_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":536000.0,"estimate":496824.7366466522,"calibrationEstimate":499036.8403120041},{"id":"ons/yorkshire_and_the_humber_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":302000.0,"estimate":295722.3997733593,"calibrationEstimate":297039.09796380997},{"id":"slc/adult_dependants_grant_recipients","group":"Adult Dependants' Grant: recipients and spending","unit":"count","target":18611.0,"estimate":10488.390624523165,"calibrationEstimate":17919.595499515533},{"id":"slc/adult_dependants_grant_spend","group":"Adult Dependants' Grant: recipients and spending","unit":"gbp","target":55364917.0,"estimate":37181344.76393461,"calibrationEstimate":63524966.045782566},{"id":"slc/maintenance_loan_recipients","group":"Maintenance loans: recipients and spending","unit":"count","target":1159761.0,"estimate":1115007.2203326223,"calibrationEstimate":1119971.7707395554},{"id":"slc/maintenance_loan_spend","group":"Maintenance loans: recipients and spending","unit":"gbp","target":8591659718.0,"estimate":9243921660.334114,"calibrationEstimate":9310652595.32858},{"id":"slc/parents_learning_allowance_recipients","group":"Parents' Learning Allowance: recipients and spending","unit":"count","target":99645.0,"estimate":98858.3031744957,"calibrationEstimate":99298.4696264267},{"id":"slc/parents_learning_allowance_spend","group":"Parents' Learning Allowance: recipients and spending","unit":"gbp","target":181421659.0,"estimate":200089205.6251793,"calibrationEstimate":200980102.52388763},{"id":"slc/plan_2_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":3985000.0,"estimate":4365258.374378204,"calibrationEstimate":4384694.640698433},{"id":"slc/plan_2_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":8940000.0,"estimate":6805751.482197762,"calibrationEstimate":6836054.020182133},{"id":"slc/plan_5_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":0.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/plan_5_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":10000.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/student_loan_repayment/england","group":"Student loan repayments, by nation and plan","unit":"gbp","target":5018231834.95,"estimate":5119208721.2338,"calibrationEstimate":4961058450.910856},{"id":"slc/student_loan_repayment/england/plan_1","group":"Student loan repayments, by nation and plan","unit":"gbp","target":1852699178.55,"estimate":1953753088.251544,"calibrationEstimate":1935645687.413804},{"id":"slc/student_loan_repayment/england/plan_2","group":"Student loan repayments, by nation and plan","unit":"gbp","target":2778253361.64,"estimate":3163065937.3426647,"calibrationEstimate":3023410861.2912726},{"id":"slc/student_loan_repayment/england/plan_5","group":"Student loan repayments, by nation and plan","unit":"gbp","target":40869580.81,"estimate":2389695.639591503,"calibrationEstimate":2001902.205781548},{"id":"slc/student_loan_repayment/england/postgraduate","group":"Student loan repayments, by nation and plan","unit":"gbp","target":346409713.95,"estimate":0.0,"calibrationEstimate":0.0},{"id":"slc/student_loan_repayment/northern_ireland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":181700000.0,"estimate":195403289.8778463,"calibrationEstimate":188624377.49343297},{"id":"slc/student_loan_repayment/scotland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":203300000.0,"estimate":221132909.0659362,"calibrationEstimate":213564948.46889892},{"id":"slc/student_loan_repayment/wales","group":"Student loan repayments, by nation and plan","unit":"gbp","target":229100000.0,"estimate":247405370.84255865,"calibrationEstimate":238897353.28110468},{"id":"sss/scottish_child_payment","group":"Scottish Child Payment spending","unit":"gbp","target":471000000.0,"estimate":497726869.8419191,"calibrationEstimate":499942991.15633214},{"id":"voa/council_tax/EAST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":804340.0,"estimate":812220.3750844002,"calibrationEstimate":815836.7769055367},{"id":"voa/council_tax/EAST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":505610.0,"estimate":512867.9080028534,"calibrationEstimate":515151.44179964066},{"id":"voa/council_tax/EAST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":403840.0,"estimate":409527.9134449959,"calibrationEstimate":411351.3289835453},{"id":"voa/council_tax/EAST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":247850.0,"estimate":252952.60029935837,"calibrationEstimate":254078.8680486679},{"id":"voa/council_tax/EAST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":154970.0,"estimate":158834.98216819763,"calibrationEstimate":159542.19471597672},{"id":"voa/council_tax/EAST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":73920.0,"estimate":76145.44448757172,"calibrationEstimate":76484.48072099686},{"id":"voa/council_tax/EAST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":39400.0,"estimate":40296.69438171387,"calibrationEstimate":40476.11449241638},{"id":"voa/council_tax/EAST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":3480.0,"estimate":3560.398073196411,"calibrationEstimate":3576.250594139099},{"id":"voa/council_tax/EAST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2233400.0,"estimate":2266406.315942287,"calibrationEstimate":2276497.4562609196},{"id":"voa/council_tax/EAST_OF_ENGLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":403180.0,"estimate":410904.2397751808,"calibrationEstimate":412733.7905740738},{"id":"voa/council_tax/EAST_OF_ENGLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":598950.0,"estimate":611632.8573641777,"calibrationEstimate":614356.1372361183},{"id":"voa/council_tax/EAST_OF_ENGLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":739570.0,"estimate":750946.7586493492,"calibrationEstimate":754290.3465647697},{"id":"voa/council_tax/EAST_OF_ENGLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":506540.0,"estimate":517253.3751280308,"calibrationEstimate":519556.4378812313},{"id":"voa/council_tax/EAST_OF_ENGLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":313840.0,"estimate":318550.18431663513,"calibrationEstimate":319968.5263018608},{"id":"voa/council_tax/EAST_OF_ENGLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":172960.0,"estimate":177523.18523740768,"calibrationEstimate":178313.60445976257},{"id":"voa/council_tax/EAST_OF_ENGLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":113720.0,"estimate":116179.86512231828,"calibrationEstimate":116697.15281319618},{"id":"voa/council_tax/EAST_OF_ENGLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":14830.0,"estimate":15408.850413322449,"calibrationEstimate":15477.458395004272},{"id":"voa/council_tax/EAST_OF_ENGLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2863600.0,"estimate":2918399.316006422,"calibrationEstimate":2931393.454226017},{"id":"voa/council_tax/LONDON/A","group":"Dwellings by council tax band and region","unit":"count","target":144550.0,"estimate":150375.55367183685,"calibrationEstimate":151045.09367752075},{"id":"voa/council_tax/LONDON/B","group":"Dwellings by council tax band and region","unit":"count","target":499130.0,"estimate":511106.1657552719,"calibrationEstimate":513381.8522338867},{"id":"voa/council_tax/LONDON/C","group":"Dwellings by council tax band and region","unit":"count","target":1040280.0,"estimate":1052713.1613850594,"calibrationEstimate":1057400.3456015587},{"id":"voa/council_tax/LONDON/D","group":"Dwellings by council tax band and region","unit":"count","target":975750.0,"estimate":988912.67416811,"calibrationEstimate":993315.7964680196},{"id":"voa/council_tax/LONDON/E","group":"Dwellings by council tax band and region","unit":"count","target":585130.0,"estimate":604620.8762998581,"calibrationEstimate":607312.9413566589},{"id":"voa/council_tax/LONDON/F","group":"Dwellings by council tax band and region","unit":"count","target":298920.0,"estimate":308940.16441679,"calibrationEstimate":310315.7166080475},{"id":"voa/council_tax/LONDON/G","group":"Dwellings by council tax band and region","unit":"count","target":225170.0,"estimate":230670.46613502505,"calibrationEstimate":231697.5183286667},{"id":"voa/council_tax/LONDON/H","group":"Dwellings by council tax band and region","unit":"count","target":68500.0,"estimate":70754.35682678223,"calibrationEstimate":71069.39036178589},{"id":"voa/council_tax/LONDON/total","group":"Dwellings by council tax band and region","unit":"count","target":3837430.0,"estimate":3918093.4186587334,"calibrationEstimate":3935538.6546361446},{"id":"voa/council_tax/NORTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":667540.0,"estimate":680737.9537260532,"calibrationEstimate":683768.9220235348},{"id":"voa/council_tax/NORTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":206790.0,"estimate":211970.4058327675,"calibrationEstimate":212914.200009346},{"id":"voa/council_tax/NORTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":196180.0,"estimate":202087.55218410492,"calibrationEstimate":202987.3474559784},{"id":"voa/council_tax/NORTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":113460.0,"estimate":115930.2783408165,"calibrationEstimate":116446.45661735536},{"id":"voa/council_tax/NORTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":61090.0,"estimate":61207.41867017746,"calibrationEstimate":61479.942474365234},{"id":"voa/council_tax/NORTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":26600.0,"estimate":26356.495221138,"calibrationEstimate":26473.84709215164},{"id":"voa/council_tax/NORTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":14600.0,"estimate":15486.845539569857,"calibrationEstimate":15555.80025434494},{"id":"voa/council_tax/NORTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":1570.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":1287830.0,"estimate":1313776.9495146277,"calibrationEstimate":1319626.5159270763},{"id":"voa/council_tax/NORTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":1386260.0,"estimate":1391080.06063509,"calibrationEstimate":1397273.8202409744},{"id":"voa/council_tax/NORTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":705450.0,"estimate":715903.5987789631,"calibrationEstimate":719091.151144743},{"id":"voa/council_tax/NORTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":616070.0,"estimate":626632.3857769966,"calibrationEstimate":629422.4471478462},{"id":"voa/council_tax/NORTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":363970.0,"estimate":371361.08140420914,"calibrationEstimate":373014.5641813278},{"id":"voa/council_tax/NORTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":216990.0,"estimate":223131.46934127808,"calibrationEstimate":224124.959856987},{"id":"voa/council_tax/NORTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":104330.0,"estimate":107420.41505765916,"calibrationEstimate":107898.70176649094},{"id":"voa/council_tax/NORTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":65750.0,"estimate":67545.51971292496,"calibrationEstimate":67846.26735258102},{"id":"voa/council_tax/NORTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":7350.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":3466140.0,"estimate":3503074.530707121,"calibrationEstimate":3518671.9116909504},{"id":"voa/council_tax/SCOTLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":501021.459,"estimate":519230.9023320675,"calibrationEstimate":521542.7701560855},{"id":"voa/council_tax/SCOTLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":584962.227,"estimate":602046.806920588,"calibrationEstimate":604727.4127128124},{"id":"voa/council_tax/SCOTLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":427573.287,"estimate":445115.3774691224,"calibrationEstimate":447097.24797928333},{"id":"voa/council_tax/SCOTLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":367240.86,"estimate":390433.5805595517,"calibrationEstimate":392171.9807073474},{"id":"voa/council_tax/SCOTLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":364617.711,"estimate":383971.6045381427,"calibrationEstimate":385681.2364856601},{"id":"voa/council_tax/SCOTLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":220344.516,"estimate":230924.03558689356,"calibrationEstimate":231952.2210955024},{"id":"voa/council_tax/SCOTLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":141650.046,"estimate":147640.03100788593,"calibrationEstimate":148297.3968727589},{"id":"voa/council_tax/SCOTLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":15738.894,"estimate":14844.596238613129,"calibrationEstimate":14910.691596031187},{"id":"voa/council_tax/SCOTLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2623149.0,"estimate":2734206.934652865,"calibrationEstimate":2746380.957605481},{"id":"voa/council_tax/SOUTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":367610.0,"estimate":376721.3822689056,"calibrationEstimate":378398.7290725708},{"id":"voa/council_tax/SOUTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":687430.0,"estimate":700808.5503644943,"calibrationEstimate":703928.8838472366},{"id":"voa/council_tax/SOUTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":1075940.0,"estimate":1090040.558608532,"calibrationEstimate":1094893.946111679},{"id":"voa/council_tax/SOUTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":843560.0,"estimate":858553.6785125732,"calibrationEstimate":862376.3792462349},{"id":"voa/council_tax/SOUTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":551730.0,"estimate":567477.6824498177,"calibrationEstimate":570004.3656759262},{"id":"voa/council_tax/SOUTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":337260.0,"estimate":344590.2440838814,"calibrationEstimate":346124.52712106705},{"id":"voa/council_tax/SOUTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":265610.0,"estimate":273549.8351545334,"calibrationEstimate":274767.8116083145},{"id":"voa/council_tax/SOUTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":40390.0,"estimate":41414.243516922,"calibrationEstimate":41598.64037132263},{"id":"voa/council_tax/SOUTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":4169520.0,"estimate":4253156.17495966,"calibrationEstimate":4272093.283054352},{"id":"voa/council_tax/SOUTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":473020.0,"estimate":482912.787299633,"calibrationEstimate":485062.9522204399},{"id":"voa/council_tax/SOUTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":644890.0,"estimate":652833.0327134132,"calibrationEstimate":655739.7580933571},{"id":"voa/council_tax/SOUTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":624030.0,"estimate":630313.4024662971,"calibrationEstimate":633119.8610377312},{"id":"voa/council_tax/SOUTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":432070.0,"estimate":436333.3158068657,"calibrationEstimate":438276.0832939148},{"id":"voa/council_tax/SOUTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":292090.0,"estimate":296615.94530296326,"calibrationEstimate":297936.61835718155},{"id":"voa/council_tax/SOUTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":147920.0,"estimate":150589.5069141388,"calibrationEstimate":151260.00522136688},{"id":"voa/council_tax/SOUTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":81960.0,"estimate":83527.61182880402,"calibrationEstimate":83899.51695775986},{"id":"voa/council_tax/SOUTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":8430.0,"estimate":8669.152314662933,"calibrationEstimate":8707.751531600952},{"id":"voa/council_tax/SOUTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":2704390.0,"estimate":2741794.754646778,"calibrationEstimate":2754002.546713352},{"id":"voa/council_tax/WALES/A","group":"Dwellings by council tax band and region","unit":"count","target":215380.0,"estimate":224605.6820923984,"calibrationEstimate":225605.73692715168},{"id":"voa/council_tax/WALES/B","group":"Dwellings by council tax band and region","unit":"count","target":307070.0,"estimate":320208.17440497875,"calibrationEstimate":321633.8936638236},{"id":"voa/council_tax/WALES/C","group":"Dwellings by council tax band and region","unit":"count","target":323220.0,"estimate":335451.0971978903,"calibrationEstimate":336944.68964356184},{"id":"voa/council_tax/WALES/D","group":"Dwellings by council tax band and region","unit":"count","target":241220.0,"estimate":250254.17059534788,"calibrationEstimate":251368.4234211743},{"id":"voa/council_tax/WALES/E","group":"Dwellings by council tax band and region","unit":"count","target":200840.0,"estimate":211026.1240774095,"calibrationEstimate":211965.71487867832},{"id":"voa/council_tax/WALES/F","group":"Dwellings by council tax band and region","unit":"count","target":122650.0,"estimate":126898.85001176596,"calibrationEstimate":127463.86601752044},{"id":"voa/council_tax/WALES/G","group":"Dwellings by council tax band and region","unit":"count","target":55190.0,"estimate":58875.90761309862,"calibrationEstimate":59138.051686525345},{"id":"voa/council_tax/WALES/H","group":"Dwellings by council tax band and region","unit":"count","target":13190.0,"estimate":13777.90127837658,"calibrationEstimate":13839.247251331806},{"id":"voa/council_tax/WALES/total","group":"Dwellings by council tax band and region","unit":"count","target":1484410.0,"estimate":1580971.558793813,"calibrationEstimate":1588010.8121637702},{"id":"voa/council_tax/WEST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":786010.0,"estimate":801264.3020524979,"calibrationEstimate":804831.908847332},{"id":"voa/council_tax/WEST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":654140.0,"estimate":667366.4046912193,"calibrationEstimate":670337.8446173668},{"id":"voa/council_tax/WEST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":526260.0,"estimate":542465.0707445145,"calibrationEstimate":544880.3880476952},{"id":"voa/council_tax/WEST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":302500.0,"estimate":308908.68011569977,"calibrationEstimate":310284.0953936577},{"id":"voa/council_tax/WEST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":193700.0,"estimate":198747.3023056984,"calibrationEstimate":199632.22103261948},{"id":"voa/council_tax/WEST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":105630.0,"estimate":107414.5040140152,"calibrationEstimate":107892.76392650604},{"id":"voa/council_tax/WEST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":62780.0,"estimate":65637.16608524323,"calibrationEstimate":65929.41587018967},{"id":"voa/council_tax/WEST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":6170.0,"estimate":6236.679645061493,"calibrationEstimate":6264.44837474823},{"id":"voa/council_tax/WEST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2637190.0,"estimate":2698040.1096539497,"calibrationEstimate":2710053.086110115},{"id":"voa/council_tax/YORKSHIRE/A","group":"Dwellings by council tax band and region","unit":"count","target":1070830.0,"estimate":1081951.5106871128,"calibrationEstimate":1086768.8853447435},{"id":"voa/council_tax/YORKSHIRE/B","group":"Dwellings by council tax band and region","unit":"count","target":514190.0,"estimate":523395.8514652252,"calibrationEstimate":525726.2633414268},{"id":"voa/council_tax/YORKSHIRE/C","group":"Dwellings by council tax band and region","unit":"count","target":432290.0,"estimate":438533.7035779953,"calibrationEstimate":440486.2676320076},{"id":"voa/council_tax/YORKSHIRE/D","group":"Dwellings by council tax band and region","unit":"count","target":249530.0,"estimate":251634.06920957565,"calibrationEstimate":252754.46445512772},{"id":"voa/council_tax/YORKSHIRE/E","group":"Dwellings by council tax band and region","unit":"count","target":158600.0,"estimate":159460.23387098312,"calibrationEstimate":160170.2293252945},{"id":"voa/council_tax/YORKSHIRE/F","group":"Dwellings by council tax band and region","unit":"count","target":75690.0,"estimate":76176.12427806854,"calibrationEstimate":76515.29922580719},{"id":"voa/council_tax/YORKSHIRE/G","group":"Dwellings by council tax band and region","unit":"count","target":42180.0,"estimate":43033.37067222595,"calibrationEstimate":43224.9764380455},{"id":"voa/council_tax/YORKSHIRE/H","group":"Dwellings by council tax band and region","unit":"count","target":3770.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/YORKSHIRE/total","group":"Dwellings by council tax band and region","unit":"count","target":2547080.0,"estimate":2574184.8637611866,"calibrationEstimate":2585646.385762453}] +[{"id":"dwp/benefit_cap_total_reduction","group":"Benefit cap: households capped and total reduction","unit":"gbp","target":320866000.0,"estimate":416482947.560074,"calibrationEstimate":330069710.0619365},{"id":"dwp/benefit_capped_households","group":"Benefit cap: households capped and total reduction","unit":"count","target":110637.0,"estimate":147944.28814807534,"calibrationEstimate":114504.09350681303},{"id":"dwp/esa_claimants","group":"Employment and Support Allowance claimants","unit":"count","target":999000.0,"estimate":904541.0915792732,"calibrationEstimate":909849.9250053912},{"id":"dwp/esa_contrib_claimants","group":"Contribution-based ESA claimants","unit":"count","target":620000.0,"estimate":716681.2252025008,"calibrationEstimate":719872.2350563705},{"id":"dwp/esa_income_claimants","group":"Income-related ESA claimants","unit":"count","target":180000.0,"estimate":188801.45329512656,"calibrationEstimate":190923.46925877035},{"id":"dwp/housing_benefit/over_pension_credit_age","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":7114700000.0,"estimate":7111903913.229882,"calibrationEstimate":7293068999.985946},{"id":"dwp/housing_benefit/over_pension_credit_age_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":1109000.0,"estimate":1093247.9535357058,"calibrationEstimate":1168281.94529891},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":584800000.0,"estimate":645921139.0904175,"calibrationEstimate":601213368.3664361},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":107000.0,"estimate":108791.38991189004,"calibrationEstimate":109275.78261888029},{"id":"dwp/jsa_claimants","group":"Jobseeker's Allowance claimants","unit":"count","target":71000.0,"estimate":69247.07556176186,"calibrationEstimate":69555.39922833443},{"id":"dwp/pension_credit","group":"Pension Credit claims and spending","unit":"gbp","target":6144470000.0,"estimate":6602274120.813976,"calibrationEstimate":6377744108.750391},{"id":"dwp/pension_credit_claims","group":"Pension Credit claims and spending","unit":"count","target":1382000.0,"estimate":1451705.6834389567,"calibrationEstimate":1452205.295378387},{"id":"dwp/pip_dl_enhanced_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1608000.0,"estimate":1953368.303418666,"calibrationEstimate":1962065.646411702},{"id":"dwp/pip_dl_standard_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1283000.0,"estimate":1419466.81792067,"calibrationEstimate":1425786.9713478386},{"id":"dwp/scotland_uc_households_child_under_1","group":"Universal Credit households by family type and number of children","unit":"count","target":14000.0,"estimate":14566.249044418337,"calibrationEstimate":14631.105303406715},{"id":"dwp/uc/claimants_couple_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":231368.0,"estimate":250896.79244339463,"calibrationEstimate":251991.6941986084},{"id":"dwp/uc/claimants_couple_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":839379.0,"estimate":913383.3023456336,"calibrationEstimate":920606.89293769},{"id":"dwp/uc/claimants_single_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2868011.0,"estimate":2889435.6531457454,"calibrationEstimate":2918404.0829007328},{"id":"dwp/uc/claimants_single_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2156879.0,"estimate":2380399.2202840894,"calibrationEstimate":2392176.4252111316},{"id":"dwp/uc/claimants_with_1_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1222944.0,"estimate":1295755.060847789,"calibrationEstimate":1302878.9863807857},{"id":"dwp/uc/claimants_with_2_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1058967.0,"estimate":1121193.9276535958,"calibrationEstimate":1125632.9012648463},{"id":"dwp/uc/claimants_with_3_children","group":"Universal Credit households by family type and number of children","unit":"count","target":473500.0,"estimate":502609.9927156568,"calibrationEstimate":507203.147459805},{"id":"dwp/uc/claimants_with_4_children","group":"Universal Credit households by family type and number of children","unit":"count","target":166790.0,"estimate":174326.93197226524,"calibrationEstimate":175103.1191417575},{"id":"dwp/uc/claimants_with_5+_children","group":"Universal Credit households by family type and number of children","unit":"count","target":75910.0,"estimate":79091.86563810706,"calibrationEstimate":79444.01964199543},{"id":"dwp/uc/households","group":"Universal Credit households by family type and number of children","unit":"count","target":6700000.0,"estimate":6348971.35797745,"calibrationEstimate":6395623.053902179},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":7610.0,"estimate":7420.538169384003,"calibrationEstimate":7514.299792408943},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12370.0,"estimate":15733.237529218197,"calibrationEstimate":12799.954794287682},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":15175.0,"estimate":11472.3235373199,"calibrationEstimate":15871.05467006564},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":12297.0,"estimate":12021.353377342224,"calibrationEstimate":12654.892155706882},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17828.0,"estimate":19456.112460017204,"calibrationEstimate":18263.504908561707},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":14427.0,"estimate":15080.27974140644,"calibrationEstimate":15080.074879169464},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":11892.0,"estimate":17644.776905357838,"calibrationEstimate":11945.356312990189},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":9463.0,"estimate":10057.979517936708,"calibrationEstimate":9759.450750350952},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8443.0,"estimate":9638.97747528553,"calibrationEstimate":8904.66766166687},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8906.0,"estimate":8274.131901025772,"calibrationEstimate":9022.64424419403},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5770.0,"estimate":4132.918827056885,"calibrationEstimate":5968.669494628906},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":3485.0,"estimate":5987.513103485107,"calibrationEstimate":3668.190024375915},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":2360.0,"estimate":2347.807508468628,"calibrationEstimate":2415.9390258789062},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":1815.0,"estimate":443.7221064567566,"calibrationEstimate":1831.3727984428408},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":1186.0,"estimate":2170.6248083114624,"calibrationEstimate":1187.413498878479},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":935.0,"estimate":1428.0487060546875,"calibrationEstimate":967.2799072265624},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":632.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":580.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":11750.0,"estimate":13848.374123096466,"calibrationEstimate":11923.90768444538},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":1424.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":10802.0,"estimate":8128.508852601051,"calibrationEstimate":10862.276925444605},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12168.0,"estimate":16164.80532181263,"calibrationEstimate":12346.467386484146},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":12461.0,"estimate":5748.578682214022,"calibrationEstimate":12841.8128490448},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":15787.0,"estimate":17204.907525718212,"calibrationEstimate":16464.121763527393},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":14248.0,"estimate":14648.581487357616,"calibrationEstimate":14936.235798239708},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":17559.0,"estimate":15425.641696095468,"calibrationEstimate":18029.333872824907},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":18714.0,"estimate":17000.313221901655,"calibrationEstimate":18860.421827226877},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":42188.0,"estimate":37726.34860146046,"calibrationEstimate":44076.01454716921},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":41520.0,"estimate":47141.35041385889,"calibrationEstimate":43324.978789806366},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":41159.0,"estimate":41947.755105018616,"calibrationEstimate":43194.09025865793},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":42515.0,"estimate":43577.436663627625,"calibrationEstimate":44944.778411865234},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":38527.0,"estimate":41018.2691783905,"calibrationEstimate":40481.27525937557},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":38894.0,"estimate":38215.3523761034,"calibrationEstimate":40602.91079157591},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":38659.0,"estimate":41123.29328751564,"calibrationEstimate":40460.888354063034},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34318.0,"estimate":48566.454991579056,"calibrationEstimate":35928.6571059227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":22489.0,"estimate":21205.43173134327,"calibrationEstimate":23000.909938097},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":30116.0,"estimate":28863.080528736115,"calibrationEstimate":31526.387284994125},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":28519.0,"estimate":21444.73471069336,"calibrationEstimate":29762.76909518242},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":26014.0,"estimate":23408.44104397297,"calibrationEstimate":26872.75042545795},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":23159.0,"estimate":35138.78228497505,"calibrationEstimate":24115.846549868584},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":20618.0,"estimate":16612.729299545288,"calibrationEstimate":21560.06649184227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17493.0,"estimate":19232.653191685677,"calibrationEstimate":18100.27004623413},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":15437.0,"estimate":20070.599754333496,"calibrationEstimate":15988.015625},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12836.0,"estimate":11836.146595954897,"calibrationEstimate":13421.761481285095},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":26734.0,"estimate":28675.483907222748,"calibrationEstimate":27596.403090000153},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":61727.0,"estimate":65997.26235544682,"calibrationEstimate":64758.198789417744},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":29189.0,"estimate":28463.220873951912,"calibrationEstimate":30442.063633084297},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":33137.0,"estimate":31760.17704331875,"calibrationEstimate":34303.848853588104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":35834.0,"estimate":26437.818723022938,"calibrationEstimate":37270.02708786726},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":38338.0,"estimate":54036.251175284386,"calibrationEstimate":40042.640211343765},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":40685.0,"estimate":44348.22739729285,"calibrationEstimate":42527.98726695776},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":40564.0,"estimate":34501.503211796284,"calibrationEstimate":42208.232148468494},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":24639.0,"estimate":39168.9606487751,"calibrationEstimate":25625.726674437523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":126949.0,"estimate":142487.4302058667,"calibrationEstimate":133277.48989093304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":131129.0,"estimate":95377.8368690312,"calibrationEstimate":137752.16340973973},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":131289.0,"estimate":157107.79431578517,"calibrationEstimate":137750.63612690568},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":119355.0,"estimate":129818.38890782,"calibrationEstimate":124892.34173852204},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":130802.0,"estimate":131328.063896209,"calibrationEstimate":136759.86128601432},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":141848.0,"estimate":150728.17493000627,"calibrationEstimate":148309.65001174808},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":136835.0,"estimate":133713.73497787118,"calibrationEstimate":142901.4171705842},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":107556.0,"estimate":111484.7263495922,"calibrationEstimate":113109.20482206345},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34670.0,"estimate":29272.17201089859,"calibrationEstimate":36466.16493701935},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":86616.0,"estimate":104096.27746334672,"calibrationEstimate":90422.71904051304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":80294.0,"estimate":73354.04017925262,"calibrationEstimate":84354.22553360462},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":70309.0,"estimate":89331.43440103531,"calibrationEstimate":73447.99977698922},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":50510.0,"estimate":72202.29325729609,"calibrationEstimate":53156.73221343756},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":42522.0,"estimate":18497.629060208797,"calibrationEstimate":44506.54565644264},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":33508.0,"estimate":49045.771344304085,"calibrationEstimate":35145.99563121796},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":27063.0,"estimate":30266.55286216736,"calibrationEstimate":28766.448501110077},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":21663.0,"estimate":26942.793876886368,"calibrationEstimate":22648.643339395523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":43623.0,"estimate":37809.548577189445,"calibrationEstimate":45833.974639594555},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":82905.0,"estimate":97151.36844921112,"calibrationEstimate":87104.91118597984},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":55622.0,"estimate":60510.223631858826,"calibrationEstimate":58795.10524368286},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":67901.0,"estimate":71725.4553387165,"calibrationEstimate":70821.50663983822},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":89314.0,"estimate":86143.68657708168,"calibrationEstimate":93578.26927548648},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":118641.0,"estimate":119403.35334032774,"calibrationEstimate":124258.13893908262},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":99069.0,"estimate":97294.37053111196,"calibrationEstimate":103667.6788329184},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":102251.0,"estimate":96173.39577645063,"calibrationEstimate":107101.9515336156},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":102312.0,"estimate":87279.16967123747,"calibrationEstimate":107319.9899930358},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":95698.0,"estimate":135695.77643716335,"calibrationEstimate":100056.6025826335},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":106663.0,"estimate":124074.26766955853,"calibrationEstimate":111498.78546503186},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":181180.0,"estimate":188187.3756595254,"calibrationEstimate":191690.2932780385},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":189861.0,"estimate":186351.02785767615,"calibrationEstimate":199963.96529877183},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":129174.0,"estimate":185164.77054291964,"calibrationEstimate":136010.89976614714},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":84690.0,"estimate":54264.40361404419,"calibrationEstimate":88587.68869447708},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":46244.0,"estimate":71491.7329352498,"calibrationEstimate":47919.61390686035},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":26481.0,"estimate":35623.84896039963,"calibrationEstimate":27905.27891921997},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":120819.0,"estimate":128539.76422923803,"calibrationEstimate":126547.3099425435},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":18143.0,"estimate":31588.639366149902,"calibrationEstimate":18797.771575927734},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":12325.0,"estimate":4426.75733757019,"calibrationEstimate":12941.009860992432},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":9555.0,"estimate":10281.057233810425,"calibrationEstimate":9941.590031147003},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":6230.0,"estimate":8126.360444545746,"calibrationEstimate":6391.2335205078125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":5884.0,"estimate":6362.902786254883,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5362.0,"estimate":1998.391206741333,"calibrationEstimate":5583.823296546936},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":1786.0,"estimate":2339.0858516693115,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":1491.0,"estimate":1221.5946044921875,"calibrationEstimate":1580.0684814453125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":173925.0,"estimate":173553.54143616557,"calibrationEstimate":180896.03793656823},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":3518.0,"estimate":5268.748246669769,"calibrationEstimate":3712.138840675354},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":375706.0,"estimate":405618.4962475896,"calibrationEstimate":399359.66108581424},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":200713.0,"estimate":186214.24044963715,"calibrationEstimate":212072.70295926929},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":107860.0,"estimate":76928.3390161097,"calibrationEstimate":113803.28732386231},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":144036.0,"estimate":167346.22477129102,"calibrationEstimate":151404.9450480342},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":377221.0,"estimate":349366.41928082705,"calibrationEstimate":405079.322792083},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":341138.0,"estimate":368394.08331155777,"calibrationEstimate":365472.416688472},{"id":"hmrc/capital_gains_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5805652941.176472,"estimate":2178688648.0482244,"calibrationEstimate":2141544289.3825493},{"id":"hmrc/capital_gains_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":6567201680.67227,"estimate":7324580857.580844,"calibrationEstimate":5995201312.511488},{"id":"hmrc/capital_gains_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":1457322689.0756304,"estimate":876994527.1745476,"calibrationEstimate":832080688.7293456},{"id":"hmrc/capital_gains_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":9443821008.403362,"estimate":8915647072.518879,"calibrationEstimate":8817479175.49674},{"id":"hmrc/capital_gains_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":2718348739.4957986,"estimate":1471546074.3489742,"calibrationEstimate":1444078653.7115064},{"id":"hmrc/capital_gains_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":4898166386.554623,"estimate":3799760749.882065,"calibrationEstimate":3788282184.501421},{"id":"hmrc/capital_gains_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":3834464705.882354,"estimate":1744185904.570274,"calibrationEstimate":1735553375.6752963},{"id":"hmrc/capital_gains_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5863205882.3529415,"estimate":4403841031.357599,"calibrationEstimate":5555259154.762842},{"id":"hmrc/capital_gains_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":23343884033.61345,"estimate":21727639789.17903,"calibrationEstimate":21488402885.15877},{"id":"hmrc/capital_gains_total","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":67727478991.59665,"estimate":55861737820.9182,"calibrationEstimate":55238457530.72525},{"id":"hmrc/cgt_taxpayers","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":378000.0,"estimate":594003.8427731246,"calibrationEstimate":593891.4494462013},{"id":"hmrc/cgt_taxpayers_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":37000.0,"estimate":13544.740693077443,"calibrationEstimate":13360.691625073552},{"id":"hmrc/cgt_taxpayers_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":5000.0,"estimate":5812.870928764343,"calibrationEstimate":4586.156556129456},{"id":"hmrc/cgt_taxpayers_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":79000.0,"estimate":50256.21771013737,"calibrationEstimate":46247.366893053055},{"id":"hmrc/cgt_taxpayers_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":3000.0,"estimate":2788.615041732788,"calibrationEstimate":2801.031301498413},{"id":"hmrc/cgt_taxpayers_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":74000.0,"estimate":43994.12303459644,"calibrationEstimate":43312.22687217593},{"id":"hmrc/cgt_taxpayers_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":14000.0,"estimate":10944.578097075224,"calibrationEstimate":11016.595499932766},{"id":"hmrc/cgt_taxpayers_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":53000.0,"estimate":24514.88641294837,"calibrationEstimate":24518.887231260534},{"id":"hmrc/cgt_taxpayers_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":8000.0,"estimate":6178.642288446426,"calibrationEstimate":7360.933691740036},{"id":"hmrc/cgt_taxpayers_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":2000.0,"estimate":1832.8698182106016,"calibrationEstimate":1841.0306429862976},{"id":"hmrc/dividend_income_count_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":222000.0,"estimate":229554.611115098,"calibrationEstimate":229451.83542212844},{"id":"hmrc/dividend_income_count_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":115000.0,"estimate":122498.21870449184,"calibrationEstimate":116450.05363586544},{"id":"hmrc/dividend_income_count_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":92000.0,"estimate":95837.3041176498,"calibrationEstimate":94981.9433400631},{"id":"hmrc/dividend_income_count_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":372000.0,"estimate":347627.6361439526,"calibrationEstimate":382888.00691989064},{"id":"hmrc/dividend_income_count_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":19000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_count_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":75000.0,"estimate":76900.66770100594,"calibrationEstimate":77183.34881728888},{"id":"hmrc/dividend_income_count_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":843000.0,"estimate":867481.3310358822,"calibrationEstimate":871528.9038848877},{"id":"hmrc/dividend_income_count_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":49000.0,"estimate":45323.63685941696,"calibrationEstimate":50523.88130879402},{"id":"hmrc/dividend_income_count_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":667000.0,"estimate":703025.5269361734,"calibrationEstimate":686016.7727653384},{"id":"hmrc/dividend_income_count_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":627000.0,"estimate":650857.9845430255,"calibrationEstimate":655597.3248263001},{"id":"hmrc/dividend_income_count_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":32000.0,"estimate":18903.09976196289,"calibrationEstimate":13924.291625976562},{"id":"hmrc/dividend_income_count_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":673194.9035950899,"calibrationEstimate":665673.386961177},{"id":"hmrc/dividend_income_count_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":336000.0,"estimate":343528.61046367884,"calibrationEstimate":346362.1282174885},{"id":"hmrc/dividend_income_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":6870000000.0,"estimate":7095222924.861016,"calibrationEstimate":7114063772.399986},{"id":"hmrc/dividend_income_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":175000000.0,"estimate":192951222.35627183,"calibrationEstimate":173661019.52219003},{"id":"hmrc/dividend_income_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3450000000.0,"estimate":3692746817.185143,"calibrationEstimate":3550464125.442072},{"id":"hmrc/dividend_income_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":855000000.0,"estimate":845993440.2610878,"calibrationEstimate":880729109.8346382},{"id":"hmrc/dividend_income_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":11100000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3700000000.0,"estimate":3828837168.167787,"calibrationEstimate":3797956584.5345135},{"id":"hmrc/dividend_income_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3330000000.0,"estimate":3395614770.515832,"calibrationEstimate":3442786712.469958},{"id":"hmrc/dividend_income_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3430000000.0,"estimate":3496980217.987605,"calibrationEstimate":3447032285.480977},{"id":"hmrc/dividend_income_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":4700000000.0,"estimate":4851171796.430717,"calibrationEstimate":4835994933.974208},{"id":"hmrc/dividend_income_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":8400000000.0,"estimate":8938303214.071344,"calibrationEstimate":8791437358.27874},{"id":"hmrc/dividend_income_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3820000000.0,"estimate":156339333.4031915,"calibrationEstimate":154123616.4699381},{"id":"hmrc/dividend_income_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":12500000000.0,"estimate":13160523430.36148,"calibrationEstimate":12946721023.778358},{"id":"hmrc/dividend_income_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":9440000000.0,"estimate":10052671812.436289,"calibrationEstimate":9911749501.39766},{"id":"hmrc/employment_income_count_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":791000.0,"estimate":843150.2165419757,"calibrationEstimate":826560.6833594143},{"id":"hmrc/employment_income_count_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1360000.0,"estimate":1381056.812882781,"calibrationEstimate":1389994.5120541155},{"id":"hmrc/employment_income_count_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":264000.0,"estimate":283089.4560998976,"calibrationEstimate":272207.9791575968},{"id":"hmrc/employment_income_count_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3100000.0,"estimate":2941183.2826600075,"calibrationEstimate":3131268.366346717},{"id":"hmrc/employment_income_count_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_count_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":180000.0,"estimate":183886.50804448128,"calibrationEstimate":191119.33520907164},{"id":"hmrc/employment_income_count_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":7470000.0,"estimate":7394907.693445265,"calibrationEstimate":7696814.897311896},{"id":"hmrc/employment_income_count_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":93000.0,"estimate":107923.93404233456,"calibrationEstimate":100106.93683218956},{"id":"hmrc/employment_income_count_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":5370000.0,"estimate":5930080.231027737,"calibrationEstimate":5646706.61297296},{"id":"hmrc/employment_income_count_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3500000.0,"estimate":3692167.4615677,"calibrationEstimate":3691681.077874422},{"id":"hmrc/employment_income_count_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":44000.0,"estimate":51452.47190284729,"calibrationEstimate":46618.58825778961},{"id":"hmrc/employment_income_count_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3430000.0,"estimate":3712399.601767317,"calibrationEstimate":3598074.21717},{"id":"hmrc/employment_income_count_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1640000.0,"estimate":1755926.1428863704,"calibrationEstimate":1737828.3395847082},{"id":"hmrc/employment_income_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":82300000000.0,"estimate":91413568331.97716,"calibrationEstimate":89270291253.19441},{"id":"hmrc/employment_income_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17625951516.993526,"calibrationEstimate":17707792264.599216},{"id":"hmrc/employment_income_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":39200000000.0,"estimate":43121325615.01092,"calibrationEstimate":41343663545.83801},{"id":"hmrc/employment_income_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":48600000000.0,"estimate":48521133900.22364,"calibrationEstimate":51842432145.73113},{"id":"hmrc/employment_income_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":35500000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":36600000000.0,"estimate":36151749235.49467,"calibrationEstimate":38383016939.89171},{"id":"hmrc/employment_income_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":172000000000.0,"estimate":177253034078.8408,"calibrationEstimate":185685923740.2714},{"id":"hmrc/employment_income_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":29000000000.0,"estimate":32519523768.135063,"calibrationEstimate":30656152523.340366},{"id":"hmrc/employment_income_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":170000000000.0,"estimate":195144568163.3972,"calibrationEstimate":186138215953.9731},{"id":"hmrc/employment_income_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":139000000000.0,"estimate":152968049441.96802,"calibrationEstimate":152580231489.52524},{"id":"hmrc/employment_income_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":23100000000.0,"estimate":27980302639.935696,"calibrationEstimate":25227641740.95949},{"id":"hmrc/employment_income_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":174000000000.0,"estimate":205992790440.03635,"calibrationEstimate":198611833647.03937},{"id":"hmrc/employment_income_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":118000000000.0,"estimate":132579308720.52338,"calibrationEstimate":130650324064.52023},{"id":"hmrc/private_pension_income_count_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":109000.0,"estimate":111826.396561265,"calibrationEstimate":111957.39517956972},{"id":"hmrc/private_pension_income_count_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1070000.0,"estimate":1108551.329273358,"calibrationEstimate":1078785.8509754688},{"id":"hmrc/private_pension_income_count_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":29000.0,"estimate":32248.34685358405,"calibrationEstimate":31194.256974309683},{"id":"hmrc/private_pension_income_count_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2140000.0,"estimate":2185144.9934265465,"calibrationEstimate":2193027.785250634},{"id":"hmrc/private_pension_income_count_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_count_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":20000.0,"estimate":19481.926417827606,"calibrationEstimate":20442.59133195877},{"id":"hmrc/private_pension_income_count_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2660000.0,"estimate":2728957.4601238817,"calibrationEstimate":2748158.453831658},{"id":"hmrc/private_pension_income_count_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":10000.0,"estimate":10305.892645597458,"calibrationEstimate":10287.247063875198},{"id":"hmrc/private_pension_income_count_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1450000.0,"estimate":1495237.3086971492,"calibrationEstimate":1487679.527325362},{"id":"hmrc/private_pension_income_count_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":779000.0,"estimate":789672.3607301563,"calibrationEstimate":800476.0575524122},{"id":"hmrc/private_pension_income_count_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":4000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/private_pension_income_count_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":652041.4562733769,"calibrationEstimate":663726.9767524898},{"id":"hmrc/private_pension_income_count_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":259000.0,"estimate":272814.0429994464,"calibrationEstimate":263811.19149279594},{"id":"hmrc/private_pension_income_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":5430000000.0,"estimate":5345797328.280829,"calibrationEstimate":5427845559.415028},{"id":"hmrc/private_pension_income_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":4350000000.0,"estimate":4392698634.534128,"calibrationEstimate":4454604694.336378},{"id":"hmrc/private_pension_income_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1810000000.0,"estimate":2014665212.2989984,"calibrationEstimate":1885743095.2678227},{"id":"hmrc/private_pension_income_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":13600000000.0,"estimate":13722906422.39004,"calibrationEstimate":13929122214.140656},{"id":"hmrc/private_pension_income_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":370000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1570000000.0,"estimate":1432815920.066187,"calibrationEstimate":1611508589.181299},{"id":"hmrc/private_pension_income_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":30200000000.0,"estimate":30088725766.291286,"calibrationEstimate":30519628145.421444},{"id":"hmrc/private_pension_income_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1120000000.0,"estimate":1123939358.7086189,"calibrationEstimate":1138804412.324136},{"id":"hmrc/private_pension_income_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":24804135722.331135,"calibrationEstimate":25052549773.94475},{"id":"hmrc/private_pension_income_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":16767697312.554628,"calibrationEstimate":17124010213.256632},{"id":"hmrc/private_pension_income_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":640000000.0,"estimate":212929517.2376833,"calibrationEstimate":216246361.45302057},{"id":"hmrc/private_pension_income_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":17400000000.0,"estimate":17412935832.904785,"calibrationEstimate":17785168436.302177},{"id":"hmrc/private_pension_income_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":9470000000.0,"estimate":9381575140.683311,"calibrationEstimate":9543800186.733513},{"id":"hmrc/property_income_count_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":137000.0,"estimate":148813.48041003942,"calibrationEstimate":142931.6233434677},{"id":"hmrc/property_income_count_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":101000.0,"estimate":105099.43739584088,"calibrationEstimate":105464.95491817594},{"id":"hmrc/property_income_count_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":54000.0,"estimate":50794.22146773338,"calibrationEstimate":56650.596049278975},{"id":"hmrc/property_income_count_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":232000.0,"estimate":209372.79957795143,"calibrationEstimate":241816.69853043556},{"id":"hmrc/property_income_count_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":7000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_count_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":41000.0,"estimate":54315.05261707306,"calibrationEstimate":53937.36399555206},{"id":"hmrc/property_income_count_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":431000.0,"estimate":467851.6959067285,"calibrationEstimate":449476.7096900046},{"id":"hmrc/property_income_count_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":23000.0,"estimate":23663.82657933235,"calibrationEstimate":23704.657059669495},{"id":"hmrc/property_income_count_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":364000.0,"estimate":382716.5398760289,"calibrationEstimate":374246.09900937974},{"id":"hmrc/property_income_count_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":325000.0,"estimate":325976.1076962948,"calibrationEstimate":335583.4356379807},{"id":"hmrc/property_income_count_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":13000.0,"estimate":17876.553053617477,"calibrationEstimate":17956.148045539856},{"id":"hmrc/property_income_count_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":397000.0,"estimate":430521.93068769574,"calibrationEstimate":424372.62478613853},{"id":"hmrc/property_income_count_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":226000.0,"estimate":232345.40000730753,"calibrationEstimate":233399.38142344356},{"id":"hmrc/property_income_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":4845000000.0,"estimate":5066855184.377646,"calibrationEstimate":4887522606.587887},{"id":"hmrc/property_income_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1273000000.0,"estimate":1339419048.615897,"calibrationEstimate":1325054081.26916},{"id":"hmrc/property_income_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":2185000000.0,"estimate":2065674668.677865,"calibrationEstimate":2156647507.286356},{"id":"hmrc/property_income_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":3211000000.0,"estimate":2853691727.4237776,"calibrationEstimate":3390429218.5297017},{"id":"hmrc/property_income_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":834100000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1995000000.0,"estimate":1671991571.1694071,"calibrationEstimate":1648499114.259529},{"id":"hmrc/property_income_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7258000000.0,"estimate":7985707953.629425,"calibrationEstimate":7489906615.405917},{"id":"hmrc/property_income_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1453500000.0,"estimate":1492957063.3158894,"calibrationEstimate":1475921673.247523},{"id":"hmrc/property_income_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7220000000.0,"estimate":7746035188.249613,"calibrationEstimate":7542554031.193575},{"id":"hmrc/property_income_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7182000000.0,"estimate":7333197347.813547,"calibrationEstimate":7434714030.345675},{"id":"hmrc/property_income_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":900600000.0,"estimate":867971878.096458,"calibrationEstimate":858414921.8552154},{"id":"hmrc/property_income_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":10260000000.0,"estimate":10953681291.205402,"calibrationEstimate":10644669240.112694},{"id":"hmrc/property_income_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7163000000.0,"estimate":7576565136.2291155,"calibrationEstimate":7469779867.330262},{"id":"hmrc/salary_sacrifice_contributions","group":"Pension contributions made through salary sacrifice","unit":"gbp","target":24720000000.0,"estimate":28216254605.196114,"calibrationEstimate":29398246248.53289},{"id":"hmrc/salary_sacrifice_employee_nics_relief","group":"Salary sacrifice: employee National Insurance relief","unit":"gbp","target":1030000000.0,"estimate":944128480.1682006,"calibrationEstimate":999028962.9642977},{"id":"hmrc/salary_sacrifice_employer_nics_relief","group":"Salary sacrifice: employer National Insurance relief","unit":"gbp","target":3806521739.1304345,"estimate":3734371027.861629,"calibrationEstimate":3910216698.4462447},{"id":"hmrc/salary_sacrifice_it_relief_additional_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1854000000.0,"estimate":1898508492.1189609,"calibrationEstimate":1916649378.3206043},{"id":"hmrc/salary_sacrifice_it_relief_basic_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1648000000.0,"estimate":1599588723.537782,"calibrationEstimate":1694024183.192099},{"id":"hmrc/salary_sacrifice_it_relief_higher_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":5665000000.0,"estimate":5447769552.639022,"calibrationEstimate":5730857548.478475},{"id":"hmrc/self_employment_income_count_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":85000.0,"estimate":91807.65111103654,"calibrationEstimate":86962.28155221045},{"id":"hmrc/self_employment_income_count_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":444000.0,"estimate":495899.16801068187,"calibrationEstimate":474827.5627250821},{"id":"hmrc/self_employment_income_count_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":40000.0,"estimate":34321.580459713936,"calibrationEstimate":40915.38135620952},{"id":"hmrc/self_employment_income_count_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":651000.0,"estimate":595662.3852557838,"calibrationEstimate":689170.4667981565},{"id":"hmrc/self_employment_income_count_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":11000.0,"estimate":12097.602172851562,"calibrationEstimate":12151.466918945312},{"id":"hmrc/self_employment_income_count_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":34000.0,"estimate":35412.47289919853,"calibrationEstimate":36050.296272322536},{"id":"hmrc/self_employment_income_count_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":961000.0,"estimate":983380.3177103548,"calibrationEstimate":1018702.9982424974},{"id":"hmrc/self_employment_income_count_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21693.4504237175,"calibrationEstimate":21790.04023075104},{"id":"hmrc/self_employment_income_count_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":595000.0,"estimate":660941.2836752534,"calibrationEstimate":627534.0292263627},{"id":"hmrc/self_employment_income_count_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":359000.0,"estimate":380762.3792635501,"calibrationEstimate":372850.943356663},{"id":"hmrc/self_employment_income_count_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":15000.0,"estimate":14243.284211874008,"calibrationEstimate":14306.702473640442},{"id":"hmrc/self_employment_income_count_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":311000.0,"estimate":306679.82031068206,"calibrationEstimate":320621.6229124218},{"id":"hmrc/self_employment_income_count_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":143000.0,"estimate":124774.42495456338,"calibrationEstimate":149187.17315804958},{"id":"hmrc/self_employment_income_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4980000000.0,"estimate":5636157348.958165,"calibrationEstimate":5105386257.929018},{"id":"hmrc/self_employment_income_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4810000000.0,"estimate":5335150863.284746,"calibrationEstimate":5017249946.560387},{"id":"hmrc/self_employment_income_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":3650000000.0,"estimate":2822716021.3632445,"calibrationEstimate":3787992559.540904},{"id":"hmrc/self_employment_income_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8030000000.0,"estimate":6887636692.712797,"calibrationEstimate":8444995513.4183855},{"id":"hmrc/self_employment_income_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":19500000000.0,"estimate":18284049776.80005,"calibrationEstimate":19086845273.0652},{"id":"hmrc/self_employment_income_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4390000000.0,"estimate":4193355831.884856,"calibrationEstimate":4476251711.722663},{"id":"hmrc/self_employment_income_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":15700000000.0,"estimate":17136849507.671976,"calibrationEstimate":16997008937.802246},{"id":"hmrc/self_employment_income_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4840000000.0,"estimate":4906102850.49662,"calibrationEstimate":5121514459.116575},{"id":"hmrc/self_employment_income_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":12600000000.0,"estimate":12605641784.231354,"calibrationEstimate":13432114897.320862},{"id":"hmrc/self_employment_income_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8730000000.0,"estimate":9895760941.4199,"calibrationEstimate":9284919847.082878},{"id":"hmrc/self_employment_income_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":6670000000.0,"estimate":9660794971.01818,"calibrationEstimate":10084969640.620115},{"id":"hmrc/self_employment_income_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8220000000.0,"estimate":7173913950.503402,"calibrationEstimate":8589968865.463936},{"id":"hmrc/self_employment_income_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":5360000000.0,"estimate":4555003804.413581,"calibrationEstimate":5622179443.45382},{"id":"hmrc/state_pension_count_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":74000.0,"estimate":76148.16276955605,"calibrationEstimate":75922.86912208796},{"id":"hmrc/state_pension_count_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1140000.0,"estimate":1244077.6809774786,"calibrationEstimate":1133583.8249693066},{"id":"hmrc/state_pension_count_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":22832.874069213867,"calibrationEstimate":22125.147695302963},{"id":"hmrc/state_pension_count_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2050000.0,"estimate":2048411.1118015796,"calibrationEstimate":2048046.7279076576},{"id":"hmrc/state_pension_count_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_count_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":14000.0,"estimate":13532.682774543762,"calibrationEstimate":14466.858582496645},{"id":"hmrc/state_pension_count_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2320000.0,"estimate":2286300.7773593217,"calibrationEstimate":2301933.0940366536},{"id":"hmrc/state_pension_count_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":8000.0,"estimate":8824.107450008392,"calibrationEstimate":8798.864166736603},{"id":"hmrc/state_pension_count_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1160000.0,"estimate":1172676.499942258,"calibrationEstimate":1168167.4859495014},{"id":"hmrc/state_pension_count_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":568000.0,"estimate":575256.3978573233,"calibrationEstimate":577815.7180559486},{"id":"hmrc/state_pension_count_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":3000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/state_pension_count_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":441000.0,"estimate":438393.6089271605,"calibrationEstimate":441668.3965354562},{"id":"hmrc/state_pension_count_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":176000.0,"estimate":175826.47564059496,"calibrationEstimate":177026.6087565422},{"id":"hmrc/state_pension_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":847000000.0,"estimate":854450089.7419467,"calibrationEstimate":844536099.8908701},{"id":"hmrc/state_pension_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":11800000000.0,"estimate":13670650067.511356,"calibrationEstimate":12372946997.791916},{"id":"hmrc/state_pension_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":265000000.0,"estimate":282114083.0780946,"calibrationEstimate":271975929.42016745},{"id":"hmrc/state_pension_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":22200000000.0,"estimate":23998719050.76559,"calibrationEstimate":23797516261.50798},{"id":"hmrc/state_pension_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":20000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":179000000.0,"estimate":172983951.4445731,"calibrationEstimate":182038746.25456983},{"id":"hmrc/state_pension_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":26825875119.04113,"calibrationEstimate":26781706814.29911},{"id":"hmrc/state_pension_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":96000000.0,"estimate":91457269.84436607,"calibrationEstimate":90425861.10211164},{"id":"hmrc/state_pension_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":12300000000.0,"estimate":13220363004.652786,"calibrationEstimate":13047202267.625652},{"id":"hmrc/state_pension_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":6020000000.0,"estimate":6333296578.738886,"calibrationEstimate":6303111646.291419},{"id":"hmrc/state_pension_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":43000000.0,"estimate":56836446.07211137,"calibrationEstimate":56614218.6125021},{"id":"hmrc/state_pension_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":4660000000.0,"estimate":4958283295.041033,"calibrationEstimate":4957592229.717251},{"id":"hmrc/state_pension_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":1890000000.0,"estimate":1925819081.9875,"calibrationEstimate":1921803586.7496536},{"id":"housing/rent_private","group":"Private and social rent paid","unit":"gbp","target":89035200000.0,"estimate":94232257148.01346,"calibrationEstimate":89015844391.93204},{"id":"housing/rent_social","group":"Private and social rent paid","unit":"gbp","target":30680000000.0,"estimate":36221593791.554085,"calibrationEstimate":33687842434.35097},{"id":"housing/total_mortgage","group":"Mortgage payments","unit":"gbp","target":99000000000.0,"estimate":112166702689.27348,"calibrationEstimate":113284488090.43108},{"id":"nts/households_no_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":6512000.0,"estimate":6886208.031410232,"calibrationEstimate":6916868.755762011},{"id":"nts/households_one_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":13024000.0,"estimate":15020756.833521975,"calibrationEstimate":15087636.514661329},{"id":"nts/households_two_plus_vehicles","group":"Households with no, one, and two or more vehicles","unit":"count","target":10064000.0,"estimate":9336322.44734241,"calibrationEstimate":9377892.274253026},{"id":"obr/attendance_allowance","group":"Attendance Allowance spending","unit":"gbp","target":8492497075.074617,"estimate":8738849002.944973,"calibrationEstimate":8777451467.048658},{"id":"obr/capital_gains_tax","group":"Capital gains tax receipts","unit":"gbp","target":21801546197.09165,"estimate":12717204530.457554,"calibrationEstimate":12569294855.576912},{"id":"obr/carers_allowance","group":"Carer's Allowance spending","unit":"gbp","target":4569403813.760573,"estimate":4546109316.312273,"calibrationEstimate":4668875054.2856655},{"id":"obr/child_benefit","group":"Child Benefit spending","unit":"gbp","target":13389272724.45089,"estimate":16225320972.639776,"calibrationEstimate":16338080740.281445},{"id":"obr/council_tax","group":"Council tax receipts, UK and by nation","unit":"gbp","target":50925163826.30539,"estimate":48221464271.11403,"calibrationEstimate":45300509759.81859},{"id":"obr/council_tax_england","group":"Council tax receipts, UK and by nation","unit":"gbp","target":44117237614.71528,"estimate":41824069103.301254,"calibrationEstimate":39205804365.029305},{"id":"obr/council_tax_scotland","group":"Council tax receipts, UK and by nation","unit":"gbp","target":3051227494.93594,"estimate":3763028655.037571,"calibrationEstimate":3638929999.068658},{"id":"obr/council_tax_wales","group":"Council tax receipts, UK and by nation","unit":"gbp","target":2400769752.36827,"estimate":2634366512.7752094,"calibrationEstimate":2455775395.7206206},{"id":"obr/domestic_rates","group":"Northern Ireland domestic rates receipts","unit":"gbp","target":494000000.0,"estimate":584068659.0970445,"calibrationEstimate":560119544.8439525},{"id":"obr/esa","group":"Incapacity benefits spending, scored against income-related ESA","unit":"gbp","target":7206287181.538654,"estimate":7343384263.9225025,"calibrationEstimate":7378653735.424012},{"id":"obr/fuel_duties","group":"Fuel duty receipts","unit":"gbp","target":24241874775.213375,"estimate":24533360153.833393,"calibrationEstimate":22246272742.96544},{"id":"obr/income_tax","group":"Income tax receipts","unit":"gbp","target":331437583074.4429,"estimate":301478832377.7914,"calibrationEstimate":296476469549.9654},{"id":"obr/jobseekers_allowance","group":"Jobseeker's Allowance spending","unit":"gbp","target":280558748.04472804,"estimate":299505958.51263523,"calibrationEstimate":300361802.45431787},{"id":"obr/ni","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":200081395082.7125,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employee","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":49544363784.26465,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employer","group":"Employer National Insurance receipts","unit":"gbp","target":145324007512.71753,"estimate":154541037552.12073,"calibrationEstimate":152621840639.53052},{"id":"obr/ni_self_employed","group":"Self-employed National Insurance receipts","unit":"gbp","target":2902816090.4147716,"estimate":2609995976.5472517,"calibrationEstimate":2776828111.0540338},{"id":"obr/pip","group":"Personal Independence Payment spending","unit":"gbp","target":36910059270.5278,"estimate":26930742886.35225,"calibrationEstimate":27048283769.854137},{"id":"obr/private_school_students","group":"Pupils at independent schools","unit":"count","target":557000.0,"estimate":761425.2593497187,"calibrationEstimate":577547.7305030972},{"id":"obr/salary_sacrifice_users_above_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":3379200.0,"estimate":3416752.2773837894,"calibrationEstimate":3473463.5649632365},{"id":"obr/salary_sacrifice_users_below_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":4403200.0,"estimate":4567515.046537325,"calibrationEstimate":4546353.57234703},{"id":"obr/salary_sacrifice_users_total","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":7884800.0,"estimate":7984267.323921114,"calibrationEstimate":8019817.137310267},{"id":"obr/sdlt","group":"Stamp Duty Land Tax receipts","unit":"gbp","target":15406516698.785578,"estimate":16316115361.020012,"calibrationEstimate":15970017665.29672},{"id":"obr/state_pension","group":"State Pension spending","unit":"gbp","target":146185954351.57382,"estimate":123608848585.71336,"calibrationEstimate":123129508170.07487},{"id":"obr/statutory_maternity_pay","group":"Statutory Maternity Pay spending","unit":"gbp","target":3194800881.520547,"estimate":3337974284.302048,"calibrationEstimate":3347441886.5270486},{"id":"obr/tv_licence_fee","group":"TV licence fee receipts","unit":"gbp","target":3872000000.0,"estimate":4306586174.401851,"calibrationEstimate":4326303524.671558},{"id":"obr/universal_credit","group":"Universal Credit spending","unit":"gbp","target":79286349139.54411,"estimate":77648740273.65004,"calibrationEstimate":76378495756.28294},{"id":"obr/vat","group":"VAT receipts","unit":"gbp","target":180168938685.4179,"estimate":317136171663.4592,"calibrationEstimate":318035670462.85565},{"id":"obr/winter_fuel_allowance","group":"Winter Fuel Payment spending","unit":"gbp","target":1911040880.4619167,"estimate":1703858030.6710331,"calibrationEstimate":1712963122.996131},{"id":"ons/corporate_land_value","group":"Corporate land value","unit":"gbp","target":2057128451236.5017,"estimate":2058648990687.032,"calibrationEstimate":2509581347940.138},{"id":"ons/couple_3_plus_children_households","group":"Households by family type","unit":"count","target":931000.0,"estimate":939145.8302041292,"calibrationEstimate":943327.3600209357},{"id":"ons/couple_no_children_households","group":"Households by family type","unit":"count","target":8119000.0,"estimate":12928875.782972127,"calibrationEstimate":12986441.399504378},{"id":"ons/couple_non_dependent_children_only_households","group":"Households by family type","unit":"count","target":1848000.0,"estimate":1526672.7015325427,"calibrationEstimate":1533470.184832275},{"id":"ons/couple_under_3_children_households","group":"Households by family type","unit":"count","target":5439000.0,"estimate":5319173.021537095,"calibrationEstimate":5342856.555537075},{"id":"ons/east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":726000.0,"estimate":770230.939494133,"calibrationEstimate":773660.3856868744},{"id":"ons/east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":740606.7134604454,"calibrationEstimate":743904.2511110306},{"id":"ons/east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":749000.0,"estimate":756168.8946352005,"calibrationEstimate":759535.7300329208},{"id":"ons/east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":890000.0,"estimate":868918.0768876076,"calibrationEstimate":872786.9326715469},{"id":"ons/east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":851000.0,"estimate":843856.841021061,"calibrationEstimate":847614.101943016},{"id":"ons/east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":867000.0,"estimate":885889.451540947,"calibrationEstimate":889833.8577439785},{"id":"ons/east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":746000.0,"estimate":717175.1693952084,"calibrationEstimate":720368.3822858334},{"id":"ons/east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":643000.0,"estimate":602970.5396468639,"calibrationEstimate":605655.2605879307},{"id":"ons/east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":379000.0,"estimate":380440.2481365204,"calibrationEstimate":382134.1495399475},{"id":"ons/east_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":532000.0,"estimate":560764.1695084572,"calibrationEstimate":563260.9665122032},{"id":"ons/east_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":585000.0,"estimate":591315.0727558136,"calibrationEstimate":593947.8992090225},{"id":"ons/east_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":632000.0,"estimate":646598.6443405151,"calibrationEstimate":649477.6217494011},{"id":"ons/east_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":669000.0,"estimate":666351.030916214,"calibrationEstimate":669317.9424901009},{"id":"ons/east_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":621000.0,"estimate":627317.6343212128,"calibrationEstimate":630110.758951664},{"id":"ons/east_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":681000.0,"estimate":705804.5902404785,"calibrationEstimate":708947.1764411926},{"id":"ons/east_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":592000.0,"estimate":583389.1525392532,"calibrationEstimate":585986.6843750477},{"id":"ons/east_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":500000.0,"estimate":480258.3571476936,"calibrationEstimate":482396.70089006424},{"id":"ons/east_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":273000.0,"estimate":274763.10668992996,"calibrationEstimate":275986.48183584213},{"id":"ons/female_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1698816.0,"estimate":1839466.5737319589,"calibrationEstimate":1847656.770164296},{"id":"ons/female_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2041879.0,"estimate":1973291.4082101283,"calibrationEstimate":1982077.4540842024},{"id":"ons/female_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2036402.0,"estimate":1976182.4684885591,"calibrationEstimate":1984981.3977429569},{"id":"ons/female_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2033478.0,"estimate":2091247.116039395,"calibrationEstimate":2100558.3663989007},{"id":"ons/female_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2258028.0,"estimate":2327819.72517778,"calibrationEstimate":2338184.332134992},{"id":"ons/female_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2443559.0,"estimate":2426926.0614604205,"calibrationEstimate":2437731.887076691},{"id":"ons/female_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2497122.0,"estimate":2407409.1889739037,"calibrationEstimate":2418128.139254883},{"id":"ons/female_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2356214.0,"estimate":2354626.8180732727,"calibrationEstimate":2365110.7586767823},{"id":"ons/female_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2135556.0,"estimate":2146838.039360285,"calibrationEstimate":2156396.7979279608},{"id":"ons/female_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2206473.0,"estimate":2297529.9983963966,"calibrationEstimate":2307759.7106489986},{"id":"ons/female_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2340737.0,"estimate":2437237.7694670856,"calibrationEstimate":2448089.5275103897},{"id":"ons/female_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1918180.0,"estimate":2070228.5422207713,"calibrationEstimate":2079446.1990244535},{"id":"ons/female_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2248908.0,"estimate":2073595.834327519,"calibrationEstimate":2082828.495167717},{"id":"ons/female_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1890892.0,"estimate":1781039.4390323013,"calibrationEstimate":1788969.4821397066},{"id":"ons/female_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1619328.0,"estimate":1592091.0710516274,"calibrationEstimate":1599179.8343619704},{"id":"ons/female_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1575830.0,"estimate":1541204.8275257498,"calibrationEstimate":1548067.0152519343},{"id":"ons/female_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1064043.0,"estimate":2664726.503213957,"calibrationEstimate":2676591.14880161},{"id":"ons/female_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":766765.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/household_land_value","group":"Household land value","unit":"gbp","target":5042871548763.499,"estimate":5198482896887.592,"calibrationEstimate":5215371409340.588},{"id":"ons/household_land_value/EAST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":304799621177.5439,"estimate":311792425913.57996,"calibrationEstimate":312988388945.29297},{"id":"ons/household_land_value/EAST_OF_ENGLAND","group":"Household land value by region","unit":"gbp","target":542672059385.554,"estimate":546010650314.9476,"calibrationEstimate":548396090228.3013},{"id":"ons/household_land_value/LONDON","group":"Household land value by region","unit":"gbp","target":1188167933642.289,"estimate":1203185297593.549,"calibrationEstimate":1208464858198.298},{"id":"ons/household_land_value/NORTH_EAST","group":"Household land value by region","unit":"gbp","target":119603822538.99867,"estimate":120248252547.38388,"calibrationEstimate":120670781170.64792},{"id":"ons/household_land_value/NORTH_WEST","group":"Household land value by region","unit":"gbp","target":422892569458.29254,"estimate":432857394071.48694,"calibrationEstimate":433189776637.8822},{"id":"ons/household_land_value/SCOTLAND","group":"Household land value by region","unit":"gbp","target":280395193712.8084,"estimate":276640745849.4535,"calibrationEstimate":277860896632.4937},{"id":"ons/household_land_value/SOUTH_EAST","group":"Household land value by region","unit":"gbp","target":885848048153.7532,"estimate":895724028534.7693,"calibrationEstimate":899487561852.2374},{"id":"ons/household_land_value/SOUTH_WEST","group":"Household land value by region","unit":"gbp","target":456726035827.05096,"estimate":465653362247.4888,"calibrationEstimate":467005989225.08545},{"id":"ons/household_land_value/WALES","group":"Household land value by region","unit":"gbp","target":179320185054.4999,"estimate":188184118702.406,"calibrationEstimate":188687411488.70615},{"id":"ons/household_land_value/WEST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":364340113693.65784,"estimate":378739467069.95465,"calibrationEstimate":378904015968.6325},{"id":"ons/household_land_value/YORKSHIRE","group":"Household land value by region","unit":"gbp","target":298105966119.05054,"estimate":305323058887.67285,"calibrationEstimate":305558366397.4229},{"id":"ons/land_value","group":"Total land value","unit":"gbp","target":7100000000000.0,"estimate":7257131889855.828,"calibrationEstimate":7724952750742.861},{"id":"ons/lfs_employees","group":"Employees and self-employed people","unit":"count","target":29590000.0,"estimate":30415831.925368626,"calibrationEstimate":30551257.921766207},{"id":"ons/lfs_self_employed","group":"Employees and self-employed people","unit":"count","target":4395000.0,"estimate":4403629.709998399,"calibrationEstimate":4423236.792703286},{"id":"ons/london_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1042000.0,"estimate":1131491.4573817253,"calibrationEstimate":1136529.397939682},{"id":"ons/london_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1038000.0,"estimate":1037544.3274979593,"calibrationEstimate":1042163.9750480652},{"id":"ons/london_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1470000.0,"estimate":1451632.7812190056,"calibrationEstimate":1458096.1668362615},{"id":"ons/london_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1585000.0,"estimate":1492286.394011021,"calibrationEstimate":1498930.7603902817},{"id":"ons/london_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1314000.0,"estimate":1286887.5299487114,"calibrationEstimate":1292617.3732566831},{"id":"ons/london_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1078000.0,"estimate":1097971.444237709,"calibrationEstimate":1102860.1428632736},{"id":"ons/london_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":778000.0,"estimate":750930.0480790138,"calibrationEstimate":754273.5447840691},{"id":"ons/london_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":509000.0,"estimate":486360.6602535248,"calibrationEstimate":488526.16434693336},{"id":"ons/london_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":304000.0,"estimate":303559.92478847504,"calibrationEstimate":304911.5145406723},{"id":"ons/lone_households_over_65","group":"Households by family type","unit":"count","target":4254000.0,"estimate":5454455.018509299,"calibrationEstimate":5478740.884796768},{"id":"ons/lone_households_under_65","group":"Households by family type","unit":"count","target":4316000.0,"estimate":5250786.593510598,"calibrationEstimate":5274165.638094544},{"id":"ons/lone_parent_dependent_children_households","group":"Households by family type","unit":"count","target":1835000.0,"estimate":2798771.157480851,"calibrationEstimate":2811232.6388974935},{"id":"ons/lone_parent_non_dependent_children_households","group":"Households by family type","unit":"count","target":1204000.0,"estimate":1057331.2494069785,"calibrationEstimate":1062038.9998702407},{"id":"ons/male_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1784490.0,"estimate":1917864.3619012684,"calibrationEstimate":1926403.6264294984},{"id":"ons/male_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2143309.0,"estimate":2053535.895194322,"calibrationEstimate":2062679.227788061},{"id":"ons/male_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2149930.0,"estimate":2047459.0866241455,"calibrationEstimate":2056575.355904788},{"id":"ons/male_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2136737.0,"estimate":2167020.575371682,"calibrationEstimate":2176669.196182668},{"id":"ons/male_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2246892.0,"estimate":2353607.326105356,"calibrationEstimate":2364086.752364412},{"id":"ons/male_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2323977.0,"estimate":2306814.134287983,"calibrationEstimate":2317085.1808172166},{"id":"ons/male_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2325815.0,"estimate":2250484.0878130943,"calibrationEstimate":2260504.326561913},{"id":"ons/male_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2208064.0,"estimate":2202735.8511286825,"calibrationEstimate":2212543.500215322},{"id":"ons/male_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2040636.0,"estimate":2050379.9052236676,"calibrationEstimate":2059509.1825666577},{"id":"ons/male_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2119462.0,"estimate":2209499.6434261203,"calibrationEstimate":2219337.4005533904},{"id":"ons/male_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2234921.0,"estimate":2360950.5306516886,"calibrationEstimate":2371462.6275383234},{"id":"ons/male_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2011903.0,"estimate":2176776.512379959,"calibrationEstimate":2186468.5711850673},{"id":"ons/male_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2138720.0,"estimate":1998740.968729228,"calibrationEstimate":2007640.3199545296},{"id":"ons/male_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1785048.0,"estimate":1707467.9938359708,"calibrationEstimate":1715070.4678450525},{"id":"ons/male_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1472190.0,"estimate":1503642.8762648106,"calibrationEstimate":1510337.8170289395},{"id":"ons/male_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1370172.0,"estimate":1395090.3332718164,"calibrationEstimate":1401301.957366705},{"id":"ons/male_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":853423.0,"estimate":1009312.8459606916,"calibrationEstimate":1013806.7878290116},{"id":"ons/male_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":524918.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/multi_family_households","group":"Households by family type","unit":"count","target":244000.0,"estimate":3137645.9858644456,"calibrationEstimate":3151616.293736607},{"id":"ons/north_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":281000.0,"estimate":292283.856153965,"calibrationEstimate":293585.24245643616},{"id":"ons/north_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":311000.0,"estimate":316212.322912693,"calibrationEstimate":317620.25323677063},{"id":"ons/north_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":352029.96956157684,"calibrationEstimate":353597.3771824837},{"id":"ons/north_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":356000.0,"estimate":359699.50099754333,"calibrationEstimate":361301.0569238663},{"id":"ons/north_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":323000.0,"estimate":327139.90297079086,"calibrationEstimate":328596.4853038788},{"id":"ons/north_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":369000.0,"estimate":378836.79312348366,"calibrationEstimate":380523.55742669106},{"id":"ons/north_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":353000.0,"estimate":351102.3077030182,"calibrationEstimate":352665.5838704109},{"id":"ons/north_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":278000.0,"estimate":273663.8987689018,"calibrationEstimate":274882.38518714905},{"id":"ons/north_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":153000.0,"estimate":154565.45491456983,"calibrationEstimate":155253.65523910522},{"id":"ons/north_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":847000.0,"estimate":907878.5675086976,"calibrationEstimate":911920.8865337372},{"id":"ons/north_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":901000.0,"estimate":905132.2707009315,"calibrationEstimate":909162.354482174},{"id":"ons/north_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":986000.0,"estimate":1002199.312697649,"calibrationEstimate":1006661.592706442},{"id":"ons/north_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1056000.0,"estimate":1021326.8112883568,"calibrationEstimate":1025874.23654747},{"id":"ons/north_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":938000.0,"estimate":930422.6213030816,"calibrationEstimate":934565.3206562996},{"id":"ons/north_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1011000.0,"estimate":1030291.0328922272,"calibrationEstimate":1034878.3873639108},{"id":"ons/north_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":888000.0,"estimate":844032.2021713257,"calibrationEstimate":847790.2315773964},{"id":"ons/north_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":715000.0,"estimate":663851.5968799591,"calibrationEstimate":666807.391629219},{"id":"ons/north_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":399000.0,"estimate":395580.82154369354,"calibrationEstimate":397342.1398239136},{"id":"ons/northern_ireland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":234000.0,"estimate":238573.53098157048,"calibrationEstimate":239635.77313242853},{"id":"ons/northern_ireland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":244000.0,"estimate":247808.06932733953,"calibrationEstimate":248911.4319036454},{"id":"ons/northern_ireland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":230000.0,"estimate":232551.80645041168,"calibrationEstimate":233587.23901306093},{"id":"ons/northern_ireland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":264000.0,"estimate":269491.1257661581,"calibrationEstimate":270691.02561856806},{"id":"ons/northern_ireland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":254000.0,"estimate":257494.5271097273,"calibrationEstimate":258641.01725278795},{"id":"ons/northern_ireland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":257000.0,"estimate":258119.9789763689,"calibrationEstimate":259269.25098092857},{"id":"ons/northern_ireland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":224000.0,"estimate":232054.6853407323,"calibrationEstimate":233087.90260344744},{"id":"ons/northern_ireland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":165000.0,"estimate":170104.10925373435,"calibrationEstimate":170861.4931807816},{"id":"ons/northern_ireland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":93000.0,"estimate":98419.55169644952,"calibrationEstimate":98857.76071341336},{"id":"ons/public_sector_employment","group":"Public sector employment","unit":"count","target":5940000.0,"estimate":6304094.97840783,"calibrationEstimate":6332163.859895036},{"id":"ons/savings_interest_income","group":"Household savings interest","unit":"gbp","target":95477000000.0,"estimate":80129221535.43391,"calibrationEstimate":79246943861.21257},{"id":"ons/scotland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":526000.0,"estimate":647600.8949885368,"calibrationEstimate":650484.328666091},{"id":"ons/scotland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":597000.0,"estimate":659703.4958338141,"calibrationEstimate":662640.8183342814},{"id":"ons/scotland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":709000.0,"estimate":740762.218244791,"calibrationEstimate":744060.4591063857},{"id":"ons/scotland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":736000.0,"estimate":773940.4599794149,"calibrationEstimate":777386.4158806205},{"id":"ons/scotland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":691000.0,"estimate":725636.149921596,"calibrationEstimate":728867.0354478359},{"id":"ons/scotland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":788000.0,"estimate":794386.7686737776,"calibrationEstimate":797923.7666577101},{"id":"ons/scotland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":727000.0,"estimate":654615.490395546,"calibrationEstimate":657530.1593027711},{"id":"ons/scotland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":546000.0,"estimate":518987.09887486696,"calibrationEstimate":521297.8820120692},{"id":"ons/scotland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":297000.0,"estimate":309508.9369607568,"calibrationEstimate":310887.0211943984},{"id":"ons/scotland_babies_under_1","group":"Population by region and ten-year age band","unit":"count","target":46000.0,"estimate":48106.95701152086,"calibrationEstimate":48321.15257507563},{"id":"ons/scotland_children_under_16","group":"Population by region and ten-year age band","unit":"count","target":892000.0,"estimate":956540.2894876004,"calibrationEstimate":960799.27374506},{"id":"ons/scotland_households_3plus_children","group":"Scottish households with three or more children","unit":"count","target":82000.0,"estimate":86080.43200981617,"calibrationEstimate":86463.70450717211},{"id":"ons/south_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1039000.0,"estimate":1114232.5491027832,"calibrationEstimate":1119193.650694847},{"id":"ons/south_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1114000.0,"estimate":1104025.5058307648,"calibrationEstimate":1108941.1569581032},{"id":"ons/south_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1093000.0,"estimate":1101930.081794262,"calibrationEstimate":1106836.4138650894},{"id":"ons/south_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1283000.0,"estimate":1222137.9367275238,"calibrationEstimate":1227579.4830198288},{"id":"ons/south_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1273000.0,"estimate":1233437.5373487473,"calibrationEstimate":1238929.3965697289},{"id":"ons/south_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1287000.0,"estimate":1315585.8211021423,"calibrationEstimate":1321443.4466571808},{"id":"ons/south_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":1089000.0,"estimate":1013925.5353107452,"calibrationEstimate":1018440.030857563},{"id":"ons/south_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":927000.0,"estimate":834819.8441057205,"calibrationEstimate":838536.8671865463},{"id":"ons/south_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":559000.0,"estimate":542841.088037014,"calibrationEstimate":545258.0736494064},{"id":"ons/south_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":576000.0,"estimate":604655.1198301315,"calibrationEstimate":607347.3345069885},{"id":"ons/south_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":646000.0,"estimate":654375.9588766098,"calibrationEstimate":657289.5604567528},{"id":"ons/south_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":694000.0,"estimate":709386.0963587761,"calibrationEstimate":712544.6284022331},{"id":"ons/south_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":732462.76395607,"calibrationEstimate":735724.0381350517},{"id":"ons/south_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":704000.0,"estimate":701804.148378849,"calibrationEstimate":704928.919002533},{"id":"ons/south_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":794000.0,"estimate":812267.9054384232,"calibrationEstimate":815884.5122971535},{"id":"ons/south_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":714519.8350300789,"calibrationEstimate":717701.2218279839},{"id":"ons/south_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":662000.0,"estimate":619540.1825652122,"calibrationEstimate":622298.66963768},{"id":"ons/south_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":388000.0,"estimate":382782.8248333931,"calibrationEstimate":384487.1622633934},{"id":"ons/tenure_england_owned_outright","group":"Dwellings by tenure, by nation","unit":"count","target":8374612.0,"estimate":8764165.854846716,"calibrationEstimate":8803188.14887619},{"id":"ons/tenure_england_owned_with_mortgage","group":"Dwellings by tenure, by nation","unit":"count","target":7667051.0,"estimate":7360170.187984467,"calibrationEstimate":7392941.221483231},{"id":"ons/tenure_england_rented_privately","group":"Dwellings by tenure, by nation","unit":"count","target":5299840.0,"estimate":5789919.019839287,"calibrationEstimate":5815698.559220791},{"id":"ons/tenure_england_social_rent","group":"Dwellings by tenure, by nation","unit":"count","target":4274613.0,"estimate":4272671.371180296,"calibrationEstimate":4291695.364801168},{"id":"ons/tenure_england_total","group":"Dwellings by tenure, by nation","unit":"count","target":25616116.0,"estimate":26186926.433850765,"calibrationEstimate":26303523.29438138},{"id":"ons/uk_population","group":"UK population, in total and by sex and five-year age band","unit":"count","target":69502341.0,"estimate":69712844.3129216,"calibrationEstimate":70023239.6145},{"id":"ons/unrelated_adult_households","group":"Households by family type","unit":"count","target":813000.0,"estimate":1057450.6047298163,"calibrationEstimate":1062158.8866242766},{"id":"ons/wales_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":325000.0,"estimate":348106.06233742833,"calibrationEstimate":349655.9994878471},{"id":"ons/wales_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":362000.0,"estimate":377852.1347847581,"calibrationEstimate":379534.51495823264},{"id":"ons/wales_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":389000.0,"estimate":421177.7128336728,"calibrationEstimate":423053.0000615418},{"id":"ons/wales_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":408000.0,"estimate":408298.51544573903,"calibrationEstimate":410116.45715788007},{"id":"ons/wales_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":374000.0,"estimate":386225.7205041647,"calibrationEstimate":387945.3860552907},{"id":"ons/wales_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":432000.0,"estimate":453846.15008094907,"calibrationEstimate":455866.8945379853},{"id":"ons/wales_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":407000.0,"estimate":411359.2729103267,"calibrationEstimate":413190.8414015472},{"id":"ons/wales_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":340773.34702190757,"calibrationEstimate":342290.63411542773},{"id":"ons/wales_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":190000.0,"estimate":193830.5397951007,"calibrationEstimate":194693.5690819025},{"id":"ons/west_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":700000.0,"estimate":739812.0893673897,"calibrationEstimate":743106.0936331749},{"id":"ons/west_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":750032.0111775398,"calibrationEstimate":753371.5123896599},{"id":"ons/west_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":774000.0,"estimate":782119.0841474533,"calibrationEstimate":785601.4645900726},{"id":"ons/west_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":834000.0,"estimate":829667.6420812607,"calibrationEstimate":833361.7243332863},{"id":"ons/west_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":758000.0,"estimate":759738.0727472305,"calibrationEstimate":763120.7843537331},{"id":"ons/west_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":800000.0,"estimate":820177.6517162323,"calibrationEstimate":823829.4666743279},{"id":"ons/west_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":685000.0,"estimate":663277.1520633698,"calibrationEstimate":666230.3836565018},{"id":"ons/west_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":570000.0,"estimate":543874.736948967,"calibrationEstimate":546296.3349237442},{"id":"ons/west_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":337000.0,"estimate":342024.45200538635,"calibrationEstimate":343547.31078481674},{"id":"ons/yorkshire_and_the_humber_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":618000.0,"estimate":648706.7535791397,"calibrationEstimate":651595.1075530052},{"id":"ons/yorkshire_and_the_humber_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":666000.0,"estimate":665860.9753584862,"calibrationEstimate":668825.70743227},{"id":"ons/yorkshire_and_the_humber_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":733000.0,"estimate":743138.1404109001,"calibrationEstimate":746446.95353508},{"id":"ons/yorkshire_and_the_humber_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":764000.0,"estimate":747053.2144784927,"calibrationEstimate":750379.460542202},{"id":"ons/yorkshire_and_the_humber_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":686000.0,"estimate":674619.9282107353,"calibrationEstimate":677623.6605932713},{"id":"ons/yorkshire_and_the_humber_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":745000.0,"estimate":752040.3539185524,"calibrationEstimate":755388.8066067696},{"id":"ons/yorkshire_and_the_humber_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":658000.0,"estimate":624463.3849864006,"calibrationEstimate":627243.798564434},{"id":"ons/yorkshire_and_the_humber_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":536000.0,"estimate":496824.7366466522,"calibrationEstimate":499036.8403120041},{"id":"ons/yorkshire_and_the_humber_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":302000.0,"estimate":295722.3997733593,"calibrationEstimate":297039.09796380997},{"id":"slc/adult_dependants_grant_recipients","group":"Adult Dependants' Grant: recipients and spending","unit":"count","target":18611.0,"estimate":10488.390624523165,"calibrationEstimate":17919.595499515533},{"id":"slc/adult_dependants_grant_spend","group":"Adult Dependants' Grant: recipients and spending","unit":"gbp","target":55364917.0,"estimate":37181344.76393461,"calibrationEstimate":63524966.045782566},{"id":"slc/maintenance_loan_recipients","group":"Maintenance loans: recipients and spending","unit":"count","target":1159761.0,"estimate":1115007.2203326223,"calibrationEstimate":1119971.7707395554},{"id":"slc/maintenance_loan_spend","group":"Maintenance loans: recipients and spending","unit":"gbp","target":8591659718.0,"estimate":9243921660.334114,"calibrationEstimate":9310652595.32858},{"id":"slc/parents_learning_allowance_recipients","group":"Parents' Learning Allowance: recipients and spending","unit":"count","target":99645.0,"estimate":98858.3031744957,"calibrationEstimate":99298.4696264267},{"id":"slc/parents_learning_allowance_spend","group":"Parents' Learning Allowance: recipients and spending","unit":"gbp","target":181421659.0,"estimate":200089205.6251793,"calibrationEstimate":200980102.52388763},{"id":"slc/plan_2_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":3985000.0,"estimate":4365258.374378204,"calibrationEstimate":4384694.640698433},{"id":"slc/plan_2_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":8940000.0,"estimate":6805751.482197762,"calibrationEstimate":6836054.020182133},{"id":"slc/plan_5_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":0.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/plan_5_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":10000.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/student_loan_repayment/england","group":"Student loan repayments, by nation and plan","unit":"gbp","target":5018231834.95,"estimate":5119208721.2338,"calibrationEstimate":4961058450.910856},{"id":"slc/student_loan_repayment/england/plan_1","group":"Student loan repayments, by nation and plan","unit":"gbp","target":1852699178.55,"estimate":1953753088.251544,"calibrationEstimate":1935645687.413804},{"id":"slc/student_loan_repayment/england/plan_2","group":"Student loan repayments, by nation and plan","unit":"gbp","target":2778253361.64,"estimate":3163065937.3426647,"calibrationEstimate":3023410861.2912726},{"id":"slc/student_loan_repayment/england/plan_5","group":"Student loan repayments, by nation and plan","unit":"gbp","target":40869580.81,"estimate":2389695.639591503,"calibrationEstimate":2001902.205781548},{"id":"slc/student_loan_repayment/england/postgraduate","group":"Student loan repayments, by nation and plan","unit":"gbp","target":346409713.95,"estimate":0.0,"calibrationEstimate":0.0},{"id":"slc/student_loan_repayment/northern_ireland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":181700000.0,"estimate":195403289.8778463,"calibrationEstimate":188624377.49343297},{"id":"slc/student_loan_repayment/scotland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":203300000.0,"estimate":221132909.0659362,"calibrationEstimate":213564948.46889892},{"id":"slc/student_loan_repayment/wales","group":"Student loan repayments, by nation and plan","unit":"gbp","target":229100000.0,"estimate":247405370.84255865,"calibrationEstimate":238897353.28110468},{"id":"sss/scottish_child_payment","group":"Scottish Child Payment spending","unit":"gbp","target":471000000.0,"estimate":497726869.8419191,"calibrationEstimate":499942991.15633214},{"id":"voa/council_tax/EAST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":804340.0,"estimate":812220.3750844002,"calibrationEstimate":815836.7769055367},{"id":"voa/council_tax/EAST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":505610.0,"estimate":512867.9080028534,"calibrationEstimate":515151.44179964066},{"id":"voa/council_tax/EAST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":403840.0,"estimate":409527.9134449959,"calibrationEstimate":411351.3289835453},{"id":"voa/council_tax/EAST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":247850.0,"estimate":252952.60029935837,"calibrationEstimate":254078.8680486679},{"id":"voa/council_tax/EAST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":154970.0,"estimate":158834.98216819763,"calibrationEstimate":159542.19471597672},{"id":"voa/council_tax/EAST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":73920.0,"estimate":76145.44448757172,"calibrationEstimate":76484.48072099686},{"id":"voa/council_tax/EAST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":39400.0,"estimate":40296.69438171387,"calibrationEstimate":40476.11449241638},{"id":"voa/council_tax/EAST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":3480.0,"estimate":3560.398073196411,"calibrationEstimate":3576.250594139099},{"id":"voa/council_tax/EAST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2233400.0,"estimate":2266406.315942287,"calibrationEstimate":2276497.4562609196},{"id":"voa/council_tax/EAST_OF_ENGLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":403180.0,"estimate":410904.2397751808,"calibrationEstimate":412733.7905740738},{"id":"voa/council_tax/EAST_OF_ENGLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":598950.0,"estimate":611632.8573641777,"calibrationEstimate":614356.1372361183},{"id":"voa/council_tax/EAST_OF_ENGLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":739570.0,"estimate":750946.7586493492,"calibrationEstimate":754290.3465647697},{"id":"voa/council_tax/EAST_OF_ENGLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":506540.0,"estimate":517253.3751280308,"calibrationEstimate":519556.4378812313},{"id":"voa/council_tax/EAST_OF_ENGLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":313840.0,"estimate":318550.18431663513,"calibrationEstimate":319968.5263018608},{"id":"voa/council_tax/EAST_OF_ENGLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":172960.0,"estimate":177523.18523740768,"calibrationEstimate":178313.60445976257},{"id":"voa/council_tax/EAST_OF_ENGLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":113720.0,"estimate":116179.86512231828,"calibrationEstimate":116697.15281319618},{"id":"voa/council_tax/EAST_OF_ENGLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":14830.0,"estimate":15408.850413322449,"calibrationEstimate":15477.458395004272},{"id":"voa/council_tax/EAST_OF_ENGLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2863600.0,"estimate":2918399.316006422,"calibrationEstimate":2931393.454226017},{"id":"voa/council_tax/LONDON/A","group":"Dwellings by council tax band and region","unit":"count","target":144550.0,"estimate":150375.55367183685,"calibrationEstimate":151045.09367752075},{"id":"voa/council_tax/LONDON/B","group":"Dwellings by council tax band and region","unit":"count","target":499130.0,"estimate":511106.1657552719,"calibrationEstimate":513381.8522338867},{"id":"voa/council_tax/LONDON/C","group":"Dwellings by council tax band and region","unit":"count","target":1040280.0,"estimate":1052713.1613850594,"calibrationEstimate":1057400.3456015587},{"id":"voa/council_tax/LONDON/D","group":"Dwellings by council tax band and region","unit":"count","target":975750.0,"estimate":988912.67416811,"calibrationEstimate":993315.7964680196},{"id":"voa/council_tax/LONDON/E","group":"Dwellings by council tax band and region","unit":"count","target":585130.0,"estimate":604620.8762998581,"calibrationEstimate":607312.9413566589},{"id":"voa/council_tax/LONDON/F","group":"Dwellings by council tax band and region","unit":"count","target":298920.0,"estimate":308940.16441679,"calibrationEstimate":310315.7166080475},{"id":"voa/council_tax/LONDON/G","group":"Dwellings by council tax band and region","unit":"count","target":225170.0,"estimate":230670.46613502505,"calibrationEstimate":231697.5183286667},{"id":"voa/council_tax/LONDON/H","group":"Dwellings by council tax band and region","unit":"count","target":68500.0,"estimate":70754.35682678223,"calibrationEstimate":71069.39036178589},{"id":"voa/council_tax/LONDON/total","group":"Dwellings by council tax band and region","unit":"count","target":3837430.0,"estimate":3918093.4186587334,"calibrationEstimate":3935538.6546361446},{"id":"voa/council_tax/NORTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":667540.0,"estimate":680737.9537260532,"calibrationEstimate":683768.9220235348},{"id":"voa/council_tax/NORTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":206790.0,"estimate":211970.4058327675,"calibrationEstimate":212914.200009346},{"id":"voa/council_tax/NORTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":196180.0,"estimate":202087.55218410492,"calibrationEstimate":202987.3474559784},{"id":"voa/council_tax/NORTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":113460.0,"estimate":115930.2783408165,"calibrationEstimate":116446.45661735536},{"id":"voa/council_tax/NORTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":61090.0,"estimate":61207.41867017746,"calibrationEstimate":61479.942474365234},{"id":"voa/council_tax/NORTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":26600.0,"estimate":26356.495221138,"calibrationEstimate":26473.84709215164},{"id":"voa/council_tax/NORTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":14600.0,"estimate":15486.845539569857,"calibrationEstimate":15555.80025434494},{"id":"voa/council_tax/NORTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":1570.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":1287830.0,"estimate":1313776.9495146277,"calibrationEstimate":1319626.5159270763},{"id":"voa/council_tax/NORTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":1386260.0,"estimate":1391080.06063509,"calibrationEstimate":1397273.8202409744},{"id":"voa/council_tax/NORTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":705450.0,"estimate":715903.5987789631,"calibrationEstimate":719091.151144743},{"id":"voa/council_tax/NORTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":616070.0,"estimate":626632.3857769966,"calibrationEstimate":629422.4471478462},{"id":"voa/council_tax/NORTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":363970.0,"estimate":371361.08140420914,"calibrationEstimate":373014.5641813278},{"id":"voa/council_tax/NORTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":216990.0,"estimate":223131.46934127808,"calibrationEstimate":224124.959856987},{"id":"voa/council_tax/NORTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":104330.0,"estimate":107420.41505765916,"calibrationEstimate":107898.70176649094},{"id":"voa/council_tax/NORTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":65750.0,"estimate":67545.51971292496,"calibrationEstimate":67846.26735258102},{"id":"voa/council_tax/NORTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":7350.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":3466140.0,"estimate":3503074.530707121,"calibrationEstimate":3518671.9116909504},{"id":"voa/council_tax/SCOTLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":501021.459,"estimate":519230.9023320675,"calibrationEstimate":521542.7701560855},{"id":"voa/council_tax/SCOTLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":584962.227,"estimate":602046.806920588,"calibrationEstimate":604727.4127128124},{"id":"voa/council_tax/SCOTLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":427573.287,"estimate":445115.3774691224,"calibrationEstimate":447097.24797928333},{"id":"voa/council_tax/SCOTLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":367240.86,"estimate":390433.5805595517,"calibrationEstimate":392171.9807073474},{"id":"voa/council_tax/SCOTLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":364617.711,"estimate":383971.6045381427,"calibrationEstimate":385681.2364856601},{"id":"voa/council_tax/SCOTLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":220344.516,"estimate":230924.03558689356,"calibrationEstimate":231952.2210955024},{"id":"voa/council_tax/SCOTLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":141650.046,"estimate":147640.03100788593,"calibrationEstimate":148297.3968727589},{"id":"voa/council_tax/SCOTLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":15738.894,"estimate":14844.596238613129,"calibrationEstimate":14910.691596031187},{"id":"voa/council_tax/SCOTLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2623149.0,"estimate":2734206.934652865,"calibrationEstimate":2746380.957605481},{"id":"voa/council_tax/SOUTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":367610.0,"estimate":376721.3822689056,"calibrationEstimate":378398.7290725708},{"id":"voa/council_tax/SOUTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":687430.0,"estimate":700808.5503644943,"calibrationEstimate":703928.8838472366},{"id":"voa/council_tax/SOUTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":1075940.0,"estimate":1090040.558608532,"calibrationEstimate":1094893.946111679},{"id":"voa/council_tax/SOUTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":843560.0,"estimate":858553.6785125732,"calibrationEstimate":862376.3792462349},{"id":"voa/council_tax/SOUTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":551730.0,"estimate":567477.6824498177,"calibrationEstimate":570004.3656759262},{"id":"voa/council_tax/SOUTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":337260.0,"estimate":344590.2440838814,"calibrationEstimate":346124.52712106705},{"id":"voa/council_tax/SOUTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":265610.0,"estimate":273549.8351545334,"calibrationEstimate":274767.8116083145},{"id":"voa/council_tax/SOUTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":40390.0,"estimate":41414.243516922,"calibrationEstimate":41598.64037132263},{"id":"voa/council_tax/SOUTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":4169520.0,"estimate":4253156.17495966,"calibrationEstimate":4272093.283054352},{"id":"voa/council_tax/SOUTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":473020.0,"estimate":482912.787299633,"calibrationEstimate":485062.9522204399},{"id":"voa/council_tax/SOUTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":644890.0,"estimate":652833.0327134132,"calibrationEstimate":655739.7580933571},{"id":"voa/council_tax/SOUTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":624030.0,"estimate":630313.4024662971,"calibrationEstimate":633119.8610377312},{"id":"voa/council_tax/SOUTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":432070.0,"estimate":436333.3158068657,"calibrationEstimate":438276.0832939148},{"id":"voa/council_tax/SOUTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":292090.0,"estimate":296615.94530296326,"calibrationEstimate":297936.61835718155},{"id":"voa/council_tax/SOUTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":147920.0,"estimate":150589.5069141388,"calibrationEstimate":151260.00522136688},{"id":"voa/council_tax/SOUTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":81960.0,"estimate":83527.61182880402,"calibrationEstimate":83899.51695775986},{"id":"voa/council_tax/SOUTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":8430.0,"estimate":8669.152314662933,"calibrationEstimate":8707.751531600952},{"id":"voa/council_tax/SOUTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":2704390.0,"estimate":2741794.754646778,"calibrationEstimate":2754002.546713352},{"id":"voa/council_tax/WALES/A","group":"Dwellings by council tax band and region","unit":"count","target":215380.0,"estimate":224605.6820923984,"calibrationEstimate":225605.73692715168},{"id":"voa/council_tax/WALES/B","group":"Dwellings by council tax band and region","unit":"count","target":307070.0,"estimate":320208.17440497875,"calibrationEstimate":321633.8936638236},{"id":"voa/council_tax/WALES/C","group":"Dwellings by council tax band and region","unit":"count","target":323220.0,"estimate":335451.0971978903,"calibrationEstimate":336944.68964356184},{"id":"voa/council_tax/WALES/D","group":"Dwellings by council tax band and region","unit":"count","target":241220.0,"estimate":250254.17059534788,"calibrationEstimate":251368.4234211743},{"id":"voa/council_tax/WALES/E","group":"Dwellings by council tax band and region","unit":"count","target":200840.0,"estimate":211026.1240774095,"calibrationEstimate":211965.71487867832},{"id":"voa/council_tax/WALES/F","group":"Dwellings by council tax band and region","unit":"count","target":122650.0,"estimate":126898.85001176596,"calibrationEstimate":127463.86601752044},{"id":"voa/council_tax/WALES/G","group":"Dwellings by council tax band and region","unit":"count","target":55190.0,"estimate":58875.90761309862,"calibrationEstimate":59138.051686525345},{"id":"voa/council_tax/WALES/H","group":"Dwellings by council tax band and region","unit":"count","target":13190.0,"estimate":13777.90127837658,"calibrationEstimate":13839.247251331806},{"id":"voa/council_tax/WALES/total","group":"Dwellings by council tax band and region","unit":"count","target":1484410.0,"estimate":1580971.558793813,"calibrationEstimate":1588010.8121637702},{"id":"voa/council_tax/WEST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":786010.0,"estimate":801264.3020524979,"calibrationEstimate":804831.908847332},{"id":"voa/council_tax/WEST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":654140.0,"estimate":667366.4046912193,"calibrationEstimate":670337.8446173668},{"id":"voa/council_tax/WEST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":526260.0,"estimate":542465.0707445145,"calibrationEstimate":544880.3880476952},{"id":"voa/council_tax/WEST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":302500.0,"estimate":308908.68011569977,"calibrationEstimate":310284.0953936577},{"id":"voa/council_tax/WEST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":193700.0,"estimate":198747.3023056984,"calibrationEstimate":199632.22103261948},{"id":"voa/council_tax/WEST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":105630.0,"estimate":107414.5040140152,"calibrationEstimate":107892.76392650604},{"id":"voa/council_tax/WEST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":62780.0,"estimate":65637.16608524323,"calibrationEstimate":65929.41587018967},{"id":"voa/council_tax/WEST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":6170.0,"estimate":6236.679645061493,"calibrationEstimate":6264.44837474823},{"id":"voa/council_tax/WEST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2637190.0,"estimate":2698040.1096539497,"calibrationEstimate":2710053.086110115},{"id":"voa/council_tax/YORKSHIRE/A","group":"Dwellings by council tax band and region","unit":"count","target":1070830.0,"estimate":1081951.5106871128,"calibrationEstimate":1086768.8853447435},{"id":"voa/council_tax/YORKSHIRE/B","group":"Dwellings by council tax band and region","unit":"count","target":514190.0,"estimate":523395.8514652252,"calibrationEstimate":525726.2633414268},{"id":"voa/council_tax/YORKSHIRE/C","group":"Dwellings by council tax band and region","unit":"count","target":432290.0,"estimate":438533.7035779953,"calibrationEstimate":440486.2676320076},{"id":"voa/council_tax/YORKSHIRE/D","group":"Dwellings by council tax band and region","unit":"count","target":249530.0,"estimate":251634.06920957565,"calibrationEstimate":252754.46445512772},{"id":"voa/council_tax/YORKSHIRE/E","group":"Dwellings by council tax band and region","unit":"count","target":158600.0,"estimate":159460.23387098312,"calibrationEstimate":160170.2293252945},{"id":"voa/council_tax/YORKSHIRE/F","group":"Dwellings by council tax band and region","unit":"count","target":75690.0,"estimate":76176.12427806854,"calibrationEstimate":76515.29922580719},{"id":"voa/council_tax/YORKSHIRE/G","group":"Dwellings by council tax band and region","unit":"count","target":42180.0,"estimate":43033.37067222595,"calibrationEstimate":43224.9764380455},{"id":"voa/council_tax/YORKSHIRE/H","group":"Dwellings by council tax band and region","unit":"count","target":3770.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/YORKSHIRE/total","group":"Dwellings by council tax band and region","unit":"count","target":2547080.0,"estimate":2574184.8637611866,"calibrationEstimate":2585646.385762453}] diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx index aadf9eb..92ab498 100644 --- a/src/test/ukDataPages.test.tsx +++ b/src/test/ukDataPages.test.tsx @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import release from '../data/ukDataRelease.json'; import { ukPipelineIntro, ukPipelineStages, ukBranchLabels } from '../data/ukPipelineStages'; -import { fmtInt, fmtPct } from '../data/ukDataRelease'; +import { fmtInt, fmtPct, fmtTarget } from '../data/ukDataRelease'; vi.mock('next/navigation', () => ({ usePathname: () => '/uk/model/data/pipeline', @@ -85,7 +85,7 @@ describe('UK pipeline copy', () => { import fc from 'fast-check'; import UkCalibrationPage from '../views/data/UkCalibrationPage'; -import UkValidationPage, { fmtDifference, obrRows } from '../views/data/UkValidationPage'; +import UkValidationPage, { fmtDifference, niTotal, obrRows } from '../views/data/UkValidationPage'; import checks from '../data/ukTargetChecks.json'; describe('UK calibration and validation pages', () => { @@ -113,10 +113,21 @@ describe('UK calibration and validation pages', () => { expect(checks.length).toBe(release.calibration.nationalTargets); expect(release.validation.targets).toBe(checks.length); expect(new Set(checks.map((r) => r.id)).size).toBe(checks.length); - expect(obrRows.length).toBe(checks.filter((r) => r.id.startsWith('obr/') && r.unit === 'gbp').length); + expect(obrRows.length).toBe(checks.filter((r) => r.id.startsWith('obr/') && r.unit === 'gbp').length - 1); + expect(obrRows.some((r) => r.id === 'obr/ni')).toBe(false); expect(obrRows.find((r) => r.id === 'obr/universal_credit')?.label).toMatch(/Great Britain/); }); + it('compares OBR total NICs with the sum of the three classes, not the mismapped column', () => { + const get = (id: string) => checks.find((r) => r.id === id)!; + expect(niTotal.target).toBe(get('obr/ni').target); + expect(niTotal.estimate).toBeCloseTo( + get('obr/ni_employee').estimate + get('obr/ni_employer').estimate + get('obr/ni_self_employed').estimate, + ); + const { container } = render(); + expect(container.textContent).toContain(fmtTarget(niTotal.estimate, 'gbp')); + }); + it('formats differences with the sign of estimate minus target', () => { fc.assert(fc.property( fc.double({ min: 1, max: 1e12, noNaN: true }), diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index 1aafa03..f67805f 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -31,9 +31,19 @@ const OBR_ROW_LABELS: Record = { const areaOf = new Map(cal.nationalGroups.map((g) => [g.label, g.geography])); +// The release scores OBR's total NICs line against employee NICs alone +// (policyengine-uk-data#537), so the table shows the classes and sums them. +const NI_TOTAL = 'obr/ni'; +const NI_CLASSES = ['obr/ni_employee', 'obr/ni_employer', 'obr/ni_self_employed']; +const byId = new Map(rows.map((r) => [r.id, r])); +export const niTotal = { + target: byId.get(NI_TOTAL)?.target ?? 0, + estimate: NI_CLASSES.reduce((sum, id) => sum + (byId.get(id)?.estimate ?? 0), 0), +}; + /** OBR receipts and spending lines, in £, from the March 2026 forecast. */ export const obrRows = rows - .filter((r) => r.id.startsWith('obr/') && r.unit === 'gbp') + .filter((r) => r.id.startsWith('obr/') && r.unit === 'gbp' && r.id !== NI_TOTAL) .map((r) => { const label = OBR_ROW_LABELS[r.id] ?? r.group; const area = areaOf.get(r.group); @@ -127,6 +137,14 @@ export default function UkValidationPage() { ))} +

+ Each PolicyEngine UK figure sums the variable that the release’s target registry assigns to that line. The + OBR forecasts total National Insurance receipts of {fmtTarget(niTotal.target, 'gbp')}; PolicyEngine UK’s + employee, employer and self-employed contributions add to {fmtTarget(niTotal.estimate, 'gbp')} + {` (${fmtDifference(niTotal.target, niTotal.estimate)})`}. The release scores that total against employee + contributions alone (policyengine-uk-data#537), + so the fit figures above count it as a miss. +

@@ -173,8 +191,8 @@ export default function UkValidationPage() {

Every UK-wide target

- All {fmtInt(rows.length)} targets, with the pinned model’s {v.year}-{String(v.year + 1).slice(2)} estimate. - Target identifiers match policyengine-uk-data’s target registry. + All {fmtInt(rows.length)} targets, with the pinned model’s {v.year}-{String(v.year + 1).slice(2)} estimate + of the variable each one is scored against. Target identifiers match policyengine-uk-data’s target registry.

{showAll ? ( <> From cefcc5816bce118ffd78ac05c5b100a530aa2a90 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:47:53 -0400 Subject: [PATCH 09/30] Link policyengine-uk-data#582 from the UK validation page Co-Authored-By: Claude Opus 5.5 --- src/test/ukDataPages.test.tsx | 2 +- src/views/data/UkValidationPage.tsx | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx index 92ab498..28df760 100644 --- a/src/test/ukDataPages.test.tsx +++ b/src/test/ukDataPages.test.tsx @@ -106,7 +106,7 @@ describe('UK calibration and validation pages', () => { expect(text).not.toMatch(/TAXSIM|federal|state income tax|filing status/i); expect(text).toContain(`policyengine-uk ${release.validation.modelVersion}`); expect(text).toContain(fmtPct(release.validation.within10)); - for (const n of [537, 570, 580, 581, 1996]) expect(text).toContain(`#${n}`); + for (const n of [537, 570, 580, 581, 582, 1996]) expect(text).toContain(`#${n}`); }); it('scores the same targets the release calibrates to', () => { diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index f67805f..2608d9d 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -69,6 +69,11 @@ const KNOWN_ISSUES = [ n: 537, text: 'The total National Insurance target is compared with employee contributions alone.', }, + { + repo: 'policyengine-uk-data', + n: 582, + text: 'The OBR’s incapacity benefits line is compared with income-related ESA alone.', + }, { repo: 'policyengine-uk', n: 1996, text: 'Modelled VAT exceeds OBR receipts.' }, { repo: 'policyengine-uk-data', n: 570, text: 'Capital gains fall short of HMRC’s totals.' }, { From ec7d25ad9d77e7b9ae6bf1899115f00d6808c970 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:49:08 -0400 Subject: [PATCH 10/30] Keep the UK validation route and ignore list clear of #47 and #49's lines Co-Authored-By: Claude Opus 5.5 --- .gitignore | 2 +- app/data/validation/page.tsx | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index a6b03ff..7deadca 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,6 @@ policyengine-uk-data # Metadata and registry snapshots generated at build time public/metadata-*.json +public/variable-tree-*.json public/param-tree-*.json public/programs-*.json -public/variable-tree-*.json diff --git a/app/data/validation/page.tsx b/app/data/validation/page.tsx index 0a18f27..a9ab14b 100644 --- a/app/data/validation/page.tsx +++ b/app/data/validation/page.tsx @@ -1,8 +1,8 @@ import ValidationPage from '../../../src/views/data/ValidationPage'; -import UkValidationPage from '../../../src/views/data/UkValidationPage'; import ValidationComparison from '../../../src/components/comparison/ValidationComparison'; import { loadComparisonData } from '../../../src/data/comparisons'; import { detectComparePeers } from '../../../src/components/comparison/detectComparePeers'; +import UkValidationPage from '../../../src/views/data/UkValidationPage'; export default async function ValidationRoute({ searchParams, @@ -18,8 +18,13 @@ export default async function ValidationRoute({ sp.country, ); + // The UK page reports the pinned UK release; TAXSIM covers US taxes only. + if (!parsed.compareMode && country === 'uk') { + return ; + } + if (!parsed.compareMode) { - return country === 'uk' ? : ; + return ; } const data = loadComparisonData(); From 3f1ec005ff31036c001134372c9f71cf35b6b967 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:56:17 -0400 Subject: [PATCH 11/30] Cite LA tenure and private rent targets as the build's code does Co-Authored-By: Claude Opus 5.5 --- scripts/extract_uk_release.py | 4 ++-- src/data/ukDataRelease.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index b23990b..0ab7ce0 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -347,8 +347,8 @@ "Equivalised income before and after housing costs, and housing costs", "ONS small area income estimates", ), - ("tenure/", "Households by tenure", "English Housing Survey and ONS"), - ("rent/private_rent", "Private rent paid", "ONS private rental market statistics"), + ("tenure/", "Households by tenure", "English Housing Survey"), + ("rent/private_rent", "Private rent paid", "VOA private rental market statistics"), ( "voa/council_tax/", "Dwellings by council tax band, A to H", diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index bab25ec..8c25d58 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -215,7 +215,7 @@ }, { "label": "Households by tenure", - "source": "English Housing Survey and ONS", + "source": "English Housing Survey", "metrics": 4, "heldOut": false, "cells": 1164, @@ -223,7 +223,7 @@ }, { "label": "Private rent paid", - "source": "ONS private rental market statistics", + "source": "VOA private rental market statistics", "metrics": 1, "heldOut": false, "cells": 289, From 7ae3b377ed02e1a3b90ee646665d8ed30ec0a0ea Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:56:43 -0400 Subject: [PATCH 12/30] Describe the reported-anchor take-up fill precisely Co-Authored-By: Claude Opus 5.5 --- src/data/ukPipelineStages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index aefed00..7c99cfd 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -39,7 +39,7 @@ export const ukPipelineStages: PipelineStage[] = [ dataSources: ['DWP Family Resources Survey 2024-25'], details: [ `The FRS grossing weights sum to ${fmtMillions(uk.base.weightedHouseholds)} households`, - 'Families that report Child Benefit, Pension Credit or Universal Credit claim it; the build draws other families at random, at take-up rates set in the data package', + 'Families that report Child Benefit, Pension Credit or Universal Credit claim it; the build then draws enough other families at random to bring the share of all families claiming to a take-up rate set in the data package', 'A family whose adults have all reached State Pension age never claims Universal Credit', 'The build draws Marriage Allowance, Tax-Free Childcare, free childcare entitlements and Scottish Child Payment at random, at rates set in the data package', 'Households without a reported council tax bill get the mean reported bill for their region, band and number of adults (one or more); the build nets Scottish water and sewerage charges out', From cf0166413fae16b4a51e062630d2e2db6af090a4 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 07:57:21 -0400 Subject: [PATCH 13/30] Document the snapshot trees and how to refresh the UK release pages Co-Authored-By: Claude Opus 5.5 --- README.md | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index aaeb940..b9ebbf7 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,15 @@ version is included when its metadata endpoint responds. The coverage page uses this provenance to show which model version the coverage reflects and, when available, the version served by the production API. +The same run snapshots each repository's `parameters/` and `variables/` file trees +(`public/param-tree-.json`, `public/variable-tree-.json`) at that +commit. Parameter pages use them to link each parameter to its YAML file; the UK +variable explorer uses the variable tree to find each variable's module, because +the UK metadata API serves none. + The program loader tries the static snapshot first, then production API metadata, -then the bundled hardcoded programs. Snapshot URLs use the public base prefix so +then the bundled hardcoded programs (US only; the UK page says the registry could +not be loaded). Snapshot URLs use the public base prefix so they work both locally and under `/us/model`. ## Daily registry refresh @@ -55,3 +62,39 @@ The workflow sends a POST request to the hook. If the secret is absent, it logs notice and exits successfully. The workflow must be on the default branch for scheduled runs to apply. The Vercel build must run `bun run build` so each deployment fetches a fresh snapshot. + +## UK data release pages + +The UK pipeline, calibration targets and validation pages quote +`src/data/ukDataRelease.json` and `src/data/ukTargetChecks.json`, not typed-in +numbers. Both describe the UK data release that policyengine.py pins +(`src/policyengine/data/bundle/manifest.json`, `data_releases.uk`). When that pin +moves, regenerate them: + +1. Put the pinned release's files in one folder: the bundle manifest, the + release manifest at the revision the bundle names, `frs_.h5`, + `enhanced_frs_.h5`, both weight files (from the gated + `policyengine/policyengine-uk-data-private` Hugging Face repo), and the two + calibration logs (GitHub Actions artifacts of the uk-data publish run: + `gh run download -R PolicyEngine/policyengine-uk-data`). +2. Dump the release's target registry with `scripts/dump_uk_target_registry.py`, + and score the saved file with the pinned model with + `scripts/run_uk_target_check.py` (commands in each script's docstring). +3. Run `scripts/extract_uk_release.py --artifacts --out + src/data/ukDataRelease.json --rows-out src/data/ukTargetChecks.json`. It checks + every file's sha256 against the release manifest and refuses a release other + than the pin. +4. Run `UK_RELEASE_ARTIFACTS= uv run --no-project --with pytest --with + hypothesis --with h5py --with tables --with pandas --with numpy pytest + scripts/test_extract_uk_release.py` and `bun run test`, then reread the + pipeline stage copy in `src/data/ukPipelineStages.ts` against the new + release's `datasets/create_datasets.py`: the counts update themselves, the + mechanisms do not. + +The household files hold UK Data Service microdata. Only the aggregates the +extractor writes may leave that folder. + +The UK behavioural responses page mirrors policyengine-uk's parameters and +`dynamics/progression.py` (`src/data/ukBehaviouralResponses.ts`); run `bun run +test` with `UK_MODEL_SOURCE` set to a policyengine-uk checkout at the pinned +version to compare them. From 97630d2fe619b72fff5ef36dc631e36f9b7b1d88 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:41:16 -0400 Subject: [PATCH 14/30] Score the UK validation run against the targets calibration fitted The pinned run rebuilds the targets with today's code, and eight Scottish council tax band targets come out at different values. The extractor now scores the pinned estimates against the values in the calibration log, and lists the revised targets. Within 5% moves from 51.9% to 52.2%; within 10% stays at 73.6%. The extractor also records what the 2026-10-14 fact-check found each family to be, from the release's code: - areas: OBR's DWP benefit lines cover Great Britain; domestic rates cover Northern Ireland; SDLT covers England and Northern Ireland; SLC targets and the tenure targets cover England; country-level families name their nation - labels: ESA, DLA and PIP, fuel duty, NI, tenure, VOA bands, regional age, UC family type and mortgage payments say what is scored - publishers: Scottish VOA rows come from gov.scot; Plan 2 and 5 borrowers from Explore Education Statistics; the mortgage total is set in the build - notes on how families are built, including the local Universal Credit targets, which loss.py assigns to areas by row order - the build's policyengine-core version, targets carried from an earlier year (165), and targets by area Fit shares keep six decimals, so 649/650 shows as 99.8%, not 99.9%. Co-Authored-By: Claude Opus 5.5 --- scripts/extract_uk_release.py | 287 +++++++++++++++++++++++---- scripts/test_extract_uk_release.py | 32 ++- src/data/ukDataRelease.json | 299 +++++++++++++++++++---------- src/data/ukDataRelease.ts | 20 +- src/data/ukTargetChecks.json | 2 +- 5 files changed, 503 insertions(+), 137 deletions(-) diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index 0ab7ce0..86c4fad 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -64,6 +64,115 @@ "obr/salary_sacrifice_users_total": "HM Treasury and HMRC", "obr/salary_sacrifice_users_below_cap": "HM Treasury and HMRC", "obr/salary_sacrifice_users_above_cap": "HM Treasury and HMRC", + # targets/sources/housing.py: monthly payment x owners, both set in code. + "housing/total_mortgage": "Assumption set in the build", +} + +# Publishers by target-name prefix, where one family mixes publishers. +PUBLISHER_BY_PREFIX = { + # voa_council_tax.py takes Scotland's band counts from gov.scot. + "voa/council_tax/SCOTLAND/": "Scottish Government", + # slc.py: borrower counts come from Student loan forecasts for England, + # on Explore Education Statistics. + "slc/plan_": "Explore Education Statistics", +} + + +def publisher_of(metric: str, source: str) -> str: + if metric in PUBLISHER_BY_TARGET: + return PUBLISHER_BY_TARGET[metric] + for prefix, publisher in PUBLISHER_BY_PREFIX.items(): + if metric.startswith(prefix): + return publisher + return PUBLISHERS.get(source, source) + + +# The area a target covers, where the registry leaves it unset (meaning UK) +# but the source or the model says otherwise. +AREA_BY_TARGET = { + # OBR table 4.9 lists these under "DWP social security", which excludes + # Northern Ireland's separate "NI social security" rows (obr.py says so + # for Universal Credit, which it restricts to Great Britain). These are + # scored on every UK household. + **{ + f"obr/{name}": "Great Britain" + for name in [ + "pip", + "esa", + "attendance_allowance", + "carers_allowance", + "statutory_maternity_pay", + "winter_fuel_allowance", + "state_pension", + "jobseekers_allowance", + ] + }, + "obr/domestic_rates": "Northern Ireland", + # policyengine-uk's sdlt_liable: England and Northern Ireland. + "obr/stamp_duty_land_tax": "England and Northern Ireland", +} +# slc.py: every SLC target counts England's borrowers and students. +AREA_BY_PREFIX = { + "slc/plan_": "England", + "slc/maintenance_loan": "England", + "slc/parents_learning_allowance": "England", + "slc/adult_dependants_grant": "England", +} + + +def area_override(metric: str) -> str | None: + if metric in AREA_BY_TARGET: + return AREA_BY_TARGET[metric] + for prefix, area in AREA_BY_PREFIX.items(): + if metric.startswith(prefix): + return area + return None + + +# How a target family is built or scored, where its label alone would +# mislead. Every note restates code in the release. +GROUP_NOTES = { + ("obr", "ni_employee", "national", None): ( + "OBR's total includes employer and self-employed contributions " + "(policyengine-uk-data#537)" + ), + ("obr", "esa_income", "national", None): ( + "OBR's line also covers incapacity benefit, severe disablement " + "allowance and the incapacity part of Income Support; scored on UK " + "households" + ), + ("obr", "council_tax", "national", None): ( + "OBR's UK total also includes Northern Ireland domestic rates and an " + "accruals adjustment; the model sums council tax net of reductions" + ), + ("obr", "pip", "national", None): "Scored on UK households", + ("obr", "attendance_allowance", "national", None): "Scored on UK households", + ("obr", "carers_allowance", "national", None): "Scored on UK households", + ("obr", "statutory_maternity_pay", "national", None): "Scored on UK households", + ("obr", "winter_fuel_allowance", "national", None): "Scored on UK households", + ("obr", "state_pension", "national", None): "Scored on UK households", + ("obr", "jsa", "national", None): "Scored on UK households", + ( + "ons", + "mortgage_capital_repayment", + "national", + None, + ): "£1,100 a month for 7.5 million mortgaged owners, figures set in the build", + ("ehs", "rent", "national", None): ( + "Average rents times renter numbers, set in the build" + ), + ( + "hmrc_spi", + "property_income", + "national", + "total_income", + ): ( + "Amounts scaled up 1.9 times, the build's ratio of HMRC's property " + "rental income statistics to the SPI" + ), + ("hmrc", "capital_gains", "national", None): ( + "2023-24 outturn: gains uprated to 2025, taxpayer counts held flat" + ), } # One row per (source, variable, geographic level, breakdown). Every group in @@ -97,7 +206,7 @@ "universal_credit", "national", None, - ): "Universal Credit households by family type and number of children", + ): "Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1", ( "dwp", "universal_credit", @@ -183,7 +292,7 @@ "ni_employee", "national", None, - ): "National Insurance receipts, in total and from employees", + ): "National Insurance receipts, total and employee, both scored against employee contributions", ("obr", "ni_employer", "national", None): "Employer National Insurance receipts", ( "obr", @@ -192,7 +301,12 @@ None, ): "Self-employed National Insurance receipts", ("obr", "vat", "national", None): "VAT receipts", - ("obr", "fuel_duty", "national", None): "Fuel duty receipts", + ( + "obr", + "fuel_duty", + "national", + None, + ): "Fuel duty receipts, scored against duty on households' car fuel", ("obr", "capital_gains_tax", "national", None): "Capital gains tax receipts", ("obr", "stamp_duty_land_tax", "national", None): "Stamp Duty Land Tax receipts", ("obr", "council_tax", "national", None): "Council tax receipts, UK and by nation", @@ -205,7 +319,12 @@ ("obr", "tv_licence", "national", None): "TV licence fee receipts", ("obr", "universal_credit", "national", None): "Universal Credit spending", ("obr", "state_pension", "national", None): "State Pension spending", - ("obr", "pip", "national", None): "Personal Independence Payment spending", + ( + "obr", + "pip", + "national", + None, + ): "Disability Living Allowance and PIP spending, scored against PIP alone", ("obr", "child_benefit", "national", None): "Child Benefit spending", ("obr", "attendance_allowance", "national", None): "Attendance Allowance spending", ("obr", "carers_allowance", "national", None): "Carer's Allowance spending", @@ -214,7 +333,7 @@ "esa_income", "national", None, - ): "Incapacity benefits spending, scored against income-related ESA", + ): "Incapacity benefits spending, scored against ESA (income-related and contributory)", ("obr", "jsa", "national", None): "Jobseeker's Allowance spending", ("obr", "winter_fuel_allowance", "national", None): "Winter Fuel Payment spending", ( @@ -241,9 +360,19 @@ "national", None, ): "UK population, in total and by sex and five-year age band", - ("ons", "age", "region", None): "Population by region and ten-year age band", + ( + "ons", + "age", + "region", + None, + ): "Population by region and ten-year age band, and Scottish children under 1 and under 16", ("ons", "family_type", "national", None): "Households by family type", - ("ons", "tenure_type", "country", None): "Dwellings by tenure, by nation", + ( + "ons", + "tenure_type", + "country", + None, + ): "Dwellings in England, in total and by tenure", ( "ons", "employment_status", @@ -252,7 +381,12 @@ ): "Employees and self-employed people", ("ons", "employment_sector", "national", None): "Public sector employment", ("ons", "savings_interest_income", "national", None): "Household savings interest", - ("ons", "mortgage_capital_repayment", "national", None): "Mortgage payments", + ( + "ons", + "mortgage_capital_repayment", + "national", + None, + ): "Mortgage payments, capital and interest", ("ons", "land_value", "national", None): "Total land value", ("ons", "household_land_value", "national", None): "Household land value", ("ons", "household_land_value", "region", None): "Household land value by region", @@ -304,9 +438,19 @@ "council_tax_band", "region", None, - ): "Dwellings by council tax band and region", + ): "Dwellings by region, in total and by council tax band", } +# Constituency and local authority loss builders (datasets/local_areas/*/loss.py). +INCOME_NOTE = "Rescaled so the areas add to a projected UK total" +INCOME_COUNT_NOTE = "Scaled by the same factor as the amounts" +# local_uc.py returns counts in the workbook's row order, and loss.py assigns +# them by position to areas in another order. +UC_ORDER_NOTE = ( + "The build assigns these counts to areas by row order, which does not " + "match the areas, so this fit is not a check on Universal Credit by area" +) + # Local (per-area) metric families. Sources are the ones each loss builder's # docstring and source module name. LOCAL_FAMILIES = [ @@ -314,50 +458,82 @@ "age/", "Population by ten-year age band, 0 to 79", "ONS mid-year population estimates", + "Rescaled so every area's bands add to 90% of the UK population", ), ( "hmrc/employment_income/amount", "Employment income of income taxpayers", "HMRC Survey of Personal Incomes, table 3.15", + INCOME_NOTE, ), ( "hmrc/employment_income/count", "Income taxpayers with employment income", "HMRC Survey of Personal Incomes, table 3.15", + INCOME_COUNT_NOTE, ), ( "hmrc/self_employment_income/", "Self-employment income: taxpayers and amount", "HMRC Survey of Personal Incomes, table 3.15", + INCOME_NOTE, + ), + ( + "uc_households", + "Universal Credit households", + "DWP Stat-Xplore and DfC Northern Ireland statistics", + UC_ORDER_NOTE, + ), + ( + "uc_hh_", + "Universal Credit households by number of children", + "DWP Stat-Xplore and DfC Northern Ireland statistics", + "Each area's total split by its nation's shares (Northern Ireland " + "takes Great Britain's). " + UC_ORDER_NOTE, ), - ("uc_households", "Universal Credit households", "DWP Stat-Xplore"), - ("uc_hh_", "Universal Credit households by number of children", "DWP Stat-Xplore"), ( "housing/scotland_", "Private renters and rent in Scottish constituencies", "Country totals set in the build, shared by population", + None, ), ( "housing/wales_", "Private renters and rent in Welsh constituencies", "Country totals set in the build, shared by population", + None, ), ( "ons/equiv_", "Equivalised income before and after housing costs, and housing costs", "ONS small area income estimates", + "The average of each authority's small-area estimates, times its " + "households, uprated", + ), + ( + "tenure/", + "Households by tenure", + "English Housing Survey", + "Tenure shares times households", + ), + ( + "rent/private_rent", + "Private rent paid", + "VOA private rental market statistics", + "Median rent times private renting households, England only", ), - ("tenure/", "Households by tenure", "English Housing Survey"), - ("rent/private_rent", "Private rent paid", "VOA private rental market statistics"), ( "voa/council_tax/", "Dwellings by council tax band, A to H", "VOA council tax stock of properties", + "VOA counts dwellings, including empty ones; the model counts households", ), ( "housing/council_tax_net", "Council tax paid, net of Council Tax Reduction", "MHCLG and Welsh Government council tax statistics", + "Taxbase times Band D (England) or council tax income (Wales), against " + "households' reported bills net of reductions", ), ] @@ -391,7 +567,7 @@ def fit_share( if not scorable.any(): return None error = (estimate[scorable] / target[scorable] - 1).abs() - return round(float((error < tolerance).mean()), 4) + return round(float((error < tolerance).mean()), 6) def pinned_release(bundle: dict) -> dict: @@ -548,17 +724,40 @@ def last_epoch(log: pd.DataFrame) -> pd.DataFrame: GREAT_BRITAIN = {"ENGLAND", "SCOTLAND", "WALES"} +# The areas national targets describe, broadest first. +AREA_ORDER = [ + "UK", + "Great Britain", + "England and Northern Ireland", + "England", + "Scotland", + "Northern Ireland", + "Nation", + "Region", +] -def area_label(level: str, countries: pd.Series) -> str: - """The area a target family covers: the registry's country scope, else its level.""" +def area_label(level: str, group: pd.DataFrame) -> str: + """The area a target family covers: an override for the source's own + coverage, else the registry's country scope or nation, else its level.""" + overrides = {area_override(m) for m in group["metric"]} + if len(overrides) != 1: + raise ExtractionError(f"a target family mixes area overrides: {overrides}") + override = overrides.pop() + if override is not None: + return override scopes = { - tuple(sorted(c)) if isinstance(c, (list, tuple)) else None for c in countries + tuple(sorted(c)) if isinstance(c, (list, tuple)) else None + for c in group["countries"] } if len(scopes) != 1: raise ExtractionError(f"a target family mixes country scopes: {scopes}") scope = scopes.pop() if scope is None: + if level == "country": + names = set(group["geo_name"].dropna()) + if len(names) == 1 and group["geo_name"].notna().all(): + return names.pop() return {"national": "UK", "region": "Region", "country": "Nation"}[level] if set(scope) == GREAT_BRITAIN: return "Great Britain" @@ -600,25 +799,19 @@ def national_groups( raise ExtractionError( f"no label for target group {(source, variable, level, breakdown)}" ) - publishers = sorted( - { - PUBLISHER_BY_TARGET.get(m, PUBLISHERS.get(source, source)) - for m in group["metric"] - } - ) + publishers = sorted({publisher_of(m, source) for m in group["metric"]}) units = sorted(set(group["unit"])) entry = { "source": source, "label": label, "publisher": " and ".join(publishers), - "geography": area_label(level, group["countries"]), + "geography": area_label(level, group), + "note": GROUP_NOTES.get((source, variable, level, breakdown)), "units": units, "targets": len(group), "zeroTargets": int((group["target"] == 0).sum()), "within10": fit_share(group["estimate"], group["target"]), - "pinnedWithin10": fit_share( - group["pinned_estimate"], group["pinned_target"] - ), + "pinnedWithin10": fit_share(group["pinned_estimate"], group["target"]), "urls": sorted(set(group["reference_url"].dropna())), "vintages": sorted(set(group["forecast_vintage"].dropna())), } @@ -631,7 +824,7 @@ def national_groups( "id": row["metric"], "group": label, "unit": row["unit"], - "target": float(row["pinned_target"]), + "target": float(row["target"]), "estimate": float(row["pinned_estimate"]), "calibrationEstimate": float(row["estimate"]), } @@ -697,7 +890,7 @@ def local_summary(local: pd.DataFrame, areas: int) -> dict: held = finite[finite["metric"] == HELD_OUT_LOCAL] families = [] claimed: set[str] = set() - for prefix, label, source in LOCAL_FAMILIES: + for prefix, label, source, note in LOCAL_FAMILIES: metrics = sorted( m for m in local["metric"].unique() @@ -713,6 +906,7 @@ def local_summary(local: pd.DataFrame, areas: int) -> dict: family = { "label": label, "source": source, + "note": note, "metrics": len(metrics), "heldOut": bool(len(held_family)) and not len(cells), } @@ -810,6 +1004,25 @@ def extract(artifacts: Path, registry_path: Path) -> dict: "the pinned check scored a different set of national targets from calibration" ) groups, target_rows = national_groups(national, registry, pinned) + # build_loss_matrix._resolve_value: a target with no value for the year + # takes its nearest earlier listed year's, within three years. + year = str(int(run["year"])) + carried = [m for m in national["metric"] if year not in registry.loc[m, "values"]] + unknown = {g["geography"] for g in groups} - set(AREA_ORDER) + if unknown: + raise ExtractionError( + f"national targets cover areas the pages don't name: {unknown}" + ) + # The pinned run rebuilds the targets with today's code, and a few values + # can move (a source download can fall back, say). Validation scores the + # pinned estimates against the values calibration fitted, and lists the + # targets whose rebuilt value differs. + scored = national.set_index("metric")[["target"]].join( + pinned.set_index("metric")[["target", "estimate"]].add_prefix("pinned_") + ) + revised = scored[ + ~np.isclose(scored["pinned_target"], scored["target"], rtol=1e-9, atol=0) + ] build = manifest["build"] return { @@ -819,6 +1032,7 @@ def extract(artifacts: Path, registry_path: Path) -> dict: "datasetSha256": pin["datasetSha256"], "builtAt": build["built_at"], "builtWithModelVersion": build["built_with_model_package"]["version"], + "builtWithCoreVersion": build["built_with_core_package"]["version"], "dataGitSha": build["metadata"]["data_package_git_sha"], }, "base": {**base_summary, "dataset": "frs_2024_25"}, @@ -841,6 +1055,12 @@ def extract(artifacts: Path, registry_path: Path) -> dict: "nationalWithin5": constituency_cal["nationalWithin5"], "constituency": constituency_cal["local"], "localAuthority": authority_cal["local"], + "targetsWithoutYearValue": len(carried), + "nationalTargetsByArea": { + area: sum(g["targets"] for g in groups if g["geography"] == area) + for area in AREA_ORDER + if any(g["geography"] == area for g in groups) + }, "nationalGroups": groups, }, "validation": { @@ -849,10 +1069,11 @@ def extract(artifacts: Path, registry_path: Path) -> dict: "year": int(run["year"]), "people": int(round(float(run["people"]))), "households": int(round(float(run["households"]))), - "targets": len(pinned), - "zeroTargets": int((pinned["target"] == 0).sum()), - "within10": fit_share(pinned["estimate"], pinned["target"]), - "within5": fit_share(pinned["estimate"], pinned["target"], 0.05), + "targets": len(scored), + "zeroTargets": int((scored["target"] == 0).sum()), + "within10": fit_share(scored["pinned_estimate"], scored["target"]), + "within5": fit_share(scored["pinned_estimate"], scored["target"], 0.05), + "revisedTargets": sorted(revised.index), "rows": target_rows, }, } diff --git a/scripts/test_extract_uk_release.py b/scripts/test_extract_uk_release.py index 5bfa0d7..5aa50f1 100644 --- a/scripts/test_extract_uk_release.py +++ b/scripts/test_extract_uk_release.py @@ -141,6 +141,8 @@ def _log( reference_url="https://obr.uk/x", forecast_vintage="march_2026", countries=None, + geo_name=None, + values={"2025": 100.0}, ), dict( name="obr/vat", @@ -152,6 +154,8 @@ def _log( reference_url="https://obr.uk/x", forecast_vintage="march_2026", countries=None, + geo_name=None, + values={"2025": 50.0}, ), dict( name="slc/plan_5_borrowers_above_threshold", @@ -163,6 +167,8 @@ def _log( reference_url="https://slc.example", forecast_vintage=None, countries=["ENGLAND", "SCOTLAND", "WALES"], + geo_name=None, + values={"2024": 0.0}, ), ] @@ -229,6 +235,7 @@ def artifacts(tmp_path: Path) -> Path: "build": { "built_at": "2026-10-07T17:31:53Z", "built_with_model_package": {"version": "2.122.2"}, + "built_with_core_package": {"version": "3.32.13"}, "metadata": {"data_package_git_sha": "abc"}, }, } @@ -319,6 +326,19 @@ def test_scores_fit_on_nonzero_targets_and_holds_out_the_validation_metric(artif } +def test_scores_the_pinned_run_against_the_targets_calibration_fitted(artifacts): + """A target the pinned run rebuilds at another value is still scored at the + value calibration fitted, and listed as revised.""" + path = artifacts / "pinned_target_check.csv" + text = path.read_text().replace("obr/vat,50.0,", "obr/vat,81.0,") + path.write_text(text) + v = run(artifacts)["validation"] + assert v["revisedTargets"] == ["obr/vat"] + assert v["within10"] == 0.5 # VAT's 81.6 still misses the fitted 50 + vat = next(r for r in v["rows"] if r["id"] == "obr/vat") + assert vat["target"] == 50.0 + + def test_is_deterministic_and_independent_of_log_row_order(artifacts): first = run(artifacts) log = pd.read_csv(artifacts / "constituency_calibration_log.csv") @@ -419,7 +439,7 @@ def test_fit_share_is_a_share_of_the_nonzero_targets(pairs, tolerance): return expected = sum(abs(e / t - 1) < tolerance for t, e in scorable) / len(scorable) assert 0 <= share <= 1 - assert share == round(expected, 4) + assert share == round(expected, 6) assert ( ex.fit_share(estimates, targets, tolerance * 2) >= share ) # wider tolerance never scores fewer @@ -451,5 +471,13 @@ def test_labels_a_family_by_its_country_scope(artifacts): groups["Plan 2 and Plan 5 borrowers, liable and above the repayment threshold"][ "geography" ] - == "Great Britain" + == "England" # slc.py counts England's borrowers, whatever the registry scope ) + + +def test_names_publishers_and_counts_targets_carried_from_an_earlier_year(artifacts): + cal = run(artifacts)["calibration"] + plan = next(g for g in cal["nationalGroups"] if g["source"] == "slc") + assert plan["publisher"] == "Explore Education Statistics" + assert cal["targetsWithoutYearValue"] == 1 # the Plan 5 target lists only 2024 + assert cal["nationalTargetsByArea"] == {"UK": 2, "England": 1} diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index 8c25d58..ee83061 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -13,6 +13,7 @@ "datasetSha256": "5ba399ea5ab9a6c7d4e9aaf6c623080beb34d9ad5f330f6244dbad72b8d960b6", "builtAt": "2026-10-07T17:31:53.189867Z", "builtWithModelVersion": "2.122.2", + "builtWithCoreVersion": "3.32.13", "dataGitSha": "4cbedbecca352f52dffe47e849553c2759a00711" }, "base": { @@ -69,8 +70,8 @@ "epoch": 510, "nationalTargets": 645, "nationalZeroTargets": 1, - "nationalWithin10": 0.8696, - "nationalWithin5": 0.6615, + "nationalWithin10": 0.869565, + "nationalWithin5": 0.661491, "constituency": { "areas": 650, "metrics": 21, @@ -78,72 +79,80 @@ "cellsWithoutSource": 0, "structuralZeroCells": 2422, "trainingCells": 10578, - "trainingWithin10": 0.9596, + "trainingWithin10": 0.959633, "heldOut": { "metric": "hmrc/employment_income/count", "cells": 650, - "within10": 0.3754 + "within10": 0.375385 }, "families": [ { "label": "Population by ten-year age band, 0 to 79", "source": "ONS mid-year population estimates", + "note": "Rescaled so every area's bands add to 90% of the UK population", "metrics": 8, "heldOut": false, "cells": 5200, - "within10": 0.9335 + "within10": 0.933462 }, { "label": "Employment income of income taxpayers", "source": "HMRC Survey of Personal Incomes, table 3.15", + "note": "Rescaled so the areas add to a projected UK total", "metrics": 1, "heldOut": false, "cells": 650, - "within10": 0.9985 + "within10": 0.998462 }, { "label": "Income taxpayers with employment income", "source": "HMRC Survey of Personal Incomes, table 3.15", + "note": "Scaled by the same factor as the amounts", "metrics": 1, "heldOut": true, "cells": 650, - "within10": 0.3754 + "within10": 0.375385 }, { "label": "Self-employment income: taxpayers and amount", "source": "HMRC Survey of Personal Incomes, table 3.15", + "note": "Rescaled so the areas add to a projected UK total", "metrics": 2, "heldOut": false, "cells": 1300, - "within10": 0.9838 + "within10": 0.983846 }, { "label": "Universal Credit households", - "source": "DWP Stat-Xplore", + "source": "DWP Stat-Xplore and DfC Northern Ireland statistics", + "note": "The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area", "metrics": 1, "heldOut": false, "cells": 650, - "within10": 0.9938 + "within10": 0.993846 }, { "label": "Universal Credit households by number of children", - "source": "DWP Stat-Xplore", + "source": "DWP Stat-Xplore and DfC Northern Ireland statistics", + "note": "Each area's total split by its nation's shares (Northern Ireland takes Great Britain's). The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area", "metrics": 4, "heldOut": false, "cells": 2600, - "within10": 0.9835 + "within10": 0.983462 }, { "label": "Private renters and rent in Scottish constituencies", "source": "Country totals set in the build, shared by population", + "note": null, "metrics": 2, "heldOut": false, "cells": 114, - "within10": 0.9298 + "within10": 0.929825 }, { "label": "Private renters and rent in Welsh constituencies", "source": "Country totals set in the build, shared by population", + "note": null, "metrics": 2, "heldOut": false, "cells": 64, @@ -158,24 +167,26 @@ "cellsWithoutSource": 905, "structuralZeroCells": 0, "trainingCells": 9535, - "trainingWithin10": 0.8988, + "trainingWithin10": 0.898794, "heldOut": { "metric": "hmrc/employment_income/count", "cells": 360, - "within10": 0.3667 + "within10": 0.366667 }, "families": [ { "label": "Population by ten-year age band, 0 to 79", "source": "ONS mid-year population estimates", + "note": "Rescaled so every area's bands add to 90% of the UK population", "metrics": 8, "heldOut": false, "cells": 2880, - "within10": 0.9392 + "within10": 0.939236 }, { "label": "Employment income of income taxpayers", "source": "HMRC Survey of Personal Incomes, table 3.15", + "note": "Rescaled so the areas add to a projected UK total", "metrics": 1, "heldOut": false, "cells": 360, @@ -184,54 +195,61 @@ { "label": "Income taxpayers with employment income", "source": "HMRC Survey of Personal Incomes, table 3.15", + "note": "Scaled by the same factor as the amounts", "metrics": 1, "heldOut": true, "cells": 360, - "within10": 0.3667 + "within10": 0.366667 }, { "label": "Self-employment income: taxpayers and amount", "source": "HMRC Survey of Personal Incomes, table 3.15", + "note": "Rescaled so the areas add to a projected UK total", "metrics": 2, "heldOut": false, "cells": 720, - "within10": 0.9819 + "within10": 0.981944 }, { "label": "Universal Credit households", - "source": "DWP Stat-Xplore", + "source": "DWP Stat-Xplore and DfC Northern Ireland statistics", + "note": "The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area", "metrics": 1, "heldOut": false, "cells": 360, - "within10": 0.9639 + "within10": 0.963889 }, { "label": "Equivalised income before and after housing costs, and housing costs", "source": "ONS small area income estimates", + "note": "The average of each authority's small-area estimates, times its households, uprated", "metrics": 3, "heldOut": false, "cells": 903, - "within10": 0.9324 + "within10": 0.932447 }, { "label": "Households by tenure", "source": "English Housing Survey", + "note": "Tenure shares times households", "metrics": 4, "heldOut": false, "cells": 1164, - "within10": 0.6856 + "within10": 0.685567 }, { "label": "Private rent paid", "source": "VOA private rental market statistics", + "note": "Median rent times private renting households, England only", "metrics": 1, "heldOut": false, "cells": 289, - "within10": 0.9827 + "within10": 0.982699 }, { "label": "Dwellings by council tax band, A to H", "source": "VOA council tax stock of properties", + "note": "VOA counts dwellings, including empty ones; the model counts households", "metrics": 8, "heldOut": false, "cells": 2541, @@ -240,19 +258,31 @@ { "label": "Council tax paid, net of Council Tax Reduction", "source": "MHCLG and Welsh Government council tax statistics", + "note": "Taxbase times Band D (England) or council tax income (Wales), against households' reported bills net of reductions", "metrics": 1, "heldOut": false, "cells": 318, - "within10": 0.4717 + "within10": 0.471698 } ] }, + "targetsWithoutYearValue": 165, + "nationalTargetsByArea": { + "UK": 384, + "Great Britain": 15, + "England": 15, + "Scotland": 2, + "Northern Ireland": 1, + "Nation": 8, + "Region": 220 + }, "nationalGroups": [ { "source": "obr", "label": "Council tax receipts, UK and by nation", "publisher": "OBR", "geography": "UK", + "note": "OBR's UK total also includes Northern Ireland domestic rates and an accruals adjustment; the model sums council tax net of reductions", "units": [ "gbp" ], @@ -272,6 +302,7 @@ "label": "Salary sacrifice users, in total and either side of the \u00a32,000 cap", "publisher": "HM Treasury and HMRC", "geography": "UK", + "note": null, "units": [ "count" ], @@ -286,9 +317,10 @@ }, { "source": "obr", - "label": "National Insurance receipts, in total and from employees", + "label": "National Insurance receipts, total and employee, both scored against employee contributions", "publisher": "OBR", "geography": "UK", + "note": "OBR's total includes employer and self-employed contributions (policyengine-uk-data#537)", "units": [ "gbp" ], @@ -307,7 +339,8 @@ "source": "obr", "label": "Attendance Allowance spending", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", + "note": "Scored on UK households", "units": [ "gbp" ], @@ -328,6 +361,7 @@ "label": "Capital gains tax receipts", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -347,7 +381,8 @@ "source": "obr", "label": "Carer's Allowance spending", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", + "note": "Scored on UK households", "units": [ "gbp" ], @@ -368,6 +403,7 @@ "label": "Child Benefit spending", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -383,11 +419,33 @@ ], "value": 13389272724.45089 }, + { + "source": "obr", + "label": "Disability Living Allowance and PIP spending, scored against PIP alone", + "publisher": "OBR", + "geography": "Great Britain", + "note": "Scored on UK households", + "units": [ + "gbp" + ], + "targets": 1, + "zeroTargets": 0, + "within10": 0.0, + "pinnedWithin10": 0.0, + "urls": [ + "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/" + ], + "vintages": [ + "march_2026" + ], + "value": 36910059270.5278 + }, { "source": "obr", "label": "Employer National Insurance receipts", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -405,9 +463,10 @@ }, { "source": "obr", - "label": "Fuel duty receipts", + "label": "Fuel duty receipts, scored against duty on households' car fuel", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -425,9 +484,10 @@ }, { "source": "obr", - "label": "Incapacity benefits spending, scored against income-related ESA", + "label": "Incapacity benefits spending, scored against ESA (income-related and contributory)", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", + "note": "OBR's line also covers incapacity benefit, severe disablement allowance and the incapacity part of Income Support; scored on UK households", "units": [ "gbp" ], @@ -448,6 +508,7 @@ "label": "Income tax receipts", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -467,7 +528,8 @@ "source": "obr", "label": "Jobseeker's Allowance spending", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", + "note": "Scored on UK households", "units": [ "gbp" ], @@ -487,7 +549,8 @@ "source": "obr", "label": "Northern Ireland domestic rates receipts", "publisher": "OBR", - "geography": "UK", + "geography": "Northern Ireland", + "note": null, "units": [ "gbp" ], @@ -503,31 +566,12 @@ ], "value": 494000000.0 }, - { - "source": "obr", - "label": "Personal Independence Payment spending", - "publisher": "OBR", - "geography": "UK", - "units": [ - "gbp" - ], - "targets": 1, - "zeroTargets": 0, - "within10": 0.0, - "pinnedWithin10": 0.0, - "urls": [ - "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/" - ], - "vintages": [ - "march_2026" - ], - "value": 36910059270.5278 - }, { "source": "obr", "label": "Pupils at independent schools", "publisher": "Independent Schools Council census", "geography": "UK", + "note": null, "units": [ "count" ], @@ -546,6 +590,7 @@ "label": "Self-employed National Insurance receipts", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -566,6 +611,7 @@ "label": "Stamp Duty Land Tax receipts", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -585,7 +631,8 @@ "source": "obr", "label": "State Pension spending", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", + "note": "Scored on UK households", "units": [ "gbp" ], @@ -605,7 +652,8 @@ "source": "obr", "label": "Statutory Maternity Pay spending", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", + "note": "Scored on UK households", "units": [ "gbp" ], @@ -626,6 +674,7 @@ "label": "TV licence fee receipts", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -646,6 +695,7 @@ "label": "Universal Credit spending", "publisher": "OBR", "geography": "Great Britain", + "note": null, "units": [ "gbp" ], @@ -666,6 +716,7 @@ "label": "VAT receipts", "publisher": "OBR", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -685,7 +736,8 @@ "source": "obr", "label": "Winter Fuel Payment spending", "publisher": "OBR", - "geography": "UK", + "geography": "Great Britain", + "note": "Scored on UK households", "units": [ "gbp" ], @@ -706,6 +758,7 @@ "label": "Capital gains: taxpayers and gains, in total and by size of gain", "publisher": "HMRC", "geography": "UK", + "note": "2023-24 outturn: gains uprated to 2025, taxpayer counts held flat", "units": [ "count", "gbp" @@ -726,6 +779,7 @@ "label": "Salary sacrifice: income tax relief by rate band", "publisher": "HMRC", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -743,6 +797,7 @@ "label": "Pension contributions made through salary sacrifice", "publisher": "HMRC", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -761,6 +816,7 @@ "label": "Salary sacrifice: employee National Insurance relief", "publisher": "HMRC", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -779,6 +835,7 @@ "label": "Salary sacrifice: employer National Insurance relief", "publisher": "HMRC", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -797,14 +854,15 @@ "label": "Dividend income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", + "note": null, "units": [ "count", "gbp" ], "targets": 26, "zeroTargets": 0, - "within10": 0.8462, - "pinnedWithin10": 0.8077, + "within10": 0.846154, + "pinnedWithin10": 0.807692, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -815,13 +873,14 @@ "label": "Employment income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", + "note": null, "units": [ "count", "gbp" ], "targets": 26, "zeroTargets": 0, - "within10": 0.8462, + "within10": 0.846154, "pinnedWithin10": 0.5, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" @@ -833,14 +892,15 @@ "label": "Private pension income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", + "note": null, "units": [ "count", "gbp" ], "targets": 26, "zeroTargets": 0, - "within10": 0.8846, - "pinnedWithin10": 0.8077, + "within10": 0.884615, + "pinnedWithin10": 0.807692, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -851,14 +911,15 @@ "label": "Property income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", + "note": "Amounts scaled up 1.9 times, the build's ratio of HMRC's property rental income statistics to the SPI", "units": [ "count", "gbp" ], "targets": 26, "zeroTargets": 0, - "within10": 0.8077, - "pinnedWithin10": 0.7308, + "within10": 0.807692, + "pinnedWithin10": 0.730769, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -869,14 +930,15 @@ "label": "Self-employment income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", + "note": null, "units": [ "count", "gbp" ], "targets": 26, "zeroTargets": 0, - "within10": 0.9231, - "pinnedWithin10": 0.5385, + "within10": 0.923077, + "pinnedWithin10": 0.538462, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -887,14 +949,15 @@ "label": "State Pension: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", + "note": null, "units": [ "count", "gbp" ], "targets": 26, "zeroTargets": 0, - "within10": 0.8462, - "pinnedWithin10": 0.7692, + "within10": 0.846154, + "pinnedWithin10": 0.769231, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -905,13 +968,14 @@ "label": "Universal Credit households by family type and annual award band", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count" ], "targets": 104, "zeroTargets": 0, - "within10": 0.9519, - "pinnedWithin10": 0.4423, + "within10": 0.951923, + "pinnedWithin10": 0.442308, "urls": [ "https://stat-xplore.dwp.gov.uk/" ], @@ -919,16 +983,17 @@ }, { "source": "dwp", - "label": "Universal Credit households by family type and number of children", + "label": "Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count" ], "targets": 11, "zeroTargets": 0, - "within10": 0.9091, - "pinnedWithin10": 0.9091, + "within10": 0.909091, + "pinnedWithin10": 0.909091, "urls": [ "https://stat-xplore.dwp.gov.uk/", "https://www.gov.uk/government/statistics/universal-credit-quarterly-statistics-29-april-2013-to-12-february-2026/universal-credit-deductions-statistics-march-2025-to-february-2026" @@ -940,6 +1005,7 @@ "label": "Housing Benefit claims and spending, by age group", "publisher": "DWP", "geography": "Great Britain", + "note": null, "units": [ "count", "gbp" @@ -960,6 +1026,7 @@ "label": "Benefit cap: households capped and total reduction", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count", "gbp" @@ -978,6 +1045,7 @@ "label": "PIP daily living claimants, standard and enhanced rate", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count" ], @@ -995,6 +1063,7 @@ "label": "Pension Credit claims and spending", "publisher": "DWP", "geography": "Great Britain", + "note": null, "units": [ "count", "gbp" @@ -1015,6 +1084,7 @@ "label": "Contribution-based ESA claimants", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count" ], @@ -1033,6 +1103,7 @@ "label": "Employment and Support Allowance claimants", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count" ], @@ -1051,6 +1122,7 @@ "label": "Income-related ESA claimants", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count" ], @@ -1069,6 +1141,7 @@ "label": "Jobseeker's Allowance claimants", "publisher": "DWP", "geography": "UK", + "note": null, "units": [ "count" ], @@ -1084,16 +1157,17 @@ }, { "source": "ons", - "label": "Population by region and ten-year age band", + "label": "Population by region and ten-year age band, and Scottish children under 1 and under 16", "publisher": "ONS", "geography": "Region", + "note": null, "units": [ "count" ], "targets": 110, "zeroTargets": 0, - "within10": 0.9818, - "pinnedWithin10": 0.9818, + "within10": 0.981818, + "pinnedWithin10": 0.981818, "urls": [ "https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationprojections/datasets/z1zippedpopulationprojectionsdatafilesuk" ], @@ -1104,13 +1178,14 @@ "label": "UK population, in total and by sex and five-year age band", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "count" ], "targets": 37, "zeroTargets": 0, - "within10": 0.8919, - "pinnedWithin10": 0.8919, + "within10": 0.891892, + "pinnedWithin10": 0.891892, "urls": [ "https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationprojections/datasets/z1zippedpopulationprojectionsdatafilesuk" ], @@ -1121,6 +1196,7 @@ "label": "Household land value by region", "publisher": "ONS", "geography": "Region", + "note": null, "units": [ "gbp" ], @@ -1138,6 +1214,7 @@ "label": "Households by family type", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "count" ], @@ -1152,9 +1229,10 @@ }, { "source": "ons", - "label": "Dwellings by tenure, by nation", + "label": "Dwellings in England, in total and by tenure", "publisher": "ONS", - "geography": "Nation", + "geography": "England", + "note": null, "units": [ "count" ], @@ -1172,6 +1250,7 @@ "label": "Employees and self-employed people", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "count" ], @@ -1190,6 +1269,7 @@ "label": "Corporate land value", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -1208,6 +1288,7 @@ "label": "Household land value", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -1226,6 +1307,7 @@ "label": "Household savings interest", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -1241,9 +1323,10 @@ }, { "source": "ons", - "label": "Mortgage payments", - "publisher": "ONS", + "label": "Mortgage payments, capital and interest", + "publisher": "Assumption set in the build", "geography": "UK", + "note": "\u00a31,100 a month for 7.5 million mortgaged owners, figures set in the build", "units": [ "gbp" ], @@ -1262,6 +1345,7 @@ "label": "Public sector employment", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "count" ], @@ -1280,6 +1364,7 @@ "label": "Total land value", "publisher": "ONS", "geography": "UK", + "note": null, "units": [ "gbp" ], @@ -1295,16 +1380,17 @@ }, { "source": "voa", - "label": "Dwellings by council tax band and region", - "publisher": "Valuation Office Agency", + "label": "Dwellings by region, in total and by council tax band", + "publisher": "Scottish Government and Valuation Office Agency", "geography": "Region", + "note": null, "units": [ "count" ], "targets": 99, "zeroTargets": 0, - "within10": 0.9697, - "pinnedWithin10": 0.9697, + "within10": 0.969697, + "pinnedWithin10": 0.969697, "urls": [ "https://www.gov.scot/publications/council-tax-datasets/", "https://www.gov.uk/government/statistics/council-tax-stock-of-properties-2025" @@ -1316,6 +1402,7 @@ "label": "Student loan repayments, by nation and plan", "publisher": "Student Loans Company", "geography": "Nation", + "note": null, "units": [ "gbp" ], @@ -1334,15 +1421,16 @@ { "source": "slc", "label": "Plan 2 and Plan 5 borrowers, liable and above the repayment threshold", - "publisher": "Student Loans Company", - "geography": "UK", + "publisher": "Explore Education Statistics", + "geography": "England", + "note": null, "units": [ "count" ], "targets": 4, "zeroTargets": 1, - "within10": 0.3333, - "pinnedWithin10": 0.6667, + "within10": 0.333333, + "pinnedWithin10": 0.666667, "urls": [ "https://explore-education-statistics.service.gov.uk/data-tables/permalink/6ff75517-7124-487c-cb4e-08de6eccf22d" ], @@ -1352,7 +1440,8 @@ "source": "slc", "label": "Adult Dependants' Grant: recipients and spending", "publisher": "Student Loans Company", - "geography": "UK", + "geography": "England", + "note": null, "units": [ "count", "gbp" @@ -1370,7 +1459,8 @@ "source": "slc", "label": "Maintenance loans: recipients and spending", "publisher": "Student Loans Company", - "geography": "UK", + "geography": "England", + "note": null, "units": [ "count", "gbp" @@ -1388,7 +1478,8 @@ "source": "slc", "label": "Parents' Learning Allowance: recipients and spending", "publisher": "Student Loans Company", - "geography": "UK", + "geography": "England", + "note": null, "units": [ "count", "gbp" @@ -1407,13 +1498,14 @@ "label": "Households with no, one, and two or more vehicles", "publisher": "DfT National Travel Survey", "geography": "UK", + "note": null, "units": [ "count" ], "targets": 3, "zeroTargets": 0, - "within10": 0.6667, - "pinnedWithin10": 0.6667, + "within10": 0.666667, + "pinnedWithin10": 0.666667, "urls": [ "https://www.gov.uk/government/statistics/national-travel-survey-2024" ], @@ -1424,6 +1516,7 @@ "label": "Private and social rent paid", "publisher": "English Housing Survey and ONS", "geography": "UK", + "note": "Average rents times renter numbers, set in the build", "units": [ "gbp" ], @@ -1441,7 +1534,8 @@ "source": "scottish_government", "label": "Scottish Child Payment spending", "publisher": "Scottish Government", - "geography": "Nation", + "geography": "Scotland", + "note": null, "units": [ "gbp" ], @@ -1459,7 +1553,8 @@ "source": "scotland_census", "label": "Scottish households with three or more children", "publisher": "Scotland's Census", - "geography": "Nation", + "geography": "Scotland", + "note": null, "units": [ "count" ], @@ -1483,7 +1578,17 @@ "households": 31245112, "targets": 645, "zeroTargets": 1, - "within10": 0.736, - "within5": 0.5186 + "within10": 0.736025, + "within5": 0.521739, + "revisedTargets": [ + "voa/council_tax/SCOTLAND/A", + "voa/council_tax/SCOTLAND/B", + "voa/council_tax/SCOTLAND/C", + "voa/council_tax/SCOTLAND/D", + "voa/council_tax/SCOTLAND/E", + "voa/council_tax/SCOTLAND/F", + "voa/council_tax/SCOTLAND/G", + "voa/council_tax/SCOTLAND/H" + ] } } diff --git a/src/data/ukDataRelease.ts b/src/data/ukDataRelease.ts index df105d9..393d1d3 100644 --- a/src/data/ukDataRelease.ts +++ b/src/data/ukDataRelease.ts @@ -9,6 +9,8 @@ import release from './ukDataRelease.json'; export interface UkLocalFamily { label: string; source: string; + /** How the build constructs or scores the family, where the label alone would mislead. */ + note: string | null; metrics: number; heldOut: boolean; cells: number; @@ -31,8 +33,10 @@ export interface UkTargetGroup { source: string; label: string; publisher: string; - /** UK, Great Britain, Region or Nation: the registry's country scope, else the target's level. */ + /** The area the target covers: the source's own coverage, the registry's country scope, or the target's level. */ geography: string; + /** How the build constructs or scores the family, where the label alone would mislead. */ + note: string | null; units: ('gbp' | 'count')[]; targets: number; zeroTargets: number; @@ -58,6 +62,7 @@ export interface UkDataRelease { datasetSha256: string; builtAt: string; builtWithModelVersion: string; + builtWithCoreVersion: string; dataGitSha: string; }; base: { households: number; benefitUnits: number; people: number; weightedHouseholds: number; timePeriod: string; dataset: string }; @@ -89,11 +94,14 @@ export interface UkDataRelease { nationalZeroTargets: number; nationalWithin10: number; nationalWithin5: number; + /** National targets with no figure for the calibration year, which take an earlier year's. */ + targetsWithoutYearValue: number; + nationalTargetsByArea: Record; constituency: UkLocalCalibration; localAuthority: UkLocalCalibration; nationalGroups: UkTargetGroup[]; }; - /** The saved file run by the pinned model, scored on the same national targets. */ + /** The saved file run by the pinned model, scored on the target values calibration fitted. */ validation: { modelVersion: string; coreVersion: string; @@ -104,10 +112,12 @@ export interface UkDataRelease { zeroTargets: number; within10: number; within5: number; + /** Targets whose value the pinned run's rebuild of the targets changes. */ + revisedTargets: string[]; }; } -/** One national target, scored on the saved file by the pinned model. */ +/** One national target, scored on the saved file by the pinned model against the value calibration fitted. */ export interface UkTargetCheck { id: string; group: string; @@ -122,7 +132,7 @@ export const ukRelease = release as UkDataRelease; /** 16288 -> "16,288" */ export const fmtInt = (n: number) => Math.round(n).toLocaleString('en-GB'); -/** 0.8682 -> "86.8%"; a share with nothing to score -> "–" */ +/** 0.998462 -> "99.8%"; a share with nothing to score -> "–" */ export const fmtPct = (share: number | null) => (share === null ? '–' : `${(share * 100).toFixed(1)}%`); /** 28972433 -> "29.0 million" */ @@ -160,6 +170,8 @@ export const ukFacts = { constituencies: fmtInt(uk.weightMatrices.constituency.areas), localAuthorities: fmtInt(uk.weightMatrices.localAuthority.areas), nationalTargets: fmtInt(uk.calibration.nationalTargets), + /** What the national targets describe: the UK, Great Britain, its nations and its regions. */ + nationalScope: 'the UK, Great Britain, its nations and its regions', niHouseholds: fmtInt(geo.householdsWithoutArea), gbConstituencies: fmtInt(geo.constituenciesWithHouseholds), }; diff --git a/src/data/ukTargetChecks.json b/src/data/ukTargetChecks.json index 240c1d0..7b6b884 100644 --- a/src/data/ukTargetChecks.json +++ b/src/data/ukTargetChecks.json @@ -1 +1 @@ -[{"id":"dwp/benefit_cap_total_reduction","group":"Benefit cap: households capped and total reduction","unit":"gbp","target":320866000.0,"estimate":416482947.560074,"calibrationEstimate":330069710.0619365},{"id":"dwp/benefit_capped_households","group":"Benefit cap: households capped and total reduction","unit":"count","target":110637.0,"estimate":147944.28814807534,"calibrationEstimate":114504.09350681303},{"id":"dwp/esa_claimants","group":"Employment and Support Allowance claimants","unit":"count","target":999000.0,"estimate":904541.0915792732,"calibrationEstimate":909849.9250053912},{"id":"dwp/esa_contrib_claimants","group":"Contribution-based ESA claimants","unit":"count","target":620000.0,"estimate":716681.2252025008,"calibrationEstimate":719872.2350563705},{"id":"dwp/esa_income_claimants","group":"Income-related ESA claimants","unit":"count","target":180000.0,"estimate":188801.45329512656,"calibrationEstimate":190923.46925877035},{"id":"dwp/housing_benefit/over_pension_credit_age","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":7114700000.0,"estimate":7111903913.229882,"calibrationEstimate":7293068999.985946},{"id":"dwp/housing_benefit/over_pension_credit_age_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":1109000.0,"estimate":1093247.9535357058,"calibrationEstimate":1168281.94529891},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":584800000.0,"estimate":645921139.0904175,"calibrationEstimate":601213368.3664361},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":107000.0,"estimate":108791.38991189004,"calibrationEstimate":109275.78261888029},{"id":"dwp/jsa_claimants","group":"Jobseeker's Allowance claimants","unit":"count","target":71000.0,"estimate":69247.07556176186,"calibrationEstimate":69555.39922833443},{"id":"dwp/pension_credit","group":"Pension Credit claims and spending","unit":"gbp","target":6144470000.0,"estimate":6602274120.813976,"calibrationEstimate":6377744108.750391},{"id":"dwp/pension_credit_claims","group":"Pension Credit claims and spending","unit":"count","target":1382000.0,"estimate":1451705.6834389567,"calibrationEstimate":1452205.295378387},{"id":"dwp/pip_dl_enhanced_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1608000.0,"estimate":1953368.303418666,"calibrationEstimate":1962065.646411702},{"id":"dwp/pip_dl_standard_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1283000.0,"estimate":1419466.81792067,"calibrationEstimate":1425786.9713478386},{"id":"dwp/scotland_uc_households_child_under_1","group":"Universal Credit households by family type and number of children","unit":"count","target":14000.0,"estimate":14566.249044418337,"calibrationEstimate":14631.105303406715},{"id":"dwp/uc/claimants_couple_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":231368.0,"estimate":250896.79244339463,"calibrationEstimate":251991.6941986084},{"id":"dwp/uc/claimants_couple_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":839379.0,"estimate":913383.3023456336,"calibrationEstimate":920606.89293769},{"id":"dwp/uc/claimants_single_no_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2868011.0,"estimate":2889435.6531457454,"calibrationEstimate":2918404.0829007328},{"id":"dwp/uc/claimants_single_with_children","group":"Universal Credit households by family type and number of children","unit":"count","target":2156879.0,"estimate":2380399.2202840894,"calibrationEstimate":2392176.4252111316},{"id":"dwp/uc/claimants_with_1_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1222944.0,"estimate":1295755.060847789,"calibrationEstimate":1302878.9863807857},{"id":"dwp/uc/claimants_with_2_children","group":"Universal Credit households by family type and number of children","unit":"count","target":1058967.0,"estimate":1121193.9276535958,"calibrationEstimate":1125632.9012648463},{"id":"dwp/uc/claimants_with_3_children","group":"Universal Credit households by family type and number of children","unit":"count","target":473500.0,"estimate":502609.9927156568,"calibrationEstimate":507203.147459805},{"id":"dwp/uc/claimants_with_4_children","group":"Universal Credit households by family type and number of children","unit":"count","target":166790.0,"estimate":174326.93197226524,"calibrationEstimate":175103.1191417575},{"id":"dwp/uc/claimants_with_5+_children","group":"Universal Credit households by family type and number of children","unit":"count","target":75910.0,"estimate":79091.86563810706,"calibrationEstimate":79444.01964199543},{"id":"dwp/uc/households","group":"Universal Credit households by family type and number of children","unit":"count","target":6700000.0,"estimate":6348971.35797745,"calibrationEstimate":6395623.053902179},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":7610.0,"estimate":7420.538169384003,"calibrationEstimate":7514.299792408943},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12370.0,"estimate":15733.237529218197,"calibrationEstimate":12799.954794287682},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":15175.0,"estimate":11472.3235373199,"calibrationEstimate":15871.05467006564},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":12297.0,"estimate":12021.353377342224,"calibrationEstimate":12654.892155706882},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17828.0,"estimate":19456.112460017204,"calibrationEstimate":18263.504908561707},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":14427.0,"estimate":15080.27974140644,"calibrationEstimate":15080.074879169464},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":11892.0,"estimate":17644.776905357838,"calibrationEstimate":11945.356312990189},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":9463.0,"estimate":10057.979517936708,"calibrationEstimate":9759.450750350952},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8443.0,"estimate":9638.97747528553,"calibrationEstimate":8904.66766166687},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8906.0,"estimate":8274.131901025772,"calibrationEstimate":9022.64424419403},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5770.0,"estimate":4132.918827056885,"calibrationEstimate":5968.669494628906},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":3485.0,"estimate":5987.513103485107,"calibrationEstimate":3668.190024375915},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":2360.0,"estimate":2347.807508468628,"calibrationEstimate":2415.9390258789062},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":1815.0,"estimate":443.7221064567566,"calibrationEstimate":1831.3727984428408},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":1186.0,"estimate":2170.6248083114624,"calibrationEstimate":1187.413498878479},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":935.0,"estimate":1428.0487060546875,"calibrationEstimate":967.2799072265624},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":632.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":580.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":11750.0,"estimate":13848.374123096466,"calibrationEstimate":11923.90768444538},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":1424.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":10802.0,"estimate":8128.508852601051,"calibrationEstimate":10862.276925444605},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12168.0,"estimate":16164.80532181263,"calibrationEstimate":12346.467386484146},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":12461.0,"estimate":5748.578682214022,"calibrationEstimate":12841.8128490448},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":15787.0,"estimate":17204.907525718212,"calibrationEstimate":16464.121763527393},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":14248.0,"estimate":14648.581487357616,"calibrationEstimate":14936.235798239708},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":17559.0,"estimate":15425.641696095468,"calibrationEstimate":18029.333872824907},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":18714.0,"estimate":17000.313221901655,"calibrationEstimate":18860.421827226877},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":42188.0,"estimate":37726.34860146046,"calibrationEstimate":44076.01454716921},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":41520.0,"estimate":47141.35041385889,"calibrationEstimate":43324.978789806366},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":41159.0,"estimate":41947.755105018616,"calibrationEstimate":43194.09025865793},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":42515.0,"estimate":43577.436663627625,"calibrationEstimate":44944.778411865234},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":38527.0,"estimate":41018.2691783905,"calibrationEstimate":40481.27525937557},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":38894.0,"estimate":38215.3523761034,"calibrationEstimate":40602.91079157591},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":38659.0,"estimate":41123.29328751564,"calibrationEstimate":40460.888354063034},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34318.0,"estimate":48566.454991579056,"calibrationEstimate":35928.6571059227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":22489.0,"estimate":21205.43173134327,"calibrationEstimate":23000.909938097},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":30116.0,"estimate":28863.080528736115,"calibrationEstimate":31526.387284994125},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":28519.0,"estimate":21444.73471069336,"calibrationEstimate":29762.76909518242},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":26014.0,"estimate":23408.44104397297,"calibrationEstimate":26872.75042545795},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":23159.0,"estimate":35138.78228497505,"calibrationEstimate":24115.846549868584},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":20618.0,"estimate":16612.729299545288,"calibrationEstimate":21560.06649184227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17493.0,"estimate":19232.653191685677,"calibrationEstimate":18100.27004623413},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":15437.0,"estimate":20070.599754333496,"calibrationEstimate":15988.015625},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12836.0,"estimate":11836.146595954897,"calibrationEstimate":13421.761481285095},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":26734.0,"estimate":28675.483907222748,"calibrationEstimate":27596.403090000153},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":61727.0,"estimate":65997.26235544682,"calibrationEstimate":64758.198789417744},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":29189.0,"estimate":28463.220873951912,"calibrationEstimate":30442.063633084297},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":33137.0,"estimate":31760.17704331875,"calibrationEstimate":34303.848853588104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":35834.0,"estimate":26437.818723022938,"calibrationEstimate":37270.02708786726},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":38338.0,"estimate":54036.251175284386,"calibrationEstimate":40042.640211343765},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":40685.0,"estimate":44348.22739729285,"calibrationEstimate":42527.98726695776},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":40564.0,"estimate":34501.503211796284,"calibrationEstimate":42208.232148468494},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":24639.0,"estimate":39168.9606487751,"calibrationEstimate":25625.726674437523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":126949.0,"estimate":142487.4302058667,"calibrationEstimate":133277.48989093304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":131129.0,"estimate":95377.8368690312,"calibrationEstimate":137752.16340973973},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":131289.0,"estimate":157107.79431578517,"calibrationEstimate":137750.63612690568},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":119355.0,"estimate":129818.38890782,"calibrationEstimate":124892.34173852204},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":130802.0,"estimate":131328.063896209,"calibrationEstimate":136759.86128601432},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":141848.0,"estimate":150728.17493000627,"calibrationEstimate":148309.65001174808},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":136835.0,"estimate":133713.73497787118,"calibrationEstimate":142901.4171705842},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":107556.0,"estimate":111484.7263495922,"calibrationEstimate":113109.20482206345},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34670.0,"estimate":29272.17201089859,"calibrationEstimate":36466.16493701935},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":86616.0,"estimate":104096.27746334672,"calibrationEstimate":90422.71904051304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":80294.0,"estimate":73354.04017925262,"calibrationEstimate":84354.22553360462},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":70309.0,"estimate":89331.43440103531,"calibrationEstimate":73447.99977698922},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":50510.0,"estimate":72202.29325729609,"calibrationEstimate":53156.73221343756},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":42522.0,"estimate":18497.629060208797,"calibrationEstimate":44506.54565644264},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":33508.0,"estimate":49045.771344304085,"calibrationEstimate":35145.99563121796},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":27063.0,"estimate":30266.55286216736,"calibrationEstimate":28766.448501110077},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":21663.0,"estimate":26942.793876886368,"calibrationEstimate":22648.643339395523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":43623.0,"estimate":37809.548577189445,"calibrationEstimate":45833.974639594555},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":82905.0,"estimate":97151.36844921112,"calibrationEstimate":87104.91118597984},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":55622.0,"estimate":60510.223631858826,"calibrationEstimate":58795.10524368286},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":67901.0,"estimate":71725.4553387165,"calibrationEstimate":70821.50663983822},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":89314.0,"estimate":86143.68657708168,"calibrationEstimate":93578.26927548648},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":118641.0,"estimate":119403.35334032774,"calibrationEstimate":124258.13893908262},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":99069.0,"estimate":97294.37053111196,"calibrationEstimate":103667.6788329184},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":102251.0,"estimate":96173.39577645063,"calibrationEstimate":107101.9515336156},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":102312.0,"estimate":87279.16967123747,"calibrationEstimate":107319.9899930358},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":95698.0,"estimate":135695.77643716335,"calibrationEstimate":100056.6025826335},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":106663.0,"estimate":124074.26766955853,"calibrationEstimate":111498.78546503186},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":181180.0,"estimate":188187.3756595254,"calibrationEstimate":191690.2932780385},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":189861.0,"estimate":186351.02785767615,"calibrationEstimate":199963.96529877183},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":129174.0,"estimate":185164.77054291964,"calibrationEstimate":136010.89976614714},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":84690.0,"estimate":54264.40361404419,"calibrationEstimate":88587.68869447708},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":46244.0,"estimate":71491.7329352498,"calibrationEstimate":47919.61390686035},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":26481.0,"estimate":35623.84896039963,"calibrationEstimate":27905.27891921997},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":120819.0,"estimate":128539.76422923803,"calibrationEstimate":126547.3099425435},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":18143.0,"estimate":31588.639366149902,"calibrationEstimate":18797.771575927734},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":12325.0,"estimate":4426.75733757019,"calibrationEstimate":12941.009860992432},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":9555.0,"estimate":10281.057233810425,"calibrationEstimate":9941.590031147003},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":6230.0,"estimate":8126.360444545746,"calibrationEstimate":6391.2335205078125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":5884.0,"estimate":6362.902786254883,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5362.0,"estimate":1998.391206741333,"calibrationEstimate":5583.823296546936},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":1786.0,"estimate":2339.0858516693115,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":1491.0,"estimate":1221.5946044921875,"calibrationEstimate":1580.0684814453125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":173925.0,"estimate":173553.54143616557,"calibrationEstimate":180896.03793656823},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":3518.0,"estimate":5268.748246669769,"calibrationEstimate":3712.138840675354},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":375706.0,"estimate":405618.4962475896,"calibrationEstimate":399359.66108581424},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":200713.0,"estimate":186214.24044963715,"calibrationEstimate":212072.70295926929},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":107860.0,"estimate":76928.3390161097,"calibrationEstimate":113803.28732386231},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":144036.0,"estimate":167346.22477129102,"calibrationEstimate":151404.9450480342},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":377221.0,"estimate":349366.41928082705,"calibrationEstimate":405079.322792083},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":341138.0,"estimate":368394.08331155777,"calibrationEstimate":365472.416688472},{"id":"hmrc/capital_gains_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5805652941.176472,"estimate":2178688648.0482244,"calibrationEstimate":2141544289.3825493},{"id":"hmrc/capital_gains_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":6567201680.67227,"estimate":7324580857.580844,"calibrationEstimate":5995201312.511488},{"id":"hmrc/capital_gains_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":1457322689.0756304,"estimate":876994527.1745476,"calibrationEstimate":832080688.7293456},{"id":"hmrc/capital_gains_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":9443821008.403362,"estimate":8915647072.518879,"calibrationEstimate":8817479175.49674},{"id":"hmrc/capital_gains_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":2718348739.4957986,"estimate":1471546074.3489742,"calibrationEstimate":1444078653.7115064},{"id":"hmrc/capital_gains_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":4898166386.554623,"estimate":3799760749.882065,"calibrationEstimate":3788282184.501421},{"id":"hmrc/capital_gains_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":3834464705.882354,"estimate":1744185904.570274,"calibrationEstimate":1735553375.6752963},{"id":"hmrc/capital_gains_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5863205882.3529415,"estimate":4403841031.357599,"calibrationEstimate":5555259154.762842},{"id":"hmrc/capital_gains_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":23343884033.61345,"estimate":21727639789.17903,"calibrationEstimate":21488402885.15877},{"id":"hmrc/capital_gains_total","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":67727478991.59665,"estimate":55861737820.9182,"calibrationEstimate":55238457530.72525},{"id":"hmrc/cgt_taxpayers","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":378000.0,"estimate":594003.8427731246,"calibrationEstimate":593891.4494462013},{"id":"hmrc/cgt_taxpayers_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":37000.0,"estimate":13544.740693077443,"calibrationEstimate":13360.691625073552},{"id":"hmrc/cgt_taxpayers_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":5000.0,"estimate":5812.870928764343,"calibrationEstimate":4586.156556129456},{"id":"hmrc/cgt_taxpayers_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":79000.0,"estimate":50256.21771013737,"calibrationEstimate":46247.366893053055},{"id":"hmrc/cgt_taxpayers_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":3000.0,"estimate":2788.615041732788,"calibrationEstimate":2801.031301498413},{"id":"hmrc/cgt_taxpayers_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":74000.0,"estimate":43994.12303459644,"calibrationEstimate":43312.22687217593},{"id":"hmrc/cgt_taxpayers_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":14000.0,"estimate":10944.578097075224,"calibrationEstimate":11016.595499932766},{"id":"hmrc/cgt_taxpayers_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":53000.0,"estimate":24514.88641294837,"calibrationEstimate":24518.887231260534},{"id":"hmrc/cgt_taxpayers_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":8000.0,"estimate":6178.642288446426,"calibrationEstimate":7360.933691740036},{"id":"hmrc/cgt_taxpayers_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":2000.0,"estimate":1832.8698182106016,"calibrationEstimate":1841.0306429862976},{"id":"hmrc/dividend_income_count_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":222000.0,"estimate":229554.611115098,"calibrationEstimate":229451.83542212844},{"id":"hmrc/dividend_income_count_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":115000.0,"estimate":122498.21870449184,"calibrationEstimate":116450.05363586544},{"id":"hmrc/dividend_income_count_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":92000.0,"estimate":95837.3041176498,"calibrationEstimate":94981.9433400631},{"id":"hmrc/dividend_income_count_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":372000.0,"estimate":347627.6361439526,"calibrationEstimate":382888.00691989064},{"id":"hmrc/dividend_income_count_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":19000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_count_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":75000.0,"estimate":76900.66770100594,"calibrationEstimate":77183.34881728888},{"id":"hmrc/dividend_income_count_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":843000.0,"estimate":867481.3310358822,"calibrationEstimate":871528.9038848877},{"id":"hmrc/dividend_income_count_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":49000.0,"estimate":45323.63685941696,"calibrationEstimate":50523.88130879402},{"id":"hmrc/dividend_income_count_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":667000.0,"estimate":703025.5269361734,"calibrationEstimate":686016.7727653384},{"id":"hmrc/dividend_income_count_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":627000.0,"estimate":650857.9845430255,"calibrationEstimate":655597.3248263001},{"id":"hmrc/dividend_income_count_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":32000.0,"estimate":18903.09976196289,"calibrationEstimate":13924.291625976562},{"id":"hmrc/dividend_income_count_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":673194.9035950899,"calibrationEstimate":665673.386961177},{"id":"hmrc/dividend_income_count_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":336000.0,"estimate":343528.61046367884,"calibrationEstimate":346362.1282174885},{"id":"hmrc/dividend_income_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":6870000000.0,"estimate":7095222924.861016,"calibrationEstimate":7114063772.399986},{"id":"hmrc/dividend_income_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":175000000.0,"estimate":192951222.35627183,"calibrationEstimate":173661019.52219003},{"id":"hmrc/dividend_income_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3450000000.0,"estimate":3692746817.185143,"calibrationEstimate":3550464125.442072},{"id":"hmrc/dividend_income_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":855000000.0,"estimate":845993440.2610878,"calibrationEstimate":880729109.8346382},{"id":"hmrc/dividend_income_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":11100000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3700000000.0,"estimate":3828837168.167787,"calibrationEstimate":3797956584.5345135},{"id":"hmrc/dividend_income_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3330000000.0,"estimate":3395614770.515832,"calibrationEstimate":3442786712.469958},{"id":"hmrc/dividend_income_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3430000000.0,"estimate":3496980217.987605,"calibrationEstimate":3447032285.480977},{"id":"hmrc/dividend_income_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":4700000000.0,"estimate":4851171796.430717,"calibrationEstimate":4835994933.974208},{"id":"hmrc/dividend_income_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":8400000000.0,"estimate":8938303214.071344,"calibrationEstimate":8791437358.27874},{"id":"hmrc/dividend_income_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3820000000.0,"estimate":156339333.4031915,"calibrationEstimate":154123616.4699381},{"id":"hmrc/dividend_income_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":12500000000.0,"estimate":13160523430.36148,"calibrationEstimate":12946721023.778358},{"id":"hmrc/dividend_income_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":9440000000.0,"estimate":10052671812.436289,"calibrationEstimate":9911749501.39766},{"id":"hmrc/employment_income_count_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":791000.0,"estimate":843150.2165419757,"calibrationEstimate":826560.6833594143},{"id":"hmrc/employment_income_count_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1360000.0,"estimate":1381056.812882781,"calibrationEstimate":1389994.5120541155},{"id":"hmrc/employment_income_count_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":264000.0,"estimate":283089.4560998976,"calibrationEstimate":272207.9791575968},{"id":"hmrc/employment_income_count_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3100000.0,"estimate":2941183.2826600075,"calibrationEstimate":3131268.366346717},{"id":"hmrc/employment_income_count_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_count_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":180000.0,"estimate":183886.50804448128,"calibrationEstimate":191119.33520907164},{"id":"hmrc/employment_income_count_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":7470000.0,"estimate":7394907.693445265,"calibrationEstimate":7696814.897311896},{"id":"hmrc/employment_income_count_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":93000.0,"estimate":107923.93404233456,"calibrationEstimate":100106.93683218956},{"id":"hmrc/employment_income_count_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":5370000.0,"estimate":5930080.231027737,"calibrationEstimate":5646706.61297296},{"id":"hmrc/employment_income_count_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3500000.0,"estimate":3692167.4615677,"calibrationEstimate":3691681.077874422},{"id":"hmrc/employment_income_count_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":44000.0,"estimate":51452.47190284729,"calibrationEstimate":46618.58825778961},{"id":"hmrc/employment_income_count_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3430000.0,"estimate":3712399.601767317,"calibrationEstimate":3598074.21717},{"id":"hmrc/employment_income_count_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1640000.0,"estimate":1755926.1428863704,"calibrationEstimate":1737828.3395847082},{"id":"hmrc/employment_income_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":82300000000.0,"estimate":91413568331.97716,"calibrationEstimate":89270291253.19441},{"id":"hmrc/employment_income_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17625951516.993526,"calibrationEstimate":17707792264.599216},{"id":"hmrc/employment_income_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":39200000000.0,"estimate":43121325615.01092,"calibrationEstimate":41343663545.83801},{"id":"hmrc/employment_income_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":48600000000.0,"estimate":48521133900.22364,"calibrationEstimate":51842432145.73113},{"id":"hmrc/employment_income_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":35500000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":36600000000.0,"estimate":36151749235.49467,"calibrationEstimate":38383016939.89171},{"id":"hmrc/employment_income_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":172000000000.0,"estimate":177253034078.8408,"calibrationEstimate":185685923740.2714},{"id":"hmrc/employment_income_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":29000000000.0,"estimate":32519523768.135063,"calibrationEstimate":30656152523.340366},{"id":"hmrc/employment_income_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":170000000000.0,"estimate":195144568163.3972,"calibrationEstimate":186138215953.9731},{"id":"hmrc/employment_income_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":139000000000.0,"estimate":152968049441.96802,"calibrationEstimate":152580231489.52524},{"id":"hmrc/employment_income_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":23100000000.0,"estimate":27980302639.935696,"calibrationEstimate":25227641740.95949},{"id":"hmrc/employment_income_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":174000000000.0,"estimate":205992790440.03635,"calibrationEstimate":198611833647.03937},{"id":"hmrc/employment_income_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":118000000000.0,"estimate":132579308720.52338,"calibrationEstimate":130650324064.52023},{"id":"hmrc/private_pension_income_count_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":109000.0,"estimate":111826.396561265,"calibrationEstimate":111957.39517956972},{"id":"hmrc/private_pension_income_count_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1070000.0,"estimate":1108551.329273358,"calibrationEstimate":1078785.8509754688},{"id":"hmrc/private_pension_income_count_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":29000.0,"estimate":32248.34685358405,"calibrationEstimate":31194.256974309683},{"id":"hmrc/private_pension_income_count_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2140000.0,"estimate":2185144.9934265465,"calibrationEstimate":2193027.785250634},{"id":"hmrc/private_pension_income_count_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_count_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":20000.0,"estimate":19481.926417827606,"calibrationEstimate":20442.59133195877},{"id":"hmrc/private_pension_income_count_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2660000.0,"estimate":2728957.4601238817,"calibrationEstimate":2748158.453831658},{"id":"hmrc/private_pension_income_count_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":10000.0,"estimate":10305.892645597458,"calibrationEstimate":10287.247063875198},{"id":"hmrc/private_pension_income_count_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1450000.0,"estimate":1495237.3086971492,"calibrationEstimate":1487679.527325362},{"id":"hmrc/private_pension_income_count_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":779000.0,"estimate":789672.3607301563,"calibrationEstimate":800476.0575524122},{"id":"hmrc/private_pension_income_count_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":4000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/private_pension_income_count_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":652041.4562733769,"calibrationEstimate":663726.9767524898},{"id":"hmrc/private_pension_income_count_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":259000.0,"estimate":272814.0429994464,"calibrationEstimate":263811.19149279594},{"id":"hmrc/private_pension_income_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":5430000000.0,"estimate":5345797328.280829,"calibrationEstimate":5427845559.415028},{"id":"hmrc/private_pension_income_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":4350000000.0,"estimate":4392698634.534128,"calibrationEstimate":4454604694.336378},{"id":"hmrc/private_pension_income_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1810000000.0,"estimate":2014665212.2989984,"calibrationEstimate":1885743095.2678227},{"id":"hmrc/private_pension_income_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":13600000000.0,"estimate":13722906422.39004,"calibrationEstimate":13929122214.140656},{"id":"hmrc/private_pension_income_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":370000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1570000000.0,"estimate":1432815920.066187,"calibrationEstimate":1611508589.181299},{"id":"hmrc/private_pension_income_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":30200000000.0,"estimate":30088725766.291286,"calibrationEstimate":30519628145.421444},{"id":"hmrc/private_pension_income_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1120000000.0,"estimate":1123939358.7086189,"calibrationEstimate":1138804412.324136},{"id":"hmrc/private_pension_income_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":24804135722.331135,"calibrationEstimate":25052549773.94475},{"id":"hmrc/private_pension_income_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":16767697312.554628,"calibrationEstimate":17124010213.256632},{"id":"hmrc/private_pension_income_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":640000000.0,"estimate":212929517.2376833,"calibrationEstimate":216246361.45302057},{"id":"hmrc/private_pension_income_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":17400000000.0,"estimate":17412935832.904785,"calibrationEstimate":17785168436.302177},{"id":"hmrc/private_pension_income_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":9470000000.0,"estimate":9381575140.683311,"calibrationEstimate":9543800186.733513},{"id":"hmrc/property_income_count_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":137000.0,"estimate":148813.48041003942,"calibrationEstimate":142931.6233434677},{"id":"hmrc/property_income_count_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":101000.0,"estimate":105099.43739584088,"calibrationEstimate":105464.95491817594},{"id":"hmrc/property_income_count_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":54000.0,"estimate":50794.22146773338,"calibrationEstimate":56650.596049278975},{"id":"hmrc/property_income_count_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":232000.0,"estimate":209372.79957795143,"calibrationEstimate":241816.69853043556},{"id":"hmrc/property_income_count_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":7000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_count_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":41000.0,"estimate":54315.05261707306,"calibrationEstimate":53937.36399555206},{"id":"hmrc/property_income_count_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":431000.0,"estimate":467851.6959067285,"calibrationEstimate":449476.7096900046},{"id":"hmrc/property_income_count_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":23000.0,"estimate":23663.82657933235,"calibrationEstimate":23704.657059669495},{"id":"hmrc/property_income_count_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":364000.0,"estimate":382716.5398760289,"calibrationEstimate":374246.09900937974},{"id":"hmrc/property_income_count_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":325000.0,"estimate":325976.1076962948,"calibrationEstimate":335583.4356379807},{"id":"hmrc/property_income_count_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":13000.0,"estimate":17876.553053617477,"calibrationEstimate":17956.148045539856},{"id":"hmrc/property_income_count_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":397000.0,"estimate":430521.93068769574,"calibrationEstimate":424372.62478613853},{"id":"hmrc/property_income_count_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":226000.0,"estimate":232345.40000730753,"calibrationEstimate":233399.38142344356},{"id":"hmrc/property_income_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":4845000000.0,"estimate":5066855184.377646,"calibrationEstimate":4887522606.587887},{"id":"hmrc/property_income_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1273000000.0,"estimate":1339419048.615897,"calibrationEstimate":1325054081.26916},{"id":"hmrc/property_income_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":2185000000.0,"estimate":2065674668.677865,"calibrationEstimate":2156647507.286356},{"id":"hmrc/property_income_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":3211000000.0,"estimate":2853691727.4237776,"calibrationEstimate":3390429218.5297017},{"id":"hmrc/property_income_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":834100000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1995000000.0,"estimate":1671991571.1694071,"calibrationEstimate":1648499114.259529},{"id":"hmrc/property_income_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7258000000.0,"estimate":7985707953.629425,"calibrationEstimate":7489906615.405917},{"id":"hmrc/property_income_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1453500000.0,"estimate":1492957063.3158894,"calibrationEstimate":1475921673.247523},{"id":"hmrc/property_income_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7220000000.0,"estimate":7746035188.249613,"calibrationEstimate":7542554031.193575},{"id":"hmrc/property_income_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7182000000.0,"estimate":7333197347.813547,"calibrationEstimate":7434714030.345675},{"id":"hmrc/property_income_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":900600000.0,"estimate":867971878.096458,"calibrationEstimate":858414921.8552154},{"id":"hmrc/property_income_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":10260000000.0,"estimate":10953681291.205402,"calibrationEstimate":10644669240.112694},{"id":"hmrc/property_income_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7163000000.0,"estimate":7576565136.2291155,"calibrationEstimate":7469779867.330262},{"id":"hmrc/salary_sacrifice_contributions","group":"Pension contributions made through salary sacrifice","unit":"gbp","target":24720000000.0,"estimate":28216254605.196114,"calibrationEstimate":29398246248.53289},{"id":"hmrc/salary_sacrifice_employee_nics_relief","group":"Salary sacrifice: employee National Insurance relief","unit":"gbp","target":1030000000.0,"estimate":944128480.1682006,"calibrationEstimate":999028962.9642977},{"id":"hmrc/salary_sacrifice_employer_nics_relief","group":"Salary sacrifice: employer National Insurance relief","unit":"gbp","target":3806521739.1304345,"estimate":3734371027.861629,"calibrationEstimate":3910216698.4462447},{"id":"hmrc/salary_sacrifice_it_relief_additional_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1854000000.0,"estimate":1898508492.1189609,"calibrationEstimate":1916649378.3206043},{"id":"hmrc/salary_sacrifice_it_relief_basic_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1648000000.0,"estimate":1599588723.537782,"calibrationEstimate":1694024183.192099},{"id":"hmrc/salary_sacrifice_it_relief_higher_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":5665000000.0,"estimate":5447769552.639022,"calibrationEstimate":5730857548.478475},{"id":"hmrc/self_employment_income_count_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":85000.0,"estimate":91807.65111103654,"calibrationEstimate":86962.28155221045},{"id":"hmrc/self_employment_income_count_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":444000.0,"estimate":495899.16801068187,"calibrationEstimate":474827.5627250821},{"id":"hmrc/self_employment_income_count_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":40000.0,"estimate":34321.580459713936,"calibrationEstimate":40915.38135620952},{"id":"hmrc/self_employment_income_count_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":651000.0,"estimate":595662.3852557838,"calibrationEstimate":689170.4667981565},{"id":"hmrc/self_employment_income_count_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":11000.0,"estimate":12097.602172851562,"calibrationEstimate":12151.466918945312},{"id":"hmrc/self_employment_income_count_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":34000.0,"estimate":35412.47289919853,"calibrationEstimate":36050.296272322536},{"id":"hmrc/self_employment_income_count_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":961000.0,"estimate":983380.3177103548,"calibrationEstimate":1018702.9982424974},{"id":"hmrc/self_employment_income_count_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21693.4504237175,"calibrationEstimate":21790.04023075104},{"id":"hmrc/self_employment_income_count_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":595000.0,"estimate":660941.2836752534,"calibrationEstimate":627534.0292263627},{"id":"hmrc/self_employment_income_count_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":359000.0,"estimate":380762.3792635501,"calibrationEstimate":372850.943356663},{"id":"hmrc/self_employment_income_count_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":15000.0,"estimate":14243.284211874008,"calibrationEstimate":14306.702473640442},{"id":"hmrc/self_employment_income_count_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":311000.0,"estimate":306679.82031068206,"calibrationEstimate":320621.6229124218},{"id":"hmrc/self_employment_income_count_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":143000.0,"estimate":124774.42495456338,"calibrationEstimate":149187.17315804958},{"id":"hmrc/self_employment_income_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4980000000.0,"estimate":5636157348.958165,"calibrationEstimate":5105386257.929018},{"id":"hmrc/self_employment_income_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4810000000.0,"estimate":5335150863.284746,"calibrationEstimate":5017249946.560387},{"id":"hmrc/self_employment_income_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":3650000000.0,"estimate":2822716021.3632445,"calibrationEstimate":3787992559.540904},{"id":"hmrc/self_employment_income_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8030000000.0,"estimate":6887636692.712797,"calibrationEstimate":8444995513.4183855},{"id":"hmrc/self_employment_income_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":19500000000.0,"estimate":18284049776.80005,"calibrationEstimate":19086845273.0652},{"id":"hmrc/self_employment_income_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4390000000.0,"estimate":4193355831.884856,"calibrationEstimate":4476251711.722663},{"id":"hmrc/self_employment_income_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":15700000000.0,"estimate":17136849507.671976,"calibrationEstimate":16997008937.802246},{"id":"hmrc/self_employment_income_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4840000000.0,"estimate":4906102850.49662,"calibrationEstimate":5121514459.116575},{"id":"hmrc/self_employment_income_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":12600000000.0,"estimate":12605641784.231354,"calibrationEstimate":13432114897.320862},{"id":"hmrc/self_employment_income_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8730000000.0,"estimate":9895760941.4199,"calibrationEstimate":9284919847.082878},{"id":"hmrc/self_employment_income_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":6670000000.0,"estimate":9660794971.01818,"calibrationEstimate":10084969640.620115},{"id":"hmrc/self_employment_income_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8220000000.0,"estimate":7173913950.503402,"calibrationEstimate":8589968865.463936},{"id":"hmrc/self_employment_income_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":5360000000.0,"estimate":4555003804.413581,"calibrationEstimate":5622179443.45382},{"id":"hmrc/state_pension_count_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":74000.0,"estimate":76148.16276955605,"calibrationEstimate":75922.86912208796},{"id":"hmrc/state_pension_count_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1140000.0,"estimate":1244077.6809774786,"calibrationEstimate":1133583.8249693066},{"id":"hmrc/state_pension_count_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":22832.874069213867,"calibrationEstimate":22125.147695302963},{"id":"hmrc/state_pension_count_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2050000.0,"estimate":2048411.1118015796,"calibrationEstimate":2048046.7279076576},{"id":"hmrc/state_pension_count_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_count_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":14000.0,"estimate":13532.682774543762,"calibrationEstimate":14466.858582496645},{"id":"hmrc/state_pension_count_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2320000.0,"estimate":2286300.7773593217,"calibrationEstimate":2301933.0940366536},{"id":"hmrc/state_pension_count_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":8000.0,"estimate":8824.107450008392,"calibrationEstimate":8798.864166736603},{"id":"hmrc/state_pension_count_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1160000.0,"estimate":1172676.499942258,"calibrationEstimate":1168167.4859495014},{"id":"hmrc/state_pension_count_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":568000.0,"estimate":575256.3978573233,"calibrationEstimate":577815.7180559486},{"id":"hmrc/state_pension_count_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":3000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/state_pension_count_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":441000.0,"estimate":438393.6089271605,"calibrationEstimate":441668.3965354562},{"id":"hmrc/state_pension_count_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":176000.0,"estimate":175826.47564059496,"calibrationEstimate":177026.6087565422},{"id":"hmrc/state_pension_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":847000000.0,"estimate":854450089.7419467,"calibrationEstimate":844536099.8908701},{"id":"hmrc/state_pension_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":11800000000.0,"estimate":13670650067.511356,"calibrationEstimate":12372946997.791916},{"id":"hmrc/state_pension_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":265000000.0,"estimate":282114083.0780946,"calibrationEstimate":271975929.42016745},{"id":"hmrc/state_pension_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":22200000000.0,"estimate":23998719050.76559,"calibrationEstimate":23797516261.50798},{"id":"hmrc/state_pension_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":20000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":179000000.0,"estimate":172983951.4445731,"calibrationEstimate":182038746.25456983},{"id":"hmrc/state_pension_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":26825875119.04113,"calibrationEstimate":26781706814.29911},{"id":"hmrc/state_pension_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":96000000.0,"estimate":91457269.84436607,"calibrationEstimate":90425861.10211164},{"id":"hmrc/state_pension_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":12300000000.0,"estimate":13220363004.652786,"calibrationEstimate":13047202267.625652},{"id":"hmrc/state_pension_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":6020000000.0,"estimate":6333296578.738886,"calibrationEstimate":6303111646.291419},{"id":"hmrc/state_pension_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":43000000.0,"estimate":56836446.07211137,"calibrationEstimate":56614218.6125021},{"id":"hmrc/state_pension_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":4660000000.0,"estimate":4958283295.041033,"calibrationEstimate":4957592229.717251},{"id":"hmrc/state_pension_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":1890000000.0,"estimate":1925819081.9875,"calibrationEstimate":1921803586.7496536},{"id":"housing/rent_private","group":"Private and social rent paid","unit":"gbp","target":89035200000.0,"estimate":94232257148.01346,"calibrationEstimate":89015844391.93204},{"id":"housing/rent_social","group":"Private and social rent paid","unit":"gbp","target":30680000000.0,"estimate":36221593791.554085,"calibrationEstimate":33687842434.35097},{"id":"housing/total_mortgage","group":"Mortgage payments","unit":"gbp","target":99000000000.0,"estimate":112166702689.27348,"calibrationEstimate":113284488090.43108},{"id":"nts/households_no_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":6512000.0,"estimate":6886208.031410232,"calibrationEstimate":6916868.755762011},{"id":"nts/households_one_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":13024000.0,"estimate":15020756.833521975,"calibrationEstimate":15087636.514661329},{"id":"nts/households_two_plus_vehicles","group":"Households with no, one, and two or more vehicles","unit":"count","target":10064000.0,"estimate":9336322.44734241,"calibrationEstimate":9377892.274253026},{"id":"obr/attendance_allowance","group":"Attendance Allowance spending","unit":"gbp","target":8492497075.074617,"estimate":8738849002.944973,"calibrationEstimate":8777451467.048658},{"id":"obr/capital_gains_tax","group":"Capital gains tax receipts","unit":"gbp","target":21801546197.09165,"estimate":12717204530.457554,"calibrationEstimate":12569294855.576912},{"id":"obr/carers_allowance","group":"Carer's Allowance spending","unit":"gbp","target":4569403813.760573,"estimate":4546109316.312273,"calibrationEstimate":4668875054.2856655},{"id":"obr/child_benefit","group":"Child Benefit spending","unit":"gbp","target":13389272724.45089,"estimate":16225320972.639776,"calibrationEstimate":16338080740.281445},{"id":"obr/council_tax","group":"Council tax receipts, UK and by nation","unit":"gbp","target":50925163826.30539,"estimate":48221464271.11403,"calibrationEstimate":45300509759.81859},{"id":"obr/council_tax_england","group":"Council tax receipts, UK and by nation","unit":"gbp","target":44117237614.71528,"estimate":41824069103.301254,"calibrationEstimate":39205804365.029305},{"id":"obr/council_tax_scotland","group":"Council tax receipts, UK and by nation","unit":"gbp","target":3051227494.93594,"estimate":3763028655.037571,"calibrationEstimate":3638929999.068658},{"id":"obr/council_tax_wales","group":"Council tax receipts, UK and by nation","unit":"gbp","target":2400769752.36827,"estimate":2634366512.7752094,"calibrationEstimate":2455775395.7206206},{"id":"obr/domestic_rates","group":"Northern Ireland domestic rates receipts","unit":"gbp","target":494000000.0,"estimate":584068659.0970445,"calibrationEstimate":560119544.8439525},{"id":"obr/esa","group":"Incapacity benefits spending, scored against income-related ESA","unit":"gbp","target":7206287181.538654,"estimate":7343384263.9225025,"calibrationEstimate":7378653735.424012},{"id":"obr/fuel_duties","group":"Fuel duty receipts","unit":"gbp","target":24241874775.213375,"estimate":24533360153.833393,"calibrationEstimate":22246272742.96544},{"id":"obr/income_tax","group":"Income tax receipts","unit":"gbp","target":331437583074.4429,"estimate":301478832377.7914,"calibrationEstimate":296476469549.9654},{"id":"obr/jobseekers_allowance","group":"Jobseeker's Allowance spending","unit":"gbp","target":280558748.04472804,"estimate":299505958.51263523,"calibrationEstimate":300361802.45431787},{"id":"obr/ni","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":200081395082.7125,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employee","group":"National Insurance receipts, in total and from employees","unit":"gbp","target":49544363784.26465,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employer","group":"Employer National Insurance receipts","unit":"gbp","target":145324007512.71753,"estimate":154541037552.12073,"calibrationEstimate":152621840639.53052},{"id":"obr/ni_self_employed","group":"Self-employed National Insurance receipts","unit":"gbp","target":2902816090.4147716,"estimate":2609995976.5472517,"calibrationEstimate":2776828111.0540338},{"id":"obr/pip","group":"Personal Independence Payment spending","unit":"gbp","target":36910059270.5278,"estimate":26930742886.35225,"calibrationEstimate":27048283769.854137},{"id":"obr/private_school_students","group":"Pupils at independent schools","unit":"count","target":557000.0,"estimate":761425.2593497187,"calibrationEstimate":577547.7305030972},{"id":"obr/salary_sacrifice_users_above_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":3379200.0,"estimate":3416752.2773837894,"calibrationEstimate":3473463.5649632365},{"id":"obr/salary_sacrifice_users_below_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":4403200.0,"estimate":4567515.046537325,"calibrationEstimate":4546353.57234703},{"id":"obr/salary_sacrifice_users_total","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":7884800.0,"estimate":7984267.323921114,"calibrationEstimate":8019817.137310267},{"id":"obr/sdlt","group":"Stamp Duty Land Tax receipts","unit":"gbp","target":15406516698.785578,"estimate":16316115361.020012,"calibrationEstimate":15970017665.29672},{"id":"obr/state_pension","group":"State Pension spending","unit":"gbp","target":146185954351.57382,"estimate":123608848585.71336,"calibrationEstimate":123129508170.07487},{"id":"obr/statutory_maternity_pay","group":"Statutory Maternity Pay spending","unit":"gbp","target":3194800881.520547,"estimate":3337974284.302048,"calibrationEstimate":3347441886.5270486},{"id":"obr/tv_licence_fee","group":"TV licence fee receipts","unit":"gbp","target":3872000000.0,"estimate":4306586174.401851,"calibrationEstimate":4326303524.671558},{"id":"obr/universal_credit","group":"Universal Credit spending","unit":"gbp","target":79286349139.54411,"estimate":77648740273.65004,"calibrationEstimate":76378495756.28294},{"id":"obr/vat","group":"VAT receipts","unit":"gbp","target":180168938685.4179,"estimate":317136171663.4592,"calibrationEstimate":318035670462.85565},{"id":"obr/winter_fuel_allowance","group":"Winter Fuel Payment spending","unit":"gbp","target":1911040880.4619167,"estimate":1703858030.6710331,"calibrationEstimate":1712963122.996131},{"id":"ons/corporate_land_value","group":"Corporate land value","unit":"gbp","target":2057128451236.5017,"estimate":2058648990687.032,"calibrationEstimate":2509581347940.138},{"id":"ons/couple_3_plus_children_households","group":"Households by family type","unit":"count","target":931000.0,"estimate":939145.8302041292,"calibrationEstimate":943327.3600209357},{"id":"ons/couple_no_children_households","group":"Households by family type","unit":"count","target":8119000.0,"estimate":12928875.782972127,"calibrationEstimate":12986441.399504378},{"id":"ons/couple_non_dependent_children_only_households","group":"Households by family type","unit":"count","target":1848000.0,"estimate":1526672.7015325427,"calibrationEstimate":1533470.184832275},{"id":"ons/couple_under_3_children_households","group":"Households by family type","unit":"count","target":5439000.0,"estimate":5319173.021537095,"calibrationEstimate":5342856.555537075},{"id":"ons/east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":726000.0,"estimate":770230.939494133,"calibrationEstimate":773660.3856868744},{"id":"ons/east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":740606.7134604454,"calibrationEstimate":743904.2511110306},{"id":"ons/east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":749000.0,"estimate":756168.8946352005,"calibrationEstimate":759535.7300329208},{"id":"ons/east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":890000.0,"estimate":868918.0768876076,"calibrationEstimate":872786.9326715469},{"id":"ons/east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":851000.0,"estimate":843856.841021061,"calibrationEstimate":847614.101943016},{"id":"ons/east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":867000.0,"estimate":885889.451540947,"calibrationEstimate":889833.8577439785},{"id":"ons/east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":746000.0,"estimate":717175.1693952084,"calibrationEstimate":720368.3822858334},{"id":"ons/east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":643000.0,"estimate":602970.5396468639,"calibrationEstimate":605655.2605879307},{"id":"ons/east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":379000.0,"estimate":380440.2481365204,"calibrationEstimate":382134.1495399475},{"id":"ons/east_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":532000.0,"estimate":560764.1695084572,"calibrationEstimate":563260.9665122032},{"id":"ons/east_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":585000.0,"estimate":591315.0727558136,"calibrationEstimate":593947.8992090225},{"id":"ons/east_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":632000.0,"estimate":646598.6443405151,"calibrationEstimate":649477.6217494011},{"id":"ons/east_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":669000.0,"estimate":666351.030916214,"calibrationEstimate":669317.9424901009},{"id":"ons/east_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":621000.0,"estimate":627317.6343212128,"calibrationEstimate":630110.758951664},{"id":"ons/east_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":681000.0,"estimate":705804.5902404785,"calibrationEstimate":708947.1764411926},{"id":"ons/east_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":592000.0,"estimate":583389.1525392532,"calibrationEstimate":585986.6843750477},{"id":"ons/east_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":500000.0,"estimate":480258.3571476936,"calibrationEstimate":482396.70089006424},{"id":"ons/east_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":273000.0,"estimate":274763.10668992996,"calibrationEstimate":275986.48183584213},{"id":"ons/female_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1698816.0,"estimate":1839466.5737319589,"calibrationEstimate":1847656.770164296},{"id":"ons/female_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2041879.0,"estimate":1973291.4082101283,"calibrationEstimate":1982077.4540842024},{"id":"ons/female_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2036402.0,"estimate":1976182.4684885591,"calibrationEstimate":1984981.3977429569},{"id":"ons/female_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2033478.0,"estimate":2091247.116039395,"calibrationEstimate":2100558.3663989007},{"id":"ons/female_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2258028.0,"estimate":2327819.72517778,"calibrationEstimate":2338184.332134992},{"id":"ons/female_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2443559.0,"estimate":2426926.0614604205,"calibrationEstimate":2437731.887076691},{"id":"ons/female_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2497122.0,"estimate":2407409.1889739037,"calibrationEstimate":2418128.139254883},{"id":"ons/female_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2356214.0,"estimate":2354626.8180732727,"calibrationEstimate":2365110.7586767823},{"id":"ons/female_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2135556.0,"estimate":2146838.039360285,"calibrationEstimate":2156396.7979279608},{"id":"ons/female_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2206473.0,"estimate":2297529.9983963966,"calibrationEstimate":2307759.7106489986},{"id":"ons/female_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2340737.0,"estimate":2437237.7694670856,"calibrationEstimate":2448089.5275103897},{"id":"ons/female_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1918180.0,"estimate":2070228.5422207713,"calibrationEstimate":2079446.1990244535},{"id":"ons/female_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2248908.0,"estimate":2073595.834327519,"calibrationEstimate":2082828.495167717},{"id":"ons/female_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1890892.0,"estimate":1781039.4390323013,"calibrationEstimate":1788969.4821397066},{"id":"ons/female_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1619328.0,"estimate":1592091.0710516274,"calibrationEstimate":1599179.8343619704},{"id":"ons/female_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1575830.0,"estimate":1541204.8275257498,"calibrationEstimate":1548067.0152519343},{"id":"ons/female_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1064043.0,"estimate":2664726.503213957,"calibrationEstimate":2676591.14880161},{"id":"ons/female_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":766765.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/household_land_value","group":"Household land value","unit":"gbp","target":5042871548763.499,"estimate":5198482896887.592,"calibrationEstimate":5215371409340.588},{"id":"ons/household_land_value/EAST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":304799621177.5439,"estimate":311792425913.57996,"calibrationEstimate":312988388945.29297},{"id":"ons/household_land_value/EAST_OF_ENGLAND","group":"Household land value by region","unit":"gbp","target":542672059385.554,"estimate":546010650314.9476,"calibrationEstimate":548396090228.3013},{"id":"ons/household_land_value/LONDON","group":"Household land value by region","unit":"gbp","target":1188167933642.289,"estimate":1203185297593.549,"calibrationEstimate":1208464858198.298},{"id":"ons/household_land_value/NORTH_EAST","group":"Household land value by region","unit":"gbp","target":119603822538.99867,"estimate":120248252547.38388,"calibrationEstimate":120670781170.64792},{"id":"ons/household_land_value/NORTH_WEST","group":"Household land value by region","unit":"gbp","target":422892569458.29254,"estimate":432857394071.48694,"calibrationEstimate":433189776637.8822},{"id":"ons/household_land_value/SCOTLAND","group":"Household land value by region","unit":"gbp","target":280395193712.8084,"estimate":276640745849.4535,"calibrationEstimate":277860896632.4937},{"id":"ons/household_land_value/SOUTH_EAST","group":"Household land value by region","unit":"gbp","target":885848048153.7532,"estimate":895724028534.7693,"calibrationEstimate":899487561852.2374},{"id":"ons/household_land_value/SOUTH_WEST","group":"Household land value by region","unit":"gbp","target":456726035827.05096,"estimate":465653362247.4888,"calibrationEstimate":467005989225.08545},{"id":"ons/household_land_value/WALES","group":"Household land value by region","unit":"gbp","target":179320185054.4999,"estimate":188184118702.406,"calibrationEstimate":188687411488.70615},{"id":"ons/household_land_value/WEST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":364340113693.65784,"estimate":378739467069.95465,"calibrationEstimate":378904015968.6325},{"id":"ons/household_land_value/YORKSHIRE","group":"Household land value by region","unit":"gbp","target":298105966119.05054,"estimate":305323058887.67285,"calibrationEstimate":305558366397.4229},{"id":"ons/land_value","group":"Total land value","unit":"gbp","target":7100000000000.0,"estimate":7257131889855.828,"calibrationEstimate":7724952750742.861},{"id":"ons/lfs_employees","group":"Employees and self-employed people","unit":"count","target":29590000.0,"estimate":30415831.925368626,"calibrationEstimate":30551257.921766207},{"id":"ons/lfs_self_employed","group":"Employees and self-employed people","unit":"count","target":4395000.0,"estimate":4403629.709998399,"calibrationEstimate":4423236.792703286},{"id":"ons/london_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1042000.0,"estimate":1131491.4573817253,"calibrationEstimate":1136529.397939682},{"id":"ons/london_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1038000.0,"estimate":1037544.3274979593,"calibrationEstimate":1042163.9750480652},{"id":"ons/london_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1470000.0,"estimate":1451632.7812190056,"calibrationEstimate":1458096.1668362615},{"id":"ons/london_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1585000.0,"estimate":1492286.394011021,"calibrationEstimate":1498930.7603902817},{"id":"ons/london_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1314000.0,"estimate":1286887.5299487114,"calibrationEstimate":1292617.3732566831},{"id":"ons/london_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1078000.0,"estimate":1097971.444237709,"calibrationEstimate":1102860.1428632736},{"id":"ons/london_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":778000.0,"estimate":750930.0480790138,"calibrationEstimate":754273.5447840691},{"id":"ons/london_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":509000.0,"estimate":486360.6602535248,"calibrationEstimate":488526.16434693336},{"id":"ons/london_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":304000.0,"estimate":303559.92478847504,"calibrationEstimate":304911.5145406723},{"id":"ons/lone_households_over_65","group":"Households by family type","unit":"count","target":4254000.0,"estimate":5454455.018509299,"calibrationEstimate":5478740.884796768},{"id":"ons/lone_households_under_65","group":"Households by family type","unit":"count","target":4316000.0,"estimate":5250786.593510598,"calibrationEstimate":5274165.638094544},{"id":"ons/lone_parent_dependent_children_households","group":"Households by family type","unit":"count","target":1835000.0,"estimate":2798771.157480851,"calibrationEstimate":2811232.6388974935},{"id":"ons/lone_parent_non_dependent_children_households","group":"Households by family type","unit":"count","target":1204000.0,"estimate":1057331.2494069785,"calibrationEstimate":1062038.9998702407},{"id":"ons/male_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1784490.0,"estimate":1917864.3619012684,"calibrationEstimate":1926403.6264294984},{"id":"ons/male_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2143309.0,"estimate":2053535.895194322,"calibrationEstimate":2062679.227788061},{"id":"ons/male_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2149930.0,"estimate":2047459.0866241455,"calibrationEstimate":2056575.355904788},{"id":"ons/male_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2136737.0,"estimate":2167020.575371682,"calibrationEstimate":2176669.196182668},{"id":"ons/male_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2246892.0,"estimate":2353607.326105356,"calibrationEstimate":2364086.752364412},{"id":"ons/male_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2323977.0,"estimate":2306814.134287983,"calibrationEstimate":2317085.1808172166},{"id":"ons/male_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2325815.0,"estimate":2250484.0878130943,"calibrationEstimate":2260504.326561913},{"id":"ons/male_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2208064.0,"estimate":2202735.8511286825,"calibrationEstimate":2212543.500215322},{"id":"ons/male_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2040636.0,"estimate":2050379.9052236676,"calibrationEstimate":2059509.1825666577},{"id":"ons/male_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2119462.0,"estimate":2209499.6434261203,"calibrationEstimate":2219337.4005533904},{"id":"ons/male_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2234921.0,"estimate":2360950.5306516886,"calibrationEstimate":2371462.6275383234},{"id":"ons/male_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2011903.0,"estimate":2176776.512379959,"calibrationEstimate":2186468.5711850673},{"id":"ons/male_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2138720.0,"estimate":1998740.968729228,"calibrationEstimate":2007640.3199545296},{"id":"ons/male_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1785048.0,"estimate":1707467.9938359708,"calibrationEstimate":1715070.4678450525},{"id":"ons/male_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1472190.0,"estimate":1503642.8762648106,"calibrationEstimate":1510337.8170289395},{"id":"ons/male_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1370172.0,"estimate":1395090.3332718164,"calibrationEstimate":1401301.957366705},{"id":"ons/male_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":853423.0,"estimate":1009312.8459606916,"calibrationEstimate":1013806.7878290116},{"id":"ons/male_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":524918.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/multi_family_households","group":"Households by family type","unit":"count","target":244000.0,"estimate":3137645.9858644456,"calibrationEstimate":3151616.293736607},{"id":"ons/north_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":281000.0,"estimate":292283.856153965,"calibrationEstimate":293585.24245643616},{"id":"ons/north_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":311000.0,"estimate":316212.322912693,"calibrationEstimate":317620.25323677063},{"id":"ons/north_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":352029.96956157684,"calibrationEstimate":353597.3771824837},{"id":"ons/north_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":356000.0,"estimate":359699.50099754333,"calibrationEstimate":361301.0569238663},{"id":"ons/north_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":323000.0,"estimate":327139.90297079086,"calibrationEstimate":328596.4853038788},{"id":"ons/north_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":369000.0,"estimate":378836.79312348366,"calibrationEstimate":380523.55742669106},{"id":"ons/north_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":353000.0,"estimate":351102.3077030182,"calibrationEstimate":352665.5838704109},{"id":"ons/north_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":278000.0,"estimate":273663.8987689018,"calibrationEstimate":274882.38518714905},{"id":"ons/north_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":153000.0,"estimate":154565.45491456983,"calibrationEstimate":155253.65523910522},{"id":"ons/north_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":847000.0,"estimate":907878.5675086976,"calibrationEstimate":911920.8865337372},{"id":"ons/north_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":901000.0,"estimate":905132.2707009315,"calibrationEstimate":909162.354482174},{"id":"ons/north_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":986000.0,"estimate":1002199.312697649,"calibrationEstimate":1006661.592706442},{"id":"ons/north_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1056000.0,"estimate":1021326.8112883568,"calibrationEstimate":1025874.23654747},{"id":"ons/north_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":938000.0,"estimate":930422.6213030816,"calibrationEstimate":934565.3206562996},{"id":"ons/north_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1011000.0,"estimate":1030291.0328922272,"calibrationEstimate":1034878.3873639108},{"id":"ons/north_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":888000.0,"estimate":844032.2021713257,"calibrationEstimate":847790.2315773964},{"id":"ons/north_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":715000.0,"estimate":663851.5968799591,"calibrationEstimate":666807.391629219},{"id":"ons/north_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":399000.0,"estimate":395580.82154369354,"calibrationEstimate":397342.1398239136},{"id":"ons/northern_ireland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":234000.0,"estimate":238573.53098157048,"calibrationEstimate":239635.77313242853},{"id":"ons/northern_ireland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":244000.0,"estimate":247808.06932733953,"calibrationEstimate":248911.4319036454},{"id":"ons/northern_ireland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":230000.0,"estimate":232551.80645041168,"calibrationEstimate":233587.23901306093},{"id":"ons/northern_ireland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":264000.0,"estimate":269491.1257661581,"calibrationEstimate":270691.02561856806},{"id":"ons/northern_ireland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":254000.0,"estimate":257494.5271097273,"calibrationEstimate":258641.01725278795},{"id":"ons/northern_ireland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":257000.0,"estimate":258119.9789763689,"calibrationEstimate":259269.25098092857},{"id":"ons/northern_ireland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":224000.0,"estimate":232054.6853407323,"calibrationEstimate":233087.90260344744},{"id":"ons/northern_ireland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":165000.0,"estimate":170104.10925373435,"calibrationEstimate":170861.4931807816},{"id":"ons/northern_ireland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":93000.0,"estimate":98419.55169644952,"calibrationEstimate":98857.76071341336},{"id":"ons/public_sector_employment","group":"Public sector employment","unit":"count","target":5940000.0,"estimate":6304094.97840783,"calibrationEstimate":6332163.859895036},{"id":"ons/savings_interest_income","group":"Household savings interest","unit":"gbp","target":95477000000.0,"estimate":80129221535.43391,"calibrationEstimate":79246943861.21257},{"id":"ons/scotland_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":526000.0,"estimate":647600.8949885368,"calibrationEstimate":650484.328666091},{"id":"ons/scotland_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":597000.0,"estimate":659703.4958338141,"calibrationEstimate":662640.8183342814},{"id":"ons/scotland_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":709000.0,"estimate":740762.218244791,"calibrationEstimate":744060.4591063857},{"id":"ons/scotland_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":736000.0,"estimate":773940.4599794149,"calibrationEstimate":777386.4158806205},{"id":"ons/scotland_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":691000.0,"estimate":725636.149921596,"calibrationEstimate":728867.0354478359},{"id":"ons/scotland_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":788000.0,"estimate":794386.7686737776,"calibrationEstimate":797923.7666577101},{"id":"ons/scotland_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":727000.0,"estimate":654615.490395546,"calibrationEstimate":657530.1593027711},{"id":"ons/scotland_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":546000.0,"estimate":518987.09887486696,"calibrationEstimate":521297.8820120692},{"id":"ons/scotland_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":297000.0,"estimate":309508.9369607568,"calibrationEstimate":310887.0211943984},{"id":"ons/scotland_babies_under_1","group":"Population by region and ten-year age band","unit":"count","target":46000.0,"estimate":48106.95701152086,"calibrationEstimate":48321.15257507563},{"id":"ons/scotland_children_under_16","group":"Population by region and ten-year age band","unit":"count","target":892000.0,"estimate":956540.2894876004,"calibrationEstimate":960799.27374506},{"id":"ons/scotland_households_3plus_children","group":"Scottish households with three or more children","unit":"count","target":82000.0,"estimate":86080.43200981617,"calibrationEstimate":86463.70450717211},{"id":"ons/south_east_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":1039000.0,"estimate":1114232.5491027832,"calibrationEstimate":1119193.650694847},{"id":"ons/south_east_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":1114000.0,"estimate":1104025.5058307648,"calibrationEstimate":1108941.1569581032},{"id":"ons/south_east_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":1093000.0,"estimate":1101930.081794262,"calibrationEstimate":1106836.4138650894},{"id":"ons/south_east_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":1283000.0,"estimate":1222137.9367275238,"calibrationEstimate":1227579.4830198288},{"id":"ons/south_east_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":1273000.0,"estimate":1233437.5373487473,"calibrationEstimate":1238929.3965697289},{"id":"ons/south_east_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":1287000.0,"estimate":1315585.8211021423,"calibrationEstimate":1321443.4466571808},{"id":"ons/south_east_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":1089000.0,"estimate":1013925.5353107452,"calibrationEstimate":1018440.030857563},{"id":"ons/south_east_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":927000.0,"estimate":834819.8441057205,"calibrationEstimate":838536.8671865463},{"id":"ons/south_east_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":559000.0,"estimate":542841.088037014,"calibrationEstimate":545258.0736494064},{"id":"ons/south_west_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":576000.0,"estimate":604655.1198301315,"calibrationEstimate":607347.3345069885},{"id":"ons/south_west_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":646000.0,"estimate":654375.9588766098,"calibrationEstimate":657289.5604567528},{"id":"ons/south_west_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":694000.0,"estimate":709386.0963587761,"calibrationEstimate":712544.6284022331},{"id":"ons/south_west_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":732462.76395607,"calibrationEstimate":735724.0381350517},{"id":"ons/south_west_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":704000.0,"estimate":701804.148378849,"calibrationEstimate":704928.919002533},{"id":"ons/south_west_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":794000.0,"estimate":812267.9054384232,"calibrationEstimate":815884.5122971535},{"id":"ons/south_west_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":741000.0,"estimate":714519.8350300789,"calibrationEstimate":717701.2218279839},{"id":"ons/south_west_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":662000.0,"estimate":619540.1825652122,"calibrationEstimate":622298.66963768},{"id":"ons/south_west_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":388000.0,"estimate":382782.8248333931,"calibrationEstimate":384487.1622633934},{"id":"ons/tenure_england_owned_outright","group":"Dwellings by tenure, by nation","unit":"count","target":8374612.0,"estimate":8764165.854846716,"calibrationEstimate":8803188.14887619},{"id":"ons/tenure_england_owned_with_mortgage","group":"Dwellings by tenure, by nation","unit":"count","target":7667051.0,"estimate":7360170.187984467,"calibrationEstimate":7392941.221483231},{"id":"ons/tenure_england_rented_privately","group":"Dwellings by tenure, by nation","unit":"count","target":5299840.0,"estimate":5789919.019839287,"calibrationEstimate":5815698.559220791},{"id":"ons/tenure_england_social_rent","group":"Dwellings by tenure, by nation","unit":"count","target":4274613.0,"estimate":4272671.371180296,"calibrationEstimate":4291695.364801168},{"id":"ons/tenure_england_total","group":"Dwellings by tenure, by nation","unit":"count","target":25616116.0,"estimate":26186926.433850765,"calibrationEstimate":26303523.29438138},{"id":"ons/uk_population","group":"UK population, in total and by sex and five-year age band","unit":"count","target":69502341.0,"estimate":69712844.3129216,"calibrationEstimate":70023239.6145},{"id":"ons/unrelated_adult_households","group":"Households by family type","unit":"count","target":813000.0,"estimate":1057450.6047298163,"calibrationEstimate":1062158.8866242766},{"id":"ons/wales_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":325000.0,"estimate":348106.06233742833,"calibrationEstimate":349655.9994878471},{"id":"ons/wales_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":362000.0,"estimate":377852.1347847581,"calibrationEstimate":379534.51495823264},{"id":"ons/wales_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":389000.0,"estimate":421177.7128336728,"calibrationEstimate":423053.0000615418},{"id":"ons/wales_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":408000.0,"estimate":408298.51544573903,"calibrationEstimate":410116.45715788007},{"id":"ons/wales_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":374000.0,"estimate":386225.7205041647,"calibrationEstimate":387945.3860552907},{"id":"ons/wales_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":432000.0,"estimate":453846.15008094907,"calibrationEstimate":455866.8945379853},{"id":"ons/wales_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":407000.0,"estimate":411359.2729103267,"calibrationEstimate":413190.8414015472},{"id":"ons/wales_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":343000.0,"estimate":340773.34702190757,"calibrationEstimate":342290.63411542773},{"id":"ons/wales_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":190000.0,"estimate":193830.5397951007,"calibrationEstimate":194693.5690819025},{"id":"ons/west_midlands_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":700000.0,"estimate":739812.0893673897,"calibrationEstimate":743106.0936331749},{"id":"ons/west_midlands_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":743000.0,"estimate":750032.0111775398,"calibrationEstimate":753371.5123896599},{"id":"ons/west_midlands_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":774000.0,"estimate":782119.0841474533,"calibrationEstimate":785601.4645900726},{"id":"ons/west_midlands_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":834000.0,"estimate":829667.6420812607,"calibrationEstimate":833361.7243332863},{"id":"ons/west_midlands_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":758000.0,"estimate":759738.0727472305,"calibrationEstimate":763120.7843537331},{"id":"ons/west_midlands_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":800000.0,"estimate":820177.6517162323,"calibrationEstimate":823829.4666743279},{"id":"ons/west_midlands_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":685000.0,"estimate":663277.1520633698,"calibrationEstimate":666230.3836565018},{"id":"ons/west_midlands_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":570000.0,"estimate":543874.736948967,"calibrationEstimate":546296.3349237442},{"id":"ons/west_midlands_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":337000.0,"estimate":342024.45200538635,"calibrationEstimate":343547.31078481674},{"id":"ons/yorkshire_and_the_humber_age_0_9","group":"Population by region and ten-year age band","unit":"count","target":618000.0,"estimate":648706.7535791397,"calibrationEstimate":651595.1075530052},{"id":"ons/yorkshire_and_the_humber_age_10_19","group":"Population by region and ten-year age band","unit":"count","target":666000.0,"estimate":665860.9753584862,"calibrationEstimate":668825.70743227},{"id":"ons/yorkshire_and_the_humber_age_20_29","group":"Population by region and ten-year age band","unit":"count","target":733000.0,"estimate":743138.1404109001,"calibrationEstimate":746446.95353508},{"id":"ons/yorkshire_and_the_humber_age_30_39","group":"Population by region and ten-year age band","unit":"count","target":764000.0,"estimate":747053.2144784927,"calibrationEstimate":750379.460542202},{"id":"ons/yorkshire_and_the_humber_age_40_49","group":"Population by region and ten-year age band","unit":"count","target":686000.0,"estimate":674619.9282107353,"calibrationEstimate":677623.6605932713},{"id":"ons/yorkshire_and_the_humber_age_50_59","group":"Population by region and ten-year age band","unit":"count","target":745000.0,"estimate":752040.3539185524,"calibrationEstimate":755388.8066067696},{"id":"ons/yorkshire_and_the_humber_age_60_69","group":"Population by region and ten-year age band","unit":"count","target":658000.0,"estimate":624463.3849864006,"calibrationEstimate":627243.798564434},{"id":"ons/yorkshire_and_the_humber_age_70_79","group":"Population by region and ten-year age band","unit":"count","target":536000.0,"estimate":496824.7366466522,"calibrationEstimate":499036.8403120041},{"id":"ons/yorkshire_and_the_humber_age_80_89","group":"Population by region and ten-year age band","unit":"count","target":302000.0,"estimate":295722.3997733593,"calibrationEstimate":297039.09796380997},{"id":"slc/adult_dependants_grant_recipients","group":"Adult Dependants' Grant: recipients and spending","unit":"count","target":18611.0,"estimate":10488.390624523165,"calibrationEstimate":17919.595499515533},{"id":"slc/adult_dependants_grant_spend","group":"Adult Dependants' Grant: recipients and spending","unit":"gbp","target":55364917.0,"estimate":37181344.76393461,"calibrationEstimate":63524966.045782566},{"id":"slc/maintenance_loan_recipients","group":"Maintenance loans: recipients and spending","unit":"count","target":1159761.0,"estimate":1115007.2203326223,"calibrationEstimate":1119971.7707395554},{"id":"slc/maintenance_loan_spend","group":"Maintenance loans: recipients and spending","unit":"gbp","target":8591659718.0,"estimate":9243921660.334114,"calibrationEstimate":9310652595.32858},{"id":"slc/parents_learning_allowance_recipients","group":"Parents' Learning Allowance: recipients and spending","unit":"count","target":99645.0,"estimate":98858.3031744957,"calibrationEstimate":99298.4696264267},{"id":"slc/parents_learning_allowance_spend","group":"Parents' Learning Allowance: recipients and spending","unit":"gbp","target":181421659.0,"estimate":200089205.6251793,"calibrationEstimate":200980102.52388763},{"id":"slc/plan_2_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":3985000.0,"estimate":4365258.374378204,"calibrationEstimate":4384694.640698433},{"id":"slc/plan_2_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":8940000.0,"estimate":6805751.482197762,"calibrationEstimate":6836054.020182133},{"id":"slc/plan_5_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":0.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/plan_5_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":10000.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/student_loan_repayment/england","group":"Student loan repayments, by nation and plan","unit":"gbp","target":5018231834.95,"estimate":5119208721.2338,"calibrationEstimate":4961058450.910856},{"id":"slc/student_loan_repayment/england/plan_1","group":"Student loan repayments, by nation and plan","unit":"gbp","target":1852699178.55,"estimate":1953753088.251544,"calibrationEstimate":1935645687.413804},{"id":"slc/student_loan_repayment/england/plan_2","group":"Student loan repayments, by nation and plan","unit":"gbp","target":2778253361.64,"estimate":3163065937.3426647,"calibrationEstimate":3023410861.2912726},{"id":"slc/student_loan_repayment/england/plan_5","group":"Student loan repayments, by nation and plan","unit":"gbp","target":40869580.81,"estimate":2389695.639591503,"calibrationEstimate":2001902.205781548},{"id":"slc/student_loan_repayment/england/postgraduate","group":"Student loan repayments, by nation and plan","unit":"gbp","target":346409713.95,"estimate":0.0,"calibrationEstimate":0.0},{"id":"slc/student_loan_repayment/northern_ireland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":181700000.0,"estimate":195403289.8778463,"calibrationEstimate":188624377.49343297},{"id":"slc/student_loan_repayment/scotland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":203300000.0,"estimate":221132909.0659362,"calibrationEstimate":213564948.46889892},{"id":"slc/student_loan_repayment/wales","group":"Student loan repayments, by nation and plan","unit":"gbp","target":229100000.0,"estimate":247405370.84255865,"calibrationEstimate":238897353.28110468},{"id":"sss/scottish_child_payment","group":"Scottish Child Payment spending","unit":"gbp","target":471000000.0,"estimate":497726869.8419191,"calibrationEstimate":499942991.15633214},{"id":"voa/council_tax/EAST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":804340.0,"estimate":812220.3750844002,"calibrationEstimate":815836.7769055367},{"id":"voa/council_tax/EAST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":505610.0,"estimate":512867.9080028534,"calibrationEstimate":515151.44179964066},{"id":"voa/council_tax/EAST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":403840.0,"estimate":409527.9134449959,"calibrationEstimate":411351.3289835453},{"id":"voa/council_tax/EAST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":247850.0,"estimate":252952.60029935837,"calibrationEstimate":254078.8680486679},{"id":"voa/council_tax/EAST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":154970.0,"estimate":158834.98216819763,"calibrationEstimate":159542.19471597672},{"id":"voa/council_tax/EAST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":73920.0,"estimate":76145.44448757172,"calibrationEstimate":76484.48072099686},{"id":"voa/council_tax/EAST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":39400.0,"estimate":40296.69438171387,"calibrationEstimate":40476.11449241638},{"id":"voa/council_tax/EAST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":3480.0,"estimate":3560.398073196411,"calibrationEstimate":3576.250594139099},{"id":"voa/council_tax/EAST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2233400.0,"estimate":2266406.315942287,"calibrationEstimate":2276497.4562609196},{"id":"voa/council_tax/EAST_OF_ENGLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":403180.0,"estimate":410904.2397751808,"calibrationEstimate":412733.7905740738},{"id":"voa/council_tax/EAST_OF_ENGLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":598950.0,"estimate":611632.8573641777,"calibrationEstimate":614356.1372361183},{"id":"voa/council_tax/EAST_OF_ENGLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":739570.0,"estimate":750946.7586493492,"calibrationEstimate":754290.3465647697},{"id":"voa/council_tax/EAST_OF_ENGLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":506540.0,"estimate":517253.3751280308,"calibrationEstimate":519556.4378812313},{"id":"voa/council_tax/EAST_OF_ENGLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":313840.0,"estimate":318550.18431663513,"calibrationEstimate":319968.5263018608},{"id":"voa/council_tax/EAST_OF_ENGLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":172960.0,"estimate":177523.18523740768,"calibrationEstimate":178313.60445976257},{"id":"voa/council_tax/EAST_OF_ENGLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":113720.0,"estimate":116179.86512231828,"calibrationEstimate":116697.15281319618},{"id":"voa/council_tax/EAST_OF_ENGLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":14830.0,"estimate":15408.850413322449,"calibrationEstimate":15477.458395004272},{"id":"voa/council_tax/EAST_OF_ENGLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2863600.0,"estimate":2918399.316006422,"calibrationEstimate":2931393.454226017},{"id":"voa/council_tax/LONDON/A","group":"Dwellings by council tax band and region","unit":"count","target":144550.0,"estimate":150375.55367183685,"calibrationEstimate":151045.09367752075},{"id":"voa/council_tax/LONDON/B","group":"Dwellings by council tax band and region","unit":"count","target":499130.0,"estimate":511106.1657552719,"calibrationEstimate":513381.8522338867},{"id":"voa/council_tax/LONDON/C","group":"Dwellings by council tax band and region","unit":"count","target":1040280.0,"estimate":1052713.1613850594,"calibrationEstimate":1057400.3456015587},{"id":"voa/council_tax/LONDON/D","group":"Dwellings by council tax band and region","unit":"count","target":975750.0,"estimate":988912.67416811,"calibrationEstimate":993315.7964680196},{"id":"voa/council_tax/LONDON/E","group":"Dwellings by council tax band and region","unit":"count","target":585130.0,"estimate":604620.8762998581,"calibrationEstimate":607312.9413566589},{"id":"voa/council_tax/LONDON/F","group":"Dwellings by council tax band and region","unit":"count","target":298920.0,"estimate":308940.16441679,"calibrationEstimate":310315.7166080475},{"id":"voa/council_tax/LONDON/G","group":"Dwellings by council tax band and region","unit":"count","target":225170.0,"estimate":230670.46613502505,"calibrationEstimate":231697.5183286667},{"id":"voa/council_tax/LONDON/H","group":"Dwellings by council tax band and region","unit":"count","target":68500.0,"estimate":70754.35682678223,"calibrationEstimate":71069.39036178589},{"id":"voa/council_tax/LONDON/total","group":"Dwellings by council tax band and region","unit":"count","target":3837430.0,"estimate":3918093.4186587334,"calibrationEstimate":3935538.6546361446},{"id":"voa/council_tax/NORTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":667540.0,"estimate":680737.9537260532,"calibrationEstimate":683768.9220235348},{"id":"voa/council_tax/NORTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":206790.0,"estimate":211970.4058327675,"calibrationEstimate":212914.200009346},{"id":"voa/council_tax/NORTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":196180.0,"estimate":202087.55218410492,"calibrationEstimate":202987.3474559784},{"id":"voa/council_tax/NORTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":113460.0,"estimate":115930.2783408165,"calibrationEstimate":116446.45661735536},{"id":"voa/council_tax/NORTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":61090.0,"estimate":61207.41867017746,"calibrationEstimate":61479.942474365234},{"id":"voa/council_tax/NORTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":26600.0,"estimate":26356.495221138,"calibrationEstimate":26473.84709215164},{"id":"voa/council_tax/NORTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":14600.0,"estimate":15486.845539569857,"calibrationEstimate":15555.80025434494},{"id":"voa/council_tax/NORTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":1570.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":1287830.0,"estimate":1313776.9495146277,"calibrationEstimate":1319626.5159270763},{"id":"voa/council_tax/NORTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":1386260.0,"estimate":1391080.06063509,"calibrationEstimate":1397273.8202409744},{"id":"voa/council_tax/NORTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":705450.0,"estimate":715903.5987789631,"calibrationEstimate":719091.151144743},{"id":"voa/council_tax/NORTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":616070.0,"estimate":626632.3857769966,"calibrationEstimate":629422.4471478462},{"id":"voa/council_tax/NORTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":363970.0,"estimate":371361.08140420914,"calibrationEstimate":373014.5641813278},{"id":"voa/council_tax/NORTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":216990.0,"estimate":223131.46934127808,"calibrationEstimate":224124.959856987},{"id":"voa/council_tax/NORTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":104330.0,"estimate":107420.41505765916,"calibrationEstimate":107898.70176649094},{"id":"voa/council_tax/NORTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":65750.0,"estimate":67545.51971292496,"calibrationEstimate":67846.26735258102},{"id":"voa/council_tax/NORTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":7350.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":3466140.0,"estimate":3503074.530707121,"calibrationEstimate":3518671.9116909504},{"id":"voa/council_tax/SCOTLAND/A","group":"Dwellings by council tax band and region","unit":"count","target":501021.459,"estimate":519230.9023320675,"calibrationEstimate":521542.7701560855},{"id":"voa/council_tax/SCOTLAND/B","group":"Dwellings by council tax band and region","unit":"count","target":584962.227,"estimate":602046.806920588,"calibrationEstimate":604727.4127128124},{"id":"voa/council_tax/SCOTLAND/C","group":"Dwellings by council tax band and region","unit":"count","target":427573.287,"estimate":445115.3774691224,"calibrationEstimate":447097.24797928333},{"id":"voa/council_tax/SCOTLAND/D","group":"Dwellings by council tax band and region","unit":"count","target":367240.86,"estimate":390433.5805595517,"calibrationEstimate":392171.9807073474},{"id":"voa/council_tax/SCOTLAND/E","group":"Dwellings by council tax band and region","unit":"count","target":364617.711,"estimate":383971.6045381427,"calibrationEstimate":385681.2364856601},{"id":"voa/council_tax/SCOTLAND/F","group":"Dwellings by council tax band and region","unit":"count","target":220344.516,"estimate":230924.03558689356,"calibrationEstimate":231952.2210955024},{"id":"voa/council_tax/SCOTLAND/G","group":"Dwellings by council tax band and region","unit":"count","target":141650.046,"estimate":147640.03100788593,"calibrationEstimate":148297.3968727589},{"id":"voa/council_tax/SCOTLAND/H","group":"Dwellings by council tax band and region","unit":"count","target":15738.894,"estimate":14844.596238613129,"calibrationEstimate":14910.691596031187},{"id":"voa/council_tax/SCOTLAND/total","group":"Dwellings by council tax band and region","unit":"count","target":2623149.0,"estimate":2734206.934652865,"calibrationEstimate":2746380.957605481},{"id":"voa/council_tax/SOUTH_EAST/A","group":"Dwellings by council tax band and region","unit":"count","target":367610.0,"estimate":376721.3822689056,"calibrationEstimate":378398.7290725708},{"id":"voa/council_tax/SOUTH_EAST/B","group":"Dwellings by council tax band and region","unit":"count","target":687430.0,"estimate":700808.5503644943,"calibrationEstimate":703928.8838472366},{"id":"voa/council_tax/SOUTH_EAST/C","group":"Dwellings by council tax band and region","unit":"count","target":1075940.0,"estimate":1090040.558608532,"calibrationEstimate":1094893.946111679},{"id":"voa/council_tax/SOUTH_EAST/D","group":"Dwellings by council tax band and region","unit":"count","target":843560.0,"estimate":858553.6785125732,"calibrationEstimate":862376.3792462349},{"id":"voa/council_tax/SOUTH_EAST/E","group":"Dwellings by council tax band and region","unit":"count","target":551730.0,"estimate":567477.6824498177,"calibrationEstimate":570004.3656759262},{"id":"voa/council_tax/SOUTH_EAST/F","group":"Dwellings by council tax band and region","unit":"count","target":337260.0,"estimate":344590.2440838814,"calibrationEstimate":346124.52712106705},{"id":"voa/council_tax/SOUTH_EAST/G","group":"Dwellings by council tax band and region","unit":"count","target":265610.0,"estimate":273549.8351545334,"calibrationEstimate":274767.8116083145},{"id":"voa/council_tax/SOUTH_EAST/H","group":"Dwellings by council tax band and region","unit":"count","target":40390.0,"estimate":41414.243516922,"calibrationEstimate":41598.64037132263},{"id":"voa/council_tax/SOUTH_EAST/total","group":"Dwellings by council tax band and region","unit":"count","target":4169520.0,"estimate":4253156.17495966,"calibrationEstimate":4272093.283054352},{"id":"voa/council_tax/SOUTH_WEST/A","group":"Dwellings by council tax band and region","unit":"count","target":473020.0,"estimate":482912.787299633,"calibrationEstimate":485062.9522204399},{"id":"voa/council_tax/SOUTH_WEST/B","group":"Dwellings by council tax band and region","unit":"count","target":644890.0,"estimate":652833.0327134132,"calibrationEstimate":655739.7580933571},{"id":"voa/council_tax/SOUTH_WEST/C","group":"Dwellings by council tax band and region","unit":"count","target":624030.0,"estimate":630313.4024662971,"calibrationEstimate":633119.8610377312},{"id":"voa/council_tax/SOUTH_WEST/D","group":"Dwellings by council tax band and region","unit":"count","target":432070.0,"estimate":436333.3158068657,"calibrationEstimate":438276.0832939148},{"id":"voa/council_tax/SOUTH_WEST/E","group":"Dwellings by council tax band and region","unit":"count","target":292090.0,"estimate":296615.94530296326,"calibrationEstimate":297936.61835718155},{"id":"voa/council_tax/SOUTH_WEST/F","group":"Dwellings by council tax band and region","unit":"count","target":147920.0,"estimate":150589.5069141388,"calibrationEstimate":151260.00522136688},{"id":"voa/council_tax/SOUTH_WEST/G","group":"Dwellings by council tax band and region","unit":"count","target":81960.0,"estimate":83527.61182880402,"calibrationEstimate":83899.51695775986},{"id":"voa/council_tax/SOUTH_WEST/H","group":"Dwellings by council tax band and region","unit":"count","target":8430.0,"estimate":8669.152314662933,"calibrationEstimate":8707.751531600952},{"id":"voa/council_tax/SOUTH_WEST/total","group":"Dwellings by council tax band and region","unit":"count","target":2704390.0,"estimate":2741794.754646778,"calibrationEstimate":2754002.546713352},{"id":"voa/council_tax/WALES/A","group":"Dwellings by council tax band and region","unit":"count","target":215380.0,"estimate":224605.6820923984,"calibrationEstimate":225605.73692715168},{"id":"voa/council_tax/WALES/B","group":"Dwellings by council tax band and region","unit":"count","target":307070.0,"estimate":320208.17440497875,"calibrationEstimate":321633.8936638236},{"id":"voa/council_tax/WALES/C","group":"Dwellings by council tax band and region","unit":"count","target":323220.0,"estimate":335451.0971978903,"calibrationEstimate":336944.68964356184},{"id":"voa/council_tax/WALES/D","group":"Dwellings by council tax band and region","unit":"count","target":241220.0,"estimate":250254.17059534788,"calibrationEstimate":251368.4234211743},{"id":"voa/council_tax/WALES/E","group":"Dwellings by council tax band and region","unit":"count","target":200840.0,"estimate":211026.1240774095,"calibrationEstimate":211965.71487867832},{"id":"voa/council_tax/WALES/F","group":"Dwellings by council tax band and region","unit":"count","target":122650.0,"estimate":126898.85001176596,"calibrationEstimate":127463.86601752044},{"id":"voa/council_tax/WALES/G","group":"Dwellings by council tax band and region","unit":"count","target":55190.0,"estimate":58875.90761309862,"calibrationEstimate":59138.051686525345},{"id":"voa/council_tax/WALES/H","group":"Dwellings by council tax band and region","unit":"count","target":13190.0,"estimate":13777.90127837658,"calibrationEstimate":13839.247251331806},{"id":"voa/council_tax/WALES/total","group":"Dwellings by council tax band and region","unit":"count","target":1484410.0,"estimate":1580971.558793813,"calibrationEstimate":1588010.8121637702},{"id":"voa/council_tax/WEST_MIDLANDS/A","group":"Dwellings by council tax band and region","unit":"count","target":786010.0,"estimate":801264.3020524979,"calibrationEstimate":804831.908847332},{"id":"voa/council_tax/WEST_MIDLANDS/B","group":"Dwellings by council tax band and region","unit":"count","target":654140.0,"estimate":667366.4046912193,"calibrationEstimate":670337.8446173668},{"id":"voa/council_tax/WEST_MIDLANDS/C","group":"Dwellings by council tax band and region","unit":"count","target":526260.0,"estimate":542465.0707445145,"calibrationEstimate":544880.3880476952},{"id":"voa/council_tax/WEST_MIDLANDS/D","group":"Dwellings by council tax band and region","unit":"count","target":302500.0,"estimate":308908.68011569977,"calibrationEstimate":310284.0953936577},{"id":"voa/council_tax/WEST_MIDLANDS/E","group":"Dwellings by council tax band and region","unit":"count","target":193700.0,"estimate":198747.3023056984,"calibrationEstimate":199632.22103261948},{"id":"voa/council_tax/WEST_MIDLANDS/F","group":"Dwellings by council tax band and region","unit":"count","target":105630.0,"estimate":107414.5040140152,"calibrationEstimate":107892.76392650604},{"id":"voa/council_tax/WEST_MIDLANDS/G","group":"Dwellings by council tax band and region","unit":"count","target":62780.0,"estimate":65637.16608524323,"calibrationEstimate":65929.41587018967},{"id":"voa/council_tax/WEST_MIDLANDS/H","group":"Dwellings by council tax band and region","unit":"count","target":6170.0,"estimate":6236.679645061493,"calibrationEstimate":6264.44837474823},{"id":"voa/council_tax/WEST_MIDLANDS/total","group":"Dwellings by council tax band and region","unit":"count","target":2637190.0,"estimate":2698040.1096539497,"calibrationEstimate":2710053.086110115},{"id":"voa/council_tax/YORKSHIRE/A","group":"Dwellings by council tax band and region","unit":"count","target":1070830.0,"estimate":1081951.5106871128,"calibrationEstimate":1086768.8853447435},{"id":"voa/council_tax/YORKSHIRE/B","group":"Dwellings by council tax band and region","unit":"count","target":514190.0,"estimate":523395.8514652252,"calibrationEstimate":525726.2633414268},{"id":"voa/council_tax/YORKSHIRE/C","group":"Dwellings by council tax band and region","unit":"count","target":432290.0,"estimate":438533.7035779953,"calibrationEstimate":440486.2676320076},{"id":"voa/council_tax/YORKSHIRE/D","group":"Dwellings by council tax band and region","unit":"count","target":249530.0,"estimate":251634.06920957565,"calibrationEstimate":252754.46445512772},{"id":"voa/council_tax/YORKSHIRE/E","group":"Dwellings by council tax band and region","unit":"count","target":158600.0,"estimate":159460.23387098312,"calibrationEstimate":160170.2293252945},{"id":"voa/council_tax/YORKSHIRE/F","group":"Dwellings by council tax band and region","unit":"count","target":75690.0,"estimate":76176.12427806854,"calibrationEstimate":76515.29922580719},{"id":"voa/council_tax/YORKSHIRE/G","group":"Dwellings by council tax band and region","unit":"count","target":42180.0,"estimate":43033.37067222595,"calibrationEstimate":43224.9764380455},{"id":"voa/council_tax/YORKSHIRE/H","group":"Dwellings by council tax band and region","unit":"count","target":3770.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/YORKSHIRE/total","group":"Dwellings by council tax band and region","unit":"count","target":2547080.0,"estimate":2574184.8637611866,"calibrationEstimate":2585646.385762453}] +[{"id":"dwp/benefit_cap_total_reduction","group":"Benefit cap: households capped and total reduction","unit":"gbp","target":320866000.0,"estimate":416482947.560074,"calibrationEstimate":330069710.0619365},{"id":"dwp/benefit_capped_households","group":"Benefit cap: households capped and total reduction","unit":"count","target":110637.0,"estimate":147944.28814807534,"calibrationEstimate":114504.09350681303},{"id":"dwp/esa_claimants","group":"Employment and Support Allowance claimants","unit":"count","target":999000.0,"estimate":904541.0915792732,"calibrationEstimate":909849.9250053912},{"id":"dwp/esa_contrib_claimants","group":"Contribution-based ESA claimants","unit":"count","target":620000.0,"estimate":716681.2252025008,"calibrationEstimate":719872.2350563705},{"id":"dwp/esa_income_claimants","group":"Income-related ESA claimants","unit":"count","target":180000.0,"estimate":188801.45329512656,"calibrationEstimate":190923.46925877035},{"id":"dwp/housing_benefit/over_pension_credit_age","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":7114700000.0,"estimate":7111903913.229882,"calibrationEstimate":7293068999.985946},{"id":"dwp/housing_benefit/over_pension_credit_age_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":1109000.0,"estimate":1093247.9535357058,"calibrationEstimate":1168281.94529891},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":584800000.0,"estimate":645921139.0904175,"calibrationEstimate":601213368.3664361},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":107000.0,"estimate":108791.38991189004,"calibrationEstimate":109275.78261888029},{"id":"dwp/jsa_claimants","group":"Jobseeker's Allowance claimants","unit":"count","target":71000.0,"estimate":69247.07556176186,"calibrationEstimate":69555.39922833443},{"id":"dwp/pension_credit","group":"Pension Credit claims and spending","unit":"gbp","target":6144470000.0,"estimate":6602274120.813976,"calibrationEstimate":6377744108.750391},{"id":"dwp/pension_credit_claims","group":"Pension Credit claims and spending","unit":"count","target":1382000.0,"estimate":1451705.6834389567,"calibrationEstimate":1452205.295378387},{"id":"dwp/pip_dl_enhanced_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1608000.0,"estimate":1953368.303418666,"calibrationEstimate":1962065.646411702},{"id":"dwp/pip_dl_standard_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1283000.0,"estimate":1419466.81792067,"calibrationEstimate":1425786.9713478386},{"id":"dwp/scotland_uc_households_child_under_1","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":14000.0,"estimate":14566.249044418337,"calibrationEstimate":14631.105303406715},{"id":"dwp/uc/claimants_couple_no_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":231368.0,"estimate":250896.79244339463,"calibrationEstimate":251991.6941986084},{"id":"dwp/uc/claimants_couple_with_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":839379.0,"estimate":913383.3023456336,"calibrationEstimate":920606.89293769},{"id":"dwp/uc/claimants_single_no_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":2868011.0,"estimate":2889435.6531457454,"calibrationEstimate":2918404.0829007328},{"id":"dwp/uc/claimants_single_with_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":2156879.0,"estimate":2380399.2202840894,"calibrationEstimate":2392176.4252111316},{"id":"dwp/uc/claimants_with_1_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":1222944.0,"estimate":1295755.060847789,"calibrationEstimate":1302878.9863807857},{"id":"dwp/uc/claimants_with_2_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":1058967.0,"estimate":1121193.9276535958,"calibrationEstimate":1125632.9012648463},{"id":"dwp/uc/claimants_with_3_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":473500.0,"estimate":502609.9927156568,"calibrationEstimate":507203.147459805},{"id":"dwp/uc/claimants_with_4_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":166790.0,"estimate":174326.93197226524,"calibrationEstimate":175103.1191417575},{"id":"dwp/uc/claimants_with_5+_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":75910.0,"estimate":79091.86563810706,"calibrationEstimate":79444.01964199543},{"id":"dwp/uc/households","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":6700000.0,"estimate":6348971.35797745,"calibrationEstimate":6395623.053902179},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":7610.0,"estimate":7420.538169384003,"calibrationEstimate":7514.299792408943},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12370.0,"estimate":15733.237529218197,"calibrationEstimate":12799.954794287682},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":15175.0,"estimate":11472.3235373199,"calibrationEstimate":15871.05467006564},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":12297.0,"estimate":12021.353377342224,"calibrationEstimate":12654.892155706882},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17828.0,"estimate":19456.112460017204,"calibrationEstimate":18263.504908561707},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":14427.0,"estimate":15080.27974140644,"calibrationEstimate":15080.074879169464},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":11892.0,"estimate":17644.776905357838,"calibrationEstimate":11945.356312990189},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":9463.0,"estimate":10057.979517936708,"calibrationEstimate":9759.450750350952},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8443.0,"estimate":9638.97747528553,"calibrationEstimate":8904.66766166687},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8906.0,"estimate":8274.131901025772,"calibrationEstimate":9022.64424419403},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5770.0,"estimate":4132.918827056885,"calibrationEstimate":5968.669494628906},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":3485.0,"estimate":5987.513103485107,"calibrationEstimate":3668.190024375915},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":2360.0,"estimate":2347.807508468628,"calibrationEstimate":2415.9390258789062},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":1815.0,"estimate":443.7221064567566,"calibrationEstimate":1831.3727984428408},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":1186.0,"estimate":2170.6248083114624,"calibrationEstimate":1187.413498878479},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":935.0,"estimate":1428.0487060546875,"calibrationEstimate":967.2799072265624},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":632.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":580.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":11750.0,"estimate":13848.374123096466,"calibrationEstimate":11923.90768444538},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":1424.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":10802.0,"estimate":8128.508852601051,"calibrationEstimate":10862.276925444605},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12168.0,"estimate":16164.80532181263,"calibrationEstimate":12346.467386484146},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":12461.0,"estimate":5748.578682214022,"calibrationEstimate":12841.8128490448},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":15787.0,"estimate":17204.907525718212,"calibrationEstimate":16464.121763527393},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":14248.0,"estimate":14648.581487357616,"calibrationEstimate":14936.235798239708},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":17559.0,"estimate":15425.641696095468,"calibrationEstimate":18029.333872824907},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":18714.0,"estimate":17000.313221901655,"calibrationEstimate":18860.421827226877},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":42188.0,"estimate":37726.34860146046,"calibrationEstimate":44076.01454716921},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":41520.0,"estimate":47141.35041385889,"calibrationEstimate":43324.978789806366},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":41159.0,"estimate":41947.755105018616,"calibrationEstimate":43194.09025865793},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":42515.0,"estimate":43577.436663627625,"calibrationEstimate":44944.778411865234},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":38527.0,"estimate":41018.2691783905,"calibrationEstimate":40481.27525937557},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":38894.0,"estimate":38215.3523761034,"calibrationEstimate":40602.91079157591},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":38659.0,"estimate":41123.29328751564,"calibrationEstimate":40460.888354063034},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34318.0,"estimate":48566.454991579056,"calibrationEstimate":35928.6571059227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":22489.0,"estimate":21205.43173134327,"calibrationEstimate":23000.909938097},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":30116.0,"estimate":28863.080528736115,"calibrationEstimate":31526.387284994125},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":28519.0,"estimate":21444.73471069336,"calibrationEstimate":29762.76909518242},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":26014.0,"estimate":23408.44104397297,"calibrationEstimate":26872.75042545795},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":23159.0,"estimate":35138.78228497505,"calibrationEstimate":24115.846549868584},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":20618.0,"estimate":16612.729299545288,"calibrationEstimate":21560.06649184227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17493.0,"estimate":19232.653191685677,"calibrationEstimate":18100.27004623413},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":15437.0,"estimate":20070.599754333496,"calibrationEstimate":15988.015625},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12836.0,"estimate":11836.146595954897,"calibrationEstimate":13421.761481285095},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":26734.0,"estimate":28675.483907222748,"calibrationEstimate":27596.403090000153},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":61727.0,"estimate":65997.26235544682,"calibrationEstimate":64758.198789417744},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":29189.0,"estimate":28463.220873951912,"calibrationEstimate":30442.063633084297},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":33137.0,"estimate":31760.17704331875,"calibrationEstimate":34303.848853588104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":35834.0,"estimate":26437.818723022938,"calibrationEstimate":37270.02708786726},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":38338.0,"estimate":54036.251175284386,"calibrationEstimate":40042.640211343765},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":40685.0,"estimate":44348.22739729285,"calibrationEstimate":42527.98726695776},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":40564.0,"estimate":34501.503211796284,"calibrationEstimate":42208.232148468494},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":24639.0,"estimate":39168.9606487751,"calibrationEstimate":25625.726674437523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":126949.0,"estimate":142487.4302058667,"calibrationEstimate":133277.48989093304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":131129.0,"estimate":95377.8368690312,"calibrationEstimate":137752.16340973973},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":131289.0,"estimate":157107.79431578517,"calibrationEstimate":137750.63612690568},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":119355.0,"estimate":129818.38890782,"calibrationEstimate":124892.34173852204},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":130802.0,"estimate":131328.063896209,"calibrationEstimate":136759.86128601432},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":141848.0,"estimate":150728.17493000627,"calibrationEstimate":148309.65001174808},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":136835.0,"estimate":133713.73497787118,"calibrationEstimate":142901.4171705842},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":107556.0,"estimate":111484.7263495922,"calibrationEstimate":113109.20482206345},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34670.0,"estimate":29272.17201089859,"calibrationEstimate":36466.16493701935},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":86616.0,"estimate":104096.27746334672,"calibrationEstimate":90422.71904051304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":80294.0,"estimate":73354.04017925262,"calibrationEstimate":84354.22553360462},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":70309.0,"estimate":89331.43440103531,"calibrationEstimate":73447.99977698922},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":50510.0,"estimate":72202.29325729609,"calibrationEstimate":53156.73221343756},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":42522.0,"estimate":18497.629060208797,"calibrationEstimate":44506.54565644264},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":33508.0,"estimate":49045.771344304085,"calibrationEstimate":35145.99563121796},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":27063.0,"estimate":30266.55286216736,"calibrationEstimate":28766.448501110077},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":21663.0,"estimate":26942.793876886368,"calibrationEstimate":22648.643339395523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":43623.0,"estimate":37809.548577189445,"calibrationEstimate":45833.974639594555},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":82905.0,"estimate":97151.36844921112,"calibrationEstimate":87104.91118597984},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":55622.0,"estimate":60510.223631858826,"calibrationEstimate":58795.10524368286},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":67901.0,"estimate":71725.4553387165,"calibrationEstimate":70821.50663983822},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":89314.0,"estimate":86143.68657708168,"calibrationEstimate":93578.26927548648},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":118641.0,"estimate":119403.35334032774,"calibrationEstimate":124258.13893908262},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":99069.0,"estimate":97294.37053111196,"calibrationEstimate":103667.6788329184},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":102251.0,"estimate":96173.39577645063,"calibrationEstimate":107101.9515336156},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":102312.0,"estimate":87279.16967123747,"calibrationEstimate":107319.9899930358},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":95698.0,"estimate":135695.77643716335,"calibrationEstimate":100056.6025826335},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":106663.0,"estimate":124074.26766955853,"calibrationEstimate":111498.78546503186},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":181180.0,"estimate":188187.3756595254,"calibrationEstimate":191690.2932780385},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":189861.0,"estimate":186351.02785767615,"calibrationEstimate":199963.96529877183},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":129174.0,"estimate":185164.77054291964,"calibrationEstimate":136010.89976614714},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":84690.0,"estimate":54264.40361404419,"calibrationEstimate":88587.68869447708},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":46244.0,"estimate":71491.7329352498,"calibrationEstimate":47919.61390686035},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":26481.0,"estimate":35623.84896039963,"calibrationEstimate":27905.27891921997},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":120819.0,"estimate":128539.76422923803,"calibrationEstimate":126547.3099425435},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":18143.0,"estimate":31588.639366149902,"calibrationEstimate":18797.771575927734},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":12325.0,"estimate":4426.75733757019,"calibrationEstimate":12941.009860992432},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":9555.0,"estimate":10281.057233810425,"calibrationEstimate":9941.590031147003},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":6230.0,"estimate":8126.360444545746,"calibrationEstimate":6391.2335205078125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":5884.0,"estimate":6362.902786254883,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5362.0,"estimate":1998.391206741333,"calibrationEstimate":5583.823296546936},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":1786.0,"estimate":2339.0858516693115,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":1491.0,"estimate":1221.5946044921875,"calibrationEstimate":1580.0684814453125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":173925.0,"estimate":173553.54143616557,"calibrationEstimate":180896.03793656823},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":3518.0,"estimate":5268.748246669769,"calibrationEstimate":3712.138840675354},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":375706.0,"estimate":405618.4962475896,"calibrationEstimate":399359.66108581424},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":200713.0,"estimate":186214.24044963715,"calibrationEstimate":212072.70295926929},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":107860.0,"estimate":76928.3390161097,"calibrationEstimate":113803.28732386231},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":144036.0,"estimate":167346.22477129102,"calibrationEstimate":151404.9450480342},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":377221.0,"estimate":349366.41928082705,"calibrationEstimate":405079.322792083},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":341138.0,"estimate":368394.08331155777,"calibrationEstimate":365472.416688472},{"id":"hmrc/capital_gains_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5805652941.176472,"estimate":2178688648.0482244,"calibrationEstimate":2141544289.3825493},{"id":"hmrc/capital_gains_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":6567201680.67227,"estimate":7324580857.580844,"calibrationEstimate":5995201312.511488},{"id":"hmrc/capital_gains_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":1457322689.0756304,"estimate":876994527.1745476,"calibrationEstimate":832080688.7293456},{"id":"hmrc/capital_gains_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":9443821008.403362,"estimate":8915647072.518879,"calibrationEstimate":8817479175.49674},{"id":"hmrc/capital_gains_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":2718348739.4957986,"estimate":1471546074.3489742,"calibrationEstimate":1444078653.7115064},{"id":"hmrc/capital_gains_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":4898166386.554623,"estimate":3799760749.882065,"calibrationEstimate":3788282184.501421},{"id":"hmrc/capital_gains_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":3834464705.882354,"estimate":1744185904.570274,"calibrationEstimate":1735553375.6752963},{"id":"hmrc/capital_gains_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5863205882.3529415,"estimate":4403841031.357599,"calibrationEstimate":5555259154.762842},{"id":"hmrc/capital_gains_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":23343884033.61345,"estimate":21727639789.17903,"calibrationEstimate":21488402885.15877},{"id":"hmrc/capital_gains_total","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":67727478991.59665,"estimate":55861737820.9182,"calibrationEstimate":55238457530.72525},{"id":"hmrc/cgt_taxpayers","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":378000.0,"estimate":594003.8427731246,"calibrationEstimate":593891.4494462013},{"id":"hmrc/cgt_taxpayers_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":37000.0,"estimate":13544.740693077443,"calibrationEstimate":13360.691625073552},{"id":"hmrc/cgt_taxpayers_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":5000.0,"estimate":5812.870928764343,"calibrationEstimate":4586.156556129456},{"id":"hmrc/cgt_taxpayers_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":79000.0,"estimate":50256.21771013737,"calibrationEstimate":46247.366893053055},{"id":"hmrc/cgt_taxpayers_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":3000.0,"estimate":2788.615041732788,"calibrationEstimate":2801.031301498413},{"id":"hmrc/cgt_taxpayers_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":74000.0,"estimate":43994.12303459644,"calibrationEstimate":43312.22687217593},{"id":"hmrc/cgt_taxpayers_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":14000.0,"estimate":10944.578097075224,"calibrationEstimate":11016.595499932766},{"id":"hmrc/cgt_taxpayers_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":53000.0,"estimate":24514.88641294837,"calibrationEstimate":24518.887231260534},{"id":"hmrc/cgt_taxpayers_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":8000.0,"estimate":6178.642288446426,"calibrationEstimate":7360.933691740036},{"id":"hmrc/cgt_taxpayers_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":2000.0,"estimate":1832.8698182106016,"calibrationEstimate":1841.0306429862976},{"id":"hmrc/dividend_income_count_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":222000.0,"estimate":229554.611115098,"calibrationEstimate":229451.83542212844},{"id":"hmrc/dividend_income_count_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":115000.0,"estimate":122498.21870449184,"calibrationEstimate":116450.05363586544},{"id":"hmrc/dividend_income_count_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":92000.0,"estimate":95837.3041176498,"calibrationEstimate":94981.9433400631},{"id":"hmrc/dividend_income_count_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":372000.0,"estimate":347627.6361439526,"calibrationEstimate":382888.00691989064},{"id":"hmrc/dividend_income_count_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":19000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_count_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":75000.0,"estimate":76900.66770100594,"calibrationEstimate":77183.34881728888},{"id":"hmrc/dividend_income_count_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":843000.0,"estimate":867481.3310358822,"calibrationEstimate":871528.9038848877},{"id":"hmrc/dividend_income_count_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":49000.0,"estimate":45323.63685941696,"calibrationEstimate":50523.88130879402},{"id":"hmrc/dividend_income_count_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":667000.0,"estimate":703025.5269361734,"calibrationEstimate":686016.7727653384},{"id":"hmrc/dividend_income_count_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":627000.0,"estimate":650857.9845430255,"calibrationEstimate":655597.3248263001},{"id":"hmrc/dividend_income_count_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":32000.0,"estimate":18903.09976196289,"calibrationEstimate":13924.291625976562},{"id":"hmrc/dividend_income_count_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":673194.9035950899,"calibrationEstimate":665673.386961177},{"id":"hmrc/dividend_income_count_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":336000.0,"estimate":343528.61046367884,"calibrationEstimate":346362.1282174885},{"id":"hmrc/dividend_income_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":6870000000.0,"estimate":7095222924.861016,"calibrationEstimate":7114063772.399986},{"id":"hmrc/dividend_income_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":175000000.0,"estimate":192951222.35627183,"calibrationEstimate":173661019.52219003},{"id":"hmrc/dividend_income_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3450000000.0,"estimate":3692746817.185143,"calibrationEstimate":3550464125.442072},{"id":"hmrc/dividend_income_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":855000000.0,"estimate":845993440.2610878,"calibrationEstimate":880729109.8346382},{"id":"hmrc/dividend_income_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":11100000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3700000000.0,"estimate":3828837168.167787,"calibrationEstimate":3797956584.5345135},{"id":"hmrc/dividend_income_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3330000000.0,"estimate":3395614770.515832,"calibrationEstimate":3442786712.469958},{"id":"hmrc/dividend_income_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3430000000.0,"estimate":3496980217.987605,"calibrationEstimate":3447032285.480977},{"id":"hmrc/dividend_income_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":4700000000.0,"estimate":4851171796.430717,"calibrationEstimate":4835994933.974208},{"id":"hmrc/dividend_income_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":8400000000.0,"estimate":8938303214.071344,"calibrationEstimate":8791437358.27874},{"id":"hmrc/dividend_income_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3820000000.0,"estimate":156339333.4031915,"calibrationEstimate":154123616.4699381},{"id":"hmrc/dividend_income_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":12500000000.0,"estimate":13160523430.36148,"calibrationEstimate":12946721023.778358},{"id":"hmrc/dividend_income_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":9440000000.0,"estimate":10052671812.436289,"calibrationEstimate":9911749501.39766},{"id":"hmrc/employment_income_count_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":791000.0,"estimate":843150.2165419757,"calibrationEstimate":826560.6833594143},{"id":"hmrc/employment_income_count_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1360000.0,"estimate":1381056.812882781,"calibrationEstimate":1389994.5120541155},{"id":"hmrc/employment_income_count_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":264000.0,"estimate":283089.4560998976,"calibrationEstimate":272207.9791575968},{"id":"hmrc/employment_income_count_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3100000.0,"estimate":2941183.2826600075,"calibrationEstimate":3131268.366346717},{"id":"hmrc/employment_income_count_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_count_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":180000.0,"estimate":183886.50804448128,"calibrationEstimate":191119.33520907164},{"id":"hmrc/employment_income_count_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":7470000.0,"estimate":7394907.693445265,"calibrationEstimate":7696814.897311896},{"id":"hmrc/employment_income_count_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":93000.0,"estimate":107923.93404233456,"calibrationEstimate":100106.93683218956},{"id":"hmrc/employment_income_count_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":5370000.0,"estimate":5930080.231027737,"calibrationEstimate":5646706.61297296},{"id":"hmrc/employment_income_count_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3500000.0,"estimate":3692167.4615677,"calibrationEstimate":3691681.077874422},{"id":"hmrc/employment_income_count_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":44000.0,"estimate":51452.47190284729,"calibrationEstimate":46618.58825778961},{"id":"hmrc/employment_income_count_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3430000.0,"estimate":3712399.601767317,"calibrationEstimate":3598074.21717},{"id":"hmrc/employment_income_count_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1640000.0,"estimate":1755926.1428863704,"calibrationEstimate":1737828.3395847082},{"id":"hmrc/employment_income_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":82300000000.0,"estimate":91413568331.97716,"calibrationEstimate":89270291253.19441},{"id":"hmrc/employment_income_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17625951516.993526,"calibrationEstimate":17707792264.599216},{"id":"hmrc/employment_income_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":39200000000.0,"estimate":43121325615.01092,"calibrationEstimate":41343663545.83801},{"id":"hmrc/employment_income_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":48600000000.0,"estimate":48521133900.22364,"calibrationEstimate":51842432145.73113},{"id":"hmrc/employment_income_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":35500000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":36600000000.0,"estimate":36151749235.49467,"calibrationEstimate":38383016939.89171},{"id":"hmrc/employment_income_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":172000000000.0,"estimate":177253034078.8408,"calibrationEstimate":185685923740.2714},{"id":"hmrc/employment_income_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":29000000000.0,"estimate":32519523768.135063,"calibrationEstimate":30656152523.340366},{"id":"hmrc/employment_income_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":170000000000.0,"estimate":195144568163.3972,"calibrationEstimate":186138215953.9731},{"id":"hmrc/employment_income_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":139000000000.0,"estimate":152968049441.96802,"calibrationEstimate":152580231489.52524},{"id":"hmrc/employment_income_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":23100000000.0,"estimate":27980302639.935696,"calibrationEstimate":25227641740.95949},{"id":"hmrc/employment_income_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":174000000000.0,"estimate":205992790440.03635,"calibrationEstimate":198611833647.03937},{"id":"hmrc/employment_income_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":118000000000.0,"estimate":132579308720.52338,"calibrationEstimate":130650324064.52023},{"id":"hmrc/private_pension_income_count_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":109000.0,"estimate":111826.396561265,"calibrationEstimate":111957.39517956972},{"id":"hmrc/private_pension_income_count_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1070000.0,"estimate":1108551.329273358,"calibrationEstimate":1078785.8509754688},{"id":"hmrc/private_pension_income_count_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":29000.0,"estimate":32248.34685358405,"calibrationEstimate":31194.256974309683},{"id":"hmrc/private_pension_income_count_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2140000.0,"estimate":2185144.9934265465,"calibrationEstimate":2193027.785250634},{"id":"hmrc/private_pension_income_count_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_count_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":20000.0,"estimate":19481.926417827606,"calibrationEstimate":20442.59133195877},{"id":"hmrc/private_pension_income_count_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2660000.0,"estimate":2728957.4601238817,"calibrationEstimate":2748158.453831658},{"id":"hmrc/private_pension_income_count_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":10000.0,"estimate":10305.892645597458,"calibrationEstimate":10287.247063875198},{"id":"hmrc/private_pension_income_count_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1450000.0,"estimate":1495237.3086971492,"calibrationEstimate":1487679.527325362},{"id":"hmrc/private_pension_income_count_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":779000.0,"estimate":789672.3607301563,"calibrationEstimate":800476.0575524122},{"id":"hmrc/private_pension_income_count_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":4000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/private_pension_income_count_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":652041.4562733769,"calibrationEstimate":663726.9767524898},{"id":"hmrc/private_pension_income_count_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":259000.0,"estimate":272814.0429994464,"calibrationEstimate":263811.19149279594},{"id":"hmrc/private_pension_income_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":5430000000.0,"estimate":5345797328.280829,"calibrationEstimate":5427845559.415028},{"id":"hmrc/private_pension_income_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":4350000000.0,"estimate":4392698634.534128,"calibrationEstimate":4454604694.336378},{"id":"hmrc/private_pension_income_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1810000000.0,"estimate":2014665212.2989984,"calibrationEstimate":1885743095.2678227},{"id":"hmrc/private_pension_income_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":13600000000.0,"estimate":13722906422.39004,"calibrationEstimate":13929122214.140656},{"id":"hmrc/private_pension_income_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":370000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1570000000.0,"estimate":1432815920.066187,"calibrationEstimate":1611508589.181299},{"id":"hmrc/private_pension_income_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":30200000000.0,"estimate":30088725766.291286,"calibrationEstimate":30519628145.421444},{"id":"hmrc/private_pension_income_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1120000000.0,"estimate":1123939358.7086189,"calibrationEstimate":1138804412.324136},{"id":"hmrc/private_pension_income_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":24804135722.331135,"calibrationEstimate":25052549773.94475},{"id":"hmrc/private_pension_income_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":16767697312.554628,"calibrationEstimate":17124010213.256632},{"id":"hmrc/private_pension_income_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":640000000.0,"estimate":212929517.2376833,"calibrationEstimate":216246361.45302057},{"id":"hmrc/private_pension_income_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":17400000000.0,"estimate":17412935832.904785,"calibrationEstimate":17785168436.302177},{"id":"hmrc/private_pension_income_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":9470000000.0,"estimate":9381575140.683311,"calibrationEstimate":9543800186.733513},{"id":"hmrc/property_income_count_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":137000.0,"estimate":148813.48041003942,"calibrationEstimate":142931.6233434677},{"id":"hmrc/property_income_count_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":101000.0,"estimate":105099.43739584088,"calibrationEstimate":105464.95491817594},{"id":"hmrc/property_income_count_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":54000.0,"estimate":50794.22146773338,"calibrationEstimate":56650.596049278975},{"id":"hmrc/property_income_count_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":232000.0,"estimate":209372.79957795143,"calibrationEstimate":241816.69853043556},{"id":"hmrc/property_income_count_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":7000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_count_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":41000.0,"estimate":54315.05261707306,"calibrationEstimate":53937.36399555206},{"id":"hmrc/property_income_count_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":431000.0,"estimate":467851.6959067285,"calibrationEstimate":449476.7096900046},{"id":"hmrc/property_income_count_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":23000.0,"estimate":23663.82657933235,"calibrationEstimate":23704.657059669495},{"id":"hmrc/property_income_count_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":364000.0,"estimate":382716.5398760289,"calibrationEstimate":374246.09900937974},{"id":"hmrc/property_income_count_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":325000.0,"estimate":325976.1076962948,"calibrationEstimate":335583.4356379807},{"id":"hmrc/property_income_count_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":13000.0,"estimate":17876.553053617477,"calibrationEstimate":17956.148045539856},{"id":"hmrc/property_income_count_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":397000.0,"estimate":430521.93068769574,"calibrationEstimate":424372.62478613853},{"id":"hmrc/property_income_count_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":226000.0,"estimate":232345.40000730753,"calibrationEstimate":233399.38142344356},{"id":"hmrc/property_income_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":4845000000.0,"estimate":5066855184.377646,"calibrationEstimate":4887522606.587887},{"id":"hmrc/property_income_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1273000000.0,"estimate":1339419048.615897,"calibrationEstimate":1325054081.26916},{"id":"hmrc/property_income_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":2185000000.0,"estimate":2065674668.677865,"calibrationEstimate":2156647507.286356},{"id":"hmrc/property_income_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":3211000000.0,"estimate":2853691727.4237776,"calibrationEstimate":3390429218.5297017},{"id":"hmrc/property_income_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":834100000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1995000000.0,"estimate":1671991571.1694071,"calibrationEstimate":1648499114.259529},{"id":"hmrc/property_income_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7258000000.0,"estimate":7985707953.629425,"calibrationEstimate":7489906615.405917},{"id":"hmrc/property_income_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1453500000.0,"estimate":1492957063.3158894,"calibrationEstimate":1475921673.247523},{"id":"hmrc/property_income_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7220000000.0,"estimate":7746035188.249613,"calibrationEstimate":7542554031.193575},{"id":"hmrc/property_income_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7182000000.0,"estimate":7333197347.813547,"calibrationEstimate":7434714030.345675},{"id":"hmrc/property_income_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":900600000.0,"estimate":867971878.096458,"calibrationEstimate":858414921.8552154},{"id":"hmrc/property_income_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":10260000000.0,"estimate":10953681291.205402,"calibrationEstimate":10644669240.112694},{"id":"hmrc/property_income_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7163000000.0,"estimate":7576565136.2291155,"calibrationEstimate":7469779867.330262},{"id":"hmrc/salary_sacrifice_contributions","group":"Pension contributions made through salary sacrifice","unit":"gbp","target":24720000000.0,"estimate":28216254605.196114,"calibrationEstimate":29398246248.53289},{"id":"hmrc/salary_sacrifice_employee_nics_relief","group":"Salary sacrifice: employee National Insurance relief","unit":"gbp","target":1030000000.0,"estimate":944128480.1682006,"calibrationEstimate":999028962.9642977},{"id":"hmrc/salary_sacrifice_employer_nics_relief","group":"Salary sacrifice: employer National Insurance relief","unit":"gbp","target":3806521739.1304345,"estimate":3734371027.861629,"calibrationEstimate":3910216698.4462447},{"id":"hmrc/salary_sacrifice_it_relief_additional_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1854000000.0,"estimate":1898508492.1189609,"calibrationEstimate":1916649378.3206043},{"id":"hmrc/salary_sacrifice_it_relief_basic_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1648000000.0,"estimate":1599588723.537782,"calibrationEstimate":1694024183.192099},{"id":"hmrc/salary_sacrifice_it_relief_higher_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":5665000000.0,"estimate":5447769552.639022,"calibrationEstimate":5730857548.478475},{"id":"hmrc/self_employment_income_count_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":85000.0,"estimate":91807.65111103654,"calibrationEstimate":86962.28155221045},{"id":"hmrc/self_employment_income_count_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":444000.0,"estimate":495899.16801068187,"calibrationEstimate":474827.5627250821},{"id":"hmrc/self_employment_income_count_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":40000.0,"estimate":34321.580459713936,"calibrationEstimate":40915.38135620952},{"id":"hmrc/self_employment_income_count_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":651000.0,"estimate":595662.3852557838,"calibrationEstimate":689170.4667981565},{"id":"hmrc/self_employment_income_count_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":11000.0,"estimate":12097.602172851562,"calibrationEstimate":12151.466918945312},{"id":"hmrc/self_employment_income_count_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":34000.0,"estimate":35412.47289919853,"calibrationEstimate":36050.296272322536},{"id":"hmrc/self_employment_income_count_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":961000.0,"estimate":983380.3177103548,"calibrationEstimate":1018702.9982424974},{"id":"hmrc/self_employment_income_count_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21693.4504237175,"calibrationEstimate":21790.04023075104},{"id":"hmrc/self_employment_income_count_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":595000.0,"estimate":660941.2836752534,"calibrationEstimate":627534.0292263627},{"id":"hmrc/self_employment_income_count_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":359000.0,"estimate":380762.3792635501,"calibrationEstimate":372850.943356663},{"id":"hmrc/self_employment_income_count_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":15000.0,"estimate":14243.284211874008,"calibrationEstimate":14306.702473640442},{"id":"hmrc/self_employment_income_count_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":311000.0,"estimate":306679.82031068206,"calibrationEstimate":320621.6229124218},{"id":"hmrc/self_employment_income_count_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":143000.0,"estimate":124774.42495456338,"calibrationEstimate":149187.17315804958},{"id":"hmrc/self_employment_income_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4980000000.0,"estimate":5636157348.958165,"calibrationEstimate":5105386257.929018},{"id":"hmrc/self_employment_income_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4810000000.0,"estimate":5335150863.284746,"calibrationEstimate":5017249946.560387},{"id":"hmrc/self_employment_income_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":3650000000.0,"estimate":2822716021.3632445,"calibrationEstimate":3787992559.540904},{"id":"hmrc/self_employment_income_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8030000000.0,"estimate":6887636692.712797,"calibrationEstimate":8444995513.4183855},{"id":"hmrc/self_employment_income_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":19500000000.0,"estimate":18284049776.80005,"calibrationEstimate":19086845273.0652},{"id":"hmrc/self_employment_income_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4390000000.0,"estimate":4193355831.884856,"calibrationEstimate":4476251711.722663},{"id":"hmrc/self_employment_income_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":15700000000.0,"estimate":17136849507.671976,"calibrationEstimate":16997008937.802246},{"id":"hmrc/self_employment_income_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4840000000.0,"estimate":4906102850.49662,"calibrationEstimate":5121514459.116575},{"id":"hmrc/self_employment_income_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":12600000000.0,"estimate":12605641784.231354,"calibrationEstimate":13432114897.320862},{"id":"hmrc/self_employment_income_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8730000000.0,"estimate":9895760941.4199,"calibrationEstimate":9284919847.082878},{"id":"hmrc/self_employment_income_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":6670000000.0,"estimate":9660794971.01818,"calibrationEstimate":10084969640.620115},{"id":"hmrc/self_employment_income_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8220000000.0,"estimate":7173913950.503402,"calibrationEstimate":8589968865.463936},{"id":"hmrc/self_employment_income_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":5360000000.0,"estimate":4555003804.413581,"calibrationEstimate":5622179443.45382},{"id":"hmrc/state_pension_count_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":74000.0,"estimate":76148.16276955605,"calibrationEstimate":75922.86912208796},{"id":"hmrc/state_pension_count_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1140000.0,"estimate":1244077.6809774786,"calibrationEstimate":1133583.8249693066},{"id":"hmrc/state_pension_count_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":22832.874069213867,"calibrationEstimate":22125.147695302963},{"id":"hmrc/state_pension_count_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2050000.0,"estimate":2048411.1118015796,"calibrationEstimate":2048046.7279076576},{"id":"hmrc/state_pension_count_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_count_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":14000.0,"estimate":13532.682774543762,"calibrationEstimate":14466.858582496645},{"id":"hmrc/state_pension_count_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2320000.0,"estimate":2286300.7773593217,"calibrationEstimate":2301933.0940366536},{"id":"hmrc/state_pension_count_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":8000.0,"estimate":8824.107450008392,"calibrationEstimate":8798.864166736603},{"id":"hmrc/state_pension_count_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1160000.0,"estimate":1172676.499942258,"calibrationEstimate":1168167.4859495014},{"id":"hmrc/state_pension_count_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":568000.0,"estimate":575256.3978573233,"calibrationEstimate":577815.7180559486},{"id":"hmrc/state_pension_count_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":3000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/state_pension_count_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":441000.0,"estimate":438393.6089271605,"calibrationEstimate":441668.3965354562},{"id":"hmrc/state_pension_count_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":176000.0,"estimate":175826.47564059496,"calibrationEstimate":177026.6087565422},{"id":"hmrc/state_pension_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":847000000.0,"estimate":854450089.7419467,"calibrationEstimate":844536099.8908701},{"id":"hmrc/state_pension_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":11800000000.0,"estimate":13670650067.511356,"calibrationEstimate":12372946997.791916},{"id":"hmrc/state_pension_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":265000000.0,"estimate":282114083.0780946,"calibrationEstimate":271975929.42016745},{"id":"hmrc/state_pension_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":22200000000.0,"estimate":23998719050.76559,"calibrationEstimate":23797516261.50798},{"id":"hmrc/state_pension_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":20000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":179000000.0,"estimate":172983951.4445731,"calibrationEstimate":182038746.25456983},{"id":"hmrc/state_pension_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":26825875119.04113,"calibrationEstimate":26781706814.29911},{"id":"hmrc/state_pension_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":96000000.0,"estimate":91457269.84436607,"calibrationEstimate":90425861.10211164},{"id":"hmrc/state_pension_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":12300000000.0,"estimate":13220363004.652786,"calibrationEstimate":13047202267.625652},{"id":"hmrc/state_pension_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":6020000000.0,"estimate":6333296578.738886,"calibrationEstimate":6303111646.291419},{"id":"hmrc/state_pension_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":43000000.0,"estimate":56836446.07211137,"calibrationEstimate":56614218.6125021},{"id":"hmrc/state_pension_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":4660000000.0,"estimate":4958283295.041033,"calibrationEstimate":4957592229.717251},{"id":"hmrc/state_pension_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":1890000000.0,"estimate":1925819081.9875,"calibrationEstimate":1921803586.7496536},{"id":"housing/rent_private","group":"Private and social rent paid","unit":"gbp","target":89035200000.0,"estimate":94232257148.01346,"calibrationEstimate":89015844391.93204},{"id":"housing/rent_social","group":"Private and social rent paid","unit":"gbp","target":30680000000.0,"estimate":36221593791.554085,"calibrationEstimate":33687842434.35097},{"id":"housing/total_mortgage","group":"Mortgage payments, capital and interest","unit":"gbp","target":99000000000.0,"estimate":112166702689.27348,"calibrationEstimate":113284488090.43108},{"id":"nts/households_no_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":6512000.0,"estimate":6886208.031410232,"calibrationEstimate":6916868.755762011},{"id":"nts/households_one_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":13024000.0,"estimate":15020756.833521975,"calibrationEstimate":15087636.514661329},{"id":"nts/households_two_plus_vehicles","group":"Households with no, one, and two or more vehicles","unit":"count","target":10064000.0,"estimate":9336322.44734241,"calibrationEstimate":9377892.274253026},{"id":"obr/attendance_allowance","group":"Attendance Allowance spending","unit":"gbp","target":8492497075.074617,"estimate":8738849002.944973,"calibrationEstimate":8777451467.048658},{"id":"obr/capital_gains_tax","group":"Capital gains tax receipts","unit":"gbp","target":21801546197.09165,"estimate":12717204530.457554,"calibrationEstimate":12569294855.576912},{"id":"obr/carers_allowance","group":"Carer's Allowance spending","unit":"gbp","target":4569403813.760573,"estimate":4546109316.312273,"calibrationEstimate":4668875054.2856655},{"id":"obr/child_benefit","group":"Child Benefit spending","unit":"gbp","target":13389272724.45089,"estimate":16225320972.639776,"calibrationEstimate":16338080740.281445},{"id":"obr/council_tax","group":"Council tax receipts, UK and by nation","unit":"gbp","target":50925163826.30539,"estimate":48221464271.11403,"calibrationEstimate":45300509759.81859},{"id":"obr/council_tax_england","group":"Council tax receipts, UK and by nation","unit":"gbp","target":44117237614.71528,"estimate":41824069103.301254,"calibrationEstimate":39205804365.029305},{"id":"obr/council_tax_scotland","group":"Council tax receipts, UK and by nation","unit":"gbp","target":3051227494.93594,"estimate":3763028655.037571,"calibrationEstimate":3638929999.068658},{"id":"obr/council_tax_wales","group":"Council tax receipts, UK and by nation","unit":"gbp","target":2400769752.36827,"estimate":2634366512.7752094,"calibrationEstimate":2455775395.7206206},{"id":"obr/domestic_rates","group":"Northern Ireland domestic rates receipts","unit":"gbp","target":494000000.0,"estimate":584068659.0970445,"calibrationEstimate":560119544.8439525},{"id":"obr/esa","group":"Incapacity benefits spending, scored against ESA (income-related and contributory)","unit":"gbp","target":7206287181.538654,"estimate":7343384263.9225025,"calibrationEstimate":7378653735.424012},{"id":"obr/fuel_duties","group":"Fuel duty receipts, scored against duty on households' car fuel","unit":"gbp","target":24241874775.213375,"estimate":24533360153.833393,"calibrationEstimate":22246272742.96544},{"id":"obr/income_tax","group":"Income tax receipts","unit":"gbp","target":331437583074.4429,"estimate":301478832377.7914,"calibrationEstimate":296476469549.9654},{"id":"obr/jobseekers_allowance","group":"Jobseeker's Allowance spending","unit":"gbp","target":280558748.04472804,"estimate":299505958.51263523,"calibrationEstimate":300361802.45431787},{"id":"obr/ni","group":"National Insurance receipts, total and employee, both scored against employee contributions","unit":"gbp","target":200081395082.7125,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employee","group":"National Insurance receipts, total and employee, both scored against employee contributions","unit":"gbp","target":49544363784.26465,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employer","group":"Employer National Insurance receipts","unit":"gbp","target":145324007512.71753,"estimate":154541037552.12073,"calibrationEstimate":152621840639.53052},{"id":"obr/ni_self_employed","group":"Self-employed National Insurance receipts","unit":"gbp","target":2902816090.4147716,"estimate":2609995976.5472517,"calibrationEstimate":2776828111.0540338},{"id":"obr/pip","group":"Disability Living Allowance and PIP spending, scored against PIP alone","unit":"gbp","target":36910059270.5278,"estimate":26930742886.35225,"calibrationEstimate":27048283769.854137},{"id":"obr/private_school_students","group":"Pupils at independent schools","unit":"count","target":557000.0,"estimate":761425.2593497187,"calibrationEstimate":577547.7305030972},{"id":"obr/salary_sacrifice_users_above_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":3379200.0,"estimate":3416752.2773837894,"calibrationEstimate":3473463.5649632365},{"id":"obr/salary_sacrifice_users_below_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":4403200.0,"estimate":4567515.046537325,"calibrationEstimate":4546353.57234703},{"id":"obr/salary_sacrifice_users_total","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":7884800.0,"estimate":7984267.323921114,"calibrationEstimate":8019817.137310267},{"id":"obr/sdlt","group":"Stamp Duty Land Tax receipts","unit":"gbp","target":15406516698.785578,"estimate":16316115361.020012,"calibrationEstimate":15970017665.29672},{"id":"obr/state_pension","group":"State Pension spending","unit":"gbp","target":146185954351.57382,"estimate":123608848585.71336,"calibrationEstimate":123129508170.07487},{"id":"obr/statutory_maternity_pay","group":"Statutory Maternity Pay spending","unit":"gbp","target":3194800881.520547,"estimate":3337974284.302048,"calibrationEstimate":3347441886.5270486},{"id":"obr/tv_licence_fee","group":"TV licence fee receipts","unit":"gbp","target":3872000000.0,"estimate":4306586174.401851,"calibrationEstimate":4326303524.671558},{"id":"obr/universal_credit","group":"Universal Credit spending","unit":"gbp","target":79286349139.54411,"estimate":77648740273.65004,"calibrationEstimate":76378495756.28294},{"id":"obr/vat","group":"VAT receipts","unit":"gbp","target":180168938685.4179,"estimate":317136171663.4592,"calibrationEstimate":318035670462.85565},{"id":"obr/winter_fuel_allowance","group":"Winter Fuel Payment spending","unit":"gbp","target":1911040880.4619167,"estimate":1703858030.6710331,"calibrationEstimate":1712963122.996131},{"id":"ons/corporate_land_value","group":"Corporate land value","unit":"gbp","target":2057128451236.5017,"estimate":2058648990687.032,"calibrationEstimate":2509581347940.138},{"id":"ons/couple_3_plus_children_households","group":"Households by family type","unit":"count","target":931000.0,"estimate":939145.8302041292,"calibrationEstimate":943327.3600209357},{"id":"ons/couple_no_children_households","group":"Households by family type","unit":"count","target":8119000.0,"estimate":12928875.782972127,"calibrationEstimate":12986441.399504378},{"id":"ons/couple_non_dependent_children_only_households","group":"Households by family type","unit":"count","target":1848000.0,"estimate":1526672.7015325427,"calibrationEstimate":1533470.184832275},{"id":"ons/couple_under_3_children_households","group":"Households by family type","unit":"count","target":5439000.0,"estimate":5319173.021537095,"calibrationEstimate":5342856.555537075},{"id":"ons/east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":726000.0,"estimate":770230.939494133,"calibrationEstimate":773660.3856868744},{"id":"ons/east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":741000.0,"estimate":740606.7134604454,"calibrationEstimate":743904.2511110306},{"id":"ons/east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":749000.0,"estimate":756168.8946352005,"calibrationEstimate":759535.7300329208},{"id":"ons/east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":890000.0,"estimate":868918.0768876076,"calibrationEstimate":872786.9326715469},{"id":"ons/east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":851000.0,"estimate":843856.841021061,"calibrationEstimate":847614.101943016},{"id":"ons/east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":867000.0,"estimate":885889.451540947,"calibrationEstimate":889833.8577439785},{"id":"ons/east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":746000.0,"estimate":717175.1693952084,"calibrationEstimate":720368.3822858334},{"id":"ons/east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":643000.0,"estimate":602970.5396468639,"calibrationEstimate":605655.2605879307},{"id":"ons/east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":379000.0,"estimate":380440.2481365204,"calibrationEstimate":382134.1495399475},{"id":"ons/east_midlands_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":532000.0,"estimate":560764.1695084572,"calibrationEstimate":563260.9665122032},{"id":"ons/east_midlands_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":585000.0,"estimate":591315.0727558136,"calibrationEstimate":593947.8992090225},{"id":"ons/east_midlands_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":632000.0,"estimate":646598.6443405151,"calibrationEstimate":649477.6217494011},{"id":"ons/east_midlands_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":669000.0,"estimate":666351.030916214,"calibrationEstimate":669317.9424901009},{"id":"ons/east_midlands_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":621000.0,"estimate":627317.6343212128,"calibrationEstimate":630110.758951664},{"id":"ons/east_midlands_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":681000.0,"estimate":705804.5902404785,"calibrationEstimate":708947.1764411926},{"id":"ons/east_midlands_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":592000.0,"estimate":583389.1525392532,"calibrationEstimate":585986.6843750477},{"id":"ons/east_midlands_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":500000.0,"estimate":480258.3571476936,"calibrationEstimate":482396.70089006424},{"id":"ons/east_midlands_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":273000.0,"estimate":274763.10668992996,"calibrationEstimate":275986.48183584213},{"id":"ons/female_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1698816.0,"estimate":1839466.5737319589,"calibrationEstimate":1847656.770164296},{"id":"ons/female_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2041879.0,"estimate":1973291.4082101283,"calibrationEstimate":1982077.4540842024},{"id":"ons/female_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2036402.0,"estimate":1976182.4684885591,"calibrationEstimate":1984981.3977429569},{"id":"ons/female_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2033478.0,"estimate":2091247.116039395,"calibrationEstimate":2100558.3663989007},{"id":"ons/female_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2258028.0,"estimate":2327819.72517778,"calibrationEstimate":2338184.332134992},{"id":"ons/female_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2443559.0,"estimate":2426926.0614604205,"calibrationEstimate":2437731.887076691},{"id":"ons/female_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2497122.0,"estimate":2407409.1889739037,"calibrationEstimate":2418128.139254883},{"id":"ons/female_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2356214.0,"estimate":2354626.8180732727,"calibrationEstimate":2365110.7586767823},{"id":"ons/female_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2135556.0,"estimate":2146838.039360285,"calibrationEstimate":2156396.7979279608},{"id":"ons/female_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2206473.0,"estimate":2297529.9983963966,"calibrationEstimate":2307759.7106489986},{"id":"ons/female_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2340737.0,"estimate":2437237.7694670856,"calibrationEstimate":2448089.5275103897},{"id":"ons/female_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1918180.0,"estimate":2070228.5422207713,"calibrationEstimate":2079446.1990244535},{"id":"ons/female_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2248908.0,"estimate":2073595.834327519,"calibrationEstimate":2082828.495167717},{"id":"ons/female_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1890892.0,"estimate":1781039.4390323013,"calibrationEstimate":1788969.4821397066},{"id":"ons/female_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1619328.0,"estimate":1592091.0710516274,"calibrationEstimate":1599179.8343619704},{"id":"ons/female_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1575830.0,"estimate":1541204.8275257498,"calibrationEstimate":1548067.0152519343},{"id":"ons/female_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1064043.0,"estimate":2664726.503213957,"calibrationEstimate":2676591.14880161},{"id":"ons/female_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":766765.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/household_land_value","group":"Household land value","unit":"gbp","target":5042871548763.499,"estimate":5198482896887.592,"calibrationEstimate":5215371409340.588},{"id":"ons/household_land_value/EAST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":304799621177.5439,"estimate":311792425913.57996,"calibrationEstimate":312988388945.29297},{"id":"ons/household_land_value/EAST_OF_ENGLAND","group":"Household land value by region","unit":"gbp","target":542672059385.554,"estimate":546010650314.9476,"calibrationEstimate":548396090228.3013},{"id":"ons/household_land_value/LONDON","group":"Household land value by region","unit":"gbp","target":1188167933642.289,"estimate":1203185297593.549,"calibrationEstimate":1208464858198.298},{"id":"ons/household_land_value/NORTH_EAST","group":"Household land value by region","unit":"gbp","target":119603822538.99867,"estimate":120248252547.38388,"calibrationEstimate":120670781170.64792},{"id":"ons/household_land_value/NORTH_WEST","group":"Household land value by region","unit":"gbp","target":422892569458.29254,"estimate":432857394071.48694,"calibrationEstimate":433189776637.8822},{"id":"ons/household_land_value/SCOTLAND","group":"Household land value by region","unit":"gbp","target":280395193712.8084,"estimate":276640745849.4535,"calibrationEstimate":277860896632.4937},{"id":"ons/household_land_value/SOUTH_EAST","group":"Household land value by region","unit":"gbp","target":885848048153.7532,"estimate":895724028534.7693,"calibrationEstimate":899487561852.2374},{"id":"ons/household_land_value/SOUTH_WEST","group":"Household land value by region","unit":"gbp","target":456726035827.05096,"estimate":465653362247.4888,"calibrationEstimate":467005989225.08545},{"id":"ons/household_land_value/WALES","group":"Household land value by region","unit":"gbp","target":179320185054.4999,"estimate":188184118702.406,"calibrationEstimate":188687411488.70615},{"id":"ons/household_land_value/WEST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":364340113693.65784,"estimate":378739467069.95465,"calibrationEstimate":378904015968.6325},{"id":"ons/household_land_value/YORKSHIRE","group":"Household land value by region","unit":"gbp","target":298105966119.05054,"estimate":305323058887.67285,"calibrationEstimate":305558366397.4229},{"id":"ons/land_value","group":"Total land value","unit":"gbp","target":7100000000000.0,"estimate":7257131889855.828,"calibrationEstimate":7724952750742.861},{"id":"ons/lfs_employees","group":"Employees and self-employed people","unit":"count","target":29590000.0,"estimate":30415831.925368626,"calibrationEstimate":30551257.921766207},{"id":"ons/lfs_self_employed","group":"Employees and self-employed people","unit":"count","target":4395000.0,"estimate":4403629.709998399,"calibrationEstimate":4423236.792703286},{"id":"ons/london_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1042000.0,"estimate":1131491.4573817253,"calibrationEstimate":1136529.397939682},{"id":"ons/london_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1038000.0,"estimate":1037544.3274979593,"calibrationEstimate":1042163.9750480652},{"id":"ons/london_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1470000.0,"estimate":1451632.7812190056,"calibrationEstimate":1458096.1668362615},{"id":"ons/london_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1585000.0,"estimate":1492286.394011021,"calibrationEstimate":1498930.7603902817},{"id":"ons/london_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1314000.0,"estimate":1286887.5299487114,"calibrationEstimate":1292617.3732566831},{"id":"ons/london_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1078000.0,"estimate":1097971.444237709,"calibrationEstimate":1102860.1428632736},{"id":"ons/london_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":778000.0,"estimate":750930.0480790138,"calibrationEstimate":754273.5447840691},{"id":"ons/london_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":509000.0,"estimate":486360.6602535248,"calibrationEstimate":488526.16434693336},{"id":"ons/london_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":304000.0,"estimate":303559.92478847504,"calibrationEstimate":304911.5145406723},{"id":"ons/lone_households_over_65","group":"Households by family type","unit":"count","target":4254000.0,"estimate":5454455.018509299,"calibrationEstimate":5478740.884796768},{"id":"ons/lone_households_under_65","group":"Households by family type","unit":"count","target":4316000.0,"estimate":5250786.593510598,"calibrationEstimate":5274165.638094544},{"id":"ons/lone_parent_dependent_children_households","group":"Households by family type","unit":"count","target":1835000.0,"estimate":2798771.157480851,"calibrationEstimate":2811232.6388974935},{"id":"ons/lone_parent_non_dependent_children_households","group":"Households by family type","unit":"count","target":1204000.0,"estimate":1057331.2494069785,"calibrationEstimate":1062038.9998702407},{"id":"ons/male_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1784490.0,"estimate":1917864.3619012684,"calibrationEstimate":1926403.6264294984},{"id":"ons/male_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2143309.0,"estimate":2053535.895194322,"calibrationEstimate":2062679.227788061},{"id":"ons/male_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2149930.0,"estimate":2047459.0866241455,"calibrationEstimate":2056575.355904788},{"id":"ons/male_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2136737.0,"estimate":2167020.575371682,"calibrationEstimate":2176669.196182668},{"id":"ons/male_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2246892.0,"estimate":2353607.326105356,"calibrationEstimate":2364086.752364412},{"id":"ons/male_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2323977.0,"estimate":2306814.134287983,"calibrationEstimate":2317085.1808172166},{"id":"ons/male_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2325815.0,"estimate":2250484.0878130943,"calibrationEstimate":2260504.326561913},{"id":"ons/male_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2208064.0,"estimate":2202735.8511286825,"calibrationEstimate":2212543.500215322},{"id":"ons/male_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2040636.0,"estimate":2050379.9052236676,"calibrationEstimate":2059509.1825666577},{"id":"ons/male_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2119462.0,"estimate":2209499.6434261203,"calibrationEstimate":2219337.4005533904},{"id":"ons/male_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2234921.0,"estimate":2360950.5306516886,"calibrationEstimate":2371462.6275383234},{"id":"ons/male_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2011903.0,"estimate":2176776.512379959,"calibrationEstimate":2186468.5711850673},{"id":"ons/male_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2138720.0,"estimate":1998740.968729228,"calibrationEstimate":2007640.3199545296},{"id":"ons/male_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1785048.0,"estimate":1707467.9938359708,"calibrationEstimate":1715070.4678450525},{"id":"ons/male_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1472190.0,"estimate":1503642.8762648106,"calibrationEstimate":1510337.8170289395},{"id":"ons/male_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1370172.0,"estimate":1395090.3332718164,"calibrationEstimate":1401301.957366705},{"id":"ons/male_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":853423.0,"estimate":1009312.8459606916,"calibrationEstimate":1013806.7878290116},{"id":"ons/male_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":524918.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/multi_family_households","group":"Households by family type","unit":"count","target":244000.0,"estimate":3137645.9858644456,"calibrationEstimate":3151616.293736607},{"id":"ons/north_east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":281000.0,"estimate":292283.856153965,"calibrationEstimate":293585.24245643616},{"id":"ons/north_east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":311000.0,"estimate":316212.322912693,"calibrationEstimate":317620.25323677063},{"id":"ons/north_east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":343000.0,"estimate":352029.96956157684,"calibrationEstimate":353597.3771824837},{"id":"ons/north_east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":356000.0,"estimate":359699.50099754333,"calibrationEstimate":361301.0569238663},{"id":"ons/north_east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":323000.0,"estimate":327139.90297079086,"calibrationEstimate":328596.4853038788},{"id":"ons/north_east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":369000.0,"estimate":378836.79312348366,"calibrationEstimate":380523.55742669106},{"id":"ons/north_east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":353000.0,"estimate":351102.3077030182,"calibrationEstimate":352665.5838704109},{"id":"ons/north_east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":278000.0,"estimate":273663.8987689018,"calibrationEstimate":274882.38518714905},{"id":"ons/north_east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":153000.0,"estimate":154565.45491456983,"calibrationEstimate":155253.65523910522},{"id":"ons/north_west_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":847000.0,"estimate":907878.5675086976,"calibrationEstimate":911920.8865337372},{"id":"ons/north_west_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":901000.0,"estimate":905132.2707009315,"calibrationEstimate":909162.354482174},{"id":"ons/north_west_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":986000.0,"estimate":1002199.312697649,"calibrationEstimate":1006661.592706442},{"id":"ons/north_west_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1056000.0,"estimate":1021326.8112883568,"calibrationEstimate":1025874.23654747},{"id":"ons/north_west_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":938000.0,"estimate":930422.6213030816,"calibrationEstimate":934565.3206562996},{"id":"ons/north_west_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1011000.0,"estimate":1030291.0328922272,"calibrationEstimate":1034878.3873639108},{"id":"ons/north_west_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":888000.0,"estimate":844032.2021713257,"calibrationEstimate":847790.2315773964},{"id":"ons/north_west_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":715000.0,"estimate":663851.5968799591,"calibrationEstimate":666807.391629219},{"id":"ons/north_west_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":399000.0,"estimate":395580.82154369354,"calibrationEstimate":397342.1398239136},{"id":"ons/northern_ireland_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":234000.0,"estimate":238573.53098157048,"calibrationEstimate":239635.77313242853},{"id":"ons/northern_ireland_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":244000.0,"estimate":247808.06932733953,"calibrationEstimate":248911.4319036454},{"id":"ons/northern_ireland_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":230000.0,"estimate":232551.80645041168,"calibrationEstimate":233587.23901306093},{"id":"ons/northern_ireland_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":264000.0,"estimate":269491.1257661581,"calibrationEstimate":270691.02561856806},{"id":"ons/northern_ireland_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":254000.0,"estimate":257494.5271097273,"calibrationEstimate":258641.01725278795},{"id":"ons/northern_ireland_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":257000.0,"estimate":258119.9789763689,"calibrationEstimate":259269.25098092857},{"id":"ons/northern_ireland_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":224000.0,"estimate":232054.6853407323,"calibrationEstimate":233087.90260344744},{"id":"ons/northern_ireland_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":165000.0,"estimate":170104.10925373435,"calibrationEstimate":170861.4931807816},{"id":"ons/northern_ireland_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":93000.0,"estimate":98419.55169644952,"calibrationEstimate":98857.76071341336},{"id":"ons/public_sector_employment","group":"Public sector employment","unit":"count","target":5940000.0,"estimate":6304094.97840783,"calibrationEstimate":6332163.859895036},{"id":"ons/savings_interest_income","group":"Household savings interest","unit":"gbp","target":95477000000.0,"estimate":80129221535.43391,"calibrationEstimate":79246943861.21257},{"id":"ons/scotland_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":526000.0,"estimate":647600.8949885368,"calibrationEstimate":650484.328666091},{"id":"ons/scotland_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":597000.0,"estimate":659703.4958338141,"calibrationEstimate":662640.8183342814},{"id":"ons/scotland_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":709000.0,"estimate":740762.218244791,"calibrationEstimate":744060.4591063857},{"id":"ons/scotland_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":736000.0,"estimate":773940.4599794149,"calibrationEstimate":777386.4158806205},{"id":"ons/scotland_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":691000.0,"estimate":725636.149921596,"calibrationEstimate":728867.0354478359},{"id":"ons/scotland_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":788000.0,"estimate":794386.7686737776,"calibrationEstimate":797923.7666577101},{"id":"ons/scotland_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":727000.0,"estimate":654615.490395546,"calibrationEstimate":657530.1593027711},{"id":"ons/scotland_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":546000.0,"estimate":518987.09887486696,"calibrationEstimate":521297.8820120692},{"id":"ons/scotland_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":297000.0,"estimate":309508.9369607568,"calibrationEstimate":310887.0211943984},{"id":"ons/scotland_babies_under_1","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":46000.0,"estimate":48106.95701152086,"calibrationEstimate":48321.15257507563},{"id":"ons/scotland_children_under_16","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":892000.0,"estimate":956540.2894876004,"calibrationEstimate":960799.27374506},{"id":"ons/scotland_households_3plus_children","group":"Scottish households with three or more children","unit":"count","target":82000.0,"estimate":86080.43200981617,"calibrationEstimate":86463.70450717211},{"id":"ons/south_east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1039000.0,"estimate":1114232.5491027832,"calibrationEstimate":1119193.650694847},{"id":"ons/south_east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1114000.0,"estimate":1104025.5058307648,"calibrationEstimate":1108941.1569581032},{"id":"ons/south_east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1093000.0,"estimate":1101930.081794262,"calibrationEstimate":1106836.4138650894},{"id":"ons/south_east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1283000.0,"estimate":1222137.9367275238,"calibrationEstimate":1227579.4830198288},{"id":"ons/south_east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1273000.0,"estimate":1233437.5373487473,"calibrationEstimate":1238929.3965697289},{"id":"ons/south_east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1287000.0,"estimate":1315585.8211021423,"calibrationEstimate":1321443.4466571808},{"id":"ons/south_east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1089000.0,"estimate":1013925.5353107452,"calibrationEstimate":1018440.030857563},{"id":"ons/south_east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":927000.0,"estimate":834819.8441057205,"calibrationEstimate":838536.8671865463},{"id":"ons/south_east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":559000.0,"estimate":542841.088037014,"calibrationEstimate":545258.0736494064},{"id":"ons/south_west_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":576000.0,"estimate":604655.1198301315,"calibrationEstimate":607347.3345069885},{"id":"ons/south_west_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":646000.0,"estimate":654375.9588766098,"calibrationEstimate":657289.5604567528},{"id":"ons/south_west_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":694000.0,"estimate":709386.0963587761,"calibrationEstimate":712544.6284022331},{"id":"ons/south_west_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":743000.0,"estimate":732462.76395607,"calibrationEstimate":735724.0381350517},{"id":"ons/south_west_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":704000.0,"estimate":701804.148378849,"calibrationEstimate":704928.919002533},{"id":"ons/south_west_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":794000.0,"estimate":812267.9054384232,"calibrationEstimate":815884.5122971535},{"id":"ons/south_west_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":741000.0,"estimate":714519.8350300789,"calibrationEstimate":717701.2218279839},{"id":"ons/south_west_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":662000.0,"estimate":619540.1825652122,"calibrationEstimate":622298.66963768},{"id":"ons/south_west_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":388000.0,"estimate":382782.8248333931,"calibrationEstimate":384487.1622633934},{"id":"ons/tenure_england_owned_outright","group":"Dwellings in England, in total and by tenure","unit":"count","target":8374612.0,"estimate":8764165.854846716,"calibrationEstimate":8803188.14887619},{"id":"ons/tenure_england_owned_with_mortgage","group":"Dwellings in England, in total and by tenure","unit":"count","target":7667051.0,"estimate":7360170.187984467,"calibrationEstimate":7392941.221483231},{"id":"ons/tenure_england_rented_privately","group":"Dwellings in England, in total and by tenure","unit":"count","target":5299840.0,"estimate":5789919.019839287,"calibrationEstimate":5815698.559220791},{"id":"ons/tenure_england_social_rent","group":"Dwellings in England, in total and by tenure","unit":"count","target":4274613.0,"estimate":4272671.371180296,"calibrationEstimate":4291695.364801168},{"id":"ons/tenure_england_total","group":"Dwellings in England, in total and by tenure","unit":"count","target":25616116.0,"estimate":26186926.433850765,"calibrationEstimate":26303523.29438138},{"id":"ons/uk_population","group":"UK population, in total and by sex and five-year age band","unit":"count","target":69502341.0,"estimate":69712844.3129216,"calibrationEstimate":70023239.6145},{"id":"ons/unrelated_adult_households","group":"Households by family type","unit":"count","target":813000.0,"estimate":1057450.6047298163,"calibrationEstimate":1062158.8866242766},{"id":"ons/wales_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":325000.0,"estimate":348106.06233742833,"calibrationEstimate":349655.9994878471},{"id":"ons/wales_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":362000.0,"estimate":377852.1347847581,"calibrationEstimate":379534.51495823264},{"id":"ons/wales_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":389000.0,"estimate":421177.7128336728,"calibrationEstimate":423053.0000615418},{"id":"ons/wales_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":408000.0,"estimate":408298.51544573903,"calibrationEstimate":410116.45715788007},{"id":"ons/wales_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":374000.0,"estimate":386225.7205041647,"calibrationEstimate":387945.3860552907},{"id":"ons/wales_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":432000.0,"estimate":453846.15008094907,"calibrationEstimate":455866.8945379853},{"id":"ons/wales_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":407000.0,"estimate":411359.2729103267,"calibrationEstimate":413190.8414015472},{"id":"ons/wales_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":343000.0,"estimate":340773.34702190757,"calibrationEstimate":342290.63411542773},{"id":"ons/wales_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":190000.0,"estimate":193830.5397951007,"calibrationEstimate":194693.5690819025},{"id":"ons/west_midlands_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":700000.0,"estimate":739812.0893673897,"calibrationEstimate":743106.0936331749},{"id":"ons/west_midlands_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":743000.0,"estimate":750032.0111775398,"calibrationEstimate":753371.5123896599},{"id":"ons/west_midlands_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":774000.0,"estimate":782119.0841474533,"calibrationEstimate":785601.4645900726},{"id":"ons/west_midlands_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":834000.0,"estimate":829667.6420812607,"calibrationEstimate":833361.7243332863},{"id":"ons/west_midlands_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":758000.0,"estimate":759738.0727472305,"calibrationEstimate":763120.7843537331},{"id":"ons/west_midlands_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":800000.0,"estimate":820177.6517162323,"calibrationEstimate":823829.4666743279},{"id":"ons/west_midlands_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":685000.0,"estimate":663277.1520633698,"calibrationEstimate":666230.3836565018},{"id":"ons/west_midlands_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":570000.0,"estimate":543874.736948967,"calibrationEstimate":546296.3349237442},{"id":"ons/west_midlands_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":337000.0,"estimate":342024.45200538635,"calibrationEstimate":343547.31078481674},{"id":"ons/yorkshire_and_the_humber_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":618000.0,"estimate":648706.7535791397,"calibrationEstimate":651595.1075530052},{"id":"ons/yorkshire_and_the_humber_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":666000.0,"estimate":665860.9753584862,"calibrationEstimate":668825.70743227},{"id":"ons/yorkshire_and_the_humber_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":733000.0,"estimate":743138.1404109001,"calibrationEstimate":746446.95353508},{"id":"ons/yorkshire_and_the_humber_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":764000.0,"estimate":747053.2144784927,"calibrationEstimate":750379.460542202},{"id":"ons/yorkshire_and_the_humber_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":686000.0,"estimate":674619.9282107353,"calibrationEstimate":677623.6605932713},{"id":"ons/yorkshire_and_the_humber_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":745000.0,"estimate":752040.3539185524,"calibrationEstimate":755388.8066067696},{"id":"ons/yorkshire_and_the_humber_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":658000.0,"estimate":624463.3849864006,"calibrationEstimate":627243.798564434},{"id":"ons/yorkshire_and_the_humber_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":536000.0,"estimate":496824.7366466522,"calibrationEstimate":499036.8403120041},{"id":"ons/yorkshire_and_the_humber_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":302000.0,"estimate":295722.3997733593,"calibrationEstimate":297039.09796380997},{"id":"slc/adult_dependants_grant_recipients","group":"Adult Dependants' Grant: recipients and spending","unit":"count","target":18611.0,"estimate":10488.390624523165,"calibrationEstimate":17919.595499515533},{"id":"slc/adult_dependants_grant_spend","group":"Adult Dependants' Grant: recipients and spending","unit":"gbp","target":55364917.0,"estimate":37181344.76393461,"calibrationEstimate":63524966.045782566},{"id":"slc/maintenance_loan_recipients","group":"Maintenance loans: recipients and spending","unit":"count","target":1159761.0,"estimate":1115007.2203326223,"calibrationEstimate":1119971.7707395554},{"id":"slc/maintenance_loan_spend","group":"Maintenance loans: recipients and spending","unit":"gbp","target":8591659718.0,"estimate":9243921660.334114,"calibrationEstimate":9310652595.32858},{"id":"slc/parents_learning_allowance_recipients","group":"Parents' Learning Allowance: recipients and spending","unit":"count","target":99645.0,"estimate":98858.3031744957,"calibrationEstimate":99298.4696264267},{"id":"slc/parents_learning_allowance_spend","group":"Parents' Learning Allowance: recipients and spending","unit":"gbp","target":181421659.0,"estimate":200089205.6251793,"calibrationEstimate":200980102.52388763},{"id":"slc/plan_2_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":3985000.0,"estimate":4365258.374378204,"calibrationEstimate":4384694.640698433},{"id":"slc/plan_2_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":8940000.0,"estimate":6805751.482197762,"calibrationEstimate":6836054.020182133},{"id":"slc/plan_5_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":0.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/plan_5_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":10000.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/student_loan_repayment/england","group":"Student loan repayments, by nation and plan","unit":"gbp","target":5018231834.95,"estimate":5119208721.2338,"calibrationEstimate":4961058450.910856},{"id":"slc/student_loan_repayment/england/plan_1","group":"Student loan repayments, by nation and plan","unit":"gbp","target":1852699178.55,"estimate":1953753088.251544,"calibrationEstimate":1935645687.413804},{"id":"slc/student_loan_repayment/england/plan_2","group":"Student loan repayments, by nation and plan","unit":"gbp","target":2778253361.64,"estimate":3163065937.3426647,"calibrationEstimate":3023410861.2912726},{"id":"slc/student_loan_repayment/england/plan_5","group":"Student loan repayments, by nation and plan","unit":"gbp","target":40869580.81,"estimate":2389695.639591503,"calibrationEstimate":2001902.205781548},{"id":"slc/student_loan_repayment/england/postgraduate","group":"Student loan repayments, by nation and plan","unit":"gbp","target":346409713.95,"estimate":0.0,"calibrationEstimate":0.0},{"id":"slc/student_loan_repayment/northern_ireland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":181700000.0,"estimate":195403289.8778463,"calibrationEstimate":188624377.49343297},{"id":"slc/student_loan_repayment/scotland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":203300000.0,"estimate":221132909.0659362,"calibrationEstimate":213564948.46889892},{"id":"slc/student_loan_repayment/wales","group":"Student loan repayments, by nation and plan","unit":"gbp","target":229100000.0,"estimate":247405370.84255865,"calibrationEstimate":238897353.28110468},{"id":"sss/scottish_child_payment","group":"Scottish Child Payment spending","unit":"gbp","target":471000000.0,"estimate":497726869.8419191,"calibrationEstimate":499942991.15633214},{"id":"voa/council_tax/EAST_MIDLANDS/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":804340.0,"estimate":812220.3750844002,"calibrationEstimate":815836.7769055367},{"id":"voa/council_tax/EAST_MIDLANDS/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":505610.0,"estimate":512867.9080028534,"calibrationEstimate":515151.44179964066},{"id":"voa/council_tax/EAST_MIDLANDS/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":403840.0,"estimate":409527.9134449959,"calibrationEstimate":411351.3289835453},{"id":"voa/council_tax/EAST_MIDLANDS/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":247850.0,"estimate":252952.60029935837,"calibrationEstimate":254078.8680486679},{"id":"voa/council_tax/EAST_MIDLANDS/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":154970.0,"estimate":158834.98216819763,"calibrationEstimate":159542.19471597672},{"id":"voa/council_tax/EAST_MIDLANDS/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":73920.0,"estimate":76145.44448757172,"calibrationEstimate":76484.48072099686},{"id":"voa/council_tax/EAST_MIDLANDS/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":39400.0,"estimate":40296.69438171387,"calibrationEstimate":40476.11449241638},{"id":"voa/council_tax/EAST_MIDLANDS/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3480.0,"estimate":3560.398073196411,"calibrationEstimate":3576.250594139099},{"id":"voa/council_tax/EAST_MIDLANDS/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2233400.0,"estimate":2266406.315942287,"calibrationEstimate":2276497.4562609196},{"id":"voa/council_tax/EAST_OF_ENGLAND/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":403180.0,"estimate":410904.2397751808,"calibrationEstimate":412733.7905740738},{"id":"voa/council_tax/EAST_OF_ENGLAND/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":598950.0,"estimate":611632.8573641777,"calibrationEstimate":614356.1372361183},{"id":"voa/council_tax/EAST_OF_ENGLAND/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":739570.0,"estimate":750946.7586493492,"calibrationEstimate":754290.3465647697},{"id":"voa/council_tax/EAST_OF_ENGLAND/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":506540.0,"estimate":517253.3751280308,"calibrationEstimate":519556.4378812313},{"id":"voa/council_tax/EAST_OF_ENGLAND/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":313840.0,"estimate":318550.18431663513,"calibrationEstimate":319968.5263018608},{"id":"voa/council_tax/EAST_OF_ENGLAND/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":172960.0,"estimate":177523.18523740768,"calibrationEstimate":178313.60445976257},{"id":"voa/council_tax/EAST_OF_ENGLAND/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":113720.0,"estimate":116179.86512231828,"calibrationEstimate":116697.15281319618},{"id":"voa/council_tax/EAST_OF_ENGLAND/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14830.0,"estimate":15408.850413322449,"calibrationEstimate":15477.458395004272},{"id":"voa/council_tax/EAST_OF_ENGLAND/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2863600.0,"estimate":2918399.316006422,"calibrationEstimate":2931393.454226017},{"id":"voa/council_tax/LONDON/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":144550.0,"estimate":150375.55367183685,"calibrationEstimate":151045.09367752075},{"id":"voa/council_tax/LONDON/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":499130.0,"estimate":511106.1657552719,"calibrationEstimate":513381.8522338867},{"id":"voa/council_tax/LONDON/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1040280.0,"estimate":1052713.1613850594,"calibrationEstimate":1057400.3456015587},{"id":"voa/council_tax/LONDON/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":975750.0,"estimate":988912.67416811,"calibrationEstimate":993315.7964680196},{"id":"voa/council_tax/LONDON/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":585130.0,"estimate":604620.8762998581,"calibrationEstimate":607312.9413566589},{"id":"voa/council_tax/LONDON/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":298920.0,"estimate":308940.16441679,"calibrationEstimate":310315.7166080475},{"id":"voa/council_tax/LONDON/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":225170.0,"estimate":230670.46613502505,"calibrationEstimate":231697.5183286667},{"id":"voa/council_tax/LONDON/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":68500.0,"estimate":70754.35682678223,"calibrationEstimate":71069.39036178589},{"id":"voa/council_tax/LONDON/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3837430.0,"estimate":3918093.4186587334,"calibrationEstimate":3935538.6546361446},{"id":"voa/council_tax/NORTH_EAST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":667540.0,"estimate":680737.9537260532,"calibrationEstimate":683768.9220235348},{"id":"voa/council_tax/NORTH_EAST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":206790.0,"estimate":211970.4058327675,"calibrationEstimate":212914.200009346},{"id":"voa/council_tax/NORTH_EAST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":196180.0,"estimate":202087.55218410492,"calibrationEstimate":202987.3474559784},{"id":"voa/council_tax/NORTH_EAST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":113460.0,"estimate":115930.2783408165,"calibrationEstimate":116446.45661735536},{"id":"voa/council_tax/NORTH_EAST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":61090.0,"estimate":61207.41867017746,"calibrationEstimate":61479.942474365234},{"id":"voa/council_tax/NORTH_EAST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":26600.0,"estimate":26356.495221138,"calibrationEstimate":26473.84709215164},{"id":"voa/council_tax/NORTH_EAST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14600.0,"estimate":15486.845539569857,"calibrationEstimate":15555.80025434494},{"id":"voa/council_tax/NORTH_EAST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1570.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_EAST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1287830.0,"estimate":1313776.9495146277,"calibrationEstimate":1319626.5159270763},{"id":"voa/council_tax/NORTH_WEST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1386260.0,"estimate":1391080.06063509,"calibrationEstimate":1397273.8202409744},{"id":"voa/council_tax/NORTH_WEST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":705450.0,"estimate":715903.5987789631,"calibrationEstimate":719091.151144743},{"id":"voa/council_tax/NORTH_WEST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":616070.0,"estimate":626632.3857769966,"calibrationEstimate":629422.4471478462},{"id":"voa/council_tax/NORTH_WEST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":363970.0,"estimate":371361.08140420914,"calibrationEstimate":373014.5641813278},{"id":"voa/council_tax/NORTH_WEST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":216990.0,"estimate":223131.46934127808,"calibrationEstimate":224124.959856987},{"id":"voa/council_tax/NORTH_WEST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":104330.0,"estimate":107420.41505765916,"calibrationEstimate":107898.70176649094},{"id":"voa/council_tax/NORTH_WEST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":65750.0,"estimate":67545.51971292496,"calibrationEstimate":67846.26735258102},{"id":"voa/council_tax/NORTH_WEST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":7350.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_WEST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3466140.0,"estimate":3503074.530707121,"calibrationEstimate":3518671.9116909504},{"id":"voa/council_tax/SCOTLAND/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":498707.0,"estimate":519230.9023320675,"calibrationEstimate":521542.7701560855},{"id":"voa/council_tax/SCOTLAND/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":583705.0,"estimate":602046.806920588,"calibrationEstimate":604727.4127128124},{"id":"voa/council_tax/SCOTLAND/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":426388.0,"estimate":445115.3774691224,"calibrationEstimate":447097.24797928333},{"id":"voa/council_tax/SCOTLAND/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":369621.0,"estimate":390433.5805595517,"calibrationEstimate":392171.9807073474},{"id":"voa/council_tax/SCOTLAND/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":366881.0,"estimate":383971.6045381427,"calibrationEstimate":385681.2364856601},{"id":"voa/council_tax/SCOTLAND/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":221282.0,"estimate":230924.03558689356,"calibrationEstimate":231952.2210955024},{"id":"voa/council_tax/SCOTLAND/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":142084.0,"estimate":147640.03100788593,"calibrationEstimate":148297.3968727589},{"id":"voa/council_tax/SCOTLAND/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14481.0,"estimate":14844.596238613129,"calibrationEstimate":14910.691596031187},{"id":"voa/council_tax/SCOTLAND/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2623149.0,"estimate":2734206.934652865,"calibrationEstimate":2746380.957605481},{"id":"voa/council_tax/SOUTH_EAST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":367610.0,"estimate":376721.3822689056,"calibrationEstimate":378398.7290725708},{"id":"voa/council_tax/SOUTH_EAST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":687430.0,"estimate":700808.5503644943,"calibrationEstimate":703928.8838472366},{"id":"voa/council_tax/SOUTH_EAST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1075940.0,"estimate":1090040.558608532,"calibrationEstimate":1094893.946111679},{"id":"voa/council_tax/SOUTH_EAST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":843560.0,"estimate":858553.6785125732,"calibrationEstimate":862376.3792462349},{"id":"voa/council_tax/SOUTH_EAST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":551730.0,"estimate":567477.6824498177,"calibrationEstimate":570004.3656759262},{"id":"voa/council_tax/SOUTH_EAST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":337260.0,"estimate":344590.2440838814,"calibrationEstimate":346124.52712106705},{"id":"voa/council_tax/SOUTH_EAST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":265610.0,"estimate":273549.8351545334,"calibrationEstimate":274767.8116083145},{"id":"voa/council_tax/SOUTH_EAST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":40390.0,"estimate":41414.243516922,"calibrationEstimate":41598.64037132263},{"id":"voa/council_tax/SOUTH_EAST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":4169520.0,"estimate":4253156.17495966,"calibrationEstimate":4272093.283054352},{"id":"voa/council_tax/SOUTH_WEST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":473020.0,"estimate":482912.787299633,"calibrationEstimate":485062.9522204399},{"id":"voa/council_tax/SOUTH_WEST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":644890.0,"estimate":652833.0327134132,"calibrationEstimate":655739.7580933571},{"id":"voa/council_tax/SOUTH_WEST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":624030.0,"estimate":630313.4024662971,"calibrationEstimate":633119.8610377312},{"id":"voa/council_tax/SOUTH_WEST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":432070.0,"estimate":436333.3158068657,"calibrationEstimate":438276.0832939148},{"id":"voa/council_tax/SOUTH_WEST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":292090.0,"estimate":296615.94530296326,"calibrationEstimate":297936.61835718155},{"id":"voa/council_tax/SOUTH_WEST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":147920.0,"estimate":150589.5069141388,"calibrationEstimate":151260.00522136688},{"id":"voa/council_tax/SOUTH_WEST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":81960.0,"estimate":83527.61182880402,"calibrationEstimate":83899.51695775986},{"id":"voa/council_tax/SOUTH_WEST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":8430.0,"estimate":8669.152314662933,"calibrationEstimate":8707.751531600952},{"id":"voa/council_tax/SOUTH_WEST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2704390.0,"estimate":2741794.754646778,"calibrationEstimate":2754002.546713352},{"id":"voa/council_tax/WALES/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":215380.0,"estimate":224605.6820923984,"calibrationEstimate":225605.73692715168},{"id":"voa/council_tax/WALES/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":307070.0,"estimate":320208.17440497875,"calibrationEstimate":321633.8936638236},{"id":"voa/council_tax/WALES/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":323220.0,"estimate":335451.0971978903,"calibrationEstimate":336944.68964356184},{"id":"voa/council_tax/WALES/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":241220.0,"estimate":250254.17059534788,"calibrationEstimate":251368.4234211743},{"id":"voa/council_tax/WALES/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":200840.0,"estimate":211026.1240774095,"calibrationEstimate":211965.71487867832},{"id":"voa/council_tax/WALES/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":122650.0,"estimate":126898.85001176596,"calibrationEstimate":127463.86601752044},{"id":"voa/council_tax/WALES/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":55190.0,"estimate":58875.90761309862,"calibrationEstimate":59138.051686525345},{"id":"voa/council_tax/WALES/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":13190.0,"estimate":13777.90127837658,"calibrationEstimate":13839.247251331806},{"id":"voa/council_tax/WALES/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1484410.0,"estimate":1580971.558793813,"calibrationEstimate":1588010.8121637702},{"id":"voa/council_tax/WEST_MIDLANDS/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":786010.0,"estimate":801264.3020524979,"calibrationEstimate":804831.908847332},{"id":"voa/council_tax/WEST_MIDLANDS/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":654140.0,"estimate":667366.4046912193,"calibrationEstimate":670337.8446173668},{"id":"voa/council_tax/WEST_MIDLANDS/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":526260.0,"estimate":542465.0707445145,"calibrationEstimate":544880.3880476952},{"id":"voa/council_tax/WEST_MIDLANDS/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":302500.0,"estimate":308908.68011569977,"calibrationEstimate":310284.0953936577},{"id":"voa/council_tax/WEST_MIDLANDS/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":193700.0,"estimate":198747.3023056984,"calibrationEstimate":199632.22103261948},{"id":"voa/council_tax/WEST_MIDLANDS/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":105630.0,"estimate":107414.5040140152,"calibrationEstimate":107892.76392650604},{"id":"voa/council_tax/WEST_MIDLANDS/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":62780.0,"estimate":65637.16608524323,"calibrationEstimate":65929.41587018967},{"id":"voa/council_tax/WEST_MIDLANDS/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":6170.0,"estimate":6236.679645061493,"calibrationEstimate":6264.44837474823},{"id":"voa/council_tax/WEST_MIDLANDS/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2637190.0,"estimate":2698040.1096539497,"calibrationEstimate":2710053.086110115},{"id":"voa/council_tax/YORKSHIRE/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1070830.0,"estimate":1081951.5106871128,"calibrationEstimate":1086768.8853447435},{"id":"voa/council_tax/YORKSHIRE/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":514190.0,"estimate":523395.8514652252,"calibrationEstimate":525726.2633414268},{"id":"voa/council_tax/YORKSHIRE/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":432290.0,"estimate":438533.7035779953,"calibrationEstimate":440486.2676320076},{"id":"voa/council_tax/YORKSHIRE/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":249530.0,"estimate":251634.06920957565,"calibrationEstimate":252754.46445512772},{"id":"voa/council_tax/YORKSHIRE/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":158600.0,"estimate":159460.23387098312,"calibrationEstimate":160170.2293252945},{"id":"voa/council_tax/YORKSHIRE/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":75690.0,"estimate":76176.12427806854,"calibrationEstimate":76515.29922580719},{"id":"voa/council_tax/YORKSHIRE/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":42180.0,"estimate":43033.37067222595,"calibrationEstimate":43224.9764380455},{"id":"voa/council_tax/YORKSHIRE/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3770.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/YORKSHIRE/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2547080.0,"estimate":2574184.8637611866,"calibrationEstimate":2585646.385762453}] From 566633a09ba9ce03825131918ca84aeae599b88e Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:41:16 -0400 Subject: [PATCH 15/30] Correct the UK calibration and validation pages against the release's code - Call the 645 targets national and regional, by area, not UK-wide - Fit figures are from epoch 510, the last the build saves and logs - State the year fallback as the code has it, and how many targets use it - Note how each family is built or scored, under its label - Say what local fit does not show: policyengine.py's local analyses use Output Area households at national weights, and the UC targets are misassigned - Compare the three NI classes with their own OBR forecasts - Explain the scoring mismatches: DWP lines are GB but scored on UK households, DLA and PIP against PIP, council tax scope, fuel duty - Give the build's own reason for holding out the HMRC counts - Correct #582's text and the Northern Ireland issue, and list the confirmed issues awaiting a policyengine-uk-data number Co-Authored-By: Claude Opus 5.5 --- src/test/ukDataPages.test.tsx | 93 ++++++++++++++--- src/views/data/UkCalibrationPage.tsx | 129 +++++++++++++++-------- src/views/data/UkValidationPage.tsx | 146 +++++++++++++++++++-------- 3 files changed, 274 insertions(+), 94 deletions(-) diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx index 28df760..094a33b 100644 --- a/src/test/ukDataPages.test.tsx +++ b/src/test/ukDataPages.test.tsx @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import release from '../data/ukDataRelease.json'; -import { ukPipelineIntro, ukPipelineStages, ukBranchLabels } from '../data/ukPipelineStages'; +import { ukPipelineIntro, ukPipelineStages, ukBranchLabels, runtimeShortfall } from '../data/ukPipelineStages'; import { fmtInt, fmtPct, fmtTarget } from '../data/ukDataRelease'; vi.mock('next/navigation', () => ({ @@ -38,6 +38,31 @@ const STALE_UK_PHRASES = [ /zero-weight copy \(10,000/, /TAXSIM|CBO|federal|congressional/i, /certified/i, + // Corrected by the 2026-10-14 fact-check of the 1.58.0 pages. + /pension wealth/, + /each trains on 100,000/, + /below the repayment threshold/, + /bus subsidy to £3\.0bn/, + /beyond the 95th/, + /in proportion to population within its survey region/, + /Census 2021 and 2022/, + /Ofgem’s April 2026/, + /decides who takes up/, + /UK-wide targets/, + /end of calibration/, +]; + +// Claims the calibration and validation pages made before the same fact-check. +const STALE_DATA_PAGE_PHRASES = [ + /UK-wide targets/, + /income-related ESA alone|scored against income-related ESA/, + /Personal Independence Payment spending/, + /sums the variable that the release’s target registry assigns/, + /removes it/, + /up to three years back/, + /end of calibration/i, + /Dwellings by tenure, by nation/, + /certified/i, ]; describe('UK pipeline copy', () => { @@ -75,6 +100,14 @@ describe('UK pipeline copy', () => { expect(g.householdsWithArea + g.householdsWithoutArea).toBe(release.enhanced.households); }); + it('states the weight a pinned-model run loses against calibration', () => { + const calibrated = release.enhanced.weightedHouseholds * release.weightMatrices.columnSumPerSavedWeight; + expect(runtimeShortfall).toBeCloseTo(1 - release.validation.households / calibrated, 12); + expect(runtimeShortfall).toBeGreaterThan(0); + expect(runtimeShortfall).toBeLessThan(0.01); + expect(text).toContain(`${fmtPct(runtimeShortfall)} fewer`); + }); + it('renders the UK intro and branch labels', () => { render(); expect(screen.getByText(ukPipelineIntro)).toBeInTheDocument(); @@ -84,20 +117,38 @@ describe('UK pipeline copy', () => { }); import fc from 'fast-check'; -import UkCalibrationPage from '../views/data/UkCalibrationPage'; -import UkValidationPage, { fmtDifference, niTotal, obrRows } from '../views/data/UkValidationPage'; +import UkCalibrationPage, { listAreas } from '../views/data/UkCalibrationPage'; +import UkValidationPage, { fmtDifference, niClasses, niTotalTarget, obrRows } from '../views/data/UkValidationPage'; import checks from '../data/ukTargetChecks.json'; describe('UK calibration and validation pages', () => { - it('lists every UK-wide target family with the release counts, and no US-only text', () => { + it('lists every national and regional target family, with its area and notes, and no US-only text', () => { const { container } = render(); const text = container.textContent ?? ''; - expect(text).toContain(`${release.calibration.nationalTargets} UK-wide targets`); - expect(text).toContain(`${release.calibration.nationalGroups.length} families`); - for (const g of release.calibration.nationalGroups) expect(text).toContain(g.label); + expect(text).toContain(`${release.calibration.nationalTargets} targets in ${release.calibration.nationalGroups.length} families`); + expect(text).toContain(listAreas(release.calibration.nationalTargetsByArea)); + for (const g of release.calibration.nationalGroups) { + expect(text).toContain(g.label); + if (g.note) expect(text).toContain(g.note); + } + for (const fam of [...release.calibration.constituency.families, ...release.calibration.localAuthority.families]) { + if (fam.note) expect(text).toContain(fam.note); + } + expect(text).toContain(`epoch ${release.calibration.epoch}`); expect(text).not.toMatch(/US model only|congressional|IRS|L0/); + for (const phrase of STALE_DATA_PAGE_PHRASES) expect(text).not.toMatch(phrase); const families = release.calibration.nationalGroups.reduce((n, g) => n + g.targets, 0); expect(families).toBe(release.calibration.nationalTargets); + const byArea = Object.values(release.calibration.nationalTargetsByArea).reduce((n, x) => n + x, 0); + expect(byArea).toBe(release.calibration.nationalTargets); + }); + + it('flags the misassigned local Universal Credit targets in both calibrations', () => { + for (const local of [release.calibration.constituency, release.calibration.localAuthority]) { + const uc = local.families.filter((f) => f.label.startsWith('Universal Credit')); + expect(uc.length).toBeGreaterThan(0); + for (const f of uc) expect(f.note).toMatch(/row order/); + } }); it('shows the pinned run and never claims TAXSIM for the UK', () => { @@ -106,7 +157,18 @@ describe('UK calibration and validation pages', () => { expect(text).not.toMatch(/TAXSIM|federal|state income tax|filing status/i); expect(text).toContain(`policyengine-uk ${release.validation.modelVersion}`); expect(text).toContain(fmtPct(release.validation.within10)); + expect(text).toContain(fmtPct(release.validation.within5)); for (const n of [537, 570, 580, 581, 582, 1996]) expect(text).toContain(`#${n}`); + for (const phrase of STALE_DATA_PAGE_PHRASES) expect(text).not.toMatch(phrase); + for (const id of release.validation.revisedTargets) expect(text).toContain(id); + }); + + it('scores the pinned run against the values calibration fitted', () => { + const fitted = new Map(release.calibration.nationalGroups.map((g) => [g.label, g])); + for (const r of checks) expect(fitted.has(r.group)).toBe(true); + const scorable = checks.filter((r) => r.target !== 0); + const within = scorable.filter((r) => Math.abs(r.estimate / r.target - 1) < 0.1).length / scorable.length; + expect(within).toBeCloseTo(release.validation.within10, 6); }); it('scores the same targets the release calibrates to', () => { @@ -116,16 +178,21 @@ describe('UK calibration and validation pages', () => { expect(obrRows.length).toBe(checks.filter((r) => r.id.startsWith('obr/') && r.unit === 'gbp').length - 1); expect(obrRows.some((r) => r.id === 'obr/ni')).toBe(false); expect(obrRows.find((r) => r.id === 'obr/universal_credit')?.label).toMatch(/Great Britain/); + expect(obrRows.find((r) => r.id === 'obr/state_pension')?.label).toMatch(/Great Britain/); + expect(obrRows.find((r) => r.id === 'obr/pip')?.label).toMatch(/Disability Living Allowance and PIP/); }); - it('compares OBR total NICs with the sum of the three classes, not the mismapped column', () => { + it('compares the three National Insurance classes with their own OBR forecasts, not the mismapped total', () => { const get = (id: string) => checks.find((r) => r.id === id)!; - expect(niTotal.target).toBe(get('obr/ni').target); - expect(niTotal.estimate).toBeCloseTo( - get('obr/ni_employee').estimate + get('obr/ni_employer').estimate + get('obr/ni_self_employed').estimate, - ); + const classes = ['obr/ni_employee', 'obr/ni_employer', 'obr/ni_self_employed']; + expect(niClasses.target).toBeCloseTo(classes.reduce((n, id) => n + get(id).target, 0)); + expect(niClasses.estimate).toBeCloseTo(classes.reduce((n, id) => n + get(id).estimate, 0)); + expect(niTotalTarget).toBe(get('obr/ni').target); const { container } = render(); - expect(container.textContent).toContain(fmtTarget(niTotal.estimate, 'gbp')); + const text = container.textContent ?? ''; + expect(text).toContain(fmtTarget(niClasses.target, 'gbp')); + expect(text).toContain(fmtTarget(niClasses.estimate, 'gbp')); + expect(text).toContain(fmtDifference(niClasses.target, niClasses.estimate)); }); it('formats differences with the sign of estimate minus target', () => { diff --git a/src/views/data/UkCalibrationPage.tsx b/src/views/data/UkCalibrationPage.tsx index f0c8687..ddb728c 100644 --- a/src/views/data/UkCalibrationPage.tsx +++ b/src/views/data/UkCalibrationPage.tsx @@ -4,6 +4,7 @@ import { useMemo, useState } from 'react'; import { colors, typography, spacing } from '../../designTokens'; import PageHeader from '../../components/layout/PageHeader'; import SearchInput from '../../components/layout/SearchInput'; +import checks from '../../data/ukTargetChecks.json'; import { ukRelease as uk, ukFacts as f, @@ -11,11 +12,13 @@ import { fmtPct, fmtTarget, type UkLocalCalibration, + type UkTargetCheck, type UkTargetGroup, } from '../../data/ukDataRelease'; -import { DataTable, ExternalLink, PageLink, StatTile, bodyText, cell, issueUrl, sectionHeading } from './ukTables'; +import { DataTable, ExternalLink, PageLink, StatTile, bodyText, cell, sectionHeading } from './ukTables'; const cal = uk.calibration; +const rows = checks as UkTargetCheck[]; const VINTAGES: Record = { march_2026: 'March 2026 forecast', @@ -23,11 +26,37 @@ const VINTAGES: Record = { '2023-24 outturn': '2023-24 outturn', }; +// How many national targets describe each area, in the extractor's order. +const AREA_PHRASES: Record string> = { + UK: (n) => `${n} for the UK`, + 'Great Britain': (n) => `${n} for Great Britain`, + 'England and Northern Ireland': (n) => `${n} for England and Northern Ireland`, + England: (n) => `${n} for England`, + Scotland: (n) => `${n} for Scotland`, + 'Northern Ireland': (n) => `${n} for Northern Ireland`, + Nation: (n) => `${n} by nation`, + Region: (n) => `${n} by region`, +}; + +export function listAreas(byArea: Record): string { + const parts = Object.entries(byArea).map(([area, n]) => (AREA_PHRASES[area] ?? ((x: string) => `${x} for ${area}`))(fmtInt(n))); + return parts.length > 1 ? `${parts.slice(0, -1).join(', ')} and ${parts[parts.length - 1]}` : parts.join(''); +} + +const zeroTargets = rows.filter((r) => r.target === 0); + function groupValue(g: UkTargetGroup): string { if (g.value === undefined) return '–'; return fmtTarget(g.value, g.units[0]); } +const noteStyle = { + fontSize: typography.fontSize.xs, + color: colors.text.tertiary, + fontWeight: typography.fontWeight.normal, + marginTop: spacing.xs, +}; + function LocalTable({ local, areaName }: { local: UkLocalCalibration; areaName: string }) { return ( @@ -35,11 +64,8 @@ function LocalTable({ local, areaName }: { local: UkLocalCalibration; areaName: {fam.label} - {fam.heldOut && ( -
- Logged, not fitted -
- )} + {fam.heldOut &&
Logged, not fitted
} + {fam.note &&
{fam.note}
} {fam.source} {fmtInt(fam.metrics)} @@ -54,7 +80,7 @@ function LocalTable({ local, areaName }: { local: UkLocalCalibration; areaName: /** * The targets the UK release is calibrated to, from the release's calibration * logs and target registry (scripts/extract_uk_release.py). Fit figures are - * the final logged epoch of the build's own calibration. + * the build's own, at its last logged epoch. */ export default function UkCalibrationPage() { const [search, setSearch] = useState(''); @@ -62,7 +88,7 @@ export default function UkCalibrationPage() { const q = search.trim().toLowerCase(); if (!q) return cal.nationalGroups; return cal.nationalGroups.filter((g) => - [g.label, g.publisher, g.geography].some((field) => field.toLowerCase().includes(q)), + [g.label, g.publisher, g.geography, g.note ?? ''].some((field) => field.toLowerCase().includes(q)), ); }, [search]); const scored = cal.nationalTargets - cal.nationalZeroTargets; @@ -73,39 +99,50 @@ export default function UkCalibrationPage() { category="Data" title="Calibration targets" description={ - `Calibration fits the household weights in ${f.data} to ${f.nationalTargets} UK-wide targets for 2025, and ` + - `to local targets for ${f.constituencies} constituencies and ${f.localAuthorities} local authorities. Each ` + - 'target is a figure published by the OBR, HMRC, DWP, ONS or another public body, or derived from one.' + `Calibration fits the household weights in ${f.data} to ${f.nationalTargets} targets for ${f.nationalScope}, ` + + `and to local targets for ${f.constituencies} constituencies and ${f.localAuthorities} local authorities. ` + + 'Most targets are statistics the OBR, HMRC, DWP, ONS and other public bodies publish; some are built from ' + + 'them or set in the build’s code, and the tables say which.' } />
- - - - + + + +

- These figures come from the release’s calibration logs, at the last logged epoch ({cal.epoch}), and its - target registry. A target with no 2025 figure takes the nearest earlier year, up to three years back. To see - how the saved file does when policyengine.py’s pinned model runs it, see{' '} - validation. + These figures come from the release’s calibration logs and its target registry. The build runs 512 epochs + and saves the weights, and logs the fit, every tenth epoch, so the released weights and every fit figure here + are from epoch {cal.epoch}. A target with no 2025 figure takes the value of its nearest listed year, if that + year is earlier and within three years: {fmtInt(cal.targetsWithoutYearValue)} of the {f.nationalTargets}{' '} + national and regional targets do. To see how the saved file does when policyengine.py’s pinned model runs + it, see validation.

-

UK-wide targets

+

National and regional targets

- {f.nationalTargets} targets in {cal.nationalGroups.length} families. At the end of calibration,{' '} - {fmtPct(cal.nationalWithin10)} of the {fmtInt(scored)} non-zero targets lie within 10% of their value, and{' '} - {fmtPct(cal.nationalWithin5)} within 5%. Relative error is undefined for a target whose value is zero, so the - shares leave out the {cal.nationalZeroTargets === 1 ? 'one such target' : `${cal.nationalZeroTargets} such targets`}. + {f.nationalTargets} targets in {cal.nationalGroups.length} families: {listAreas(cal.nationalTargetsByArea)}. + At epoch {cal.epoch}, {fmtPct(cal.nationalWithin10)} of the {fmtInt(scored)} non-zero targets lie within 10% + of their value, and {fmtPct(cal.nationalWithin5)} within 5%. Each target counts once, whatever its size, so + a share says nothing about how far the misses are; the{' '} + validation page gives each OBR line’s gap. + {zeroTargets.length > 0 && + ` Relative error is undefined for a target of zero, so the shares leave out ${zeroTargets + .map((r) => `${r.id}, in “${r.group}”, where calibration estimates ${fmtTarget(r.calibrationEstimate, r.unit)}`) + .join(', ')}.`}

{groups.map((g) => ( - {g.label} + + {g.label} + {g.note &&
{g.note}
} + {g.urls.length > 0 ? {g.publisher} : g.publisher} {g.vintages.length > 0 && ( @@ -120,35 +157,47 @@ export default function UkCalibrationPage() { ))}
{groups.length === 0 &&

No targets match.

} -

- The UK-wide National Insurance target compares OBR’s total receipts with employee contributions alone, which - calibration cannot match;{' '} - policyengine-uk-data#537 removes it. -

Constituency targets

- {f.constituencies} constituencies × {cal.constituency.metrics} measures. Calibration fits{' '} - {fmtInt(cal.constituency.trainingCells)} non-zero area targets, and {fmtPct(cal.constituency.trainingWithin10)} of - them lie within 10% at the end. The other {fmtInt(cal.constituency.structuralZeroCells)} are Scottish and Welsh - renting targets in constituencies outside those nations, which calibration meets exactly. HMRC counts of - taxpayers with employment income are logged but not fitted. + {f.constituencies} constituencies × {cal.constituency.metrics} measures. Calibration gives each constituency + its own weight for every household in its nation, and fits each constituency’s weights towards its local + targets while their sum is fitted towards the national and regional targets. It fits{' '} + {fmtInt(cal.constituency.trainingCells)} non-zero area targets, and {fmtPct(cal.constituency.trainingWithin10)}{' '} + of them lie within 10% at epoch {cal.epoch}. The other {fmtInt(cal.constituency.structuralZeroCells)} are + Scottish and Welsh renting targets in constituencies outside those nations, which calibration meets exactly. + HMRC counts of taxpayers with employment income are logged but not fitted. The build treats the constituency + targets as figures for the 2010 boundaries and maps them to the 2024 boundaries.

-
+

Local authority targets

- {f.localAuthorities} local authorities × {cal.localAuthority.metrics} measures. Calibration fits{' '} - {fmtInt(cal.localAuthority.trainingCells)} area targets, and {fmtPct(cal.localAuthority.trainingWithin10)} of - them lie within 10% at the end. {fmtInt(cal.localAuthority.cellsWithoutSource)} area and measure pairs have no - local source and stay out of the loss. + {f.localAuthorities} local authorities × {cal.localAuthority.metrics} measures, fitted the same way. Calibration + fits {fmtInt(cal.localAuthority.trainingCells)} area targets, and {fmtPct(cal.localAuthority.trainingWithin10)}{' '} + of them lie within 10% at epoch {cal.epoch}. {fmtInt(cal.localAuthority.cellsWithoutSource)} area and measure + pairs still have no figure after the build’s preprocessing, and stay out of the loss. Local authorities + missing from HMRC’s income table take the average of the others.

+ +
+

What the local fit does not show

+

+ These local fit figures describe the release’s constituency and local authority weight files. When + policyengine.py analyses a constituency or local authority, it uses the households whose Output Area lies in + it, at their national weights, not those files, so the figures above do not measure how well such an + analysis matches the area. The data pipeline page describes how + households get an Output Area. In this release the build also assigns Universal Credit counts to the wrong + areas, as the notes in both tables say, so the Universal Credit rows above do not check Universal Credit by + area. +

+
); } diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index 2608d9d..07042d3 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -32,14 +32,14 @@ const OBR_ROW_LABELS: Record = { const areaOf = new Map(cal.nationalGroups.map((g) => [g.label, g.geography])); // The release scores OBR's total NICs line against employee NICs alone -// (policyengine-uk-data#537), so the table shows the classes and sums them. +// (policyengine-uk-data#537), so the table leaves that line out and compares +// the three classes, each with its own OBR forecast, as a sum. const NI_TOTAL = 'obr/ni'; const NI_CLASSES = ['obr/ni_employee', 'obr/ni_employer', 'obr/ni_self_employed']; const byId = new Map(rows.map((r) => [r.id, r])); -export const niTotal = { - target: byId.get(NI_TOTAL)?.target ?? 0, - estimate: NI_CLASSES.reduce((sum, id) => sum + (byId.get(id)?.estimate ?? 0), 0), -}; +const sumOf = (key: 'target' | 'estimate') => NI_CLASSES.reduce((sum, id) => sum + (byId.get(id)?.[key] ?? 0), 0); +export const niClasses = { target: sumOf('target'), estimate: sumOf('estimate') }; +export const niTotalTarget = byId.get(NI_TOTAL)?.target ?? 0; /** OBR receipts and spending lines, in £, from the March 2026 forecast. */ export const obrRows = rows @@ -58,11 +58,13 @@ export function fmtDifference(target: number, estimate: number): string { return `${pct >= 0 ? '+' : '−'}${Math.abs(pct).toFixed(1)}%`; } -const KNOWN_ISSUES = [ +// Issues without a number are confirmed in the release's code and await a +// policyengine-uk-data issue. +const KNOWN_ISSUES: { repo: string; n: number | null; text: string }[] = [ { repo: 'policyengine-uk-data', n: 581, - text: `The build calibrated the release with policyengine-uk ${uk.release.builtWithModelVersion}; policyengine.py runs it with ${uk.release.modelVersion}. UK-wide fit within 10% falls from ${fmtPct(cal.nationalWithin10)} to ${fmtPct(v.within10)} between the two.`, + text: `The build calibrated the release with policyengine-uk ${uk.release.builtWithModelVersion}; policyengine.py runs it with ${uk.release.modelVersion}. The share of national and regional targets within 10% falls from ${fmtPct(cal.nationalWithin10)} to ${fmtPct(v.within10)} between the two.`, }, { repo: 'policyengine-uk-data', @@ -72,21 +74,51 @@ const KNOWN_ISSUES = [ { repo: 'policyengine-uk-data', n: 582, - text: 'The OBR’s incapacity benefits line is compared with income-related ESA alone.', + text: 'The OBR’s incapacity benefits line also covers incapacity benefit, severe disablement allowance and the incapacity part of Income Support, which the release’s comparison with ESA leaves out.', + }, + { + repo: 'policyengine-uk-data', + n: null, + text: 'The OBR’s DWP benefit lines cover Great Britain, but the release scores them on every UK household, Northern Ireland’s included.', + }, + { + repo: 'policyengine-uk-data', + n: null, + text: 'The OBR’s disability line combines Disability Living Allowance and PIP, and the release scores it against PIP alone.', + }, + { + repo: 'policyengine-uk-data', + n: null, + text: 'The OBR’s UK council tax line includes Northern Ireland domestic rates and an accruals adjustment, which the model’s council tax leaves out.', + }, + { + repo: 'policyengine-uk-data', + n: null, + text: `Both local calibrations assign Universal Credit household counts to areas by row order, which does not match the areas.`, + }, + { + repo: 'policyengine-uk-data', + n: null, + text: `policyengine-uk ${uk.release.modelVersion} uprates the saved weights to ${v.year} by population growth, not by the factor the build used to save them, so a ${v.year} run has ${fmtPct(1 - v.households / (uk.enhanced.weightedHouseholds * uk.weightMatrices.columnSumPerSavedWeight))} fewer households than calibration fitted.`, + }, + { + repo: 'policyengine-uk-data', + n: null, + text: 'The Output Area lookup gives every Scottish Output Area the same population, and has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset.', }, { repo: 'policyengine-uk', n: 1996, text: 'Modelled VAT exceeds OBR receipts.' }, { repo: 'policyengine-uk-data', n: 570, text: 'Capital gains fall short of HMRC’s totals.' }, { repo: 'policyengine-uk-data', n: 580, - text: 'Northern Ireland households have no Output Area, so Northern Ireland constituencies and local authorities have no households.', + text: 'Northern Ireland households have no Output Area, so analyses of Northern Ireland constituencies and local authorities find no households, although calibration fits those areas’ targets with Northern Ireland households.', }, ]; /** * How the UK default dataset compares with official statistics: the saved * file run by the model policyengine.py pins (scripts/run_uk_target_check.py), - * scored on the release's own UK-wide calibration targets, plus the area + * scored on the release's own national and regional calibration targets, plus the area * targets the build holds out of calibration. */ export default function UkValidationPage() { @@ -105,29 +137,36 @@ export default function UkValidationPage() { category="Data" title="Validation" description={ - `PolicyEngine UK checks its default dataset against the official statistics it is calibrated to, using the ` + - `model version ${f.pin} pins, and against area statistics the build leaves out of calibration. This page ` + - `publishes every target, misses included.` + `PolicyEngine UK checks its default dataset against the targets it is calibrated to, using the model ` + + `version ${f.pin} pins, and against area statistics the build leaves out of calibration. This page lists ` + + `every national and regional target, misses included.` } />
- + - +
-

The default dataset against its UK-wide targets

+

The default dataset against its calibration targets

policyengine-uk {v.modelVersion}, the version {f.pin} pins, runs {uk.release.defaultDataset} from {f.data}{' '} for {v.year}-{String(v.year + 1).slice(2)}, and the build’s own code scores the result against the{' '} - {f.nationalTargets} UK-wide targets the release is calibrated to. {fmtPct(v.within10)} of the{' '} - {fmtInt(scored)} non-zero targets lie within 10%, and {fmtPct(v.within5)} within 5%. At the end of - calibration, with policyengine-uk {uk.release.builtWithModelVersion}, the shares were{' '} - {fmtPct(cal.nationalWithin10)} and {fmtPct(cal.nationalWithin5)}. The run counts {fmtInt(v.people)} people - in {fmtInt(v.households)} households. + {f.nationalTargets} national and regional targets the release is calibrated to, at the values calibration + fitted. {fmtPct(v.within10)} of the {fmtInt(scored)} non-zero targets lie within 10%, and{' '} + {fmtPct(v.within5)} within 5%. At calibration’s epoch {cal.epoch}, with policyengine-uk{' '} + {uk.release.builtWithModelVersion} and policyengine-core {uk.release.builtWithCoreVersion}, the shares were{' '} + {fmtPct(cal.nationalWithin10)} and {fmtPct(cal.nationalWithin5)}; the pinned run uses policyengine-core{' '} + {v.coreVersion}. The run counts {fmtInt(v.people)} people in {fmtInt(v.households)} households. +

+

+ These are the targets calibration fitted, so the shares measure how far the fit holds up under the pinned + model, not accuracy on statistics the build never saw. Each target also counts once, whatever its size. + {v.revisedTargets.length > 0 && + ` When the pinned run rebuilds the targets, ${fmtInt(v.revisedTargets.length)} come out at slightly different values (${v.revisedTargets.join(', ')}); the page keeps the values calibration fitted.`}

The OBR’s March 2026 Economic and Fiscal Outlook forecasts these receipts and spending lines for 2025-26: @@ -143,25 +182,41 @@ export default function UkValidationPage() { ))}

- Each PolicyEngine UK figure sums the variable that the release’s target registry assigns to that line. The - OBR forecasts total National Insurance receipts of {fmtTarget(niTotal.target, 'gbp')}; PolicyEngine UK’s - employee, employer and self-employed contributions add to {fmtTarget(niTotal.estimate, 'gbp')} - {` (${fmtDifference(niTotal.target, niTotal.estimate)})`}. The release scores that total against employee - contributions alone (policyengine-uk-data#537), - so the fit figures above count it as a miss. + Each PolicyEngine UK figure follows the release’s scoring for that target, which can sum a different variable + from the one the line names, or only some nations’ households. The OBR’s lines for DWP benefits cover Great + Britain, but the release scores them on every UK household. The disability line combines Disability Living + Allowance and PIP, against modelled PIP alone. The UK council tax line also includes Northern Ireland + domestic rates and an accruals adjustment, which the model’s council tax leaves out. Fuel duty is the duty + on households’ car fuel, against all fuel duty receipts. +

+

+ The OBR forecasts employee, employer and self-employed National Insurance contributions that add to{' '} + {fmtTarget(niClasses.target, 'gbp')}; PolicyEngine UK’s add to {fmtTarget(niClasses.estimate, 'gbp')} + {` (${fmtDifference(niClasses.target, niClasses.estimate)})`}. The release scores the OBR’s forecast of + total receipts, {fmtTarget(niTotalTarget, 'gbp')}, against employee contributions alone ( + policyengine-uk-data#537), so the + table leaves that line out and the fit figures count it as a miss.

Fit by target family

- Share of each family’s targets within 10%, at the end of calibration and with the pinned model. The{' '} - calibration targets page lists each family’s publisher. + Share of each family’s non-zero targets within 10%, at calibration’s epoch {cal.epoch} and with the pinned + model. The calibration targets page lists each family’s + publisher and area.

- + {cal.nationalGroups.map((g) => ( - {g.label} + + {g.label} + {g.note && ( +
+ {g.note} +
+ )} + {fmtInt(g.targets)} {fmtPct(g.within10)} {fmtPct(g.pinnedWithin10)} @@ -174,10 +229,13 @@ export default function UkValidationPage() {

Held out of calibration

The build logs HMRC’s counts of income taxpayers with employment income for each constituency and local - authority, but does not fit them: HMRC’s counts cover every income taxpayer with pay in the year, including - people the FRS finds out of work when it interviews them. At the end of calibration,{' '} - {fmtPct(cal.constituency.heldOut.within10)} of the {f.constituencies} constituency counts and{' '} - {fmtPct(cal.localAuthority.heldOut.within10)} of the {f.localAuthorities} local authority counts lie within 10%. + authority, scaled by the same factor as the local income amounts, but does not fit them. Its code explains + why: the counts are annual, so they include people with pay for part of the year whom the FRS finds out of + work at interview, and fitting them would move weight from people out of work to employees. The local + employment income amounts, and the national counts by income band, are still fitted. At calibration’s + epoch {cal.epoch}, {fmtPct(cal.constituency.heldOut.within10)} of the {f.constituencies} constituency counts + and {fmtPct(cal.localAuthority.heldOut.within10)} of the {f.localAuthorities} local authority counts lie + within 10%. These are the only targets the build holds out.

@@ -185,19 +243,25 @@ export default function UkValidationPage() {

Known issues

    {KNOWN_ISSUES.map((issue) => ( -
  • - {issue.text}{' '} - {`${issue.repo}#${issue.n}`} +
  • + {issue.text} + {issue.n !== null && ( + <> + {' '} + {`${issue.repo}#${issue.n}`} + + )}
  • ))}
-

Every UK-wide target

+

Every national and regional target

- All {fmtInt(rows.length)} targets, with the pinned model’s {v.year}-{String(v.year + 1).slice(2)} estimate - of the variable each one is scored against. Target identifiers match policyengine-uk-data’s target registry. + All {fmtInt(rows.length)} targets, at the values calibration fitted, with the pinned model’s{' '} + {v.year}-{String(v.year + 1).slice(2)} estimate from each target’s scoring. Target identifiers match + policyengine-uk-data’s target registry.

{showAll ? ( <> From 3e73b59dc55121d06ca34268441e33b84ffeb6e7 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:41:32 -0400 Subject: [PATCH 16/30] Correct the UK pipeline stages against the 1.58.0 build's code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From the 2026-10-14 fact-check, each point checked in the release's code: - wealth: no separate pension wealth (non-DB pensions sit in corporate wealth); HPI rescaling is an unweighted mean over owners, GB regions only - FRS: claim flags, not take-up decisions; council tax fills missing or negative reports by one adult or more; rental areas by bedroom need; property purchase is a 3.85% chance set in the build - spending: a fuel-car flag, with its NTS share attributed as the code does; energy at 24.67p and 5.74p per kWh, no standing charge - services: bus subsidy £3.55bn; ETB survey year 2023; NHS drops the cost table's 85+ rows, so spending at 80+ is understated - top incomes: 100,000 SPI records across the groups; second stage also imputes tax-free savings, then zeroes 14 benefit reports and restores 3; 28.0% covers the copies' descendants too - capital gains: the weight split it returns differs from the one it fits; the recipient's own income band; the spline extends past p95; donors let calibration fit HMRC's bands - student loans: no income test; Pension Credit in expectation, FRS reporters only - geography: Scottish Output Areas drawn with equal chances; four unitary authorities have no Output Areas - calibration: dropout averages log weights; priors halved; epoch 510; UC targets misassigned - final dataset: runtime uprating leaves a 2025 run 0.4% lighter than calibration; local analyses use national weights Co-Authored-By: Claude Opus 5.5 --- src/data/ukPipelineStages.ts | 156 +++++++++++++++++++---------------- 1 file changed, 87 insertions(+), 69 deletions(-) diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index 7c99cfd..af86875 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -12,15 +12,21 @@ import { ukRelease as uk, ukFacts as f, fmtInt, fmtPct, fmtMillions } from './uk const c = uk.enhanced.composition; const g = uk.enhanced.geography; const cal = uk.calibration; +const v = uk.validation; const stacked = c.frs + c.spiCopies; const donorBands = c.cgtBandDonors / 30; +// Household weight at calibration (the saved 2024 weights times the build's +// year factor), against the weight policyengine-uk gives the same year. +export const calibratedHouseholds = uk.enhanced.weightedHouseholds * uk.weightMatrices.columnSumPerSavedWeight; +export const runtimeShortfall = 1 - v.households / calibratedHouseholds; +const laFitted = cal.localAuthority.cellsWithTarget - cal.localAuthority.heldOut.cells; export const ukPipelineIntro = `PolicyEngine UK runs on the enhanced Family Resources Survey that ${f.pin} pins: ` + `${f.data}, built on ${f.builtOn}. The build starts from ${f.baseHouseholds} households in the ` + `Family Resources Survey 2024-25, imputes wealth, spending, top incomes and capital gains from other ` + - `surveys, places each household in Great Britain in an Output Area, and fits household weights to ` + - `official statistics for every constituency and for the UK as a whole.`; + `surveys and statistics, places each household in Great Britain in an Output Area, and fits household ` + + `weights towards statistics for every constituency and for the UK, its nations and its regions.`; export const ukBranchLabels = { national: 'UK and constituencies', local: 'Local authorities' }; @@ -33,23 +39,23 @@ export const ukPipelineStages: PipelineStage[] = [ description: `The build starts from the Family Resources Survey 2024-25 (UK Data Service study 9563): ` + `${f.baseHouseholds} households and ${f.basePeople} people. It maps the survey’s answers to PolicyEngine ` + - `UK’s inputs, keeps DWP’s grossing weights, and decides who takes up each benefit.`, + `UK’s inputs, keeps DWP’s grossing weights, and sets each family’s flags for claiming benefits.`, icon: 'chart-bar', outputSize: `${f.baseHouseholds} households`, dataSources: ['DWP Family Resources Survey 2024-25'], details: [ `The FRS grossing weights sum to ${fmtMillions(uk.base.weightedHouseholds)} households`, - 'Families that report Child Benefit, Pension Credit or Universal Credit claim it; the build then draws enough other families at random to bring the share of all families claiming to a take-up rate set in the data package', - 'A family whose adults have all reached State Pension age never claims Universal Credit', + 'A family that reports Child Benefit, Pension Credit or Universal Credit is flagged to claim it, with exceptions such as Child Benefit opt-outs; other families are flagged at random, so that in expectation the share of all families flagged, eligible or not, matches a take-up rate set in the data package', + 'A family whose adults have all reached State Pension age is never flagged to claim Universal Credit', 'The build draws Marriage Allowance, Tax-Free Childcare, free childcare entitlements and Scottish Child Payment at random, at rates set in the data package', - 'Households without a reported council tax bill get the mean reported bill for their region, band and number of adults (one or more); the build nets Scottish water and sewerage charges out', - 'The build places each family in a broad rental market area at random, in proportion to privately renting households of its size in its region', + 'Households with a missing or negative council tax report get the mean positive report for their region, band, and whether they have one adult; a group with no reports gets zero. The build nets Scottish water and sewerage charges out', + 'The build draws a broad rental market area for each family at random, in proportion to privately renting households in its region with its bedroom entitlement, and gives the household one family’s draw', ], imputations: [ - { name: 'Council tax (unreported bills)', source: 'FRS 2024-25 reported bills', method: 'Mean by region, band and single-adult household' }, - { name: 'Benefit take-up', source: 'Reported receipt and data package take-up rates', method: 'Reporters claim; others drawn at random' }, - { name: 'Broad rental market area', source: 'Privately renting households by area', method: 'Seeded random draw' }, - { name: 'Property purchase', source: 'HMRC transactions ÷ ONS households', method: '3.85% of households, seeded random draw' }, + { name: 'Council tax (missing reports)', source: 'FRS 2024-25 reported bills', method: 'Mean by region, band and one adult or more' }, + { name: 'Benefit claim flags', source: 'Reported receipt and data package take-up rates', method: 'Reporters flagged; others drawn at random' }, + { name: 'Broad rental market area', source: 'Privately renting households by area and bedrooms', method: 'Seeded random draw' }, + { name: 'Property purchase', source: 'Probability set in the build', method: '3.85% chance per household, seeded random draw' }, { name: 'TV ownership, licence evasion, first-time buyers', source: 'Rates set in the data package', method: 'Seeded random draws' }, ], }, @@ -60,20 +66,23 @@ export const ukPipelineStages: PipelineStage[] = [ subtitle: 'WAS → FRS', description: 'A quantile random forest trained on the Wealth and Assets Survey (Round 8, UK Data Service study 7215) ' + - 'imputes property, financial and pension wealth, vehicles and student loan balances. The build then ' + - 'rescales main residence values so each region’s mean matches the UK House Price Index.', + 'imputes property, corporate and financial wealth, savings, vehicles and student loan balances; corporate ' + + 'wealth includes pensions other than defined benefit pensions. The build then rescales owners’ main ' + + 'residence values, and their property wealth, so each region’s unweighted mean matches an average house ' + + 'price the build stores and attributes to the UK House Price Index.', icon: 'coin', inputSize: `${f.baseHouseholds} households`, outputSize: `${f.baseHouseholds} households`, dataSources: ['Wealth and Assets Survey Round 8', 'UK House Price Index'], details: [ '11 predictors: household net income; adults; children; employment, self-employment, private pension and capital income; bedrooms; council tax; renting; region', - 'The Wealth and Assets Survey does not cover Northern Ireland, so the forest treats Northern Ireland households as if they lived in Wales', + 'The forest’s regions stop at Great Britain, so it treats Northern Ireland households as if they lived in Wales', + 'The stored house prices cover the regions of Great Britain only', 'This stage runs before the spending stage, which uses the imputed number of vehicles', ], imputations: [ { name: 'Main residence value', source: 'WAS Round 8, UK HPI', method: 'Quantile random forest, rescaled to regional means' }, - { name: 'Property, corporate and financial wealth (gross and net)', source: 'WAS Round 8', method: 'Quantile random forest' }, + { name: 'Property and corporate wealth; gross and net financial wealth', source: 'WAS Round 8', method: 'Quantile random forest' }, { name: 'Other residential and non-residential property, land', source: 'WAS Round 8', method: 'Quantile random forest' }, { name: 'Savings', source: 'WAS Round 8', method: 'Quantile random forest' }, { name: 'Number of vehicles', source: 'WAS Round 8', method: 'Quantile random forest' }, @@ -88,8 +97,8 @@ export const ukPipelineStages: PipelineStage[] = [ description: 'A quantile random forest trained on the Living Costs and Food Survey 2023-24 (UK Data Service study 9468) ' + 'imputes spending, so PolicyEngine UK can model VAT, duties and energy policy. Petrol and diesel spending ' + - 'depend on whether a household runs a fuel-burning car: the build gives one to 90% of households with a ' + - 'vehicle from the wealth stage, at random, the share in the National Travel Survey 2024.', + 'depend on whether a household runs a fuel-burning car: the build flags 90% of households with a vehicle ' + + 'from the wealth stage, at random, a share its code attributes to the National Travel Survey 2024.', icon: 'shopping-cart', inputSize: `${f.baseHouseholds} households`, outputSize: `${f.baseHouseholds} households`, @@ -97,13 +106,14 @@ export const ukPipelineStages: PipelineStage[] = [ details: [ '10 predictors: adults, children, region, employment income, self-employment income, private pension income, household net income, tenure, accommodation type, and fuel-burning car', '18 outputs: the 12 COICOP spending categories, petrol, diesel, bus fares, domestic energy, electricity and gas', - 'The build rakes electricity and gas to NEED 2023 average use by income band, tenure, accommodation type and region, priced at Ofgem’s April 2026 price cap', + 'For the survey households it trains on, a forest trained on the Wealth and Assets Survey supplies the same fuel-burning car flag', + 'The build rakes electricity and gas to average use by income band, tenure, accommodation type and region that its code attributes to NEED 2023, priced at 24.67p per kWh for electricity and 5.74p for gas, with no standing charge', ], imputations: [ { name: '12 COICOP spending categories', source: 'LCFS 2023-24', method: 'Quantile random forest' }, { name: 'Petrol and diesel spending', source: 'LCFS 2023-24, NTS 2024', method: 'Quantile random forest, given a fuel-burning car' }, { name: 'Bus fares', source: 'LCFS 2023-24', method: 'Quantile random forest' }, - { name: 'Electricity and gas', source: 'LCFS 2023-24, NEED 2023, Ofgem', method: 'Quantile random forest, raked to NEED' }, + { name: 'Electricity and gas', source: 'LCFS 2023-24, NEED 2023', method: 'Quantile random forest, raked to NEED' }, ], }, { @@ -113,22 +123,23 @@ export const ukPipelineStages: PipelineStage[] = [ subtitle: 'ETB + NHS data', description: 'Forests trained on the Effects of Taxes and Benefits survey impute the share of spending taxed at the ' + - 'full VAT rate and the education, rail and bus subsidies each household receives. The build assigns NHS ' + - 'visits and spending by age and sex, scaled to a £202bn 2025-26 NHS budget.', + 'full VAT rate and the education, rail and bus subsidies each household receives. The build gives each ' + + 'person NHS visits and spending for their age and sex, scaled so the cost table sums to £202bn, the figure ' + + 'its code labels the 2025-26 NHS budget.', icon: 'heart-pulse', inputSize: `${f.baseHouseholds} households`, outputSize: `${f.baseHouseholds} households`, dataSources: ['Effects of Taxes and Benefits 1977-2024', 'NHS activity and cost by age and sex'], details: [ - 'VAT: a forest on adults, children, State Pension age and household net income predicts the share of spending taxed at the full rate', - 'Public services: a forest on age groups, pupils by school stage, DLA and PIP receipt, and household net income predicts education, rail and bus subsidy spending', - 'NHS: A&E, admitted patient and outpatient visits and spending, by age and sex', - 'After calibration, the build scales rail subsidy to £21.6bn and bus subsidy to £3.0bn, uplifted from England to the UK by population', + 'VAT: a forest on adults, children, pension age (the survey’s retirement flag in training) and household net income predicts the share of spending taxed at the full rate', + 'Public services: a forest on age groups, pupils by school stage, DLA and PIP amounts, and household net income predicts education, rail and bus subsidy spending', + 'NHS: A&E, admitted patient and outpatient visits and spending, by age and sex. The FRS records adult ages up to 80; the build drops the cost table’s rows for ages 85 and over before scaling, so spending on people aged 80 and over is understated', + 'After calibration, the build scales rail subsidy to £21.6bn and bus subsidy to £3.55bn, England’s £3.0bn uplifted to the UK by population', ], imputations: [ - { name: 'Full-rate VAT spending share', source: 'ETB, financial year ending 2024', method: 'Quantile random forest' }, + { name: 'Full-rate VAT spending share', source: 'ETB, survey year 2023', method: 'Quantile random forest' }, { name: 'Education, rail and bus subsidy', source: 'ETB, latest year', method: 'Quantile random forest' }, - { name: 'NHS visits and spending', source: 'NHS activity and cost data', method: 'Average by age and sex, scaled to £202bn' }, + { name: 'NHS visits and spending', source: 'NHS activity and cost data', method: 'Average by age and sex, one scaling factor' }, ], }, { @@ -139,23 +150,23 @@ export const ukPipelineStages: PipelineStage[] = [ description: `To represent high incomes, the build adds ${fmtInt(c.spiCopies)} copies of FRS households with zero ` + `weight and incomes drawn from HMRC’s Survey of Personal Incomes 2022-23. Calibration then sets how much ` + - `weight each copy gets: in the released file, these households hold ${fmtPct(c.spiWeightShare)} of ` + - `household weight.`, + `weight each copy gets: in the released file, these households and the capital gains copies and donors ` + + `later made from them hold ${fmtPct(c.spiWeightShare)} of household weight.`, icon: 'building-bank', inputSize: `${f.baseHouseholds} households`, outputSize: `${fmtInt(stacked)} households`, dataSources: ['HMRC Survey of Personal Incomes 2022-23'], details: [ - 'One quantile random forest per earnings group (none, employee, self-employed, both) predicts incomes from age, sex and region; each trains on 100,000 SPI records drawn by weight', - 'Copies get all six income types plus Gift Aid and charitable gifts of investments; the original FRS households get only dividend income', - 'A second forest re-imputes each copy’s pension contributions and reported benefits from its new incomes, and the build redraws its Universal Credit and Pension Credit take-up', - 'Children keep their own values', + 'One quantile random forest per earnings group (none, employee, self-employed, both) predicts incomes from age, sex and region; together they train on 100,000 SPI records drawn by weight with replacement, split across the groups by weight with at least 10,000 each', + 'Copies get all six income types plus Gift Aid and charitable gifts of investments; the original FRS households get only dividend income. Children keep their own values in this step', + 'A second forest re-imputes each copy’s pension contributions, tax-free savings income and benefit reports from its new incomes', + 'The build then zeroes 14 of each copy’s benefit reports, among them the means-tested benefits, contributory ESA and JSA, and Child Benefit; restores its industrial injuries, armed forces compensation and bereavement support reports; and redraws its Universal Credit and Pension Credit claim flags', ], imputations: [ { name: 'Employment, self-employment, pension, property and savings income', source: 'SPI 2022-23', method: 'Forest per earnings group (copies only)' }, { name: 'Dividend income', source: 'SPI 2022-23', method: 'Forest per earnings group (all households)' }, { name: 'Gift Aid and charitable gifts of investments', source: 'SPI 2022-23', method: 'Forest per earnings group (copies only)' }, - { name: 'Pension contributions and reported benefits', source: 'FRS 2024-25', method: 'Second forest, given the new incomes (copies only)' }, + { name: 'Pension contributions, tax-free savings income and benefit reports', source: 'FRS 2024-25', method: 'Second forest, then rules (copies only)' }, ], }, { @@ -165,18 +176,18 @@ export const ukPipelineStages: PipelineStage[] = [ subtitle: 'Advani-Summers + HMRC', description: 'The build duplicates every household and gives capital gains to the first adult in each copy. An ' + - 'optimiser splits each household’s weight between its two versions so the share with gains in each income ' + - `band matches Advani and Summers’ estimates. ${fmtInt(c.cgtBandDonors)} donor households then carry ` + - `HMRC’s average gain for each size-of-gain band from £12,300 up, covering gains beyond the 95th ` + - 'percentiles where the income-band distributions stop.', + 'optimiser splits each household’s weight between its two versions, aiming for the share with gains in ' + + 'each income band in Advani and Summers’ estimates; the split it returns gives the copies more weight than ' + + `the one it fitted. ${fmtInt(c.cgtBandDonors)} donor households then carry HMRC’s average gain for each ` + + 'size-of-gain band from £12,300 up, so calibration can fit HMRC’s taxpayers and gains in each band.', icon: 'trending-up', inputSize: `${fmtInt(stacked)} households`, outputSize: `${f.households} households`, dataSources: ['Advani & Summers capital gains distributions', 'HMRC Capital Gains Tax statistics, table 2.1a'], details: [ 'Weight split: an Adam optimiser takes up to 100 steps, with each household’s share passed through a sigmoid', - 'Gain amounts: a random draw from a piecewise-linear fit to the 5th–95th percentiles of gains in the household’s income band', - `Donors: 30 for each of HMRC’s ${fmtInt(donorBands)} size-of-gain bands from £12,300 (2023-24), each starting at the weight that reproduces its band’s taxpayers`, + 'Gain amounts: a random draw from a piecewise-linear line through the 5th to 95th percentiles of gains in the recipient’s own income band, extended in straight lines beyond them', + `Donors: 30 for each of HMRC’s ${fmtInt(donorBands)} size-of-gain bands from £12,300, each starting at the weight that reproduces its band’s taxpayers`, ], }, { @@ -185,21 +196,21 @@ export const ukPipelineStages: PipelineStage[] = [ title: 'Other imputations', subtitle: 'Salary sacrifice, student loans, Pension Credit', description: - 'The build sets pension contributions through salary sacrifice, student loan plans and Pension Credit ' + - 'take-up last, because each depends on incomes or wealth imputed earlier.', + 'The build then sets pension contributions through salary sacrifice, student loan plans and Pension ' + + 'Credit claim flags. Pension Credit comes last because entitlement depends on the capital imputed earlier.', icon: 'school', inputSize: `${f.households} households`, outputSize: `${f.households} households`, dataSources: ['FRS 2024-25', 'Student Loans Company', 'DWP take-up statistics'], details: [ - 'Salary sacrifice: a forest on age and employment income fills in jobs whose holders the FRS did not ask, then the build switches pension contributors to salary sacrifice at random, aiming for about 5.4 million users for calibration to fit', - 'Student loans: people repaying get Plan 1, 2 or 5 from their estimated university start year; in England, the build adds Plan 2 and Plan 5 holders below the repayment threshold to match Student Loans Company totals', - 'Pension Credit: the build solves the take-up probability among entitled families so weighted take-up in Great Britain equals DWP’s caseload take-up rate; families that report Pension Credit keep claiming', + 'Salary sacrifice: a forest on age and employment income fills in people the FRS did not ask about salary sacrifice, then the build switches employed pension contributors to salary sacrifice at random, aiming for about 5.4 million users for calibration to fit', + 'Student loans: people repaying through PAYE get Plan 1, 2 or 5 from their estimated university start year, in every nation; in England, the build then gives Plan 2 or Plan 5 at random to people with tertiary education in the matching age band who do not repay, so the expected number at survey weights matches the Student Loans Company’s count of borrowers liable to repay', + 'Pension Credit: the build solves the claim probability for entitled families so that, in expectation at survey weights, take-up in Great Britain equals DWP’s caseload take-up rate; FRS families that report Pension Credit keep claiming (top-income copies’ predicted reports do not count), and entitled families in Northern Ireland draw at the same probability', ], imputations: [ { name: 'Salary sacrifice pension contributions', source: 'FRS 2024-25', method: 'Quantile random forest, then random switching' }, { name: 'Student loan plan', source: 'Student Loans Company totals', method: 'Rules, then random assignment in England' }, - { name: 'Pension Credit take-up', source: 'DWP take-up rate', method: 'Probability solved over entitled families' }, + { name: 'Pension Credit claim flags', source: 'DWP take-up rate', method: 'Probability solved over entitled families in Great Britain' }, ], }, { @@ -208,16 +219,19 @@ export const ukPipelineStages: PipelineStage[] = [ title: 'Small-area geography', subtitle: 'Output Areas', description: - 'The build gives each household in Great Britain one Output Area, drawn at random in proportion to ' + - 'population within its survey region, which fixes its local authority and constituency. It then uprates ' + - 'the file to 2025, the year the calibration targets describe.', + 'The build gives each household in Great Britain one Output Area, drawn at random within its survey ' + + 'region: in proportion to population in England and Wales, and with equal chances in Scotland, where the ' + + 'lookup gives every Output Area the same population in this release. The Output Area fixes the household’s ' + + 'local authority and constituency. The build then uprates the file to 2025, the year the calibration ' + + 'targets describe.', icon: 'map-pin', inputSize: `${f.households} households`, outputSize: `${f.households} households`, - dataSources: ['ONS and NRS Output Area lookups', 'Census 2021 and 2022 populations'], + dataSources: ['ONS and NRS Output Area lookups', 'Census 2021 populations (England and Wales)'], details: [ `${fmtInt(g.householdsWithArea)} households have an Output Area; each of the ${f.gbConstituencies} constituencies in Great Britain has ${g.householdsPerConstituency.min} to ${g.householdsPerConstituency.max} of them`, `Northern Ireland’s ${f.niHouseholds} households have none in this release: the build skips Northern Ireland while its small-area lookup is unavailable (policyengine-uk-data#580)`, + 'The lookup has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset, four of the local authorities the build calibrates; households there carry 17 older district codes instead', `The build can draw several Output Areas per household; the publish run drew ${g.outputAreaDrawsPerHousehold}`, ], }, @@ -228,19 +242,20 @@ export const ukPipelineStages: PipelineStage[] = [ subtitle: `${f.constituencies} × ${f.households} weights`, description: `Calibration gives each of the ${f.constituencies} constituencies its own weight for every household in ` + - `its nation, and fits all of them together: each constituency’s weights match its local targets, and their ` + - `sum over constituencies matches ${f.nationalTargets} UK-wide targets. That sum becomes each household’s ` + - `national weight.`, + `its nation, and fits them all together: each constituency’s weights towards its local targets, and their ` + + `sum over constituencies towards ${f.nationalTargets} targets for the UK, its nations and its regions. ` + + `That sum becomes each household’s national weight.`, icon: 'checkbox', inputSize: `${f.households} households`, outputSize: `${f.constituencies} × ${f.households} weights`, dataSources: ['ONS', 'HMRC', 'DWP', 'OBR', 'VOA', 'Student Loans Company', 'and others'], details: [ - 'An Adam optimiser fits log weights at learning rate 0.1 for 512 epochs, replacing a random 5% of weights with their mean at each step', + 'An Adam optimiser fits log weights at learning rate 0.1 for 512 epochs; at each step it replaces a random 5% of the log weights with the mean of the rest', 'The loss adds the mean squared relative error over local targets to the same over national targets, measured symmetrically between target and estimate', - 'Starting weights divide each FRS weight by the number of constituencies in the household’s nation; the zero-weight top-income copies share half the starting total', - 'The build maps local targets from 2010 constituency boundaries to the 2024 boundaries', - `At the end of calibration, ${fmtPct(cal.nationalWithin10)} of national and ${fmtPct(cal.constituency.trainingWithin10)} of constituency targets lie within 10%`, + 'Starting weights: the positive weights are halved, the zero-weight households (the top-income copies and their capital gains copies) share the other half equally, and each household’s starting weight is divided by the number of constituencies in its nation', + 'The build treats the constituency targets as figures for the 2010 boundaries and maps them to the 2024 boundaries', + `The build saves the weights, and logs the fit, every tenth epoch, so the release’s weights are from epoch ${cal.epoch}. There, ${fmtPct(cal.nationalWithin10)} of national and regional targets and ${fmtPct(cal.constituency.trainingWithin10)} of constituency targets lie within 10%`, + 'In this release the build assigns Universal Credit household counts to the wrong constituencies', ], calibrationTargets: [ ...cal.constituency.families.map((fam) => ({ @@ -248,7 +263,7 @@ export const ukPipelineStages: PipelineStage[] = [ target: `${fmtInt(fam.cells)} area targets`, source: fam.source, })), - { variable: 'UK-wide targets', target: f.nationalTargets, source: 'See calibration targets' }, + { variable: 'National and regional targets', target: f.nationalTargets, source: 'See calibration targets' }, ], link: { label: 'All calibration targets', path: '/data/calibration' }, }, @@ -259,9 +274,9 @@ export const ukPipelineStages: PipelineStage[] = [ title: 'Enhanced FRS 2024-25', subtitle: 'Default dataset', description: - `The build scales the national weights back to 2024, the file’s year, and PolicyEngine UK uprates them ` + - `when it loads the file. It rescales rail and bus subsidies, bus fares and road fuel volumes to published ` + - `totals and saves the file as ${uk.release.defaultDataset}, the dataset ${f.pin} runs for the UK.`, + `The build scales the national weights back to 2024, the file’s year. It then scales rail and bus subsidy, ` + + `bus fares, and petrol and diesel spending to totals it sets, and saves the file as ` + + `${uk.release.defaultDataset}, the dataset ${f.pin} runs for the UK.`, icon: 'stack-2', inputSize: `${f.constituencies} × ${f.households} weights`, outputSize: `${f.households} households`, @@ -269,8 +284,10 @@ export const ukPipelineStages: PipelineStage[] = [ details: [ `${f.households} households and ${f.people} people, weighted to ${fmtMillions(uk.enhanced.weightedHouseholds)} households in 2024`, `${fmtInt(c.frs)} FRS households, ${fmtInt(c.spiCopies)} top-income copies, ${fmtInt(c.capitalGainsCopies)} capital gains copies and ${fmtInt(c.cgtBandDonors)} capital gains donors`, - 'policyengine.py analyses a constituency or local authority with the households whose Output Area lies in it, at their national weights', - 'Northern Ireland constituencies and local authorities have no households in this release, so policyengine.py stops with an error for them', + `policyengine-uk ${v.modelVersion} uprates the weights when it loads the file, by population growth rather than the build’s factor, so a ${v.year} run has ${fmtMillions(v.households)} households against the ${fmtMillions(calibratedHouseholds)} calibration fitted, ${fmtPct(runtimeShortfall)} fewer`, + 'Bus fares: England’s fare receipts uplifted to the UK by population, split between London and the rest of England, and spread across income groups by bus trips in the National Travel Survey. Petrol and diesel spending: one factor, so the litres they imply match the 2024 road fuel volume the build uses', + 'policyengine.py analyses a constituency or local authority with the households whose Output Area lies in it, at their national weights, not with the constituency or local authority weights', + 'Northern Ireland constituencies and local authorities have no households with an Output Area in this release, so policyengine.py stops with an error for them', ], link: { label: 'How the data compares with official statistics', path: '/data/validation' }, }, @@ -281,16 +298,17 @@ export const ukPipelineStages: PipelineStage[] = [ subtitle: `${f.localAuthorities} × ${f.households} weights`, description: `The same fit runs over ${f.localAuthorities} local authorities, with more local targets: income and ` + - `housing costs, tenure, private rents, and council tax bands and bills. The loss leaves out any target ` + - `with no local source. The release ships these weights as local_authority_weights.h5; the default ` + - `dataset’s weights come from the constituency fit.`, + `housing costs, tenure, private rents, and council tax bands and bills. A target with no figure after the ` + + `build’s preprocessing stays out of the loss. The release ships these weights as ` + + `local_authority_weights.h5; the default dataset’s weights come from the constituency fit.`, icon: 'building-community', inputSize: `${f.households} households`, outputSize: `${f.localAuthorities} × ${f.households} weights`, dataSources: ['ONS', 'HMRC', 'DWP', 'VOA', 'MHCLG', 'Welsh Government'], details: [ - `${fmtInt(cal.localAuthority.cellsWithTarget)} local targets across ${cal.localAuthority.metrics} measures; ${fmtInt(cal.localAuthority.cellsWithoutSource)} area and measure pairs have no source`, - `At the end of calibration, ${fmtPct(cal.localAuthority.trainingWithin10)} of local authority targets lie within 10%`, + `${fmtInt(laFitted)} fitted local targets and ${fmtInt(cal.localAuthority.heldOut.cells)} logged but not fitted, across ${cal.localAuthority.metrics} measures; ${fmtInt(cal.localAuthority.cellsWithoutSource)} area and measure pairs have no figure`, + `At epoch ${cal.epoch}, ${fmtPct(cal.localAuthority.trainingWithin10)} of local authority targets lie within 10%`, + 'In this release the build assigns Universal Credit household counts to the wrong local authorities', ], calibrationTargets: [ ...cal.localAuthority.families.map((fam) => ({ @@ -298,7 +316,7 @@ export const ukPipelineStages: PipelineStage[] = [ target: `${fmtInt(fam.cells)} area targets`, source: fam.source, })), - { variable: 'UK-wide targets', target: f.nationalTargets, source: 'See calibration targets' }, + { variable: 'National and regional targets', target: f.nationalTargets, source: 'See calibration targets' }, ], }, ]; From 5660c21e1e34927777007201f50067362fb9812c Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:41:33 -0400 Subject: [PATCH 17/30] Describe the UK pay channels that are on by default, and the OBR module's feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit policyengine-uk 2.126.12 is not static by default: employment_income adds employer_ni_fixed_employer_cost_change (incidence 1) and the salary sacrifice cap's return-to-pay and 0.16% haircut (cap from 6 April 2029). The page now says so and lists the three parameters. apply_dynamics writes the response into the reform simulation, so later taxes and benefits include it; the page said the opposite. Also: - relative changes, with the formula's floors (£1 net income, 0.01 wage) - exclusions by employment status, as the code tests them - is_married's fallback to every couple - capital gains: measured marginal rate on two adults, the 0.001 floor, the parameter's own OBR citation, and the guard against both conventions The differential test now checks the three pay parameters and the employment_income components against the policyengine-uk source. Co-Authored-By: Claude Opus 5.5 --- .../theory/UkBehaviouralResponses.tsx | 68 ++++++++++++------- src/data/ukBehaviouralResponses.ts | 19 +++++- src/test/ukBehavioural.test.tsx | 34 +++++++++- 3 files changed, 93 insertions(+), 28 deletions(-) diff --git a/src/components/theory/UkBehaviouralResponses.tsx b/src/components/theory/UkBehaviouralResponses.tsx index aab75fa..0b94f81 100644 --- a/src/components/theory/UkBehaviouralResponses.tsx +++ b/src/components/theory/UkBehaviouralResponses.tsx @@ -4,6 +4,7 @@ import { capitalGainsParameters, labourSupplyParameters, obrElasticities, + payParameters, ukSourceLinks, type ParameterRow, } from '../../data/ukBehaviouralResponses'; @@ -34,11 +35,26 @@ export default function UkBehaviouralResponses() { return (

- PolicyEngine UK simulates reforms statically by default: earnings and capital gains stay as they were before - the reform. policyengine-uk {UK_MODEL_VERSION}, the version policyengine.py 6.3.4 pins, offers three optional - behavioural responses. + In policyengine-uk {UK_MODEL_VERSION}, the version policyengine.py 6.3.4 pins, the labour supply and capital + gains responses below are off by default. Two modelling assumptions do change pay by default, under reforms + to employer National Insurance or to salary sacrifice.

+
+

Pay under employer National Insurance and salary sacrifice reforms

+

+ When a reform changes employer National Insurance, through its rate, its threshold or its treatment of + employer pension contributions, the model holds what each employer pays for each employee fixed, and by + default passes the whole change through to pay. Pay below the employer threshold stays as it was. +

+

+ When a cap on salary-sacrificed pension contributions free of National Insurance applies, as the model’s + current law has it from April 2029, contributions above the cap return to pay, and every worker’s pay falls + by 0.16%, the parameter’s estimate of employers spreading the extra National Insurance across all staff. +

+ +
+

Labour supply

@@ -59,13 +75,14 @@ export default function UkBehaviouralResponses() { overflowWrap: 'anywhere', }} > - employment income × (income elasticity × change in household net income + substitution elasticity × change - in marginal wage) + employment income before the response × (income elasticity × relative change in household net income + + substitution elasticity × relative change in the marginal wage)

- Each change compares the reform with the baseline and stops at 100%. Employment income means the amount - before the response, and the marginal wage means one minus the person’s marginal tax rate. The response - feeds into the reform’s taxes and benefits. + Each relative change compares the reform with the baseline and is capped at 100% either way. The marginal + wage is one minus the person’s marginal tax rate. Negative employment income counts as zero, household net + income below £1 counts as £1, and a marginal wage of zero counts as 0.01. The response feeds into the + reform’s taxes and benefits.

@@ -73,14 +90,14 @@ export default function UkBehaviouralResponses() {

Labour supply, the OBR’s way

- A module in policyengine-uk’s Python interface (Simulation.apply_dynamics) estimates how - working hours respond to a reform with elasticities that vary by family type and the age of the youngest - child, which it takes from the OBR’s note on{' '} + A module in policyengine-uk’s Python interface (Simulation.apply_dynamics), when called, + estimates how working hours respond to a reform, with elasticities that vary by family type and the age of + the youngest child. Its parameter file cites the OBR’s note on{' '} the labour supply effects of the Autumn 2023 National Insurance cut. - It covers the two eldest adults in each household, except the self-employed, full-time students and people - aged 60 or over, and models hours only: the participation response is not yet switched on. It reports the - change in earnings and in full-time-equivalent employment alongside the reform, without feeding it back - into the reform’s taxes and benefits. + It covers the two eldest adults in each household, except people whose employment status is self-employed + or student and people aged 60 or over, and models hours only: the participation response is not yet + switched on. It writes the change in earnings into the reform simulation, so taxes and benefits calculated + afterwards include it, and reports the change in earnings and in full-time-equivalent employment.

{obrElasticities.map((r) => ( @@ -93,20 +110,25 @@ export default function UkBehaviouralResponses() { ))}

- Married means married or in a civil partnership; children are members of the benefit unit under 18. The module - gives no elasticity to unmarried men with children. + Married means married or in a civil partnership, as the survey records it; without that input, the model + treats every couple as married. Children are members of the benefit unit under 18. The module gives no + elasticity to unmarried men with children.

Capital gains

- An elasticity of realised gains with respect to the retention rate, the share of a marginal pound of gains - kept after tax, sets how gains respond, and it is 0 by default. Under a reform, each person’s gains scale by - the ratio of their reform to baseline retention rates, raised to the elasticity. Gains that qualify for - Business Asset Disposal Relief can take their own elasticity, 1.4, the value the OBR used for those gains in - its January 2025 capital gains tax costing; until that - switch is on, they take the main elasticity. + An elasticity of realised gains with respect to the retention rate sets how gains respond, and it is 0 by + default. The retention rate is one minus the person’s marginal rate on gains, which the model measures as + the rise in household net income from £1,000 more gains (or 0.1% of their gains, if larger), for the two + adults in each household with the largest gains before the response; it counts as at least 0.001. Under a + reform, each person’s gains scale by the ratio of their reform to baseline retention rates, raised to the + elasticity. Gains that qualify for Business Asset Disposal Relief can take their own elasticity, 1.4, which + the parameter cites to the OBR’s{' '} + January 2025 capital gains tax costing; until that + switch is on, they take the main elasticity. A tax-rate elasticity offers the same response in another + convention, and the model refuses to run with both set.

diff --git a/src/data/ukBehaviouralResponses.ts b/src/data/ukBehaviouralResponses.ts index d0cfffd..560e1da 100644 --- a/src/data/ukBehaviouralResponses.ts +++ b/src/data/ukBehaviouralResponses.ts @@ -3,6 +3,9 @@ * version policyengine.py 6.3.4 pins) defines them. Values mirror: * - parameters/gov/simulation/labour_supply_responses/*.yaml * - parameters/gov/simulation/capital_gains_responses/*.yaml + * - parameters/gov/contrib/policyengine/employer_ni/employee_incidence.yaml, + * parameters/gov/hmrc/national_insurance/salary_sacrifice_pension_cap.yaml and + * parameters/gov/contrib/behavioral_responses/salary_sacrifice_broad_base_haircut_rate.yaml * - dynamics/progression.py: calculate_labour_substitution_elasticities and * calculate_labour_net_income_elasticities * src/test/ukBehavioural.test.ts compares them with that source when @@ -25,6 +28,17 @@ export interface ParameterRow { value: string; } +/** + * Pay that changes under particular reforms by default: employment_income adds + * employer_ni_fixed_employer_cost_change, salary_sacrifice_returned_to_income + * and salary_sacrifice_broad_base_haircut. + */ +export const payParameters: ParameterRow[] = [ + { path: 'gov.contrib.policyengine.employer_ni.employee_incidence', label: 'Share of a change in employer National Insurance passed to pay', value: '1 (100%)' }, + { path: 'gov.hmrc.national_insurance.salary_sacrifice_pension_cap', label: 'Cap on salary-sacrificed pension contributions free of National Insurance', value: 'None until 5 April 2029, then £2,000' }, + { path: 'gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate', label: 'Cut to every worker’s pay while that cap applies', value: '0.0016 (0.16%)' }, +]; + /** Simulation parameters: elasticities applied inside a reform simulation. */ export const labourSupplyParameters: ParameterRow[] = [ { path: 'gov.simulation.labour_supply_responses.income_elasticity', label: 'Income elasticity', value: '0' }, @@ -49,8 +63,9 @@ export interface ElasticityRow { /** * The OBR-method module's elasticities by group. "Married" is the model's - * is_married: married or in a civil partnership. Children are benefit-unit - * members under 18. Unmarried men with children get no elasticity. + * is_married: married or in a civil partnership, from the survey, and every + * couple when no input says otherwise. Children are benefit-unit members + * under 18. Unmarried men with children get no elasticity. */ export const obrElasticities: ElasticityRow[] = [ { group: 'Married women', youngestChild: 'No children', substitution: 0.14, income: 0 }, diff --git a/src/test/ukBehavioural.test.tsx b/src/test/ukBehavioural.test.tsx index 3182ec5..7f57c30 100644 --- a/src/test/ukBehavioural.test.tsx +++ b/src/test/ukBehavioural.test.tsx @@ -6,6 +6,7 @@ import { capitalGainsParameters, labourSupplyParameters, obrElasticities, + payParameters, } from '../data/ukBehaviouralResponses'; vi.mock('next/navigation', () => ({ @@ -20,9 +21,16 @@ describe('UK behavioural responses page', () => { const { container } = render(); const text = container.textContent ?? ''; expect(container.querySelector('h1')).toHaveTextContent('Behavioural responses'); - expect(text).not.toMatch(/CBO|\blabor\b|behavioral|taxable income|decile|\$/); - expect(text).toContain('statically by default'); - for (const row of [...labourSupplyParameters, ...capitalGainsParameters]) expect(text).toContain(row.path); + // Parameter paths are identifiers, some spelled the US way; the prose is not. + const prose = [...payParameters, ...labourSupplyParameters, ...capitalGainsParameters].reduce( + (t, row) => t.split(row.path).join(''), + text, + ); + expect(prose).not.toMatch(/CBO|\blabor\b|behavioral|taxable income|decile|\$/); + expect(text).not.toMatch(/statically by default|without feeding it back|full-time students/); + expect(text).toContain('off by default'); + expect(text).toContain('writes the change in earnings into the reform simulation'); + for (const row of [...payParameters, ...labourSupplyParameters, ...capitalGainsParameters]) expect(text).toContain(row.path); const link = container.querySelector('a[href*="NICS-Cut-Impact-on-Labour-Supply"]'); expect(link).not.toBeNull(); }); @@ -72,6 +80,26 @@ describe.skipIf(!source)('UK behavioural values match policyengine-uk', () => { } }); + it('matches the defaults behind pay changes under employer NI and salary sacrifice reforms', () => { + const values = (path: string) => [...read(path).matchAll(/^\s+([\d-]+):\s*([^\s#]+)/gm)].map((m) => [m[1], m[2]]); + expect(values('parameters/gov/contrib/policyengine/employer_ni/employee_incidence.yaml')).toEqual([['2010-01-01', '1']]); + expect(values('parameters/gov/contrib/behavioral_responses/salary_sacrifice_broad_base_haircut_rate.yaml')).toEqual([ + ['2010-01-01', '0.0016'], + ]); + expect(values('parameters/gov/hmrc/national_insurance/salary_sacrifice_pension_cap.yaml')).toEqual([ + ['2010-01-01', '.inf'], + ['2029-04-06', '2000'], + ]); + const shown = Object.fromEntries(payParameters.map((r) => [r.path, r.value])); + expect(shown['gov.contrib.policyengine.employer_ni.employee_incidence']).toMatch(/^1 /); + expect(shown['gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate']).toMatch(/^0\.0016 /); + expect(shown['gov.hmrc.national_insurance.salary_sacrifice_pension_cap']).toMatch(/until 5 April 2029, then £2,000/); + const income = read('variables/input/employment_income.py'); + for (const v of ['employer_ni_fixed_employer_cost_change', 'salary_sacrifice_returned_to_income', 'salary_sacrifice_broad_base_haircut']) { + expect(income).toContain(`"${v}"`); + } + }); + it('matches the OBR-method elasticities in dynamics/progression.py', () => { const code = read('dynamics/progression.py'); const body = (name: string) => { From 427c1ecbd5737472504b53828f6794b68593a476 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:41:33 -0400 Subject: [PATCH 18/30] Make the UK overview, walkthrough and section hubs claim only what holds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The UK overview no longer promises any reform's effect on every household; household data is FRS households plus the build's copies, weighted towards official statistics; behaviour is optional elasticities plus the default pay channels - The walkthrough's behavioural step treated a fixed per-child credit as a marginal rate cut. A lump sum has no substitution effect, so the step now applies an income elasticity (−0.05) to the credit's share of net income, for both countries. The UK steps say the households, schedule and weights are illustrative. - UK hubs: the coverage registry's status, not a claim of full coverage; weights calibrated towards, not matching, official statistics Co-Authored-By: Claude Opus 5.5 --- src/components/microsim/ThreeIngredients.tsx | 9 +++--- src/data/microsimSteps.ts | 29 ++++++++++++-------- src/data/sectionOverviews.ts | 10 +++---- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/components/microsim/ThreeIngredients.tsx b/src/components/microsim/ThreeIngredients.tsx index 54f6526..d63c5f6 100644 --- a/src/components/microsim/ThreeIngredients.tsx +++ b/src/components/microsim/ThreeIngredients.tsx @@ -57,7 +57,7 @@ export default function ThreeIngredients({ activeIngredient, country = 'us' }: T title: 'Household data', description: country === 'uk' - ? 'A representative sample of UK households, with the incomes, demographics, and benefit receipt of each.' + ? 'Family Resources Survey households, plus copies the build adds for top incomes and capital gains, each with incomes, demographics and benefit receipt, weighted towards official statistics.' : 'A representative microdata sample of the population, with income, demographics, and program participation for each household.', icon: , key: 'households' as const, @@ -66,7 +66,7 @@ export default function ThreeIngredients({ activeIngredient, country = 'us' }: T title: country === 'uk' ? 'Behavioural dynamics' : 'Behavioral dynamics', description: country === 'uk' - ? 'Elasticities capturing how people adjust their labour supply and income in response to tax and benefit changes.' + ? 'Optional elasticities for how labour supply and capital gains respond to tax and benefit changes, and pay that adjusts by default under employer National Insurance and salary sacrifice reforms.' : 'Elasticities capturing how people adjust their labor supply and income in response to tax and benefit changes.', icon: , key: 'dynamics' as const, @@ -76,8 +76,9 @@ export default function ThreeIngredients({ activeIngredient, country = 'us' }: T return (

- PolicyEngine's microsimulation model combines three ingredients to estimate the impact of any - tax or benefit reform on every household in the country. + {country === 'uk' + ? 'PolicyEngine UK combines three ingredients to estimate how a tax or benefit reform it models would affect households across the UK.' + : "PolicyEngine's microsimulation model combines three ingredients to estimate the impact of any tax or benefit reform on every household in the country."}

{ingredients.map((ing, i) => ( diff --git a/src/data/microsimSteps.ts b/src/data/microsimSteps.ts index 8aff046..d064634 100644 --- a/src/data/microsimSteps.ts +++ b/src/data/microsimSteps.ts @@ -53,12 +53,15 @@ function reformTax(earnings: number, children: number, creditPerChild: number): return Math.max(0, base - credit); } -function behavioralEarnings(earnings: number, children: number, creditPerChild: number): number { - const mtrBefore = earnings <= 40000 ? 0.1 : earnings <= 85000 ? 0.22 : 0.32; - const creditRate = children > 0 ? (children * creditPerChild) / earnings : 0; - const elasticity = 0.25; - const mtrAfter = Math.max(0, mtrBefore - creditRate); - const pctChange = -elasticity * (mtrAfter - mtrBefore) / (1 - mtrBefore); +// A fixed credit per child leaves each family's marginal tax rate where it was, +// so it has no substitution effect. It raises net income, so the example +// applies an income elasticity to the credit's share of net income. +const INCOME_ELASTICITY = -0.05; + +export function behavioralEarnings(earnings: number, children: number, creditPerChild: number): number { + const tax = baselineTax(earnings); + const credit = Math.min(children * creditPerChild, tax); // the credit cannot take tax below zero + const pctChange = (INCOME_ELASTICITY * credit) / (earnings - tax); return Math.round(earnings * (1 + pctChange)); } @@ -148,13 +151,17 @@ export function getMicrosimSteps(country: Country): MicrosimStep[] { { id: 0, title: 'Start with households', - description: 'A representative sample of households, each with their own characteristics.', + description: country === 'uk' + ? 'Five hypothetical households, each with its own earnings, children and weight.' + : 'A representative sample of households, each with their own characteristics.', ingredient: 'households', }, { id: 1, title: 'Calculate baseline taxes', - description: 'Apply current tax rules to each household to compute their tax liability.', + description: country === 'uk' + ? 'Apply a simplified tax schedule to each household to compute its tax.' + : 'Apply current tax rules to each household to compute their tax liability.', ingredient: 'policies', }, { @@ -167,15 +174,15 @@ export function getMicrosimSteps(country: Country): MicrosimStep[] { id: 3, title: country === 'uk' ? 'Model behavioural responses' : 'Model behavioral responses', description: country === 'uk' - ? 'People change their behaviour in response to tax changes. Using labour supply elasticities, we estimate how earnings shift.' - : 'People change their behavior in response to tax changes. Using elasticity of taxable income, we estimate how earnings shift.', + ? 'People change their behaviour in response to tax changes. The credit raises families’ income; using an income elasticity, we estimate how much less they earn.' + : 'People change their behavior in response to tax changes. The credit raises families’ income; using an income elasticity, we estimate how much less they earn.', ingredient: 'dynamics', }, { id: 4, title: 'Weight and aggregate', description: country === 'uk' - ? 'Each household represents many real households. Multiply by survey weights and sum for population-level estimates.' + ? 'Each household stands for many real ones. Multiply by its weight and sum for a population total.' : 'Each household represents many real households. Multiply by survey weights and sum for population-level estimates.', ingredient: null, }, diff --git a/src/data/sectionOverviews.ts b/src/data/sectionOverviews.ts index 5c8fa75..c5d098f 100644 --- a/src/data/sectionOverviews.ts +++ b/src/data/sectionOverviews.ts @@ -38,13 +38,13 @@ export const rulesSection: Record = { { label: 'Coverage tracker', description: - 'Which UK-wide and devolved taxes and benefits PolicyEngine UK models, by department, with the status of each.', + 'The programmes PolicyEngine UK’s coverage registry lists, grouped by department, with the status the registry records for each.', path: '/rules/coverage', }, { label: 'Parameters', description: - 'Browse every legislative parameter that drives the model: rates, thresholds, allowances, and eligibility cut-offs.', + 'Browse the legislative parameters in PolicyEngine UK’s metadata: rates, thresholds, allowances, and eligibility cut-offs.', path: '/rules/parameters', }, { @@ -85,7 +85,7 @@ export const dataSection: Record = { }, uk: { description: - 'How PolicyEngine builds the UK household data behind its simulations: from Family Resources Survey households to a calibrated file whose weighted totals match official statistics.', + 'How PolicyEngine builds the UK household data behind its simulations: from Family Resources Survey households to a file whose weights are calibrated towards official statistics.', children: [ { label: 'Pipeline', @@ -96,13 +96,13 @@ export const dataSection: Record = { { label: 'Calibration targets', description: - 'The OBR, DWP, HMRC, ONS, and other official statistics the household weights are fitted to, nationally and for each constituency and local authority.', + 'The statistics the household weights are fitted towards, mostly from the OBR, DWP, HMRC and ONS, with separate weight sets for constituencies and local authorities.', path: '/data/calibration', }, { label: 'Validation', description: - 'How closely the calibrated data matches its targets, and how it does on statistics held out of calibration.', + 'How closely the data matches its calibration targets when policyengine.py’s pinned model runs it, and how it does on the statistics the build holds out.', path: '/data/validation', }, ], From c869776cd24ea88228ab82cdd8124682a766d2e5 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:41:54 -0400 Subject: [PATCH 19/30] Keep registry and source tree refreshes consistent Clear all stale snapshots before resolving the source and record parameter tree provenance alongside variable tree provenance. Co-Authored-By: Claude Opus 5.5 --- scripts/fetch-metadata.js | 21 +++++++------- src/test/fetchMetadataScript.test.ts | 41 +++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/scripts/fetch-metadata.js b/scripts/fetch-metadata.js index 3a7e8e1..2849bd0 100644 --- a/scripts/fetch-metadata.js +++ b/scripts/fetch-metadata.js @@ -1,5 +1,5 @@ /** - * Snapshot the default-branch program registries and parameter YAML file trees. + * Snapshot the default-branch program registries and source file trees. * Run: node scripts/fetch-metadata.js (also called by `bun run build`). * Fetch failures are warnings: the app can fall back to API metadata. */ @@ -161,10 +161,14 @@ export async function fetchMetadataFiles({ for (const country of countries) { const snapshotPath = join(outputDir, `programs-${country}.json`); + const parameterTreePath = join(outputDir, `param-tree-${country}.json`); + const variableTreePath = join(outputDir, `variable-tree-${country}.json`); let source; try { - // A failed refresh must not leave a snapshot from an earlier build behind. - rmSync(snapshotPath, { force: true }); + // Clear all three before resolving HEAD, including when resolution fails. + for (const path of [snapshotPath, parameterTreePath, variableTreePath]) { + rmSync(path, { force: true }); + } source = await resolveRepository(country, fetchImpl); } catch (error) { logger.warn(` ${country}: could not resolve registry source — ${error.message}`); @@ -184,20 +188,17 @@ export async function fetchMetadataFiles({ (async () => { try { const paths = await fetchParameterYamlPaths(country, source, fetchImpl); - const treePath = join(outputDir, `param-tree-${country}.json`); - writeFileSync(treePath, JSON.stringify(paths)); - logger.log(` ${country}: wrote ${treePath} (${paths.length} files)`); + writeFileSync(parameterTreePath, JSON.stringify({ source, paths })); + logger.log(` ${country}: wrote ${parameterTreePath} (${paths.length} files)`); } catch (error) { logger.warn(` ${country}: parameter tree skipped — ${error.message}`); } })(), (async () => { - const treePath = join(outputDir, `variable-tree-${country}.json`); try { - rmSync(treePath, { force: true }); const paths = await fetchVariableModulePaths(country, source, fetchImpl); - writeFileSync(treePath, JSON.stringify({ source, paths })); - logger.log(` ${country}: wrote ${treePath} (${paths.length} files)`); + writeFileSync(variableTreePath, JSON.stringify({ source, paths })); + logger.log(` ${country}: wrote ${variableTreePath} (${paths.length} files)`); } catch (error) { logger.warn(` ${country}: variable tree skipped — ${error.message}`); } diff --git a/src/test/fetchMetadataScript.test.ts b/src/test/fetchMetadataScript.test.ts index 7bac6f2..e2534fe 100644 --- a/src/test/fetchMetadataScript.test.ts +++ b/src/test/fetchMetadataScript.test.ts @@ -159,6 +159,10 @@ describe('registry snapshot fetch script', () => { it('writes the snapshot even when fetching the independent parameter tree fails', async () => { const outputDir = outputDirectory(); + const parameterTreePath = join(outputDir, 'param-tree-us.json'); + const variableTreePath = join(outputDir, 'variable-tree-us.json'); + writeFileSync(parameterTreePath, '["stale/parameter.yaml"]'); + writeFileSync(variableTreePath, '{"source":{"commit":"old"},"paths":["stale.py"]}'); const rawRoot = `https://raw.githubusercontent.com/${source.repo}/${commit}`; const fetchImpl = mockFetch({ 'https://api.github.com/repos/PolicyEngine/policyengine-us': { default_branch: 'main' }, @@ -173,21 +177,50 @@ describe('registry snapshot fetch script', () => { source, version: '1.823.4', apiVersion: '1.764.6', }); expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining('Tree unavailable')); + expect(existsSync(parameterTreePath)).toBe(false); + expect(existsSync(variableTreePath)).toBe(false); }); - it('removes an old snapshot and skips a country when its default branch cannot be fetched', async () => { + it('removes all old snapshots when the default branch cannot be fetched', async () => { const outputDir = outputDirectory(); - const snapshotPath = join(outputDir, 'programs-us.json'); - writeFileSync(snapshotPath, '{"stale":true}'); + const snapshotPaths = ['programs-us.json', 'param-tree-us.json', 'variable-tree-us.json'] + .map(name => join(outputDir, name)); + for (const path of snapshotPaths) writeFileSync(path, '{"stale":true}'); const fetchImpl = mockFetch({ 'https://api.github.com/repos/PolicyEngine/policyengine-us': new Error('Network unavailable'), }); await expect(fetchMetadataFiles({ countries: ['us'], outputDir, fetchImpl, logger })) .resolves.toBeUndefined(); - expect(existsSync(snapshotPath)).toBe(false); + for (const path of snapshotPaths) expect(existsSync(path)).toBe(false); expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining('Network unavailable')); }); + it('records the same source commit in the registry and both source trees', async () => { + const outputDir = outputDirectory(); + const rawRoot = `https://raw.githubusercontent.com/${source.repo}/${commit}`; + const treeRoot = `https://api.github.com/repos/${source.repo}/git/trees`; + const fetchImpl = mockFetch({ + 'https://api.github.com/repos/PolicyEngine/policyengine-us': { default_branch: 'main' }, + 'https://api.github.com/repos/PolicyEngine/policyengine-us/commits/main': { sha: commit }, + [`${rawRoot}/policyengine_us/programs.yaml`]: registry, + [`${rawRoot}/pyproject.toml`]: '[project]\nversion = "1.823.4"', + 'https://api.policyengine.org/us/metadata': { version: '1.764.6' }, + [`${treeRoot}/${commit}`]: { tree: [{ path: 'policyengine_us', sha: 'package-tree' }] }, + [`${treeRoot}/package-tree`]: { tree: [ + { path: 'parameters', sha: 'parameter-tree' }, + { path: 'variables', sha: 'variable-tree' }, + ] }, + [`${treeRoot}/parameter-tree?recursive=1`]: { tree: [{ type: 'blob', path: 'gov/hhs/tanf.yaml' }] }, + [`${treeRoot}/variable-tree?recursive=1`]: { tree: [{ type: 'blob', path: 'gov/hhs/tanf.py' }] }, + }); + await fetchMetadataFiles({ countries: ['us'], outputDir, fetchImpl, logger }); + for (const name of ['programs-us.json', 'param-tree-us.json', 'variable-tree-us.json']) { + expect(JSON.parse(readFileSync(join(outputDir, name), 'utf8')).source).toMatchObject(source); + } + expect(JSON.parse(readFileSync(join(outputDir, 'param-tree-us.json'), 'utf8'))) + .toEqual({ source, paths: ['gov/hhs/tanf.yaml'] }); + }); + it('skips a missing UK registry gracefully, removing any previous snapshot', async () => { const outputDir = outputDirectory(); const snapshotPath = join(outputDir, 'programs-uk.json'); From 313ed8e08213789dee22bb2cde9783f04f71cb72 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:45:54 -0400 Subject: [PATCH 20/30] Restore UK variable departments and clarify explorer groups Build exact class-to-module maps from commit archives, including multiline declarations. Keep an offline file-tree fallback and show unknown modules as unclassified. Clarify UK government totals, household results, reform assumptions and dynamic settings while preserving US output. Co-Authored-By: Claude Opus 5.5 --- scripts/fetch-metadata.js | 25 ++++- scripts/variable-modules.js | 83 ++++++++++++++++ src/components/shared/categoryUtils.ts | 33 +++++-- src/components/variables/VariableExplorer.tsx | 6 +- src/data/fetchMetadata.ts | 16 ++- src/test/fetchMetadata.test.ts | 81 +++++++++++++++ src/test/fetchMetadataScript.test.ts | 28 ++++++ src/test/fetchVariableModules.test.ts | 98 +++++++++++++++++++ src/test/fixtures/variableArchive.ts | 24 +++++ src/test/ukTaxonomy.test.ts | 42 +++++++- src/test/variableGrouping.test.tsx | 43 ++++++++ 11 files changed, 459 insertions(+), 20 deletions(-) create mode 100644 scripts/variable-modules.js create mode 100644 src/test/fetchMetadata.test.ts create mode 100644 src/test/fetchVariableModules.test.ts create mode 100644 src/test/fixtures/variableArchive.ts create mode 100644 src/test/variableGrouping.test.tsx diff --git a/scripts/fetch-metadata.js b/scripts/fetch-metadata.js index 2849bd0..6a112d1 100644 --- a/scripts/fetch-metadata.js +++ b/scripts/fetch-metadata.js @@ -7,7 +7,9 @@ import { mkdirSync, rmSync, writeFileSync } from 'node:fs'; import { dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { gunzipSync } from 'node:zlib'; import yaml from 'js-yaml'; +import { extractVariableModules } from './variable-modules.js'; const PUBLIC_DIR = join(dirname(fileURLToPath(import.meta.url)), '..', 'public'); const REPO_MAP = { @@ -145,6 +147,23 @@ export async function fetchVariableModulePaths(country, source, fetchImpl = glob return paths.filter(path => path.endsWith('.py') && !path.endsWith('__init__.py')); } +/** Map UK Variable classes from the very same commit as the file tree. */ +export async function fetchVariableTreeSnapshot(country, source, { + fetchImpl = globalThis.fetch, + logger = console, +} = {}) { + if (country === 'uk') { + try { + const response = await request(`https://codeload.github.com/${source.repo}/tar.gz/${source.commit}`, fetchImpl); + const tar = gunzipSync(Buffer.from(await response.arrayBuffer())); + return { source, ...extractVariableModules(country, tar) }; + } catch (error) { + logger.warn(` ${country}: class-to-module map unavailable, using file tree — ${error.message}`); + } + } + return { source, paths: await fetchVariableModulePaths(country, source, fetchImpl) }; +} + export async function fetchMetadataFiles({ countries = ['us', 'uk'], outputDir = PUBLIC_DIR, @@ -196,9 +215,9 @@ export async function fetchMetadataFiles({ })(), (async () => { try { - const paths = await fetchVariableModulePaths(country, source, fetchImpl); - writeFileSync(variableTreePath, JSON.stringify({ source, paths })); - logger.log(` ${country}: wrote ${variableTreePath} (${paths.length} files)`); + const tree = await fetchVariableTreeSnapshot(country, source, { fetchImpl, logger }); + writeFileSync(variableTreePath, JSON.stringify(tree)); + logger.log(` ${country}: wrote ${variableTreePath} (${tree.paths.length} files)`); } catch (error) { logger.warn(` ${country}: variable tree skipped — ${error.message}`); } diff --git a/scripts/variable-modules.js b/scripts/variable-modules.js new file mode 100644 index 0000000..e3e2f41 --- /dev/null +++ b/scripts/variable-modules.js @@ -0,0 +1,83 @@ +/** Read variable declarations from a GitHub commit archive without extracting it. */ + +function readString(buffer, start, length) { + return buffer.subarray(start, start + length).toString('utf8').split('\0')[0]; +} + +/** PAX records prefix each key=value line with its total byte length. */ +function paxPath(contents) { + let path; + for (let offset = 0; offset < contents.length;) { + const separator = contents.indexOf(0x20, offset); + const length = Number(contents.subarray(offset, separator).toString('ascii')); + if (separator < offset || !Number.isSafeInteger(length) || length <= separator - offset + 1 || offset + length > contents.length) { + throw new Error('Invalid PAX archive record'); + } + const record = contents.subarray(separator + 1, offset + length - 1).toString('utf8'); + if (record.startsWith('path=')) path = record.slice(5); + offset += length; + } + return path; +} + +function* tarFiles(tar) { + let nextPath; + for (let offset = 0; offset < tar.length;) { + if (offset + 512 > tar.length) throw new Error('Truncated archive header'); + const header = tar.subarray(offset, offset + 512); + if (header.every(byte => byte === 0)) return; + const sizeField = readString(header, 124, 12).trim(); + if (!/^[0-7]+$/.test(sizeField)) throw new Error('Invalid archive file size'); + const size = parseInt(sizeField, 8); + const start = offset + 512; + const end = start + size; + const paddedEnd = start + Math.ceil(size / 512) * 512; + if (!Number.isSafeInteger(end) || paddedEnd > tar.length) throw new Error('Truncated archive file'); + const contents = tar.subarray(start, end); + const type = readString(header, 156, 1); + const prefix = readString(header, 345, 155); + const name = readString(header, 0, 100); + offset = paddedEnd; + + if (type === 'x') { + nextPath = paxPath(contents) ?? nextPath; + continue; + } + if (type === 'L') { + nextPath = readString(contents, 0, contents.length).replace(/\n$/, ''); + continue; + } + if (type === 'g') continue; + const path = nextPath ?? (prefix ? `${prefix}/${name}` : name); + nextPath = undefined; + if (type === '0' || type === '') yield { path, contents }; + } +} + +/** + * Exact, case-sensitive class names, including several classes in one file and + * declarations whose Variable base is split over lines. Ambiguous names are omitted. + */ +export function extractVariableModules(country, tar) { + const packagePrefix = `policyengine_${country}/variables/`; + const paths = []; + const modules = new Map(); + for (const file of tarFiles(tar)) { + // GitHub archives place the repository contents under one top-level directory. + const packagePath = file.path.slice(file.path.indexOf('/') + 1); + if (!packagePath.startsWith(packagePrefix)) continue; + const path = packagePath.slice(packagePrefix.length); + if (!path.endsWith('.py') || path.endsWith('__init__.py')) continue; + paths.push(path); + const moduleName = path.replace(/\.py$/, '').replace(/\//g, '.'); + for (const match of file.contents.toString('utf8').matchAll(/^class\s+(\w+)\s*\(\s*Variable\s*\)\s*:/gm)) { + const name = match[1]; + modules.set(name, modules.has(name) && modules.get(name) !== moduleName ? null : moduleName); + } + } + if (!paths.length || !modules.size) throw new Error('Archive contains no variable declarations'); + return { + paths: paths.sort(), + modules: Object.fromEntries([...modules].filter(([, moduleName]) => moduleName !== null).sort(([a], [b]) => a.localeCompare(b))), + }; +} diff --git a/src/components/shared/categoryUtils.ts b/src/components/shared/categoryUtils.ts index 122d3a5..6c9b6ff 100644 --- a/src/components/shared/categoryUtils.ts +++ b/src/components/shared/categoryUtils.ts @@ -1,8 +1,10 @@ +import { colors } from '../../designTokens'; + export type Level = // US | 'federal' | 'state' | 'local' | 'territory' // UK - | 'uk_government' | 'devolved' | 'local_authority' | 'assumptions' + | 'uk_government' | 'devolved' | 'local_authority' | 'assumptions' | 'unclassified' // Both | 'reform' | 'household'; @@ -11,12 +13,14 @@ export type TaxonomyCountry = 'us' | 'uk' | string; // UK parameter and variable roots under gov.*, grouped by who sets them. const UK_DEVOLVED = new Set(['revenue_scotland', 'social_security_scotland', 'scottish_government', 'wra']); const UK_ASSUMPTIONS = new Set(['economic_assumptions', 'simulation', 'dynamic', 'indices', 'benefit_uprating_cpi']); +const UK_GOVERNMENT_TOTALS = new Set(['gov_tax', 'gov_spending', 'gov_balance']); function getUkLevel(path: string | null): Level { - if (!path) return 'household'; + if (!path) return 'unclassified'; const parts = path.split('.'); if (parts[0] === 'contrib' || (parts[0] === 'gov' && parts[1] === 'contrib')) return 'reform'; - if (parts[0] !== 'gov') return 'household'; + if (parts[0] === 'household' || parts[0] === 'input') return 'household'; + if (parts[0] !== 'gov') return 'unclassified'; if (!parts[1]) return 'assumptions'; if (parts[1] === 'local_authorities') return 'local_authority'; if (UK_DEVOLVED.has(parts[1])) return 'devolved'; @@ -28,6 +32,8 @@ function getUkSubGroup(path: string | null): string { if (!path) return 'Other'; const parts = path.split('.'); const level = getUkLevel(path); + if (parts[0] === 'gov' && UK_GOVERNMENT_TOTALS.has(parts[1])) return 'all_government_totals'; + if (level === 'unclassified') return 'Other'; if (level === 'reform') return parts[0] === 'gov' ? (parts[2] ?? 'Other') : (parts[1] ?? 'Other'); if (level === 'household') { // household.income.* -> income; input.vehicle.* -> vehicle; input.rent -> input @@ -106,7 +112,8 @@ const UK_SUBGROUP_LABELS: Record = { wra: 'Welsh Revenue Authority', economic_assumptions: 'Economic assumptions', simulation: 'Simulation settings', - dynamic: 'Dynamic responses', + dynamic: 'Dynamic response settings', + all_government_totals: 'Totals across all levels of government', indices: 'Indices', benefit_uprating_cpi: 'Benefit uprating', domestic_rates: 'Northern Ireland domestic rates', @@ -127,6 +134,7 @@ const UK_SUBGROUP_LABELS: Record = { // Each description lists programmes that policyengine-uk's programs.yaml // assigns to that department, or the folder's contents. const UK_SUBGROUP_DESCRIPTIONS: Record = { + all_government_totals: 'Tax, spending, and balance totals across UK, devolved, and local government', hmrc: 'Income tax, National Insurance, VAT, capital gains tax, duties, Child Benefit, and Tax-Free Childcare', dwp: 'Universal Credit, State Pension, Pension Credit, disability benefits, and legacy benefits', dfe: 'Free childcare entitlements and student support', @@ -254,6 +262,7 @@ export const LEVEL_CONFIG: Record = { devolved: { label: 'Devolved', description: 'Revenue Scotland, Social Security Scotland, the Scottish Government, and the Welsh Revenue Authority', color: '#2C7A7B', order: 1 }, local_authority: { label: 'Local authorities', description: 'Council Tax Reduction schemes and Northern Ireland domestic rates', color: '#2C7A7B', order: 2 }, assumptions: { label: 'Assumptions and settings', description: 'Economic forecasts, uprating indices, and simulation settings', color: '#475569', order: 4 }, + unclassified: { label: 'Unclassified variables', description: 'Variables whose source module is unknown or outside the recognised groups', color: colors.secondary[600], order: 6 }, reform: { label: 'Reforms', description: 'Contributed reform proposals and policy experiments', color: '#2C7A7B', order: 4 }, household: { label: 'Household inputs', description: 'Demographics, income, expenses, and geographic inputs', color: '#475569', order: 5 }, }; @@ -261,17 +270,27 @@ export const LEVEL_CONFIG: Record = { /** US level order; kept for callers that predate the country-aware taxonomy. */ export const LEVELS_ORDERED: Level[] = ['federal', 'state', 'local', 'territory', 'reform', 'household']; -const UK_LEVELS: Level[] = ['uk_government', 'devolved', 'local_authority', 'reform', 'assumptions', 'household']; +const UK_LEVELS: Level[] = ['uk_government', 'devolved', 'local_authority', 'reform', 'assumptions', 'household', 'unclassified']; /** The levels a country's explorer shows, in display order. */ export function levelsFor(country: TaxonomyCountry = 'us'): Level[] { return country === 'uk' ? UK_LEVELS : LEVELS_ORDERED; } -/** Display config for a level; UK household inputs are described in UK terms. */ +/** Display config for a level, including country-specific descriptions. */ export function levelConfig(level: Level, country: TaxonomyCountry = 'us'): LevelInfo { if (country === 'uk' && level === 'household') { - return { ...LEVEL_CONFIG.household, description: 'Demographics, income, consumption, wealth, and other survey inputs' }; + return { + ...LEVEL_CONFIG.household, + label: 'Household variables', + description: 'Demographic, income, consumption, and wealth inputs, and calculated household results such as household net income', + }; + } + if (country === 'uk' && level === 'reform') { + return { + ...LEVEL_CONFIG.reform, + description: 'Contributed reform proposals and modelling assumptions, some enabled by default', + }; } return LEVEL_CONFIG[level]; } diff --git a/src/components/variables/VariableExplorer.tsx b/src/components/variables/VariableExplorer.tsx index 7920168..1703c02 100644 --- a/src/components/variables/VariableExplorer.tsx +++ b/src/components/variables/VariableExplorer.tsx @@ -408,9 +408,11 @@ export default function VariableExplorer({ variables, parameters, country, onVie // Folder contents at current level const folderContents = useMemo(() => { - if (!activeSubGroup || !currentFolder) return { folders: [], directVars: [] }; + if (!activeSubGroup) return { folders: [], directVars: [] }; + if (country === 'uk' && activeLevel === 'unclassified') return { folders: [], directVars: subGroupVars }; + if (!currentFolder) return { folders: [], directVars: [] }; return getVarFolderContents(subGroupVars, currentFolder); - }, [subGroupVars, currentFolder, activeSubGroup]); + }, [subGroupVars, currentFolder, activeSubGroup, activeLevel, country]); // Reset folder stack when sub-group changes // eslint-disable-next-line react-hooks/set-state-in-effect -- reset navigation when sub-group changes diff --git a/src/data/fetchMetadata.ts b/src/data/fetchMetadata.ts index baf4303..4daccc7 100644 --- a/src/data/fetchMetadata.ts +++ b/src/data/fetchMetadata.ts @@ -36,14 +36,15 @@ export async function fetchMetadata(country: string = 'us'): Promise { } /** - * Give each variable without a `moduleName` the module of the one source file - * named after it, e.g. `income_tax` -> `gov.hmrc.income_tax.income_tax`. - * Names that match no file, or several, stay without a module. + * Fill missing modules from exact Variable class declarations. Older snapshots + * can fall back to unique file stems; unmatched names stay unclassified. */ export function fillModuleNames( variables: Record, paths: string[], + modules?: Record, ): Record { + const pathSet = new Set(paths); const byStem = new Map(); for (const path of paths) { const stem = path.split('/').pop()!.replace(/\.py$/, ''); @@ -52,6 +53,11 @@ export function fillModuleNames( return Object.fromEntries( Object.entries(variables).map(([name, v]) => { if (v.moduleName) return [name, v]; + if (modules) { + const moduleName = Object.hasOwn(modules, name) ? modules[name] : undefined; + if (typeof moduleName !== 'string' || !pathSet.has(`${moduleName.replace(/\./g, '/')}.py`)) return [name, v]; + return [name, { ...v, moduleName }]; + } const path = byStem.get(name); if (!path) return [name, v]; return [name, { ...v, moduleName: path.replace(/\.py$/, '').replace(/\//g, '.') }]; @@ -72,7 +78,9 @@ async function withModuleNames( const res = await fetch(`${prefix}/variable-tree-${country}.json`); if (!res.ok) return variables; const tree = await res.json(); - return Array.isArray(tree?.paths) ? fillModuleNames(variables, tree.paths) : variables; + const modules = tree?.modules && typeof tree.modules === 'object' && !Array.isArray(tree.modules) + ? tree.modules : undefined; + return Array.isArray(tree?.paths) ? fillModuleNames(variables, tree.paths, modules) : variables; } catch { return variables; } diff --git a/src/test/fetchMetadata.test.ts b/src/test/fetchMetadata.test.ts new file mode 100644 index 0000000..d7669fe --- /dev/null +++ b/src/test/fetchMetadata.test.ts @@ -0,0 +1,81 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { fillModuleNames } from '../data/fetchMetadata'; +import type { Variable } from '../types/Variable'; + +const variable = (name: string, moduleName: string | null = null): Variable => ({ name, moduleName } as Variable); +const modules = { + CB_HITC: 'gov.hmrc.income_tax.charges.child_benefit_hitc', + has_student_loan: 'gov.hmrc.student_loans.student_loan_repayment', + armed_forces_independence_payment: 'gov.dwp.afip', +}; +const paths = Object.values(modules).map(moduleName => `${moduleName.replace(/\./g, '/')}.py`); + +afterEach(() => { + vi.unstubAllGlobals(); + vi.resetModules(); +}); + +describe('variable module enrichment', () => { + it('uses exact classes rather than file stems for UK departments', () => { + const variables = Object.fromEntries(Object.keys(modules).map(name => [name, variable(name)])); + const filled = fillModuleNames(variables, paths, modules); + for (const [name, moduleName] of Object.entries(modules)) expect(filled[name].moduleName).toBe(moduleName); + expect(variables.CB_HITC.moduleName).toBeNull(); + }); + + it('trusts the class map over a stem match and leaves unknown names unclassified', () => { + const filled = fillModuleNames({ + afip: variable('afip'), + cb_hitc: variable('cb_hitc'), + unknown: variable('unknown'), + }, paths, modules); + for (const v of Object.values(filled)) expect(v.moduleName).toBeNull(); + }); + + it('preserves existing API modules and refuses modules absent from the source tree', () => { + const original = variable('CB_HITC', 'gov.irs.api_module'); + expect(fillModuleNames({ CB_HITC: original }, paths, modules).CB_HITC).toBe(original); + expect(fillModuleNames({ CB_HITC: variable('CB_HITC') }, [], modules).CB_HITC.moduleName).toBeNull(); + expect(fillModuleNames({ constructor: variable('constructor') }, paths, {})) + .toMatchObject({ constructor: { moduleName: null } }); + }); + + it('loads the generated class map through fetchMetadata', async () => { + const variables = Object.fromEntries(Object.keys(modules).map(name => [name, variable(name)])); + const fetchImpl = vi.fn(async input => { + if (String(input) === 'https://api.policyengine.org/uk/metadata') { + return new Response(JSON.stringify({ result: { variables, parameters: {} } })); + } + if (String(input) === '/variable-tree-uk.json') { + return new Response(JSON.stringify({ source: { commit: 'a'.repeat(40) }, paths, modules })); + } + throw new Error(`Unexpected request: ${input}`); + }); + vi.stubGlobal('fetch', fetchImpl); + const { fetchMetadata } = await import('../data/fetchMetadata'); + const metadata = await fetchMetadata('uk'); + expect(metadata.variables.CB_HITC.moduleName).toBe(modules.CB_HITC); + expect(metadata.variables.has_student_loan.moduleName).toBe(modules.has_student_loan); + expect(metadata.variables.armed_forces_independence_payment.moduleName).toBe(modules.armed_forces_independence_payment); + }); + + it('keeps the metadata usable if the generated snapshot is unavailable', async () => { + vi.stubGlobal('fetch', vi.fn(async input => { + if (String(input) === 'https://api.policyengine.org/uk/metadata') { + return new Response(JSON.stringify({ variables: { CB_HITC: variable('CB_HITC') }, parameters: {} })); + } + throw new Error('Snapshot offline'); + })); + const { fetchMetadata } = await import('../data/fetchMetadata'); + await expect(fetchMetadata('uk')).resolves.toEqual({ variables: { CB_HITC: variable('CB_HITC') }, parameters: {} }); + }); + + it('keeps US metadata unchanged and does not request a module snapshot', async () => { + const variables = { income_tax: variable('income_tax', 'gov.irs.income_tax') }; + const fetchImpl = vi.fn().mockResolvedValue(new Response(JSON.stringify({ variables, parameters: {} }))); + vi.stubGlobal('fetch', fetchImpl); + const { fetchMetadata } = await import('../data/fetchMetadata'); + await expect(fetchMetadata('us')).resolves.toEqual({ variables, parameters: {} }); + expect(fetchImpl).toHaveBeenCalledExactlyOnceWith('https://api.policyengine.org/us/metadata'); + }); +}); diff --git a/src/test/fetchMetadataScript.test.ts b/src/test/fetchMetadataScript.test.ts index e2534fe..b0a8c33 100644 --- a/src/test/fetchMetadataScript.test.ts +++ b/src/test/fetchMetadataScript.test.ts @@ -1,6 +1,7 @@ import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; +import { gzipSync } from 'node:zlib'; import { afterEach, describe, expect, it, vi } from 'vitest'; import { fetchMetadataFiles, @@ -11,6 +12,7 @@ import { readPackageVersion, resolveRepository, } from '../../scripts/fetch-metadata.js'; +import { variableArchive } from './fixtures/variableArchive'; const commit = 'a'.repeat(40); const source = { repo: 'PolicyEngine/policyengine-us', branch: 'main', commit }; @@ -221,6 +223,32 @@ describe('registry snapshot fetch script', () => { .toEqual({ source, paths: ['gov/hhs/tanf.yaml'] }); }); + it('writes the exact UK class map into the variable tree JSON at the registry commit', async () => { + const outputDir = outputDirectory(); + const ukSource = { ...source, repo: 'PolicyEngine/policyengine-uk' }; + const rawRoot = `https://raw.githubusercontent.com/${ukSource.repo}/${commit}`; + const tar = variableArchive([{ + path: 'repo/policyengine_uk/variables/gov/dwp/afip.py', + contents: 'class armed_forces_independence_payment(Variable):\n pass\n', + }]); + const fetchImpl = mockFetch({ + 'https://api.github.com/repos/PolicyEngine/policyengine-uk': { default_branch: 'main' }, + 'https://api.github.com/repos/PolicyEngine/policyengine-uk/commits/main': { sha: commit }, + [`${rawRoot}/policyengine_uk/programs.yaml`]: registry, + [`${rawRoot}/pyproject.toml`]: '[project]\nversion = "2.126.12"', + 'https://api.policyengine.org/uk/metadata': { version: '2.126.12' }, + [`https://api.github.com/repos/${ukSource.repo}/git/trees/${commit}`]: new Error('Parameter tree unavailable'), + [`https://codeload.github.com/${ukSource.repo}/tar.gz/${commit}`]: new Response(gzipSync(tar)), + }); + await fetchMetadataFiles({ countries: ['uk'], outputDir, fetchImpl, logger }); + expect(JSON.parse(readFileSync(join(outputDir, 'variable-tree-uk.json'), 'utf8'))).toEqual({ + source: ukSource, + paths: ['gov/dwp/afip.py'], + modules: { armed_forces_independence_payment: 'gov.dwp.afip' }, + }); + expect(JSON.parse(readFileSync(join(outputDir, 'programs-uk.json'), 'utf8')).source).toMatchObject(ukSource); + }); + it('skips a missing UK registry gracefully, removing any previous snapshot', async () => { const outputDir = outputDirectory(); const snapshotPath = join(outputDir, 'programs-uk.json'); diff --git a/src/test/fetchVariableModules.test.ts b/src/test/fetchVariableModules.test.ts new file mode 100644 index 0000000..4669b56 --- /dev/null +++ b/src/test/fetchVariableModules.test.ts @@ -0,0 +1,98 @@ +import { gzipSync } from 'node:zlib'; +import { describe, expect, it, vi } from 'vitest'; +import { extractVariableModules } from '../../scripts/variable-modules.js'; +import { fetchVariableTreeSnapshot } from '../../scripts/fetch-metadata.js'; +import { variableArchive } from './fixtures/variableArchive'; + +const source = { repo: 'PolicyEngine/policyengine-uk', branch: 'main', commit: 'a'.repeat(40) }; +const archivePrefix = 'policyengine-uk-commit/policyengine_uk/variables/'; +const files = [ + { path: `${archivePrefix}gov/hmrc/income_tax/charges/child_benefit_hitc.py`, contents: 'class CB_HITC(Variable):\n pass\n' }, + { path: `${archivePrefix}gov/hmrc/student_loans/student_loan_repayment.py`, contents: 'class student_loan_repayment(Variable):\n pass\n\nclass has_student_loan(Variable):\n pass\n\nclass student_loan_interest_rate(Variable):\n pass\n' }, + { path: `${archivePrefix}gov/dwp/afip.py`, contents: 'class armed_forces_independence_payment(Variable):\n pass\n' }, + { path: `${archivePrefix}gov/dwp/jsa.py`, contents: 'class jsa(Variable):\n pass\n' }, + { path: `${archivePrefix}gov/dwp/multiline.py`, contents: 'class multiline_class(\n Variable\n):\n pass\n' }, + { path: `${archivePrefix}gov/dwp/__init__.py`, contents: '' }, + { path: 'policyengine-uk-commit/tests/example.py', contents: 'class not_a_model_variable(Variable):\n pass\n' }, +]; + +describe('UK class-to-module snapshot', () => { + it('maps exact class names, multiple classes per file, and multiline declarations', () => { + const tree = extractVariableModules('uk', variableArchive(files)); + expect(tree.modules).toEqual({ + CB_HITC: 'gov.hmrc.income_tax.charges.child_benefit_hitc', + student_loan_repayment: 'gov.hmrc.student_loans.student_loan_repayment', + has_student_loan: 'gov.hmrc.student_loans.student_loan_repayment', + student_loan_interest_rate: 'gov.hmrc.student_loans.student_loan_repayment', + armed_forces_independence_payment: 'gov.dwp.afip', + jsa: 'gov.dwp.jsa', + multiline_class: 'gov.dwp.multiline', + }); + expect(tree.paths).toHaveLength(5); + expect(tree.modules).not.toHaveProperty('JSA'); + expect(tree.modules).not.toHaveProperty('afip'); + expect(tree.modules).not.toHaveProperty('not_a_model_variable'); + for (const moduleName of Object.values(tree.modules) as string[]) { + expect(tree.paths).toContain(`${moduleName.replace(/\./g, '/')}.py`); + } + }); + + it('supports USTAR prefixes and PAX and GNU long file names', () => { + const longPath = `${archivePrefix}gov/dwp/${'long_directory_'.repeat(6)}/example.py`; + const record = `path=${longPath}\n`; + let length = Buffer.byteLength(record) + 3; + while (length !== Buffer.byteLength(record) + String(length).length + 1) { + length = Buffer.byteLength(record) + String(length).length + 1; + } + const tree = extractVariableModules('uk', variableArchive([ + { path: 'example.py', prefix: `${archivePrefix}gov/hmrc`, contents: 'class prefix_variable(Variable):\n pass\n' }, + { path: 'pax-header', type: 'x', contents: `${length} ${record}` }, + { path: 'placeholder.py', contents: 'class pax_variable(Variable):\n pass\n' }, + { path: '././@LongLink', type: 'L', contents: longPath.replace('example.py', 'gnu.py') + '\0' }, + { path: 'placeholder.py', contents: 'class gnu_variable(Variable):\n pass\n' }, + ])); + expect(tree.paths).toContain('gov/hmrc/example.py'); + expect(tree.paths).toContain(longPath.slice(archivePrefix.length)); + expect(tree.paths).toContain(longPath.slice(archivePrefix.length).replace('example.py', 'gnu.py')); + expect(tree.modules).toHaveProperty('prefix_variable', 'gov.hmrc.example'); + expect(tree.modules).toHaveProperty('pax_variable'); + expect(tree.modules).toHaveProperty('gnu_variable'); + }); + + it('omits ambiguous names and rejects incomplete or unrelated archives', () => { + const tree = extractVariableModules('uk', variableArchive([ + { path: `${archivePrefix}gov/a.py`, contents: 'class duplicate(Variable):\n pass\n' }, + { path: `${archivePrefix}gov/b.py`, contents: 'class duplicate(Variable):\n pass\n' }, + ])); + expect(tree.modules).toEqual({}); + expect(() => extractVariableModules('uk', Buffer.alloc(100))).toThrow('Truncated'); + expect(() => extractVariableModules('uk', variableArchive(files).subarray(0, 520))).toThrow('Truncated'); + expect(() => extractVariableModules('us', variableArchive(files))).toThrow('no variable declarations'); + }); + + it('fetches the commit archive and records the same source for classes and paths', async () => { + const fetchImpl = vi.fn().mockResolvedValue(new Response(gzipSync(variableArchive(files)))); + const tree = await fetchVariableTreeSnapshot('uk', source, { fetchImpl }); + expect(fetchImpl).toHaveBeenCalledExactlyOnceWith( + `https://codeload.github.com/${source.repo}/tar.gz/${source.commit}`, expect.anything(), + ); + expect(tree.source).toEqual(source); + expect(tree).toMatchObject({ modules: { CB_HITC: 'gov.hmrc.income_tax.charges.child_benefit_hitc' } }); + }); + + it('falls back to a commit-pinned file tree when the archive is unavailable', async () => { + const fetchImpl = vi.fn(async input => { + const url = String(input); + if (url.startsWith('https://codeload.github.com/')) throw new Error('Archive offline'); + if (url.endsWith(source.commit)) return new Response(JSON.stringify({ tree: [{ path: 'policyengine_uk', sha: 'package-tree' }] })); + if (url.endsWith('package-tree')) return new Response(JSON.stringify({ tree: [{ path: 'variables', sha: 'variable-tree' }] })); + if (url.endsWith('variable-tree?recursive=1')) return new Response(JSON.stringify({ tree: [{ type: 'blob', path: 'gov/dwp/afip.py' }] })); + throw new Error(`Unexpected request: ${url}`); + }); + const logger = { warn: vi.fn() }; + await expect(fetchVariableTreeSnapshot('uk', source, { fetchImpl, logger })).resolves.toEqual({ + source, paths: ['gov/dwp/afip.py'], + }); + expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining('Archive offline')); + }); +}); diff --git a/src/test/fixtures/variableArchive.ts b/src/test/fixtures/variableArchive.ts new file mode 100644 index 0000000..78fef02 --- /dev/null +++ b/src/test/fixtures/variableArchive.ts @@ -0,0 +1,24 @@ +import { Buffer } from 'node:buffer'; + +/** Minimal USTAR archive, also allowing extension records for long-name tests. */ +export function variableArchive(files: { path: string; contents: string; prefix?: string; type?: string }[]): Buffer { + const entries = files.flatMap(({ path, contents, prefix = '', type = '0' }) => { + if (!prefix && Buffer.byteLength(path) > 100) { + const separator = path.lastIndexOf('/'); + prefix = path.slice(0, separator); + path = path.slice(separator + 1); + } + const body = Buffer.from(contents); + const header = Buffer.alloc(512); + header.write(path, 0, 100); + header.write(body.length.toString(8).padStart(11, '0'), 124, 12); + header.fill(0x20, 148, 156); + header.write(type, 156, 1); + header.write('ustar\0', 257, 6); + header.write(prefix, 345, 155); + const checksum = header.reduce((sum, byte) => sum + byte, 0); + header.write(checksum.toString(8).padStart(6, '0') + '\0 ', 148, 8); + return [header, body, Buffer.alloc((512 - body.length % 512) % 512)]; + }); + return Buffer.concat([...entries, Buffer.alloc(1024)]); +} diff --git a/src/test/ukTaxonomy.test.ts b/src/test/ukTaxonomy.test.ts index a1fa3ce..ff29cb5 100644 --- a/src/test/ukTaxonomy.test.ts +++ b/src/test/ukTaxonomy.test.ts @@ -1,13 +1,14 @@ import { describe, expect, it } from 'vitest'; import fc from 'fast-check'; import { - getLevel, getSubGroup, getSubGroupLabel, levelsFor, levelConfig, LEVEL_CONFIG, type Level, + getLevel, getSubGroup, getSubGroupLabel, getSubGroupDescription, levelsFor, levelConfig, LEVEL_CONFIG, type Level, } from '../components/shared/categoryUtils'; import { fillModuleNames } from '../data/fetchMetadata'; +import { verifiedLinks } from '../components/rules/UkCoverageTracker'; import type { Variable } from '../types/Variable'; const US_ONLY: Level[] = ['federal', 'state', 'local', 'territory']; -const UK_ONLY: Level[] = ['uk_government', 'devolved', 'local_authority', 'assumptions']; +const UK_ONLY: Level[] = ['uk_government', 'devolved', 'local_authority', 'assumptions', 'unclassified']; describe('UK parameter and variable taxonomy', () => { it.each([ @@ -19,6 +20,10 @@ describe('UK parameter and variable taxonomy', () => { ['gov.local_authorities.newham.council_tax_reduction.max', 'local_authority', 'newham', 'Newham'], ['gov.economic_assumptions.yoy_growth.obr.cpi', 'assumptions', 'economic_assumptions', 'Economic assumptions'], ['gov.simulation.labour_supply_responses.income_elasticity', 'assumptions', 'simulation', 'Simulation settings'], + ['gov.dynamic.labour_supply_response', 'assumptions', 'dynamic', 'Dynamic response settings'], + ['gov.gov_tax', 'uk_government', 'all_government_totals', 'Totals across all levels of government'], + ['gov.gov_spending', 'uk_government', 'all_government_totals', 'Totals across all levels of government'], + ['gov.gov_balance', 'uk_government', 'all_government_totals', 'Totals across all levels of government'], ['gov.contrib.policyengine.disable_simulated_benefits', 'reform', 'policyengine', 'Policyengine'], ['household.income.employment_income', 'household', 'income', 'Income'], ['input.vehicle.num_vehicles', 'household', 'vehicle', 'Vehicles'], @@ -29,6 +34,25 @@ describe('UK parameter and variable taxonomy', () => { expect(getSubGroupLabel(group, level as Level, 'uk')).toBe(label); }); + it('keeps unknown UK modules separate from household variables', () => { + for (const path of [null, '', 'misc.unknown']) { + expect(getLevel(path, 'uk')).toBe('unclassified'); + expect(getSubGroup(path, 'uk')).toBe('Other'); + } + expect(levelConfig('unclassified', 'uk').label).toBe('Unclassified variables'); + expect(getLevel('household.income.household_net_income', 'uk')).toBe('household'); + expect(getLevel('input.demographic', 'uk')).toBe('household'); + }); + + it('describes UK inputs, calculated results, reform assumptions, and cross-government totals', () => { + expect(levelConfig('household', 'uk')).toMatchObject({ + label: 'Household variables', + description: 'Demographic, income, consumption, and wealth inputs, and calculated household results such as household net income', + }); + expect(levelConfig('reform', 'uk').description).toBe('Contributed reform proposals and modelling assumptions, some enabled by default'); + expect(getSubGroupDescription('all_government_totals', 'uk_government', 'uk')).toBe('Tax, spending, and balance totals across UK, devolved, and local government'); + }); + it('never puts a UK path in a US level, or a US path in a UK level', () => { const segment = fc.stringMatching(/^[a-z][a-z_0-9]{0,12}$/); fc.assert(fc.property(fc.array(segment, { minLength: 1, maxLength: 6 }), (parts) => { @@ -47,6 +71,18 @@ describe('UK parameter and variable taxonomy', () => { expect(getLevel('gov.states.ca.tax.income.rates')).toBe('state'); expect(getSubGroup('gov.states.ca.tax.income.rates')).toBe('CA'); expect(levelsFor()).toEqual(['federal', 'state', 'local', 'territory', 'reform', 'household']); + expect(levelConfig('household', 'us')).toEqual({ + label: 'Household inputs', description: 'Demographics, income, expenses, and geographic inputs', color: '#475569', order: 5, + }); + expect(levelConfig('reform', 'us')).toEqual({ + label: 'Reforms', description: 'Contributed reform proposals and policy experiments', color: '#2C7A7B', order: 4, + }); + expect(getSubGroupLabel('income', 'household', 'us')).toBe('Income'); + expect(getSubGroupDescription('income', 'household', 'us')).toBe('Employment, self-employment, investment, and other income sources'); + expect(getSubGroup('gov.gov_tax', 'us')).toBe('gov_tax'); + expect(getSubGroupLabel('gov_tax', 'federal', 'us')).toBe('GOV_TAX'); + expect(getLevel(null, 'us')).toBe('household'); + expect(getLevel('misc.unknown', 'us')).toBe('household'); }); it('describes UK levels without US agencies', () => { @@ -97,7 +133,6 @@ describe('fillModuleNames', () => { describe('UK coverage links', () => { it('links only to parameter folders and variable files that the pinned snapshot has', async () => { - const { verifiedLinks } = await import('../components/rules/UkCoverageTracker'); const segment = fc.stringMatching(/^[a-z][a-z_]{0,8}$/); fc.assert(fc.property( fc.array(fc.array(segment, { minLength: 1, maxLength: 4 }), { maxLength: 6 }), @@ -121,7 +156,6 @@ describe('UK coverage links', () => { }); it('gives no links before the snapshot trees load, and none for ambiguous variable names', async () => { - const { verifiedLinks } = await import('../components/rules/UkCoverageTracker'); const program = { id: 'p', name: 'P', fullName: 'P', status: 'complete' as const, variable: 'rent', githubLinks: {} }; expect(verifiedLinks(program, 'gov.dwp', null, 'main')).toEqual({}); expect(verifiedLinks(program, undefined, { parameterPaths: new Set(), variablePaths: new Map([['rent', null]]) }, 'main')).toEqual({}); diff --git a/src/test/variableGrouping.test.tsx b/src/test/variableGrouping.test.tsx new file mode 100644 index 0000000..9cfefe3 --- /dev/null +++ b/src/test/variableGrouping.test.tsx @@ -0,0 +1,43 @@ +import { describe, expect, it } from 'vitest'; +import { fireEvent, render, screen } from '@testing-library/react'; +import VariableExplorer from '../components/variables/VariableExplorer'; +import type { Variable } from '../types/Variable'; + +const variable = (name: string, label: string, moduleName: string | null): Variable => ({ + name, label, moduleName, documentation: null, entity: 'household', valueType: 'float', + definitionPeriod: 'year', unit: null, indexInModule: 0, isInputVariable: false, + defaultValue: null, adds: null, subtracts: null, hidden_input: false, category: null, +}); + +describe('Variable explorer grouping', () => { + it('keeps UK variables with unknown modules visible in their own group', () => { + render(); + + fireEvent.click(screen.getByRole('button', { name: /Unclassified variables/ })); + expect(screen.getByText('3 variables across 1 groups')).toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: /^Other/ })); + + expect(screen.getByText('Unknown source variable')).toBeInTheDocument(); + expect(screen.getByText('Empty module variable')).toBeInTheDocument(); + expect(screen.getByText('Unrecognised root variable')).toBeInTheDocument(); + expect(screen.queryByText('Household net income')).not.toBeInTheDocument(); + }); + + it('preserves the US household label and grouping', () => { + render(); + + expect(screen.queryByText('Unclassified variables')).not.toBeInTheDocument(); + expect(screen.queryByText('Household variables')).not.toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: /Household inputs/ })); + expect(screen.getByText('Employment, self-employment, investment, and other income sources')).toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: /^Income/ })); + expect(screen.getByText('Employment income')).toBeInTheDocument(); + }); +}); From a396f60498d5dbcbb9b4b1454a5b8216eae73642 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:46:48 -0400 Subject: [PATCH 21/30] Verify UK coverage links against matching registry snapshots Require repository and commit matches for each tree, and gate computation links on exact variable existence. Keep independent tree failures from hiding other verified links and cover invalid uppercase registry variables. Co-Authored-By: Claude Opus 5.5 --- src/components/rules/UkCoverageTracker.tsx | 81 +++++++--- src/test/ukCoverageLinks.test.tsx | 168 +++++++++++++++++++++ src/test/ukTaxonomy.test.ts | 5 +- 3 files changed, 231 insertions(+), 23 deletions(-) create mode 100644 src/test/ukCoverageLinks.test.tsx diff --git a/src/components/rules/UkCoverageTracker.tsx b/src/components/rules/UkCoverageTracker.tsx index 689bb80..1ba88da 100644 --- a/src/components/rules/UkCoverageTracker.tsx +++ b/src/components/rules/UkCoverageTracker.tsx @@ -4,7 +4,7 @@ import { useEffect, useMemo, useState } from 'react'; import { AnimatePresence, motion } from 'framer-motion'; import { IconCalendar, IconX } from '@tabler/icons-react'; import { colors, typography, spacing, statusColors } from '../../designTokens'; -import { fetchProgramsWithSource, type ProgramsWithSource } from '../../data/fetchPrograms'; +import { fetchProgramsWithSource, type ProgramsSource, type ProgramsWithSource } from '../../data/fetchPrograms'; import { publicBasePrefixFromPath } from '../../hooks/usePublicBasePrefix'; import type { CoverageStatus, Program } from '../../types/Program'; import CoverageProvenance from './CoverageProvenance'; @@ -44,15 +44,27 @@ interface SourceTrees { variablePaths: Map; } +interface SourceTree { + source: { repo: string; commit: string }; + paths: string[]; + modules?: Record; +} + +interface ProgrammeLinks { + parameters?: string; + source?: string; + computationTree?: string; +} + /** A programme's links, kept only where the pinned snapshot has the file or folder. */ export function verifiedLinks( program: Program, parameterPrefix: string | undefined, trees: SourceTrees | null, ref: string, -): { parameters?: string; source?: string } { +): ProgrammeLinks { if (!trees) return {}; - const links: { parameters?: string; source?: string } = {}; + const links: ProgrammeLinks = {}; if (parameterPrefix) { const dir = parameterPrefix.replace(/\./g, '/'); const base = `https://github.com/${REPO}`; @@ -63,27 +75,51 @@ export function verifiedLinks( } } const file = program.variable ? trees.variablePaths.get(program.variable) : null; - if (file) links.source = `https://github.com/${REPO}/blob/${ref}/policyengine_uk/variables/${file}`; + if (file) { + links.source = `https://github.com/${REPO}/blob/${ref}/policyengine_uk/variables/${file}`; + links.computationTree = `https://policyengine.github.io/flowchart/?variable=${program.variable}&country=UK`; + } return links; } -async function loadTrees(): Promise { - const prefix = publicBasePrefixFromPath(window.location.pathname); +async function loadTree(url: string, source: Extract): Promise { try { - const [params, vars] = await Promise.all([ - fetch(`${prefix}/param-tree-uk.json`).then((r) => (r.ok ? r.json() : null)), - fetch(`${prefix}/variable-tree-uk.json`).then((r) => (r.ok ? r.json() : null)), - ]); - if (!Array.isArray(params) || !Array.isArray(vars?.paths)) return null; - const variablePaths = new Map(); - for (const path of vars.paths as string[]) { + const response = await fetch(url); + if (!response.ok) return null; + const tree = await response.json(); + if (tree?.source?.repo !== source.repo || tree?.source?.commit !== source.commit || + !Array.isArray(tree.paths) || !tree.paths.every((path: unknown) => typeof path === 'string')) return null; + return tree; + } catch { + return null; + } +} + +/** A tree can verify links only for the same repository and commit as the registry. */ +async function loadTrees(source: ProgramsSource): Promise { + if (source.kind !== 'snapshot' || source.repo !== REPO) return null; + const prefix = publicBasePrefixFromPath(window.location.pathname); + const [params, vars] = await Promise.all([ + loadTree(`${prefix}/param-tree-uk.json`, source), + loadTree(`${prefix}/variable-tree-uk.json`, source), + ]); + if (!params && !vars) return null; + const variablePaths = new Map(); + if (vars?.modules && typeof vars.modules === 'object' && !Array.isArray(vars.modules)) { + const paths = new Set(vars.paths); + for (const [name, moduleName] of Object.entries(vars.modules)) { + if (typeof moduleName !== 'string') continue; + const path = `${moduleName.replace(/\./g, '/')}.py`; + if (paths.has(path)) variablePaths.set(name, path); + } + } else if (vars && vars.modules === undefined) { + // Older snapshots have only paths: accept a unique, exact file stem. + for (const path of vars.paths) { const stem = path.split('/').pop()!.replace(/\.py$/, ''); variablePaths.set(stem, variablePaths.has(stem) ? null : path); } - return { parameterPaths: new Set(params as string[]), variablePaths }; - } catch { - return null; } + return { parameterPaths: new Set(params?.paths ?? []), variablePaths }; } function ProgrammeDetail({ @@ -92,7 +128,7 @@ function ProgrammeDetail({ onClose, }: { program: Program; - links: { parameters?: string; source?: string }; + links: ProgrammeLinks; onClose: () => void; }) { const linkStyle = { @@ -166,9 +202,9 @@ function ProgrammeDetail({ {links.source && ( Source code )} - {program.variable && ( + {links.computationTree && ( { let active = true; - fetchProgramsWithSource('uk').then((result) => { if (active) setLoaded(result); }); - loadTrees().then((result) => { if (active) setTrees(result); }); + fetchProgramsWithSource('uk').then((result) => { + if (!active) return; + setLoaded(result); + loadTrees(result.source).then((result) => { if (active) setTrees(result); }); + }); return () => { active = false; }; }, []); diff --git a/src/test/ukCoverageLinks.test.tsx b/src/test/ukCoverageLinks.test.tsx new file mode 100644 index 0000000..1aa84ab --- /dev/null +++ b/src/test/ukCoverageLinks.test.tsx @@ -0,0 +1,168 @@ +import { act, fireEvent, render, screen } from '@testing-library/react'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import UkCoverageTracker from '../components/rules/UkCoverageTracker'; +import { fetchProgramsWithSource, type ProgramsSource } from '../data/fetchPrograms'; + +vi.mock('../data/fetchPrograms', () => ({ fetchProgramsWithSource: vi.fn() })); + +const source: Extract = { + kind: 'snapshot', + repo: 'PolicyEngine/policyengine-uk', + branch: 'main', + commit: 'abc123456789', + fetchedAt: '2026-10-14T00:00:00.000Z', + version: '2.126.12', +}; +const parameterTree = { source, paths: ['gov/dwp/jsa/amount.yaml'] }; +const variableTree = { + source, + paths: ['gov/dwp/jsa.py', 'gov/dwp/esa.py', 'gov/dwp/dla/dla.py'], + modules: { jsa: 'gov.dwp.jsa', esa: 'gov.dwp.esa', dla: 'gov.dwp.dla.dla' }, +}; + +async function showProgramme({ + variable = 'jsa', + params = parameterTree, + variables = variableTree, + registrySource = source, +}: { + variable?: string; + params?: unknown; + variables?: unknown; + registrySource?: ProgramsSource; +} = {}) { + vi.mocked(fetchProgramsWithSource).mockResolvedValue({ + source: registrySource, + programs: [{ + id: 'programme', name: 'Test programme', fullName: 'Test programme', + status: 'complete', variable, parameterPrefix: 'gov.dwp.jsa', githubLinks: {}, + }], + }); + vi.mocked(fetch).mockImplementation(async (url) => { + const tree = String(url).includes('param-tree') ? params : variables; + if (tree instanceof Error) throw tree; + return { ok: tree !== null, json: async () => tree } as Response; + }); + await act(async () => { render(); }); + fireEvent.click(screen.getByRole('button', { name: /Test programme/ })); +} + +describe('UK coverage links use the registry snapshot', () => { + beforeEach(() => { vi.resetAllMocks(); }); + + it.each(['JSA', 'ESA', 'DLA'])('omits source and computation links for the absent class %s', async (variable) => { + await showProgramme({ variable }); + expect(screen.getByRole('link', { name: 'Parameters' })).toHaveAttribute('href', + `https://github.com/${source.repo}/tree/${source.commit}/policyengine_uk/parameters/gov/dwp/jsa`); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it.each(['jsa', 'esa', 'dla'])('links the exact class %s in a matching snapshot', async (variable) => { + await showProgramme({ variable }); + expect(screen.getByRole('link', { name: 'Computation tree' })).toHaveAttribute('href', + `https://policyengine.github.io/flowchart/?variable=${variable}&country=UK`); + expect(screen.getByRole('link', { name: 'Source code' })).toHaveAttribute('href', + `https://github.com/${source.repo}/blob/${source.commit}/policyengine_uk/variables/${variableTree.modules[variable as keyof typeof variableTree.modules].replace(/\./g, '/')}.py`); + }); + + it('uses the class map for a variable whose file has a different name', async () => { + await showProgramme({ + variable: 'armed_forces_independence_payment', + variables: { + source, paths: ['gov/dwp/afip.py'], + modules: { armed_forces_independence_payment: 'gov.dwp.afip' }, + }, + }); + expect(screen.getByRole('link', { name: 'Source code' })).toHaveAttribute('href', + `https://github.com/${source.repo}/blob/${source.commit}/policyengine_uk/variables/gov/dwp/afip.py`); + expect(screen.getByRole('link', { name: 'Computation tree' })).toHaveAttribute('href', + 'https://policyengine.github.io/flowchart/?variable=armed_forces_independence_payment&country=UK'); + }); + + it('does not infer a class from a file stem when a class map is present', async () => { + await showProgramme({ variables: { ...variableTree, modules: { other_class: 'gov.dwp.jsa' } } }); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it('rejects a mapped module that is absent from the tree', async () => { + await showProgramme({ variables: { ...variableTree, modules: { jsa: 'gov.dwp.absent' } } }); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it('supports the unique exact file stems in older versioned snapshots', async () => { + await showProgramme({ variables: { source, paths: variableTree.paths } }); + expect(screen.getByRole('link', { name: 'Computation tree' })).toBeInTheDocument(); + }); + + it('omits links for ambiguous file stems in older versioned snapshots', async () => { + await showProgramme({ variables: { source, paths: ['gov/dwp/jsa.py', 'input/jsa.py'] } }); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it.each([ + { repo: source.repo, commit: 'older-commit' }, + { repo: 'PolicyEngine/policyengine-us', commit: source.commit }, + ])('rejects trees whose provenance differs: %j', async (treeSource) => { + await showProgramme({ + params: { ...parameterTree, source: treeSource }, + variables: { ...variableTree, source: treeSource }, + }); + expect(screen.queryByRole('link', { name: 'Parameters' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it('rejects unversioned parameter and variable trees', async () => { + await showProgramme({ params: parameterTree.paths, variables: { paths: variableTree.paths } }); + expect(screen.queryByRole('link', { name: 'Parameters' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it('rejects only the stale parameter tree while retaining verified variable links', async () => { + await showProgramme({ params: { ...parameterTree, source: { ...source, commit: 'older-commit' } } }); + expect(screen.queryByRole('link', { name: 'Parameters' })).not.toBeInTheDocument(); + expect(screen.getByRole('link', { name: 'Source code' })).toBeInTheDocument(); + expect(screen.getByRole('link', { name: 'Computation tree' })).toBeInTheDocument(); + }); + + it('rejects only the stale variable tree while retaining verified parameter links', async () => { + await showProgramme({ variables: { ...variableTree, source: { ...source, commit: 'older-commit' } } }); + expect(screen.getByRole('link', { name: 'Parameters' })).toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it.each([null, new Error('Parameter refresh unavailable')])('retains variable links when the parameter tree is unavailable', async (params) => { + await showProgramme({ params }); + expect(screen.queryByRole('link', { name: 'Parameters' })).not.toBeInTheDocument(); + expect(screen.getByRole('link', { name: 'Source code' })).toBeInTheDocument(); + expect(screen.getByRole('link', { name: 'Computation tree' })).toBeInTheDocument(); + }); + + it.each([null, new Error('Variable refresh unavailable')])('retains parameter links when the variable tree is unavailable', async (variables) => { + await showProgramme({ variables }); + expect(screen.getByRole('link', { name: 'Parameters' })).toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it('omits all verified links when both trees are unavailable', async () => { + await showProgramme({ params: null, variables: new Error('Unavailable') }); + expect(screen.queryByRole('link', { name: 'Parameters' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); + + it('does not use snapshot trees to verify an API registry against main', async () => { + await showProgramme({ registrySource: { kind: 'api', repo: source.repo, apiVersion: '2.126.12' } }); + expect(fetch).not.toHaveBeenCalled(); + expect(screen.queryByRole('link', { name: 'Parameters' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); + expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + }); +}); diff --git a/src/test/ukTaxonomy.test.ts b/src/test/ukTaxonomy.test.ts index ff29cb5..4b4080f 100644 --- a/src/test/ukTaxonomy.test.ts +++ b/src/test/ukTaxonomy.test.ts @@ -132,7 +132,7 @@ describe('fillModuleNames', () => { }); describe('UK coverage links', () => { - it('links only to parameter folders and variable files that the pinned snapshot has', async () => { + it('links only to parameter folders and variable files that the pinned snapshot has', () => { const segment = fc.stringMatching(/^[a-z][a-z_]{0,8}$/); fc.assert(fc.property( fc.array(fc.array(segment, { minLength: 1, maxLength: 4 }), { maxLength: 6 }), @@ -150,12 +150,13 @@ describe('UK coverage links', () => { const exists = parameterPaths.has(`${dir}.yaml`) || [...parameterPaths].some((p) => p.startsWith(`${dir}/`)); expect(Boolean(links.parameters)).toBe(exists); expect(links.source).toBe(`https://github.com/PolicyEngine/policyengine-uk/blob/abc123/policyengine_uk/variables/gov/x/${variable}.py`); + expect(links.computationTree).toBe(`https://policyengine.github.io/flowchart/?variable=${variable}&country=UK`); if (links.parameters) expect(links.parameters).toContain('/abc123/policyengine_uk/parameters/'); }, )); }); - it('gives no links before the snapshot trees load, and none for ambiguous variable names', async () => { + it('gives no links before the snapshot trees load, and none for ambiguous variable names', () => { const program = { id: 'p', name: 'P', fullName: 'P', status: 'complete' as const, variable: 'rent', githubLinks: {} }; expect(verifiedLinks(program, 'gov.dwp', null, 'main')).toEqual({}); expect(verifiedLinks(program, undefined, { parameterPaths: new Set(), variablePaths: new Map([['rent', null]]) }, 'main')).toEqual({}); From c665ffbb69a995ac43cdaf93b301ed3bece6af96 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 08:51:40 -0400 Subject: [PATCH 22/30] Link the policyengine-uk-data issues the UK pages describe The UK hub posted issues for the release faults the pages describe: - #468: local UC targets misassigned (already open) - #538: the 0.44% weight round trip (already open) - #582: ESA/incapacity, corrected - #583: DLA in the PIP target - #584: council tax scope - #585: the capital gains split - #586: NHS 85+ - #587: the OA crosswalk - #588: GB benefit lines scored on UK households The validation page's known issues, the calibration notes and the pipeline stages now cite them. Also drop "slightly" from the revised-target sentence: Scottish band H moves 8.7%. Co-Authored-By: Claude Opus 5.5 --- scripts/extract_uk_release.py | 25 +++++++++++++++---------- src/data/ukDataRelease.json | 24 ++++++++++++------------ src/data/ukPipelineStages.ts | 15 ++++++++------- src/views/data/UkCalibrationPage.tsx | 6 +++--- src/views/data/UkValidationPage.tsx | 27 ++++++++++----------------- 5 files changed, 48 insertions(+), 49 deletions(-) diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index 86c4fad..c020a6e 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -131,6 +131,7 @@ def area_override(metric: str) -> str | None: # How a target family is built or scored, where its label alone would # mislead. Every note restates code in the release. +GB_ON_UK_NOTE = "Scored on UK households (policyengine-uk-data#588)" GROUP_NOTES = { ("obr", "ni_employee", "national", None): ( "OBR's total includes employer and self-employed contributions " @@ -139,19 +140,22 @@ def area_override(metric: str) -> str | None: ("obr", "esa_income", "national", None): ( "OBR's line also covers incapacity benefit, severe disablement " "allowance and the incapacity part of Income Support; scored on UK " - "households" + "households (policyengine-uk-data#582, #588)" ), ("obr", "council_tax", "national", None): ( "OBR's UK total also includes Northern Ireland domestic rates and an " - "accruals adjustment; the model sums council tax net of reductions" + "accruals adjustment; the model sums council tax net of reductions " + "(policyengine-uk-data#584)" ), - ("obr", "pip", "national", None): "Scored on UK households", - ("obr", "attendance_allowance", "national", None): "Scored on UK households", - ("obr", "carers_allowance", "national", None): "Scored on UK households", - ("obr", "statutory_maternity_pay", "national", None): "Scored on UK households", - ("obr", "winter_fuel_allowance", "national", None): "Scored on UK households", - ("obr", "state_pension", "national", None): "Scored on UK households", - ("obr", "jsa", "national", None): "Scored on UK households", + ("obr", "pip", "national", None): ( + "Scored on UK households (policyengine-uk-data#583, #588)" + ), + ("obr", "attendance_allowance", "national", None): GB_ON_UK_NOTE, + ("obr", "carers_allowance", "national", None): GB_ON_UK_NOTE, + ("obr", "statutory_maternity_pay", "national", None): GB_ON_UK_NOTE, + ("obr", "winter_fuel_allowance", "national", None): GB_ON_UK_NOTE, + ("obr", "state_pension", "national", None): GB_ON_UK_NOTE, + ("obr", "jsa", "national", None): GB_ON_UK_NOTE, ( "ons", "mortgage_capital_repayment", @@ -448,7 +452,8 @@ def area_override(metric: str) -> str | None: # them by position to areas in another order. UC_ORDER_NOTE = ( "The build assigns these counts to areas by row order, which does not " - "match the areas, so this fit is not a check on Universal Credit by area" + "match the areas, so this fit is not a check on Universal Credit by area " + "(policyengine-uk-data#468)" ) # Local (per-area) metric families. Sources are the ones each loss builder's diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index ee83061..db60ffb 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -125,7 +125,7 @@ { "label": "Universal Credit households", "source": "DWP Stat-Xplore and DfC Northern Ireland statistics", - "note": "The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area", + "note": "The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area (policyengine-uk-data#468)", "metrics": 1, "heldOut": false, "cells": 650, @@ -134,7 +134,7 @@ { "label": "Universal Credit households by number of children", "source": "DWP Stat-Xplore and DfC Northern Ireland statistics", - "note": "Each area's total split by its nation's shares (Northern Ireland takes Great Britain's). The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area", + "note": "Each area's total split by its nation's shares (Northern Ireland takes Great Britain's). The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area (policyengine-uk-data#468)", "metrics": 4, "heldOut": false, "cells": 2600, @@ -213,7 +213,7 @@ { "label": "Universal Credit households", "source": "DWP Stat-Xplore and DfC Northern Ireland statistics", - "note": "The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area", + "note": "The build assigns these counts to areas by row order, which does not match the areas, so this fit is not a check on Universal Credit by area (policyengine-uk-data#468)", "metrics": 1, "heldOut": false, "cells": 360, @@ -282,7 +282,7 @@ "label": "Council tax receipts, UK and by nation", "publisher": "OBR", "geography": "UK", - "note": "OBR's UK total also includes Northern Ireland domestic rates and an accruals adjustment; the model sums council tax net of reductions", + "note": "OBR's UK total also includes Northern Ireland domestic rates and an accruals adjustment; the model sums council tax net of reductions (policyengine-uk-data#584)", "units": [ "gbp" ], @@ -340,7 +340,7 @@ "label": "Attendance Allowance spending", "publisher": "OBR", "geography": "Great Britain", - "note": "Scored on UK households", + "note": "Scored on UK households (policyengine-uk-data#588)", "units": [ "gbp" ], @@ -382,7 +382,7 @@ "label": "Carer's Allowance spending", "publisher": "OBR", "geography": "Great Britain", - "note": "Scored on UK households", + "note": "Scored on UK households (policyengine-uk-data#588)", "units": [ "gbp" ], @@ -424,7 +424,7 @@ "label": "Disability Living Allowance and PIP spending, scored against PIP alone", "publisher": "OBR", "geography": "Great Britain", - "note": "Scored on UK households", + "note": "Scored on UK households (policyengine-uk-data#583, #588)", "units": [ "gbp" ], @@ -487,7 +487,7 @@ "label": "Incapacity benefits spending, scored against ESA (income-related and contributory)", "publisher": "OBR", "geography": "Great Britain", - "note": "OBR's line also covers incapacity benefit, severe disablement allowance and the incapacity part of Income Support; scored on UK households", + "note": "OBR's line also covers incapacity benefit, severe disablement allowance and the incapacity part of Income Support; scored on UK households (policyengine-uk-data#582, #588)", "units": [ "gbp" ], @@ -529,7 +529,7 @@ "label": "Jobseeker's Allowance spending", "publisher": "OBR", "geography": "Great Britain", - "note": "Scored on UK households", + "note": "Scored on UK households (policyengine-uk-data#588)", "units": [ "gbp" ], @@ -632,7 +632,7 @@ "label": "State Pension spending", "publisher": "OBR", "geography": "Great Britain", - "note": "Scored on UK households", + "note": "Scored on UK households (policyengine-uk-data#588)", "units": [ "gbp" ], @@ -653,7 +653,7 @@ "label": "Statutory Maternity Pay spending", "publisher": "OBR", "geography": "Great Britain", - "note": "Scored on UK households", + "note": "Scored on UK households (policyengine-uk-data#588)", "units": [ "gbp" ], @@ -737,7 +737,7 @@ "label": "Winter Fuel Payment spending", "publisher": "OBR", "geography": "Great Britain", - "note": "Scored on UK households", + "note": "Scored on UK households (policyengine-uk-data#588)", "units": [ "gbp" ], diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index af86875..23b21e5 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -133,7 +133,7 @@ export const ukPipelineStages: PipelineStage[] = [ details: [ 'VAT: a forest on adults, children, pension age (the survey’s retirement flag in training) and household net income predicts the share of spending taxed at the full rate', 'Public services: a forest on age groups, pupils by school stage, DLA and PIP amounts, and household net income predicts education, rail and bus subsidy spending', - 'NHS: A&E, admitted patient and outpatient visits and spending, by age and sex. The FRS records adult ages up to 80; the build drops the cost table’s rows for ages 85 and over before scaling, so spending on people aged 80 and over is understated', + 'NHS: A&E, admitted patient and outpatient visits and spending, by age and sex. The FRS records adult ages up to 80; the build drops the cost table’s rows for ages 85 and over before scaling, so spending on people aged 80 and over is understated (policyengine-uk-data#586)', 'After calibration, the build scales rail subsidy to £21.6bn and bus subsidy to £3.55bn, England’s £3.0bn uplifted to the UK by population', ], imputations: [ @@ -178,7 +178,7 @@ export const ukPipelineStages: PipelineStage[] = [ 'The build duplicates every household and gives capital gains to the first adult in each copy. An ' + 'optimiser splits each household’s weight between its two versions, aiming for the share with gains in ' + 'each income band in Advani and Summers’ estimates; the split it returns gives the copies more weight than ' + - `the one it fitted. ${fmtInt(c.cgtBandDonors)} donor households then carry HMRC’s average gain for each ` + + `the one it fitted (policyengine-uk-data#585). ${fmtInt(c.cgtBandDonors)} donor households then carry HMRC’s average gain for each ` + 'size-of-gain band from £12,300 up, so calibration can fit HMRC’s taxpayers and gains in each band.', icon: 'trending-up', inputSize: `${fmtInt(stacked)} households`, @@ -221,7 +221,8 @@ export const ukPipelineStages: PipelineStage[] = [ description: 'The build gives each household in Great Britain one Output Area, drawn at random within its survey ' + 'region: in proportion to population in England and Wales, and with equal chances in Scotland, where the ' + - 'lookup gives every Output Area the same population in this release. The Output Area fixes the household’s ' + + 'lookup gives every Output Area the same population in this release (policyengine-uk-data#587). The Output ' + + 'Area fixes the household’s ' + 'local authority and constituency. The build then uprates the file to 2025, the year the calibration ' + 'targets describe.', icon: 'map-pin', @@ -231,7 +232,7 @@ export const ukPipelineStages: PipelineStage[] = [ details: [ `${fmtInt(g.householdsWithArea)} households have an Output Area; each of the ${f.gbConstituencies} constituencies in Great Britain has ${g.householdsPerConstituency.min} to ${g.householdsPerConstituency.max} of them`, `Northern Ireland’s ${f.niHouseholds} households have none in this release: the build skips Northern Ireland while its small-area lookup is unavailable (policyengine-uk-data#580)`, - 'The lookup has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset, four of the local authorities the build calibrates; households there carry 17 older district codes instead', + 'The lookup has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset, four of the local authorities the build calibrates; households there carry 17 older district codes instead (policyengine-uk-data#587)', `The build can draw several Output Areas per household; the publish run drew ${g.outputAreaDrawsPerHousehold}`, ], }, @@ -255,7 +256,7 @@ export const ukPipelineStages: PipelineStage[] = [ 'Starting weights: the positive weights are halved, the zero-weight households (the top-income copies and their capital gains copies) share the other half equally, and each household’s starting weight is divided by the number of constituencies in its nation', 'The build treats the constituency targets as figures for the 2010 boundaries and maps them to the 2024 boundaries', `The build saves the weights, and logs the fit, every tenth epoch, so the release’s weights are from epoch ${cal.epoch}. There, ${fmtPct(cal.nationalWithin10)} of national and regional targets and ${fmtPct(cal.constituency.trainingWithin10)} of constituency targets lie within 10%`, - 'In this release the build assigns Universal Credit household counts to the wrong constituencies', + 'In this release the build assigns Universal Credit household counts to the wrong constituencies (policyengine-uk-data#468)', ], calibrationTargets: [ ...cal.constituency.families.map((fam) => ({ @@ -284,7 +285,7 @@ export const ukPipelineStages: PipelineStage[] = [ details: [ `${f.households} households and ${f.people} people, weighted to ${fmtMillions(uk.enhanced.weightedHouseholds)} households in 2024`, `${fmtInt(c.frs)} FRS households, ${fmtInt(c.spiCopies)} top-income copies, ${fmtInt(c.capitalGainsCopies)} capital gains copies and ${fmtInt(c.cgtBandDonors)} capital gains donors`, - `policyengine-uk ${v.modelVersion} uprates the weights when it loads the file, by population growth rather than the build’s factor, so a ${v.year} run has ${fmtMillions(v.households)} households against the ${fmtMillions(calibratedHouseholds)} calibration fitted, ${fmtPct(runtimeShortfall)} fewer`, + `policyengine-uk ${v.modelVersion} uprates the weights when it loads the file, by population growth rather than the build’s factor, so a ${v.year} run has ${fmtMillions(v.households)} households against the ${fmtMillions(calibratedHouseholds)} calibration fitted, ${fmtPct(runtimeShortfall)} fewer (policyengine-uk-data#538)`, 'Bus fares: England’s fare receipts uplifted to the UK by population, split between London and the rest of England, and spread across income groups by bus trips in the National Travel Survey. Petrol and diesel spending: one factor, so the litres they imply match the 2024 road fuel volume the build uses', 'policyengine.py analyses a constituency or local authority with the households whose Output Area lies in it, at their national weights, not with the constituency or local authority weights', 'Northern Ireland constituencies and local authorities have no households with an Output Area in this release, so policyengine.py stops with an error for them', @@ -308,7 +309,7 @@ export const ukPipelineStages: PipelineStage[] = [ details: [ `${fmtInt(laFitted)} fitted local targets and ${fmtInt(cal.localAuthority.heldOut.cells)} logged but not fitted, across ${cal.localAuthority.metrics} measures; ${fmtInt(cal.localAuthority.cellsWithoutSource)} area and measure pairs have no figure`, `At epoch ${cal.epoch}, ${fmtPct(cal.localAuthority.trainingWithin10)} of local authority targets lie within 10%`, - 'In this release the build assigns Universal Credit household counts to the wrong local authorities', + 'In this release the build assigns Universal Credit household counts to the wrong local authorities (policyengine-uk-data#468)', ], calibrationTargets: [ ...cal.localAuthority.families.map((fam) => ({ diff --git a/src/views/data/UkCalibrationPage.tsx b/src/views/data/UkCalibrationPage.tsx index ddb728c..2f982d2 100644 --- a/src/views/data/UkCalibrationPage.tsx +++ b/src/views/data/UkCalibrationPage.tsx @@ -15,7 +15,7 @@ import { type UkTargetCheck, type UkTargetGroup, } from '../../data/ukDataRelease'; -import { DataTable, ExternalLink, PageLink, StatTile, bodyText, cell, sectionHeading } from './ukTables'; +import { DataTable, ExternalLink, PageLink, StatTile, bodyText, cell, issueUrl, sectionHeading } from './ukTables'; const cal = uk.calibration; const rows = checks as UkTargetCheck[]; @@ -194,8 +194,8 @@ export default function UkCalibrationPage() { it, at their national weights, not those files, so the figures above do not measure how well such an analysis matches the area. The data pipeline page describes how households get an Output Area. In this release the build also assigns Universal Credit counts to the wrong - areas, as the notes in both tables say, so the Universal Credit rows above do not check Universal Credit by - area. + areas (policyengine-uk-data#468), + so the Universal Credit rows above do not check Universal Credit by area.

diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index 07042d3..d7429c4 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -58,9 +58,7 @@ export function fmtDifference(target: number, estimate: number): string { return `${pct >= 0 ? '+' : '−'}${Math.abs(pct).toFixed(1)}%`; } -// Issues without a number are confirmed in the release's code and await a -// policyengine-uk-data issue. -const KNOWN_ISSUES: { repo: string; n: number | null; text: string }[] = [ +const KNOWN_ISSUES: { repo: string; n: number; text: string }[] = [ { repo: 'policyengine-uk-data', n: 581, @@ -78,32 +76,32 @@ const KNOWN_ISSUES: { repo: string; n: number | null; text: string }[] = [ }, { repo: 'policyengine-uk-data', - n: null, + n: 588, text: 'The OBR’s DWP benefit lines cover Great Britain, but the release scores them on every UK household, Northern Ireland’s included.', }, { repo: 'policyengine-uk-data', - n: null, + n: 583, text: 'The OBR’s disability line combines Disability Living Allowance and PIP, and the release scores it against PIP alone.', }, { repo: 'policyengine-uk-data', - n: null, + n: 584, text: 'The OBR’s UK council tax line includes Northern Ireland domestic rates and an accruals adjustment, which the model’s council tax leaves out.', }, { repo: 'policyengine-uk-data', - n: null, + n: 468, text: `Both local calibrations assign Universal Credit household counts to areas by row order, which does not match the areas.`, }, { repo: 'policyengine-uk-data', - n: null, + n: 538, text: `policyengine-uk ${uk.release.modelVersion} uprates the saved weights to ${v.year} by population growth, not by the factor the build used to save them, so a ${v.year} run has ${fmtPct(1 - v.households / (uk.enhanced.weightedHouseholds * uk.weightMatrices.columnSumPerSavedWeight))} fewer households than calibration fitted.`, }, { repo: 'policyengine-uk-data', - n: null, + n: 587, text: 'The Output Area lookup gives every Scottish Output Area the same population, and has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset.', }, { repo: 'policyengine-uk', n: 1996, text: 'Modelled VAT exceeds OBR receipts.' }, @@ -166,7 +164,7 @@ export default function UkValidationPage() { These are the targets calibration fitted, so the shares measure how far the fit holds up under the pinned model, not accuracy on statistics the build never saw. Each target also counts once, whatever its size. {v.revisedTargets.length > 0 && - ` When the pinned run rebuilds the targets, ${fmtInt(v.revisedTargets.length)} come out at slightly different values (${v.revisedTargets.join(', ')}); the page keeps the values calibration fitted.`} + ` When the pinned run rebuilds the targets, ${fmtInt(v.revisedTargets.length)} come out at different values (${v.revisedTargets.join(', ')}); the page keeps the values calibration fitted.`}

The OBR’s March 2026 Economic and Fiscal Outlook forecasts these receipts and spending lines for 2025-26: @@ -244,13 +242,8 @@ export default function UkValidationPage() {

    {KNOWN_ISSUES.map((issue) => (
  • - {issue.text} - {issue.n !== null && ( - <> - {' '} - {`${issue.repo}#${issue.n}`} - - )} + {issue.text}{' '} + {`${issue.repo}#${issue.n}`}
  • ))}
From 350dffbfdb93e723492924763dc0cc5275a1e4fc Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 09:02:58 -0400 Subject: [PATCH 23/30] Document the UK class-map snapshots and fallback Describe commit-matched coverage links and unclassified variables, and give the archive fallback test a complete Console-compatible logger for type checking. Co-Authored-By: Claude Opus 5.5 --- README.md | 13 ++++++++++--- src/test/fetchVariableModules.test.ts | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b9ebbf7..b5eddc3 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,16 @@ available, the version served by the production API. The same run snapshots each repository's `parameters/` and `variables/` file trees (`public/param-tree-.json`, `public/variable-tree-.json`) at that -commit. Parameter pages use them to link each parameter to its YAML file; the UK -variable explorer uses the variable tree to find each variable's module, because -the UK metadata API serves none. +commit. Both trees record `{ source, paths }`. The UK variable tree also records +`modules`, an exact class-to-module map read from that commit's source archive, +because the UK metadata API serves no module names. The UK coverage tracker +verifies parameter, source and computation-tree links only against trees whose +repository and commit match its programme registry snapshot. + +If the archive is unavailable, module enrichment falls back to unique file stems. +UK variables whose modules remain unknown appear under “Unclassified variables”. +The registry and both trees are cleared before each refresh so a failed fetch +cannot reuse a stale snapshot. The program loader tries the static snapshot first, then production API metadata, then the bundled hardcoded programs (US only; the UK page says the registry could diff --git a/src/test/fetchVariableModules.test.ts b/src/test/fetchVariableModules.test.ts index 4669b56..f93b71d 100644 --- a/src/test/fetchVariableModules.test.ts +++ b/src/test/fetchVariableModules.test.ts @@ -89,7 +89,7 @@ describe('UK class-to-module snapshot', () => { if (url.endsWith('variable-tree?recursive=1')) return new Response(JSON.stringify({ tree: [{ type: 'blob', path: 'gov/dwp/afip.py' }] })); throw new Error(`Unexpected request: ${url}`); }); - const logger = { warn: vi.fn() }; + const logger = { ...console, warn: vi.fn() }; await expect(fetchVariableTreeSnapshot('uk', source, { fetchImpl, logger })).resolves.toEqual({ source, paths: ['gov/dwp/afip.py'], }); From f56c116f67fe5535cd13b869c73b9d2c31839936 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 09:13:05 -0400 Subject: [PATCH 24/30] Preserve parameter source links with provenance snapshots Accept the new parameter tree object and legacy arrays, with string-path validation. Pin exact US and UK source URLs and directory fallbacks in rendering regressions. Co-Authored-By: Claude Opus 5.5 --- src/components/parameters/ParameterDetail.tsx | 8 ++- src/test/parameterSourceLinks.test.tsx | 61 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 src/test/parameterSourceLinks.test.tsx diff --git a/src/components/parameters/ParameterDetail.tsx b/src/components/parameters/ParameterDetail.tsx index 8cf1072..d9c3b7f 100644 --- a/src/components/parameters/ParameterDetail.tsx +++ b/src/components/parameters/ParameterDetail.tsx @@ -273,8 +273,12 @@ async function loadParamTree(country: string): Promise | null> { const prefix = publicBasePrefixFromPath(window.location.pathname); const res = await fetch(`${prefix}/param-tree-${country}.json`); if (!res.ok) throw new Error('not found'); - const paths: string[] = await res.json(); - const set = new Set(paths); + const tree = await res.json(); + const paths = Array.isArray(tree) ? tree : tree?.paths; + if (!Array.isArray(paths) || !paths.every((path: unknown) => typeof path === 'string')) { + throw new Error('invalid parameter tree'); + } + const set = new Set(paths); treeCache.set(country, set); return set; } catch { diff --git a/src/test/parameterSourceLinks.test.tsx b/src/test/parameterSourceLinks.test.tsx new file mode 100644 index 0000000..1a25850 --- /dev/null +++ b/src/test/parameterSourceLinks.test.tsx @@ -0,0 +1,61 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import type { ParameterLeaf } from '../types/Variable'; +// Load the dependency graph before case timers; each case still resets the tree cache. +import '../components/parameters/ParameterDetail'; + +beforeEach(() => { + // Each case must load its own tree rather than reuse the component's cache. + vi.resetModules(); +}); + +afterEach(() => { + vi.unstubAllGlobals(); +}); + +async function showParameter(country: string, tree: unknown) { + const path = country === 'uk' ? 'gov.hmrc.income_tax.rates.basic' : 'gov.irs.income_tax.rate'; + const parameter: ParameterLeaf = { + type: 'parameter', parameter: path, label: 'Income tax rate', description: null, + unit: '/1', period: 'year', values: { '2025-01-01': 0.1 }, + }; + const fetchImpl = vi.fn().mockResolvedValue(new Response(JSON.stringify(tree))); + vi.stubGlobal('fetch', fetchImpl); + const { default: ParameterDetail } = await import('../components/parameters/ParameterDetail'); + render(); + return { path, fetchImpl }; +} + +describe('Parameter source links', () => { + it.each([ + { country: 'us', shape: 'legacy array' }, + { country: 'us', shape: 'provenance snapshot' }, + { country: 'uk', shape: 'legacy array' }, + { country: 'uk', shape: 'provenance snapshot' }, + ])('preserves the exact $country source link with a $shape', async ({ country, shape }) => { + const path = country === 'uk' ? 'gov/hmrc/income_tax/rates/basic.yaml' : 'gov/irs/income_tax/rate.yaml'; + const tree = shape === 'legacy array' ? [path] : { + source: { repo: `PolicyEngine/policyengine-${country}`, commit: 'a'.repeat(40) }, + paths: [path], + }; + const { fetchImpl } = await showParameter(country, tree); + await waitFor(() => { + expect(screen.getByRole('link', { name: 'View source' })).toHaveAttribute('href', + `https://github.com/PolicyEngine/policyengine-${country}/blob/main/policyengine_${country}/parameters/${path}`); + }); + expect(fetchImpl).toHaveBeenCalledExactlyOnceWith(`/param-tree-${country}.json`); + }); + + it.each([ + { paths: 'gov/irs/income_tax/rate.yaml' }, + { paths: ['gov/irs/income_tax/rate.yaml', 42] }, + ['gov/irs/income_tax/rate.yaml', 42], + null, + ].map(tree => ({ tree })))('keeps the existing directory fallback for an invalid tree: %j', async ({ tree }) => { + await showParameter('us', tree); + await waitFor(() => { + expect(screen.getByRole('link', { name: 'View source' })).toHaveAttribute('href', + 'https://github.com/PolicyEngine/policyengine-us/tree/main/policyengine_us/parameters/gov/irs'); + }); + }); +}); From 4745dd0c91f834b6f5ce7baabf0da876db6b0b30 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 14 Oct 2026 09:31:34 -0400 Subject: [PATCH 25/30] Address the independent review of the UK pages at 427c1ec From the GPT-6.1 Sol review (14 findings, each checked against the release's code before changing anything): - Behavioural: the employer NI pay formula is meant to hold employer cost, assumes pay stays above the reform's threshold, and exempts pay below the baseline threshold; the 0.16% is a separate haircut; the capital gains retention rate is a ratio; the tax-rate convention uses a different driver - Validation: Universal Credit is the one DWP line scored on Great Britain - Calibration: notes for the land value constructions, the fixed independent-school count and the salary sacrifice headcounts; "Source" columns, the local one marked as the build's own citations - Pipeline: attributions that only the build's code makes are labelled as its own; a 90% chance, not 90% flagged; a nominal 100,000 SPI sample; borrower counts and take-up rate as the build stores them - Local age note: the bands across all areas add to 90% - US data hub copy restored exactly to master's - Walkthrough comment: the example models only the income effect Tests: - the behavioural differential now runs policyengine-uk's own elasticity functions on every gender, marital status and youngest-child age, and checks each displayed row (a swapped pair of values now fails); it also checks the pay-channel formulas - new source guards check the extractor's areas, notes and publishers against policyengine-uk-data's code (UK_DATA_SOURCE) - the pinned target check records the dataset's sha256, data version and year, and the extractor rejects any other file, package or year (re-run: all 645 rows identical to the first run) Co-Authored-By: Claude Opus 5.5 --- README.md | 19 ++- scripts/extract_uk_release.py | 50 +++++++- scripts/run_uk_target_check.py | 11 ++ scripts/test_extract_uk_release.py | 114 +++++++++++++++++- scripts/uk_obr_elasticity_grid.py | 85 +++++++++++++ .../theory/UkBehaviouralResponses.tsx | 22 ++-- src/data/microsimSteps.ts | 6 +- src/data/sectionOverviews.ts | 4 +- src/data/ukBehaviouralResponses.ts | 42 +++++-- src/data/ukDataRelease.json | 16 +-- src/data/ukPipelineStages.ts | 26 ++-- src/test/ukBehavioural.test.tsx | 56 +++++++-- src/views/data/UkCalibrationPage.tsx | 9 +- src/views/data/UkValidationPage.tsx | 7 +- 14 files changed, 390 insertions(+), 77 deletions(-) create mode 100644 scripts/uk_obr_elasticity_grid.py diff --git a/README.md b/README.md index b9ebbf7..1f43b08 100644 --- a/README.md +++ b/README.md @@ -84,12 +84,19 @@ moves, regenerate them: src/data/ukDataRelease.json --rows-out src/data/ukTargetChecks.json`. It checks every file's sha256 against the release manifest and refuses a release other than the pin. -4. Run `UK_RELEASE_ARTIFACTS= uv run --no-project --with pytest --with - hypothesis --with h5py --with tables --with pandas --with numpy pytest - scripts/test_extract_uk_release.py` and `bun run test`, then reread the - pipeline stage copy in `src/data/ukPipelineStages.ts` against the new - release's `datasets/create_datasets.py`: the counts update themselves, the - mechanisms do not. + The target check records the dataset's sha256, data package version and + year, and the extractor refuses a check of any other file, package or year. +4. Run `UK_RELEASE_ARTIFACTS= UK_DATA_SOURCE= uv run --no-project --with pytest --with hypothesis --with h5py + --with tables --with pandas --with numpy pytest + scripts/test_extract_uk_release.py`, and + `UK_MODEL_SOURCE= bun run test`. The first + checks the extractor's labels, areas and notes against the data package's + code; the second runs policyengine-uk's own behavioural functions against + the behavioural page. Then reread the pipeline stage copy in + `src/data/ukPipelineStages.ts` against the new release's + `datasets/create_datasets.py`: the counts update themselves, the mechanisms + do not. The household files hold UK Data Service microdata. Only the aggregates the extractor writes may leave that folder. diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index c020a6e..a17b943 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -174,6 +174,32 @@ def area_override(metric: str) -> str | None: "Amounts scaled up 1.9 times, the build's ratio of HMRC's property " "rental income statistics to the SPI" ), + # targets/sources/_land.py and mhclg_regional_land.py + ("ons", "land_value", "national", None): "ONS's 2024 total, held flat for 2025", + ("ons", "household_land_value", "national", None): ( + "ONS's 2024 total land value times the 2020 household share, held flat for 2025" + ), + ("ons", "corporate_land_value", "national", None): ( + "ONS's 2024 total land value times the 2020 corporate share, held flat for 2025" + ), + ("ons", "household_land_value", "region", None): ( + "The household total shared out by each region's dwellings times its " + "average house price" + ), + # targets/sources/obr.py and targets/compute/income.py + ("obr", "attends_private_school", "national", None): ( + "557,000 in every year from 2018 to 2031, a figure set in the build" + ), + ( + "obr", + "pension_contributions_via_salary_sacrifice", + "national", + None, + ): ( + "2024 users set in the build (7.7 million; 4.3 million at or below the " + "cap, 3.3 million above), grown 2.4% a year; the £2,000 test uses 2023 " + "prices" + ), ("hmrc", "capital_gains", "national", None): ( "2023-24 outturn: gains uprated to 2025, taxpayer counts held flat" ), @@ -463,7 +489,8 @@ def area_override(metric: str) -> str | None: "age/", "Population by ten-year age band, 0 to 79", "ONS mid-year population estimates", - "Rescaled so every area's bands add to 90% of the UK population", + "Rescaled so the bands across all areas together add to 90% of the UK " + "population", ), ( "hmrc/employment_income/amount", @@ -858,7 +885,9 @@ def national_groups( return groups, target_rows -def read_pinned_check(path: Path, model_version: str) -> tuple[dict, pd.DataFrame]: +def read_pinned_check( + path: Path, model_version: str, pin_checks: dict | None = None +) -> tuple[dict, pd.DataFrame]: meta = {} with open(path) as f: for line in f: @@ -870,6 +899,11 @@ def read_pinned_check(path: Path, model_version: str) -> tuple[dict, pd.DataFram raise ExtractionError( f"pinned check ran policyengine-uk {meta.get('policyengine_uk')}, the bundle pins {model_version}" ) + for key, expected in (pin_checks or {}).items(): + if meta.get(key) != expected: + raise ExtractionError( + f"pinned check has {key}={meta.get(key)}, expected {expected}" + ) checked = pd.read_csv(path, comment="#") if ( checked["metric"].duplicated().any() @@ -993,9 +1027,19 @@ def extract(artifacts: Path, registry_path: Path) -> dict: ) registry = pd.DataFrame(json.loads(registry_path.read_text())).set_index("name") + # The check must have run the pinned file, from the pinned data package, + # for the year the weight matrices were fitted to. run, pinned = read_pinned_check( - artifacts / "pinned_target_check.csv", pin["modelVersion"] + artifacts / "pinned_target_check.csv", + pin["modelVersion"], + { + "dataset_sha256": pin["datasetSha256"], + "policyengine_uk_data": pin["dataVersion"], + "year": constituency["year"], + }, ) + if authority["year"] != constituency["year"]: + raise ExtractionError("the two weight matrices were fitted to different years") constituency_cal, national = calibration( artifacts / "constituency_calibration_log.csv", registry, constituency["areas"] ) diff --git a/scripts/run_uk_target_check.py b/scripts/run_uk_target_check.py index d184b6b..3e292be 100644 --- a/scripts/run_uk_target_check.py +++ b/scripts/run_uk_target_check.py @@ -12,6 +12,7 @@ /enhanced_frs_2024_25.h5 2025 /pinned_target_check.csv """ +import hashlib import sys from importlib.metadata import version @@ -21,6 +22,14 @@ from policyengine_uk_data.targets.build_loss_matrix import create_target_matrix +def sha256(path: str) -> str: + digest = hashlib.sha256() + with open(path, "rb") as f: + for chunk in iter(lambda: f.read(1 << 20), b""): + digest.update(chunk) + return digest.hexdigest() + + def main(dataset_path: str, year: str, out_path: str) -> None: dataset = UKSingleYearDataset(file_path=dataset_path) matrix, targets = create_target_matrix(dataset, time_period=year) @@ -34,6 +43,8 @@ def main(dataset_path: str, year: str, out_path: str) -> None: meta = { "policyengine_uk": version("policyengine-uk"), "policyengine_core": version("policyengine-core"), + "policyengine_uk_data": version("policyengine-uk-data"), + "dataset_sha256": sha256(dataset_path), "year": year, "people": float(sim.calculate("people", int(year)).sum()), "households": float(weights.sum()), diff --git a/scripts/test_extract_uk_release.py b/scripts/test_extract_uk_release.py index 5aa50f1..1af5a51 100644 --- a/scripts/test_extract_uk_release.py +++ b/scripts/test_extract_uk_release.py @@ -8,6 +8,7 @@ import hashlib import json +import re from pathlib import Path import extract_uk_release as ex @@ -208,7 +209,10 @@ def artifacts(tmp_path: Path) -> Path: (d / "registry_targets.json").write_text(json.dumps(REGISTRY)) with open(d / "pinned_target_check.csv", "w") as f: f.write( - "# policyengine_uk=2.126.12\n# policyengine_core=3.33.0\n# year=2025\n# people=40\n# households=1500\n" + "# policyengine_uk=2.126.12\n# policyengine_core=3.33.0\n" + "# policyengine_uk_data=1.58.0\n" + f"# dataset_sha256={_sha(d / 'enhanced_frs_2024_25.h5')}\n" + "# year=2025\n# people=40\n# households=1500\n" ) pd.DataFrame( [(m, t, e * 1.02) for m, t, e in NATIONAL], @@ -339,6 +343,22 @@ def test_scores_the_pinned_run_against_the_targets_calibration_fitted(artifacts) assert vat["target"] == 50.0 +@pytest.mark.parametrize( + "line, replacement", + [ + ("# dataset_sha256=", "# dataset_sha256=0"), # another file + ("# policyengine_uk_data=1.58.0", "# policyengine_uk_data=1.58.1"), + ("# year=2025", "# year=2026"), + ], +) +def test_rejects_a_pinned_check_of_another_file_package_or_year( + artifacts, line, replacement +): + path = artifacts / "pinned_target_check.csv" + path.write_text(path.read_text().replace(line, replacement, 1)) + _expect_error(artifacts, "pinned check has") + + def test_is_deterministic_and_independent_of_log_row_order(artifacts): first = run(artifacts) log = pd.read_csv(artifacts / "constituency_calibration_log.csv") @@ -417,6 +437,12 @@ def test_rejects_repeated_source_households(artifacts): path ) (artifacts / "bundle_manifest.json").write_text(json.dumps(bundle)) + check = artifacts / "pinned_target_check.csv" + check.write_text( + re.sub( + r"# dataset_sha256=\w+", f"# dataset_sha256={_sha(path)}", check.read_text() + ) + ) _expect_error(artifacts, "more than one Output Area") @@ -481,3 +507,89 @@ def test_names_publishers_and_counts_targets_carried_from_an_earlier_year(artifa assert plan["publisher"] == "Explore Education Statistics" assert cal["targetsWithoutYearValue"] == 1 # the Plan 5 target lists only 2024 assert cal["nationalTargetsByArea"] == {"UK": 2, "England": 1} + + +# The extractor's labels, areas, publishers and notes restate the release's +# code. Re-extracting the release can't catch a restatement that has gone +# wrong, so this reads the data package's source directly: +# UK_DATA_SOURCE=/path/to/policyengine-uk-data (at the pinned release). +DATA_SOURCE = __import__("os").environ.get("UK_DATA_SOURCE") + + +def _read(path: str) -> str: + return (Path(DATA_SOURCE) / "policyengine_uk_data" / path).read_text() + + +@pytest.mark.skipif( + not DATA_SOURCE, reason="set UK_DATA_SOURCE to policyengine-uk-data at the pin" +) +def test_area_overrides_and_notes_restate_the_data_package(): + import re + + obr = _read("targets/sources/obr.py") + rows = obr[ + obr.index("benefit_rows = {") : obr.index( + "targets = []", obr.index("benefit_rows = {") + ) + ] + benefit_targets = { + f"obr/{name}" for name in re.findall(r'^\s+"(\w+)": \(', rows, re.M) + } + great_britain = { + m for m, area in ex.AREA_BY_TARGET.items() if area == "Great Britain" + } + # Every DWP benefit row but Child Benefit (HMRC) is a Great Britain line + # built without a country restriction. + assert great_britain == benefit_targets - {"obr/child_benefit"} + assert "countries=" not in rows + assert "which covers Great Britain" in obr + assert '"NI domestic rates"' in obr and "obr/domestic_rates" in ex.AREA_BY_TARGET + assert "_PRIVATE_SCHOOL = {y: 557_000 for y in range(2018, 2032)}" in obr + for figure in ( + "7_700_000", + "4_300_000", + "3_300_000", + "_SS_HEADCOUNT_GROWTH = 1.024", + ): + assert figure in obr + assert 'uprating.loc[row, "2023"]' in _read("targets/compute/income.py") + assert "Borrower counts for England only" in _read("targets/sources/slc.py") + assert "_MORTGAGE_TOTAL = 1_100 * 12 * 7.5e6" in _read("targets/sources/housing.py") + assert "_PROPERTY_INCOME_SCALE = 1.9" in _read("targets/sources/hmrc_spi.py") + land = _read("targets/sources/_land.py") + assert "_ONS_2020_HOUSEHOLD" in land + assert "2025: HOUSEHOLD_LAND_VALUES[2024]" in land + assert 'df["dwellings"] * df["avg_house_price"]' in _read( + "targets/sources/mhclg_regional_land.py" + ) + assert "float(_CGT_TAXPAYERS) for year in range" in _read( + "targets/sources/hmrc_cgt.py" + ) + + +@pytest.mark.skipif( + not DATA_SOURCE, reason="set UK_DATA_SOURCE to policyengine-uk-data at the pin" +) +def test_local_notes_restate_the_loss_builders(): + import re + + uc = _read("targets/sources/local_uc.py") + assert "(positional order)" in uc + assert 'scaled["N"] = gb_bucket_totals.copy()' in uc # NI takes GB's child shares + for area in ("constituencies", "local_authorities"): + loss = _read(f"datasets/local_areas/{area}/loss.py") + assert re.search(r'y\["uc_households"\] = get_\w+_uc_targets\(\)\.values', loss) + assert "y[col] *= uk_total_population / targets_total_pop * 0.9" in loss + assert re.search( + r'y\[f"hmrc/\{income_variable\}/count"\] = \(\s*incomes\[f"\{income_variable\}_count"\]\.values \* adjustment', + loss, + ) + assert "mapping_matrix @ y.values" in _read( + "datasets/local_areas/constituencies/loss.py" + ) + fill = _read( + "datasets/local_areas/local_authorities/targets/create_total_incomes.py" + ) + assert "df[col] = df[col].fillna(avg)" in fill + held = _read("datasets/create_datasets.py") + assert f'VALIDATION_ONLY_LOCAL_TARGETS = ["{ex.HELD_OUT_LOCAL}"]' in held diff --git a/scripts/uk_obr_elasticity_grid.py b/scripts/uk_obr_elasticity_grid.py new file mode 100644 index 0000000..637cb67 --- /dev/null +++ b/scripts/uk_obr_elasticity_grid.py @@ -0,0 +1,85 @@ +"""Print the OBR-method labour supply elasticities policyengine-uk assigns to +every family type, by running its own functions on made-up people. + + uv run --no-project --with numpy --with pandas python \\ + scripts/uk_obr_elasticity_grid.py /path/to/policyengine-uk + +It lifts calculate_labour_substitution_elasticities and +calculate_labour_net_income_elasticities out of dynamics/progression.py and +calls them with a stand-in simulation, so it needs no policyengine-uk install. +Output is JSON: one row per gender, marital status and age of the youngest +child under 18 (null for no children), with both elasticities. +src/test/ukBehavioural.test.tsx compares the page's table with it. +""" + +import ast +import json +import sys +from pathlib import Path + +import numpy as np +import pandas as pd + +FUNCTIONS = ( + "calculate_labour_substitution_elasticities", + "calculate_labour_net_income_elasticities", +) + + +def load_functions(source: Path) -> dict: + tree = ast.parse((source / "policyengine_uk/dynamics/progression.py").read_text()) + found = [n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in FUNCTIONS] + if {n.name for n in found} != set(FUNCTIONS): + raise SystemExit(f"progression.py no longer defines {FUNCTIONS}") + namespace = { + "np": np, + "Simulation": object, + "benunit_age_18_composition": lambda sim, year: sim.composition, + } + exec(compile(ast.Module(body=found, type_ignores=[]), "progression.py", "exec"), namespace) + return {name: namespace[name] for name in FUNCTIONS} + + +class People: + """The variables the two functions read, one entry per person.""" + + def __init__(self, rows: list[dict]): + self.columns = { + "gender": np.array([r["gender"] for r in rows]), + "is_married": np.array([r["married"] for r in rows]), + } + youngest = [r["youngest"] for r in rows] + self.composition = pd.DataFrame( + { + "count_under_18": [0 if y is None else 1 for y in youngest], + "youngest_under_18_age": [-1 if y is None else y for y in youngest], + } + ) + + def calculate(self, name, year=None, map_to=None): + return self.columns[name] + + +def grid() -> list[dict]: + return [ + {"gender": gender, "married": married, "youngest": youngest} + for gender in ("FEMALE", "MALE") + for married in (True, False) + for youngest in [None, *range(18)] + ] + + +def main(source: str) -> None: + functions = load_functions(Path(source)) + rows = grid() + people = People(rows) + substitution = functions[FUNCTIONS[0]](people) + income = functions[FUNCTIONS[1]](people) + for row, s, i in zip(rows, substitution, income): + row["substitution"] = round(float(s), 6) + row["income"] = round(float(i), 6) + json.dump(rows, sys.stdout) + + +if __name__ == "__main__": + main(sys.argv[1]) diff --git a/src/components/theory/UkBehaviouralResponses.tsx b/src/components/theory/UkBehaviouralResponses.tsx index 0b94f81..67c35b1 100644 --- a/src/components/theory/UkBehaviouralResponses.tsx +++ b/src/components/theory/UkBehaviouralResponses.tsx @@ -44,13 +44,16 @@ export default function UkBehaviouralResponses() {

Pay under employer National Insurance and salary sacrifice reforms

When a reform changes employer National Insurance, through its rate, its threshold or its treatment of - employer pension contributions, the model holds what each employer pays for each employee fixed, and by - default passes the whole change through to pay. Pay below the employer threshold stays as it was. + employer pension contributions, the model sets pay with a formula meant to keep what each employer pays for + each employee the same, and by default passes the whole change through to pay. The formula assumes pay + stays above the reform’s employer threshold, so a reform that lifts the threshold past someone’s pay can + raise what their employer pays. Pay below the baseline employer threshold stays as it was.

When a cap on salary-sacrificed pension contributions free of National Insurance applies, as the model’s - current law has it from April 2029, contributions above the cap return to pay, and every worker’s pay falls - by 0.16%, the parameter’s estimate of employers spreading the extra National Insurance across all staff. + current law has it from April 2029, contributions above the cap return to pay. A separate haircut takes + 0.16% off every worker’s employment income before these adjustments, the parameter’s estimate of employers + spreading the extra National Insurance across all staff.

@@ -120,15 +123,16 @@ export default function UkBehaviouralResponses() {

Capital gains

An elasticity of realised gains with respect to the retention rate sets how gains respond, and it is 0 by - default. The retention rate is one minus the person’s marginal rate on gains, which the model measures as - the rise in household net income from £1,000 more gains (or 0.1% of their gains, if larger), for the two - adults in each household with the largest gains before the response; it counts as at least 0.001. Under a + default. The retention rate is the share of extra gains a household keeps: the model adds £1,000 of gains + (or 0.1% of the person’s gains, if larger) and divides the rise in household net income by the rise in + gains, for the two adults in each household with the largest gains before the response. It counts as at + least 0.001. Under a reform, each person’s gains scale by the ratio of their reform to baseline retention rates, raised to the elasticity. Gains that qualify for Business Asset Disposal Relief can take their own elasticity, 1.4, which the parameter cites to the OBR’s{' '} January 2025 capital gains tax costing; until that - switch is on, they take the main elasticity. A tax-rate elasticity offers the same response in another - convention, and the model refuses to run with both set. + switch is on, they take the main elasticity. A tax-rate elasticity instead bases the response on the change + in the marginal rate itself, and the model refuses to run with both set.

diff --git a/src/data/microsimSteps.ts b/src/data/microsimSteps.ts index d064634..c5f2d80 100644 --- a/src/data/microsimSteps.ts +++ b/src/data/microsimSteps.ts @@ -53,9 +53,9 @@ function reformTax(earnings: number, children: number, creditPerChild: number): return Math.max(0, base - credit); } -// A fixed credit per child leaves each family's marginal tax rate where it was, -// so it has no substitution effect. It raises net income, so the example -// applies an income elasticity to the credit's share of net income. +// The example models only the income effect: the credit raises net income, +// and earnings respond through an income elasticity applied to the credit's +// share of net income. const INCOME_ELASTICITY = -0.05; export function behavioralEarnings(earnings: number, children: number, creditPerChild: number): number { diff --git a/src/data/sectionOverviews.ts b/src/data/sectionOverviews.ts index c5d098f..1ea689f 100644 --- a/src/data/sectionOverviews.ts +++ b/src/data/sectionOverviews.ts @@ -66,13 +66,13 @@ export const dataSection: Record = { { label: 'Pipeline', description: - 'Each stage that turns survey and tax records into PolicyEngine-ready microdata.', + 'Each stage that turns raw CPS, FRS, and SCF records into PolicyEngine-ready microdata.', path: '/data/pipeline', }, { label: 'Calibration targets', description: - 'The population totals (program enrollment, income aggregates, demographic counts) used to reweight the underlying survey.', + 'The population totals (program enrolment, income aggregates, demographic counts) used to reweight the underlying survey.', path: '/data/calibration', }, { diff --git a/src/data/ukBehaviouralResponses.ts b/src/data/ukBehaviouralResponses.ts index 560e1da..3313f6f 100644 --- a/src/data/ukBehaviouralResponses.ts +++ b/src/data/ukBehaviouralResponses.ts @@ -36,7 +36,7 @@ export interface ParameterRow { export const payParameters: ParameterRow[] = [ { path: 'gov.contrib.policyengine.employer_ni.employee_incidence', label: 'Share of a change in employer National Insurance passed to pay', value: '1 (100%)' }, { path: 'gov.hmrc.national_insurance.salary_sacrifice_pension_cap', label: 'Cap on salary-sacrificed pension contributions free of National Insurance', value: 'None until 5 April 2029, then £2,000' }, - { path: 'gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate', label: 'Cut to every worker’s pay while that cap applies', value: '0.0016 (0.16%)' }, + { path: 'gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate', label: 'Haircut on every worker’s employment income while that cap applies', value: '0.0016 (0.16%)' }, ]; /** Simulation parameters: elasticities applied inside a reform simulation. */ @@ -54,11 +54,19 @@ export const capitalGainsParameters: ParameterRow[] = [ { path: 'gov.simulation.capital_gains_responses.mtr_elasticity', label: 'Tax-rate elasticity (alternative convention)', value: '0' }, ]; +/** Who a row covers: gender, marital status, and the youngest child's age (none, or an inclusive range). */ +export interface ElasticityCase { + gender: 'FEMALE' | 'MALE'; + married: boolean; + youngest: 'none' | [number, number]; +} + export interface ElasticityRow { group: string; youngestChild: string; substitution: number; income: number; + covers: ElasticityCase[]; } /** @@ -67,16 +75,26 @@ export interface ElasticityRow { * couple when no input says otherwise. Children are benefit-unit members * under 18. Unmarried men with children get no elasticity. */ +const W = (married: boolean, youngest: ElasticityCase['youngest']): ElasticityCase => ({ gender: 'FEMALE', married, youngest }); +const M = (married: boolean, youngest: ElasticityCase['youngest']): ElasticityCase => ({ gender: 'MALE', married, youngest }); +const ANY_CHILD: [number, number] = [0, 17]; + export const obrElasticities: ElasticityRow[] = [ - { group: 'Married women', youngestChild: 'No children', substitution: 0.14, income: 0 }, - { group: 'Married women', youngestChild: '0–2', substitution: 0.301, income: -0.185 }, - { group: 'Married women', youngestChild: '3–4', substitution: 0.439, income: -0.173 }, - { group: 'Married women', youngestChild: '5–10', substitution: 0.173, income: -0.102 }, - { group: 'Married women', youngestChild: '11–17', substitution: 0.16, income: -0.063 }, - { group: 'Unmarried women with children', youngestChild: '0–4', substitution: 0.094, income: -0.037 }, - { group: 'Unmarried women with children', youngestChild: '5–10', substitution: 0.128, income: -0.075 }, - { group: 'Unmarried women with children', youngestChild: '11–17', substitution: 0.136, income: -0.054 }, - { group: 'Unmarried women without children', youngestChild: '–', substitution: 0.15, income: -0.05 }, - { group: 'Men, except unmarried men with children', youngestChild: '–', substitution: 0.15, income: -0.05 }, - { group: 'Unmarried men with children', youngestChild: '–', substitution: 0, income: 0 }, + { group: 'Married women', youngestChild: 'No children', substitution: 0.14, income: 0, covers: [W(true, 'none')] }, + { group: 'Married women', youngestChild: '0–2', substitution: 0.301, income: -0.185, covers: [W(true, [0, 2])] }, + { group: 'Married women', youngestChild: '3–4', substitution: 0.439, income: -0.173, covers: [W(true, [3, 4])] }, + { group: 'Married women', youngestChild: '5–10', substitution: 0.173, income: -0.102, covers: [W(true, [5, 10])] }, + { group: 'Married women', youngestChild: '11–17', substitution: 0.16, income: -0.063, covers: [W(true, [11, 17])] }, + { group: 'Unmarried women with children', youngestChild: '0–4', substitution: 0.094, income: -0.037, covers: [W(false, [0, 4])] }, + { group: 'Unmarried women with children', youngestChild: '5–10', substitution: 0.128, income: -0.075, covers: [W(false, [5, 10])] }, + { group: 'Unmarried women with children', youngestChild: '11–17', substitution: 0.136, income: -0.054, covers: [W(false, [11, 17])] }, + { group: 'Unmarried women without children', youngestChild: '–', substitution: 0.15, income: -0.05, covers: [W(false, 'none')] }, + { + group: 'Men, except unmarried men with children', + youngestChild: '–', + substitution: 0.15, + income: -0.05, + covers: [M(true, 'none'), M(true, ANY_CHILD), M(false, 'none')], + }, + { group: 'Unmarried men with children', youngestChild: '–', substitution: 0, income: 0, covers: [M(false, ANY_CHILD)] }, ]; diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index db60ffb..36540d6 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -89,7 +89,7 @@ { "label": "Population by ten-year age band, 0 to 79", "source": "ONS mid-year population estimates", - "note": "Rescaled so every area's bands add to 90% of the UK population", + "note": "Rescaled so the bands across all areas together add to 90% of the UK population", "metrics": 8, "heldOut": false, "cells": 5200, @@ -177,7 +177,7 @@ { "label": "Population by ten-year age band, 0 to 79", "source": "ONS mid-year population estimates", - "note": "Rescaled so every area's bands add to 90% of the UK population", + "note": "Rescaled so the bands across all areas together add to 90% of the UK population", "metrics": 8, "heldOut": false, "cells": 2880, @@ -302,7 +302,7 @@ "label": "Salary sacrifice users, in total and either side of the \u00a32,000 cap", "publisher": "HM Treasury and HMRC", "geography": "UK", - "note": null, + "note": "2024 users set in the build (7.7 million; 4.3 million at or below the cap, 3.3 million above), grown 2.4% a year; the \u00a32,000 test uses 2023 prices", "units": [ "count" ], @@ -571,7 +571,7 @@ "label": "Pupils at independent schools", "publisher": "Independent Schools Council census", "geography": "UK", - "note": null, + "note": "557,000 in every year from 2018 to 2031, a figure set in the build", "units": [ "count" ], @@ -1196,7 +1196,7 @@ "label": "Household land value by region", "publisher": "ONS", "geography": "Region", - "note": null, + "note": "The household total shared out by each region's dwellings times its average house price", "units": [ "gbp" ], @@ -1269,7 +1269,7 @@ "label": "Corporate land value", "publisher": "ONS", "geography": "UK", - "note": null, + "note": "ONS's 2024 total land value times the 2020 corporate share, held flat for 2025", "units": [ "gbp" ], @@ -1288,7 +1288,7 @@ "label": "Household land value", "publisher": "ONS", "geography": "UK", - "note": null, + "note": "ONS's 2024 total land value times the 2020 household share, held flat for 2025", "units": [ "gbp" ], @@ -1364,7 +1364,7 @@ "label": "Total land value", "publisher": "ONS", "geography": "UK", - "note": null, + "note": "ONS's 2024 total, held flat for 2025", "units": [ "gbp" ], diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index 23b21e5..2fed82a 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -73,7 +73,7 @@ export const ukPipelineStages: PipelineStage[] = [ icon: 'coin', inputSize: `${f.baseHouseholds} households`, outputSize: `${f.baseHouseholds} households`, - dataSources: ['Wealth and Assets Survey Round 8', 'UK House Price Index'], + dataSources: ['Wealth and Assets Survey Round 8', 'Regional house prices the build stores (attributed to the UK HPI)'], details: [ '11 predictors: household net income; adults; children; employment, self-employment, private pension and capital income; bedrooms; council tax; renting; region', 'The forest’s regions stop at Great Britain, so it treats Northern Ireland households as if they lived in Wales', @@ -81,7 +81,7 @@ export const ukPipelineStages: PipelineStage[] = [ 'This stage runs before the spending stage, which uses the imputed number of vehicles', ], imputations: [ - { name: 'Main residence value', source: 'WAS Round 8, UK HPI', method: 'Quantile random forest, rescaled to regional means' }, + { name: 'Main residence value', source: 'WAS Round 8, stored regional house prices', method: 'Quantile random forest, rescaled to regional means' }, { name: 'Property and corporate wealth; gross and net financial wealth', source: 'WAS Round 8', method: 'Quantile random forest' }, { name: 'Other residential and non-residential property, land', source: 'WAS Round 8', method: 'Quantile random forest' }, { name: 'Savings', source: 'WAS Round 8', method: 'Quantile random forest' }, @@ -97,12 +97,12 @@ export const ukPipelineStages: PipelineStage[] = [ description: 'A quantile random forest trained on the Living Costs and Food Survey 2023-24 (UK Data Service study 9468) ' + 'imputes spending, so PolicyEngine UK can model VAT, duties and energy policy. Petrol and diesel spending ' + - 'depend on whether a household runs a fuel-burning car: the build flags 90% of households with a vehicle ' + - 'from the wealth stage, at random, a share its code attributes to the National Travel Survey 2024.', + 'depend on whether a household runs a fuel-burning car: the build gives each household with a vehicle from ' + + 'the wealth stage a 90% chance of that flag, a share its code attributes to the National Travel Survey 2024.', icon: 'shopping-cart', inputSize: `${f.baseHouseholds} households`, outputSize: `${f.baseHouseholds} households`, - dataSources: ['Living Costs and Food Survey 2023-24', 'NEED 2023', 'National Travel Survey 2024'], + dataSources: ['Living Costs and Food Survey 2023-24', 'Energy use targets set in the build (attributed to NEED 2023)', 'Car fuel share set in the build (attributed to the NTS 2024)'], details: [ '10 predictors: adults, children, region, employment income, self-employment income, private pension income, household net income, tenure, accommodation type, and fuel-burning car', '18 outputs: the 12 COICOP spending categories, petrol, diesel, bus fares, domestic energy, electricity and gas', @@ -111,9 +111,9 @@ export const ukPipelineStages: PipelineStage[] = [ ], imputations: [ { name: '12 COICOP spending categories', source: 'LCFS 2023-24', method: 'Quantile random forest' }, - { name: 'Petrol and diesel spending', source: 'LCFS 2023-24, NTS 2024', method: 'Quantile random forest, given a fuel-burning car' }, + { name: 'Petrol and diesel spending', source: 'LCFS 2023-24, assumed car fuel share', method: 'Quantile random forest, given a fuel-burning car' }, { name: 'Bus fares', source: 'LCFS 2023-24', method: 'Quantile random forest' }, - { name: 'Electricity and gas', source: 'LCFS 2023-24, NEED 2023', method: 'Quantile random forest, raked to NEED' }, + { name: 'Electricity and gas', source: 'LCFS 2023-24, energy targets set in the build', method: 'Quantile random forest, raked to the build’s energy targets' }, ], }, { @@ -157,7 +157,7 @@ export const ukPipelineStages: PipelineStage[] = [ outputSize: `${fmtInt(stacked)} households`, dataSources: ['HMRC Survey of Personal Incomes 2022-23'], details: [ - 'One quantile random forest per earnings group (none, employee, self-employed, both) predicts incomes from age, sex and region; together they train on 100,000 SPI records drawn by weight with replacement, split across the groups by weight with at least 10,000 each', + 'One quantile random forest per earnings group (none, employee, self-employed, both) predicts incomes from age, sex and region; they train on a nominal 100,000 SPI records drawn by weight with replacement, shared across the groups by weight with at least 10,000 per group, so the floors can take the total above 100,000', 'Copies get all six income types plus Gift Aid and charitable gifts of investments; the original FRS households get only dividend income. Children keep their own values in this step', 'A second forest re-imputes each copy’s pension contributions, tax-free savings income and benefit reports from its new incomes', 'The build then zeroes 14 of each copy’s benefit reports, among them the means-tested benefits, contributory ESA and JSA, and Child Benefit; restores its industrial injuries, armed forces compensation and bereavement support reports; and redraws its Universal Credit and Pension Credit claim flags', @@ -201,16 +201,16 @@ export const ukPipelineStages: PipelineStage[] = [ icon: 'school', inputSize: `${f.households} households`, outputSize: `${f.households} households`, - dataSources: ['FRS 2024-25', 'Student Loans Company', 'DWP take-up statistics'], + dataSources: ['FRS 2024-25', 'Student loan borrower counts the build stores', 'Pension Credit take-up rate set in the data package'], details: [ 'Salary sacrifice: a forest on age and employment income fills in people the FRS did not ask about salary sacrifice, then the build switches employed pension contributors to salary sacrifice at random, aiming for about 5.4 million users for calibration to fit', - 'Student loans: people repaying through PAYE get Plan 1, 2 or 5 from their estimated university start year, in every nation; in England, the build then gives Plan 2 or Plan 5 at random to people with tertiary education in the matching age band who do not repay, so the expected number at survey weights matches the Student Loans Company’s count of borrowers liable to repay', - 'Pension Credit: the build solves the claim probability for entitled families so that, in expectation at survey weights, take-up in Great Britain equals DWP’s caseload take-up rate; FRS families that report Pension Credit keep claiming (top-income copies’ predicted reports do not count), and entitled families in Northern Ireland draw at the same probability', + 'Student loans: people repaying through PAYE get Plan 1, 2 or 5 from their estimated university start year, in every nation; in England, the build then gives Plan 2 or Plan 5 at random to people with tertiary education in the matching age band who do not repay, so the expected number at survey weights matches the stored count of borrowers liable to repay, which the build takes from the student loan forecasts for England', + 'Pension Credit: the build solves the claim probability for entitled families so that, in expectation at survey weights, take-up in Great Britain equals the data package’s caseload take-up rate, which it cites to DWP; FRS families that report Pension Credit keep claiming (top-income copies’ predicted reports do not count), and entitled families in Northern Ireland draw at the same probability', ], imputations: [ { name: 'Salary sacrifice pension contributions', source: 'FRS 2024-25', method: 'Quantile random forest, then random switching' }, - { name: 'Student loan plan', source: 'Student Loans Company totals', method: 'Rules, then random assignment in England' }, - { name: 'Pension Credit claim flags', source: 'DWP take-up rate', method: 'Probability solved over entitled families in Great Britain' }, + { name: 'Student loan plan', source: 'Stored borrower counts for England', method: 'Rules, then random assignment in England' }, + { name: 'Pension Credit claim flags', source: 'Take-up rate in the data package', method: 'Probability solved over entitled families in Great Britain' }, ], }, { diff --git a/src/test/ukBehavioural.test.tsx b/src/test/ukBehavioural.test.tsx index 7f57c30..1916ff6 100644 --- a/src/test/ukBehavioural.test.tsx +++ b/src/test/ukBehavioural.test.tsx @@ -1,3 +1,4 @@ +import { execFileSync } from 'node:child_process'; import { existsSync, readFileSync } from 'node:fs'; import { join } from 'node:path'; import { describe, expect, it, vi } from 'vitest'; @@ -100,18 +101,47 @@ describe.skipIf(!source)('UK behavioural values match policyengine-uk', () => { } }); - it('matches the OBR-method elasticities in dynamics/progression.py', () => { - const code = read('dynamics/progression.py'); - const body = (name: string) => { - const start = code.indexOf(`def ${name}`); - return code.slice(start, code.indexOf('return elasticities', start)); - }; - // Non-zero literals assigned in each function, as a sorted multiset. - const literals = (text: string) => - [...text.matchAll(/(? Number(m[0])).filter((x) => x !== 0).sort((a, b) => a - b); - const shown = (key: 'substitution' | 'income') => - obrElasticities.map((r) => r[key]).filter((x) => x !== 0).sort((a, b) => a - b); - expect(literals(body('calculate_labour_substitution_elasticities'))).toEqual(shown('substitution')); - expect(literals(body('calculate_labour_net_income_elasticities'))).toEqual(shown('income')); + it('matches the OBR-method elasticities policyengine-uk assigns to every family type', () => { + // scripts/uk_obr_elasticity_grid.py runs dynamics/progression.py's own + // functions on made-up people of every gender, marital status and youngest + // child age. + type Cell = { gender: string; married: boolean; youngest: number | null; substitution: number; income: number }; + const grid: Cell[] = JSON.parse( + execFileSync('uv', ['run', '--no-project', '--with', 'numpy', '--with', 'pandas', 'python', '-I', 'scripts/uk_obr_elasticity_grid.py', source!], { + encoding: 'utf8', + }), + ); + const covered = new Set(); + for (const row of obrElasticities) { + for (const c of row.covers) { + const cells = grid.filter( + (g) => + g.gender === c.gender && + g.married === c.married && + (c.youngest === 'none' ? g.youngest === null : g.youngest !== null && g.youngest >= c.youngest[0] && g.youngest <= c.youngest[1]), + ); + expect(cells.length).toBeGreaterThan(0); + for (const g of cells) { + expect([row.group, row.youngestChild, g.substitution, g.income]).toEqual([row.group, row.youngestChild, row.substitution, row.income]); + covered.add(g); + } + } + } + // Every family type the module distinguishes appears on the page exactly once. + expect(covered.size).toBe(grid.length); + expect(obrElasticities.flatMap((r) => r.covers).length).toBe(new Set(obrElasticities.flatMap((r) => r.covers.map((c) => JSON.stringify(c)))).size); + }); + + it('describes the pay channels as policyengine-uk computes them', () => { + const employer = read('variables/contrib/policyengine/employer_ni/employer_ni_fixed_employer_cost_change.py'); + expect(employer).toMatch(/if employee_incidence == 0:\s*\n\s*return 0/); + expect(employer).toMatch(/c_b = ni_class_1_income \+ baseline_employer_ni/); // the employer's baseline cost + expect(employer).toMatch(/new_ni_class_1_income = \(c_b \+ r_r \* \(pen_con_subtracted_r \+ t_r\)\) \/ \(1 \+ r_r\)/); // above-threshold algebra + expect(employer).toMatch(/below_threshold = previous_employment_income < t_b/); // the baseline threshold + const haircut = read('variables/gov/hmrc/national_insurance/salary_sacrifice_broad_base_haircut.py'); + expect(haircut).toMatch(/return -employment_income \* haircut_rate/); + expect(haircut).toMatch(/if np\.isinf\(cap\):\s*\n\s*return 0/); + const returned = read('variables/gov/hmrc/pensions/salary_sacrifice_returned_to_income.py'); + expect(returned).toMatch(/excess = max_\(intended_ss - cap, 0\)/); }); }); diff --git a/src/views/data/UkCalibrationPage.tsx b/src/views/data/UkCalibrationPage.tsx index 2f982d2..34adc32 100644 --- a/src/views/data/UkCalibrationPage.tsx +++ b/src/views/data/UkCalibrationPage.tsx @@ -59,7 +59,7 @@ const noteStyle = { function LocalTable({ local, areaName }: { local: UkLocalCalibration; areaName: string }) { return ( - + {local.families.map((fam) => ( @@ -129,14 +129,15 @@ export default function UkCalibrationPage() { At epoch {cal.epoch}, {fmtPct(cal.nationalWithin10)} of the {fmtInt(scored)} non-zero targets lie within 10% of their value, and {fmtPct(cal.nationalWithin5)} within 5%. Each target counts once, whatever its size, so a share says nothing about how far the misses are; the{' '} - validation page gives each OBR line’s gap. + validation page gives each OBR line’s gap. Each family’s + source links to the reference the build records for it. {zeroTargets.length > 0 && ` Relative error is undefined for a target of zero, so the shares leave out ${zeroTargets .map((r) => `${r.id}, in “${r.group}”, where calibration estimates ${fmtTarget(r.calibrationEstimate, r.unit)}`) .join(', ')}.`}

- - + + {groups.map((g) => ( diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index d7429c4..484fea3 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -77,7 +77,7 @@ const KNOWN_ISSUES: { repo: string; n: number; text: string }[] = [ { repo: 'policyengine-uk-data', n: 588, - text: 'The OBR’s DWP benefit lines cover Great Britain, but the release scores them on every UK household, Northern Ireland’s included.', + text: 'The OBR’s DWP benefit lines cover Great Britain, but apart from Universal Credit the release scores them on every UK household, Northern Ireland’s included.', }, { repo: 'policyengine-uk-data', @@ -182,7 +182,8 @@ export default function UkValidationPage() {

Each PolicyEngine UK figure follows the release’s scoring for that target, which can sum a different variable from the one the line names, or only some nations’ households. The OBR’s lines for DWP benefits cover Great - Britain, but the release scores them on every UK household. The disability line combines Disability Living + Britain; except for Universal Credit, the release scores them on every UK household, Northern Ireland’s + included. The disability line combines Disability Living Allowance and PIP, against modelled PIP alone. The UK council tax line also includes Northern Ireland domestic rates and an accruals adjustment, which the model’s council tax leaves out. Fuel duty is the duty on households’ car fuel, against all fuel duty receipts. @@ -202,7 +203,7 @@ export default function UkValidationPage() {

Share of each family’s non-zero targets within 10%, at calibration’s epoch {cal.epoch} and with the pinned model. The calibration targets page lists each family’s - publisher and area. + source and area.

{cal.nationalGroups.map((g) => ( From 22c3b040e2febf88df67cfc614a8a00742ed5331 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 20 Oct 2026 20:53:37 -0400 Subject: [PATCH 26/30] Move the UK pages to the pin in policyengine.py 6.9.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit policyengine.py 6.5.0 through 6.9.0 pin policyengine-uk 2.130.1 and policyengine-uk-data 1.58.1 (enhanced_frs_2024_25, sha256 056e80fd…). The pages described 6.3.4's pin (2.126.12, 1.58.0). - Re-extracted from the 1.58.1 release: - all four files match the manifest; - calibration logs from publish run 38519051399, epoch 510; - the 1.58.1 registry; - the target check re-run with policyengine-uk 2.130.1 and core 3.33.0. - What moved: pinned fit within 10% is now 78.3% (was 73.6%) and within 5% 61.3% (was 52.2%); calibration fit is now 86.8% and 67.4% at epoch 510; the SPI lineage share is 27.8%. No target value changes on rebuild. The composition and weight factor are unchanged, so the runtime shortfall stays 0.44%. - Copy, from the 1.58.0 → 1.58.1 diff: - salary sacrifice amounts are held to pay, the forest trains on respondents with pay, and converted donors' contributions come out of pay; - the £2,000 headcount test uses contributions as simulated, no longer deflated to 2023 prices. - Copy, from policyengine.py 6.9.0's packaged area lists (650 constituencies, 361 local authorities): Northern Ireland's areas and the four 2023 unitaries have no Output Area households, so analyses of them stop with an error. - policyengine-uk 2.126.12 → 2.130.1 changes no behavioural parameter, formula or elasticity the page states. The page now takes policyengine.py's version from the release, and a test fails whenever UK_MODEL_VERSION and the pin differ. - Review finding 5: bus trip rates are described as stored in the build, attributed to the NTS by its code. Co-Authored-By: Claude Opus 5.5 --- scripts/dump_uk_target_registry.py | 6 +- scripts/extract_uk_release.py | 4 +- scripts/run_uk_target_check.py | 6 +- scripts/test_extract_uk_release.py | 9 +- .../theory/UkBehaviouralResponses.tsx | 3 +- src/data/ukBehaviouralResponses.ts | 6 +- src/data/ukDataRelease.json | 133 ++++++++---------- src/data/ukPipelineStages.ts | 6 +- src/data/ukTargetChecks.json | 2 +- src/test/ukDataPages.test.tsx | 7 + src/views/data/UkValidationPage.tsx | 2 +- 11 files changed, 95 insertions(+), 89 deletions(-) diff --git a/scripts/dump_uk_target_registry.py b/scripts/dump_uk_target_registry.py index 4c3475b..93270e6 100644 --- a/scripts/dump_uk_target_registry.py +++ b/scripts/dump_uk_target_registry.py @@ -1,12 +1,12 @@ """Dump policyengine-uk-data's calibration target registry to JSON. Run it against the data package at the release tag, with the model version -that built the release, e.g. for policyengine-uk-data 1.58.0: +that built the release, e.g. for policyengine-uk-data 1.58.1: - git -C policyengine-uk-data archive 1.58.0 | tar -x -C /tmp/uk-data-1.58.0 + git -C policyengine-uk-data archive 1.58.1 | tar -x -C /tmp/uk-data-1.58.1 uv run --no-project --python 3.13 --with policyengine-uk==2.122.2 \\ --with policyengine-core==3.32.13 --with pydantic --with pyyaml \\ - --with /tmp/uk-data-1.58.0 python scripts/dump_uk_target_registry.py registry_targets.json + --with /tmp/uk-data-1.58.1 python scripts/dump_uk_target_registry.py registry_targets.json The registry reads only target statistics bundled with the package, no microdata. """ diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index a17b943..de61386 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -197,8 +197,8 @@ def area_override(metric: str) -> str | None: None, ): ( "2024 users set in the build (7.7 million; 4.3 million at or below the " - "cap, 3.3 million above), grown 2.4% a year; the £2,000 test uses 2023 " - "prices" + "cap, 3.3 million above), grown 2.4% a year; the £2,000 test uses " + "contributions as the model runs them, which it does not uprate" ), ("hmrc", "capital_gains", "national", None): ( "2023-24 outturn: gains uprated to 2025, taxpayer counts held flat" diff --git a/scripts/run_uk_target_check.py b/scripts/run_uk_target_check.py index 3e292be..3ad4450 100644 --- a/scripts/run_uk_target_check.py +++ b/scripts/run_uk_target_check.py @@ -5,10 +5,10 @@ against the same national targets the release was calibrated to. It writes one row per target (aggregates only). - git -C policyengine-uk-data archive 1.58.0 | tar -x -C /tmp/uk-data-1.58.0 - uv run --no-project --python 3.13 --with policyengine-uk==2.126.12 \\ + git -C policyengine-uk-data archive 1.58.1 | tar -x -C /tmp/uk-data-1.58.1 + uv run --no-project --python 3.13 --with policyengine-uk==2.130.1 \\ --with policyengine-core==3.33.0 --with pydantic --with pyyaml \\ - --with /tmp/uk-data-1.58.0 python scripts/run_uk_target_check.py \\ + --with /tmp/uk-data-1.58.1 python scripts/run_uk_target_check.py \\ /enhanced_frs_2024_25.h5 2025 /pinned_target_check.csv """ diff --git a/scripts/test_extract_uk_release.py b/scripts/test_extract_uk_release.py index 1af5a51..0d6136b 100644 --- a/scripts/test_extract_uk_release.py +++ b/scripts/test_extract_uk_release.py @@ -552,7 +552,14 @@ def test_area_overrides_and_notes_restate_the_data_package(): "_SS_HEADCOUNT_GROWTH = 1.024", ): assert figure in obr - assert 'uprating.loc[row, "2023"]' in _read("targets/compute/income.py") + # The £2,000 test applies to contributions as simulated, not deflated. + assert "mask = (ss > 0) & (ss <= 2000)" in _read("targets/compute/income.py") + assert ( + "contributions as the model runs them" + in ex.GROUP_NOTES[ + ("obr", "pension_contributions_via_salary_sacrifice", "national", None) + ] + ) assert "Borrower counts for England only" in _read("targets/sources/slc.py") assert "_MORTGAGE_TOTAL = 1_100 * 12 * 7.5e6" in _read("targets/sources/housing.py") assert "_PROPERTY_INCOME_SCALE = 1.9" in _read("targets/sources/hmrc_spi.py") diff --git a/src/components/theory/UkBehaviouralResponses.tsx b/src/components/theory/UkBehaviouralResponses.tsx index 67c35b1..5c14cdd 100644 --- a/src/components/theory/UkBehaviouralResponses.tsx +++ b/src/components/theory/UkBehaviouralResponses.tsx @@ -9,6 +9,7 @@ import { type ParameterRow, } from '../../data/ukBehaviouralResponses'; import { DataTable, ExternalLink, bodyText, cell, sectionHeading } from '../../views/data/ukTables'; +import { ukRelease } from '../../data/ukDataRelease'; const fmtElasticity = (x: number) => (x === 0 ? '0' : x < 0 ? `−${Math.abs(x).toFixed(3).replace(/0+$/, '')}` : x.toFixed(3).replace(/0+$/, '')); @@ -35,7 +36,7 @@ export default function UkBehaviouralResponses() { return (

- In policyengine-uk {UK_MODEL_VERSION}, the version policyengine.py 6.3.4 pins, the labour supply and capital + In policyengine-uk {UK_MODEL_VERSION}, the version policyengine.py {ukRelease.release.policyengine} pins, the labour supply and capital gains responses below are off by default. Two modelling assumptions do change pay by default, under reforms to employer National Insurance or to salary sacrifice.

diff --git a/src/data/ukBehaviouralResponses.ts b/src/data/ukBehaviouralResponses.ts index 3313f6f..c5c9e61 100644 --- a/src/data/ukBehaviouralResponses.ts +++ b/src/data/ukBehaviouralResponses.ts @@ -1,6 +1,6 @@ /** - * PolicyEngine UK's behavioural responses, as policyengine-uk 2.126.12 (the - * version policyengine.py 6.3.4 pins) defines them. Values mirror: + * PolicyEngine UK's behavioural responses, as policyengine-uk 2.130.1 (the + * version policyengine.py 6.9.0 pins) defines them. Values mirror: * - parameters/gov/simulation/labour_supply_responses/*.yaml * - parameters/gov/simulation/capital_gains_responses/*.yaml * - parameters/gov/contrib/policyengine/employer_ni/employee_incidence.yaml, @@ -12,7 +12,7 @@ * UK_MODEL_SOURCE points at a policyengine-uk checkout. */ -export const UK_MODEL_VERSION = '2.126.12'; +export const UK_MODEL_VERSION = '2.130.1'; const REPO = 'https://github.com/PolicyEngine/policyengine-uk'; export const ukSourceLinks = { diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index 36540d6..58e3ff4 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -1,20 +1,20 @@ { "schemaVersion": 1, "release": { - "policyengine": "6.3.4", - "modelVersion": "2.126.12", + "policyengine": "6.9.0", + "modelVersion": "2.130.1", "dataPackage": "policyengine-uk-data", - "dataVersion": "1.58.0", - "releaseManifestRevision": "0aa3eee1cdae8f8125f4aff126a8f01957595dc3", + "dataVersion": "1.58.1", + "releaseManifestRevision": "89be6b73fc1e6eeba6dae2f9400676d8510bcd51", "defaultDataset": "enhanced_frs_2024_25", "regionDatasets": [ "national" ], - "datasetSha256": "5ba399ea5ab9a6c7d4e9aaf6c623080beb34d9ad5f330f6244dbad72b8d960b6", - "builtAt": "2026-10-07T17:31:53.189867Z", + "datasetSha256": "056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784", + "builtAt": "2026-10-14T07:43:49.920588Z", "builtWithModelVersion": "2.122.2", "builtWithCoreVersion": "3.32.13", - "dataGitSha": "4cbedbecca352f52dffe47e849553c2759a00711" + "dataGitSha": "daad71cd26c107f1b784ff600d1464ba59c70e4a" }, "base": { "households": 16288, @@ -28,7 +28,7 @@ "households": 52846, "benefitUnits": 61214, "people": 113589, - "weightedHouseholds": 31021756, + "weightedHouseholds": 30943898, "timePeriod": "2024", "dataset": "enhanced_frs_2024_25", "composition": { @@ -36,7 +36,7 @@ "spiCopies": 10000, "capitalGainsCopies": 26288, "cgtBandDonors": 270, - "spiWeightShare": 0.2803 + "spiWeightShare": 0.2777 }, "geography": { "outputAreaDrawsPerHousehold": 1, @@ -70,8 +70,8 @@ "epoch": 510, "nationalTargets": 645, "nationalZeroTargets": 1, - "nationalWithin10": 0.869565, - "nationalWithin5": 0.661491, + "nationalWithin10": 0.868012, + "nationalWithin5": 0.673913, "constituency": { "areas": 650, "metrics": 21, @@ -79,11 +79,11 @@ "cellsWithoutSource": 0, "structuralZeroCells": 2422, "trainingCells": 10578, - "trainingWithin10": 0.959633, + "trainingWithin10": 0.96436, "heldOut": { "metric": "hmrc/employment_income/count", "cells": 650, - "within10": 0.375385 + "within10": 0.341538 }, "families": [ { @@ -93,7 +93,7 @@ "metrics": 8, "heldOut": false, "cells": 5200, - "within10": 0.933462 + "within10": 0.939615 }, { "label": "Employment income of income taxpayers", @@ -102,7 +102,7 @@ "metrics": 1, "heldOut": false, "cells": 650, - "within10": 0.998462 + "within10": 1.0 }, { "label": "Income taxpayers with employment income", @@ -111,7 +111,7 @@ "metrics": 1, "heldOut": true, "cells": 650, - "within10": 0.375385 + "within10": 0.341538 }, { "label": "Self-employment income: taxpayers and amount", @@ -120,7 +120,7 @@ "metrics": 2, "heldOut": false, "cells": 1300, - "within10": 0.983846 + "within10": 0.987692 }, { "label": "Universal Credit households", @@ -129,7 +129,7 @@ "metrics": 1, "heldOut": false, "cells": 650, - "within10": 0.993846 + "within10": 0.990769 }, { "label": "Universal Credit households by number of children", @@ -138,7 +138,7 @@ "metrics": 4, "heldOut": false, "cells": 2600, - "within10": 0.983462 + "within10": 0.986923 }, { "label": "Private renters and rent in Scottish constituencies", @@ -147,7 +147,7 @@ "metrics": 2, "heldOut": false, "cells": 114, - "within10": 0.929825 + "within10": 0.982456 }, { "label": "Private renters and rent in Welsh constituencies", @@ -156,7 +156,7 @@ "metrics": 2, "heldOut": false, "cells": 64, - "within10": 0.9375 + "within10": 0.921875 } ] }, @@ -167,11 +167,11 @@ "cellsWithoutSource": 905, "structuralZeroCells": 0, "trainingCells": 9535, - "trainingWithin10": 0.898794, + "trainingWithin10": 0.899109, "heldOut": { "metric": "hmrc/employment_income/count", "cells": 360, - "within10": 0.366667 + "within10": 0.336111 }, "families": [ { @@ -181,7 +181,7 @@ "metrics": 8, "heldOut": false, "cells": 2880, - "within10": 0.939236 + "within10": 0.940972 }, { "label": "Employment income of income taxpayers", @@ -190,7 +190,7 @@ "metrics": 1, "heldOut": false, "cells": 360, - "within10": 0.975 + "within10": 0.966667 }, { "label": "Income taxpayers with employment income", @@ -199,7 +199,7 @@ "metrics": 1, "heldOut": true, "cells": 360, - "within10": 0.366667 + "within10": 0.336111 }, { "label": "Self-employment income: taxpayers and amount", @@ -208,7 +208,7 @@ "metrics": 2, "heldOut": false, "cells": 720, - "within10": 0.981944 + "within10": 0.988889 }, { "label": "Universal Credit households", @@ -217,7 +217,7 @@ "metrics": 1, "heldOut": false, "cells": 360, - "within10": 0.963889 + "within10": 0.958333 }, { "label": "Equivalised income before and after housing costs, and housing costs", @@ -226,7 +226,7 @@ "metrics": 3, "heldOut": false, "cells": 903, - "within10": 0.932447 + "within10": 0.93134 }, { "label": "Households by tenure", @@ -235,7 +235,7 @@ "metrics": 4, "heldOut": false, "cells": 1164, - "within10": 0.685567 + "within10": 0.677835 }, { "label": "Private rent paid", @@ -244,7 +244,7 @@ "metrics": 1, "heldOut": false, "cells": 289, - "within10": 0.982699 + "within10": 0.986159 }, { "label": "Dwellings by council tax band, A to H", @@ -253,7 +253,7 @@ "metrics": 8, "heldOut": false, "cells": 2541, - "within10": 0.939 + "within10": 0.939787 }, { "label": "Council tax paid, net of Council Tax Reduction", @@ -262,7 +262,7 @@ "metrics": 1, "heldOut": false, "cells": 318, - "within10": 0.471698 + "within10": 0.487421 } ] }, @@ -302,7 +302,7 @@ "label": "Salary sacrifice users, in total and either side of the \u00a32,000 cap", "publisher": "HM Treasury and HMRC", "geography": "UK", - "note": "2024 users set in the build (7.7 million; 4.3 million at or below the cap, 3.3 million above), grown 2.4% a year; the \u00a32,000 test uses 2023 prices", + "note": "2024 users set in the build (7.7 million; 4.3 million at or below the cap, 3.3 million above), grown 2.4% a year; the \u00a32,000 test uses contributions as the model runs them, which it does not uprate", "units": [ "count" ], @@ -515,7 +515,7 @@ "targets": 1, "zeroTargets": 0, "within10": 0.0, - "pinnedWithin10": 1.0, + "pinnedWithin10": 0.0, "urls": [ "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/" ], @@ -597,7 +597,7 @@ "targets": 1, "zeroTargets": 0, "within10": 1.0, - "pinnedWithin10": 0.0, + "pinnedWithin10": 1.0, "urls": [ "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/" ], @@ -766,7 +766,7 @@ "targets": 20, "zeroTargets": 0, "within10": 0.4, - "pinnedWithin10": 0.2, + "pinnedWithin10": 0.4, "urls": [ "https://www.gov.uk/government/statistics/capital-gains-tax-statistics" ], @@ -803,8 +803,8 @@ ], "targets": 1, "zeroTargets": 0, - "within10": 0.0, - "pinnedWithin10": 0.0, + "within10": 1.0, + "pinnedWithin10": 1.0, "urls": [ "https://assets.publishing.service.gov.uk/media/67ce0e7c08e764d17a5d3c21/2025_SPP_Review.pdf" ], @@ -861,8 +861,8 @@ ], "targets": 26, "zeroTargets": 0, - "within10": 0.846154, - "pinnedWithin10": 0.807692, + "within10": 0.884615, + "pinnedWithin10": 0.884615, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -880,8 +880,8 @@ ], "targets": 26, "zeroTargets": 0, - "within10": 0.846154, - "pinnedWithin10": 0.5, + "within10": 0.769231, + "pinnedWithin10": 0.807692, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -900,7 +900,7 @@ "targets": 26, "zeroTargets": 0, "within10": 0.884615, - "pinnedWithin10": 0.807692, + "pinnedWithin10": 0.884615, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -919,7 +919,7 @@ "targets": 26, "zeroTargets": 0, "within10": 0.807692, - "pinnedWithin10": 0.730769, + "pinnedWithin10": 0.807692, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -937,8 +937,8 @@ ], "targets": 26, "zeroTargets": 0, - "within10": 0.923077, - "pinnedWithin10": 0.538462, + "within10": 0.961538, + "pinnedWithin10": 0.961538, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -957,7 +957,7 @@ "targets": 26, "zeroTargets": 0, "within10": 0.846154, - "pinnedWithin10": 0.769231, + "pinnedWithin10": 0.846154, "urls": [ "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods" ], @@ -974,8 +974,8 @@ ], "targets": 104, "zeroTargets": 0, - "within10": 0.951923, - "pinnedWithin10": 0.442308, + "within10": 0.942308, + "pinnedWithin10": 0.394231, "urls": [ "https://stat-xplore.dwp.gov.uk/" ], @@ -1013,7 +1013,7 @@ "targets": 4, "zeroTargets": 0, "within10": 1.0, - "pinnedWithin10": 0.75, + "pinnedWithin10": 1.0, "urls": [ "https://www.gov.uk/government/publications/benefit-expenditure-and-caseload-tables-2026" ], @@ -1167,7 +1167,7 @@ "targets": 110, "zeroTargets": 0, "within10": 0.981818, - "pinnedWithin10": 0.981818, + "pinnedWithin10": 0.972727, "urls": [ "https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationprojections/datasets/z1zippedpopulationprojectionsdatafilesuk" ], @@ -1409,7 +1409,7 @@ "targets": 8, "zeroTargets": 0, "within10": 0.75, - "pinnedWithin10": 0.625, + "pinnedWithin10": 0.75, "urls": [ "https://assets.publishing.service.gov.uk/media/6943ee619273c48f554cf5c5/slcsp012025_Corrected.xlsx", "https://www.gov.uk/government/statistics/student-loans-in-northern-ireland-2024-to-2025/student-loans-for-higher-education-in-northern-ireland-financial-year-2024-25", @@ -1449,7 +1449,7 @@ "targets": 2, "zeroTargets": 0, "within10": 0.5, - "pinnedWithin10": 0.0, + "pinnedWithin10": 0.5, "urls": [ "https://assets.publishing.service.gov.uk/media/691d9e662c6b98ecdbc5003f/slcsp052025.xlsx" ], @@ -1487,7 +1487,7 @@ "targets": 2, "zeroTargets": 0, "within10": 0.5, - "pinnedWithin10": 0.5, + "pinnedWithin10": 1.0, "urls": [ "https://assets.publishing.service.gov.uk/media/691d9e662c6b98ecdbc5003f/slcsp052025.xlsx" ], @@ -1522,7 +1522,7 @@ ], "targets": 2, "zeroTargets": 0, - "within10": 1.0, + "within10": 0.5, "pinnedWithin10": 0.5, "urls": [ "https://www.gov.uk/government/statistics/english-housing-survey-2023-to-2024-rented-sectors", @@ -1571,24 +1571,15 @@ ] }, "validation": { - "modelVersion": "2.126.12", + "modelVersion": "2.130.1", "coreVersion": "3.33.0", "year": 2025, - "people": 69712844, - "households": 31245112, + "people": 69513955, + "households": 31166694, "targets": 645, "zeroTargets": 1, - "within10": 0.736025, - "within5": 0.521739, - "revisedTargets": [ - "voa/council_tax/SCOTLAND/A", - "voa/council_tax/SCOTLAND/B", - "voa/council_tax/SCOTLAND/C", - "voa/council_tax/SCOTLAND/D", - "voa/council_tax/SCOTLAND/E", - "voa/council_tax/SCOTLAND/F", - "voa/council_tax/SCOTLAND/G", - "voa/council_tax/SCOTLAND/H" - ] + "within10": 0.782609, + "within5": 0.613354, + "revisedTargets": [] } } diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index 2fed82a..b3ef177 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -203,7 +203,7 @@ export const ukPipelineStages: PipelineStage[] = [ outputSize: `${f.households} households`, dataSources: ['FRS 2024-25', 'Student loan borrower counts the build stores', 'Pension Credit take-up rate set in the data package'], details: [ - 'Salary sacrifice: a forest on age and employment income fills in people the FRS did not ask about salary sacrifice, then the build switches employed pension contributors to salary sacrifice at random, aiming for about 5.4 million users for calibration to fit', + 'Salary sacrifice: a forest on age and employment income, trained on FRS respondents with pay, fills in people the FRS did not ask about salary sacrifice, and every amount is held to the person’s pay. The build then switches employed pension contributors to salary sacrifice at random, aiming for about 5.4 million users for calibration to fit; each moves their employee pension contribution, up to half their pay, out of pay', 'Student loans: people repaying through PAYE get Plan 1, 2 or 5 from their estimated university start year, in every nation; in England, the build then gives Plan 2 or Plan 5 at random to people with tertiary education in the matching age band who do not repay, so the expected number at survey weights matches the stored count of borrowers liable to repay, which the build takes from the student loan forecasts for England', 'Pension Credit: the build solves the claim probability for entitled families so that, in expectation at survey weights, take-up in Great Britain equals the data package’s caseload take-up rate, which it cites to DWP; FRS families that report Pension Credit keep claiming (top-income copies’ predicted reports do not count), and entitled families in Northern Ireland draw at the same probability', ], @@ -286,9 +286,9 @@ export const ukPipelineStages: PipelineStage[] = [ `${f.households} households and ${f.people} people, weighted to ${fmtMillions(uk.enhanced.weightedHouseholds)} households in 2024`, `${fmtInt(c.frs)} FRS households, ${fmtInt(c.spiCopies)} top-income copies, ${fmtInt(c.capitalGainsCopies)} capital gains copies and ${fmtInt(c.cgtBandDonors)} capital gains donors`, `policyengine-uk ${v.modelVersion} uprates the weights when it loads the file, by population growth rather than the build’s factor, so a ${v.year} run has ${fmtMillions(v.households)} households against the ${fmtMillions(calibratedHouseholds)} calibration fitted, ${fmtPct(runtimeShortfall)} fewer (policyengine-uk-data#538)`, - 'Bus fares: England’s fare receipts uplifted to the UK by population, split between London and the rest of England, and spread across income groups by bus trips in the National Travel Survey. Petrol and diesel spending: one factor, so the litres they imply match the 2024 road fuel volume the build uses', + 'Bus fares: England’s fare receipts uplifted to the UK by population, split between London and the rest of England, and spread across income groups using trip rates stored in the build, which its code attributes to the National Travel Survey. Petrol and diesel spending: one factor, so the litres they imply match the 2024 road fuel volume the build uses', 'policyengine.py analyses a constituency or local authority with the households whose Output Area lies in it, at their national weights, not with the constituency or local authority weights', - 'Northern Ireland constituencies and local authorities have no households with an Output Area in this release, so policyengine.py stops with an error for them', + 'Northern Ireland’s constituencies and local authorities, and Cumberland, Westmorland and Furness, North Yorkshire and Somerset, have no households with an Output Area in this release, so policyengine.py stops with an error for them (policyengine-uk-data#580, #587)', ], link: { label: 'How the data compares with official statistics', path: '/data/validation' }, }, diff --git a/src/data/ukTargetChecks.json b/src/data/ukTargetChecks.json index 7b6b884..2c0494a 100644 --- a/src/data/ukTargetChecks.json +++ b/src/data/ukTargetChecks.json @@ -1 +1 @@ -[{"id":"dwp/benefit_cap_total_reduction","group":"Benefit cap: households capped and total reduction","unit":"gbp","target":320866000.0,"estimate":416482947.560074,"calibrationEstimate":330069710.0619365},{"id":"dwp/benefit_capped_households","group":"Benefit cap: households capped and total reduction","unit":"count","target":110637.0,"estimate":147944.28814807534,"calibrationEstimate":114504.09350681303},{"id":"dwp/esa_claimants","group":"Employment and Support Allowance claimants","unit":"count","target":999000.0,"estimate":904541.0915792732,"calibrationEstimate":909849.9250053912},{"id":"dwp/esa_contrib_claimants","group":"Contribution-based ESA claimants","unit":"count","target":620000.0,"estimate":716681.2252025008,"calibrationEstimate":719872.2350563705},{"id":"dwp/esa_income_claimants","group":"Income-related ESA claimants","unit":"count","target":180000.0,"estimate":188801.45329512656,"calibrationEstimate":190923.46925877035},{"id":"dwp/housing_benefit/over_pension_credit_age","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":7114700000.0,"estimate":7111903913.229882,"calibrationEstimate":7293068999.985946},{"id":"dwp/housing_benefit/over_pension_credit_age_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":1109000.0,"estimate":1093247.9535357058,"calibrationEstimate":1168281.94529891},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":584800000.0,"estimate":645921139.0904175,"calibrationEstimate":601213368.3664361},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":107000.0,"estimate":108791.38991189004,"calibrationEstimate":109275.78261888029},{"id":"dwp/jsa_claimants","group":"Jobseeker's Allowance claimants","unit":"count","target":71000.0,"estimate":69247.07556176186,"calibrationEstimate":69555.39922833443},{"id":"dwp/pension_credit","group":"Pension Credit claims and spending","unit":"gbp","target":6144470000.0,"estimate":6602274120.813976,"calibrationEstimate":6377744108.750391},{"id":"dwp/pension_credit_claims","group":"Pension Credit claims and spending","unit":"count","target":1382000.0,"estimate":1451705.6834389567,"calibrationEstimate":1452205.295378387},{"id":"dwp/pip_dl_enhanced_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1608000.0,"estimate":1953368.303418666,"calibrationEstimate":1962065.646411702},{"id":"dwp/pip_dl_standard_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1283000.0,"estimate":1419466.81792067,"calibrationEstimate":1425786.9713478386},{"id":"dwp/scotland_uc_households_child_under_1","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":14000.0,"estimate":14566.249044418337,"calibrationEstimate":14631.105303406715},{"id":"dwp/uc/claimants_couple_no_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":231368.0,"estimate":250896.79244339463,"calibrationEstimate":251991.6941986084},{"id":"dwp/uc/claimants_couple_with_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":839379.0,"estimate":913383.3023456336,"calibrationEstimate":920606.89293769},{"id":"dwp/uc/claimants_single_no_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":2868011.0,"estimate":2889435.6531457454,"calibrationEstimate":2918404.0829007328},{"id":"dwp/uc/claimants_single_with_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":2156879.0,"estimate":2380399.2202840894,"calibrationEstimate":2392176.4252111316},{"id":"dwp/uc/claimants_with_1_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":1222944.0,"estimate":1295755.060847789,"calibrationEstimate":1302878.9863807857},{"id":"dwp/uc/claimants_with_2_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":1058967.0,"estimate":1121193.9276535958,"calibrationEstimate":1125632.9012648463},{"id":"dwp/uc/claimants_with_3_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":473500.0,"estimate":502609.9927156568,"calibrationEstimate":507203.147459805},{"id":"dwp/uc/claimants_with_4_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":166790.0,"estimate":174326.93197226524,"calibrationEstimate":175103.1191417575},{"id":"dwp/uc/claimants_with_5+_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":75910.0,"estimate":79091.86563810706,"calibrationEstimate":79444.01964199543},{"id":"dwp/uc/households","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":6700000.0,"estimate":6348971.35797745,"calibrationEstimate":6395623.053902179},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":7610.0,"estimate":7420.538169384003,"calibrationEstimate":7514.299792408943},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12370.0,"estimate":15733.237529218197,"calibrationEstimate":12799.954794287682},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":15175.0,"estimate":11472.3235373199,"calibrationEstimate":15871.05467006564},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":12297.0,"estimate":12021.353377342224,"calibrationEstimate":12654.892155706882},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17828.0,"estimate":19456.112460017204,"calibrationEstimate":18263.504908561707},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":14427.0,"estimate":15080.27974140644,"calibrationEstimate":15080.074879169464},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":11892.0,"estimate":17644.776905357838,"calibrationEstimate":11945.356312990189},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":9463.0,"estimate":10057.979517936708,"calibrationEstimate":9759.450750350952},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8443.0,"estimate":9638.97747528553,"calibrationEstimate":8904.66766166687},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8906.0,"estimate":8274.131901025772,"calibrationEstimate":9022.64424419403},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5770.0,"estimate":4132.918827056885,"calibrationEstimate":5968.669494628906},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":3485.0,"estimate":5987.513103485107,"calibrationEstimate":3668.190024375915},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":2360.0,"estimate":2347.807508468628,"calibrationEstimate":2415.9390258789062},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":1815.0,"estimate":443.7221064567566,"calibrationEstimate":1831.3727984428408},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":1186.0,"estimate":2170.6248083114624,"calibrationEstimate":1187.413498878479},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":935.0,"estimate":1428.0487060546875,"calibrationEstimate":967.2799072265624},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":632.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":580.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":11750.0,"estimate":13848.374123096466,"calibrationEstimate":11923.90768444538},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":1424.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":10802.0,"estimate":8128.508852601051,"calibrationEstimate":10862.276925444605},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12168.0,"estimate":16164.80532181263,"calibrationEstimate":12346.467386484146},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":12461.0,"estimate":5748.578682214022,"calibrationEstimate":12841.8128490448},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":15787.0,"estimate":17204.907525718212,"calibrationEstimate":16464.121763527393},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":14248.0,"estimate":14648.581487357616,"calibrationEstimate":14936.235798239708},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":17559.0,"estimate":15425.641696095468,"calibrationEstimate":18029.333872824907},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":18714.0,"estimate":17000.313221901655,"calibrationEstimate":18860.421827226877},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":42188.0,"estimate":37726.34860146046,"calibrationEstimate":44076.01454716921},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":41520.0,"estimate":47141.35041385889,"calibrationEstimate":43324.978789806366},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":41159.0,"estimate":41947.755105018616,"calibrationEstimate":43194.09025865793},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":42515.0,"estimate":43577.436663627625,"calibrationEstimate":44944.778411865234},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":38527.0,"estimate":41018.2691783905,"calibrationEstimate":40481.27525937557},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":38894.0,"estimate":38215.3523761034,"calibrationEstimate":40602.91079157591},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":38659.0,"estimate":41123.29328751564,"calibrationEstimate":40460.888354063034},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34318.0,"estimate":48566.454991579056,"calibrationEstimate":35928.6571059227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":22489.0,"estimate":21205.43173134327,"calibrationEstimate":23000.909938097},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":30116.0,"estimate":28863.080528736115,"calibrationEstimate":31526.387284994125},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":28519.0,"estimate":21444.73471069336,"calibrationEstimate":29762.76909518242},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":26014.0,"estimate":23408.44104397297,"calibrationEstimate":26872.75042545795},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":23159.0,"estimate":35138.78228497505,"calibrationEstimate":24115.846549868584},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":20618.0,"estimate":16612.729299545288,"calibrationEstimate":21560.06649184227},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17493.0,"estimate":19232.653191685677,"calibrationEstimate":18100.27004623413},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":15437.0,"estimate":20070.599754333496,"calibrationEstimate":15988.015625},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12836.0,"estimate":11836.146595954897,"calibrationEstimate":13421.761481285095},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":26734.0,"estimate":28675.483907222748,"calibrationEstimate":27596.403090000153},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":61727.0,"estimate":65997.26235544682,"calibrationEstimate":64758.198789417744},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":29189.0,"estimate":28463.220873951912,"calibrationEstimate":30442.063633084297},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":33137.0,"estimate":31760.17704331875,"calibrationEstimate":34303.848853588104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":35834.0,"estimate":26437.818723022938,"calibrationEstimate":37270.02708786726},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":38338.0,"estimate":54036.251175284386,"calibrationEstimate":40042.640211343765},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":40685.0,"estimate":44348.22739729285,"calibrationEstimate":42527.98726695776},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":40564.0,"estimate":34501.503211796284,"calibrationEstimate":42208.232148468494},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":24639.0,"estimate":39168.9606487751,"calibrationEstimate":25625.726674437523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":126949.0,"estimate":142487.4302058667,"calibrationEstimate":133277.48989093304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":131129.0,"estimate":95377.8368690312,"calibrationEstimate":137752.16340973973},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":131289.0,"estimate":157107.79431578517,"calibrationEstimate":137750.63612690568},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":119355.0,"estimate":129818.38890782,"calibrationEstimate":124892.34173852204},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":130802.0,"estimate":131328.063896209,"calibrationEstimate":136759.86128601432},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":141848.0,"estimate":150728.17493000627,"calibrationEstimate":148309.65001174808},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":136835.0,"estimate":133713.73497787118,"calibrationEstimate":142901.4171705842},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":107556.0,"estimate":111484.7263495922,"calibrationEstimate":113109.20482206345},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34670.0,"estimate":29272.17201089859,"calibrationEstimate":36466.16493701935},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":86616.0,"estimate":104096.27746334672,"calibrationEstimate":90422.71904051304},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":80294.0,"estimate":73354.04017925262,"calibrationEstimate":84354.22553360462},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":70309.0,"estimate":89331.43440103531,"calibrationEstimate":73447.99977698922},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":50510.0,"estimate":72202.29325729609,"calibrationEstimate":53156.73221343756},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":42522.0,"estimate":18497.629060208797,"calibrationEstimate":44506.54565644264},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":33508.0,"estimate":49045.771344304085,"calibrationEstimate":35145.99563121796},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":27063.0,"estimate":30266.55286216736,"calibrationEstimate":28766.448501110077},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":21663.0,"estimate":26942.793876886368,"calibrationEstimate":22648.643339395523},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":43623.0,"estimate":37809.548577189445,"calibrationEstimate":45833.974639594555},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":82905.0,"estimate":97151.36844921112,"calibrationEstimate":87104.91118597984},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":55622.0,"estimate":60510.223631858826,"calibrationEstimate":58795.10524368286},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":67901.0,"estimate":71725.4553387165,"calibrationEstimate":70821.50663983822},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":89314.0,"estimate":86143.68657708168,"calibrationEstimate":93578.26927548648},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":118641.0,"estimate":119403.35334032774,"calibrationEstimate":124258.13893908262},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":99069.0,"estimate":97294.37053111196,"calibrationEstimate":103667.6788329184},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":102251.0,"estimate":96173.39577645063,"calibrationEstimate":107101.9515336156},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":102312.0,"estimate":87279.16967123747,"calibrationEstimate":107319.9899930358},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":95698.0,"estimate":135695.77643716335,"calibrationEstimate":100056.6025826335},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":106663.0,"estimate":124074.26766955853,"calibrationEstimate":111498.78546503186},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":181180.0,"estimate":188187.3756595254,"calibrationEstimate":191690.2932780385},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":189861.0,"estimate":186351.02785767615,"calibrationEstimate":199963.96529877183},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":129174.0,"estimate":185164.77054291964,"calibrationEstimate":136010.89976614714},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":84690.0,"estimate":54264.40361404419,"calibrationEstimate":88587.68869447708},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":46244.0,"estimate":71491.7329352498,"calibrationEstimate":47919.61390686035},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":26481.0,"estimate":35623.84896039963,"calibrationEstimate":27905.27891921997},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":120819.0,"estimate":128539.76422923803,"calibrationEstimate":126547.3099425435},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":18143.0,"estimate":31588.639366149902,"calibrationEstimate":18797.771575927734},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":12325.0,"estimate":4426.75733757019,"calibrationEstimate":12941.009860992432},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":9555.0,"estimate":10281.057233810425,"calibrationEstimate":9941.590031147003},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":6230.0,"estimate":8126.360444545746,"calibrationEstimate":6391.2335205078125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":5884.0,"estimate":6362.902786254883,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5362.0,"estimate":1998.391206741333,"calibrationEstimate":5583.823296546936},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":1786.0,"estimate":2339.0858516693115,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":1491.0,"estimate":1221.5946044921875,"calibrationEstimate":1580.0684814453125},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":173925.0,"estimate":173553.54143616557,"calibrationEstimate":180896.03793656823},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":3518.0,"estimate":5268.748246669769,"calibrationEstimate":3712.138840675354},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":375706.0,"estimate":405618.4962475896,"calibrationEstimate":399359.66108581424},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":200713.0,"estimate":186214.24044963715,"calibrationEstimate":212072.70295926929},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":107860.0,"estimate":76928.3390161097,"calibrationEstimate":113803.28732386231},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":144036.0,"estimate":167346.22477129102,"calibrationEstimate":151404.9450480342},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":377221.0,"estimate":349366.41928082705,"calibrationEstimate":405079.322792083},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":341138.0,"estimate":368394.08331155777,"calibrationEstimate":365472.416688472},{"id":"hmrc/capital_gains_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5805652941.176472,"estimate":2178688648.0482244,"calibrationEstimate":2141544289.3825493},{"id":"hmrc/capital_gains_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":6567201680.67227,"estimate":7324580857.580844,"calibrationEstimate":5995201312.511488},{"id":"hmrc/capital_gains_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":1457322689.0756304,"estimate":876994527.1745476,"calibrationEstimate":832080688.7293456},{"id":"hmrc/capital_gains_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":9443821008.403362,"estimate":8915647072.518879,"calibrationEstimate":8817479175.49674},{"id":"hmrc/capital_gains_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":2718348739.4957986,"estimate":1471546074.3489742,"calibrationEstimate":1444078653.7115064},{"id":"hmrc/capital_gains_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":4898166386.554623,"estimate":3799760749.882065,"calibrationEstimate":3788282184.501421},{"id":"hmrc/capital_gains_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":3834464705.882354,"estimate":1744185904.570274,"calibrationEstimate":1735553375.6752963},{"id":"hmrc/capital_gains_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5863205882.3529415,"estimate":4403841031.357599,"calibrationEstimate":5555259154.762842},{"id":"hmrc/capital_gains_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":23343884033.61345,"estimate":21727639789.17903,"calibrationEstimate":21488402885.15877},{"id":"hmrc/capital_gains_total","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":67727478991.59665,"estimate":55861737820.9182,"calibrationEstimate":55238457530.72525},{"id":"hmrc/cgt_taxpayers","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":378000.0,"estimate":594003.8427731246,"calibrationEstimate":593891.4494462013},{"id":"hmrc/cgt_taxpayers_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":37000.0,"estimate":13544.740693077443,"calibrationEstimate":13360.691625073552},{"id":"hmrc/cgt_taxpayers_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":5000.0,"estimate":5812.870928764343,"calibrationEstimate":4586.156556129456},{"id":"hmrc/cgt_taxpayers_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":79000.0,"estimate":50256.21771013737,"calibrationEstimate":46247.366893053055},{"id":"hmrc/cgt_taxpayers_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":3000.0,"estimate":2788.615041732788,"calibrationEstimate":2801.031301498413},{"id":"hmrc/cgt_taxpayers_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":74000.0,"estimate":43994.12303459644,"calibrationEstimate":43312.22687217593},{"id":"hmrc/cgt_taxpayers_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":14000.0,"estimate":10944.578097075224,"calibrationEstimate":11016.595499932766},{"id":"hmrc/cgt_taxpayers_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":53000.0,"estimate":24514.88641294837,"calibrationEstimate":24518.887231260534},{"id":"hmrc/cgt_taxpayers_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":8000.0,"estimate":6178.642288446426,"calibrationEstimate":7360.933691740036},{"id":"hmrc/cgt_taxpayers_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":2000.0,"estimate":1832.8698182106016,"calibrationEstimate":1841.0306429862976},{"id":"hmrc/dividend_income_count_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":222000.0,"estimate":229554.611115098,"calibrationEstimate":229451.83542212844},{"id":"hmrc/dividend_income_count_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":115000.0,"estimate":122498.21870449184,"calibrationEstimate":116450.05363586544},{"id":"hmrc/dividend_income_count_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":92000.0,"estimate":95837.3041176498,"calibrationEstimate":94981.9433400631},{"id":"hmrc/dividend_income_count_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":372000.0,"estimate":347627.6361439526,"calibrationEstimate":382888.00691989064},{"id":"hmrc/dividend_income_count_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":19000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_count_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":75000.0,"estimate":76900.66770100594,"calibrationEstimate":77183.34881728888},{"id":"hmrc/dividend_income_count_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":843000.0,"estimate":867481.3310358822,"calibrationEstimate":871528.9038848877},{"id":"hmrc/dividend_income_count_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":49000.0,"estimate":45323.63685941696,"calibrationEstimate":50523.88130879402},{"id":"hmrc/dividend_income_count_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":667000.0,"estimate":703025.5269361734,"calibrationEstimate":686016.7727653384},{"id":"hmrc/dividend_income_count_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":627000.0,"estimate":650857.9845430255,"calibrationEstimate":655597.3248263001},{"id":"hmrc/dividend_income_count_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":32000.0,"estimate":18903.09976196289,"calibrationEstimate":13924.291625976562},{"id":"hmrc/dividend_income_count_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":673194.9035950899,"calibrationEstimate":665673.386961177},{"id":"hmrc/dividend_income_count_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":336000.0,"estimate":343528.61046367884,"calibrationEstimate":346362.1282174885},{"id":"hmrc/dividend_income_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":6870000000.0,"estimate":7095222924.861016,"calibrationEstimate":7114063772.399986},{"id":"hmrc/dividend_income_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":175000000.0,"estimate":192951222.35627183,"calibrationEstimate":173661019.52219003},{"id":"hmrc/dividend_income_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3450000000.0,"estimate":3692746817.185143,"calibrationEstimate":3550464125.442072},{"id":"hmrc/dividend_income_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":855000000.0,"estimate":845993440.2610878,"calibrationEstimate":880729109.8346382},{"id":"hmrc/dividend_income_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":11100000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3700000000.0,"estimate":3828837168.167787,"calibrationEstimate":3797956584.5345135},{"id":"hmrc/dividend_income_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3330000000.0,"estimate":3395614770.515832,"calibrationEstimate":3442786712.469958},{"id":"hmrc/dividend_income_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3430000000.0,"estimate":3496980217.987605,"calibrationEstimate":3447032285.480977},{"id":"hmrc/dividend_income_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":4700000000.0,"estimate":4851171796.430717,"calibrationEstimate":4835994933.974208},{"id":"hmrc/dividend_income_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":8400000000.0,"estimate":8938303214.071344,"calibrationEstimate":8791437358.27874},{"id":"hmrc/dividend_income_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3820000000.0,"estimate":156339333.4031915,"calibrationEstimate":154123616.4699381},{"id":"hmrc/dividend_income_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":12500000000.0,"estimate":13160523430.36148,"calibrationEstimate":12946721023.778358},{"id":"hmrc/dividend_income_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":9440000000.0,"estimate":10052671812.436289,"calibrationEstimate":9911749501.39766},{"id":"hmrc/employment_income_count_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":791000.0,"estimate":843150.2165419757,"calibrationEstimate":826560.6833594143},{"id":"hmrc/employment_income_count_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1360000.0,"estimate":1381056.812882781,"calibrationEstimate":1389994.5120541155},{"id":"hmrc/employment_income_count_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":264000.0,"estimate":283089.4560998976,"calibrationEstimate":272207.9791575968},{"id":"hmrc/employment_income_count_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3100000.0,"estimate":2941183.2826600075,"calibrationEstimate":3131268.366346717},{"id":"hmrc/employment_income_count_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_count_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":180000.0,"estimate":183886.50804448128,"calibrationEstimate":191119.33520907164},{"id":"hmrc/employment_income_count_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":7470000.0,"estimate":7394907.693445265,"calibrationEstimate":7696814.897311896},{"id":"hmrc/employment_income_count_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":93000.0,"estimate":107923.93404233456,"calibrationEstimate":100106.93683218956},{"id":"hmrc/employment_income_count_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":5370000.0,"estimate":5930080.231027737,"calibrationEstimate":5646706.61297296},{"id":"hmrc/employment_income_count_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3500000.0,"estimate":3692167.4615677,"calibrationEstimate":3691681.077874422},{"id":"hmrc/employment_income_count_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":44000.0,"estimate":51452.47190284729,"calibrationEstimate":46618.58825778961},{"id":"hmrc/employment_income_count_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3430000.0,"estimate":3712399.601767317,"calibrationEstimate":3598074.21717},{"id":"hmrc/employment_income_count_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1640000.0,"estimate":1755926.1428863704,"calibrationEstimate":1737828.3395847082},{"id":"hmrc/employment_income_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":82300000000.0,"estimate":91413568331.97716,"calibrationEstimate":89270291253.19441},{"id":"hmrc/employment_income_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17625951516.993526,"calibrationEstimate":17707792264.599216},{"id":"hmrc/employment_income_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":39200000000.0,"estimate":43121325615.01092,"calibrationEstimate":41343663545.83801},{"id":"hmrc/employment_income_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":48600000000.0,"estimate":48521133900.22364,"calibrationEstimate":51842432145.73113},{"id":"hmrc/employment_income_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":35500000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":36600000000.0,"estimate":36151749235.49467,"calibrationEstimate":38383016939.89171},{"id":"hmrc/employment_income_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":172000000000.0,"estimate":177253034078.8408,"calibrationEstimate":185685923740.2714},{"id":"hmrc/employment_income_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":29000000000.0,"estimate":32519523768.135063,"calibrationEstimate":30656152523.340366},{"id":"hmrc/employment_income_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":170000000000.0,"estimate":195144568163.3972,"calibrationEstimate":186138215953.9731},{"id":"hmrc/employment_income_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":139000000000.0,"estimate":152968049441.96802,"calibrationEstimate":152580231489.52524},{"id":"hmrc/employment_income_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":23100000000.0,"estimate":27980302639.935696,"calibrationEstimate":25227641740.95949},{"id":"hmrc/employment_income_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":174000000000.0,"estimate":205992790440.03635,"calibrationEstimate":198611833647.03937},{"id":"hmrc/employment_income_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":118000000000.0,"estimate":132579308720.52338,"calibrationEstimate":130650324064.52023},{"id":"hmrc/private_pension_income_count_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":109000.0,"estimate":111826.396561265,"calibrationEstimate":111957.39517956972},{"id":"hmrc/private_pension_income_count_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1070000.0,"estimate":1108551.329273358,"calibrationEstimate":1078785.8509754688},{"id":"hmrc/private_pension_income_count_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":29000.0,"estimate":32248.34685358405,"calibrationEstimate":31194.256974309683},{"id":"hmrc/private_pension_income_count_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2140000.0,"estimate":2185144.9934265465,"calibrationEstimate":2193027.785250634},{"id":"hmrc/private_pension_income_count_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_count_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":20000.0,"estimate":19481.926417827606,"calibrationEstimate":20442.59133195877},{"id":"hmrc/private_pension_income_count_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2660000.0,"estimate":2728957.4601238817,"calibrationEstimate":2748158.453831658},{"id":"hmrc/private_pension_income_count_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":10000.0,"estimate":10305.892645597458,"calibrationEstimate":10287.247063875198},{"id":"hmrc/private_pension_income_count_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1450000.0,"estimate":1495237.3086971492,"calibrationEstimate":1487679.527325362},{"id":"hmrc/private_pension_income_count_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":779000.0,"estimate":789672.3607301563,"calibrationEstimate":800476.0575524122},{"id":"hmrc/private_pension_income_count_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":4000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/private_pension_income_count_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":652041.4562733769,"calibrationEstimate":663726.9767524898},{"id":"hmrc/private_pension_income_count_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":259000.0,"estimate":272814.0429994464,"calibrationEstimate":263811.19149279594},{"id":"hmrc/private_pension_income_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":5430000000.0,"estimate":5345797328.280829,"calibrationEstimate":5427845559.415028},{"id":"hmrc/private_pension_income_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":4350000000.0,"estimate":4392698634.534128,"calibrationEstimate":4454604694.336378},{"id":"hmrc/private_pension_income_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1810000000.0,"estimate":2014665212.2989984,"calibrationEstimate":1885743095.2678227},{"id":"hmrc/private_pension_income_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":13600000000.0,"estimate":13722906422.39004,"calibrationEstimate":13929122214.140656},{"id":"hmrc/private_pension_income_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":370000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1570000000.0,"estimate":1432815920.066187,"calibrationEstimate":1611508589.181299},{"id":"hmrc/private_pension_income_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":30200000000.0,"estimate":30088725766.291286,"calibrationEstimate":30519628145.421444},{"id":"hmrc/private_pension_income_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1120000000.0,"estimate":1123939358.7086189,"calibrationEstimate":1138804412.324136},{"id":"hmrc/private_pension_income_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":24804135722.331135,"calibrationEstimate":25052549773.94475},{"id":"hmrc/private_pension_income_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":16767697312.554628,"calibrationEstimate":17124010213.256632},{"id":"hmrc/private_pension_income_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":640000000.0,"estimate":212929517.2376833,"calibrationEstimate":216246361.45302057},{"id":"hmrc/private_pension_income_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":17400000000.0,"estimate":17412935832.904785,"calibrationEstimate":17785168436.302177},{"id":"hmrc/private_pension_income_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":9470000000.0,"estimate":9381575140.683311,"calibrationEstimate":9543800186.733513},{"id":"hmrc/property_income_count_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":137000.0,"estimate":148813.48041003942,"calibrationEstimate":142931.6233434677},{"id":"hmrc/property_income_count_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":101000.0,"estimate":105099.43739584088,"calibrationEstimate":105464.95491817594},{"id":"hmrc/property_income_count_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":54000.0,"estimate":50794.22146773338,"calibrationEstimate":56650.596049278975},{"id":"hmrc/property_income_count_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":232000.0,"estimate":209372.79957795143,"calibrationEstimate":241816.69853043556},{"id":"hmrc/property_income_count_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":7000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_count_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":41000.0,"estimate":54315.05261707306,"calibrationEstimate":53937.36399555206},{"id":"hmrc/property_income_count_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":431000.0,"estimate":467851.6959067285,"calibrationEstimate":449476.7096900046},{"id":"hmrc/property_income_count_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":23000.0,"estimate":23663.82657933235,"calibrationEstimate":23704.657059669495},{"id":"hmrc/property_income_count_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":364000.0,"estimate":382716.5398760289,"calibrationEstimate":374246.09900937974},{"id":"hmrc/property_income_count_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":325000.0,"estimate":325976.1076962948,"calibrationEstimate":335583.4356379807},{"id":"hmrc/property_income_count_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":13000.0,"estimate":17876.553053617477,"calibrationEstimate":17956.148045539856},{"id":"hmrc/property_income_count_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":397000.0,"estimate":430521.93068769574,"calibrationEstimate":424372.62478613853},{"id":"hmrc/property_income_count_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":226000.0,"estimate":232345.40000730753,"calibrationEstimate":233399.38142344356},{"id":"hmrc/property_income_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":4845000000.0,"estimate":5066855184.377646,"calibrationEstimate":4887522606.587887},{"id":"hmrc/property_income_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1273000000.0,"estimate":1339419048.615897,"calibrationEstimate":1325054081.26916},{"id":"hmrc/property_income_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":2185000000.0,"estimate":2065674668.677865,"calibrationEstimate":2156647507.286356},{"id":"hmrc/property_income_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":3211000000.0,"estimate":2853691727.4237776,"calibrationEstimate":3390429218.5297017},{"id":"hmrc/property_income_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":834100000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1995000000.0,"estimate":1671991571.1694071,"calibrationEstimate":1648499114.259529},{"id":"hmrc/property_income_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7258000000.0,"estimate":7985707953.629425,"calibrationEstimate":7489906615.405917},{"id":"hmrc/property_income_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1453500000.0,"estimate":1492957063.3158894,"calibrationEstimate":1475921673.247523},{"id":"hmrc/property_income_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7220000000.0,"estimate":7746035188.249613,"calibrationEstimate":7542554031.193575},{"id":"hmrc/property_income_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7182000000.0,"estimate":7333197347.813547,"calibrationEstimate":7434714030.345675},{"id":"hmrc/property_income_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":900600000.0,"estimate":867971878.096458,"calibrationEstimate":858414921.8552154},{"id":"hmrc/property_income_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":10260000000.0,"estimate":10953681291.205402,"calibrationEstimate":10644669240.112694},{"id":"hmrc/property_income_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7163000000.0,"estimate":7576565136.2291155,"calibrationEstimate":7469779867.330262},{"id":"hmrc/salary_sacrifice_contributions","group":"Pension contributions made through salary sacrifice","unit":"gbp","target":24720000000.0,"estimate":28216254605.196114,"calibrationEstimate":29398246248.53289},{"id":"hmrc/salary_sacrifice_employee_nics_relief","group":"Salary sacrifice: employee National Insurance relief","unit":"gbp","target":1030000000.0,"estimate":944128480.1682006,"calibrationEstimate":999028962.9642977},{"id":"hmrc/salary_sacrifice_employer_nics_relief","group":"Salary sacrifice: employer National Insurance relief","unit":"gbp","target":3806521739.1304345,"estimate":3734371027.861629,"calibrationEstimate":3910216698.4462447},{"id":"hmrc/salary_sacrifice_it_relief_additional_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1854000000.0,"estimate":1898508492.1189609,"calibrationEstimate":1916649378.3206043},{"id":"hmrc/salary_sacrifice_it_relief_basic_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1648000000.0,"estimate":1599588723.537782,"calibrationEstimate":1694024183.192099},{"id":"hmrc/salary_sacrifice_it_relief_higher_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":5665000000.0,"estimate":5447769552.639022,"calibrationEstimate":5730857548.478475},{"id":"hmrc/self_employment_income_count_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":85000.0,"estimate":91807.65111103654,"calibrationEstimate":86962.28155221045},{"id":"hmrc/self_employment_income_count_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":444000.0,"estimate":495899.16801068187,"calibrationEstimate":474827.5627250821},{"id":"hmrc/self_employment_income_count_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":40000.0,"estimate":34321.580459713936,"calibrationEstimate":40915.38135620952},{"id":"hmrc/self_employment_income_count_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":651000.0,"estimate":595662.3852557838,"calibrationEstimate":689170.4667981565},{"id":"hmrc/self_employment_income_count_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":11000.0,"estimate":12097.602172851562,"calibrationEstimate":12151.466918945312},{"id":"hmrc/self_employment_income_count_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":34000.0,"estimate":35412.47289919853,"calibrationEstimate":36050.296272322536},{"id":"hmrc/self_employment_income_count_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":961000.0,"estimate":983380.3177103548,"calibrationEstimate":1018702.9982424974},{"id":"hmrc/self_employment_income_count_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21693.4504237175,"calibrationEstimate":21790.04023075104},{"id":"hmrc/self_employment_income_count_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":595000.0,"estimate":660941.2836752534,"calibrationEstimate":627534.0292263627},{"id":"hmrc/self_employment_income_count_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":359000.0,"estimate":380762.3792635501,"calibrationEstimate":372850.943356663},{"id":"hmrc/self_employment_income_count_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":15000.0,"estimate":14243.284211874008,"calibrationEstimate":14306.702473640442},{"id":"hmrc/self_employment_income_count_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":311000.0,"estimate":306679.82031068206,"calibrationEstimate":320621.6229124218},{"id":"hmrc/self_employment_income_count_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":143000.0,"estimate":124774.42495456338,"calibrationEstimate":149187.17315804958},{"id":"hmrc/self_employment_income_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4980000000.0,"estimate":5636157348.958165,"calibrationEstimate":5105386257.929018},{"id":"hmrc/self_employment_income_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4810000000.0,"estimate":5335150863.284746,"calibrationEstimate":5017249946.560387},{"id":"hmrc/self_employment_income_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":3650000000.0,"estimate":2822716021.3632445,"calibrationEstimate":3787992559.540904},{"id":"hmrc/self_employment_income_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8030000000.0,"estimate":6887636692.712797,"calibrationEstimate":8444995513.4183855},{"id":"hmrc/self_employment_income_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":19500000000.0,"estimate":18284049776.80005,"calibrationEstimate":19086845273.0652},{"id":"hmrc/self_employment_income_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4390000000.0,"estimate":4193355831.884856,"calibrationEstimate":4476251711.722663},{"id":"hmrc/self_employment_income_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":15700000000.0,"estimate":17136849507.671976,"calibrationEstimate":16997008937.802246},{"id":"hmrc/self_employment_income_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4840000000.0,"estimate":4906102850.49662,"calibrationEstimate":5121514459.116575},{"id":"hmrc/self_employment_income_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":12600000000.0,"estimate":12605641784.231354,"calibrationEstimate":13432114897.320862},{"id":"hmrc/self_employment_income_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8730000000.0,"estimate":9895760941.4199,"calibrationEstimate":9284919847.082878},{"id":"hmrc/self_employment_income_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":6670000000.0,"estimate":9660794971.01818,"calibrationEstimate":10084969640.620115},{"id":"hmrc/self_employment_income_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8220000000.0,"estimate":7173913950.503402,"calibrationEstimate":8589968865.463936},{"id":"hmrc/self_employment_income_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":5360000000.0,"estimate":4555003804.413581,"calibrationEstimate":5622179443.45382},{"id":"hmrc/state_pension_count_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":74000.0,"estimate":76148.16276955605,"calibrationEstimate":75922.86912208796},{"id":"hmrc/state_pension_count_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1140000.0,"estimate":1244077.6809774786,"calibrationEstimate":1133583.8249693066},{"id":"hmrc/state_pension_count_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":22832.874069213867,"calibrationEstimate":22125.147695302963},{"id":"hmrc/state_pension_count_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2050000.0,"estimate":2048411.1118015796,"calibrationEstimate":2048046.7279076576},{"id":"hmrc/state_pension_count_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_count_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":14000.0,"estimate":13532.682774543762,"calibrationEstimate":14466.858582496645},{"id":"hmrc/state_pension_count_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2320000.0,"estimate":2286300.7773593217,"calibrationEstimate":2301933.0940366536},{"id":"hmrc/state_pension_count_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":8000.0,"estimate":8824.107450008392,"calibrationEstimate":8798.864166736603},{"id":"hmrc/state_pension_count_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1160000.0,"estimate":1172676.499942258,"calibrationEstimate":1168167.4859495014},{"id":"hmrc/state_pension_count_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":568000.0,"estimate":575256.3978573233,"calibrationEstimate":577815.7180559486},{"id":"hmrc/state_pension_count_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":3000.0,"estimate":3764.575927734375,"calibrationEstimate":3781.337768554687},{"id":"hmrc/state_pension_count_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":441000.0,"estimate":438393.6089271605,"calibrationEstimate":441668.3965354562},{"id":"hmrc/state_pension_count_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":176000.0,"estimate":175826.47564059496,"calibrationEstimate":177026.6087565422},{"id":"hmrc/state_pension_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":847000000.0,"estimate":854450089.7419467,"calibrationEstimate":844536099.8908701},{"id":"hmrc/state_pension_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":11800000000.0,"estimate":13670650067.511356,"calibrationEstimate":12372946997.791916},{"id":"hmrc/state_pension_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":265000000.0,"estimate":282114083.0780946,"calibrationEstimate":271975929.42016745},{"id":"hmrc/state_pension_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":22200000000.0,"estimate":23998719050.76559,"calibrationEstimate":23797516261.50798},{"id":"hmrc/state_pension_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":20000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":179000000.0,"estimate":172983951.4445731,"calibrationEstimate":182038746.25456983},{"id":"hmrc/state_pension_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":26825875119.04113,"calibrationEstimate":26781706814.29911},{"id":"hmrc/state_pension_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":96000000.0,"estimate":91457269.84436607,"calibrationEstimate":90425861.10211164},{"id":"hmrc/state_pension_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":12300000000.0,"estimate":13220363004.652786,"calibrationEstimate":13047202267.625652},{"id":"hmrc/state_pension_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":6020000000.0,"estimate":6333296578.738886,"calibrationEstimate":6303111646.291419},{"id":"hmrc/state_pension_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":43000000.0,"estimate":56836446.07211137,"calibrationEstimate":56614218.6125021},{"id":"hmrc/state_pension_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":4660000000.0,"estimate":4958283295.041033,"calibrationEstimate":4957592229.717251},{"id":"hmrc/state_pension_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":1890000000.0,"estimate":1925819081.9875,"calibrationEstimate":1921803586.7496536},{"id":"housing/rent_private","group":"Private and social rent paid","unit":"gbp","target":89035200000.0,"estimate":94232257148.01346,"calibrationEstimate":89015844391.93204},{"id":"housing/rent_social","group":"Private and social rent paid","unit":"gbp","target":30680000000.0,"estimate":36221593791.554085,"calibrationEstimate":33687842434.35097},{"id":"housing/total_mortgage","group":"Mortgage payments, capital and interest","unit":"gbp","target":99000000000.0,"estimate":112166702689.27348,"calibrationEstimate":113284488090.43108},{"id":"nts/households_no_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":6512000.0,"estimate":6886208.031410232,"calibrationEstimate":6916868.755762011},{"id":"nts/households_one_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":13024000.0,"estimate":15020756.833521975,"calibrationEstimate":15087636.514661329},{"id":"nts/households_two_plus_vehicles","group":"Households with no, one, and two or more vehicles","unit":"count","target":10064000.0,"estimate":9336322.44734241,"calibrationEstimate":9377892.274253026},{"id":"obr/attendance_allowance","group":"Attendance Allowance spending","unit":"gbp","target":8492497075.074617,"estimate":8738849002.944973,"calibrationEstimate":8777451467.048658},{"id":"obr/capital_gains_tax","group":"Capital gains tax receipts","unit":"gbp","target":21801546197.09165,"estimate":12717204530.457554,"calibrationEstimate":12569294855.576912},{"id":"obr/carers_allowance","group":"Carer's Allowance spending","unit":"gbp","target":4569403813.760573,"estimate":4546109316.312273,"calibrationEstimate":4668875054.2856655},{"id":"obr/child_benefit","group":"Child Benefit spending","unit":"gbp","target":13389272724.45089,"estimate":16225320972.639776,"calibrationEstimate":16338080740.281445},{"id":"obr/council_tax","group":"Council tax receipts, UK and by nation","unit":"gbp","target":50925163826.30539,"estimate":48221464271.11403,"calibrationEstimate":45300509759.81859},{"id":"obr/council_tax_england","group":"Council tax receipts, UK and by nation","unit":"gbp","target":44117237614.71528,"estimate":41824069103.301254,"calibrationEstimate":39205804365.029305},{"id":"obr/council_tax_scotland","group":"Council tax receipts, UK and by nation","unit":"gbp","target":3051227494.93594,"estimate":3763028655.037571,"calibrationEstimate":3638929999.068658},{"id":"obr/council_tax_wales","group":"Council tax receipts, UK and by nation","unit":"gbp","target":2400769752.36827,"estimate":2634366512.7752094,"calibrationEstimate":2455775395.7206206},{"id":"obr/domestic_rates","group":"Northern Ireland domestic rates receipts","unit":"gbp","target":494000000.0,"estimate":584068659.0970445,"calibrationEstimate":560119544.8439525},{"id":"obr/esa","group":"Incapacity benefits spending, scored against ESA (income-related and contributory)","unit":"gbp","target":7206287181.538654,"estimate":7343384263.9225025,"calibrationEstimate":7378653735.424012},{"id":"obr/fuel_duties","group":"Fuel duty receipts, scored against duty on households' car fuel","unit":"gbp","target":24241874775.213375,"estimate":24533360153.833393,"calibrationEstimate":22246272742.96544},{"id":"obr/income_tax","group":"Income tax receipts","unit":"gbp","target":331437583074.4429,"estimate":301478832377.7914,"calibrationEstimate":296476469549.9654},{"id":"obr/jobseekers_allowance","group":"Jobseeker's Allowance spending","unit":"gbp","target":280558748.04472804,"estimate":299505958.51263523,"calibrationEstimate":300361802.45431787},{"id":"obr/ni","group":"National Insurance receipts, total and employee, both scored against employee contributions","unit":"gbp","target":200081395082.7125,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employee","group":"National Insurance receipts, total and employee, both scored against employee contributions","unit":"gbp","target":49544363784.26465,"estimate":50521886435.08863,"calibrationEstimate":49859258415.710144},{"id":"obr/ni_employer","group":"Employer National Insurance receipts","unit":"gbp","target":145324007512.71753,"estimate":154541037552.12073,"calibrationEstimate":152621840639.53052},{"id":"obr/ni_self_employed","group":"Self-employed National Insurance receipts","unit":"gbp","target":2902816090.4147716,"estimate":2609995976.5472517,"calibrationEstimate":2776828111.0540338},{"id":"obr/pip","group":"Disability Living Allowance and PIP spending, scored against PIP alone","unit":"gbp","target":36910059270.5278,"estimate":26930742886.35225,"calibrationEstimate":27048283769.854137},{"id":"obr/private_school_students","group":"Pupils at independent schools","unit":"count","target":557000.0,"estimate":761425.2593497187,"calibrationEstimate":577547.7305030972},{"id":"obr/salary_sacrifice_users_above_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":3379200.0,"estimate":3416752.2773837894,"calibrationEstimate":3473463.5649632365},{"id":"obr/salary_sacrifice_users_below_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":4403200.0,"estimate":4567515.046537325,"calibrationEstimate":4546353.57234703},{"id":"obr/salary_sacrifice_users_total","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":7884800.0,"estimate":7984267.323921114,"calibrationEstimate":8019817.137310267},{"id":"obr/sdlt","group":"Stamp Duty Land Tax receipts","unit":"gbp","target":15406516698.785578,"estimate":16316115361.020012,"calibrationEstimate":15970017665.29672},{"id":"obr/state_pension","group":"State Pension spending","unit":"gbp","target":146185954351.57382,"estimate":123608848585.71336,"calibrationEstimate":123129508170.07487},{"id":"obr/statutory_maternity_pay","group":"Statutory Maternity Pay spending","unit":"gbp","target":3194800881.520547,"estimate":3337974284.302048,"calibrationEstimate":3347441886.5270486},{"id":"obr/tv_licence_fee","group":"TV licence fee receipts","unit":"gbp","target":3872000000.0,"estimate":4306586174.401851,"calibrationEstimate":4326303524.671558},{"id":"obr/universal_credit","group":"Universal Credit spending","unit":"gbp","target":79286349139.54411,"estimate":77648740273.65004,"calibrationEstimate":76378495756.28294},{"id":"obr/vat","group":"VAT receipts","unit":"gbp","target":180168938685.4179,"estimate":317136171663.4592,"calibrationEstimate":318035670462.85565},{"id":"obr/winter_fuel_allowance","group":"Winter Fuel Payment spending","unit":"gbp","target":1911040880.4619167,"estimate":1703858030.6710331,"calibrationEstimate":1712963122.996131},{"id":"ons/corporate_land_value","group":"Corporate land value","unit":"gbp","target":2057128451236.5017,"estimate":2058648990687.032,"calibrationEstimate":2509581347940.138},{"id":"ons/couple_3_plus_children_households","group":"Households by family type","unit":"count","target":931000.0,"estimate":939145.8302041292,"calibrationEstimate":943327.3600209357},{"id":"ons/couple_no_children_households","group":"Households by family type","unit":"count","target":8119000.0,"estimate":12928875.782972127,"calibrationEstimate":12986441.399504378},{"id":"ons/couple_non_dependent_children_only_households","group":"Households by family type","unit":"count","target":1848000.0,"estimate":1526672.7015325427,"calibrationEstimate":1533470.184832275},{"id":"ons/couple_under_3_children_households","group":"Households by family type","unit":"count","target":5439000.0,"estimate":5319173.021537095,"calibrationEstimate":5342856.555537075},{"id":"ons/east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":726000.0,"estimate":770230.939494133,"calibrationEstimate":773660.3856868744},{"id":"ons/east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":741000.0,"estimate":740606.7134604454,"calibrationEstimate":743904.2511110306},{"id":"ons/east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":749000.0,"estimate":756168.8946352005,"calibrationEstimate":759535.7300329208},{"id":"ons/east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":890000.0,"estimate":868918.0768876076,"calibrationEstimate":872786.9326715469},{"id":"ons/east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":851000.0,"estimate":843856.841021061,"calibrationEstimate":847614.101943016},{"id":"ons/east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":867000.0,"estimate":885889.451540947,"calibrationEstimate":889833.8577439785},{"id":"ons/east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":746000.0,"estimate":717175.1693952084,"calibrationEstimate":720368.3822858334},{"id":"ons/east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":643000.0,"estimate":602970.5396468639,"calibrationEstimate":605655.2605879307},{"id":"ons/east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":379000.0,"estimate":380440.2481365204,"calibrationEstimate":382134.1495399475},{"id":"ons/east_midlands_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":532000.0,"estimate":560764.1695084572,"calibrationEstimate":563260.9665122032},{"id":"ons/east_midlands_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":585000.0,"estimate":591315.0727558136,"calibrationEstimate":593947.8992090225},{"id":"ons/east_midlands_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":632000.0,"estimate":646598.6443405151,"calibrationEstimate":649477.6217494011},{"id":"ons/east_midlands_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":669000.0,"estimate":666351.030916214,"calibrationEstimate":669317.9424901009},{"id":"ons/east_midlands_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":621000.0,"estimate":627317.6343212128,"calibrationEstimate":630110.758951664},{"id":"ons/east_midlands_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":681000.0,"estimate":705804.5902404785,"calibrationEstimate":708947.1764411926},{"id":"ons/east_midlands_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":592000.0,"estimate":583389.1525392532,"calibrationEstimate":585986.6843750477},{"id":"ons/east_midlands_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":500000.0,"estimate":480258.3571476936,"calibrationEstimate":482396.70089006424},{"id":"ons/east_midlands_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":273000.0,"estimate":274763.10668992996,"calibrationEstimate":275986.48183584213},{"id":"ons/female_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1698816.0,"estimate":1839466.5737319589,"calibrationEstimate":1847656.770164296},{"id":"ons/female_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2041879.0,"estimate":1973291.4082101283,"calibrationEstimate":1982077.4540842024},{"id":"ons/female_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2036402.0,"estimate":1976182.4684885591,"calibrationEstimate":1984981.3977429569},{"id":"ons/female_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2033478.0,"estimate":2091247.116039395,"calibrationEstimate":2100558.3663989007},{"id":"ons/female_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2258028.0,"estimate":2327819.72517778,"calibrationEstimate":2338184.332134992},{"id":"ons/female_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2443559.0,"estimate":2426926.0614604205,"calibrationEstimate":2437731.887076691},{"id":"ons/female_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2497122.0,"estimate":2407409.1889739037,"calibrationEstimate":2418128.139254883},{"id":"ons/female_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2356214.0,"estimate":2354626.8180732727,"calibrationEstimate":2365110.7586767823},{"id":"ons/female_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2135556.0,"estimate":2146838.039360285,"calibrationEstimate":2156396.7979279608},{"id":"ons/female_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2206473.0,"estimate":2297529.9983963966,"calibrationEstimate":2307759.7106489986},{"id":"ons/female_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2340737.0,"estimate":2437237.7694670856,"calibrationEstimate":2448089.5275103897},{"id":"ons/female_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1918180.0,"estimate":2070228.5422207713,"calibrationEstimate":2079446.1990244535},{"id":"ons/female_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2248908.0,"estimate":2073595.834327519,"calibrationEstimate":2082828.495167717},{"id":"ons/female_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1890892.0,"estimate":1781039.4390323013,"calibrationEstimate":1788969.4821397066},{"id":"ons/female_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1619328.0,"estimate":1592091.0710516274,"calibrationEstimate":1599179.8343619704},{"id":"ons/female_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1575830.0,"estimate":1541204.8275257498,"calibrationEstimate":1548067.0152519343},{"id":"ons/female_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1064043.0,"estimate":2664726.503213957,"calibrationEstimate":2676591.14880161},{"id":"ons/female_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":766765.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/household_land_value","group":"Household land value","unit":"gbp","target":5042871548763.499,"estimate":5198482896887.592,"calibrationEstimate":5215371409340.588},{"id":"ons/household_land_value/EAST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":304799621177.5439,"estimate":311792425913.57996,"calibrationEstimate":312988388945.29297},{"id":"ons/household_land_value/EAST_OF_ENGLAND","group":"Household land value by region","unit":"gbp","target":542672059385.554,"estimate":546010650314.9476,"calibrationEstimate":548396090228.3013},{"id":"ons/household_land_value/LONDON","group":"Household land value by region","unit":"gbp","target":1188167933642.289,"estimate":1203185297593.549,"calibrationEstimate":1208464858198.298},{"id":"ons/household_land_value/NORTH_EAST","group":"Household land value by region","unit":"gbp","target":119603822538.99867,"estimate":120248252547.38388,"calibrationEstimate":120670781170.64792},{"id":"ons/household_land_value/NORTH_WEST","group":"Household land value by region","unit":"gbp","target":422892569458.29254,"estimate":432857394071.48694,"calibrationEstimate":433189776637.8822},{"id":"ons/household_land_value/SCOTLAND","group":"Household land value by region","unit":"gbp","target":280395193712.8084,"estimate":276640745849.4535,"calibrationEstimate":277860896632.4937},{"id":"ons/household_land_value/SOUTH_EAST","group":"Household land value by region","unit":"gbp","target":885848048153.7532,"estimate":895724028534.7693,"calibrationEstimate":899487561852.2374},{"id":"ons/household_land_value/SOUTH_WEST","group":"Household land value by region","unit":"gbp","target":456726035827.05096,"estimate":465653362247.4888,"calibrationEstimate":467005989225.08545},{"id":"ons/household_land_value/WALES","group":"Household land value by region","unit":"gbp","target":179320185054.4999,"estimate":188184118702.406,"calibrationEstimate":188687411488.70615},{"id":"ons/household_land_value/WEST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":364340113693.65784,"estimate":378739467069.95465,"calibrationEstimate":378904015968.6325},{"id":"ons/household_land_value/YORKSHIRE","group":"Household land value by region","unit":"gbp","target":298105966119.05054,"estimate":305323058887.67285,"calibrationEstimate":305558366397.4229},{"id":"ons/land_value","group":"Total land value","unit":"gbp","target":7100000000000.0,"estimate":7257131889855.828,"calibrationEstimate":7724952750742.861},{"id":"ons/lfs_employees","group":"Employees and self-employed people","unit":"count","target":29590000.0,"estimate":30415831.925368626,"calibrationEstimate":30551257.921766207},{"id":"ons/lfs_self_employed","group":"Employees and self-employed people","unit":"count","target":4395000.0,"estimate":4403629.709998399,"calibrationEstimate":4423236.792703286},{"id":"ons/london_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1042000.0,"estimate":1131491.4573817253,"calibrationEstimate":1136529.397939682},{"id":"ons/london_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1038000.0,"estimate":1037544.3274979593,"calibrationEstimate":1042163.9750480652},{"id":"ons/london_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1470000.0,"estimate":1451632.7812190056,"calibrationEstimate":1458096.1668362615},{"id":"ons/london_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1585000.0,"estimate":1492286.394011021,"calibrationEstimate":1498930.7603902817},{"id":"ons/london_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1314000.0,"estimate":1286887.5299487114,"calibrationEstimate":1292617.3732566831},{"id":"ons/london_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1078000.0,"estimate":1097971.444237709,"calibrationEstimate":1102860.1428632736},{"id":"ons/london_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":778000.0,"estimate":750930.0480790138,"calibrationEstimate":754273.5447840691},{"id":"ons/london_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":509000.0,"estimate":486360.6602535248,"calibrationEstimate":488526.16434693336},{"id":"ons/london_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":304000.0,"estimate":303559.92478847504,"calibrationEstimate":304911.5145406723},{"id":"ons/lone_households_over_65","group":"Households by family type","unit":"count","target":4254000.0,"estimate":5454455.018509299,"calibrationEstimate":5478740.884796768},{"id":"ons/lone_households_under_65","group":"Households by family type","unit":"count","target":4316000.0,"estimate":5250786.593510598,"calibrationEstimate":5274165.638094544},{"id":"ons/lone_parent_dependent_children_households","group":"Households by family type","unit":"count","target":1835000.0,"estimate":2798771.157480851,"calibrationEstimate":2811232.6388974935},{"id":"ons/lone_parent_non_dependent_children_households","group":"Households by family type","unit":"count","target":1204000.0,"estimate":1057331.2494069785,"calibrationEstimate":1062038.9998702407},{"id":"ons/male_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1784490.0,"estimate":1917864.3619012684,"calibrationEstimate":1926403.6264294984},{"id":"ons/male_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2143309.0,"estimate":2053535.895194322,"calibrationEstimate":2062679.227788061},{"id":"ons/male_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2149930.0,"estimate":2047459.0866241455,"calibrationEstimate":2056575.355904788},{"id":"ons/male_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2136737.0,"estimate":2167020.575371682,"calibrationEstimate":2176669.196182668},{"id":"ons/male_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2246892.0,"estimate":2353607.326105356,"calibrationEstimate":2364086.752364412},{"id":"ons/male_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2323977.0,"estimate":2306814.134287983,"calibrationEstimate":2317085.1808172166},{"id":"ons/male_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2325815.0,"estimate":2250484.0878130943,"calibrationEstimate":2260504.326561913},{"id":"ons/male_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2208064.0,"estimate":2202735.8511286825,"calibrationEstimate":2212543.500215322},{"id":"ons/male_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2040636.0,"estimate":2050379.9052236676,"calibrationEstimate":2059509.1825666577},{"id":"ons/male_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2119462.0,"estimate":2209499.6434261203,"calibrationEstimate":2219337.4005533904},{"id":"ons/male_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2234921.0,"estimate":2360950.5306516886,"calibrationEstimate":2371462.6275383234},{"id":"ons/male_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2011903.0,"estimate":2176776.512379959,"calibrationEstimate":2186468.5711850673},{"id":"ons/male_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2138720.0,"estimate":1998740.968729228,"calibrationEstimate":2007640.3199545296},{"id":"ons/male_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1785048.0,"estimate":1707467.9938359708,"calibrationEstimate":1715070.4678450525},{"id":"ons/male_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1472190.0,"estimate":1503642.8762648106,"calibrationEstimate":1510337.8170289395},{"id":"ons/male_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1370172.0,"estimate":1395090.3332718164,"calibrationEstimate":1401301.957366705},{"id":"ons/male_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":853423.0,"estimate":1009312.8459606916,"calibrationEstimate":1013806.7878290116},{"id":"ons/male_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":524918.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/multi_family_households","group":"Households by family type","unit":"count","target":244000.0,"estimate":3137645.9858644456,"calibrationEstimate":3151616.293736607},{"id":"ons/north_east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":281000.0,"estimate":292283.856153965,"calibrationEstimate":293585.24245643616},{"id":"ons/north_east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":311000.0,"estimate":316212.322912693,"calibrationEstimate":317620.25323677063},{"id":"ons/north_east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":343000.0,"estimate":352029.96956157684,"calibrationEstimate":353597.3771824837},{"id":"ons/north_east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":356000.0,"estimate":359699.50099754333,"calibrationEstimate":361301.0569238663},{"id":"ons/north_east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":323000.0,"estimate":327139.90297079086,"calibrationEstimate":328596.4853038788},{"id":"ons/north_east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":369000.0,"estimate":378836.79312348366,"calibrationEstimate":380523.55742669106},{"id":"ons/north_east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":353000.0,"estimate":351102.3077030182,"calibrationEstimate":352665.5838704109},{"id":"ons/north_east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":278000.0,"estimate":273663.8987689018,"calibrationEstimate":274882.38518714905},{"id":"ons/north_east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":153000.0,"estimate":154565.45491456983,"calibrationEstimate":155253.65523910522},{"id":"ons/north_west_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":847000.0,"estimate":907878.5675086976,"calibrationEstimate":911920.8865337372},{"id":"ons/north_west_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":901000.0,"estimate":905132.2707009315,"calibrationEstimate":909162.354482174},{"id":"ons/north_west_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":986000.0,"estimate":1002199.312697649,"calibrationEstimate":1006661.592706442},{"id":"ons/north_west_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1056000.0,"estimate":1021326.8112883568,"calibrationEstimate":1025874.23654747},{"id":"ons/north_west_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":938000.0,"estimate":930422.6213030816,"calibrationEstimate":934565.3206562996},{"id":"ons/north_west_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1011000.0,"estimate":1030291.0328922272,"calibrationEstimate":1034878.3873639108},{"id":"ons/north_west_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":888000.0,"estimate":844032.2021713257,"calibrationEstimate":847790.2315773964},{"id":"ons/north_west_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":715000.0,"estimate":663851.5968799591,"calibrationEstimate":666807.391629219},{"id":"ons/north_west_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":399000.0,"estimate":395580.82154369354,"calibrationEstimate":397342.1398239136},{"id":"ons/northern_ireland_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":234000.0,"estimate":238573.53098157048,"calibrationEstimate":239635.77313242853},{"id":"ons/northern_ireland_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":244000.0,"estimate":247808.06932733953,"calibrationEstimate":248911.4319036454},{"id":"ons/northern_ireland_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":230000.0,"estimate":232551.80645041168,"calibrationEstimate":233587.23901306093},{"id":"ons/northern_ireland_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":264000.0,"estimate":269491.1257661581,"calibrationEstimate":270691.02561856806},{"id":"ons/northern_ireland_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":254000.0,"estimate":257494.5271097273,"calibrationEstimate":258641.01725278795},{"id":"ons/northern_ireland_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":257000.0,"estimate":258119.9789763689,"calibrationEstimate":259269.25098092857},{"id":"ons/northern_ireland_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":224000.0,"estimate":232054.6853407323,"calibrationEstimate":233087.90260344744},{"id":"ons/northern_ireland_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":165000.0,"estimate":170104.10925373435,"calibrationEstimate":170861.4931807816},{"id":"ons/northern_ireland_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":93000.0,"estimate":98419.55169644952,"calibrationEstimate":98857.76071341336},{"id":"ons/public_sector_employment","group":"Public sector employment","unit":"count","target":5940000.0,"estimate":6304094.97840783,"calibrationEstimate":6332163.859895036},{"id":"ons/savings_interest_income","group":"Household savings interest","unit":"gbp","target":95477000000.0,"estimate":80129221535.43391,"calibrationEstimate":79246943861.21257},{"id":"ons/scotland_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":526000.0,"estimate":647600.8949885368,"calibrationEstimate":650484.328666091},{"id":"ons/scotland_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":597000.0,"estimate":659703.4958338141,"calibrationEstimate":662640.8183342814},{"id":"ons/scotland_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":709000.0,"estimate":740762.218244791,"calibrationEstimate":744060.4591063857},{"id":"ons/scotland_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":736000.0,"estimate":773940.4599794149,"calibrationEstimate":777386.4158806205},{"id":"ons/scotland_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":691000.0,"estimate":725636.149921596,"calibrationEstimate":728867.0354478359},{"id":"ons/scotland_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":788000.0,"estimate":794386.7686737776,"calibrationEstimate":797923.7666577101},{"id":"ons/scotland_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":727000.0,"estimate":654615.490395546,"calibrationEstimate":657530.1593027711},{"id":"ons/scotland_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":546000.0,"estimate":518987.09887486696,"calibrationEstimate":521297.8820120692},{"id":"ons/scotland_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":297000.0,"estimate":309508.9369607568,"calibrationEstimate":310887.0211943984},{"id":"ons/scotland_babies_under_1","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":46000.0,"estimate":48106.95701152086,"calibrationEstimate":48321.15257507563},{"id":"ons/scotland_children_under_16","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":892000.0,"estimate":956540.2894876004,"calibrationEstimate":960799.27374506},{"id":"ons/scotland_households_3plus_children","group":"Scottish households with three or more children","unit":"count","target":82000.0,"estimate":86080.43200981617,"calibrationEstimate":86463.70450717211},{"id":"ons/south_east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1039000.0,"estimate":1114232.5491027832,"calibrationEstimate":1119193.650694847},{"id":"ons/south_east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1114000.0,"estimate":1104025.5058307648,"calibrationEstimate":1108941.1569581032},{"id":"ons/south_east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1093000.0,"estimate":1101930.081794262,"calibrationEstimate":1106836.4138650894},{"id":"ons/south_east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1283000.0,"estimate":1222137.9367275238,"calibrationEstimate":1227579.4830198288},{"id":"ons/south_east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1273000.0,"estimate":1233437.5373487473,"calibrationEstimate":1238929.3965697289},{"id":"ons/south_east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1287000.0,"estimate":1315585.8211021423,"calibrationEstimate":1321443.4466571808},{"id":"ons/south_east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1089000.0,"estimate":1013925.5353107452,"calibrationEstimate":1018440.030857563},{"id":"ons/south_east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":927000.0,"estimate":834819.8441057205,"calibrationEstimate":838536.8671865463},{"id":"ons/south_east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":559000.0,"estimate":542841.088037014,"calibrationEstimate":545258.0736494064},{"id":"ons/south_west_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":576000.0,"estimate":604655.1198301315,"calibrationEstimate":607347.3345069885},{"id":"ons/south_west_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":646000.0,"estimate":654375.9588766098,"calibrationEstimate":657289.5604567528},{"id":"ons/south_west_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":694000.0,"estimate":709386.0963587761,"calibrationEstimate":712544.6284022331},{"id":"ons/south_west_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":743000.0,"estimate":732462.76395607,"calibrationEstimate":735724.0381350517},{"id":"ons/south_west_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":704000.0,"estimate":701804.148378849,"calibrationEstimate":704928.919002533},{"id":"ons/south_west_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":794000.0,"estimate":812267.9054384232,"calibrationEstimate":815884.5122971535},{"id":"ons/south_west_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":741000.0,"estimate":714519.8350300789,"calibrationEstimate":717701.2218279839},{"id":"ons/south_west_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":662000.0,"estimate":619540.1825652122,"calibrationEstimate":622298.66963768},{"id":"ons/south_west_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":388000.0,"estimate":382782.8248333931,"calibrationEstimate":384487.1622633934},{"id":"ons/tenure_england_owned_outright","group":"Dwellings in England, in total and by tenure","unit":"count","target":8374612.0,"estimate":8764165.854846716,"calibrationEstimate":8803188.14887619},{"id":"ons/tenure_england_owned_with_mortgage","group":"Dwellings in England, in total and by tenure","unit":"count","target":7667051.0,"estimate":7360170.187984467,"calibrationEstimate":7392941.221483231},{"id":"ons/tenure_england_rented_privately","group":"Dwellings in England, in total and by tenure","unit":"count","target":5299840.0,"estimate":5789919.019839287,"calibrationEstimate":5815698.559220791},{"id":"ons/tenure_england_social_rent","group":"Dwellings in England, in total and by tenure","unit":"count","target":4274613.0,"estimate":4272671.371180296,"calibrationEstimate":4291695.364801168},{"id":"ons/tenure_england_total","group":"Dwellings in England, in total and by tenure","unit":"count","target":25616116.0,"estimate":26186926.433850765,"calibrationEstimate":26303523.29438138},{"id":"ons/uk_population","group":"UK population, in total and by sex and five-year age band","unit":"count","target":69502341.0,"estimate":69712844.3129216,"calibrationEstimate":70023239.6145},{"id":"ons/unrelated_adult_households","group":"Households by family type","unit":"count","target":813000.0,"estimate":1057450.6047298163,"calibrationEstimate":1062158.8866242766},{"id":"ons/wales_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":325000.0,"estimate":348106.06233742833,"calibrationEstimate":349655.9994878471},{"id":"ons/wales_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":362000.0,"estimate":377852.1347847581,"calibrationEstimate":379534.51495823264},{"id":"ons/wales_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":389000.0,"estimate":421177.7128336728,"calibrationEstimate":423053.0000615418},{"id":"ons/wales_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":408000.0,"estimate":408298.51544573903,"calibrationEstimate":410116.45715788007},{"id":"ons/wales_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":374000.0,"estimate":386225.7205041647,"calibrationEstimate":387945.3860552907},{"id":"ons/wales_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":432000.0,"estimate":453846.15008094907,"calibrationEstimate":455866.8945379853},{"id":"ons/wales_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":407000.0,"estimate":411359.2729103267,"calibrationEstimate":413190.8414015472},{"id":"ons/wales_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":343000.0,"estimate":340773.34702190757,"calibrationEstimate":342290.63411542773},{"id":"ons/wales_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":190000.0,"estimate":193830.5397951007,"calibrationEstimate":194693.5690819025},{"id":"ons/west_midlands_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":700000.0,"estimate":739812.0893673897,"calibrationEstimate":743106.0936331749},{"id":"ons/west_midlands_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":743000.0,"estimate":750032.0111775398,"calibrationEstimate":753371.5123896599},{"id":"ons/west_midlands_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":774000.0,"estimate":782119.0841474533,"calibrationEstimate":785601.4645900726},{"id":"ons/west_midlands_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":834000.0,"estimate":829667.6420812607,"calibrationEstimate":833361.7243332863},{"id":"ons/west_midlands_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":758000.0,"estimate":759738.0727472305,"calibrationEstimate":763120.7843537331},{"id":"ons/west_midlands_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":800000.0,"estimate":820177.6517162323,"calibrationEstimate":823829.4666743279},{"id":"ons/west_midlands_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":685000.0,"estimate":663277.1520633698,"calibrationEstimate":666230.3836565018},{"id":"ons/west_midlands_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":570000.0,"estimate":543874.736948967,"calibrationEstimate":546296.3349237442},{"id":"ons/west_midlands_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":337000.0,"estimate":342024.45200538635,"calibrationEstimate":343547.31078481674},{"id":"ons/yorkshire_and_the_humber_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":618000.0,"estimate":648706.7535791397,"calibrationEstimate":651595.1075530052},{"id":"ons/yorkshire_and_the_humber_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":666000.0,"estimate":665860.9753584862,"calibrationEstimate":668825.70743227},{"id":"ons/yorkshire_and_the_humber_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":733000.0,"estimate":743138.1404109001,"calibrationEstimate":746446.95353508},{"id":"ons/yorkshire_and_the_humber_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":764000.0,"estimate":747053.2144784927,"calibrationEstimate":750379.460542202},{"id":"ons/yorkshire_and_the_humber_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":686000.0,"estimate":674619.9282107353,"calibrationEstimate":677623.6605932713},{"id":"ons/yorkshire_and_the_humber_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":745000.0,"estimate":752040.3539185524,"calibrationEstimate":755388.8066067696},{"id":"ons/yorkshire_and_the_humber_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":658000.0,"estimate":624463.3849864006,"calibrationEstimate":627243.798564434},{"id":"ons/yorkshire_and_the_humber_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":536000.0,"estimate":496824.7366466522,"calibrationEstimate":499036.8403120041},{"id":"ons/yorkshire_and_the_humber_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":302000.0,"estimate":295722.3997733593,"calibrationEstimate":297039.09796380997},{"id":"slc/adult_dependants_grant_recipients","group":"Adult Dependants' Grant: recipients and spending","unit":"count","target":18611.0,"estimate":10488.390624523165,"calibrationEstimate":17919.595499515533},{"id":"slc/adult_dependants_grant_spend","group":"Adult Dependants' Grant: recipients and spending","unit":"gbp","target":55364917.0,"estimate":37181344.76393461,"calibrationEstimate":63524966.045782566},{"id":"slc/maintenance_loan_recipients","group":"Maintenance loans: recipients and spending","unit":"count","target":1159761.0,"estimate":1115007.2203326223,"calibrationEstimate":1119971.7707395554},{"id":"slc/maintenance_loan_spend","group":"Maintenance loans: recipients and spending","unit":"gbp","target":8591659718.0,"estimate":9243921660.334114,"calibrationEstimate":9310652595.32858},{"id":"slc/parents_learning_allowance_recipients","group":"Parents' Learning Allowance: recipients and spending","unit":"count","target":99645.0,"estimate":98858.3031744957,"calibrationEstimate":99298.4696264267},{"id":"slc/parents_learning_allowance_spend","group":"Parents' Learning Allowance: recipients and spending","unit":"gbp","target":181421659.0,"estimate":200089205.6251793,"calibrationEstimate":200980102.52388763},{"id":"slc/plan_2_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":3985000.0,"estimate":4365258.374378204,"calibrationEstimate":4384694.640698433},{"id":"slc/plan_2_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":8940000.0,"estimate":6805751.482197762,"calibrationEstimate":6836054.020182133},{"id":"slc/plan_5_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":0.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/plan_5_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":10000.0,"estimate":10850.591648101808,"calibrationEstimate":10898.90371274948},{"id":"slc/student_loan_repayment/england","group":"Student loan repayments, by nation and plan","unit":"gbp","target":5018231834.95,"estimate":5119208721.2338,"calibrationEstimate":4961058450.910856},{"id":"slc/student_loan_repayment/england/plan_1","group":"Student loan repayments, by nation and plan","unit":"gbp","target":1852699178.55,"estimate":1953753088.251544,"calibrationEstimate":1935645687.413804},{"id":"slc/student_loan_repayment/england/plan_2","group":"Student loan repayments, by nation and plan","unit":"gbp","target":2778253361.64,"estimate":3163065937.3426647,"calibrationEstimate":3023410861.2912726},{"id":"slc/student_loan_repayment/england/plan_5","group":"Student loan repayments, by nation and plan","unit":"gbp","target":40869580.81,"estimate":2389695.639591503,"calibrationEstimate":2001902.205781548},{"id":"slc/student_loan_repayment/england/postgraduate","group":"Student loan repayments, by nation and plan","unit":"gbp","target":346409713.95,"estimate":0.0,"calibrationEstimate":0.0},{"id":"slc/student_loan_repayment/northern_ireland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":181700000.0,"estimate":195403289.8778463,"calibrationEstimate":188624377.49343297},{"id":"slc/student_loan_repayment/scotland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":203300000.0,"estimate":221132909.0659362,"calibrationEstimate":213564948.46889892},{"id":"slc/student_loan_repayment/wales","group":"Student loan repayments, by nation and plan","unit":"gbp","target":229100000.0,"estimate":247405370.84255865,"calibrationEstimate":238897353.28110468},{"id":"sss/scottish_child_payment","group":"Scottish Child Payment spending","unit":"gbp","target":471000000.0,"estimate":497726869.8419191,"calibrationEstimate":499942991.15633214},{"id":"voa/council_tax/EAST_MIDLANDS/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":804340.0,"estimate":812220.3750844002,"calibrationEstimate":815836.7769055367},{"id":"voa/council_tax/EAST_MIDLANDS/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":505610.0,"estimate":512867.9080028534,"calibrationEstimate":515151.44179964066},{"id":"voa/council_tax/EAST_MIDLANDS/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":403840.0,"estimate":409527.9134449959,"calibrationEstimate":411351.3289835453},{"id":"voa/council_tax/EAST_MIDLANDS/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":247850.0,"estimate":252952.60029935837,"calibrationEstimate":254078.8680486679},{"id":"voa/council_tax/EAST_MIDLANDS/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":154970.0,"estimate":158834.98216819763,"calibrationEstimate":159542.19471597672},{"id":"voa/council_tax/EAST_MIDLANDS/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":73920.0,"estimate":76145.44448757172,"calibrationEstimate":76484.48072099686},{"id":"voa/council_tax/EAST_MIDLANDS/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":39400.0,"estimate":40296.69438171387,"calibrationEstimate":40476.11449241638},{"id":"voa/council_tax/EAST_MIDLANDS/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3480.0,"estimate":3560.398073196411,"calibrationEstimate":3576.250594139099},{"id":"voa/council_tax/EAST_MIDLANDS/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2233400.0,"estimate":2266406.315942287,"calibrationEstimate":2276497.4562609196},{"id":"voa/council_tax/EAST_OF_ENGLAND/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":403180.0,"estimate":410904.2397751808,"calibrationEstimate":412733.7905740738},{"id":"voa/council_tax/EAST_OF_ENGLAND/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":598950.0,"estimate":611632.8573641777,"calibrationEstimate":614356.1372361183},{"id":"voa/council_tax/EAST_OF_ENGLAND/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":739570.0,"estimate":750946.7586493492,"calibrationEstimate":754290.3465647697},{"id":"voa/council_tax/EAST_OF_ENGLAND/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":506540.0,"estimate":517253.3751280308,"calibrationEstimate":519556.4378812313},{"id":"voa/council_tax/EAST_OF_ENGLAND/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":313840.0,"estimate":318550.18431663513,"calibrationEstimate":319968.5263018608},{"id":"voa/council_tax/EAST_OF_ENGLAND/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":172960.0,"estimate":177523.18523740768,"calibrationEstimate":178313.60445976257},{"id":"voa/council_tax/EAST_OF_ENGLAND/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":113720.0,"estimate":116179.86512231828,"calibrationEstimate":116697.15281319618},{"id":"voa/council_tax/EAST_OF_ENGLAND/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14830.0,"estimate":15408.850413322449,"calibrationEstimate":15477.458395004272},{"id":"voa/council_tax/EAST_OF_ENGLAND/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2863600.0,"estimate":2918399.316006422,"calibrationEstimate":2931393.454226017},{"id":"voa/council_tax/LONDON/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":144550.0,"estimate":150375.55367183685,"calibrationEstimate":151045.09367752075},{"id":"voa/council_tax/LONDON/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":499130.0,"estimate":511106.1657552719,"calibrationEstimate":513381.8522338867},{"id":"voa/council_tax/LONDON/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1040280.0,"estimate":1052713.1613850594,"calibrationEstimate":1057400.3456015587},{"id":"voa/council_tax/LONDON/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":975750.0,"estimate":988912.67416811,"calibrationEstimate":993315.7964680196},{"id":"voa/council_tax/LONDON/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":585130.0,"estimate":604620.8762998581,"calibrationEstimate":607312.9413566589},{"id":"voa/council_tax/LONDON/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":298920.0,"estimate":308940.16441679,"calibrationEstimate":310315.7166080475},{"id":"voa/council_tax/LONDON/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":225170.0,"estimate":230670.46613502505,"calibrationEstimate":231697.5183286667},{"id":"voa/council_tax/LONDON/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":68500.0,"estimate":70754.35682678223,"calibrationEstimate":71069.39036178589},{"id":"voa/council_tax/LONDON/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3837430.0,"estimate":3918093.4186587334,"calibrationEstimate":3935538.6546361446},{"id":"voa/council_tax/NORTH_EAST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":667540.0,"estimate":680737.9537260532,"calibrationEstimate":683768.9220235348},{"id":"voa/council_tax/NORTH_EAST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":206790.0,"estimate":211970.4058327675,"calibrationEstimate":212914.200009346},{"id":"voa/council_tax/NORTH_EAST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":196180.0,"estimate":202087.55218410492,"calibrationEstimate":202987.3474559784},{"id":"voa/council_tax/NORTH_EAST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":113460.0,"estimate":115930.2783408165,"calibrationEstimate":116446.45661735536},{"id":"voa/council_tax/NORTH_EAST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":61090.0,"estimate":61207.41867017746,"calibrationEstimate":61479.942474365234},{"id":"voa/council_tax/NORTH_EAST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":26600.0,"estimate":26356.495221138,"calibrationEstimate":26473.84709215164},{"id":"voa/council_tax/NORTH_EAST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14600.0,"estimate":15486.845539569857,"calibrationEstimate":15555.80025434494},{"id":"voa/council_tax/NORTH_EAST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1570.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_EAST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1287830.0,"estimate":1313776.9495146277,"calibrationEstimate":1319626.5159270763},{"id":"voa/council_tax/NORTH_WEST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1386260.0,"estimate":1391080.06063509,"calibrationEstimate":1397273.8202409744},{"id":"voa/council_tax/NORTH_WEST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":705450.0,"estimate":715903.5987789631,"calibrationEstimate":719091.151144743},{"id":"voa/council_tax/NORTH_WEST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":616070.0,"estimate":626632.3857769966,"calibrationEstimate":629422.4471478462},{"id":"voa/council_tax/NORTH_WEST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":363970.0,"estimate":371361.08140420914,"calibrationEstimate":373014.5641813278},{"id":"voa/council_tax/NORTH_WEST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":216990.0,"estimate":223131.46934127808,"calibrationEstimate":224124.959856987},{"id":"voa/council_tax/NORTH_WEST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":104330.0,"estimate":107420.41505765916,"calibrationEstimate":107898.70176649094},{"id":"voa/council_tax/NORTH_WEST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":65750.0,"estimate":67545.51971292496,"calibrationEstimate":67846.26735258102},{"id":"voa/council_tax/NORTH_WEST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":7350.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_WEST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3466140.0,"estimate":3503074.530707121,"calibrationEstimate":3518671.9116909504},{"id":"voa/council_tax/SCOTLAND/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":498707.0,"estimate":519230.9023320675,"calibrationEstimate":521542.7701560855},{"id":"voa/council_tax/SCOTLAND/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":583705.0,"estimate":602046.806920588,"calibrationEstimate":604727.4127128124},{"id":"voa/council_tax/SCOTLAND/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":426388.0,"estimate":445115.3774691224,"calibrationEstimate":447097.24797928333},{"id":"voa/council_tax/SCOTLAND/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":369621.0,"estimate":390433.5805595517,"calibrationEstimate":392171.9807073474},{"id":"voa/council_tax/SCOTLAND/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":366881.0,"estimate":383971.6045381427,"calibrationEstimate":385681.2364856601},{"id":"voa/council_tax/SCOTLAND/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":221282.0,"estimate":230924.03558689356,"calibrationEstimate":231952.2210955024},{"id":"voa/council_tax/SCOTLAND/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":142084.0,"estimate":147640.03100788593,"calibrationEstimate":148297.3968727589},{"id":"voa/council_tax/SCOTLAND/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14481.0,"estimate":14844.596238613129,"calibrationEstimate":14910.691596031187},{"id":"voa/council_tax/SCOTLAND/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2623149.0,"estimate":2734206.934652865,"calibrationEstimate":2746380.957605481},{"id":"voa/council_tax/SOUTH_EAST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":367610.0,"estimate":376721.3822689056,"calibrationEstimate":378398.7290725708},{"id":"voa/council_tax/SOUTH_EAST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":687430.0,"estimate":700808.5503644943,"calibrationEstimate":703928.8838472366},{"id":"voa/council_tax/SOUTH_EAST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1075940.0,"estimate":1090040.558608532,"calibrationEstimate":1094893.946111679},{"id":"voa/council_tax/SOUTH_EAST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":843560.0,"estimate":858553.6785125732,"calibrationEstimate":862376.3792462349},{"id":"voa/council_tax/SOUTH_EAST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":551730.0,"estimate":567477.6824498177,"calibrationEstimate":570004.3656759262},{"id":"voa/council_tax/SOUTH_EAST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":337260.0,"estimate":344590.2440838814,"calibrationEstimate":346124.52712106705},{"id":"voa/council_tax/SOUTH_EAST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":265610.0,"estimate":273549.8351545334,"calibrationEstimate":274767.8116083145},{"id":"voa/council_tax/SOUTH_EAST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":40390.0,"estimate":41414.243516922,"calibrationEstimate":41598.64037132263},{"id":"voa/council_tax/SOUTH_EAST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":4169520.0,"estimate":4253156.17495966,"calibrationEstimate":4272093.283054352},{"id":"voa/council_tax/SOUTH_WEST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":473020.0,"estimate":482912.787299633,"calibrationEstimate":485062.9522204399},{"id":"voa/council_tax/SOUTH_WEST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":644890.0,"estimate":652833.0327134132,"calibrationEstimate":655739.7580933571},{"id":"voa/council_tax/SOUTH_WEST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":624030.0,"estimate":630313.4024662971,"calibrationEstimate":633119.8610377312},{"id":"voa/council_tax/SOUTH_WEST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":432070.0,"estimate":436333.3158068657,"calibrationEstimate":438276.0832939148},{"id":"voa/council_tax/SOUTH_WEST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":292090.0,"estimate":296615.94530296326,"calibrationEstimate":297936.61835718155},{"id":"voa/council_tax/SOUTH_WEST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":147920.0,"estimate":150589.5069141388,"calibrationEstimate":151260.00522136688},{"id":"voa/council_tax/SOUTH_WEST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":81960.0,"estimate":83527.61182880402,"calibrationEstimate":83899.51695775986},{"id":"voa/council_tax/SOUTH_WEST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":8430.0,"estimate":8669.152314662933,"calibrationEstimate":8707.751531600952},{"id":"voa/council_tax/SOUTH_WEST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2704390.0,"estimate":2741794.754646778,"calibrationEstimate":2754002.546713352},{"id":"voa/council_tax/WALES/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":215380.0,"estimate":224605.6820923984,"calibrationEstimate":225605.73692715168},{"id":"voa/council_tax/WALES/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":307070.0,"estimate":320208.17440497875,"calibrationEstimate":321633.8936638236},{"id":"voa/council_tax/WALES/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":323220.0,"estimate":335451.0971978903,"calibrationEstimate":336944.68964356184},{"id":"voa/council_tax/WALES/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":241220.0,"estimate":250254.17059534788,"calibrationEstimate":251368.4234211743},{"id":"voa/council_tax/WALES/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":200840.0,"estimate":211026.1240774095,"calibrationEstimate":211965.71487867832},{"id":"voa/council_tax/WALES/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":122650.0,"estimate":126898.85001176596,"calibrationEstimate":127463.86601752044},{"id":"voa/council_tax/WALES/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":55190.0,"estimate":58875.90761309862,"calibrationEstimate":59138.051686525345},{"id":"voa/council_tax/WALES/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":13190.0,"estimate":13777.90127837658,"calibrationEstimate":13839.247251331806},{"id":"voa/council_tax/WALES/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1484410.0,"estimate":1580971.558793813,"calibrationEstimate":1588010.8121637702},{"id":"voa/council_tax/WEST_MIDLANDS/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":786010.0,"estimate":801264.3020524979,"calibrationEstimate":804831.908847332},{"id":"voa/council_tax/WEST_MIDLANDS/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":654140.0,"estimate":667366.4046912193,"calibrationEstimate":670337.8446173668},{"id":"voa/council_tax/WEST_MIDLANDS/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":526260.0,"estimate":542465.0707445145,"calibrationEstimate":544880.3880476952},{"id":"voa/council_tax/WEST_MIDLANDS/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":302500.0,"estimate":308908.68011569977,"calibrationEstimate":310284.0953936577},{"id":"voa/council_tax/WEST_MIDLANDS/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":193700.0,"estimate":198747.3023056984,"calibrationEstimate":199632.22103261948},{"id":"voa/council_tax/WEST_MIDLANDS/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":105630.0,"estimate":107414.5040140152,"calibrationEstimate":107892.76392650604},{"id":"voa/council_tax/WEST_MIDLANDS/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":62780.0,"estimate":65637.16608524323,"calibrationEstimate":65929.41587018967},{"id":"voa/council_tax/WEST_MIDLANDS/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":6170.0,"estimate":6236.679645061493,"calibrationEstimate":6264.44837474823},{"id":"voa/council_tax/WEST_MIDLANDS/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2637190.0,"estimate":2698040.1096539497,"calibrationEstimate":2710053.086110115},{"id":"voa/council_tax/YORKSHIRE/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1070830.0,"estimate":1081951.5106871128,"calibrationEstimate":1086768.8853447435},{"id":"voa/council_tax/YORKSHIRE/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":514190.0,"estimate":523395.8514652252,"calibrationEstimate":525726.2633414268},{"id":"voa/council_tax/YORKSHIRE/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":432290.0,"estimate":438533.7035779953,"calibrationEstimate":440486.2676320076},{"id":"voa/council_tax/YORKSHIRE/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":249530.0,"estimate":251634.06920957565,"calibrationEstimate":252754.46445512772},{"id":"voa/council_tax/YORKSHIRE/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":158600.0,"estimate":159460.23387098312,"calibrationEstimate":160170.2293252945},{"id":"voa/council_tax/YORKSHIRE/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":75690.0,"estimate":76176.12427806854,"calibrationEstimate":76515.29922580719},{"id":"voa/council_tax/YORKSHIRE/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":42180.0,"estimate":43033.37067222595,"calibrationEstimate":43224.9764380455},{"id":"voa/council_tax/YORKSHIRE/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3770.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/YORKSHIRE/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2547080.0,"estimate":2574184.8637611866,"calibrationEstimate":2585646.385762453}] +[{"id":"dwp/benefit_cap_total_reduction","group":"Benefit cap: households capped and total reduction","unit":"gbp","target":320866000.0,"estimate":420277484.4052875,"calibrationEstimate":329246934.0538736},{"id":"dwp/benefit_capped_households","group":"Benefit cap: households capped and total reduction","unit":"count","target":110637.0,"estimate":143372.2685265243,"calibrationEstimate":114135.32040429115},{"id":"dwp/esa_claimants","group":"Employment and Support Allowance claimants","unit":"count","target":999000.0,"estimate":907580.280009076,"calibrationEstimate":914682.9074813873},{"id":"dwp/esa_contrib_claimants","group":"Contribution-based ESA claimants","unit":"count","target":620000.0,"estimate":721684.3135545999,"calibrationEstimate":724897.6035846621},{"id":"dwp/esa_income_claimants","group":"Income-related ESA claimants","unit":"count","target":180000.0,"estimate":186830.98939606547,"calibrationEstimate":190724.49000364545},{"id":"dwp/housing_benefit/over_pension_credit_age","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":7114700000.0,"estimate":7238354327.413044,"calibrationEstimate":7276466806.410732},{"id":"dwp/housing_benefit/over_pension_credit_age_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":1109000.0,"estimate":1096468.4388287663,"calibrationEstimate":1156767.4603350165},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs","group":"Housing Benefit claims and spending, by age group","unit":"gbp","target":584800000.0,"estimate":642422969.003366,"calibrationEstimate":611366273.2467595},{"id":"dwp/housing_benefit/under_pension_credit_age_general_needs_claims","group":"Housing Benefit claims and spending, by age group","unit":"count","target":107000.0,"estimate":108998.3622969389,"calibrationEstimate":111738.6739153862},{"id":"dwp/jsa_claimants","group":"Jobseeker's Allowance claimants","unit":"count","target":71000.0,"estimate":67182.8121483326,"calibrationEstimate":67481.9421274662},{"id":"dwp/pension_credit","group":"Pension Credit claims and spending","unit":"gbp","target":6144470000.0,"estimate":6543605380.467559,"calibrationEstimate":6317965591.991638},{"id":"dwp/pension_credit_claims","group":"Pension Credit claims and spending","unit":"count","target":1382000.0,"estimate":1440523.2215756774,"calibrationEstimate":1440750.0723672211},{"id":"dwp/pip_dl_enhanced_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1608000.0,"estimate":1949262.7197046727,"calibrationEstimate":1957941.7748835832},{"id":"dwp/pip_dl_standard_claimants","group":"PIP daily living claimants, standard and enhanced rate","unit":"count","target":1283000.0,"estimate":1418278.8822115362,"calibrationEstimate":1424593.751917839},{"id":"dwp/scotland_uc_households_child_under_1","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":14000.0,"estimate":14434.693422198296,"calibrationEstimate":14498.963575959206},{"id":"dwp/uc/claimants_couple_no_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":231368.0,"estimate":251645.0842576325,"calibrationEstimate":253775.65014186504},{"id":"dwp/uc/claimants_couple_with_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":839379.0,"estimate":920437.0141823292,"calibrationEstimate":910338.5848810672},{"id":"dwp/uc/claimants_single_no_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":2868011.0,"estimate":2901368.451174706,"calibrationEstimate":2913806.9952308834},{"id":"dwp/uc/claimants_single_with_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":2156879.0,"estimate":2397600.0135367066,"calibrationEstimate":2408339.512530759},{"id":"dwp/uc/claimants_with_1_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":1222944.0,"estimate":1290048.4019334614,"calibrationEstimate":1298578.7929754255},{"id":"dwp/uc/claimants_with_2_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":1058967.0,"estimate":1133636.0265382675,"calibrationEstimate":1123579.5557842702},{"id":"dwp/uc/claimants_with_3_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":473500.0,"estimate":505297.55162778497,"calibrationEstimate":506856.0474027395},{"id":"dwp/uc/claimants_with_4_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":166790.0,"estimate":175365.1706444621,"calibrationEstimate":175192.02350199223},{"id":"dwp/uc/claimants_with_5+_children","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":75910.0,"estimate":78900.3417494297,"calibrationEstimate":79187.38703373075},{"id":"dwp/uc/households","group":"Universal Credit households: total, by family type and number of children, and Scottish households with a child under 1","unit":"count","target":6700000.0,"estimate":6371587.519835666,"calibrationEstimate":6383860.978453442},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":7610.0,"estimate":7959.640821099281,"calibrationEstimate":7605.066323518753},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12370.0,"estimate":14085.733373343945,"calibrationEstimate":12818.674633443356},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":15175.0,"estimate":13798.411327719688,"calibrationEstimate":15981.371981173754},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":12297.0,"estimate":11735.120561599731,"calibrationEstimate":13242.12094849348},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17828.0,"estimate":17515.16640430689,"calibrationEstimate":18792.442840576172},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":14427.0,"estimate":19212.621490359303,"calibrationEstimate":14976.661208152773},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":11892.0,"estimate":16101.140619933603,"calibrationEstimate":12232.976689219477},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":9463.0,"estimate":10739.991858005524,"calibrationEstimate":9852.622594118118},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8443.0,"estimate":9546.160400986671,"calibrationEstimate":8769.15165424347},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":8906.0,"estimate":7810.887748003006,"calibrationEstimate":9091.250428199768},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5770.0,"estimate":4042.473407268524,"calibrationEstimate":6020.167066574097},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":3485.0,"estimate":5865.2260093688965,"calibrationEstimate":3583.413887023926},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":2360.0,"estimate":2380.2955379486084,"calibrationEstimate":2446.4144439697266},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":1815.0,"estimate":449.379988193512,"calibrationEstimate":1857.750276565552},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":1186.0,"estimate":2189.326292037964,"calibrationEstimate":1184.796392440796},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":935.0,"estimate":1411.3474731445312,"calibrationEstimate":953.2982177734376},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":632.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":580.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":11750.0,"estimate":8976.319398880005,"calibrationEstimate":11951.038440227509},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":1424.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":10802.0,"estimate":11496.398145318031,"calibrationEstimate":11228.40871143341},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12168.0,"estimate":15510.0146048069,"calibrationEstimate":12441.285652756693},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":12461.0,"estimate":11695.379441082478,"calibrationEstimate":13070.561090826988},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":15787.0,"estimate":14398.946074932814,"calibrationEstimate":16195.208846509457},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":14248.0,"estimate":12420.245375096798,"calibrationEstimate":14547.68860399723},{"id":"dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":17559.0,"estimate":15465.925564289091,"calibrationEstimate":17959.53142374754},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":18714.0,"estimate":30025.99932423234,"calibrationEstimate":18895.36321645975},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":42188.0,"estimate":35047.938642024994,"calibrationEstimate":43884.73221629858},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":41520.0,"estimate":51711.97543537617,"calibrationEstimate":43371.17413067818},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":41159.0,"estimate":41750.11730480194,"calibrationEstimate":43027.68107223511},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":42515.0,"estimate":47705.00673866272,"calibrationEstimate":44731.82452774048},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":38527.0,"estimate":42984.10455608368,"calibrationEstimate":40379.20692062378},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":38894.0,"estimate":39088.4890384078,"calibrationEstimate":40441.28799796104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":38659.0,"estimate":40492.86055743694,"calibrationEstimate":40370.33115839958},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34318.0,"estimate":35905.02676939964,"calibrationEstimate":35504.24102163315},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":22489.0,"estimate":22285.48500943184,"calibrationEstimate":23197.631507992744},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":30116.0,"estimate":36648.54347670078,"calibrationEstimate":30997.982926368713},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":28519.0,"estimate":23009.50212860107,"calibrationEstimate":30068.457731485367},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":26014.0,"estimate":20082.98536062241,"calibrationEstimate":26958.268954634663},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":23159.0,"estimate":40125.43819582462,"calibrationEstimate":24155.145071029663},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":20618.0,"estimate":17166.794218063354,"calibrationEstimate":21459.20211172104},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":17493.0,"estimate":18731.729355216023,"calibrationEstimate":18374.31150150299},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":15437.0,"estimate":5448.745144844055,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":12836.0,"estimate":12086.062953948976,"calibrationEstimate":13552.36041355133},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":26734.0,"estimate":25804.71644371748,"calibrationEstimate":27646.238845169544},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":61727.0,"estimate":65852.79870706797,"calibrationEstimate":64688.72373223305},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":29189.0,"estimate":26083.59504055977,"calibrationEstimate":30210.315254449844},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":33137.0,"estimate":33464.836079359055,"calibrationEstimate":34324.827239871025},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":35834.0,"estimate":35736.94944322109,"calibrationEstimate":37281.17119139433},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":38338.0,"estimate":39285.76206564903,"calibrationEstimate":39890.85791552067},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":40685.0,"estimate":44422.339519649744,"calibrationEstimate":42333.74279844761},{"id":"dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":40564.0,"estimate":37381.334486961365,"calibrationEstimate":42253.61854362488},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":24639.0,"estimate":25569.58669412136,"calibrationEstimate":25503.338365912437},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":126949.0,"estimate":146624.77924485505,"calibrationEstimate":133615.629636541},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":131129.0,"estimate":92342.89698189496,"calibrationEstimate":138094.26994258165},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":131289.0,"estimate":144518.4015300274,"calibrationEstimate":137656.32671639323},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":119355.0,"estimate":137330.1572279036,"calibrationEstimate":125296.71480217576},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":130802.0,"estimate":134775.3830974996,"calibrationEstimate":137310.48797786236},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":141848.0,"estimate":140629.22011247277,"calibrationEstimate":148397.63872480392},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":136835.0,"estimate":136106.15410852432,"calibrationEstimate":143669.09012004733},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":107556.0,"estimate":106817.33383989334,"calibrationEstimate":112450.50950849056},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":34670.0,"estimate":37897.15785074234,"calibrationEstimate":36187.59876298904},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":86616.0,"estimate":113801.7099339068,"calibrationEstimate":90758.22407090664},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":80294.0,"estimate":66474.81143283844,"calibrationEstimate":84122.98429310322},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":70309.0,"estimate":88476.15575143695,"calibrationEstimate":73828.14300042391},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":50510.0,"estimate":65694.46049672365,"calibrationEstimate":53064.04161286354},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":42522.0,"estimate":16217.98472571373,"calibrationEstimate":44675.33658289909},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":33508.0,"estimate":57719.63000911474,"calibrationEstimate":34838.68196249008},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":27063.0,"estimate":30007.78394842148,"calibrationEstimate":28560.54615688324},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":21663.0,"estimate":24437.567274332047,"calibrationEstimate":22655.056193768974},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":43623.0,"estimate":40266.3603438735,"calibrationEstimate":45667.00149989128},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":82905.0,"estimate":101443.65044826268,"calibrationEstimate":87161.93394374847},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":55622.0,"estimate":49747.535418987274,"calibrationEstimate":58083.16894483566},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":67901.0,"estimate":80974.84673249722,"calibrationEstimate":71538.14330899715},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":89314.0,"estimate":90631.22738707066,"calibrationEstimate":93693.98563200235},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":118641.0,"estimate":123233.05341666935,"calibrationEstimate":124299.59559828044},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":99069.0,"estimate":98185.38308164476,"calibrationEstimate":103796.81563779712},{"id":"dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":102251.0,"estimate":104559.88562935592,"calibrationEstimate":107547.05457144976},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":102312.0,"estimate":91995.22727757692,"calibrationEstimate":106563.12731039524},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":95698.0,"estimate":133913.38314414024,"calibrationEstimate":100151.0966321826},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":106663.0,"estimate":140764.70458567142,"calibrationEstimate":111735.06644508244},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":181180.0,"estimate":175916.74709247053,"calibrationEstimate":191916.16232267025},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":189861.0,"estimate":181343.7897684872,"calibrationEstimate":200006.78631828725},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":129174.0,"estimate":190923.97992688417,"calibrationEstimate":136048.61679309607},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":84690.0,"estimate":52432.29604434967,"calibrationEstimate":89032.54236602783},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":46244.0,"estimate":72962.20126837492,"calibrationEstimate":49076.03748768568},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":26481.0,"estimate":36302.037965774536,"calibrationEstimate":27990.966720581055},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":120819.0,"estimate":133168.13933724165,"calibrationEstimate":126047.96253997087},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":18143.0,"estimate":31929.270164489742,"calibrationEstimate":18853.157566070557},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":12325.0,"estimate":4342.985666275024,"calibrationEstimate":12787.905824661257},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":9555.0,"estimate":10237.352779388428,"calibrationEstimate":9924.266354560852},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":6230.0,"estimate":8079.597757339477,"calibrationEstimate":6517.651657104492},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":5884.0,"estimate":6488.760696411133,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":5362.0,"estimate":2040.3827934265137,"calibrationEstimate":5599.008282661438},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":1786.0,"estimate":2342.474377632141,"calibrationEstimate":0.0},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":1491.0,"estimate":1191.3319091796875,"calibrationEstimate":1566.0018310546875},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":173925.0,"estimate":186777.2049259543,"calibrationEstimate":182090.19959127903},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_30_000_to_inf","group":"Universal Credit households by family type and annual award band","unit":"count","target":3518.0,"estimate":5168.365709781647,"calibrationEstimate":3625.375806808472},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":375706.0,"estimate":383463.93209175766,"calibrationEstimate":400166.4416157156},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000","group":"Universal Credit households by family type and annual award band","unit":"count","target":200713.0,"estimate":203491.5627465248,"calibrationEstimate":211943.05135634544},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200","group":"Universal Credit households by family type and annual award band","unit":"count","target":107860.0,"estimate":70731.47073125839,"calibrationEstimate":113231.6061463952},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400","group":"Universal Credit households by family type and annual award band","unit":"count","target":144036.0,"estimate":162280.8241584003,"calibrationEstimate":151079.3708410859},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600","group":"Universal Credit households by family type and annual award band","unit":"count","target":377221.0,"estimate":390922.1454977393,"calibrationEstimate":405502.9602661133},{"id":"dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800","group":"Universal Credit households by family type and annual award band","unit":"count","target":341138.0,"estimate":334758.9467867613,"calibrationEstimate":365132.69845345616},{"id":"hmrc/capital_gains_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5896423978.4236,"estimate":2145569764.8934388,"calibrationEstimate":2155122068.057715},{"id":"hmrc/capital_gains_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":6669879487.011294,"estimate":6113590455.884258,"calibrationEstimate":6140808779.517726},{"id":"hmrc/capital_gains_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":1480107842.3446033,"estimate":824208877.2703311,"calibrationEstimate":827878342.9188478},{"id":"hmrc/capital_gains_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":9591474586.251451,"estimate":8885677318.378376,"calibrationEstimate":8925237226.323952},{"id":"hmrc/capital_gains_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":2760849959.80358,"estimate":1481885306.7892804,"calibrationEstimate":1488482817.1602085},{"id":"hmrc/capital_gains_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":4974748925.680099,"estimate":3767626397.5987062,"calibrationEstimate":3784400282.3045096},{"id":"hmrc/capital_gains_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":3894416332.713481,"estimate":1748128613.7307172,"calibrationEstimate":1755911468.1942976},{"id":"hmrc/capital_gains_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":5954876756.4005375,"estimate":5570751674.400174,"calibrationEstimate":5595553198.675095},{"id":"hmrc/capital_gains_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":23708864267.288666,"estimate":21439465497.83505,"calibrationEstimate":21534915294.779037},{"id":"hmrc/capital_gains_total","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"gbp","target":68786394083.57501,"estimate":55462516438.57637,"calibrationEstimate":55709440327.92571},{"id":"hmrc/cgt_taxpayers","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":378000.0,"estimate":597473.4012414962,"calibrationEstimate":600133.6416603029},{"id":"hmrc/cgt_taxpayers_band_100000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":37000.0,"estimate":13333.245845392346,"calibrationEstimate":13392.611899137495},{"id":"hmrc/cgt_taxpayers_band_1000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":5000.0,"estimate":4551.704349040985,"calibrationEstimate":4571.970666408539},{"id":"hmrc/cgt_taxpayers_band_12300","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":79000.0,"estimate":45968.90420526266,"calibrationEstimate":46173.58005642891},{"id":"hmrc/cgt_taxpayers_band_2000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":3000.0,"estimate":2779.2411727905273,"calibrationEstimate":2791.6157188415527},{"id":"hmrc/cgt_taxpayers_band_25000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":74000.0,"estimate":44375.135423094034,"calibrationEstimate":44572.71495604515},{"id":"hmrc/cgt_taxpayers_band_250000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":14000.0,"estimate":10828.539483070374,"calibrationEstimate":10876.753353774548},{"id":"hmrc/cgt_taxpayers_band_50000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":53000.0,"estimate":24573.395526498556,"calibrationEstimate":24682.80815383792},{"id":"hmrc/cgt_taxpayers_band_500000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":8000.0,"estimate":7267.413093209267,"calibrationEstimate":7299.771051287651},{"id":"hmrc/cgt_taxpayers_band_5000000","group":"Capital gains: taxpayers and gains, in total and by size of gain","unit":"count","target":2000.0,"estimate":1808.5604147911072,"calibrationEstimate":1816.613001346588},{"id":"hmrc/dividend_income_count_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":222000.0,"estimate":227351.0358945727,"calibrationEstimate":227797.8275707364},{"id":"hmrc/dividend_income_count_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":115000.0,"estimate":117843.94994673131,"calibrationEstimate":116385.78414040804},{"id":"hmrc/dividend_income_count_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":92000.0,"estimate":93458.21883910894,"calibrationEstimate":93874.33960714936},{"id":"hmrc/dividend_income_count_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":372000.0,"estimate":378779.0071898401,"calibrationEstimate":380746.0582835972},{"id":"hmrc/dividend_income_count_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":19000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_count_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":75000.0,"estimate":75402.58002001047,"calibrationEstimate":75810.4160670042},{"id":"hmrc/dividend_income_count_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":843000.0,"estimate":851497.673445046,"calibrationEstimate":873241.4082220197},{"id":"hmrc/dividend_income_count_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":49000.0,"estimate":50378.63709831238,"calibrationEstimate":50530.841203927994},{"id":"hmrc/dividend_income_count_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":667000.0,"estimate":701472.8277409971,"calibrationEstimate":685978.0538581312},{"id":"hmrc/dividend_income_count_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":627000.0,"estimate":648884.2997487187,"calibrationEstimate":651604.7489631176},{"id":"hmrc/dividend_income_count_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":32000.0,"estimate":33170.27163696289,"calibrationEstimate":33317.9616394043},{"id":"hmrc/dividend_income_count_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":655074.6716086566,"calibrationEstimate":657991.3786510527},{"id":"hmrc/dividend_income_count_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"count","target":336000.0,"estimate":343780.76982200146,"calibrationEstimate":345876.93388444185},{"id":"hmrc/dividend_income_income_band_100_000_to_150_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":6870000000.0,"estimate":7061419701.938361,"calibrationEstimate":7088430859.803092},{"id":"hmrc/dividend_income_income_band_12_570_to_15_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":175000000.0,"estimate":177729711.38974166,"calibrationEstimate":175767497.49932885},{"id":"hmrc/dividend_income_income_band_150_000_to_200_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3450000000.0,"estimate":3543663621.794122,"calibrationEstimate":3559440262.19519},{"id":"hmrc/dividend_income_income_band_15_000_to_20_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":855000000.0,"estimate":872513312.9254439,"calibrationEstimate":876171737.529429},{"id":"hmrc/dividend_income_income_band_1_000_000_to_inf","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":11100000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/dividend_income_income_band_200_000_to_300_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3700000000.0,"estimate":3728829945.8263535,"calibrationEstimate":3758978608.017518},{"id":"hmrc/dividend_income_income_band_20_000_to_30_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3330000000.0,"estimate":3420243360.9682293,"calibrationEstimate":3453423823.4242554},{"id":"hmrc/dividend_income_income_band_300_000_to_500_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3430000000.0,"estimate":3509376780.472993,"calibrationEstimate":3511453233.1774187},{"id":"hmrc/dividend_income_income_band_30_000_to_40_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":4700000000.0,"estimate":4869301408.915031,"calibrationEstimate":4873410425.267337},{"id":"hmrc/dividend_income_income_band_40_000_to_50_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":8400000000.0,"estimate":8749988881.483282,"calibrationEstimate":8788441295.462717},{"id":"hmrc/dividend_income_income_band_500_000_to_1_000_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":3820000000.0,"estimate":56424653.89632848,"calibrationEstimate":56675863.51029208},{"id":"hmrc/dividend_income_income_band_50_000_to_70_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":12500000000.0,"estimate":12876594981.549658,"calibrationEstimate":12933922887.322466},{"id":"hmrc/dividend_income_income_band_70_000_to_100_000","group":"Dividend income: taxpayers and amounts, by total income band","unit":"gbp","target":9440000000.0,"estimate":9763210790.620935,"calibrationEstimate":9811104361.058764},{"id":"hmrc/employment_income_count_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":791000.0,"estimate":824511.5345084816,"calibrationEstimate":827617.1732438505},{"id":"hmrc/employment_income_count_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1360000.0,"estimate":1373301.3575534225,"calibrationEstimate":1378446.3420420587},{"id":"hmrc/employment_income_count_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":264000.0,"estimate":267805.53522378206,"calibrationEstimate":268997.93311318755},{"id":"hmrc/employment_income_count_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3100000.0,"estimate":3100253.3747709244,"calibrationEstimate":3128533.9239459485},{"id":"hmrc/employment_income_count_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_count_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":180000.0,"estimate":185990.90307736397,"calibrationEstimate":186891.1278873086},{"id":"hmrc/employment_income_count_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":7470000.0,"estimate":7700877.72464408,"calibrationEstimate":7735524.523436785},{"id":"hmrc/employment_income_count_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":93000.0,"estimate":98039.0456867218,"calibrationEstimate":98403.45630073547},{"id":"hmrc/employment_income_count_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":5370000.0,"estimate":5697937.964042693,"calibrationEstimate":5713355.758187309},{"id":"hmrc/employment_income_count_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3500000.0,"estimate":3680577.4279152304,"calibrationEstimate":3707214.055961415},{"id":"hmrc/employment_income_count_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":44000.0,"estimate":46706.16270780563,"calibrationEstimate":46914.12068939209},{"id":"hmrc/employment_income_count_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":3430000.0,"estimate":3608814.790145755,"calibrationEstimate":3624586.2806883007},{"id":"hmrc/employment_income_count_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"count","target":1640000.0,"estimate":1726114.5660859048,"calibrationEstimate":1734365.5542587042},{"id":"hmrc/employment_income_income_band_100_000_to_150_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":82300000000.0,"estimate":88979102683.02104,"calibrationEstimate":89341994142.53558},{"id":"hmrc/employment_income_income_band_12_570_to_15_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17667328305.392845,"calibrationEstimate":17737508600.22194},{"id":"hmrc/employment_income_income_band_150_000_to_200_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":39200000000.0,"estimate":41255318706.03249,"calibrationEstimate":41438978834.23312},{"id":"hmrc/employment_income_income_band_15_000_to_20_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":48600000000.0,"estimate":51361196379.81884,"calibrationEstimate":51744717208.03357},{"id":"hmrc/employment_income_income_band_1_000_000_to_inf","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":35500000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/employment_income_income_band_200_000_to_300_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":36600000000.0,"estimate":37661266215.84016,"calibrationEstimate":37832624311.21745},{"id":"hmrc/employment_income_income_band_20_000_to_30_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":172000000000.0,"estimate":186869777484.23627,"calibrationEstimate":187725091503.2608},{"id":"hmrc/employment_income_income_band_300_000_to_500_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":29000000000.0,"estimate":30900288157.351883,"calibrationEstimate":31034152851.135696},{"id":"hmrc/employment_income_income_band_30_000_to_40_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":170000000000.0,"estimate":187543438931.86432,"calibrationEstimate":187998608272.933},{"id":"hmrc/employment_income_income_band_40_000_to_50_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":139000000000.0,"estimate":152370336785.65836,"calibrationEstimate":153439648791.6216},{"id":"hmrc/employment_income_income_band_500_000_to_1_000_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":23100000000.0,"estimate":25016022049.82984,"calibrationEstimate":25127388257.41508},{"id":"hmrc/employment_income_income_band_50_000_to_70_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":174000000000.0,"estimate":199201672617.9999,"calibrationEstimate":200077232475.7744},{"id":"hmrc/employment_income_income_band_70_000_to_100_000","group":"Employment income: taxpayers and amounts, by total income band","unit":"gbp","target":118000000000.0,"estimate":130539906367.1019,"calibrationEstimate":131154272131.7289},{"id":"hmrc/private_pension_income_count_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":109000.0,"estimate":113381.04154892266,"calibrationEstimate":113140.6361219883},{"id":"hmrc/private_pension_income_count_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1070000.0,"estimate":1077940.3906462789,"calibrationEstimate":1079100.9173238575},{"id":"hmrc/private_pension_income_count_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":29000.0,"estimate":29548.136692762375,"calibrationEstimate":29679.69919469953},{"id":"hmrc/private_pension_income_count_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2140000.0,"estimate":2167496.0878492147,"calibrationEstimate":2178731.395306334},{"id":"hmrc/private_pension_income_count_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_count_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":20000.0,"estimate":20530.52955198288,"calibrationEstimate":20694.046717643738},{"id":"hmrc/private_pension_income_count_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":2660000.0,"estimate":2707653.9685311615,"calibrationEstimate":2732561.424201399},{"id":"hmrc/private_pension_income_count_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":10000.0,"estimate":10358.804424285889,"calibrationEstimate":10332.82068157196},{"id":"hmrc/private_pension_income_count_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":1450000.0,"estimate":1489176.291316107,"calibrationEstimate":1481359.3561343104},{"id":"hmrc/private_pension_income_count_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":779000.0,"estimate":803749.7978268415,"calibrationEstimate":798979.4823898375},{"id":"hmrc/private_pension_income_count_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":4000.0,"estimate":3781.902099609375,"calibrationEstimate":3798.74072265625},{"id":"hmrc/private_pension_income_count_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":643000.0,"estimate":656054.3538119495,"calibrationEstimate":657236.1033739448},{"id":"hmrc/private_pension_income_count_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"count","target":259000.0,"estimate":263212.8314293921,"calibrationEstimate":264898.83085882664},{"id":"hmrc/private_pension_income_income_band_100_000_to_150_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":5430000000.0,"estimate":5573735219.896894,"calibrationEstimate":5570879143.4424715},{"id":"hmrc/private_pension_income_income_band_12_570_to_15_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":4350000000.0,"estimate":4411097330.406989,"calibrationEstimate":4447505394.376211},{"id":"hmrc/private_pension_income_income_band_150_000_to_200_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1810000000.0,"estimate":1833713602.344389,"calibrationEstimate":1841877554.1677072},{"id":"hmrc/private_pension_income_income_band_15_000_to_20_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":13600000000.0,"estimate":13775327558.2021,"calibrationEstimate":13892337637.588415},{"id":"hmrc/private_pension_income_income_band_1_000_000_to_inf","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":370000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/private_pension_income_income_band_200_000_to_300_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1570000000.0,"estimate":1642468415.6183755,"calibrationEstimate":1652701321.0295508},{"id":"hmrc/private_pension_income_income_band_20_000_to_30_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":30200000000.0,"estimate":29955658243.55366,"calibrationEstimate":30352503983.159794},{"id":"hmrc/private_pension_income_income_band_300_000_to_500_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":1120000000.0,"estimate":1144295824.2164176,"calibrationEstimate":1146469834.2817073},{"id":"hmrc/private_pension_income_income_band_30_000_to_40_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":25059207093.135284,"calibrationEstimate":25080685242.308376},{"id":"hmrc/private_pension_income_income_band_40_000_to_50_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":16900000000.0,"estimate":17190248914.390266,"calibrationEstimate":17071539705.894844},{"id":"hmrc/private_pension_income_income_band_500_000_to_1_000_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":640000000.0,"estimate":213909509.00401783,"calibrationEstimate":214861850.15362167},{"id":"hmrc/private_pension_income_income_band_50_000_to_70_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":17400000000.0,"estimate":17563712469.103798,"calibrationEstimate":17583185678.118725},{"id":"hmrc/private_pension_income_income_band_70_000_to_100_000","group":"Private pension income: taxpayers and amounts, by total income band","unit":"gbp","target":9470000000.0,"estimate":9557699876.396223,"calibrationEstimate":9615945198.24676},{"id":"hmrc/property_income_count_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":137000.0,"estimate":141165.871446833,"calibrationEstimate":141794.40891066194},{"id":"hmrc/property_income_count_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":101000.0,"estimate":103784.14705058932,"calibrationEstimate":104080.11628448965},{"id":"hmrc/property_income_count_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":54000.0,"estimate":56018.38871687651,"calibrationEstimate":56267.80941784382},{"id":"hmrc/property_income_count_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":232000.0,"estimate":236185.8364828527,"calibrationEstimate":237819.25523099303},{"id":"hmrc/property_income_count_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":7000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_count_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":41000.0,"estimate":52186.40589475632,"calibrationEstimate":52490.8698425293},{"id":"hmrc/property_income_count_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":431000.0,"estimate":448013.1141617298,"calibrationEstimate":449971.4377421886},{"id":"hmrc/property_income_count_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":23000.0,"estimate":24055.605954885483,"calibrationEstimate":24090.607409238815},{"id":"hmrc/property_income_count_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":364000.0,"estimate":371009.55061393976,"calibrationEstimate":372427.32571820915},{"id":"hmrc/property_income_count_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":325000.0,"estimate":336046.0360119045,"calibrationEstimate":337059.06728732586},{"id":"hmrc/property_income_count_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":13000.0,"estimate":14573.09609556198,"calibrationEstimate":14637.982506275175},{"id":"hmrc/property_income_count_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":397000.0,"estimate":423143.40894299746,"calibrationEstimate":425027.4550034404},{"id":"hmrc/property_income_count_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"count","target":226000.0,"estimate":232035.84982901812,"calibrationEstimate":233068.98469543457},{"id":"hmrc/property_income_income_band_100_000_to_150_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":4845000000.0,"estimate":4882041100.0380125,"calibrationEstimate":4903776436.7217655},{"id":"hmrc/property_income_income_band_12_570_to_15_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1273000000.0,"estimate":1312093625.4804063,"calibrationEstimate":1317417721.8394763},{"id":"hmrc/property_income_income_band_150_000_to_200_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":2185000000.0,"estimate":2194097464.642574,"calibrationEstimate":2203865873.0817986},{"id":"hmrc/property_income_income_band_15_000_to_20_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":3211000000.0,"estimate":3320810281.1976657,"calibrationEstimate":3336434113.7134023},{"id":"hmrc/property_income_income_band_1_000_000_to_inf","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":834100000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/property_income_income_band_200_000_to_300_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1995000000.0,"estimate":1612216296.521883,"calibrationEstimate":1620071340.16229},{"id":"hmrc/property_income_income_band_20_000_to_30_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7258000000.0,"estimate":7440029131.271567,"calibrationEstimate":7474141279.397891},{"id":"hmrc/property_income_income_band_300_000_to_500_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":1453500000.0,"estimate":1488632035.2109084,"calibrationEstimate":1494582224.098352},{"id":"hmrc/property_income_income_band_30_000_to_40_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7220000000.0,"estimate":7467827714.414368,"calibrationEstimate":7504838445.913079},{"id":"hmrc/property_income_income_band_40_000_to_50_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7182000000.0,"estimate":7494528103.285307,"calibrationEstimate":7521585632.810405},{"id":"hmrc/property_income_income_band_500_000_to_1_000_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":900600000.0,"estimate":936307617.0465996,"calibrationEstimate":940476126.037058},{"id":"hmrc/property_income_income_band_50_000_to_70_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":10260000000.0,"estimate":10604016091.59918,"calibrationEstimate":10651226425.480448},{"id":"hmrc/property_income_income_band_70_000_to_100_000","group":"Property income: taxpayers and amounts, by total income band","unit":"gbp","target":7163000000.0,"estimate":7430456223.639438,"calibrationEstimate":7463537234.724672},{"id":"hmrc/salary_sacrifice_contributions","group":"Pension contributions made through salary sacrifice","unit":"gbp","target":24720000000.0,"estimate":26264443815.78061,"calibrationEstimate":26381385856.208145},{"id":"hmrc/salary_sacrifice_employee_nics_relief","group":"Salary sacrifice: employee National Insurance relief","unit":"gbp","target":1030000000.0,"estimate":1038382290.0875356,"calibrationEstimate":1043006444.8072168},{"id":"hmrc/salary_sacrifice_employer_nics_relief","group":"Salary sacrifice: employer National Insurance relief","unit":"gbp","target":3806521739.1304345,"estimate":3939357468.527615,"calibrationEstimate":3956897499.4253736},{"id":"hmrc/salary_sacrifice_it_relief_additional_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1854000000.0,"estimate":1889875035.5146327,"calibrationEstimate":1898288453.744975},{"id":"hmrc/salary_sacrifice_it_relief_basic_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":1648000000.0,"estimate":1724997921.5611992,"calibrationEstimate":1732906915.364983},{"id":"hmrc/salary_sacrifice_it_relief_higher_rate","group":"Salary sacrifice: income tax relief by rate band","unit":"gbp","target":5665000000.0,"estimate":5802396244.165817,"calibrationEstimate":5827639095.306072},{"id":"hmrc/self_employment_income_count_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":85000.0,"estimate":86958.52504557371,"calibrationEstimate":87345.70538306236},{"id":"hmrc/self_employment_income_count_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":444000.0,"estimate":455042.47898571193,"calibrationEstimate":459560.7846930027},{"id":"hmrc/self_employment_income_count_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":40000.0,"estimate":41770.190262913704,"calibrationEstimate":41956.17022877931},{"id":"hmrc/self_employment_income_count_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":651000.0,"estimate":669688.0321145952,"calibrationEstimate":669856.6265438497},{"id":"hmrc/self_employment_income_count_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":11000.0,"estimate":12027.952392578123,"calibrationEstimate":12081.506591796877},{"id":"hmrc/self_employment_income_count_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":34000.0,"estimate":35366.04091179371,"calibrationEstimate":35523.50831258297},{"id":"hmrc/self_employment_income_count_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":961000.0,"estimate":968629.9468374252,"calibrationEstimate":983556.6253516376},{"id":"hmrc/self_employment_income_count_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21558.537423610687,"calibrationEstimate":21654.52645254135},{"id":"hmrc/self_employment_income_count_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":595000.0,"estimate":617322.5113036335,"calibrationEstimate":609778.2123933136},{"id":"hmrc/self_employment_income_count_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":359000.0,"estimate":364230.7985933125,"calibrationEstimate":365852.5291823447},{"id":"hmrc/self_employment_income_count_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":15000.0,"estimate":14891.744739055634,"calibrationEstimate":14958.050329685211},{"id":"hmrc/self_employment_income_count_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":311000.0,"estimate":315363.203045696,"calibrationEstimate":316767.35191100836},{"id":"hmrc/self_employment_income_count_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"count","target":143000.0,"estimate":146238.28407627344,"calibrationEstimate":146889.40592196584},{"id":"hmrc/self_employment_income_income_band_100_000_to_150_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4980000000.0,"estimate":5087584798.391058,"calibrationEstimate":5110236897.914169},{"id":"hmrc/self_employment_income_income_band_12_570_to_15_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4810000000.0,"estimate":5025163750.796124,"calibrationEstimate":5051869014.920584},{"id":"hmrc/self_employment_income_income_band_150_000_to_200_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":3650000000.0,"estimate":3837560438.430877,"calibrationEstimate":3854646871.9102383},{"id":"hmrc/self_employment_income_income_band_15_000_to_20_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8030000000.0,"estimate":8379775239.640112,"calibrationEstimate":8406853025.163864},{"id":"hmrc/self_employment_income_income_band_1_000_000_to_inf","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":19500000000.0,"estimate":18178782631.18994,"calibrationEstimate":18259723269.696777},{"id":"hmrc/self_employment_income_income_band_200_000_to_300_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4390000000.0,"estimate":4387086183.363764,"calibrationEstimate":4406619426.606576},{"id":"hmrc/self_employment_income_income_band_20_000_to_30_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":15700000000.0,"estimate":16630223032.272512,"calibrationEstimate":16710890619.455976},{"id":"hmrc/self_employment_income_income_band_300_000_to_500_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":4840000000.0,"estimate":5001077385.739056,"calibrationEstimate":5023344579.515306},{"id":"hmrc/self_employment_income_income_band_30_000_to_40_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":12600000000.0,"estimate":13362242094.75601,"calibrationEstimate":13421015867.023577},{"id":"hmrc/self_employment_income_income_band_40_000_to_50_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8730000000.0,"estimate":9190863549.441511,"calibrationEstimate":9231785226.71461},{"id":"hmrc/self_employment_income_income_band_500_000_to_1_000_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":6670000000.0,"estimate":7376181971.541264,"calibrationEstimate":7409024147.46911},{"id":"hmrc/self_employment_income_income_band_50_000_to_70_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":8220000000.0,"estimate":8488691442.280383,"calibrationEstimate":8526486805.447159},{"id":"hmrc/self_employment_income_income_band_70_000_to_100_000","group":"Self-employment income: taxpayers and amounts, by total income band","unit":"gbp","target":5360000000.0,"estimate":5522966018.115657,"calibrationEstimate":5547556695.034214},{"id":"hmrc/state_pension_count_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":74000.0,"estimate":76342.59296536446,"calibrationEstimate":75937.27455496788},{"id":"hmrc/state_pension_count_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1140000.0,"estimate":1161495.8760002255,"calibrationEstimate":1126243.1772264838},{"id":"hmrc/state_pension_count_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":21000.0,"estimate":21939.998979091644,"calibrationEstimate":22037.68625926971},{"id":"hmrc/state_pension_count_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2050000.0,"estimate":2026098.2843510956,"calibrationEstimate":2031512.3080596477},{"id":"hmrc/state_pension_count_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_count_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":14000.0,"estimate":14697.563110351562,"calibrationEstimate":14835.109106063845},{"id":"hmrc/state_pension_count_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":2320000.0,"estimate":2274004.0867547393,"calibrationEstimate":2295782.9461600184},{"id":"hmrc/state_pension_count_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":8000.0,"estimate":8775.092832565308,"calibrationEstimate":8742.057691574097},{"id":"hmrc/state_pension_count_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":1160000.0,"estimate":1178948.7197926342,"calibrationEstimate":1170233.710169211},{"id":"hmrc/state_pension_count_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":568000.0,"estimate":580771.0665141791,"calibrationEstimate":574821.4479972124},{"id":"hmrc/state_pension_count_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":3000.0,"estimate":3781.902099609375,"calibrationEstimate":3798.74072265625},{"id":"hmrc/state_pension_count_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":441000.0,"estimate":439327.2868641913,"calibrationEstimate":439247.34779405594},{"id":"hmrc/state_pension_count_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"count","target":176000.0,"estimate":176772.55393317342,"calibrationEstimate":178073.67878568172},{"id":"hmrc/state_pension_income_band_100_000_to_150_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":847000000.0,"estimate":858017334.9994593,"calibrationEstimate":846898758.6290456},{"id":"hmrc/state_pension_income_band_12_570_to_15_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":11800000000.0,"estimate":12847623538.879597,"calibrationEstimate":12354250158.161297},{"id":"hmrc/state_pension_income_band_150_000_to_200_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":265000000.0,"estimate":279135861.39754254,"calibrationEstimate":278505581.3428588},{"id":"hmrc/state_pension_income_band_15_000_to_20_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":22200000000.0,"estimate":23884361056.98592,"calibrationEstimate":23793612285.3538},{"id":"hmrc/state_pension_income_band_1_000_000_to_inf","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":20000000.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"hmrc/state_pension_income_band_200_000_to_300_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":179000000.0,"estimate":186504512.5127414,"calibrationEstimate":186834063.32789692},{"id":"hmrc/state_pension_income_band_20_000_to_30_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":24900000000.0,"estimate":26699161523.85693,"calibrationEstimate":26761742491.17902},{"id":"hmrc/state_pension_income_band_300_000_to_500_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":96000000.0,"estimate":92456208.29775427,"calibrationEstimate":91489721.57993153},{"id":"hmrc/state_pension_income_band_30_000_to_40_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":12300000000.0,"estimate":13203796604.958357,"calibrationEstimate":13018816864.971045},{"id":"hmrc/state_pension_income_band_40_000_to_50_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":6020000000.0,"estimate":6417613488.812854,"calibrationEstimate":6301927061.072957},{"id":"hmrc/state_pension_income_band_500_000_to_1_000_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":43000000.0,"estimate":57098031.45445275,"calibrationEstimate":56966431.52632856},{"id":"hmrc/state_pension_income_band_50_000_to_70_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":4660000000.0,"estimate":4910080693.408954,"calibrationEstimate":4876773273.846847},{"id":"hmrc/state_pension_income_band_70_000_to_100_000","group":"State Pension: taxpayers and amounts, by total income band","unit":"gbp","target":1890000000.0,"estimate":1933831324.9552536,"calibrationEstimate":1934385181.3787663},{"id":"housing/rent_private","group":"Private and social rent paid","unit":"gbp","target":89035200000.0,"estimate":93940854869.17044,"calibrationEstimate":88738619966.40154},{"id":"housing/rent_social","group":"Private and social rent paid","unit":"gbp","target":30680000000.0,"estimate":36446096886.880936,"calibrationEstimate":33896641237.30275},{"id":"housing/total_mortgage","group":"Mortgage payments, capital and interest","unit":"gbp","target":99000000000.0,"estimate":113570597022.68867,"calibrationEstimate":114076252525.22412},{"id":"nts/households_no_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":6512000.0,"estimate":6916590.085668877,"calibrationEstimate":6947386.097790375},{"id":"nts/households_one_vehicle","group":"Households with no, one, and two or more vehicles","unit":"count","target":13024000.0,"estimate":15026850.056096926,"calibrationEstimate":15093756.844735073},{"id":"nts/households_two_plus_vehicles","group":"Households with no, one, and two or more vehicles","unit":"count","target":10064000.0,"estimate":9221395.072614536,"calibrationEstimate":9262453.156826884},{"id":"obr/attendance_allowance","group":"Attendance Allowance spending","unit":"gbp","target":8492497075.074617,"estimate":8713069613.537264,"calibrationEstimate":8751574206.555925},{"id":"obr/capital_gains_tax","group":"Capital gains tax receipts","unit":"gbp","target":21801546197.09165,"estimate":12618588087.194475,"calibrationEstimate":12674389653.744177},{"id":"obr/carers_allowance","group":"Carer's Allowance spending","unit":"gbp","target":4569403813.760573,"estimate":4498304384.942733,"calibrationEstimate":4668494702.344756},{"id":"obr/child_benefit","group":"Child Benefit spending","unit":"gbp","target":13389272724.45089,"estimate":16193470845.603188,"calibrationEstimate":16305356994.784643},{"id":"obr/council_tax","group":"Council tax receipts, UK and by nation","unit":"gbp","target":50925163826.30539,"estimate":48095789129.75416,"calibrationEstimate":45185598169.82578},{"id":"obr/council_tax_england","group":"Council tax receipts, UK and by nation","unit":"gbp","target":44117237614.71528,"estimate":41740742938.76687,"calibrationEstimate":39131381885.54325},{"id":"obr/council_tax_scotland","group":"Council tax receipts, UK and by nation","unit":"gbp","target":3051227494.93594,"estimate":3731547965.358692,"calibrationEstimate":3608493445.955268},{"id":"obr/council_tax_wales","group":"Council tax receipts, UK and by nation","unit":"gbp","target":2400769752.36827,"estimate":2623498225.6285915,"calibrationEstimate":2445722838.327249},{"id":"obr/domestic_rates","group":"Northern Ireland domestic rates receipts","unit":"gbp","target":494000000.0,"estimate":552492559.6753056,"calibrationEstimate":554952807.592664},{"id":"obr/esa","group":"Incapacity benefits spending, scored against ESA (income-related and contributory)","unit":"gbp","target":7206287181.538654,"estimate":7340862269.435835,"calibrationEstimate":7400901728.8231},{"id":"obr/fuel_duties","group":"Fuel duty receipts, scored against duty on households' car fuel","unit":"gbp","target":24241874775.213375,"estimate":24534379561.8306,"calibrationEstimate":22378645090.516342},{"id":"obr/income_tax","group":"Income tax receipts","unit":"gbp","target":331437583074.4429,"estimate":297984459607.3946,"calibrationEstimate":297221184328.64075},{"id":"obr/jobseekers_allowance","group":"Jobseeker's Allowance spending","unit":"gbp","target":280558748.04472804,"estimate":290224950.05383134,"calibrationEstimate":292165752.01429534},{"id":"obr/ni","group":"National Insurance receipts, total and employee, both scored against employee contributions","unit":"gbp","target":200081395082.7125,"estimate":49871971080.09067,"calibrationEstimate":50093984870.16793},{"id":"obr/ni_employee","group":"National Insurance receipts, total and employee, both scored against employee contributions","unit":"gbp","target":49544363784.26465,"estimate":49871971080.09067,"calibrationEstimate":50093984870.16793},{"id":"obr/ni_employer","group":"Employer National Insurance receipts","unit":"gbp","target":145324007512.71753,"estimate":152640935215.8076,"calibrationEstimate":153356192825.44592},{"id":"obr/ni_self_employed","group":"Self-employed National Insurance receipts","unit":"gbp","target":2902816090.4147716,"estimate":2703046113.3747573,"calibrationEstimate":2715082606.5775995},{"id":"obr/pip","group":"Disability Living Allowance and PIP spending, scored against PIP alone","unit":"gbp","target":36910059270.5278,"estimate":27050796518.958168,"calibrationEstimate":27168864354.17723},{"id":"obr/private_school_students","group":"Pupils at independent schools","unit":"count","target":557000.0,"estimate":748312.103100419,"calibrationEstimate":573385.7499599457},{"id":"obr/salary_sacrifice_users_above_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":3379200.0,"estimate":3518675.5899593383,"calibrationEstimate":3534342.441987768},{"id":"obr/salary_sacrifice_users_below_cap","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":4403200.0,"estimate":4537605.7820779085,"calibrationEstimate":4557809.397202894},{"id":"obr/salary_sacrifice_users_total","group":"Salary sacrifice users, in total and either side of the \u00a32,000 cap","unit":"count","target":7884800.0,"estimate":8056281.372037247,"calibrationEstimate":8092151.839190662},{"id":"obr/sdlt","group":"Stamp Duty Land Tax receipts","unit":"gbp","target":15406516698.785578,"estimate":15942357010.551428,"calibrationEstimate":16012082650.278557},{"id":"obr/state_pension","group":"State Pension spending","unit":"gbp","target":146185954351.57382,"estimate":122503036176.28134,"calibrationEstimate":122224642449.47829},{"id":"obr/statutory_maternity_pay","group":"Statutory Maternity Pay spending","unit":"gbp","target":3194800881.520547,"estimate":3318182317.450848,"calibrationEstimate":3332956193.541091},{"id":"obr/tv_licence_fee","group":"TV licence fee receipts","unit":"gbp","target":3872000000.0,"estimate":4275969952.7872777,"calibrationEstimate":4295541280.067003},{"id":"obr/universal_credit","group":"Universal Credit spending","unit":"gbp","target":79286349139.54411,"estimate":77444779861.44044,"calibrationEstimate":75985929864.78464},{"id":"obr/vat","group":"VAT receipts","unit":"gbp","target":180168938685.4179,"estimate":313127412006.5255,"calibrationEstimate":314521580674.2033},{"id":"obr/winter_fuel_allowance","group":"Winter Fuel Payment spending","unit":"gbp","target":1911040880.4619167,"estimate":1696782924.1721363,"calibrationEstimate":1703218436.4946632},{"id":"ons/corporate_land_value","group":"Corporate land value","unit":"gbp","target":2057128451236.5017,"estimate":2058649277395.747,"calibrationEstimate":2508823769638.946},{"id":"ons/couple_3_plus_children_households","group":"Households by family type","unit":"count","target":931000.0,"estimate":938669.5559935868,"calibrationEstimate":942848.9663753808},{"id":"ons/couple_no_children_households","group":"Households by family type","unit":"count","target":8119000.0,"estimate":12998490.099476367,"calibrationEstimate":13056365.65930906},{"id":"ons/couple_non_dependent_children_only_households","group":"Households by family type","unit":"count","target":1848000.0,"estimate":1531772.4163592756,"calibrationEstimate":1538592.6185488403},{"id":"ons/couple_under_3_children_households","group":"Households by family type","unit":"count","target":5439000.0,"estimate":5278276.947658703,"calibrationEstimate":5301778.394534245},{"id":"ons/east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":726000.0,"estimate":771293.7803797722,"calibrationEstimate":774727.9482431412},{"id":"ons/east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":741000.0,"estimate":739053.5456957817,"calibrationEstimate":742344.1606268883},{"id":"ons/east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":749000.0,"estimate":757890.9346237183,"calibrationEstimate":761265.4319314957},{"id":"ons/east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":890000.0,"estimate":868663.2243561745,"calibrationEstimate":872530.9410104752},{"id":"ons/east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":851000.0,"estimate":841520.8085651398,"calibrationEstimate":845267.6588892937},{"id":"ons/east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":867000.0,"estimate":880271.0192890167,"calibrationEstimate":884190.4035565853},{"id":"ons/east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":746000.0,"estimate":713209.1194880009,"calibrationEstimate":716384.6653294563},{"id":"ons/east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":643000.0,"estimate":602763.1388289928,"calibrationEstimate":605446.9263653755},{"id":"ons/east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":379000.0,"estimate":371879.7669496536,"calibrationEstimate":373535.5513658523},{"id":"ons/east_midlands_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":532000.0,"estimate":560031.9295916557,"calibrationEstimate":562525.4693593979},{"id":"ons/east_midlands_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":585000.0,"estimate":590762.7258205414,"calibrationEstimate":593393.0852799416},{"id":"ons/east_midlands_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":632000.0,"estimate":644105.0573339462,"calibrationEstimate":646972.935760498},{"id":"ons/east_midlands_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":669000.0,"estimate":665205.5211863518,"calibrationEstimate":668167.3454751968},{"id":"ons/east_midlands_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":621000.0,"estimate":627594.7027101517,"calibrationEstimate":630389.0532822609},{"id":"ons/east_midlands_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":681000.0,"estimate":702955.7187919617,"calibrationEstimate":706085.6206178665},{"id":"ons/east_midlands_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":592000.0,"estimate":582169.8305933475,"calibrationEstimate":584761.93126297},{"id":"ons/east_midlands_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":500000.0,"estimate":482433.6231222153,"calibrationEstimate":484581.64761018753},{"id":"ons/east_midlands_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":273000.0,"estimate":274781.55980205536,"calibrationEstimate":276005.02149248123},{"id":"ons/female_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1698816.0,"estimate":1828318.1535176784,"calibrationEstimate":1836458.711859405},{"id":"ons/female_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2041879.0,"estimate":1969402.4822400063,"calibrationEstimate":1978171.2081481817},{"id":"ons/female_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2036402.0,"estimate":1969161.087257475,"calibrationEstimate":1977928.7500683963},{"id":"ons/female_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2033478.0,"estimate":2069351.5593764484,"calibrationEstimate":2078565.298778981},{"id":"ons/female_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2258028.0,"estimate":2332536.498431012,"calibrationEstimate":2342922.0941253603},{"id":"ons/female_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2443559.0,"estimate":2436778.9949440956,"calibrationEstimate":2447628.7140034437},{"id":"ons/female_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2497122.0,"estimate":2405595.887124628,"calibrationEstimate":2416306.7671643496},{"id":"ons/female_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2356214.0,"estimate":2351102.458479911,"calibrationEstimate":2361570.7033523023},{"id":"ons/female_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2135556.0,"estimate":2135428.4753090143,"calibrationEstimate":2144936.4417539984},{"id":"ons/female_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2206473.0,"estimate":2290830.0120570213,"calibrationEstimate":2301029.8981659263},{"id":"ons/female_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2340737.0,"estimate":2418793.5890717804,"calibrationEstimate":2429563.224965453},{"id":"ons/female_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1918180.0,"estimate":2070901.6415299475,"calibrationEstimate":2080122.2985755503},{"id":"ons/female_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2248908.0,"estimate":2067673.995960981,"calibrationEstimate":2076880.2962952403},{"id":"ons/female_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1890892.0,"estimate":1775005.0234636664,"calibrationEstimate":1782908.2002435476},{"id":"ons/female_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1619328.0,"estimate":1592487.228891492,"calibrationEstimate":1599577.753195807},{"id":"ons/female_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1575830.0,"estimate":1535763.565389067,"calibrationEstimate":1542601.521646887},{"id":"ons/female_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1064043.0,"estimate":2575754.5174667835,"calibrationEstimate":2587222.9984107465},{"id":"ons/female_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":766765.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/household_land_value","group":"Household land value","unit":"gbp","target":5042871548763.499,"estimate":5166746546555.149,"calibrationEstimate":5189751244184.55},{"id":"ons/household_land_value/EAST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":304799621177.5439,"estimate":311606184538.3093,"calibrationEstimate":312993599081.7586},{"id":"ons/household_land_value/EAST_OF_ENGLAND","group":"Household land value by region","unit":"gbp","target":542672059385.554,"estimate":545526819197.60675,"calibrationEstimate":547955764058.314},{"id":"ons/household_land_value/LONDON","group":"Household land value by region","unit":"gbp","target":1188167933642.289,"estimate":1202246714389.5254,"calibrationEstimate":1207599698026.9343},{"id":"ons/household_land_value/NORTH_EAST","group":"Household land value by region","unit":"gbp","target":119603822538.99867,"estimate":119232346609.81824,"calibrationEstimate":119763224708.18172},{"id":"ons/household_land_value/NORTH_WEST","group":"Household land value by region","unit":"gbp","target":422892569458.29254,"estimate":431922769001.3886,"calibrationEstimate":433845865766.1077},{"id":"ons/household_land_value/SCOTLAND","group":"Household land value by region","unit":"gbp","target":280395193712.8084,"estimate":274384299653.08444,"calibrationEstimate":275605989741.7642},{"id":"ons/household_land_value/SOUTH_EAST","group":"Household land value by region","unit":"gbp","target":885848048153.7532,"estimate":894166255726.9485,"calibrationEstimate":898147507762.3969},{"id":"ons/household_land_value/SOUTH_WEST","group":"Household land value by region","unit":"gbp","target":456726035827.05096,"estimate":464943882762.1395,"calibrationEstimate":467014019483.7422},{"id":"ons/household_land_value/WALES","group":"Household land value by region","unit":"gbp","target":179320185054.4999,"estimate":186268286766.78265,"calibrationEstimate":187097630538.42856},{"id":"ons/household_land_value/WEST_MIDLANDS","group":"Household land value by region","unit":"gbp","target":364340113693.65784,"estimate":375302085585.0853,"calibrationEstimate":376973076152.3836},{"id":"ons/household_land_value/YORKSHIRE","group":"Household land value by region","unit":"gbp","target":298105966119.05054,"estimate":302216770581.6293,"calibrationEstimate":303562358004.369},{"id":"ons/land_value","group":"Total land value","unit":"gbp","target":7100000000000.0,"estimate":7225395814657.11,"calibrationEstimate":7698575009199.94},{"id":"ons/lfs_employees","group":"Employees and self-employed people","unit":"count","target":29590000.0,"estimate":30435347.306456164,"calibrationEstimate":30570860.177485824},{"id":"ons/lfs_self_employed","group":"Employees and self-employed people","unit":"count","target":4395000.0,"estimate":4386012.790536806,"calibrationEstimate":4405541.443839148},{"id":"ons/london_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1042000.0,"estimate":1125054.789651394,"calibrationEstimate":1130064.087686062},{"id":"ons/london_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1038000.0,"estimate":1038583.262962818,"calibrationEstimate":1043207.5399894714},{"id":"ons/london_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1470000.0,"estimate":1445446.2931580544,"calibrationEstimate":1451882.1013703346},{"id":"ons/london_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1585000.0,"estimate":1481955.261698246,"calibrationEstimate":1488553.6509594915},{"id":"ons/london_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1314000.0,"estimate":1279445.8410344124,"calibrationEstimate":1285142.5691428185},{"id":"ons/london_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1078000.0,"estimate":1096948.6372466087,"calibrationEstimate":1101832.7718110085},{"id":"ons/london_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":778000.0,"estimate":748606.0843253136,"calibrationEstimate":751939.2464447021},{"id":"ons/london_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":509000.0,"estimate":484259.92964339256,"calibrationEstimate":486416.0953710079},{"id":"ons/london_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":304000.0,"estimate":303293.11004304886,"calibrationEstimate":304643.51612854004},{"id":"ons/lone_households_over_65","group":"Households by family type","unit":"count","target":4254000.0,"estimate":5365011.216291666,"calibrationEstimate":5388898.822203651},{"id":"ons/lone_households_under_65","group":"Households by family type","unit":"count","target":4316000.0,"estimate":5235068.097633377,"calibrationEstimate":5258377.145496011},{"id":"ons/lone_parent_dependent_children_households","group":"Households by family type","unit":"count","target":1835000.0,"estimate":2830747.7256003767,"calibrationEstimate":2843351.5866492093},{"id":"ons/lone_parent_non_dependent_children_households","group":"Households by family type","unit":"count","target":1204000.0,"estimate":1050579.4578175098,"calibrationEstimate":1055257.1438512355},{"id":"ons/male_0_4","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1784490.0,"estimate":1905981.0190579444,"calibrationEstimate":1914467.3808511945},{"id":"ons/male_10_14","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2143309.0,"estimate":2051902.8090632856,"calibrationEstimate":2061038.871427804},{"id":"ons/male_15_19","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2149930.0,"estimate":2057201.8039757907,"calibrationEstimate":2066361.4579488933},{"id":"ons/male_20_24","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2136737.0,"estimate":2162991.17424798,"calibrationEstimate":2172621.846770525},{"id":"ons/male_25_29","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2246892.0,"estimate":2338673.5463863164,"calibrationEstimate":2349086.451658398},{"id":"ons/male_30_34","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2323977.0,"estimate":2286726.494625658,"calibrationEstimate":2296908.1104041785},{"id":"ons/male_35_39","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2325815.0,"estimate":2238432.003726512,"calibrationEstimate":2248398.578412831},{"id":"ons/male_40_44","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2208064.0,"estimate":2205536.762775749,"calibrationEstimate":2215356.8826990426},{"id":"ons/male_45_49","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2040636.0,"estimate":2043224.8598228395,"calibrationEstimate":2052322.2821628305},{"id":"ons/male_50_54","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2119462.0,"estimate":2215726.5761083215,"calibrationEstimate":2225592.055385262},{"id":"ons/male_55_59","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2234921.0,"estimate":2365459.8517676294,"calibrationEstimate":2375992.0193621516},{"id":"ons/male_5_9","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2011903.0,"estimate":2183563.7194514275,"calibrationEstimate":2193286.004624322},{"id":"ons/male_60_64","group":"UK population, in total and by sex and five-year age band","unit":"count","target":2138720.0,"estimate":1991375.4354150295,"calibrationEstimate":2000242.005992487},{"id":"ons/male_65_69","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1785048.0,"estimate":1705189.6335977912,"calibrationEstimate":1712781.9613346308},{"id":"ons/male_70_74","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1472190.0,"estimate":1500504.8880405724,"calibrationEstimate":1507185.8704133332},{"id":"ons/male_75_79","group":"UK population, in total and by sex and five-year age band","unit":"count","target":1370172.0,"estimate":1392705.9627871215,"calibrationEstimate":1398906.957293868},{"id":"ons/male_80_84","group":"UK population, in total and by sex and five-year age band","unit":"count","target":853423.0,"estimate":1043873.4421224744,"calibrationEstimate":1048521.2661861776},{"id":"ons/male_85_90","group":"UK population, in total and by sex and five-year age band","unit":"count","target":524918.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"ons/multi_family_households","group":"Households by family type","unit":"count","target":244000.0,"estimate":3072640.992086515,"calibrationEstimate":3086321.8869856745},{"id":"ons/north_east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":281000.0,"estimate":292715.3160581589,"calibrationEstimate":294018.62734270096},{"id":"ons/north_east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":311000.0,"estimate":316162.3189101219,"calibrationEstimate":317570.02781152725},{"id":"ons/north_east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":343000.0,"estimate":351833.17220687866,"calibrationEstimate":353399.7017493248},{"id":"ons/north_east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":356000.0,"estimate":358939.17423534393,"calibrationEstimate":360537.3440265655},{"id":"ons/north_east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":323000.0,"estimate":326091.58054828644,"calibrationEstimate":327543.4990019798},{"id":"ons/north_east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":369000.0,"estimate":376803.9424915314,"calibrationEstimate":378481.66025877},{"id":"ons/north_east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":353000.0,"estimate":348528.974275589,"calibrationEstimate":350080.794301033},{"id":"ons/north_east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":278000.0,"estimate":270934.51904058456,"calibrationEstimate":272140.8496761322},{"id":"ons/north_east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":153000.0,"estimate":153682.41644382477,"calibrationEstimate":154366.68457221985},{"id":"ons/north_west_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":847000.0,"estimate":908739.791510582,"calibrationEstimate":912785.9495530128},{"id":"ons/north_west_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":901000.0,"estimate":905392.5291671752,"calibrationEstimate":909423.7803411484},{"id":"ons/north_west_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":986000.0,"estimate":989843.3102366924,"calibrationEstimate":994250.5672147274},{"id":"ons/north_west_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1056000.0,"estimate":1017900.585340023,"calibrationEstimate":1022432.7764897346},{"id":"ons/north_west_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":938000.0,"estimate":926449.4722480774,"calibrationEstimate":930574.4812602996},{"id":"ons/north_west_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1011000.0,"estimate":1028142.4622688292,"calibrationEstimate":1032720.2569770812},{"id":"ons/north_west_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":888000.0,"estimate":836840.5830273628,"calibrationEstimate":840566.5993580818},{"id":"ons/north_west_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":715000.0,"estimate":662619.3418068886,"calibrationEstimate":665569.6439623833},{"id":"ons/north_west_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":399000.0,"estimate":393208.1652238369,"calibrationEstimate":394958.9070954323},{"id":"ons/northern_ireland_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":234000.0,"estimate":236171.6708443761,"calibrationEstimate":237223.22020295265},{"id":"ons/northern_ireland_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":244000.0,"estimate":247967.11233513057,"calibrationEstimate":249071.1819693148},{"id":"ons/northern_ireland_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":230000.0,"estimate":236724.86004576087,"calibrationEstimate":237778.87405017015},{"id":"ons/northern_ireland_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":264000.0,"estimate":269097.51006770134,"calibrationEstimate":270295.6605950743},{"id":"ons/northern_ireland_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":254000.0,"estimate":253456.40570107105,"calibrationEstimate":254584.91619846225},{"id":"ons/northern_ireland_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":257000.0,"estimate":266107.2695156634,"calibrationEstimate":267292.1101626903},{"id":"ons/northern_ireland_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":224000.0,"estimate":233210.67547005415,"calibrationEstimate":234249.041418612},{"id":"ons/northern_ireland_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":165000.0,"estimate":167639.7966554761,"calibrationEstimate":168386.20757927},{"id":"ons/northern_ireland_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":93000.0,"estimate":92153.0001502186,"calibrationEstimate":92563.3088106066},{"id":"ons/public_sector_employment","group":"Public sector employment","unit":"count","target":5940000.0,"estimate":6312640.037429422,"calibrationEstimate":6340746.95519267},{"id":"ons/savings_interest_income","group":"Household savings interest","unit":"gbp","target":95477000000.0,"estimate":79950702627.92642,"calibrationEstimate":80306652259.18176},{"id":"ons/scotland_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":526000.0,"estimate":641881.1917260289,"calibrationEstimate":644739.1555151343},{"id":"ons/scotland_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":597000.0,"estimate":656747.4221286178,"calibrationEstimate":659671.5815294981},{"id":"ons/scotland_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":709000.0,"estimate":733554.3973984718,"calibrationEstimate":736820.5347758532},{"id":"ons/scotland_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":736000.0,"estimate":767918.2292487621,"calibrationEstimate":771337.3676373959},{"id":"ons/scotland_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":691000.0,"estimate":722072.7127222419,"calibrationEstimate":725287.7285891771},{"id":"ons/scotland_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":788000.0,"estimate":787626.4137625694,"calibrationEstimate":791133.3067484498},{"id":"ons/scotland_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":727000.0,"estimate":651750.8500620723,"calibrationEstimate":654652.7627345324},{"id":"ons/scotland_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":546000.0,"estimate":514574.0681940317,"calibrationEstimate":516865.1993215084},{"id":"ons/scotland_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":297000.0,"estimate":297755.9146088958,"calibrationEstimate":299081.6620314121},{"id":"ons/scotland_babies_under_1","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":46000.0,"estimate":47392.787207722664,"calibrationEstimate":47603.80234372616},{"id":"ons/scotland_children_under_16","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":892000.0,"estimate":956384.414328456,"calibrationEstimate":960642.6983191968},{"id":"ons/scotland_households_3plus_children","group":"Scottish households with three or more children","unit":"count","target":82000.0,"estimate":85894.1879285574,"calibrationEstimate":86276.63023287058},{"id":"ons/south_east_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1039000.0,"estimate":1111941.5068392754,"calibrationEstimate":1116892.409429073},{"id":"ons/south_east_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1114000.0,"estimate":1101710.7248897552,"calibrationEstimate":1106616.0688095093},{"id":"ons/south_east_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1093000.0,"estimate":1096573.7211494446,"calibrationEstimate":1101456.189461708},{"id":"ons/south_east_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1283000.0,"estimate":1220971.4738111496,"calibrationEstimate":1226407.8243889809},{"id":"ons/south_east_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1273000.0,"estimate":1236771.2887330055,"calibrationEstimate":1242277.9926080704},{"id":"ons/south_east_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1287000.0,"estimate":1315838.0751552582,"calibrationEstimate":1321696.8212542534},{"id":"ons/south_east_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":1089000.0,"estimate":1011007.3164405824,"calibrationEstimate":1015508.8224596976},{"id":"ons/south_east_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":927000.0,"estimate":840235.7111372948,"calibrationEstimate":843976.8503341675},{"id":"ons/south_east_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":559000.0,"estimate":537971.9433064461,"calibrationEstimate":540367.251537323},{"id":"ons/south_west_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":576000.0,"estimate":605875.4385223389,"calibrationEstimate":608573.0888915062},{"id":"ons/south_west_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":646000.0,"estimate":657440.5976195335,"calibrationEstimate":660367.8376321793},{"id":"ons/south_west_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":694000.0,"estimate":704464.3741793633,"calibrationEstimate":707600.9934382439},{"id":"ons/south_west_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":743000.0,"estimate":733093.0883717537,"calibrationEstimate":736357.1722683907},{"id":"ons/south_west_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":704000.0,"estimate":701475.6737456322,"calibrationEstimate":704598.9818782806},{"id":"ons/south_west_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":794000.0,"estimate":814827.5300784111,"calibrationEstimate":818455.5310821533},{"id":"ons/south_west_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":741000.0,"estimate":711490.0465373993,"calibrationEstimate":714657.9429998398},{"id":"ons/south_west_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":662000.0,"estimate":619355.4574275017,"calibrationEstimate":622113.1314091682},{"id":"ons/south_west_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":388000.0,"estimate":378605.49705791473,"calibrationEstimate":380291.2312288284},{"id":"ons/tenure_england_owned_outright","group":"Dwellings in England, in total and by tenure","unit":"count","target":8374612.0,"estimate":8768407.628353596,"calibrationEstimate":8807448.794657707},{"id":"ons/tenure_england_owned_with_mortgage","group":"Dwellings in England, in total and by tenure","unit":"count","target":7667051.0,"estimate":7340195.817017555,"calibrationEstimate":7372877.9325323105},{"id":"ons/tenure_england_rented_privately","group":"Dwellings in England, in total and by tenure","unit":"count","target":5299840.0,"estimate":5771136.452427387,"calibrationEstimate":5796832.330587864},{"id":"ons/tenure_england_social_rent","group":"Dwellings in England, in total and by tenure","unit":"count","target":4274613.0,"estimate":4256839.477335453,"calibrationEstimate":4275792.98325038},{"id":"ons/tenure_england_total","group":"Dwellings in England, in total and by tenure","unit":"count","target":25616116.0,"estimate":26136579.37513399,"calibrationEstimate":26252952.04102826},{"id":"ons/uk_population","group":"UK population, in total and by sex and five-year age band","unit":"count","target":69502341.0,"estimate":69513955.15348345,"calibrationEstimate":69823464.8836815},{"id":"ons/unrelated_adult_households","group":"Households by family type","unit":"count","target":813000.0,"estimate":1050689.966396764,"calibrationEstimate":1055368.14447017},{"id":"ons/wales_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":325000.0,"estimate":348111.0020298362,"calibrationEstimate":349660.95873761177},{"id":"ons/wales_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":362000.0,"estimate":377138.5137854517,"calibrationEstimate":378817.71640336514},{"id":"ons/wales_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":389000.0,"estimate":418290.6885201931,"calibrationEstimate":420153.12041288614},{"id":"ons/wales_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":408000.0,"estimate":411603.5215437114,"calibrationEstimate":413436.1794215143},{"id":"ons/wales_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":374000.0,"estimate":384826.45291256905,"calibrationEstimate":386539.8871010244},{"id":"ons/wales_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":432000.0,"estimate":452820.6866479218,"calibrationEstimate":454836.86124008894},{"id":"ons/wales_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":407000.0,"estimate":410265.0739388764,"calibrationEstimate":412091.774304837},{"id":"ons/wales_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":343000.0,"estimate":337462.67445620894,"calibrationEstimate":338965.22140333056},{"id":"ons/wales_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":190000.0,"estimate":187945.18702608347,"calibrationEstimate":188782.0125888288},{"id":"ons/west_midlands_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":700000.0,"estimate":740427.3710947037,"calibrationEstimate":743724.1128196716},{"id":"ons/west_midlands_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":743000.0,"estimate":750943.1440749168,"calibrationEstimate":754286.7098031044},{"id":"ons/west_midlands_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":774000.0,"estimate":786793.4944777489,"calibrationEstimate":790296.6894640923},{"id":"ons/west_midlands_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":834000.0,"estimate":828792.4224143028,"calibrationEstimate":832482.5992808342},{"id":"ons/west_midlands_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":758000.0,"estimate":761574.4170179367,"calibrationEstimate":764965.3083944321},{"id":"ons/west_midlands_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":800000.0,"estimate":819991.0536427498,"calibrationEstimate":823642.0457062721},{"id":"ons/west_midlands_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":685000.0,"estimate":666777.4849286079,"calibrationEstimate":669746.3044867516},{"id":"ons/west_midlands_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":570000.0,"estimate":543959.9859566689,"calibrationEstimate":546381.9596209526},{"id":"ons/west_midlands_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":337000.0,"estimate":335582.32456445694,"calibrationEstimate":337076.4980826378},{"id":"ons/yorkshire_and_the_humber_age_0_9","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":618000.0,"estimate":646520.745308876,"calibrationEstimate":649399.3681302071},{"id":"ons/yorkshire_and_the_humber_age_10_19","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":666000.0,"estimate":665766.2851467133,"calibrationEstimate":668730.5973973274},{"id":"ons/yorkshire_and_the_humber_age_20_29","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":733000.0,"estimate":738032.4751114845,"calibrationEstimate":741318.5517039299},{"id":"ons/yorkshire_and_the_humber_age_30_39","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":764000.0,"estimate":743393.3681473732,"calibrationEstimate":746703.3084311485},{"id":"ons/yorkshire_and_the_humber_age_40_49","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":686000.0,"estimate":674013.2004489899,"calibrationEstimate":677014.2336220741},{"id":"ons/yorkshire_and_the_humber_age_50_59","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":745000.0,"estimate":748477.2201142311,"calibrationEstimate":751809.8084635735},{"id":"ons/yorkshire_and_the_humber_age_60_69","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":658000.0,"estimate":625388.0493502617,"calibrationEstimate":628172.5787653923},{"id":"ons/yorkshire_and_the_humber_age_70_79","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":536000.0,"estimate":495223.3988389969,"calibrationEstimate":497428.3698964119},{"id":"ons/yorkshire_and_the_humber_age_80_89","group":"Population by region and ten-year age band, and Scottish children under 1 and under 16","unit":"count","target":302000.0,"estimate":292769.0744128227,"calibrationEstimate":294072.6196627617},{"id":"slc/adult_dependants_grant_recipients","group":"Adult Dependants' Grant: recipients and spending","unit":"count","target":18611.0,"estimate":17591.605919361115,"calibrationEstimate":17669.932572364807},{"id":"slc/adult_dependants_grant_spend","group":"Adult Dependants' Grant: recipients and spending","unit":"gbp","target":55364917.0,"estimate":62362242.98413515,"calibrationEstimate":62639910.96903324},{"id":"slc/maintenance_loan_recipients","group":"Maintenance loans: recipients and spending","unit":"count","target":1159761.0,"estimate":1109131.6001944542,"calibrationEstimate":1114069.9859786034},{"id":"slc/maintenance_loan_spend","group":"Maintenance loans: recipients and spending","unit":"gbp","target":8591659718.0,"estimate":9218054904.748869,"calibrationEstimate":9258425902.638117},{"id":"slc/parents_learning_allowance_recipients","group":"Parents' Learning Allowance: recipients and spending","unit":"count","target":99645.0,"estimate":98401.1442747116,"calibrationEstimate":98839.27602291109},{"id":"slc/parents_learning_allowance_spend","group":"Parents' Learning Allowance: recipients and spending","unit":"gbp","target":181421659.0,"estimate":199163916.0120163,"calibrationEstimate":200050694.670372},{"id":"slc/plan_2_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":3985000.0,"estimate":4351740.260466576,"calibrationEstimate":4371116.3070783615},{"id":"slc/plan_2_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":8940000.0,"estimate":6801832.245146751,"calibrationEstimate":6832117.274783134},{"id":"slc/plan_5_borrowers_above_threshold","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":0.0,"estimate":10980.355975151062,"calibrationEstimate":11029.245110988615},{"id":"slc/plan_5_borrowers_liable","group":"Plan 2 and Plan 5 borrowers, liable and above the repayment threshold","unit":"count","target":10000.0,"estimate":10980.355975151062,"calibrationEstimate":11029.245110988615},{"id":"slc/student_loan_repayment/england","group":"Student loan repayments, by nation and plan","unit":"gbp","target":5018231834.95,"estimate":4924372998.704702,"calibrationEstimate":4951504342.148044},{"id":"slc/student_loan_repayment/england/plan_1","group":"Student loan repayments, by nation and plan","unit":"gbp","target":1852699178.55,"estimate":1912774723.7577064,"calibrationEstimate":1927223795.724351},{"id":"slc/student_loan_repayment/england/plan_2","group":"Student loan repayments, by nation and plan","unit":"gbp","target":2778253361.64,"estimate":3009177177.0632377,"calibrationEstimate":3021848686.1474357},{"id":"slc/student_loan_repayment/england/plan_5","group":"Student loan repayments, by nation and plan","unit":"gbp","target":40869580.81,"estimate":2421097.8837580923,"calibrationEstimate":2431860.2762551513},{"id":"slc/student_loan_repayment/england/postgraduate","group":"Student loan repayments, by nation and plan","unit":"gbp","target":346409713.95,"estimate":0.0,"calibrationEstimate":0.0},{"id":"slc/student_loan_repayment/northern_ireland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":181700000.0,"estimate":195834625.53753275,"calibrationEstimate":195057537.7770299},{"id":"slc/student_loan_repayment/scotland","group":"Student loan repayments, by nation and plan","unit":"gbp","target":203300000.0,"estimate":211661138.66371244,"calibrationEstimate":213426238.72853076},{"id":"slc/student_loan_repayment/wales","group":"Student loan repayments, by nation and plan","unit":"gbp","target":229100000.0,"estimate":240404435.4441616,"calibrationEstimate":241965720.39197335},{"id":"sss/scottish_child_payment","group":"Scottish Child Payment spending","unit":"gbp","target":471000000.0,"estimate":496826543.8159768,"calibrationEstimate":498778722.2114121},{"id":"voa/council_tax/EAST_MIDLANDS/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":804340.0,"estimate":810826.4721150398,"calibrationEstimate":814436.6684527397},{"id":"voa/council_tax/EAST_MIDLANDS/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":505610.0,"estimate":512407.21077013016,"calibrationEstimate":514688.69562864304},{"id":"voa/council_tax/EAST_MIDLANDS/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":403840.0,"estimate":408321.1785628795,"calibrationEstimate":410139.2239584923},{"id":"voa/council_tax/EAST_MIDLANDS/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":247850.0,"estimate":251585.90448570251,"calibrationEstimate":252706.08655452728},{"id":"voa/council_tax/EAST_MIDLANDS/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":154970.0,"estimate":159090.9088497162,"calibrationEstimate":159799.25795698166},{"id":"voa/council_tax/EAST_MIDLANDS/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":73920.0,"estimate":76071.9540567398,"calibrationEstimate":76410.66409111023},{"id":"voa/council_tax/EAST_MIDLANDS/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":39400.0,"estimate":41119.81154346466,"calibrationEstimate":41302.89587688446},{"id":"voa/council_tax/EAST_MIDLANDS/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3480.0,"estimate":3571.6356868743896,"calibrationEstimate":3587.538372039795},{"id":"voa/council_tax/EAST_MIDLANDS/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2233400.0,"estimate":2262995.076070547,"calibrationEstimate":2273071.0308914185},{"id":"voa/council_tax/EAST_OF_ENGLAND/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":403180.0,"estimate":410081.34103536606,"calibrationEstimate":411907.21901369095},{"id":"voa/council_tax/EAST_OF_ENGLAND/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":598950.0,"estimate":607668.3318777084,"calibrationEstimate":610373.9574875832},{"id":"voa/council_tax/EAST_OF_ENGLAND/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":739570.0,"estimate":753707.9612178802,"calibrationEstimate":757063.8386483192},{"id":"voa/council_tax/EAST_OF_ENGLAND/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":506540.0,"estimate":516178.52969670296,"calibrationEstimate":518476.80103206635},{"id":"voa/council_tax/EAST_OF_ENGLAND/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":313840.0,"estimate":318279.9686384201,"calibrationEstimate":319697.1040420532},{"id":"voa/council_tax/EAST_OF_ENGLAND/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":172960.0,"estimate":176901.61590719223,"calibrationEstimate":177689.26697444916},{"id":"voa/council_tax/EAST_OF_ENGLAND/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":113720.0,"estimate":115050.44249010086,"calibrationEstimate":115562.70192313194},{"id":"voa/council_tax/EAST_OF_ENGLAND/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14830.0,"estimate":15386.242055892944,"calibrationEstimate":15454.748620033264},{"id":"voa/council_tax/EAST_OF_ENGLAND/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2863600.0,"estimate":2913254.432919264,"calibrationEstimate":2926225.6377413273},{"id":"voa/council_tax/LONDON/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":144550.0,"estimate":147959.16212701795,"calibrationEstimate":148617.94319295883},{"id":"voa/council_tax/LONDON/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":499130.0,"estimate":509995.9175953865,"calibrationEstimate":512266.66976737976},{"id":"voa/council_tax/LONDON/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1040280.0,"estimate":1050597.5150232315,"calibrationEstimate":1055275.2787537577},{"id":"voa/council_tax/LONDON/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":975750.0,"estimate":987598.8952400684,"calibrationEstimate":991996.1635940076},{"id":"voa/council_tax/LONDON/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":585130.0,"estimate":599593.9400696754,"calibrationEstimate":602263.6314339638},{"id":"voa/council_tax/LONDON/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":298920.0,"estimate":308329.10556840897,"calibrationEstimate":309701.93103551865},{"id":"voa/council_tax/LONDON/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":225170.0,"estimate":231086.57636642456,"calibrationEstimate":232115.4830107689},{"id":"voa/council_tax/LONDON/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":68500.0,"estimate":70095.95393371582,"calibrationEstimate":70408.05544281006},{"id":"voa/council_tax/LONDON/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3837430.0,"estimate":3905257.065923929,"calibrationEstimate":3922645.156231165},{"id":"voa/council_tax/NORTH_EAST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":667540.0,"estimate":680927.9146752357,"calibrationEstimate":683959.735227108},{"id":"voa/council_tax/NORTH_EAST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":206790.0,"estimate":211369.69984054565,"calibrationEstimate":212310.8195757866},{"id":"voa/council_tax/NORTH_EAST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":196180.0,"estimate":200796.9545030594,"calibrationEstimate":201691.00126886368},{"id":"voa/council_tax/NORTH_EAST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":113460.0,"estimate":115955.40494251253,"calibrationEstimate":116471.69495296478},{"id":"voa/council_tax/NORTH_EAST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":61090.0,"estimate":61070.24371480942,"calibrationEstimate":61342.15813446045},{"id":"voa/council_tax/NORTH_EAST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":26600.0,"estimate":27066.620365142822,"calibrationEstimate":27187.134113311768},{"id":"voa/council_tax/NORTH_EAST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14600.0,"estimate":14750.866862297058,"calibrationEstimate":14816.544168949127},{"id":"voa/council_tax/NORTH_EAST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1570.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_EAST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1287830.0,"estimate":1311937.7049036026,"calibrationEstimate":1317779.0874414444},{"id":"voa/council_tax/NORTH_WEST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1386260.0,"estimate":1396966.966149807,"calibrationEstimate":1403186.934068203},{"id":"voa/council_tax/NORTH_WEST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":705450.0,"estimate":720335.2873666286,"calibrationEstimate":723542.5664150715},{"id":"voa/council_tax/NORTH_WEST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":616070.0,"estimate":629122.9967391491,"calibrationEstimate":631924.1538763046},{"id":"voa/council_tax/NORTH_WEST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":363970.0,"estimate":370654.8873119354,"calibrationEstimate":372305.22163152695},{"id":"voa/council_tax/NORTH_WEST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":216990.0,"estimate":223145.4713373184,"calibrationEstimate":224139.02274608612},{"id":"voa/council_tax/NORTH_WEST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":104330.0,"estimate":106765.20633602142,"calibrationEstimate":107240.57545137404},{"id":"voa/council_tax/NORTH_WEST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":65750.0,"estimate":67638.04249954224,"calibrationEstimate":67939.20158004761},{"id":"voa/council_tax/NORTH_WEST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":7350.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/NORTH_WEST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3466140.0,"estimate":3514628.857740402,"calibrationEstimate":3530277.675768614},{"id":"voa/council_tax/SCOTLAND/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":498707.0,"estimate":515316.19908612967,"calibrationEstimate":517610.6356689334},{"id":"voa/council_tax/SCOTLAND/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":583705.0,"estimate":596116.6629003286,"calibrationEstimate":598770.858819902},{"id":"voa/council_tax/SCOTLAND/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":426388.0,"estimate":438665.9268243313,"calibrationEstimate":440619.0802770853},{"id":"voa/council_tax/SCOTLAND/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":369621.0,"estimate":382863.13651132584,"calibrationEstimate":384567.825379014},{"id":"voa/council_tax/SCOTLAND/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":366881.0,"estimate":379893.0151258707,"calibrationEstimate":381584.4805672765},{"id":"voa/council_tax/SCOTLAND/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":221282.0,"estimate":226826.03650927544,"calibrationEstimate":227835.97577929497},{"id":"voa/council_tax/SCOTLAND/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":142084.0,"estimate":147016.9963287711,"calibrationEstimate":147671.5859876275},{"id":"voa/council_tax/SCOTLAND/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":14481.0,"estimate":14808.030705451964,"calibrationEstimate":14873.963412761688},{"id":"voa/council_tax/SCOTLAND/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2623149.0,"estimate":2701506.0039914846,"calibrationEstimate":2713534.4058918953},{"id":"voa/council_tax/SOUTH_EAST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":367610.0,"estimate":376360.7253332138,"calibrationEstimate":378036.46535110474},{"id":"voa/council_tax/SOUTH_EAST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":687430.0,"estimate":697182.442407608,"calibrationEstimate":700286.6280040741},{"id":"voa/council_tax/SOUTH_EAST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1075940.0,"estimate":1085118.4883375168,"calibrationEstimate":1089949.9572668076},{"id":"voa/council_tax/SOUTH_EAST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":843560.0,"estimate":853005.1059784889,"calibrationEstimate":856803.1057033539},{"id":"voa/council_tax/SOUTH_EAST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":551730.0,"estimate":565347.5330710411,"calibrationEstimate":567864.7373809814},{"id":"voa/council_tax/SOUTH_EAST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":337260.0,"estimate":343406.3412051201,"calibrationEstimate":344935.3486070633},{"id":"voa/council_tax/SOUTH_EAST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":265610.0,"estimate":273259.16970586777,"calibrationEstimate":274475.85278081894},{"id":"voa/council_tax/SOUTH_EAST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":40390.0,"estimate":41828.12801408768,"calibrationEstimate":42014.36674642563},{"id":"voa/council_tax/SOUTH_EAST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":4169520.0,"estimate":4235507.934052944,"calibrationEstimate":4254366.46184063},{"id":"voa/council_tax/SOUTH_WEST/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":473020.0,"estimate":480721.35360240936,"calibrationEstimate":482861.7603902817},{"id":"voa/council_tax/SOUTH_WEST/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":644890.0,"estimate":652150.7268886566,"calibrationEstimate":655054.4196505547},{"id":"voa/council_tax/SOUTH_WEST/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":624030.0,"estimate":630441.1841773987,"calibrationEstimate":633248.2066836357},{"id":"voa/council_tax/SOUTH_WEST/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":432070.0,"estimate":436525.51323509216,"calibrationEstimate":438469.13437223434},{"id":"voa/council_tax/SOUTH_WEST/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":292090.0,"estimate":294583.2273864746,"calibrationEstimate":295894.85467910767},{"id":"voa/council_tax/SOUTH_WEST/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":147920.0,"estimate":152135.8166975975,"calibrationEstimate":152813.1989789009},{"id":"voa/council_tax/SOUTH_WEST/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":81960.0,"estimate":84250.8870754242,"calibrationEstimate":84626.01384878159},{"id":"voa/council_tax/SOUTH_WEST/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":8430.0,"estimate":8703.319227695465,"calibrationEstimate":8742.070514202118},{"id":"voa/council_tax/SOUTH_WEST/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2704390.0,"estimate":2739512.0282907486,"calibrationEstimate":2751709.6591176987},{"id":"voa/council_tax/WALES/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":215380.0,"estimate":222868.2017711103,"calibrationEstimate":223860.5200700462},{"id":"voa/council_tax/WALES/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":307070.0,"estimate":319381.61908221245,"calibrationEstimate":320803.6611531377},{"id":"voa/council_tax/WALES/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":323220.0,"estimate":330332.8331284225,"calibrationEstimate":331803.6361452937},{"id":"voa/council_tax/WALES/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":241220.0,"estimate":251210.1368997395,"calibrationEstimate":252328.64651045203},{"id":"voa/council_tax/WALES/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":200840.0,"estimate":209976.49252527952,"calibrationEstimate":210911.41085255143},{"id":"voa/council_tax/WALES/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":122650.0,"estimate":129290.4778507948,"calibrationEstimate":129866.14176630974},{"id":"voa/council_tax/WALES/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":55190.0,"estimate":57801.12522992492,"calibrationEstimate":58058.484007924795},{"id":"voa/council_tax/WALES/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":13190.0,"estimate":13780.451801896095,"calibrationEstimate":13841.808837890623},{"id":"voa/council_tax/WALES/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1484410.0,"estimate":1573538.7788615525,"calibrationEstimate":1580544.9390577674},{"id":"voa/council_tax/WEST_MIDLANDS/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":786010.0,"estimate":802153.1481461525,"calibrationEstimate":805724.7243089676},{"id":"voa/council_tax/WEST_MIDLANDS/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":654140.0,"estimate":664764.5649981499,"calibrationEstimate":667724.4145531654},{"id":"voa/council_tax/WEST_MIDLANDS/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":526260.0,"estimate":537201.4449081421,"calibrationEstimate":539593.3236117363},{"id":"voa/council_tax/WEST_MIDLANDS/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":302500.0,"estimate":311227.7170410156,"calibrationEstimate":312613.45697784424},{"id":"voa/council_tax/WEST_MIDLANDS/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":193700.0,"estimate":198160.27219820023,"calibrationEstimate":199042.57495069504},{"id":"voa/council_tax/WEST_MIDLANDS/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":105630.0,"estimate":107085.38049554823,"calibrationEstimate":107562.17588567734},{"id":"voa/council_tax/WEST_MIDLANDS/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":62780.0,"estimate":65211.53876924515,"calibrationEstimate":65501.89206933975},{"id":"voa/council_tax/WEST_MIDLANDS/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":6170.0,"estimate":6246.450771331787,"calibrationEstimate":6274.26305770874},{"id":"voa/council_tax/WEST_MIDLANDS/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2637190.0,"estimate":2692050.5173277855,"calibrationEstimate":2704036.8254151344},{"id":"voa/council_tax/YORKSHIRE/A","group":"Dwellings by region, in total and by council tax band","unit":"count","target":1070830.0,"estimate":1078091.647023201,"calibrationEstimate":1082891.8340659142},{"id":"voa/council_tax/YORKSHIRE/B","group":"Dwellings by region, in total and by council tax band","unit":"count","target":514190.0,"estimate":519294.7808365822,"calibrationEstimate":521606.9336957931},{"id":"voa/council_tax/YORKSHIRE/C","group":"Dwellings by region, in total and by council tax band","unit":"count","target":432290.0,"estimate":438447.6186916828,"calibrationEstimate":440399.7987952232},{"id":"voa/council_tax/YORKSHIRE/D","group":"Dwellings by region, in total and by council tax band","unit":"count","target":249530.0,"estimate":249289.43314504623,"calibrationEstimate":250399.3865070343},{"id":"voa/council_tax/YORKSHIRE/E","group":"Dwellings by region, in total and by council tax band","unit":"count","target":158600.0,"estimate":157939.75742721558,"calibrationEstimate":158642.98141002655},{"id":"voa/council_tax/YORKSHIRE/F","group":"Dwellings by region, in total and by council tax band","unit":"count","target":75690.0,"estimate":75384.2948513031,"calibrationEstimate":75719.94152116776},{"id":"voa/council_tax/YORKSHIRE/G","group":"Dwellings by region, in total and by council tax band","unit":"count","target":42180.0,"estimate":42988.22592973709,"calibrationEstimate":43179.63058567047},{"id":"voa/council_tax/YORKSHIRE/H","group":"Dwellings by region, in total and by council tax band","unit":"count","target":3770.0,"estimate":0.0,"calibrationEstimate":0.0},{"id":"voa/council_tax/YORKSHIRE/total","group":"Dwellings by region, in total and by council tax band","unit":"count","target":2547080.0,"estimate":2561435.757904768,"calibrationEstimate":2572840.5065808296}] diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx index 094a33b..3005e53 100644 --- a/src/test/ukDataPages.test.tsx +++ b/src/test/ukDataPages.test.tsx @@ -3,6 +3,7 @@ import { render, screen } from '@testing-library/react'; import release from '../data/ukDataRelease.json'; import { ukPipelineIntro, ukPipelineStages, ukBranchLabels, runtimeShortfall } from '../data/ukPipelineStages'; import { fmtInt, fmtPct, fmtTarget } from '../data/ukDataRelease'; +import { UK_MODEL_VERSION } from '../data/ukBehaviouralResponses'; vi.mock('next/navigation', () => ({ usePathname: () => '/uk/model/data/pipeline', @@ -108,6 +109,12 @@ describe('UK pipeline copy', () => { expect(text).toContain(`${fmtPct(runtimeShortfall)} fewer`); }); + it('describes the behavioural responses of the model version the release pins', () => { + // A new pin must fail here until someone re-checks the behavioural page + // against the new policyengine-uk (UK_MODEL_SOURCE=… bun run test). + expect(UK_MODEL_VERSION).toBe(release.release.modelVersion); + }); + it('renders the UK intro and branch labels', () => { render(); expect(screen.getByText(ukPipelineIntro)).toBeInTheDocument(); diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index 484fea3..3f976f9 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -102,7 +102,7 @@ const KNOWN_ISSUES: { repo: string; n: number; text: string }[] = [ { repo: 'policyengine-uk-data', n: 587, - text: 'The Output Area lookup gives every Scottish Output Area the same population, and has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset.', + text: 'The Output Area lookup gives every Scottish Output Area the same population, and has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset, so policyengine.py finds no households for those four authorities.', }, { repo: 'policyengine-uk', n: 1996, text: 'Modelled VAT exceeds OBR receipts.' }, { repo: 'policyengine-uk-data', n: 570, text: 'Capital gains fall short of HMRC’s totals.' }, From d0084e1b16c26fc74e7a86b730bd3183172bb8b1 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 20 Oct 2026 20:55:38 -0400 Subject: [PATCH 27/30] Show what changed upstream since the pinned release, and the unreachable targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream since 1.58.1: - policyengine-uk-data#468 (UC by row order) is fixed on main after this release: #589, merged 2026-10-19, after the 1.58.2 tag; - #537 (NI) changed on main after this release; - #570 (capital gains) addressed on main after this release; - policyengine-uk#1996 (VAT) addressed after 2.130.1. The known issues now say so; the pinned release still has each one. On 1.58.1, capital gains are £55.5bn against HMRC's £68.8bn and VAT £313bn against OBR's £180bn. New known issue #593: some non-zero targets have no household that contributes to them, so no weighting can meet them. The count comes from the release data: 22 at epoch 510 and 19 with the pinned model. Examples are the £1m+ income bands and ages 85 to 90. The calibration page states the count too; a test checks both counts. Co-Authored-By: Claude Opus 5.5 --- src/test/ukDataPages.test.tsx | 13 ++++++++++++- src/views/data/UkCalibrationPage.tsx | 6 +++++- src/views/data/UkValidationPage.tsx | 29 +++++++++++++++++++++++++--- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx index 3005e53..0284fc8 100644 --- a/src/test/ukDataPages.test.tsx +++ b/src/test/ukDataPages.test.tsx @@ -125,7 +125,7 @@ describe('UK pipeline copy', () => { import fc from 'fast-check'; import UkCalibrationPage, { listAreas } from '../views/data/UkCalibrationPage'; -import UkValidationPage, { fmtDifference, niClasses, niTotalTarget, obrRows } from '../views/data/UkValidationPage'; +import UkValidationPage, { fmtDifference, niClasses, niTotalTarget, obrRows, unreachableTargets } from '../views/data/UkValidationPage'; import checks from '../data/ukTargetChecks.json'; describe('UK calibration and validation pages', () => { @@ -170,6 +170,17 @@ describe('UK calibration and validation pages', () => { for (const id of release.validation.revisedTargets) expect(text).toContain(id); }); + it('counts the targets no household contributes to, with each model', () => { + const pinned = checks.filter((r) => r.target !== 0 && r.estimate === 0); + const fitted = checks.filter((r) => r.target !== 0 && r.calibrationEstimate === 0); + expect(unreachableTargets.length).toBe(pinned.length); + expect(pinned.length).toBeGreaterThan(0); + const validation = render().container.textContent ?? ''; + expect(validation).toContain(`${pinned.length} non-zero targets have no household`); + const calibration = render().container.textContent ?? ''; + expect(calibration).toContain(`${fitted.length} non-zero targets have no household`); + }); + it('scores the pinned run against the values calibration fitted', () => { const fitted = new Map(release.calibration.nationalGroups.map((g) => [g.label, g])); for (const r of checks) expect(fitted.has(r.group)).toBe(true); diff --git a/src/views/data/UkCalibrationPage.tsx b/src/views/data/UkCalibrationPage.tsx index 34adc32..ae39bd7 100644 --- a/src/views/data/UkCalibrationPage.tsx +++ b/src/views/data/UkCalibrationPage.tsx @@ -44,6 +44,8 @@ export function listAreas(byArea: Record): string { } const zeroTargets = rows.filter((r) => r.target === 0); +// Non-zero targets no household contributes to at the end of calibration. +const unreachable = rows.filter((r) => r.target !== 0 && r.calibrationEstimate === 0); function groupValue(g: UkTargetGroup): string { if (g.value === undefined) return '–'; @@ -128,7 +130,9 @@ export default function UkCalibrationPage() { {f.nationalTargets} targets in {cal.nationalGroups.length} families: {listAreas(cal.nationalTargetsByArea)}. At epoch {cal.epoch}, {fmtPct(cal.nationalWithin10)} of the {fmtInt(scored)} non-zero targets lie within 10% of their value, and {fmtPct(cal.nationalWithin5)} within 5%. Each target counts once, whatever its size, so - a share says nothing about how far the misses are; the{' '} + a share says nothing about how far the misses are. {fmtInt(unreachable.length)} non-zero targets have no + household that contributes to them, so no weighting can meet them ( + policyengine-uk-data#593). The{' '} validation page gives each OBR line’s gap. Each family’s source links to the reference the build records for it. {zeroTargets.length > 0 && diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index 3f976f9..41f85fd 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -58,7 +58,12 @@ export function fmtDifference(target: number, estimate: number): string { return `${pct >= 0 ? '+' : '−'}${Math.abs(pct).toFixed(1)}%`; } -const KNOWN_ISSUES: { repo: string; n: number; text: string }[] = [ +// Targets that no household contributes to, so no weighting can meet them. +export const unreachableTargets = rows.filter((r) => r.target !== 0 && r.estimate === 0); + +// `after` marks an issue the repository has addressed since the pinned +// release; the release itself still has it. +const KNOWN_ISSUES: { repo: string; n: number; text: string; after?: string }[] = [ { repo: 'policyengine-uk-data', n: 581, @@ -68,6 +73,7 @@ const KNOWN_ISSUES: { repo: string; n: number; text: string }[] = [ repo: 'policyengine-uk-data', n: 537, text: 'The total National Insurance target is compared with employee contributions alone.', + after: 'changed on policyengine-uk-data’s main branch after this release', }, { repo: 'policyengine-uk-data', @@ -93,6 +99,7 @@ const KNOWN_ISSUES: { repo: string; n: number; text: string }[] = [ repo: 'policyengine-uk-data', n: 468, text: `Both local calibrations assign Universal Credit household counts to areas by row order, which does not match the areas.`, + after: 'fixed on policyengine-uk-data’s main branch after this release', }, { repo: 'policyengine-uk-data', @@ -104,8 +111,23 @@ const KNOWN_ISSUES: { repo: string; n: number; text: string }[] = [ n: 587, text: 'The Output Area lookup gives every Scottish Output Area the same population, and has no Output Areas for Cumberland, Westmorland and Furness, North Yorkshire or Somerset, so policyengine.py finds no households for those four authorities.', }, - { repo: 'policyengine-uk', n: 1996, text: 'Modelled VAT exceeds OBR receipts.' }, - { repo: 'policyengine-uk-data', n: 570, text: 'Capital gains fall short of HMRC’s totals.' }, + { + repo: 'policyengine-uk-data', + n: 593, + text: `${unreachableTargets.length} non-zero targets have no household that contributes to them, among them the £1 million and over income bands and ages 85 to 90, so no weighting can meet them.`, + }, + { + repo: 'policyengine-uk', + n: 1996, + text: 'Modelled VAT exceeds OBR receipts.', + after: `addressed in policyengine-uk after ${uk.release.modelVersion}`, + }, + { + repo: 'policyengine-uk-data', + n: 570, + text: 'Capital gains fall short of HMRC’s totals.', + after: 'addressed on policyengine-uk-data’s main branch after this release', + }, { repo: 'policyengine-uk-data', n: 580, @@ -245,6 +267,7 @@ export default function UkValidationPage() {
  • {issue.text}{' '} {`${issue.repo}#${issue.n}`} + {issue.after && ` (${issue.after})`}
  • ))} From 3cdb4e8229b2a93bae53b3c981dadd1b6560af1b Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 20 Oct 2026 21:04:17 -0400 Subject: [PATCH 28/30] Close the re-review's four remaining findings, and note the unprojected SPI targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From the GPT-6.1 Sol re-review at 841e4dc (REQUEST CHANGES): 1. Module map provenance (major) - The UK explorer's class-to-module map now comes from the policyengine-uk release the production API serves: the API version, its tag and the tag's commit. - It is written to public/variable-modules-uk.json with repo, version and commit. - fetchMetadata applies it only when the repository and version match the API response; otherwise variables stay unclassified. - Tests reject a stale version, the wrong repository, missing provenance or commit, an API without a version, and a list-shaped map. - The build now writes the 2.130.1 map: tag 6b33955 → commit 714b143, 1,163 classes. 2. Behavioural test labels (major) - The test reads each row's demographics from its displayed labels with a fixed vocabulary, checks them against row.covers, and requires every grid cell exactly once. - It checks that the rendered table shows each row's labels. - scripts/uk_pay_channel_cases.py runs the employer NI, haircut and returned-income formulas themselves. The test checks each behaviour the page states, including the threshold lifted past pay. - Relabelling a row, swapping age bands and overlapping coverage each now fail. 3. Extractor restatements (major) - restatement_mismatches() derives each figure, scope and publisher from policyengine-uk-data's code and checks the extractor's emitted notes, labels, areas and publishers against it. - Twelve mutations (a dropped or altered note, publisher or area) each fail it. 4. Filename-only links (minor) - A paths-only tree now verifies no variable links. The afip.py case, which declares armed_forces_independence_payment, is a test. Also verified on 1.58.1: - hmrc_spi.py's 2025 projections reuse the base-year targets' names, and registry.get_all_targets keeps the first of each name. So the 156 SPI band targets are fitted at their 2023-24 values; for example £174.0bn against a projected £183.2bn. Each SPI family now carries that note, guarded against the source. Reported to the UK hub. - The geography stage says how the build uprates to 2025: its model's load-time growth, with separate weight and fuel indices. Co-Authored-By: Claude Opus 5.5 --- .gitignore | 1 + scripts/extract_uk_release.py | 19 +- scripts/fetch-metadata.js | 53 ++- scripts/test_extract_uk_release.py | 405 +++++++++++++++++---- scripts/uk_obr_elasticity_grid.py | 9 +- scripts/uk_pay_channel_cases.py | 197 ++++++++++ src/components/rules/UkCoverageTracker.tsx | 8 +- src/data/fetchMetadata.ts | 66 ++-- src/data/ukDataRelease.json | 12 +- src/data/ukPipelineStages.ts | 3 +- src/test/fetchMetadata.test.ts | 84 +++-- src/test/fetchMetadataScript.test.ts | 36 +- src/test/ukBehavioural.test.tsx | 112 ++++-- src/test/ukCoverageLinks.test.tsx | 14 +- src/test/ukTaxonomy.test.ts | 41 +-- 15 files changed, 859 insertions(+), 201 deletions(-) create mode 100644 scripts/uk_pay_channel_cases.py diff --git a/.gitignore b/.gitignore index 7deadca..93d3f28 100644 --- a/.gitignore +++ b/.gitignore @@ -30,5 +30,6 @@ policyengine-uk-data # Metadata and registry snapshots generated at build time public/metadata-*.json public/variable-tree-*.json +public/variable-modules-*.json public/param-tree-*.json public/programs-*.json diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index de61386..6b897c5 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -132,6 +132,18 @@ def area_override(metric: str) -> str | None: # How a target family is built or scored, where its label alone would # mislead. Every note restates code in the release. GB_ON_UK_NOTE = "Scored on UK households (policyengine-uk-data#588)" +# hmrc_spi.py's 2025 projections reuse the base-year targets' names, and +# registry.get_all_targets keeps the first target of each name, so the +# calibration fits the 2023-24 figures. +SPI_NOTE = "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped" +SPI_GROUPS = [ + "employment_income", + "self_employment_income", + "private_pension_income", + "state_pension", + "property_income", + "dividend_income", +] GROUP_NOTES = { ("obr", "ni_employee", "national", None): ( "OBR's total includes employer and self-employed contributions " @@ -172,7 +184,7 @@ def area_override(metric: str) -> str | None: "total_income", ): ( "Amounts scaled up 1.9 times, the build's ratio of HMRC's property " - "rental income statistics to the SPI" + "rental income statistics to the SPI. " + SPI_NOTE ), # targets/sources/_land.py and mhclg_regional_land.py ("ons", "land_value", "national", None): "ONS's 2024 total, held flat for 2025", @@ -471,6 +483,11 @@ def area_override(metric: str) -> str | None: ): "Dwellings by region, in total and by council tax band", } +for _variable in SPI_GROUPS: + GROUP_NOTES.setdefault( + ("hmrc_spi", _variable, "national", "total_income"), SPI_NOTE + ) + # Constituency and local authority loss builders (datasets/local_areas/*/loss.py). INCOME_NOTE = "Rescaled so the areas add to a projected UK total" INCOME_COUNT_NOTE = "Scaled by the same factor as the amounts" diff --git a/scripts/fetch-metadata.js b/scripts/fetch-metadata.js index 6a112d1..fb9fa67 100644 --- a/scripts/fetch-metadata.js +++ b/scripts/fetch-metadata.js @@ -164,6 +164,43 @@ export async function fetchVariableTreeSnapshot(country, source, { return { source, paths: await fetchVariableModulePaths(country, source, fetchImpl) }; } +/** The country package version the production API serves. */ +export async function fetchApiModelVersion(country, fetchImpl = globalThis.fetch) { + const metadata = await (await request(`https://api.policyengine.org/${country}/metadata`, fetchImpl)).json(); + const version = (metadata.result ?? metadata).version; + if (typeof version !== 'string' || !/^\d+\.\d+\.\d+$/.test(version)) { + throw new Error('production API returned no package version'); + } + return version; +} + +/** The commit a release tag names, following an annotated tag to its commit. */ +export async function resolveTagCommit(repo, tag, fetchImpl = globalThis.fetch) { + const ref = await (await request(`https://api.github.com/repos/${repo}/git/ref/tags/${tag}`, fetchImpl)).json(); + let target = ref.object; + if (target?.type === 'tag') { + target = (await (await request(`https://api.github.com/repos/${repo}/git/tags/${target.sha}`, fetchImpl)).json()).object; + } + if (target?.type !== 'commit' || !/^[0-9a-f]{40}$/.test(target.sha ?? '')) { + throw new Error(`tag ${tag} does not resolve to a commit`); + } + return target.sha; +} + +/** + * The class-to-module map for the package release the production API serves. + * The explorer's variables come from that API, so the map is taken from the + * release with the same version, not from the default branch, and the browser + * applies it only when the versions still match. + */ +export async function fetchVariableModuleSnapshot(country, repo, fetchImpl = globalThis.fetch) { + const version = await fetchApiModelVersion(country, fetchImpl); + const commit = await resolveTagCommit(repo, version, fetchImpl); + const response = await request(`https://codeload.github.com/${repo}/tar.gz/${commit}`, fetchImpl); + const { modules } = extractVariableModules(country, gunzipSync(Buffer.from(await response.arrayBuffer()))); + return { source: { repo, version, commit }, modules }; +} + export async function fetchMetadataFiles({ countries = ['us', 'uk'], outputDir = PUBLIC_DIR, @@ -182,10 +219,11 @@ export async function fetchMetadataFiles({ const snapshotPath = join(outputDir, `programs-${country}.json`); const parameterTreePath = join(outputDir, `param-tree-${country}.json`); const variableTreePath = join(outputDir, `variable-tree-${country}.json`); + const variableModulesPath = join(outputDir, `variable-modules-${country}.json`); let source; try { - // Clear all three before resolving HEAD, including when resolution fails. - for (const path of [snapshotPath, parameterTreePath, variableTreePath]) { + // Clear every snapshot before resolving HEAD, including when resolution fails. + for (const path of [snapshotPath, parameterTreePath, variableTreePath, variableModulesPath]) { rmSync(path, { force: true }); } source = await resolveRepository(country, fetchImpl); @@ -222,6 +260,17 @@ export async function fetchMetadataFiles({ logger.warn(` ${country}: variable tree skipped — ${error.message}`); } })(), + (async () => { + // The UK API serves no module names; the US API does. + if (country !== 'uk') return; + try { + const snapshot = await fetchVariableModuleSnapshot(country, source.repo, fetchImpl); + writeFileSync(variableModulesPath, JSON.stringify(snapshot)); + logger.log(` ${country}: wrote ${variableModulesPath} (${Object.keys(snapshot.modules).length} classes, ${snapshot.source.version})`); + } catch (error) { + logger.warn(` ${country}: variable module map skipped — ${error.message}`); + } + })(), ]); } logger.log('Done.'); diff --git a/scripts/test_extract_uk_release.py b/scripts/test_extract_uk_release.py index 0d6136b..9170d2b 100644 --- a/scripts/test_extract_uk_release.py +++ b/scripts/test_extract_uk_release.py @@ -520,83 +520,366 @@ def _read(path: str) -> str: return (Path(DATA_SOURCE) / "policyengine_uk_data" / path).read_text() -@pytest.mark.skipif( - not DATA_SOURCE, reason="set UK_DATA_SOURCE to policyengine-uk-data at the pin" -) -def test_area_overrides_and_notes_restate_the_data_package(): +def _figure(text: str) -> float: + """1_100 -> 1100.0; 7.5e6 -> 7500000.0.""" + return float(text.replace("_", "")) + + +def _millions(x: float) -> str: + return f"{x / 1e6:g} million" + + +def restatement_mismatches(ex, source: Path) -> list[str]: + """Each claim the extractor makes about how a target is built, checked + against the figure or rule the data package's code holds. Returns one + message per mismatch, so a missing, stale or altered note fails.""" import re - obr = _read("targets/sources/obr.py") + def read(path: str) -> str: + return (source / "policyengine_uk_data" / path).read_text() + + problems: list[str] = [] + + def need(cond: bool, message: str) -> None: + if not cond: + problems.append(message) + + def note(key: tuple) -> str: + text = ex.GROUP_NOTES.get(key) + need(text is not None, f"no note for {key}") + return text or "" + + local = {prefix: n or "" for prefix, _, _, n in ex.LOCAL_FAMILIES} + + obr = read("targets/sources/obr.py") + # Areas: DWP benefit rows are GB lines built without a country restriction. rows = obr[ obr.index("benefit_rows = {") : obr.index( "targets = []", obr.index("benefit_rows = {") ) ] - benefit_targets = { - f"obr/{name}" for name in re.findall(r'^\s+"(\w+)": \(', rows, re.M) - } - great_britain = { - m for m, area in ex.AREA_BY_TARGET.items() if area == "Great Britain" - } - # Every DWP benefit row but Child Benefit (HMRC) is a Great Britain line - # built without a country restriction. - assert great_britain == benefit_targets - {"obr/child_benefit"} - assert "countries=" not in rows - assert "which covers Great Britain" in obr - assert '"NI domestic rates"' in obr and "obr/domestic_rates" in ex.AREA_BY_TARGET - assert "_PRIVATE_SCHOOL = {y: 557_000 for y in range(2018, 2032)}" in obr - for figure in ( - "7_700_000", - "4_300_000", - "3_300_000", - "_SS_HEADCOUNT_GROWTH = 1.024", + names = {f"obr/{n}" for n in re.findall(r'^\s+"(\w+)": \(', rows, re.M)} + need("countries=" not in rows, "obr.py now restricts benefit_rows by country") + gb = {m for m, a in ex.AREA_BY_TARGET.items() if a == "Great Britain"} + need( + gb == names - {"obr/child_benefit"}, + f"GB benefit areas {sorted(gb)} != {sorted(names - {'obr/child_benefit'})}", + ) + for m in sorted(gb): + key = ( + "obr", + "esa_income" + if m == "obr/esa" + else ("jsa" if m == "obr/jobseekers_allowance" else m.split("/")[1]), + "national", + None, + ) + need( + "Scored on UK households" in note(key) + or "scored on UK households" in note(key), + f"{m}: no UK-scoring note", + ) + need( + '"NI domestic rates"' in obr + and ex.AREA_BY_TARGET.get("obr/domestic_rates") == "Northern Ireland", + "domestic rates area", + ) + # ESA and PIP scoring. + blm = read("targets/build_loss_matrix.py") + inc = read("targets/compute/income.py") + need( + 'if name == "obr/esa":' in blm and 'calculate("esa_contrib")' in inc, + "obr/esa no longer adds contributory ESA", + ) + need( + "income-related and contributory" + in ex.GROUP_LABELS[("obr", "esa_income", "national", None)], + "ESA label", + ) + need( + '"Disability living allowance and personal independence p"' in obr, + "obr.py PIP row label changed", + ) + need( + "Disability Living Allowance and PIP" + in ex.GROUP_LABELS[("obr", "pip", "national", None)], + "PIP label", + ) + need( + 'ctx.pe("council_tax_less_benefit")' in read("targets/compute/council_tax.py"), + "council tax scoring changed", + ) + need( + "net of reductions" in note(("obr", "council_tax", "national", None)), + "council tax note", + ) + # Independent schools. + m = re.search( + r"_PRIVATE_SCHOOL = \{y: ([\d_]+) for y in range\((\d+), (\d+)\)\}", obr + ) + need(m is not None, "obr.py private school constant changed") + if m: + n = note(("obr", "attends_private_school", "national", None)) + need( + f"{_figure(m[1]):,.0f}" in n and m[2] in n and str(int(m[3]) - 1) in n, + f"private school note: {n!r}", + ) + # Salary sacrifice headcounts. + ss = note(("obr", "pension_contributions_via_salary_sacrifice", "national", None)) + for const in ("_SS_TOTAL_USERS", "_SS_BELOW_CAP_USERS", "_SS_ABOVE_CAP_USERS"): + m = re.search(const + r" = \{\s*y: ([\d_]+) \*", obr) + need( + m is not None and _millions(_figure(m[1])) in ss, + f"{const} figure missing from note {ss!r}", + ) + m = re.search(r"_SS_HEADCOUNT_GROWTH = ([\d.]+)", obr) + need( + m is not None and f"{(float(m[1]) - 1) * 100:g}%" in ss, + "salary sacrifice growth rate", + ) + deflates = "price_adj" in inc + need( + ("2023 prices" in ss) == deflates, + "salary sacrifice £2,000 test: note and compute disagree on price basis", + ) + # SPI income bands: the projections reuse the base-year names, and the + # registry keeps the first target of each name, so 2025 fits 2023-24. + spi = read("targets/sources/hmrc_spi.py") + registry_code = read("targets/registry.py") + dropped = ( + "if target.name in seen_names:" in registry_code + and 'name = f"hmrc/{variable}_income_band_{band_label}"' + in spi[spi.index("def _read_projection_csv") :] + ) + for variable in ex.SPI_GROUPS: + n = note(("hmrc_spi", variable, "national", "total_income")) + need( + dropped == ("fitted unchanged for 2025" in n), + f"SPI {variable}: projection note {n!r}", + ) + # Mortgage, property income, capital gains, land. + m = re.search( + r"_MORTGAGE_TOTAL = ([\d_.e]+) \* 12 \* ([\d_.e]+)", + read("targets/sources/housing.py"), + ) + mort = note(("ons", "mortgage_capital_repayment", "national", None)) + need( + m is not None + and f"£{_figure(m[1]):,.0f}" in mort + and _millions(_figure(m[2])) in mort, + f"mortgage note {mort!r}", + ) + need( + ex.PUBLISHER_BY_TARGET.get("housing/total_mortgage") + == "Assumption set in the build", + "mortgage publisher", + ) + m = re.search( + r"_PROPERTY_INCOME_SCALE = ([\d.]+)", read("targets/sources/hmrc_spi.py") + ) + need( + m is not None + and f"{m[1]} times" + in note(("hmrc_spi", "property_income", "national", "total_income")), + "property income scale", + ) + cgt = read("targets/sources/hmrc_cgt.py") + need( + "float(_CGT_TAXPAYERS) for year in range" in cgt and "_project_gains(" in cgt, + "CGT construction changed", + ) + cg = note(("hmrc", "capital_gains", "national", None)) + need("gains uprated" in cg and "counts held flat" in cg, f"CGT note {cg!r}") + land = read("targets/sources/_land.py") + share_year = re.search(r"_ONS_(\d{4})_HOUSEHOLD", land) + flat = "2025: HOUSEHOLD_LAND_VALUES[2024]" in land + for key in ( + ("ons", "household_land_value", "national", None), + ("ons", "corporate_land_value", "national", None), ): - assert figure in obr - # The £2,000 test applies to contributions as simulated, not deflated. - assert "mask = (ss > 0) & (ss <= 2000)" in _read("targets/compute/income.py") - assert ( - "contributions as the model runs them" - in ex.GROUP_NOTES[ - ("obr", "pension_contributions_via_salary_sacrifice", "national", None) - ] + n = note(key) + need( + share_year is not None and share_year[1] in n, + f"land share year missing from {n!r}", + ) + need(flat == ("held flat for 2025" in n), f"land carry-forward: {n!r}") + need( + 'df["dwellings"] * df["avg_house_price"]' + in read("targets/sources/mhclg_regional_land.py") + and "dwellings" in note(("ons", "household_land_value", "region", None)), + "regional land note", + ) + # Publishers from the sources' own URLs. + need( + "www.gov.scot" in read("targets/sources/voa_council_tax.py") + and ex.PUBLISHER_BY_PREFIX.get("voa/council_tax/SCOTLAND/") + == "Scottish Government", + "VOA Scotland publisher", + ) + slc = read("targets/sources/slc.py") + need( + "explore-education-statistics" in slc + and ex.PUBLISHER_BY_PREFIX.get("slc/plan_") == "Explore Education Statistics", + "SLC plan publisher", + ) + need("Borrower counts for England only" in slc, "slc.py scope changed") + for prefix in sorted( + set( + re.findall( + r'name=f?"(slc/[a-z_]+?)(?:_spend|_recipients|_borrowers|\{)', slc + ) + ) + ): + need( + ex.area_override(prefix + "_x") == "England" + or ex.area_override(prefix) == "England", + f"{prefix}: not marked England", + ) + # Local families. + uc = read("targets/sources/local_uc.py") + need("(positional order)" in uc, "local UC targets no longer positional") + if "(positional order)" in uc: + need( + "row order" in local.get("uc_households", "") + and "row order" in local.get("uc_hh_", ""), + "UC notes must flag row order", + ) + need( + 'scaled["N"] = gb_bucket_totals.copy()' in uc + and "Great Britain" in local.get("uc_hh_", ""), + "UC child split note", + ) + for area in ("constituencies", "local_authorities"): + loss = read(f"datasets/local_areas/{area}/loss.py") + m = re.search( + r"y\[col\] \*= uk_total_population / targets_total_pop \* ([\d.]+)", loss + ) + need( + m is not None and f"{float(m[1]) * 100:g}%" in local.get("age/", ""), + f"{area}: age rescale", + ) + need( + "adjustment = national_target / local_target_sum" in loss + and "Rescaled" in local.get("hmrc/employment_income/amount", ""), + f"{area}: income rescale", + ) + need( + re.search( + r'count"\] = \(\s*incomes\[f"\{income_variable\}_count"\]\.values \* adjustment', + loss, + ) + is not None + and "same factor" in local.get("hmrc/employment_income/count", ""), + f"{area}: count scaling", + ) + la = read("datasets/local_areas/local_authorities/loss.py") + need( + "VOA counts dwellings" in la + and "dwellings" in local.get("voa/council_tax/", "") + and "households" in local.get("voa/council_tax/", ""), + "VOA dwelling note", ) - assert "Borrower counts for England only" in _read("targets/sources/slc.py") - assert "_MORTGAGE_TOTAL = 1_100 * 12 * 7.5e6" in _read("targets/sources/housing.py") - assert "_PROPERTY_INCOME_SCALE = 1.9" in _read("targets/sources/hmrc_spi.py") - land = _read("targets/sources/_land.py") - assert "_ONS_2020_HOUSEHOLD" in land - assert "2025: HOUSEHOLD_LAND_VALUES[2024]" in land - assert 'df["dwellings"] * df["avg_house_price"]' in _read( - "targets/sources/mhclg_regional_land.py" + extras = read("targets/sources/local_la_extras.py") + need( + 'str.match(r"^E0[6789]")' in extras + and "England only" in local.get("rent/private_rent", ""), + "private rent scope", ) - assert "float(_CGT_TAXPAYERS) for year in range" in _read( - "targets/sources/hmrc_cgt.py" + need( + f'VALIDATION_ONLY_LOCAL_TARGETS = ["{ex.HELD_OUT_LOCAL}"]' + in read("datasets/create_datasets.py"), + "held-out metric", ) + return problems @pytest.mark.skipif( not DATA_SOURCE, reason="set UK_DATA_SOURCE to policyengine-uk-data at the pin" ) -def test_local_notes_restate_the_loss_builders(): - import re +def test_the_extractor_restates_the_data_package(): + assert restatement_mismatches(ex, Path(DATA_SOURCE)) == [] - uc = _read("targets/sources/local_uc.py") - assert "(positional order)" in uc - assert 'scaled["N"] = gb_bucket_totals.copy()' in uc # NI takes GB's child shares - for area in ("constituencies", "local_authorities"): - loss = _read(f"datasets/local_areas/{area}/loss.py") - assert re.search(r'y\["uc_households"\] = get_\w+_uc_targets\(\)\.values', loss) - assert "y[col] *= uk_total_population / targets_total_pop * 0.9" in loss - assert re.search( - r'y\[f"hmrc/\{income_variable\}/count"\] = \(\s*incomes\[f"\{income_variable\}_count"\]\.values \* adjustment', - loss, - ) - assert "mapping_matrix @ y.values" in _read( - "datasets/local_areas/constituencies/loss.py" + +@pytest.mark.skipif( + not DATA_SOURCE, reason="set UK_DATA_SOURCE to policyengine-uk-data at the pin" +) +@pytest.mark.parametrize( + "mutate", + [ + lambda m: m.GROUP_NOTES.pop( + ("obr", "attends_private_school", "national", None) + ), + lambda m: m.GROUP_NOTES.update( + { + ( + "obr", + "attends_private_school", + "national", + None, + ): "550,000 in every year from 2018 to 2031" + } + ), + lambda m: m.GROUP_NOTES.update( + { + ( + "ons", + "mortgage_capital_repayment", + "national", + None, + ): "£1,000 a month for 7.5 million" + } + ), + lambda m: m.PUBLISHER_BY_PREFIX.pop("voa/council_tax/SCOTLAND/"), + lambda m: m.PUBLISHER_BY_PREFIX.update({"slc/plan_": "Student Loans Company"}), + lambda m: m.AREA_BY_TARGET.pop("obr/state_pension"), + lambda m: m.AREA_BY_TARGET.pop("obr/domestic_rates"), + lambda m: m.GROUP_LABELS.update( + {("obr", "esa_income", "national", None): "Income-related ESA"} + ), + lambda m: m.GROUP_NOTES.update( + { + ( + "obr", + "pension_contributions_via_salary_sacrifice", + "national", + None, + ): "7.7 million users" + } + ), + lambda m: m.LOCAL_FAMILIES.__setitem__( + 4, m.LOCAL_FAMILIES[4][:3] + ("Universal Credit households by area",) + ), + lambda m: m.LOCAL_FAMILIES.__setitem__( + 0, m.LOCAL_FAMILIES[0][:3] + ("Rescaled to the UK population",) + ), + ], +) +def test_the_restatement_check_fails_when_a_claim_drifts(mutate): + import copy + import types + + module = types.SimpleNamespace( + **{ + name: copy.deepcopy(getattr(ex, name)) + for name in ( + "GROUP_NOTES", + "GROUP_LABELS", + "LOCAL_FAMILIES", + "AREA_BY_TARGET", + "PUBLISHER_BY_TARGET", + "PUBLISHER_BY_PREFIX", + "AREA_BY_PREFIX", + "HELD_OUT_LOCAL", + "SPI_GROUPS", + ) + } ) - fill = _read( - "datasets/local_areas/local_authorities/targets/create_total_incomes.py" + module.area_override = lambda metric: ( + module.AREA_BY_TARGET.get(metric) + or next( + (a for p, a in module.AREA_BY_PREFIX.items() if metric.startswith(p)), None + ) ) - assert "df[col] = df[col].fillna(avg)" in fill - held = _read("datasets/create_datasets.py") - assert f'VALIDATION_ONLY_LOCAL_TARGETS = ["{ex.HELD_OUT_LOCAL}"]' in held + assert restatement_mismatches(module, Path(DATA_SOURCE)) == [] + mutate(module) + assert restatement_mismatches(module, Path(DATA_SOURCE)) != [] diff --git a/scripts/uk_obr_elasticity_grid.py b/scripts/uk_obr_elasticity_grid.py index 637cb67..ac407e7 100644 --- a/scripts/uk_obr_elasticity_grid.py +++ b/scripts/uk_obr_elasticity_grid.py @@ -28,7 +28,9 @@ def load_functions(source: Path) -> dict: tree = ast.parse((source / "policyengine_uk/dynamics/progression.py").read_text()) - found = [n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in FUNCTIONS] + found = [ + n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in FUNCTIONS + ] if {n.name for n in found} != set(FUNCTIONS): raise SystemExit(f"progression.py no longer defines {FUNCTIONS}") namespace = { @@ -36,7 +38,10 @@ def load_functions(source: Path) -> dict: "Simulation": object, "benunit_age_18_composition": lambda sim, year: sim.composition, } - exec(compile(ast.Module(body=found, type_ignores=[]), "progression.py", "exec"), namespace) + exec( + compile(ast.Module(body=found, type_ignores=[]), "progression.py", "exec"), + namespace, + ) return {name: namespace[name] for name in FUNCTIONS} diff --git a/scripts/uk_pay_channel_cases.py b/scripts/uk_pay_channel_cases.py new file mode 100644 index 0000000..7daa1cc --- /dev/null +++ b/scripts/uk_pay_channel_cases.py @@ -0,0 +1,197 @@ +"""Run policyengine-uk's pay-channel formulas on made-up people and print what +they return, so the behavioural page's claims about them can be checked. + + uv run --no-project --with numpy python scripts/uk_pay_channel_cases.py \\ + /path/to/policyengine-uk + +It lifts the `formula` of three variables out of their source files and calls +it with stand-in person, parameter and baseline objects, so it needs no +policyengine-uk install: +- employer_ni_fixed_employer_cost_change (pay under an employer NI reform) +- salary_sacrifice_broad_base_haircut (the cut to every worker's pay) +- salary_sacrifice_returned_to_income (contributions above the cap) +Output is JSON: one record per case. src/test/ukBehavioural.test.tsx reads it. +""" + +import ast +import json +import sys +from pathlib import Path +from types import SimpleNamespace as NS + +import numpy as np + +WEEKS_IN_YEAR = 52 +FILES = { + "employer_ni_fixed_employer_cost_change": "variables/contrib/policyengine/employer_ni/employer_ni_fixed_employer_cost_change.py", + "salary_sacrifice_broad_base_haircut": "variables/gov/hmrc/national_insurance/salary_sacrifice_broad_base_haircut.py", + "salary_sacrifice_returned_to_income": "variables/gov/hmrc/pensions/salary_sacrifice_returned_to_income.py", +} + + +def load_formula(source: Path, variable: str): + tree = ast.parse((source / "policyengine_uk" / FILES[variable]).read_text()) + cls = next( + n for n in tree.body if isinstance(n, ast.ClassDef) and n.name == variable + ) + formula = next( + n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == "formula" + ) + namespace = { + "np": np, + "max_": np.maximum, + "where": np.where, + "WEEKS_IN_YEAR": WEEKS_IN_YEAR, + "add": lambda entity, period, names: sum( + entity(name, period) for name in names + ), + } + exec( + compile(ast.Module(body=[formula], type_ignores=[]), FILES[variable], "exec"), + namespace, + ) + return namespace["formula"] + + +def parameters( + *, + rate=0.15, + threshold_weekly=96.0, + exempt=True, + incidence=1.0, + cap=np.inf, + haircut=0.0016, +): + tree = NS( + gov=NS( + hmrc=NS( + national_insurance=NS( + class_1=NS( + rates=NS(employer=rate), + thresholds=NS(secondary_threshold=threshold_weekly), + ), + salary_sacrifice_pension_cap=cap, + ) + ), + contrib=NS( + policyengine=NS( + employer_ni=NS( + employee_incidence=incidence, + exempt_employer_pension_contributions=exempt, + ) + ), + behavioral_responses=NS( + salary_sacrifice_broad_base_haircut_rate=haircut + ), + ), + ) + ) + return lambda period: tree + + +class Person: + def __init__(self, values: dict, baseline_parameters=None): + self.values = {k: np.asarray(v, dtype=float) for k, v in values.items()} + baseline = None + if baseline_parameters is not None: + baseline = NS(tax_benefit_system=NS(parameters=baseline_parameters)) + self.simulation = NS(baseline=baseline) + + def __call__(self, name, period): + return self.values.get(name, np.zeros(1)) + + +def employer_cost(pay, rate, threshold_weekly): + return pay + rate * max(pay - threshold_weekly * WEEKS_IN_YEAR, 0) + + +def main(source: str) -> None: + src = Path(source) + employer = load_formula(src, "employer_ni_fixed_employer_cost_change") + haircut = load_formula(src, "salary_sacrifice_broad_base_haircut") + returned = load_formula(src, "salary_sacrifice_returned_to_income") + cases = [] + + def employer_case(label, pay, baseline, reform): + person = Person({"employment_income_before_lsr": [pay]}, parameters(**baseline)) + change = float( + np.asarray(employer(person, 2026, parameters(**reform))).ravel()[0] + ) + new_pay = pay + change + cases.append( + { + "kind": "employer_ni", + "label": label, + "pay": pay, + "change": change, + "baselineCost": employer_cost( + pay, + baseline.get("rate", 0.15), + baseline.get("threshold_weekly", 96.0), + ), + "reformCost": employer_cost( + new_pay, + reform.get("rate", 0.15), + reform.get("threshold_weekly", 96.0), + ), + } + ) + + employer_case( + "rate rise, pay above both thresholds", 40_000, {"rate": 0.138}, {"rate": 0.15} + ) + employer_case( + "rate rise, incidence 0", + 40_000, + {"rate": 0.138, "incidence": 0.0}, + {"rate": 0.15, "incidence": 0.0}, + ) + employer_case( + "rate rise, pay below the baseline threshold", + 4_000, + {"rate": 0.138}, + {"rate": 0.15}, + ) + employer_case( + "threshold lifted past pay", + 30_000, + {"rate": 0.10, "threshold_weekly": 10_000 / WEEKS_IN_YEAR}, + {"rate": 0.10, "threshold_weekly": 50_000 / WEEKS_IN_YEAR}, + ) + employer_case("no change", 40_000, {}, {}) + + for label, cap in (("cap off", np.inf), ("cap £2,000", 2_000.0)): + person = Person({"employment_income_before_lsr": [40_000.0]}) + cases.append( + { + "kind": "haircut", + "label": label, + "pay": 40_000.0, + "change": float( + np.asarray(haircut(person, 2030, parameters(cap=cap))).ravel()[0] + ), + } + ) + for label, cap, sacrificed in ( + ("cap off", np.inf, 5_000.0), + ("cap £2,000, below it", 2_000.0, 1_500.0), + ("cap £2,000, above it", 2_000.0, 5_000.0), + ): + person = Person( + {"pension_contributions_via_salary_sacrifice_from_pay": [sacrificed]} + ) + cases.append( + { + "kind": "returned", + "label": label, + "sacrificed": sacrificed, + "change": float( + np.asarray(returned(person, 2030, parameters(cap=cap))).ravel()[0] + ), + } + ) + json.dump(cases, sys.stdout) + + +if __name__ == "__main__": + main(sys.argv[1]) diff --git a/src/components/rules/UkCoverageTracker.tsx b/src/components/rules/UkCoverageTracker.tsx index 1ba88da..c04a075 100644 --- a/src/components/rules/UkCoverageTracker.tsx +++ b/src/components/rules/UkCoverageTracker.tsx @@ -112,13 +112,9 @@ async function loadTrees(source: ProgramsSource): Promise { const path = `${moduleName.replace(/\./g, '/')}.py`; if (paths.has(path)) variablePaths.set(name, path); } - } else if (vars && vars.modules === undefined) { - // Older snapshots have only paths: accept a unique, exact file stem. - for (const path of vars.paths) { - const stem = path.split('/').pop()!.replace(/\.py$/, ''); - variablePaths.set(stem, variablePaths.has(stem) ? null : path); - } } + // A tree with only paths can't show that a variable exists (afip.py declares + // armed_forces_independence_payment), so it verifies no variable links. return { parameterPaths: new Set(params?.paths ?? []), variablePaths }; } diff --git a/src/data/fetchMetadata.ts b/src/data/fetchMetadata.ts index 4daccc7..f785f8b 100644 --- a/src/data/fetchMetadata.ts +++ b/src/data/fetchMetadata.ts @@ -27,7 +27,7 @@ export async function fetchMetadata(country: string = 'us'): Promise { const variables: Record = raw.variables ?? {}; const result: Metadata = { - variables: await withModuleNames(country, variables), + variables: await withModuleNames(country, variables, raw.version), parameters: raw.parameters ?? {}, }; @@ -35,52 +35,62 @@ export async function fetchMetadata(country: string = 'us'): Promise { return result; } -/** - * Fill missing modules from exact Variable class declarations. Older snapshots - * can fall back to unique file stems; unmatched names stay unclassified. - */ +// The repository each country's module map must come from. +const MODULE_MAP_REPO: Record = { uk: 'PolicyEngine/policyengine-uk' }; + +export interface ModuleMapSnapshot { + source: { repo: string; version: string; commit: string }; + modules: Record; +} + +/** Fill missing modules from a class-to-module map; names it lacks stay unclassified. */ export function fillModuleNames( variables: Record, - paths: string[], - modules?: Record, + modules: Record, ): Record { - const pathSet = new Set(paths); - const byStem = new Map(); - for (const path of paths) { - const stem = path.split('/').pop()!.replace(/\.py$/, ''); - byStem.set(stem, byStem.has(stem) ? null : path); - } return Object.fromEntries( Object.entries(variables).map(([name, v]) => { if (v.moduleName) return [name, v]; - if (modules) { - const moduleName = Object.hasOwn(modules, name) ? modules[name] : undefined; - if (typeof moduleName !== 'string' || !pathSet.has(`${moduleName.replace(/\./g, '/')}.py`)) return [name, v]; - return [name, { ...v, moduleName }]; - } - const path = byStem.get(name); - if (!path) return [name, v]; - return [name, { ...v, moduleName: path.replace(/\.py$/, '').replace(/\//g, '.') }]; + const moduleName = Object.hasOwn(modules, name) ? modules[name] : undefined; + return typeof moduleName === 'string' && moduleName ? [name, { ...v, moduleName }] : [name, v]; }), ); } -/** The UK API serves no module names; fill them from the build-time variable tree. */ +/** + * Whether a module map describes the variables an API response serves: it must + * come from the country's repository, at the package version the API reports. + */ +export function moduleMapMatches(snapshot: unknown, country: string, apiVersion: unknown): snapshot is ModuleMapSnapshot { + const s = snapshot as ModuleMapSnapshot | null; + return ( + typeof apiVersion === 'string' && + apiVersion !== '' && + s?.source?.repo === MODULE_MAP_REPO[country] && + s.source.version === apiVersion && + typeof s.source.commit === 'string' && + /^[0-9a-f]{40}$/.test(s.source.commit) && + !!s.modules && + typeof s.modules === 'object' && + !Array.isArray(s.modules) + ); +} + +/** The UK API serves no module names; fill them from the build-time map for the same release. */ async function withModuleNames( country: string, variables: Record, + apiVersion: unknown, ): Promise> { const all = Object.values(variables); const missing = all.filter((v) => !v.moduleName).length; - if (all.length === 0 || missing < all.length / 2) return variables; + if (all.length === 0 || missing < all.length / 2 || !MODULE_MAP_REPO[country]) return variables; try { const prefix = typeof window === 'undefined' ? '' : publicBasePrefixFromPath(window.location.pathname); - const res = await fetch(`${prefix}/variable-tree-${country}.json`); + const res = await fetch(`${prefix}/variable-modules-${country}.json`); if (!res.ok) return variables; - const tree = await res.json(); - const modules = tree?.modules && typeof tree.modules === 'object' && !Array.isArray(tree.modules) - ? tree.modules : undefined; - return Array.isArray(tree?.paths) ? fillModuleNames(variables, tree.paths, modules) : variables; + const snapshot = await res.json(); + return moduleMapMatches(snapshot, country, apiVersion) ? fillModuleNames(variables, snapshot.modules) : variables; } catch { return variables; } diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index 58e3ff4..23446f7 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -854,7 +854,7 @@ "label": "Dividend income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": null, + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", "units": [ "count", "gbp" @@ -873,7 +873,7 @@ "label": "Employment income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": null, + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", "units": [ "count", "gbp" @@ -892,7 +892,7 @@ "label": "Private pension income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": null, + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", "units": [ "count", "gbp" @@ -911,7 +911,7 @@ "label": "Property income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": "Amounts scaled up 1.9 times, the build's ratio of HMRC's property rental income statistics to the SPI", + "note": "Amounts scaled up 1.9 times, the build's ratio of HMRC's property rental income statistics to the SPI. HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", "units": [ "count", "gbp" @@ -930,7 +930,7 @@ "label": "Self-employment income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": null, + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", "units": [ "count", "gbp" @@ -949,7 +949,7 @@ "label": "State Pension: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": null, + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", "units": [ "count", "gbp" diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index b3ef177..7b415b0 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -224,7 +224,8 @@ export const ukPipelineStages: PipelineStage[] = [ 'lookup gives every Output Area the same population in this release (policyengine-uk-data#587). The Output ' + 'Area fixes the household’s ' + 'local authority and constituency. The build then uprates the file to 2025, the year the calibration ' + - 'targets describe.', + 'targets describe, with the year-on-year growth its model applies when it loads a file; household weights ' + + 'and fuel spending keep the build’s own indices.', icon: 'map-pin', inputSize: `${f.households} households`, outputSize: `${f.households} households`, diff --git a/src/test/fetchMetadata.test.ts b/src/test/fetchMetadata.test.ts index d7669fe..8bdfffb 100644 --- a/src/test/fetchMetadata.test.ts +++ b/src/test/fetchMetadata.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest'; -import { fillModuleNames } from '../data/fetchMetadata'; +import { fillModuleNames, moduleMapMatches } from '../data/fetchMetadata'; import type { Variable } from '../types/Variable'; const variable = (name: string, moduleName: string | null = null): Variable => ({ name, moduleName } as Variable); @@ -8,7 +8,10 @@ const modules = { has_student_loan: 'gov.hmrc.student_loans.student_loan_repayment', armed_forces_independence_payment: 'gov.dwp.afip', }; -const paths = Object.values(modules).map(moduleName => `${moduleName.replace(/\./g, '/')}.py`); +const snapshot = { + source: { repo: 'PolicyEngine/policyengine-uk', version: '2.130.1', commit: 'a'.repeat(40) }, + modules, +}; afterEach(() => { vi.unstubAllGlobals(); @@ -18,59 +21,70 @@ afterEach(() => { describe('variable module enrichment', () => { it('uses exact classes rather than file stems for UK departments', () => { const variables = Object.fromEntries(Object.keys(modules).map(name => [name, variable(name)])); - const filled = fillModuleNames(variables, paths, modules); + const filled = fillModuleNames(variables, modules); for (const [name, moduleName] of Object.entries(modules)) expect(filled[name].moduleName).toBe(moduleName); expect(variables.CB_HITC.moduleName).toBeNull(); }); - it('trusts the class map over a stem match and leaves unknown names unclassified', () => { - const filled = fillModuleNames({ - afip: variable('afip'), - cb_hitc: variable('cb_hitc'), - unknown: variable('unknown'), - }, paths, modules); + it('leaves names the map lacks unclassified, whatever their files are called', () => { + const filled = fillModuleNames({ afip: variable('afip'), cb_hitc: variable('cb_hitc'), unknown: variable('unknown') }, modules); for (const v of Object.values(filled)) expect(v.moduleName).toBeNull(); }); - it('preserves existing API modules and refuses modules absent from the source tree', () => { + it('preserves existing API modules and ignores inherited object keys', () => { const original = variable('CB_HITC', 'gov.irs.api_module'); - expect(fillModuleNames({ CB_HITC: original }, paths, modules).CB_HITC).toBe(original); - expect(fillModuleNames({ CB_HITC: variable('CB_HITC') }, [], modules).CB_HITC.moduleName).toBeNull(); - expect(fillModuleNames({ constructor: variable('constructor') }, paths, {})) - .toMatchObject({ constructor: { moduleName: null } }); + expect(fillModuleNames({ CB_HITC: original }, modules).CB_HITC).toBe(original); + expect(fillModuleNames({ constructor: variable('constructor') }, {})).toMatchObject({ constructor: { moduleName: null } }); + }); + + it('accepts only a map from the country repository at the version the API serves', () => { + expect(moduleMapMatches(snapshot, 'uk', '2.130.1')).toBe(true); + const rejected: [string, unknown, unknown][] = [ + ['a stale version', snapshot, '2.131.0'], + ['the wrong repository', { ...snapshot, source: { ...snapshot.source, repo: 'PolicyEngine/policyengine-us' } }, '2.130.1'], + ['no provenance', { modules }, '2.130.1'], + ['no commit', { ...snapshot, source: { repo: snapshot.source.repo, version: '2.130.1' } }, '2.130.1'], + ['an API with no version', snapshot, undefined], + ['a map that is a list', { ...snapshot, modules: [] }, '2.130.1'], + ['a country with no map repository', snapshot, '2.130.1'], + ]; + for (const [label, s, apiVersion] of rejected) { + expect([label, moduleMapMatches(s, label === 'a country with no map repository' ? 'us' : 'uk', apiVersion)]).toEqual([label, false]); + } }); - it('loads the generated class map through fetchMetadata', async () => { + async function loadUk(api: { version?: string }, served: unknown) { const variables = Object.fromEntries(Object.keys(modules).map(name => [name, variable(name)])); - const fetchImpl = vi.fn(async input => { + vi.stubGlobal('fetch', vi.fn(async input => { if (String(input) === 'https://api.policyengine.org/uk/metadata') { - return new Response(JSON.stringify({ result: { variables, parameters: {} } })); + return new Response(JSON.stringify({ result: { variables, parameters: {}, ...api } })); } - if (String(input) === '/variable-tree-uk.json') { - return new Response(JSON.stringify({ source: { commit: 'a'.repeat(40) }, paths, modules })); + if (String(input) === '/variable-modules-uk.json') { + if (served instanceof Error) throw served; + return new Response(JSON.stringify(served)); } throw new Error(`Unexpected request: ${input}`); - }); - vi.stubGlobal('fetch', fetchImpl); + })); const { fetchMetadata } = await import('../data/fetchMetadata'); - const metadata = await fetchMetadata('uk'); - expect(metadata.variables.CB_HITC.moduleName).toBe(modules.CB_HITC); - expect(metadata.variables.has_student_loan.moduleName).toBe(modules.has_student_loan); - expect(metadata.variables.armed_forces_independence_payment.moduleName).toBe(modules.armed_forces_independence_payment); + return fetchMetadata('uk'); + } + + it('fills UK modules through fetchMetadata when the map matches the API version', async () => { + const metadata = await loadUk({ version: '2.130.1' }, snapshot); + for (const [name, moduleName] of Object.entries(modules)) expect(metadata.variables[name].moduleName).toBe(moduleName); }); - it('keeps the metadata usable if the generated snapshot is unavailable', async () => { - vi.stubGlobal('fetch', vi.fn(async input => { - if (String(input) === 'https://api.policyengine.org/uk/metadata') { - return new Response(JSON.stringify({ variables: { CB_HITC: variable('CB_HITC') }, parameters: {} })); - } - throw new Error('Snapshot offline'); - })); - const { fetchMetadata } = await import('../data/fetchMetadata'); - await expect(fetchMetadata('uk')).resolves.toEqual({ variables: { CB_HITC: variable('CB_HITC') }, parameters: {} }); + it.each([ + ['a stale map', { version: '2.131.0' }, snapshot], + ['a map from another repository', { version: '2.130.1' }, { ...snapshot, source: { ...snapshot.source, repo: 'someone/fork' } }], + ['a map with no provenance', { version: '2.130.1' }, { modules }], + ['an unavailable map', { version: '2.130.1' }, new Error('Snapshot offline')], + ])('leaves every UK variable unclassified with %s', async (_, api, served) => { + const metadata = await loadUk(api, served); + for (const v of Object.values(metadata.variables)) expect(v.moduleName).toBeNull(); }); - it('keeps US metadata unchanged and does not request a module snapshot', async () => { + it('keeps US metadata unchanged and does not request a module map', async () => { const variables = { income_tax: variable('income_tax', 'gov.irs.income_tax') }; const fetchImpl = vi.fn().mockResolvedValue(new Response(JSON.stringify({ variables, parameters: {} }))); vi.stubGlobal('fetch', fetchImpl); diff --git a/src/test/fetchMetadataScript.test.ts b/src/test/fetchMetadataScript.test.ts index b0a8c33..e4495e0 100644 --- a/src/test/fetchMetadataScript.test.ts +++ b/src/test/fetchMetadataScript.test.ts @@ -8,6 +8,7 @@ import { fetchParameterYamlPaths, fetchRegistrySnapshot, fetchVariableModulePaths, + fetchVariableModuleSnapshot, parseProgramsYaml, readPackageVersion, resolveRepository, @@ -265,8 +266,37 @@ describe('registry snapshot fetch script', () => { .resolves.toBeUndefined(); expect(existsSync(snapshotPath)).toBe(false); expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining('registry snapshot skipped')); - expect(fetchImpl).not.toHaveBeenCalledWith( - 'https://api.policyengine.org/uk/metadata', expect.anything(), - ); + // The module map is independent of the registry; with no reachable API or + // tag it is skipped, and no earlier map survives. + expect(existsSync(join(outputDir, 'variable-modules-uk.json'))).toBe(false); + expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining('variable module map skipped')); + }); + + it('builds the UK module map from the release the API serves, recording its provenance', async () => { + const tagCommit = 'b'.repeat(40); + const archive = gzipSync(variableArchive([ + { path: 'policyengine-uk-x/policyengine_uk/variables/gov/dwp/afip.py', contents: 'class armed_forces_independence_payment(Variable):\n pass\n' }, + ])); + const fetchImpl = mockFetch({ + 'https://api.policyengine.org/uk/metadata': { result: { version: '2.130.1' } }, + 'https://api.github.com/repos/PolicyEngine/policyengine-uk/git/ref/tags/2.130.1': { object: { type: 'tag', sha: 'tagobject' } }, + 'https://api.github.com/repos/PolicyEngine/policyengine-uk/git/tags/tagobject': { object: { type: 'commit', sha: tagCommit } }, + [`https://codeload.github.com/PolicyEngine/policyengine-uk/tar.gz/${tagCommit}`]: new Response(archive), + }); + const snapshot = await fetchVariableModuleSnapshot('uk', 'PolicyEngine/policyengine-uk', fetchImpl); + expect(snapshot).toEqual({ + source: { repo: 'PolicyEngine/policyengine-uk', version: '2.130.1', commit: tagCommit }, + modules: { armed_forces_independence_payment: 'gov.dwp.afip' }, + }); + }); + + it('refuses a module map when the API reports no version or the tag names no commit', async () => { + await expect(fetchVariableModuleSnapshot('uk', 'PolicyEngine/policyengine-uk', mockFetch({ + 'https://api.policyengine.org/uk/metadata': { result: {} }, + }))).rejects.toThrow('no package version'); + await expect(fetchVariableModuleSnapshot('uk', 'PolicyEngine/policyengine-uk', mockFetch({ + 'https://api.policyengine.org/uk/metadata': { result: { version: '2.130.1' } }, + 'https://api.github.com/repos/PolicyEngine/policyengine-uk/git/ref/tags/2.130.1': { object: { type: 'tree', sha: 'x' } }, + }))).rejects.toThrow('does not resolve to a commit'); }); }); diff --git a/src/test/ukBehavioural.test.tsx b/src/test/ukBehavioural.test.tsx index 1916ff6..1440acf 100644 --- a/src/test/ukBehavioural.test.tsx +++ b/src/test/ukBehavioural.test.tsx @@ -8,6 +8,7 @@ import { labourSupplyParameters, obrElasticities, payParameters, + type ElasticityCase, } from '../data/ukBehaviouralResponses'; vi.mock('next/navigation', () => ({ @@ -32,6 +33,11 @@ describe('UK behavioural responses page', () => { expect(text).toContain('off by default'); expect(text).toContain('writes the change in earnings into the reform simulation'); for (const row of [...payParameters, ...labourSupplyParameters, ...capitalGainsParameters]) expect(text).toContain(row.path); + // Each elasticity row renders its group and age band in one table row. + const rendered = [...container.querySelectorAll('tr')].map((tr) => [...tr.querySelectorAll('td')].map((td) => td.textContent)); + for (const row of obrElasticities) { + expect(rendered.some((cells) => cells[0] === row.group && cells[1] === row.youngestChild)).toBe(true); + } const link = container.querySelector('a[href*="NICS-Cut-Impact-on-Labour-Supply"]'); expect(link).not.toBeNull(); }); @@ -49,6 +55,51 @@ describe('UK behavioural responses page', () => { }); }); + +type Case = { gender: string; married: boolean; youngest: number | null }; +const AGES = Array.from({ length: 18 }, (_, i) => i); + +/** Expand row.covers into one case per youngest-child age. */ +function expandCovers(covers: ElasticityCase[]): Case[] { + return covers.flatMap((c) => + c.youngest === 'none' + ? [{ gender: c.gender, married: c.married, youngest: null }] + : AGES.filter((a) => a >= (c.youngest as [number, number])[0] && a <= (c.youngest as [number, number])[1]).map((a) => ({ + gender: c.gender, + married: c.married, + youngest: a, + })), + ); +} + +/** The cases a row's displayed labels describe, from a fixed vocabulary. */ +function casesFromLabels(group: string, youngestChild: string): Case[] { + const ages = (label: string): (number | null)[] => { + if (label === 'No children') return [null]; + const m = label.match(/^(\d+)–(\d+)$/); + if (!m) throw new Error(`unknown youngest-child label: ${label}`); + return AGES.filter((a) => a >= Number(m[1]) && a <= Number(m[2])); + }; + const make = (gender: string, married: boolean, youngest: (number | null)[]) => youngest.map((y) => ({ gender, married, youngest: y })); + switch (group) { + case 'Married women': + return make('FEMALE', true, ages(youngestChild)); + case 'Unmarried women with children': + return make('FEMALE', false, ages(youngestChild).filter((a) => a !== null)); + case 'Unmarried women without children': + if (youngestChild !== '–') throw new Error('unexpected age band'); + return make('FEMALE', false, [null]); + case 'Men, except unmarried men with children': + if (youngestChild !== '–') throw new Error('unexpected age band'); + return [...make('MALE', true, [null, ...AGES]), ...make('MALE', false, [null])]; + case 'Unmarried men with children': + if (youngestChild !== '–') throw new Error('unexpected age band'); + return make('MALE', false, AGES); + default: + throw new Error(`unknown group label: ${group}`); + } +} + /** * Differential check against the policyengine-uk source the page describes: * UK_MODEL_SOURCE=/path/to/policyengine-uk (checked out at UK_MODEL_VERSION). @@ -111,37 +162,48 @@ describe.skipIf(!source)('UK behavioural values match policyengine-uk', () => { encoding: 'utf8', }), ); - const covered = new Set(); + const key = (g: Pick) => `${g.gender}|${g.married}|${g.youngest}`; + const byKey = new Map(grid.map((g) => [key(g), g])); + const seen = new Map(); for (const row of obrElasticities) { - for (const c of row.covers) { - const cells = grid.filter( - (g) => - g.gender === c.gender && - g.married === c.married && - (c.youngest === 'none' ? g.youngest === null : g.youngest !== null && g.youngest >= c.youngest[0] && g.youngest <= c.youngest[1]), - ); - expect(cells.length).toBeGreaterThan(0); - for (const g of cells) { - expect([row.group, row.youngestChild, g.substitution, g.income]).toEqual([row.group, row.youngestChild, row.substitution, row.income]); - covered.add(g); - } + // Cells from the row's displayed labels, read independently of row.covers. + const cells = casesFromLabels(row.group, row.youngestChild); + expect(new Set(cells.map(key))).toEqual(new Set(expandCovers(row.covers).map(key))); + for (const cell of cells) { + const g = byKey.get(key(cell)); + expect(g, key(cell)).toBeDefined(); + expect([row.group, row.youngestChild, g!.substitution, g!.income]).toEqual([row.group, row.youngestChild, row.substitution, row.income]); + seen.set(key(cell), (seen.get(key(cell)) ?? 0) + 1); } } // Every family type the module distinguishes appears on the page exactly once. - expect(covered.size).toBe(grid.length); - expect(obrElasticities.flatMap((r) => r.covers).length).toBe(new Set(obrElasticities.flatMap((r) => r.covers.map((c) => JSON.stringify(c)))).size); + for (const g of grid) expect([key(g), seen.get(key(g))]).toEqual([key(g), 1]); }); it('describes the pay channels as policyengine-uk computes them', () => { - const employer = read('variables/contrib/policyengine/employer_ni/employer_ni_fixed_employer_cost_change.py'); - expect(employer).toMatch(/if employee_incidence == 0:\s*\n\s*return 0/); - expect(employer).toMatch(/c_b = ni_class_1_income \+ baseline_employer_ni/); // the employer's baseline cost - expect(employer).toMatch(/new_ni_class_1_income = \(c_b \+ r_r \* \(pen_con_subtracted_r \+ t_r\)\) \/ \(1 \+ r_r\)/); // above-threshold algebra - expect(employer).toMatch(/below_threshold = previous_employment_income < t_b/); // the baseline threshold - const haircut = read('variables/gov/hmrc/national_insurance/salary_sacrifice_broad_base_haircut.py'); - expect(haircut).toMatch(/return -employment_income \* haircut_rate/); - expect(haircut).toMatch(/if np\.isinf\(cap\):\s*\n\s*return 0/); - const returned = read('variables/gov/hmrc/pensions/salary_sacrifice_returned_to_income.py'); - expect(returned).toMatch(/excess = max_\(intended_ss - cap, 0\)/); + // scripts/uk_pay_channel_cases.py runs the three variables' own formulas. + type Case = { kind: string; label: string; pay?: number; sacrificed?: number; change: number; baselineCost?: number; reformCost?: number }; + const cases: Case[] = JSON.parse( + execFileSync('uv', ['run', '--no-project', '--with', 'numpy', 'python', '-I', 'scripts/uk_pay_channel_cases.py', source!], { encoding: 'utf8' }), + ); + const get = (kind: string, label: string) => cases.find((c) => c.kind === kind && c.label === label)!; + // "a formula meant to keep what each employer pays … the same … passes the whole change through to pay" + const passed = get('employer_ni', 'rate rise, pay above both thresholds'); + expect(passed.change).toBeLessThan(0); + expect(passed.reformCost!).toBeCloseTo(passed.baselineCost!, 6); + expect(get('employer_ni', 'rate rise, incidence 0').change).toBe(0); + expect(get('employer_ni', 'no change').change).toBe(0); + // "Pay below the baseline employer threshold stays as it was." + expect(get('employer_ni', 'rate rise, pay below the baseline threshold').change).toBe(0); + // "a reform that lifts the threshold past someone's pay can raise what their employer pays" + const lifted = get('employer_ni', 'threshold lifted past pay'); + expect(lifted.reformCost!).toBeGreaterThan(lifted.baselineCost!); + // "A separate haircut takes 0.16% off every worker's employment income" while the cap applies. + expect(get('haircut', 'cap off').change).toBe(0); + expect(get('haircut', 'cap £2,000').change).toBeCloseTo(-0.0016 * get('haircut', 'cap £2,000').pay!, 6); + // "contributions above the cap return to pay" + expect(get('returned', 'cap off').change).toBe(0); + expect(get('returned', 'cap £2,000, below it').change).toBe(0); + expect(get('returned', 'cap £2,000, above it').change).toBe(get('returned', 'cap £2,000, above it').sacrificed! - 2000); }); }); diff --git a/src/test/ukCoverageLinks.test.tsx b/src/test/ukCoverageLinks.test.tsx index 1aa84ab..c6f965f 100644 --- a/src/test/ukCoverageLinks.test.tsx +++ b/src/test/ukCoverageLinks.test.tsx @@ -92,15 +92,15 @@ describe('UK coverage links use the registry snapshot', () => { expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); }); - it('supports the unique exact file stems in older versioned snapshots', async () => { - await showProgramme({ variables: { source, paths: variableTree.paths } }); - expect(screen.getByRole('link', { name: 'Computation tree' })).toBeInTheDocument(); - }); - - it('omits links for ambiguous file stems in older versioned snapshots', async () => { - await showProgramme({ variables: { source, paths: ['gov/dwp/jsa.py', 'input/jsa.py'] } }); + it.each([ + ['a unique file stem', { source, paths: variableTree.paths }, 'jsa'], + // afip.py declares armed_forces_independence_payment, not afip. + ['a file named after the variable that declares another class', { source, paths: ['gov/dwp/afip.py'] }, 'afip'], + ])('emits no variable links from a paths-only tree: %s', async (_, variables, variable) => { + await showProgramme({ variables, variable }); expect(screen.queryByRole('link', { name: 'Source code' })).not.toBeInTheDocument(); expect(screen.queryByRole('link', { name: 'Computation tree' })).not.toBeInTheDocument(); + expect(screen.getByRole('link', { name: 'Parameters' })).toBeInTheDocument(); }); it.each([ diff --git a/src/test/ukTaxonomy.test.ts b/src/test/ukTaxonomy.test.ts index 4b4080f..7283567 100644 --- a/src/test/ukTaxonomy.test.ts +++ b/src/test/ukTaxonomy.test.ts @@ -98,36 +98,29 @@ describe('fillModuleNames', () => { const v = (name: string, moduleName: string | null = ''): Variable => ({ name, moduleName } as unknown as Variable); - it('maps a variable to the one file named after it', () => { + it('maps a variable to its class’s module and keeps modules the API already gives', () => { const out = fillModuleNames( - { income_tax: v('income_tax'), pip: v('pip'), kept: v('kept', 'gov.dwp.kept') }, - ['gov/hmrc/income_tax/income_tax.py', 'gov/dwp/pip/pip.py', 'gov/dwp/other/kept.py'], + { income_tax: v('income_tax'), CB_HITC: v('CB_HITC'), kept: v('kept', 'gov.dwp.kept') }, + { income_tax: 'gov.hmrc.income_tax.income_tax', CB_HITC: 'gov.hmrc.income_tax.charges.child_benefit_hitc', kept: 'gov.other' }, ); expect(out.income_tax.moduleName).toBe('gov.hmrc.income_tax.income_tax'); - expect(out.pip.moduleName).toBe('gov.dwp.pip.pip'); + expect(out.CB_HITC.moduleName).toBe('gov.hmrc.income_tax.charges.child_benefit_hitc'); expect(out.kept.moduleName).toBe('gov.dwp.kept'); }); - it('leaves ambiguous and unmatched names without a module', () => { - const out = fillModuleNames( - { rent: v('rent'), missing: v('missing') }, - ['input/rent.py', 'household/consumption/rent.py'], - ); - expect(out.rent.moduleName).toBe(''); - expect(out.missing.moduleName).toBe(''); - }); - - it('never invents a module that is not a file in the tree', () => { - const name = fc.stringMatching(/^[a-z][a-z_]{0,10}$/); - fc.assert(fc.property(fc.uniqueArray(name, { maxLength: 8 }), fc.array(name, { maxLength: 8 }), (vars, files) => { - const paths = files.map((f, i) => `gov/d${i % 3}/${f}.py`); - const out = fillModuleNames(Object.fromEntries(vars.map((n) => [n, v(n)])), paths); - for (const [n, variable] of Object.entries(out)) { - if (!variable.moduleName) continue; - expect(paths).toContain(`${variable.moduleName.replace(/\./g, '/')}.py`); - expect(variable.moduleName.endsWith(`.${n}`)).toBe(true); - } - })); + it('only ever assigns the module the map gives for that exact name', () => { + const name = fc.stringMatching(/^[a-zA-Z][a-zA-Z_]{0,10}$/); + fc.assert(fc.property( + fc.uniqueArray(name, { maxLength: 8 }), + fc.dictionary(name, fc.stringMatching(/^gov(\.[a-z_]{1,6}){1,3}$/), { maxKeys: 8 }), + (vars, modules) => { + const out = fillModuleNames(Object.fromEntries(vars.map((n) => [n, v(n)])), modules); + for (const [n, variable] of Object.entries(out)) { + if (Object.hasOwn(modules, n)) expect(variable.moduleName).toBe(modules[n]); + else expect(variable.moduleName).toBe(''); + } + }, + )); }); }); From e05163874f07e65e363367f61394c98af501e1a3 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 20 Oct 2026 21:07:11 -0400 Subject: [PATCH 29/30] Don't repeat an OBR line's area when its label already names it "Northern Ireland domestic rates receipts (Northern Ireland)" now reads "Northern Ireland domestic rates receipts". Co-Authored-By: Claude Opus 5.5 --- src/views/data/UkValidationPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/data/UkValidationPage.tsx b/src/views/data/UkValidationPage.tsx index 41f85fd..f35118f 100644 --- a/src/views/data/UkValidationPage.tsx +++ b/src/views/data/UkValidationPage.tsx @@ -47,7 +47,7 @@ export const obrRows = rows .map((r) => { const label = OBR_ROW_LABELS[r.id] ?? r.group; const area = areaOf.get(r.group); - return { ...r, label: area && area !== 'UK' ? `${label} (${area})` : label }; + return { ...r, label: area && area !== 'UK' && !label.includes(area) ? `${label} (${area})` : label }; }) .sort((a, b) => b.target - a.target); From 0b3d95b2e2cd4048d6b01e452b6193b95b06cbda Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 20 Oct 2026 21:09:33 -0400 Subject: [PATCH 30/30] Cite the SPI projection fix, and make a new data pin force a reread - The note on the six SPI income families now says the 2023-24 figures were fitted for 2025 in this release, and that policyengine-uk-data#608 fixed it after this release. #608 is batch 3, merged 2026-10-19; its commit a608ddba merges the ODS outturn and the projection into one target per band. 1.58.0, 1.58.1 and 1.58.2 have the bug. - UK_DATA_VERSION_DESCRIBED names the release the pipeline copy was checked against (1.58.1). A test fails when the pinned data version differs. UK_MODEL_VERSION does the same for the behavioural page. 1.59.1 changes the SPI and CGT base years, among other things, so a move to it must reread the copy, not just re-extract the counts. Co-Authored-By: Claude Opus 5.5 --- README.md | 3 ++- scripts/extract_uk_release.py | 6 +++++- src/data/ukDataRelease.json | 12 ++++++------ src/data/ukPipelineStages.ts | 7 +++++++ src/test/ukDataPages.test.tsx | 8 +++++++- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f9f2afe..18ad185 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,8 @@ moves, regenerate them: the behavioural page. Then reread the pipeline stage copy in `src/data/ukPipelineStages.ts` against the new release's `datasets/create_datasets.py`: the counts update themselves, the mechanisms - do not. + do not. `UK_DATA_VERSION_DESCRIBED` (pipeline copy) and `UK_MODEL_VERSION` + (behavioural page) must name the new pin before the tests pass. The household files hold UK Data Service microdata. Only the aggregates the extractor writes may leave that folder. diff --git a/scripts/extract_uk_release.py b/scripts/extract_uk_release.py index 6b897c5..d135526 100644 --- a/scripts/extract_uk_release.py +++ b/scripts/extract_uk_release.py @@ -135,7 +135,11 @@ def area_override(metric: str) -> str | None: # hmrc_spi.py's 2025 projections reuse the base-year targets' names, and # registry.get_all_targets keeps the first target of each name, so the # calibration fits the 2023-24 figures. -SPI_NOTE = "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped" +SPI_NOTE = ( + "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 " + "projections share their names and are dropped (fixed after this release, " + "policyengine-uk-data#608)" +) SPI_GROUPS = [ "employment_income", "self_employment_income", diff --git a/src/data/ukDataRelease.json b/src/data/ukDataRelease.json index 23446f7..e838756 100644 --- a/src/data/ukDataRelease.json +++ b/src/data/ukDataRelease.json @@ -854,7 +854,7 @@ "label": "Dividend income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped (fixed after this release, policyengine-uk-data#608)", "units": [ "count", "gbp" @@ -873,7 +873,7 @@ "label": "Employment income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped (fixed after this release, policyengine-uk-data#608)", "units": [ "count", "gbp" @@ -892,7 +892,7 @@ "label": "Private pension income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped (fixed after this release, policyengine-uk-data#608)", "units": [ "count", "gbp" @@ -911,7 +911,7 @@ "label": "Property income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": "Amounts scaled up 1.9 times, the build's ratio of HMRC's property rental income statistics to the SPI. HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", + "note": "Amounts scaled up 1.9 times, the build's ratio of HMRC's property rental income statistics to the SPI. HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped (fixed after this release, policyengine-uk-data#608)", "units": [ "count", "gbp" @@ -930,7 +930,7 @@ "label": "Self-employment income: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped (fixed after this release, policyengine-uk-data#608)", "units": [ "count", "gbp" @@ -949,7 +949,7 @@ "label": "State Pension: taxpayers and amounts, by total income band", "publisher": "HMRC Survey of Personal Incomes", "geography": "UK", - "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped", + "note": "HMRC's 2023-24 figures, fitted unchanged for 2025: the build's 2025 projections share their names and are dropped (fixed after this release, policyengine-uk-data#608)", "units": [ "count", "gbp" diff --git a/src/data/ukPipelineStages.ts b/src/data/ukPipelineStages.ts index 7b415b0..b8da1ce 100644 --- a/src/data/ukPipelineStages.ts +++ b/src/data/ukPipelineStages.ts @@ -9,6 +9,13 @@ import { ukRelease as uk, ukFacts as f, fmtInt, fmtPct, fmtMillions } from './uk * release's own files and calibration logs. */ +/** + * The policyengine-uk-data release whose code the stage copy below was checked + * against. Counts update from the release file; mechanisms don't, so a test + * fails until someone rereads the copy against a newly pinned release. + */ +export const UK_DATA_VERSION_DESCRIBED = '1.58.1'; + const c = uk.enhanced.composition; const g = uk.enhanced.geography; const cal = uk.calibration; diff --git a/src/test/ukDataPages.test.tsx b/src/test/ukDataPages.test.tsx index 0284fc8..d7d6983 100644 --- a/src/test/ukDataPages.test.tsx +++ b/src/test/ukDataPages.test.tsx @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import release from '../data/ukDataRelease.json'; -import { ukPipelineIntro, ukPipelineStages, ukBranchLabels, runtimeShortfall } from '../data/ukPipelineStages'; +import { ukPipelineIntro, ukPipelineStages, ukBranchLabels, runtimeShortfall, UK_DATA_VERSION_DESCRIBED } from '../data/ukPipelineStages'; import { fmtInt, fmtPct, fmtTarget } from '../data/ukDataRelease'; import { UK_MODEL_VERSION } from '../data/ukBehaviouralResponses'; @@ -115,6 +115,12 @@ describe('UK pipeline copy', () => { expect(UK_MODEL_VERSION).toBe(release.release.modelVersion); }); + it('describes the build of the data release the pin names', () => { + // A new data pin must fail here until someone rereads the stage copy + // against that release's create_datasets.py (UK_DATA_SOURCE=… pytest). + expect(UK_DATA_VERSION_DESCRIBED).toBe(release.release.dataVersion); + }); + it('renders the UK intro and branch labels', () => { render(); expect(screen.getByText(ukPipelineIntro)).toBeInTheDocument();