Skip to content

Bus fares: follow published fares by area and year, and price cap changes from a fitted fare table - #2546

Merged
juaristi22 merged 4 commits into
mainfrom
bus-fares-index-cap-savings-2542
Oct 21, 2026
Merged

juaristi22 merged 4 commits into
mainfrom
bus-fares-index-cap-savings-2542

Conversation

@juaristi22

@juaristi22 juaristi22 commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2542

What and why

From 2025-26 the engine held the FY2024-25 yield per fare-paying boarding and moved it only by a cap term against a fixed 2024 cap schedule, with one uncapped fare of £2.748 for every single ticket. Outside London the 2025-26 yield rose 24.9%, while DfT's BUS0415a index rose 12.6% on the same April-to-March basis. A £3 cap was worth nothing, and a full year at £2 was priced at about £0.70bn.

Three ordered commits:

  1. The cap schedules keep their calendar dates. preserve_calendar_dates sat on the fares and reference_fares nodes and never reached the cap leaves, so the caps were annualised like other parameters. That was harmless while every change fell on 1 January. A bare-year reform of the cap ({2025: 2}) covered April to December only. A dated change part-way through a year waited for the next calendar year. The index files now propagate the flag.
  2. Change A: fares follow the published index.
    • The new gov.dft.bus.local_bus_fares_index holds BUS0415a quarter-end values for London, England outside London and Scotland, from DfT's June 2026 release (quarters to March 2026). The references point at an archived copy, because DfT's address for that file now serves the September 2026 release. Each value is dated at the start of its quarter, and fiscal_year_blend day-weights the values over 6 April to 5 April. After March 2026 the index grows with the OBR CPI.
    • The yield in year t is the benchmark yield × index(t) / index(benchmark year). Northern Ireland has no index, so its yield follows CPI.
    • reference_fares.cap becomes the cap the index already reflects: the cap in force up to the last published quarter, held after it. Both schedules are read in the same year. The cap term is therefore zero while the index is published. After that it adds the scheduled £2 cap from January 2027 and its end in 2028.
    • benchmark_year replaces reference_year, which is removed with directions.
    • yield_per_boarding and boardings_per_trip keep their names, areas and dates.
  3. Change B: a fitted table of uncapped single fares.
    • gov.dft.bus.uncapped_single_fares replaces uncapped_single_fare, which is removed with directions. At FY2024-25 prices, CPI-uprated: 55% of single tickets at £1.65, 30% at £2.21 and 15% at £3.87.
    • The model caps each band under both schedules and weights by share.
    • scripts/fit_bus_cap_savings.py fits the table by least squares to the public facts below. Shares move in steps of one point and fares in steps of one penny, and each band's mean stays at least 10% above its lower edge.
    • A supplied local_bus_uncapped_single_fare replaces the table for that person. It is now in SUPPLIED_INPUT_VARIABLES and is CPI-uprated when datasets are extended.

Rulings (20 Oct): the April-to-March window; after the last published quarter, CPI plus the scheduled caps; the table fitted to all the public facts.

Fit check Source Target Table
A full year at £2, 2023-24 BUS05bi fare cap support £278.95m £280.9m
Part of the December 2024 to March 2025 index step outside London due to the cap BUS0415a: +11.0%; neighbouring quarters 0.1% to 2.3% 9% to 11% of the yield 9.8%
The £3 cap in 2025 DfT written statement, 29 Oct 2024 "over £150 million" £140.0m
The £2 cap in 2027, against no cap DfT, 22 Jul 2026 £400m £411.6m
Mean single fare before the cap; share above £2; their mean DfT evaluation, Table 6 £2.15; about 0.44; £2.73 £2.15; 0.45; £2.76
2024-25: £2 for 270 days, then £3 BUS05bi fare cap support £515.69m, not fitted £268.5m
  • How the £400m is read. It is read as £2 against no cap, since the £3 scheme is funded only to December 2026 and the £2 scheme replaces it. Read as £2 against a continued £3 cap, the table gives £247.3m, 38% below.
  • Why the 2024-25 grant is not fitted. This is the benchmark year's own figure, and the one the £2.748 fare was calibrated to. It is reported but not fitted. Grant per fare-paying boarding rose 78% on 2023-24, while the outside-London index rose 6.7% and receipts per boarding 2.8%. So the grant may hold more than that year's forgone fares (timing or coverage of payments, not checked). The 2023-24 grant and both announced figures put a full year at £2 near £0.3bn, not £0.6bn.

The costs use the 0.70 default single share and fare-paying boardings outside London (BUS01 less BUS01c). Table 6 is read at face value, for the table's shape. Deflated to 2022 prices it would put the 2023-24 saving about a third above the grant (reasons not checked). The two announced figures are budgets: the £2 cap's first ten months paid £210m against £245m planned. In 2025-26 a full year at £2 against no cap saves about £0.36bn at 2024-25 boardings, and £3 saves about £0.14bn.

One fare-paying passenger outside London, 100 trips, 0.70 singles, default parameters:

2024-25 2025-26 2026-27 2027-28 2028-29
main £174.85 £218.42 £203.09 £174.97 £218.42
this PR £174.85 £196.87 £196.23 £193.65 £224.39

In 2025-26 on main, no cap and the £3 cap both give £218.42. Here: no cap £208.70, £3 cap £196.87, £2 cap £178.33.

