From 95cccbe185bccecc8c8e10b3ec9b2104fcc8b2af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Thu, 24 Sep 2026 16:46:41 +0100 Subject: [PATCH 1/2] Add HMRC CGT Table 4 BADR and IR facts --- chronicle/source_package.py | 1 + ...s_asset_disposal_and_investors_reliefs.ods | Bin 0 -> 6559 bytes db/data/hmrc/cgt_badr_ir_2026/manifest.yaml | 18 + docs/pe-uk-source-checklist.md | 2 +- .../hmrc/cgt_badr_ir_2026/source_package.yaml | 2217 +++++++++++++++++ tests/test_chronicle_source_package.py | 95 + 6 files changed, 2332 insertions(+), 1 deletion(-) create mode 100644 db/data/hmrc/cgt_badr_ir_2026/Table_4_2026_Business_asset_disposal_and_investors_reliefs.ods create mode 100644 db/data/hmrc/cgt_badr_ir_2026/manifest.yaml create mode 100644 packages/hmrc/cgt_badr_ir_2026/source_package.yaml diff --git a/chronicle/source_package.py b/chronicle/source_package.py index 21d894a8..f411de37 100644 --- a/chronicle/source_package.py +++ b/chronicle/source_package.py @@ -101,6 +101,7 @@ ), "hmrc-cgt-age-2026": Path("hmrc/cgt_age_2026"), "hmrc-cgt-asset-type-2026": Path("hmrc/cgt_asset_type_2026"), + "hmrc-cgt-badr-ir-2026": Path("hmrc/cgt_badr_ir_2026"), "hmrc-cgt-carried-interest-2026": Path("hmrc/cgt_carried_interest_2026"), "hmrc-cgt-country-region-2026": Path("hmrc/cgt_country_region_2026"), "hmrc-cgt-gain-by-income-2026": Path("hmrc/cgt_gain_by_income_2026"), diff --git a/db/data/hmrc/cgt_badr_ir_2026/Table_4_2026_Business_asset_disposal_and_investors_reliefs.ods b/db/data/hmrc/cgt_badr_ir_2026/Table_4_2026_Business_asset_disposal_and_investors_reliefs.ods new file mode 100644 index 0000000000000000000000000000000000000000..397653de5ec23634c9bc083206e3adf5c0a3edd7 GIT binary patch literal 6559 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' + value: 0 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 10000 + unit: gbp + label: Qualifying gain upper bound + guard_cells: + - column: D + expected_value: '[Less than 1]' + label: Publisher-suppressed value retained without a numeric fact + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 6 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 6 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_4.ty2021.main + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_4.ty2021.main.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_4.ty2021 + sheet_name: 4_4_2021-22 + period_type: tax_year + period: 2021 + period_coverage: + basis: tax + source_period_label: 2021 to 2022 tax year + start_date: '2021-04-06' + end_date: '2022-04-05' + notes: HMRC updates provisional figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: gain_10000_to_24999 + label: GBP 10,000 to GBP 24,999 + ordinal: 1 + row_number: 8 + expected_row_header_column: A + expected_row_header: Individuals (10,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_10000_to_24999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_10000_to_24999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 10000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 25000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_25000_to_49999 + label: GBP 25,000 to GBP 49,999 + ordinal: 2 + row_number: 9 + expected_row_header_column: A + expected_row_header: Individuals (25,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_25000_to_49999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_25000_to_49999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 25000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 50000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_50000_to_99999 + label: GBP 50,000 to GBP 99,999 + ordinal: 3 + row_number: 10 + expected_row_header_column: A + expected_row_header: Individuals (50,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_50000_to_99999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_50000_to_99999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 50000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 100000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_100000_to_249999 + label: GBP 100,000 to GBP 249,999 + ordinal: 4 + row_number: 11 + expected_row_header_column: A + expected_row_header: Individuals (100,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_100000_to_249999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_100000_to_249999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 100000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 250000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_250000_to_499999 + label: GBP 250,000 to GBP 499,999 + ordinal: 5 + row_number: 12 + expected_row_header_column: A + expected_row_header: Individuals (250,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_250000_to_499999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_250000_to_499999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 250000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 500000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_500000_to_999999 + label: GBP 500,000 to GBP 999,999 + ordinal: 6 + row_number: 13 + expected_row_header_column: A + expected_row_header: Individuals (500,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_500000_to_999999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_500000_to_999999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 500000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 1000000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_1000000_plus + label: GBP 1,000,000 and over + ordinal: 7 + row_number: 14 + expected_row_header_column: A + expected_row_header: Individuals (1,000,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_1000000_plus + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_1000000_plus + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 1000000 + unit: gbp + label: Qualifying gain lower bound + - value_id: individuals_total + label: Individuals total + ordinal: 8 + row_number: 15 + expected_row_header_column: A + expected_row_header: Individuals (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 6 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 6 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 6 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_4.ty2021.trusts_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_4.ty2021.trusts_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_4.ty2021 + sheet_name: 4_4_2021-22 + period_type: tax_year + period: 2021 + period_coverage: + basis: tax + source_period_label: 2021 to 2022 tax year + start_date: '2021-04-06' + end_date: '2022-04-05' + notes: HMRC updates provisional figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: trusts_total + label: Trusts total + ordinal: 9 + row_number: 16 + expected_row_header_column: A + expected_row_header: Trusts (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: trusts + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: trusts + label: Taxpayer type + guard_cells: + - column: B + expected_value: '[Fewer than 1]' + label: Publisher-suppressed value retained without a numeric fact + measures: + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 6 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 6 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_4.ty2021.all_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_4.ty2021.all_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_4.ty2021 + sheet_name: 4_4_2021-22 + period_type: tax_year + period: 2021 + period_coverage: + basis: tax + source_period_label: 2021 to 2022 tax year + start_date: '2021-04-06' + end_date: '2022-04-05' + notes: HMRC updates provisional figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: all_total + label: All total + ordinal: 10 + row_number: 17 + expected_row_header_column: A + expected_row_header: All (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: all + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: all + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 6 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 6 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 6 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.first_band + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.first_band.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_3.ty2022 + sheet_name: 4_3_2022-23 + period_type: tax_year + period: 2022 + period_coverage: + basis: tax + source_period_label: 2022 to 2023 tax year + start_date: '2022-04-06' + end_date: '2023-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: gain_0_to_9999 + label: GBP 0 to GBP 9,999 + ordinal: 0 + row_number: 8 + expected_row_header_column: A + expected_row_header: Individuals (0) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_0_to_9999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_0_to_9999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 0 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 10000 + unit: gbp + label: Qualifying gain upper bound + guard_cells: + - column: D + expected_value: '[Less than 1]' + label: Publisher-suppressed value retained without a numeric fact + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 7 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.main + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.main.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_3.ty2022 + sheet_name: 4_3_2022-23 + period_type: tax_year + period: 2022 + period_coverage: + basis: tax + source_period_label: 2022 to 2023 tax year + start_date: '2022-04-06' + end_date: '2023-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: gain_10000_to_24999 + label: GBP 10,000 to GBP 24,999 + ordinal: 1 + row_number: 9 + expected_row_header_column: A + expected_row_header: Individuals (10,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_10000_to_24999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_10000_to_24999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 10000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 25000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_25000_to_49999 + label: GBP 25,000 to GBP 49,999 + ordinal: 2 + row_number: 10 + expected_row_header_column: A + expected_row_header: Individuals (25,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_25000_to_49999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_25000_to_49999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 25000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 50000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_50000_to_99999 + label: GBP 50,000 to GBP 99,999 + ordinal: 3 + row_number: 11 + expected_row_header_column: A + expected_row_header: Individuals (50,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_50000_to_99999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_50000_to_99999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 50000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 100000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_100000_to_249999 + label: GBP 100,000 to GBP 249,999 + ordinal: 4 + row_number: 12 + expected_row_header_column: A + expected_row_header: Individuals (100,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_100000_to_249999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_100000_to_249999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 100000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 250000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_250000_to_499999 + label: GBP 250,000 to GBP 499,999 + ordinal: 5 + row_number: 13 + expected_row_header_column: A + expected_row_header: Individuals (250,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_250000_to_499999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_250000_to_499999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 250000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 500000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_500000_to_999999 + label: GBP 500,000 to GBP 999,999 + ordinal: 6 + row_number: 14 + expected_row_header_column: A + expected_row_header: Individuals (500,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_500000_to_999999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_500000_to_999999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 500000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 1000000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_1000000_plus + label: GBP 1,000,000 and over + ordinal: 7 + row_number: 15 + expected_row_header_column: A + expected_row_header: Individuals (1,000,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_1000000_plus + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_1000000_plus + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 1000000 + unit: gbp + label: Qualifying gain lower bound + - value_id: individuals_total + label: Individuals total + ordinal: 8 + row_number: 16 + expected_row_header_column: A + expected_row_header: Individuals (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 7 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.trusts_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.trusts_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_3.ty2022 + sheet_name: 4_3_2022-23 + period_type: tax_year + period: 2022 + period_coverage: + basis: tax + source_period_label: 2022 to 2023 tax year + start_date: '2022-04-06' + end_date: '2023-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: trusts_total + label: Trusts total + ordinal: 9 + row_number: 17 + expected_row_header_column: A + expected_row_header: Trusts (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: trusts + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: trusts + label: Taxpayer type + guard_cells: + - column: B + expected_value: '[Fewer than 1]' + label: Publisher-suppressed value retained without a numeric fact + measures: + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.all_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_3.ty2022.all_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_3.ty2022 + sheet_name: 4_3_2022-23 + period_type: tax_year + period: 2022 + period_coverage: + basis: tax + source_period_label: 2022 to 2023 tax year + start_date: '2022-04-06' + end_date: '2023-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: all_total + label: All total + ordinal: 10 + row_number: 18 + expected_row_header_column: A + expected_row_header: All (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: all + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: all + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 7 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_2.ty2023.main + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_2.ty2023.main.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_2.ty2023 + sheet_name: 4_2_2023-24 + period_type: tax_year + period: 2023 + period_coverage: + basis: tax + source_period_label: 2023 to 2024 tax year + start_date: '2023-04-06' + end_date: '2024-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: gain_0_to_9999 + label: GBP 0 to GBP 9,999 + ordinal: 0 + row_number: 8 + expected_row_header_column: A + expected_row_header: Individuals (0) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_0_to_9999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_0_to_9999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 0 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 10000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_10000_to_24999 + label: GBP 10,000 to GBP 24,999 + ordinal: 1 + row_number: 9 + expected_row_header_column: A + expected_row_header: Individuals (10,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_10000_to_24999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_10000_to_24999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 10000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 25000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_25000_to_49999 + label: GBP 25,000 to GBP 49,999 + ordinal: 2 + row_number: 10 + expected_row_header_column: A + expected_row_header: Individuals (25,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_25000_to_49999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_25000_to_49999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 25000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 50000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_50000_to_99999 + label: GBP 50,000 to GBP 99,999 + ordinal: 3 + row_number: 11 + expected_row_header_column: A + expected_row_header: Individuals (50,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_50000_to_99999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_50000_to_99999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 50000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 100000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_100000_to_249999 + label: GBP 100,000 to GBP 249,999 + ordinal: 4 + row_number: 12 + expected_row_header_column: A + expected_row_header: Individuals (100,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_100000_to_249999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_100000_to_249999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 100000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 250000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_250000_to_499999 + label: GBP 250,000 to GBP 499,999 + ordinal: 5 + row_number: 13 + expected_row_header_column: A + expected_row_header: Individuals (250,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_250000_to_499999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_250000_to_499999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 250000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 500000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_500000_to_999999 + label: GBP 500,000 to GBP 999,999 + ordinal: 6 + row_number: 14 + expected_row_header_column: A + expected_row_header: Individuals (500,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_500000_to_999999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_500000_to_999999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 500000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 1000000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_1000000_plus + label: GBP 1,000,000 and over + ordinal: 7 + row_number: 15 + expected_row_header_column: A + expected_row_header: Individuals (1,000,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_1000000_plus + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_1000000_plus + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 1000000 + unit: gbp + label: Qualifying gain lower bound + - value_id: individuals_total + label: Individuals total + ordinal: 8 + row_number: 16 + expected_row_header_column: A + expected_row_header: Individuals (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 7 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_2.ty2023.trusts_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_2.ty2023.trusts_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_2.ty2023 + sheet_name: 4_2_2023-24 + period_type: tax_year + period: 2023 + period_coverage: + basis: tax + source_period_label: 2023 to 2024 tax year + start_date: '2023-04-06' + end_date: '2024-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: trusts_total + label: Trusts total + ordinal: 9 + row_number: 17 + expected_row_header_column: A + expected_row_header: Trusts (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: trusts + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: trusts + label: Taxpayer type + guard_cells: + - column: B + expected_value: '[Fewer than 1]' + label: Publisher-suppressed value retained without a numeric fact + measures: + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_2.ty2023.all_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_2.ty2023.all_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_2.ty2023 + sheet_name: 4_2_2023-24 + period_type: tax_year + period: 2023 + period_coverage: + basis: tax + source_period_label: 2023 to 2024 tax year + start_date: '2023-04-06' + end_date: '2024-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: all_total + label: All total + ordinal: 10 + row_number: 18 + expected_row_header_column: A + expected_row_header: All (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: all + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: all + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 7 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_1.ty2024.main + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_1.ty2024.main.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_1.ty2024 + sheet_name: 4_1_2024-25 + period_type: tax_year + period: 2024 + period_coverage: + basis: tax + source_period_label: 2024 to 2025 tax year + start_date: '2024-04-06' + end_date: '2025-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: gain_0_to_9999 + label: GBP 0 to GBP 9,999 + ordinal: 0 + row_number: 8 + expected_row_header_column: A + expected_row_header: Individuals (0) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_0_to_9999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_0_to_9999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 0 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 10000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_10000_to_24999 + label: GBP 10,000 to GBP 24,999 + ordinal: 1 + row_number: 9 + expected_row_header_column: A + expected_row_header: Individuals (10,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_10000_to_24999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_10000_to_24999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 10000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 25000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_25000_to_49999 + label: GBP 25,000 to GBP 49,999 + ordinal: 2 + row_number: 10 + expected_row_header_column: A + expected_row_header: Individuals (25,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_25000_to_49999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_25000_to_49999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 25000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 50000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_50000_to_99999 + label: GBP 50,000 to GBP 99,999 + ordinal: 3 + row_number: 11 + expected_row_header_column: A + expected_row_header: Individuals (50,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_50000_to_99999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_50000_to_99999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 50000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 100000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_100000_to_249999 + label: GBP 100,000 to GBP 249,999 + ordinal: 4 + row_number: 12 + expected_row_header_column: A + expected_row_header: Individuals (100,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_100000_to_249999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_100000_to_249999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 100000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 250000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_250000_to_499999 + label: GBP 250,000 to GBP 499,999 + ordinal: 5 + row_number: 13 + expected_row_header_column: A + expected_row_header: Individuals (250,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_250000_to_499999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_250000_to_499999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 250000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 500000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_500000_to_999999 + label: GBP 500,000 to GBP 999,999 + ordinal: 6 + row_number: 14 + expected_row_header_column: A + expected_row_header: Individuals (500,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_500000_to_999999 + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_500000_to_999999 + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 500000 + unit: gbp + label: Qualifying gain lower bound + - variable: cgt_badr_ir_qualifying_gain + operator: < + value: 1000000 + unit: gbp + label: Qualifying gain upper bound + - value_id: gain_1000000_plus + label: GBP 1,000,000 and over + ordinal: 7 + row_number: 15 + expected_row_header_column: A + expected_row_header: Individuals (1,000,000) + table_record_kind: detail + filters: + cgt_badr_ir_gain_band: gain_1000000_plus + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: gain_1000000_plus + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + - variable: cgt_badr_ir_qualifying_gain + operator: '>=' + value: 1000000 + unit: gbp + label: Qualifying gain lower bound + - value_id: individuals_total + label: Individuals total + ordinal: 8 + row_number: 16 + expected_row_header_column: A + expected_row_header: Individuals (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: individuals + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: individuals + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 7 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_1.ty2024.trusts_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_1.ty2024.trusts_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_1.ty2024 + sheet_name: 4_1_2024-25 + period_type: tax_year + period: 2024 + period_coverage: + basis: tax + source_period_label: 2024 to 2025 tax year + start_date: '2024-04-06' + end_date: '2025-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: trusts_total + label: Trusts total + ordinal: 9 + row_number: 17 + expected_row_header_column: A + expected_row_header: Trusts (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: trusts + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: trusts + label: Taxpayer type + guard_cells: + - column: B + expected_value: '[Fewer than 1]' + label: Publisher-suppressed value retained without a numeric fact + measures: + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 +- record_set_id: hmrc.cgt_badr_ir_2026.table4_1.ty2024.all_total + provenance_class: administrative + assertion: observation + record_set_spec_id: hmrc.cgt_badr_ir_2026.table4_1.ty2024.all_total.v1 + source_record_id_prefix: hmrc.cgt_badr_ir_2026.table4_1.ty2024 + sheet_name: 4_1_2024-25 + period_type: tax_year + period: 2024 + period_coverage: + basis: tax + source_period_label: 2024 to 2025 tax year + start_date: '2024-04-06' + end_date: '2025-04-05' + notes: HMRC marks this sheet provisional and updates figures for late and amended returns. + geography_id: K02000001 + geography_level: country + geography_name: United Kingdom + geography_vintage: current + entity: person + entity_role: taxpayer + domain: capital_gains_tax + groupby_dimension: cgt_badr_ir_gain_band + rows: + - value_id: all_total + label: All total + ordinal: 10 + row_number: 18 + expected_row_header_column: A + expected_row_header: All (Total) + table_record_kind: total + filters: + cgt_badr_ir_gain_band: total + taxpayer_type: all + constraints: + - variable: cgt_badr_ir_gain_band + operator: == + value: total + label: BADR/IR qualifying gain band + - variable: taxpayer_type + operator: == + value: all + label: Taxpayer type + measures: + - measure_id: taxpayers + label: BADR/IR liable taxpayers + ordinal: 0 + column: B + source_column_id: taxpayers + expected_column_header_row: 7 + expected_column_header: Number of BADR/IR liable taxpayers + concept: hmrc.cgt_badr_ir_taxpayers + source_concept: hmrc.cgt_badr_ir_taxpayers + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: count + aggregation: sum + expected_cell_type: number + value_scale: 1000 + - measure_id: gains + label: Gains qualifying for BADR or Investors' Relief + ordinal: 1 + column: C + source_column_id: gains + expected_column_header_row: 7 + expected_column_header: Gains on which BADR/IR claimed + concept: hmrc.cgt_badr_ir_qualifying_gains + source_concept: hmrc.cgt_badr_ir_qualifying_gains + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 + - measure_id: tax + label: Tax charged at the BADR/IR rate + ordinal: 2 + column: D + source_column_id: tax + expected_column_header_row: 7 + expected_column_header: Tax charged at BADR/IR rate + concept: hmrc.cgt_badr_ir_tax + source_concept: hmrc.cgt_badr_ir_tax + concept_relation: source_label + concept_authority: hmrc + concept_evidence_url: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + concept_evidence_notes: HMRC Capital Gains Tax statistics 2026, Table 4. Gains are before deducting + losses and the Annual Exempt Amount. Counts are thousands; gains and tax are GBP millions. Totals + may not sum due to rounding. Provisional figures are updated for late and amended returns. + unit: gbp + aggregation: sum + expected_cell_type: number + value_scale: 1000000 diff --git a/tests/test_chronicle_source_package.py b/tests/test_chronicle_source_package.py index de8f4b9c..60332610 100644 --- a/tests/test_chronicle_source_package.py +++ b/tests/test_chronicle_source_package.py @@ -355,6 +355,101 @@ def test_hmrc_cgt_size_of_gain_package_builds_microcosm_visible_band_facts(): assert row["observed_measure"]["source_concept"] == ("hmrc.cgt_gains_individuals") +def test_hmrc_cgt_badr_ir_table4_preserves_bands_totals_and_suppression(): + """Table 4 values follow HMRC's 2026 workbook, including its suppressed cells.""" + workbook = ( + REPO_ROOT + / "db/data/hmrc/cgt_badr_ir_2026" + / "Table_4_2026_Business_asset_disposal_and_investors_reliefs.ods" + ) + assert hashlib.sha256(workbook.read_bytes()).hexdigest() == ( + "7bd0098913e44e3c79a533690cd25ee08f627cd72935c46a874a7eab5442d5ca" + ) + package = load_source_package("hmrc-cgt-badr-ir-2026") + report = validate_source_package("hmrc-cgt-badr-ir-2026", year=2026) + assert report.valid, report.errors + + cells = package.build_source_cells(2026) + facts = package.build_facts(2026, cells=cells) + assert validate_source_cells(cells).valid + assert validate_facts(facts).valid + assert validate_consumer_fact_contract(facts).valid + assert len(facts) == 126 # 4 x 11 x 3 cells less 6 publisher suppressions. + assert {fact.period.value for fact in facts} == {2021, 2022, 2023, 2024} + assert {fact.period.type for fact in facts} == {"tax_year"} + assert {fact.provenance_class for fact in facts} == {"administrative"} + assert {fact.entity.name for fact in facts} == {"person"} + assert {fact.entity.role for fact in facts} == {"taxpayer"} + assert {fact.measure.concept for fact in facts} == { + "hmrc.cgt_badr_ir_taxpayers", + "hmrc.cgt_badr_ir_qualifying_gains", + "hmrc.cgt_badr_ir_tax", + } + + by_id = {fact.source_record_id: fact for fact in facts} + prefix = "hmrc.cgt_badr_ir_2026.table4_1.ty2024" + assert by_id[f"{prefix}.gain_1000000_plus.gains"].value == 6_787_000_000 + assert by_id[f"{prefix}.individuals_total.gains"].value == 18_443_000_000 + assert by_id[f"{prefix}.individuals_total.tax"].value == 1_821_000_000 + assert by_id[f"{prefix}.all_total.gains"].value == 18_475_000_000 + assert by_id[f"{prefix}.trusts_total.gains"].value == 32_000_000 + assert by_id[f"{prefix}.individuals_total.taxpayers"].value == 61_000 + published_2024_bands = ( + ("gain_0_to_9999", 5, 32, 2), + ("gain_10000_to_24999", 8, 129, 11), + ("gain_25000_to_49999", 6, 224, 21), + ("gain_50000_to_99999", 8, 575, 55), + ("gain_100000_to_249999", 11, 1_866, 182), + ("gain_250000_to_499999", 8, 2_901, 285), + ("gain_500000_to_999999", 8, 5_929, 588), + ("gain_1000000_plus", 7, 6_787, 678), + ) + for band, taxpayers, gains, tax in published_2024_bands: + assert by_id[f"{prefix}.{band}.taxpayers"].value == taxpayers * 1_000 + assert by_id[f"{prefix}.{band}.gains"].value == gains * 1_000_000 + assert by_id[f"{prefix}.{band}.tax"].value == tax * 1_000_000 + assert by_id[f"{prefix}.gain_1000000_plus.gains"].filters == { + "cgt_badr_ir_gain_band": "gain_1000000_plus", + "taxpayer_type": "individuals", + } + assert by_id[f"{prefix}.individuals_total.gains"].filters == { + "cgt_badr_ir_gain_band": "total", + "taxpayer_type": "individuals", + } + + assert all(".trusts_total.taxpayers" not in key for key in by_id) + for year, table in ((2021, "4_4"), (2022, "4_3")): + assert ( + f"hmrc.cgt_badr_ir_2026.table{table}.ty{year}.gain_0_to_9999.tax" + not in by_id + ) + for year, table, taxpayers, gains, tax in ( + (2021, "4_4", 48, 12_708, 1_220), + (2022, "4_3", 45, 12_606, 1_211), + (2023, "4_2", 42, 11_036, 1_077), + ): + total = f"hmrc.cgt_badr_ir_2026.table{table}.ty{year}.individuals_total" + assert by_id[f"{total}.taxpayers"].value == taxpayers * 1_000 + assert by_id[f"{total}.gains"].value == gains * 1_000_000 + assert by_id[f"{total}.tax"].value == tax * 1_000_000 + source_cells = {(cell.sheet_name, cell.address): cell for cell in cells} + for sheet, row in ( + ("4_1_2024-25", 17), + ("4_2_2023-24", 17), + ("4_3_2022-23", 17), + ("4_4_2021-22", 16), + ): + assert source_cells[(sheet, f"B{row}")].raw_value == "[Fewer than 1]" + assert source_cells[("4_3_2022-23", "D8")].raw_value == "[Less than 1]" + assert source_cells[("4_4_2021-22", "D7")].raw_value == "[Less than 1]" + assert by_id[f"{prefix}.individuals_total.gains"].period_coverage.start_date == ( + "2024-04-06" + ) + assert by_id[f"{prefix}.individuals_total.gains"].period_coverage.end_date == ( + "2025-04-05" + ) + + def test_dft_bus05i_package_preserves_2023_to_2025_revenue_and_support(): """BUS05i facts retain publisher periods and area definitions.""" report = validate_source_package("dft-bus05i-revenue-support-2025", year=2025) From d505ccd96c792a2255a2cf39d2ee814927b3609c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Juaristi?= <127882282+juaristi22@users.noreply.github.com> Date: Fri, 25 Sep 2026 10:43:35 +0100 Subject: [PATCH 2/2] Fix issues from review: include HMRC CGT Table 4 in bundle --- chronicle/bundle.py | 1 + tests/test_chronicle_bundle.py | 35 +++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/chronicle/bundle.py b/chronicle/bundle.py index 8f0969db..649eebec 100644 --- a/chronicle/bundle.py +++ b/chronicle/bundle.py @@ -106,6 +106,7 @@ "dwp-uc-two-child-limit-2025", "hmrc-cgt-age-2026", "hmrc-cgt-asset-type-2026", + "hmrc-cgt-badr-ir-2026", "hmrc-cgt-carried-interest-2026", "hmrc-cgt-country-region-2026", "hmrc-cgt-gain-by-income-2026", diff --git a/tests/test_chronicle_bundle.py b/tests/test_chronicle_bundle.py index 38ac821f..4d6fcd36 100644 --- a/tests/test_chronicle_bundle.py +++ b/tests/test_chronicle_bundle.py @@ -93,6 +93,7 @@ def fake_build_bundle(output_dir, **kwargs): assert "hmrc-cgt-size-of-gain-2025" not in UK_BUNDLE_SOURCES assert "hmrc-cgt-asset-type-2026" in UK_BUNDLE_SOURCES assert "hmrc-cgt-residential-property-2026" in UK_BUNDLE_SOURCES + assert "hmrc-cgt-badr-ir-2026" in UK_BUNDLE_SOURCES assert "hmrc-cgt-carried-interest-2026" in UK_BUNDLE_SOURCES assert tuple(captured["sources"]) == UK_BUNDLE_SOURCES assert captured["output_dir"] == tmp_path / "bundle" @@ -135,13 +136,13 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "aggregate_duplicate_key_count": 0, "entity_count": 12, "error_count": 0, - "fact_count": 350767, + "fact_count": 350893, "geography_count": 12592, "period_count": 494, "semantic_duplicate_key_count": 467, "skipped_source_count": 10, "source_count": 50, - "source_package_count": 226, + "source_package_count": 227, # 1 semantic-duplicate warning, plus the publisher wording Chronicle # keeps as published: values two packages word differently, groupby # rows that drift inside one package (chronicle#265, #266), and the @@ -149,7 +150,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): # it does has stopped warning (chronicle#281). "warning_count": 76, } - assert len(rows) == 350767 + assert len(rows) == 350893 assert {row["provenance_class"] for row in rows} <= { "administrative", "census", @@ -167,7 +168,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): ) assert rows[0]["aggregate_fact_key"].startswith("ledger.aggregate_fact.v2:") assert rows[0]["semantic_fact_key"].startswith("ledger.semantic_fact.v2:") - assert source_packages["source_package_count"] == 226 + assert source_packages["source_package_count"] == 227 assert source_packages["skipped_source_count"] == 10 assert sorted(item["source"] for item in source_packages["skipped_sources"]) == [ "census-acs-s0101-congressional-district-age-2024", @@ -181,7 +182,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "jct-obbba-revenue-estimates-2025", "jct-tax-expenditures-2024", ] - assert coverage["fact_count"] == 350767 + assert coverage["fact_count"] == 350893 assert coverage["counts"]["by_source"] == { "bea": 445, "bfp_economic_outlook": 5, @@ -204,7 +205,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "fpb_economic_outlook": 1000, "hhs_acf_liheap": 2, "hhs_acf_tanf": 110, - "hmrc": 31217, + "hmrc": 31343, "ici": 12, "irs_soi": 40063, "isc": 2, @@ -235,7 +236,14 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "welshgov": 9325, } table_counts = coverage["counts"]["by_source_table"] - assert len(table_counts) == 221 + assert len(table_counts) == 222 + assert ( + table_counts[ + "hmrc:Capital Gains Tax statistics Table 4: BADR and Investors' " + "Relief by size of qualifying gain" + ] + == 126 + ) assert ( table_counts[ "dwp:Households on Universal Credit by family type, " @@ -941,10 +949,10 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "tax_year:2018": 11, "tax_year:2019": 11, "tax_year:2020": 11, - "tax_year:2021": 11, - "tax_year:2022": 41239, - "tax_year:2023": 63310, - "tax_year:2024": 296, + "tax_year:2021": 42, + "tax_year:2022": 41270, + "tax_year:2023": 63342, + "tax_year:2024": 328, } for fiscal_year in range(2017, 2026): key = f"fiscal_year:{fiscal_year}" @@ -1195,7 +1203,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): assert ( coverage["counts"]["by_geography"]["congressional_district:5001700US0601"] == 56 ) - assert coverage["counts"]["by_geography"]["country:K02000001"] == 10500 + assert coverage["counts"]["by_geography"]["country:K02000001"] == 10626 assert coverage["counts"]["by_geography"]["country:E92000001"] == 4053 assert coverage["counts"]["by_geography"]["country:K03000001"] == 9606 assert coverage["counts"]["by_geography"]["statistical_scope:ofgem:london"] == 216 @@ -1209,7 +1217,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "household": 53521, "institutional_sector": 1263, "pension_plan": 2, - "person": 74682, + "person": 74808, "return": 14600, "social_protection_scheme": 36, "tax_unit": 41368, @@ -1296,6 +1304,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "dfc-ni-uc-statistics-may-2026", "hmrc-cgt-age-2026", "hmrc-cgt-asset-type-2026", + "hmrc-cgt-badr-ir-2026", "hmrc-cgt-carried-interest-2026", "hmrc-cgt-country-region-2026", "hmrc-cgt-gain-by-income-2026",