For consumers

  • Microcosm (UK bus fares: keep in step with the engine's per-year fares, take the single-ticket share from cap-regime years, and check cap savings against NTS fares paid microcosm#1331). The engine's England total now follows each area's index: +7.6% from 2024-25 to 2025-26. DfT's England index rose 6.4% over the same years, and the calendar factor on the 2025 England row is 1.057. Over December 2024 to March 2025 the England index rose 5.6%, against 11.0% outside London and 0% in London. It therefore weights outside London at about one half, where receipts weight it at 61%. Aligning the London and outside-London receipts separately would remove that gap. For the same reason the issue's test 8 (the England total rises by no more than the England index) cannot hold. The test here checks each area against its own index instead.
  • Scotland and Northern Ireland were flat before. Scotland now rises with its index (+9.2% in 2025-26) and Northern Ireland with CPI (+3.4%).

Not in this PR

  • The newer fares release. DfT's September 2026 release runs to June 2026 (England +2% on the year, London 0%, Scotland +5%) and revises the December 2025 and March 2026 quarters. This PR keeps the June 2026 vintage that Chronicle and Microcosm pin, so the parity check in microcosm#1331 can tie exactly. Update both together.
  • The single-ticket share stays at 0.70, and the fit is conditional on it.
  • Out of scope: regional cap savings, demand response, Wales.

Two limits are documented in docs/engineering/bus-fares.md:

  • CPI on capped fares. The CPI projection also raises fares the £3 cap holds at £3. That overstates the outside-London yield by 0.4% in 2027-28 and 0.8% in 2028-29, rising about 0.3 points a year. Cap reforms share the reference with the baseline, so their costs do not move.
  • Regional splits. The national table misplaces cap savings between regions where combined authorities run their own lower fares. National totals hold.

Test plan

  • YAML (policyengine_uk/tests/policy/baseline/gov/dft/bus_journeys.yaml): cases 1–8 adapted (benchmark_year replaces reference_year). Cases 9–15 are new, with expected values worked by hand from DfT tables and the arithmetic in comments. They cover each area in 2024-25 and 2025-26, no cap and a £2 cap in 2025-26.
  • test_bus_fare_reforms.py:
    • the England total by area;
    • the £3 cap binds, and reform differences follow the table;
    • the scheduled caps in 2026-27 to 2028-29, with CPI read from the parameters so forecast updates do not break the test;
    • a supplied fare replaces the table;
    • the shares must sum to one;
    • a dated mid-year cap change keeps its date.
  • test_bus_fare_parameters.py: the reference cap equals the cap up to the index's last published quarter and is held after it; the table matches each public fact; the removed parameters give directions.
  • Run locally, all passing: the gov/dft YAML tests (42), the bus Python tests, and the parameter-description, fiscal-year, dated-reform, removed-parameter, uprating and supplied-input tests. The full suite is left to CI.
  • ruff format and ruff check on the repository.
  • Changelog fragments: changelog.d/2542.fixed.md and changelog.d/2542.removed.md.

The aggregate impact check on certified data cannot see this change. No measure in its report reads bus fare spending, so its "no change in any year" is not evidence either way. The test of the totals is the parity run in PolicyEngine/microcosm#1331.

Reproducer: policyengine_uk/tests/policy/baseline/gov/dft/bus_journeys.yaml::Case 10, the 2025-26 yield follows the fares index, not a cap term.; policyengine_uk/tests/test_bus_fare_reforms.py::test_a_three_pound_cap_binds_and_cap_reforms_follow_the_table; policyengine_uk/tests/test_bus_fare_reforms.py::test_a_cap_change_part_way_through_a_year_keeps_its_date

axiom: n/a: bus fares are priced from DfT statistics, and the national fare cap is a grant-funded voluntary scheme with no statutory provision to encode.

🤖 Generated with Claude Code

juaristi22 and others added 3 commits October 20, 2026 22:47
The preserve_calendar_dates flag sat on the fares and reference_fares nodes,
and leaves only see node metadata that is propagated. The caps were therefore
annualised like any other parameter, which happened to be harmless while
every change fell on 1 January. A cap change dated part-way through a year
waited for the next calendar year. Propagate the flag to the cap leaves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The engine held the FY2024-25 yield per fare-paying boarding in every later
year and moved it only by a cap term measured against a fixed 2024 cap
schedule. Outside London that lifted the 2025-26 yield 24.9%, while DfT's
BUS0415a index for the same area rose 12.6% on the same April-to-March basis,
cap rise included.

Each area's yield now moves with its BUS0415a index (London, England outside
London, Scotland), stored as published quarter-end values dated at the start
of their quarter and day-weighted over 6 April to 5 April. After the last
published quarter (March 2026) the index grows with the OBR CPI. Northern
Ireland has no index, so its yield follows CPI.

reference_fares.cap becomes the cap the index already reflects: the cap in
force up to the last published quarter, held after it. Both schedules are read
in the same year, so the cap term is zero while the index is published and
adds the scheduled 2027 GBP 2 cap and its 2028 end after it. reference_year
is removed with directions; benchmark_year names the benchmark year.

Each area following its own index means the England total rises 7.6% in
2025-26, more than DfT's England index (6.4%), which weights outside London
at about one half where receipts weight it at 61%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One uncapped fare of GBP 2.748 for every single ticket made a GBP 3 cap worth
nothing and priced a full year at GBP 2 at about GBP 0.70bn. DfT's evaluation
of the GBP 2 cap puts that fare near the average of the tickets above GBP 2,
which were less than half of single tickets.

gov.dft.bus.uncapped_single_fares replaces it with three bands, each with its
share of single tickets and mean uncapped fare at FY2024-25 prices, uprated
with CPI: 55% at GBP 1.65, 30% at GBP 2.21 and 15% at GBP 3.87. The model caps
each band under both schedules and weights by share. A supplied
local_bus_uncapped_single_fare (now registered as a supplied input and
CPI-uprated when datasets are extended) replaces the table for that person.

scripts/fit_bus_cap_savings.py fits the table by least squares to public
facts: the 2023-24 fare cap grant (GBP 280.9m against 278.95m), the January
2025 BUS0415a step (9.8% of the yield against 9 to 11%), the funding announced
for the GBP 3 cap in 2025 (GBP 140.0m against "over GBP 150 million") and the
GBP 2 cap in 2027 (GBP 411.6m against 400m), and the shape of DfT's Table 6.
A full year at GBP 2 now saves about GBP 0.36bn a year at 2024-25 boardings
and GBP 3 about GBP 0.14bn.

uncapped_single_fare is removed with directions.

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

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 763d21defb against head b8b7b95b4e, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

None.

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Household net income by decile

No household's net income changes in any year.

No change in any year: receipts by tax head; government balance, each component counted once; model totals; components the model counts twice; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles; standard reform costings (change in gov_balance); standard reforms: change in each reform's target.

Checks failing on both base and head (1)
  • VAT is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-54,797,972 in total; 2026-27: 76 units below zero, a weighted £-56,271,349 in total; 2027-28: 76 units below zero, a weighted £-57,609,146 in total
Counted-once check

Each of 84 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.

Provenance
Side Commit Runtime Environment hash Partition hash Time
base main 763d21defb uk 2.143.0 (files 57c46847f2b0), core 3.33.2, py 3.13.16 aarch64 cea2a142c03b f210f83d5be4 1479.21s
head #2546 merged into main b8b7b95b4e uk 2.143.0 (files b256a87dc1cb), core 3.33.2, py 3.13.16 aarch64 cea2a142c03b f210f83d5be4 1517.89s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@2526edbbb687a3b54dbb11272e5389e4b62d2ac2, sha256 056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784 (verified on both sides), policyengine-uk-data 1.58.1.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax £299.36bn £319.12bn £336.63bn £351.79bn £367.34bn £385.47bn £403.77bn
National Insurance (employee and self-employed) £52.58bn £54.94bn £56.75bn £58.48bn £60.62bn £62.57bn £65.03bn
National Insurance (employer) £152.64bn £159.18bn £164.14bn £168.73bn £176.11bn £181.72bn £188.90bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £12.62bn £13.06bn £13.55bn £14.04bn £14.54bn £15.09bn £15.65bn
Student loan repayments £7.83bn £8.12bn £8.35bn £8.56bn £8.79bn £9.04bn £9.38bn
VAT £253.71bn £260.53bn £266.72bn £273.14bn £279.83bn £286.71bn £293.71bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.53bn £24.64bn £26.64bn £26.69bn £26.42bn £25.76bn £26.35bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.28bn £4.43bn £4.44bn £4.46bn £4.49bn £4.51bn £4.53bn
Council tax £49.56bn £52.45bn £55.78bn £59.39bn £62.98bn £66.74bn £70.70bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.51bn £0.52bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.61bn £0.63bn £0.67bn £0.70bn £0.73bn
Business rates £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn
Stamp duty land tax (own purchases, and corporate until the £10.06bn £10.56bn £10.98bn £11.40bn £11.81bn £12.23bn £12.64bn
Land transaction tax (Wales) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land and buildings transaction tax (Scotland) £0.01bn £0.01bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension £122.50bn £127.12bn £128.28bn £130.21bn £134.05bn £138.02bn £142.08bn
Pension Credit £6.66bn £7.04bn £7.02bn £7.09bn £7.21bn £7.34bn £7.44bn
Winter Fuel Payment £1.70bn £1.68bn £1.59bn £1.57bn £1.57bn £1.55bn £1.52bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £78.78bn £83.08bn £84.89bn £86.65bn £87.58bn £88.99bn £90.32bn
Housing Benefit £8.59bn £8.92bn £9.19bn £9.33bn £9.61bn £9.87bn £10.15bn
Council Tax Reduction £1.99bn £2.03bn £2.08bn £2.13bn £2.18bn £2.23bn £2.28bn
Employment and Support Allowance (income-related) £2.12bn £2.18bn £2.23bn £2.28bn £2.33bn £2.39bn £2.45bn
Employment and Support Allowance (contribution-based) £5.22bn £5.36bn £5.49bn £5.62bn £5.76bn £5.90bn £6.04bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.30bn £0.30bn £0.31bn £0.32bn £0.33bn £0.33bn
Income Support £0.12bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £27.05bn £28.19bn £28.94bn £29.64bn £30.37bn £31.11bn £31.87bn
Disability Living Allowance £7.52bn £7.83bn £8.04bn £8.24bn £8.44bn £8.65bn £8.86bn
Attendance Allowance £8.71bn £9.08bn £9.32bn £9.55bn £9.78bn £10.02bn £10.26bn
Carer's Allowance £4.50bn £4.69bn £4.81bn £4.93bn £5.05bn £5.17bn £5.29bn
Carer Support Payment (Scotland) £0.35bn £0.37bn £0.38bn £0.39bn £0.40bn £0.41bn £0.41bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.51bn £0.52bn £0.53bn £0.54bn £0.56bn £0.57bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.62bn £0.64bn £0.65bn £0.67bn £0.69bn £0.70bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.23bn £16.91bn £17.32bn £17.73bn £18.16bn £18.60bn £19.04bn
Scottish Child Payment £0.50bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.58bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.32bn £3.41bn £3.49bn £3.57bn £3.66bn £3.75bn £3.84bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.13bn £1.16bn £1.19bn £1.22bn £1.25bn £1.28bn £1.31bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.67bn £0.69bn £0.70bn £0.72bn £0.74bn £0.76bn £0.78bn
Tax-Free Childcare £0.55bn £0.56bn £0.57bn £0.58bn £0.60bn £0.61bn £0.59bn
Extended childcare entitlement £2.66bn £3.14bn £3.23bn £3.30bn £3.38bn £3.47bn £3.55bn
Universal childcare entitlement £3.32bn £3.59bn £3.69bn £3.78bn £3.88bn £3.99bn £4.08bn
Targeted childcare entitlement £0.57bn £0.60bn £0.62bn £0.63bn £0.65bn £0.66bn £0.67bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £204.68bn £205.46bn £206.22bn £207.04bn £207.96bn £208.89bn £209.79bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.15bn £25.25bn £25.34bn £25.44bn £25.55bn £25.67bn £25.78bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension 11,308k 11,208k 10,906k 10,812k 10,860k 10,908k 10,955k
Pension Credit 1,490k 1,489k 1,477k 1,455k 1,457k 1,454k 1,450k
Winter Fuel Payment 7,091k 7,008k 6,593k 6,509k 6,491k 6,377k 6,242k
Pension Age Winter Heating Payment (Scotland) 806k 807k 807k 805k 809k 812k 816k
Universal Credit 6,371k 6,379k 6,409k 6,419k 6,395k 6,387k 6,371k
Housing Benefit 1,254k 1,252k 1,254k 1,240k 1,244k 1,247k 1,249k
Council Tax Reduction 3,184k 3,210k 3,223k 3,244k 3,261k 3,279k 3,292k
Employment and Support Allowance (income-related) 187k 188k 188k 189k 190k 190k 191k
Employment and Support Allowance (contribution-based) 722k 724k 727k 730k 733k 737k 740k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 68k 68k 68k 69k 69k
Income Support 25k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 3,581k 3,595k 3,608k 3,623k 3,639k 3,655k 3,671k
Disability Living Allowance 1,296k 1,301k 1,306k 1,311k 1,317k 1,323k 1,329k
Attendance Allowance 1,701k 1,708k 1,714k 1,721k 1,729k 1,736k 1,744k
Carer's Allowance 1,038k 1,042k 1,046k 1,050k 1,055k 1,059k 1,064k
Carer Support Payment (Scotland) 81k 82k 82k 82k 83k 83k 83k
Carer's Allowance Supplement (Scotland) 0k 82k 82k 82k 83k 83k 83k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 138k 139k 139k 140k 140k 141k
Armed Forces Compensation Scheme 94k 94k 94k 95k 95k 95k 96k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,136k 8,165k 8,185k 8,215k 8,249k 8,282k 8,314k
Scottish Child Payment 352k 354k 355k 356k 357k 358k 357k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 201k 202k 203k 204k 204k 205k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 334k 335k 336k 338k 339k 341k 342k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 182k 183k 183k 184k 185k 186k 186k
Sure Start Maternity Grant 26k 26k 26k 27k 27k 27k 27k
Bereavement Support Payment 98k 98k 99k 99k 100k 100k 101k
Tax-Free Childcare 1,017k 1,028k 1,028k 1,033k 1,034k 1,038k 1,023k
Extended childcare entitlement 665k 671k 675k 677k 682k 686k 687k
Universal childcare entitlement 986k 989k 992k 997k 1,002k 1,013k 1,015k
Targeted childcare entitlement 119k 120k 120k 121k 121k 122k 121k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 99k 99k 100k 100k 100k 101k
Adult Dependants' Grant 18k 18k 12k 13k 13k 13k 13k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £899.46bn £939.35bn £976.35bn £1,009.56bn £1,045.84bn £1,082.79bn £1,123.66bn
Government spending £536.58bn † £550.91bn † £557.25bn † £564.32bn † £572.87bn † £582.12bn † £591.27bn †
Government balance, each receipt once £362.88bn † £388.44bn † £419.09bn † £445.24bn † £472.97bn † £500.67bn † £532.39bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £902.59bn £942.48bn £979.48bn £1,012.69bn £1,048.97bn £1,085.92bn £1,126.79bn
household_tax £496.24bn £522.77bn £548.61bn £570.81bn £593.03bn £617.48bn £644.19bn
pre_budget_change_household_tax £488.42bn £514.65bn £540.26bn £561.77bn £583.75bn £607.94bn £634.29bn
gov_spending £536.58bn † £550.91bn † £557.25bn † £564.32bn † £572.87bn † £582.12bn † £591.27bn †
household_benefits £536.58bn † £550.91bn † £557.25bn † £564.32bn † £572.87bn † £582.12bn † £591.27bn †
gov_balance £366.01bn † £391.57bn † £422.22bn † £448.37bn † £476.10bn † £503.80bn † £535.52bn †
Components the model counts twice: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,657.06bn £1,719.25bn £1,771.68bn £1,821.99bn £1,872.88bn £1,930.99bn £2,001.98bn
Household net income £1,658.12bn † £1,706.63bn † £1,738.44bn † £1,772.55bn † £1,808.65bn † £1,850.28bn † £1,902.01bn †
Household net income (HBAI definition) £1,466.68bn £1,513.41bn £1,545.63bn £1,578.61bn £1,612.63bn £1,651.68bn £1,702.11bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,514k 69,778k 70,036k 70,316k 70,626k 70,944k 71,249k
Benefit units 35,247k 35,381k 35,512k 35,654k 35,811k 35,972k 36,127k
Households 31,167k 31,285k 31,401k 31,526k 31,665k 31,808k 31,944k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 15.9% 14.9% 15.5% 15.6% 15.7% 15.8% 15.7%
Absolute poverty, before housing costs: children 23.7% 20.9% 21.6% 21.4% 21.6% 21.8% 21.7%
Absolute poverty, before housing costs: working-age adults 13.8% 13.4% 14.0% 14.1% 14.2% 14.3% 14.3%
Absolute poverty, before housing costs: pensioners 13.7% 13.1% 13.2% 13.4% 13.5% 13.6% 13.6%
Absolute poverty, after housing costs: everyone 21.1% 20.6% 21.3% 21.5% 21.9% 22.2% 22.3%
Absolute poverty, after housing costs: children 32.1% 30.3% 30.9% 31.1% 31.7% 32.3% 32.5%
Absolute poverty, after housing costs: working-age adults 19.6% 19.4% 20.2% 20.4% 20.8% 21.0% 21.0%
Absolute poverty, after housing costs: pensioners 12.7% 12.5% 12.6% 12.9% 13.0% 13.1% 13.4%
Relative poverty, before housing costs: everyone 16.9% 16.4% 16.4% 16.5% 16.6% 16.7% 16.7%
Relative poverty, before housing costs: children 25.6% 23.5% 23.2% 23.2% 23.3% 23.4% 23.4%
Relative poverty, before housing costs: working-age adults 14.4% 14.4% 14.7% 14.8% 14.9% 15.1% 15.0%
Relative poverty, before housing costs: pensioners 14.8% 14.9% 14.1% 14.3% 14.2% 14.2% 14.4%
Relative poverty, after housing costs: everyone 21.7% 21.3% 21.4% 21.5% 21.7% 21.8% 22.0%
Relative poverty, after housing costs: children 33.0% 31.6% 31.2% 31.1% 31.5% 31.6% 32.0%
Relative poverty, after housing costs: working-age adults 20.0% 20.0% 20.3% 20.4% 20.6% 20.8% 20.9%
Relative poverty, after housing costs: pensioners 13.5% 13.1% 12.7% 12.8% 12.7% 12.7% 12.8%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 11,051k 10,427k 10,848k 10,947k 11,079k 11,209k 11,220k
Absolute poverty, before housing costs: children 3,560k 3,141k 3,261k 3,253k 3,298k 3,334k 3,335k
Absolute poverty, before housing costs: working-age adults 5,864k 5,737k 6,070k 6,165k 6,237k 6,315k 6,321k
Absolute poverty, before housing costs: pensioners 1,627k 1,549k 1,517k 1,529k 1,544k 1,561k 1,565k
Absolute poverty, after housing costs: everyone 14,659k 14,362k 14,899k 15,116k 15,444k 15,724k 15,870k
Absolute poverty, after housing costs: children 4,809k 4,556k 4,676k 4,719k 4,835k 4,939k 4,994k
Absolute poverty, after housing costs: working-age adults 8,333k 8,326k 8,775k 8,931k 9,122k 9,275k 9,329k
Absolute poverty, after housing costs: pensioners 1,518k 1,480k 1,449k 1,466k 1,487k 1,509k 1,547k
Relative poverty, before housing costs: everyone 11,760k 11,456k 11,504k 11,625k 11,706k 11,868k 11,916k
Relative poverty, before housing costs: children 3,840k 3,538k 3,514k 3,525k 3,546k 3,582k 3,603k
Relative poverty, before housing costs: working-age adults 6,154k 6,160k 6,365k 6,465k 6,537k 6,651k 6,652k
Relative poverty, before housing costs: pensioners 1,766k 1,758k 1,625k 1,634k 1,623k 1,634k 1,661k
Relative poverty, after housing costs: everyone 15,065k 14,863k 14,993k 15,090k 15,319k 15,490k 15,653k
Relative poverty, after housing costs: children 4,948k 4,756k 4,711k 4,715k 4,798k 4,840k 4,919k
Relative poverty, after housing costs: working-age adults 8,511k 8,559k 8,822k 8,917k 9,070k 9,192k 9,260k
Relative poverty, after housing costs: pensioners 1,605k 1,548k 1,460k 1,458k 1,452k 1,457k 1,475k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3074 0.3051 0.3065 0.3071 0.3077 0.3083 0.3094
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £17,707 † £17,997 † £17,941 † £17,992 † £18,326 † £18,523 † £18,684 †
Decile 2: mean household_net_income per household £28,362 † £29,049 † £28,672 † £29,013 † £29,373 † £29,779 † £30,332 †
Decile 3: mean household_net_income per household £34,607 † £35,886 † £36,508 † £37,008 † £37,263 † £37,824 † £38,511 †
Decile 4: mean household_net_income per household £39,329 † £40,908 † £41,807 † £42,695 † £43,186 † £43,984 † £45,129 †
Decile 5: mean household_net_income per household £44,871 † £46,147 † £47,077 † £47,609 † £48,379 † £49,251 † £50,073 †
Decile 6: mean household_net_income per household £47,930 † £49,324 † £50,272 † £51,070 † £52,170 † £52,939 † £54,222 †
Decile 7: mean household_net_income per household £56,320 † £57,578 † £58,469 † £59,414 † £60,124 † £61,607 † £63,192 †
Decile 8: mean household_net_income per household £69,250 † £70,361 † £71,635 † £72,869 † £74,327 † £75,790 † £77,563 †
Decile 9: mean household_net_income per household £79,686 † £82,010 † £83,245 † £84,446 † £86,085 † £87,570 † £90,640 †
Decile 10: mean household_net_income per household £117,623 † £120,464 † £122,413 † £124,563 † £126,773 † £129,082 † £131,885 †
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.22bn £6.50bn £6.71bn £6.90bn £7.11bn £7.35bn £7.62bn
Raise higher rate by 1pp £3.54bn £3.82bn £4.05bn £4.27bn £4.49bn £4.76bn £4.96bn
Raise personal allowance by ~800GBP/year £-3.83bn £-3.96bn £-4.03bn £-4.10bn £-4.20bn £-4.30bn £-2.02bn
Raise child benefit by 25GBP/week per additional child £-2.00bn £-1.76bn £-1.64bn £-1.54bn £-1.44bn £-1.34bn £-1.24bn
Reduce Universal Credit taper rate to 20% £-20.54bn £-21.09bn £-21.45bn £-21.87bn £-21.95bn £-22.32bn £-22.79bn
Raise Class 1 main employee NICs rate to 10% £11.06bn £11.51bn £11.83bn £12.14bn £12.47bn £12.81bn £13.29bn
Raise VAT standard rate by 2pp £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10% £-3.04bn £-3.17bn £-3.24bn £-3.32bn £-3.37bn £-3.42bn £-3.47bn
Raise the State Pension by 10% £-8.92bn £-9.13bn £-9.03bn £-9.06bn £-9.26bn £-9.51bn £-9.78bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.36bn £6.65bn £6.87bn £7.07bn £7.29bn £7.53bn £7.81bn
Raise higher rate by 1pp: change in income_tax £3.55bn £3.83bn £4.06bn £4.28bn £4.50bn £4.78bn £4.97bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.96bn £-4.11bn £-4.19bn £-4.27bn £-4.36bn £-4.47bn £-1.77bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.34bn £2.15bn £2.03bn £1.92bn £1.82bn £1.71bn £1.59bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.53bn £21.08bn £21.44bn £21.86bn £21.95bn £22.32bn £22.78bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.33bn £11.79bn £12.13bn £12.44bn £12.78bn £13.13bn £13.62bn
Raise VAT standard rate by 2pp: change in vat £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp: change in income_tax £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.04bn £3.17bn £3.25bn £3.32bn £3.37bn £3.43bn £3.47bn
Raise the State Pension by 10%: change in state_pension £12.25bn £12.71bn £12.83bn £13.02bn £13.41bn £13.80bn £14.21bn

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juaristi22, thanks. This is a clear improvement on the £2.748 single fare: the baseline now follows published fares, a £3 cap binds, and the fit is reproducible. I found no must-fix items. Three shoulds below are about stating what the fit leaves out, plus three nits.

Reviewed at head b0968773, base 76cfc9e7.

What I checked

  • BUS0415a. All 39 values in local_bus_fares_index.yaml match DfT's June 2026 release ("Last updated: June 2026", archived 19 June 2026) exactly, including the unrounded March 2026 cells. The base is March 2005 = 100, at current prices.
  • BUS05bi fare cap support. £278.951m in 2023-24 (England outside London, the same as England). Matches fit_bus_cap_savings.py:27.
  • BUS01a and BUS01c. England outside London journeys of 1,780.913m (2023-24) and 1,850.510m (2024-25), and concessionary journeys of 499.730m and 519.108m. These match fit_bus_cap_savings.py:18-19.
  • Evaluation Table 6 (Frontier Economics and SYSTRA, p. 66). £1.49 to £1.40, £2.15 to £1.83, and £2.73 to £2.00. The "less than half of total pre-£2BFC bus trips" wording and the £210m spent against £245m planned are both in the report. Note that Table 6 covers "Big and LSME participating operators" only, which the docs already say.
  • GOV.UK. The written statement of 29 October 2024 says "funding of over £150 million" for the £3 cap through December 2025. The statement of 22 July 2026 says £2 in England outside London from 1 January to 31 December 2027, "backed by £400 million of extra government funding". The £3 guidance (updated 19 August 2026) says £3 continues to the end of 2026. fares/cap.yaml matches all three.
  • Fit. scripts/fit_bus_cap_savings.py runs in about 14 seconds and returns the committed table (0.55/0.30/0.15 at £1.65/£2.21/£3.87, loss 0.322). Each fact matches the PR body.
  • Tests. The gov/dft YAML tests pass (42). The bus, fiscal-year, dated-reform, parameter-description, parameter-metadata, uprating, scenario-baseline and removed-parameter Python tests pass (339 passed, 1 skipped).
  • Base against head, one South East fare-paying passenger, 100 trips, 0.70 singles:
    • Baseline 2024-25 to 2028-29: £174.85, £218.42, £203.09, £174.97, £218.42 on base, and £174.85, £196.87, £196.23, £193.65, £224.39 on head. Both match the PR table.
    • In 2025-26, with no cap, £3 and £2 for the whole year: £218.42, £218.42 and £174.85 on base, and £208.70, £196.87 and £178.33 on head. A £3 cap now binds.
    • Calculating local_bus_uncapped_single_fare first does not make the formula skip the table (the #2307 concern), so a cached default is not taken for a supplied fare.

Findings

  1. should: the BUS0415a link now serves a revised release. local_bus_fares_index.yaml:16, uncapped_single_fares/fare.yaml:17 and uncapped_single_fares/share.yaml:16 cite .../6a310ac715f2a70fac7e6006/bus0415.ods as the release to March 2026. That URL now returns a 301 to .../6aaa829244ec1aa417346b51/bus0415.ods, the 16 September 2026 release. That release revises the last two quarters and adds June 2026:

    Quarter Area In this PR (June release) Live file (September release)
    Dec 2025 England outside London 214.3 214.1848 [r]
    Mar 2026 England outside London 217.9557 216.9745 [r]
    Mar 2026 Scotland 234.6833 233.6138 [r]

    So anyone who follows the reference gets numbers that do not match the YAML. Keeping the June vintage for Microcosm parity is fine (the PR body says why). Please name the vintage in the reference title ("June 2026 release") and point the href at a copy that will not change, either the Wayback snapshot (web.archive.org/web/20260619124752/https://assets.publishing.service.gov.uk/media/6a310ac715f2a70fac7e6006/bus0415.ods) or the copy Microcosm vendors.

  2. should: report the 2024-25 fare cap grant check. BUS05bi puts 2024-25 fare cap support at £515.693m. That is the figure #2140 calibrated the £2.748 fare to. Under the new table, 2024-25 (270 days at £2 and 95 at £3, 2024-25 prices, 0.70 singles, 1,331m fare-paying boardings) implies about £268m, roughly half. Issue #2542 calls this figure "a check, not an anchor". Neither the docs fit table (docs/engineering/bus-fares.md:182-190) nor the PR body reports what the check gives. Leaving it out is defensible: the 2023-24 grant, the £150m and the £400m all point to a full year at £2 costing near £0.3bn, not £0.6bn. But it is the benchmark year's own published figure, and part of why the headline moves from £0.70bn to £0.36bn. Please add it as a row, marked as not fitted, with the implied £268m and the reason.

  3. should: say how the £400m is read. fit_bus_cap_savings.py:72-75 treats the £400m as £2 against no cap (the table gives £411.6m). The statement calls it "£400 million of extra government funding" for a scheme that "will replace the existing £3 fare cap". The £3 scheme is only funded to December 2026, so £2 against no cap is a fair reading. If the £400m is instead on top of a continued £3 cap, the matching figure is £2 against £3, which the table puts at about £247m, 38% below target. Please state the reading in the script comment at line 34 and in the docs, so the next fit does not flip it by accident.

  4. nit: the aggregate impact check does not test this change. The CI comment reports "No change in any year" on enhanced_frs_2024_25. On main, report_spec.yaml lists no bus measure, and no variable reads bus_fare_spending or person_bus_fare_spending apart from each other. So the job would show no change whatever this PR did to bus fares. The real check is the parity run in microcosm#1331. One sentence in the PR body would stop anyone reading "0 moves" as evidence.

  5. nit: the national table and areas with their own lower caps. docs/engineering/bus-fares.md:122-123 already says local lower caps need caller-supplied fares. Because the table is fitted to national grants and applied the same way in every English region outside London, a national cap reform will overstate savings where a combined authority already runs its own lower single fare, and understate them elsewhere. National totals are fine. Regional and distributional outputs move the wrong way. Please add a sentence there saying so, as dashboards split these results by region.

  6. nit: CPI applies to capped fares after the last published quarter. After March 2026 the index grows with CPI. That includes fares held at £3 by the cap, while the cap term (person_bus_fare_spending.py:101-112) is measured against a nominal £3. In 2028-29, with no cap, the high band is priced at about its CPI-uprated fare plus £3 × (CPI growth since 2026). That is roughly 1% of the outside-London yield, so it is small. A line in the docs is enough.

Smaller points, no action needed:

  • local_bus_uncapped_single_fare no longer has a formula, so calculate returns 0 where nothing is supplied (variables/gov/dft/local_bus_uncapped_single_fare.py). The docstring says it is optional. Anyone reading the variable directly may still take the 0 for a fare.
  • Three bus fare indices now sit side by side: fare_index and prior_law_fare_index (neutral reform levers, both 1) and local_bus_fares_index (published). #1869 asked for the current-law published series under fare_index. The new name and the "do not reuse" note in the issue settle that. A cross-reference in the fare_index.yaml description would help.

Overlap and merge order

  • No other open PR touches gov/dft/bus or the bus variables.
  • #2308 (supplied_inputs.py), #2536 (uprating_indices.yaml) and #2490 (utils/parameters.py) touch files this PR adds one entry to. Any conflicts should be one-line conflicts.
  • The removed parameters (gov.dft.bus.reference_year, gov.dft.bus.uncapped_single_fare) are not used by the bus-fare-cap or free-childcare-reform analyses. bus-fare-cap applies its own all-ticket reduction to reported household spending, so its results do not change.

PR body: the Reproducer: and axiom: n/a lines, both changelog fragments and green CI at head are all present.

🤖 Generated with Claude Code

…es out

- Name the June 2026 release in the BUS0415a references and point them at
  the archived copy. The DfT address now serves the September 2026 release,
  which revises the last two quarters. Record the file's sha256.
- Report the 2024-25 fare cap grant (GBP 515.69m) as a check the fit does not
  target. The table puts it at GBP 268.5m; the docs give the reason, and the
  script prints it.
- State that the GBP 400m for 2027 is read as GBP 2 against no cap. Against a
  continued GBP 3 cap the table gives GBP 247.3m, which the script also prints.
- Document that the CPI projection also raises fares held at the GBP 3 cap
  (0.4% of the outside-London yield in 2027-28, 0.8% in 2028-29). Reform
  costs do not move, since both runs share the reference.
- Document that the national table misplaces cap savings between regions
  where combined authorities run their own lower fares.
- Say that local_bus_uncapped_single_fare reads 0 where nothing is supplied,
  and point fare_index at local_bus_fares_index.

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

Copy link
Copy Markdown
Collaborator Author

@vahid-ahmadi thanks. All six are addressed in 6a4192d, and the PR body is updated.

  1. The BUS0415a references now name the June 2026 release and point at your Wayback snapshot, which serves the 23,434-byte June file. local_bus_fares_index.yaml records its sha256 and notes that the September release revises the last two quarters. We keep the June vintage until Microcosm moves with it.
  2. The 2024-25 grant is a row in the docs fit table, marked not fitted (£515.69m published, £268.5m from the table), with the reason. The script prints it beside the fitted facts.
  3. The script comment and the docs now say the £400m is read as £2 against no cap. The script also prints the other reading, £2 against a continued £3 cap: £247.3m, 38% below.
  4. The PR body now says the aggregate impact report has no measure that reads bus fare spending. The test of the totals is the parity run in microcosm#1331.
  5. The caps section now says regional and distributional splits of a national cap reform lean the wrong way where combined authorities run their own lower fares. National totals hold.
  6. Documented with sizes: 0.4% of the outside-London yield in 2027-28 and 0.8% in 2028-29, about 0.3 points more each year after. Cap reform costs don't move, since both runs share the reference.

Also, local_bus_uncapped_single_fare now says it reads 0 where nothing is supplied and that this 0 is not used as a fare, and fare_index.yaml points to local_bus_fares_index.

🤖 Generated with Claude Code

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juaristi22, thanks. All three shoulds and all three nits are fixed in 6a4192db8, and I found nothing new at must or should level, so I'm approving.

Re-reviewed the delta b0968773..6a4192db8 (7 files: the docs, the three BUS0415a references, fare_index.yaml, the variable docstring and the fit script).

Earlier findings

  1. should, BUS0415a vintage: Fixed. The three references now say "June 2026 release (archived copy)" and point at the Wayback snapshot. I downloaded it: 23,434 bytes, sha256 04721e9a…c7adf, the same as the comment in local_bus_fares_index.yaml. Its cover sheet says "Last updated: June 2026, Next update: October 2026". All 39 YAML values match its BUS0415a sheet, including the unrounded March 2026 cells. The old DfT address still redirects to the September file (24,111 bytes, "Last updated: September 2026"), as the new note says. The PR body's figures for that release (England +2%, London 0%, Scotland +5% in the year to June 2026) match the file, to rounding.
  2. should, 2024-25 grant: Fixed. It is now a docs table row marked not fitted (£515.69m published, £268.5m from the table), and the script prints it. The new supporting numbers match DfT's tables:
    • Grant per fare-paying boarding rose 78%: £515.693m / 1,331.4m against £278.951m / 1,281.2m (BUS05bi, BUS01).
    • Receipts per fare-paying boarding rose 2.8%: £2,069.95m / 1,331.4m against £1,936.89m / 1,281.2m (BUS05ai passenger fare receipts, England outside London).
    • The index rose 6.7% on the mean of the four quarter ends (178.0 to 189.9). On the model's day-weighted blend it is 6.8% (178.11 to 190.23). Either works.
  3. should, reading of the £400m: Fixed. The script comment, the docs and the PR body now read it as £2 against no cap and give the other reading too (£247.3m, 38% below). The script prints both.
  4. nit, aggregate impact check: Fixed. The PR body now says the report has no measure that reads bus fare spending, and points to microcosm#1331.
  5. nit, combined authorities' own lower caps: Fixed. docs/engineering/bus-fares.md:136-140.
  6. nit, CPI on capped fares: Fixed. docs/engineering/bus-fares.md:96-102. I recomputed the sizes as 0.70 singles × 0.15 high-band share × £3 × CPI growth since March 2026, over the outside-London yield. That gives 0.44% in 2027-28, 0.78% in 2028-29 and 1.1% in 2029-30, in line with the docs. The point that cap reform costs don't move is right too: both runs share reference_fares and the index.

The two smaller points are also done: the docstring for local_bus_uncapped_single_fare now explains the 0, and fare_index.yaml points to local_bus_fares_index.

Re-run at 6a4192db8

  • scripts/fit_bus_cap_savings.py still returns the committed table (0.55/0.30/0.15 at £1.65/£2.21/£3.87, loss 0.322) with the same fitted facts. The two new lines print £268.47m and £247.29m, which match the docs and the PR body. The share and fare values are unchanged in the delta.
  • The gov/dft YAML tests pass (42). The bus fare, parameter description and parameter metadata Python tests pass (49). The delta changes no values or formulas, so I didn't re-run the wider set from last round. CI covers it.
  • The head merges cleanly with main (7cbdc2b9). No other open PR touches the bus parameters, variables or docs, and #2308, #2536 and #2490 are still open, with the one-line overlaps noted last round.
  • CI at head is green, including all four Python shards and the aggregate impact job.

🤖 Generated with Claude Code

@juaristi22
juaristi22 marked this pull request as ready for review October 21, 2026 13:11
@juaristi22
juaristi22 added this pull request to the merge queue Oct 21, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a manual request Oct 21, 2026
@juaristi22 juaristi22 reopened this Oct 21, 2026
@juaristi22
juaristi22 enabled auto-merge October 21, 2026 14:02
@juaristi22
juaristi22 added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit 4de0922 Oct 21, 2026
34 of 35 checks passed
@juaristi22
juaristi22 deleted the bus-fares-index-cap-savings-2542 branch October 21, 2026 17:15
juaristi22 added a commit to PolicyEngine/microcosm that referenced this pull request Oct 21, 2026
María's ruling of 2026-10-21 replaces the calendar-year basis of
2026-09-10: the 2025 England and London fare-receipt rows move from
2024-25 as the engine's model year does. Each area's BUS0415a quarter-end
index is in force from the start of the quarter it closes and is
day-weighted over 6 April to 5 April, as policyengine-uk reads
gov.dft.bus.local_bus_fares_index (fiscal_year_blend,
PolicyEngine/policyengine-uk#2546). London and England outside London
move by their own series and England's receipts move as their sum, as
the engine prices each area by its own index. On the June 2026 release
England's factor is 1.0763 (1.0570 on the calendar basis) and London's
1.0000086.

The bus parity receipt also ties each area's factor to the engine's
index ratio (its measurement year over its benchmark year), and the
engine test holds the tie within 0.1% at the locked engine. The target
references are unchanged; the membership and the national compile-parity
receipts re-derive from the pinned feed, the two fare rows only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22 added a commit to PolicyEngine/microcosm that referenced this pull request Oct 22, 2026
María's ruling of 2026-10-21 replaces the calendar-year basis of
2026-09-10: the 2025 England and London fare-receipt rows move from
2024-25 as the engine's model year does. Each area's BUS0415a quarter-end
index is in force from the start of the quarter it closes and is
day-weighted over 6 April to 5 April, as policyengine-uk reads
gov.dft.bus.local_bus_fares_index (fiscal_year_blend,
PolicyEngine/policyengine-uk#2546). London and England outside London
move by their own series and England's receipts move as their sum, as
the engine prices each area by its own index. On the June 2026 release
England's factor is 1.0763 (1.0570 on the calendar basis) and London's
1.0000086.

The bus parity receipt also ties each area's factor to the engine's
index ratio (its measurement year over its benchmark year), and the
engine test holds the tie within 0.1% at the locked engine. The target
references are unchanged; the membership and the national compile-parity
receipts re-derive from the pinned feed, the two fare rows only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bus fares: follow published fares by area and year, and price cap changes from DfT cap savings instead of one uncapped fare

2 participants