Repository navigation
Description
Summary
Outside London, the stage makes only people eligible for the older-person concession, and children under 5, travel free. But its yield removes all concessionary journeys.
assign_bus_pass_eligibilityflags older-person eligibility (State Pension age, 66) and under-5s outside London.price_bus_journeysandprice_bus_supportdivide by BUS01c total concessionary journeys: 519.1m in 2024-25. Of these, 402.8m are older and disabled journeys and 116.3m are other concessions.- So about 99m boardings that the yield removes as concessionary are priced as fare-paying.
- The declaration's basis says disabled passes and child half-fares "are absorbed by the yield". The yield cannot absorb them, because its denominator already excludes them.
On the certified build (microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71, built from 810315ac), model year 2024:
- Eligible boardings outside London are 420m, against 519m in C.
- Fare-paying boardings are 1,417m, against 1,331m published (+6.5%).
- Other-local-bus fares of residents outside London are £2,210m, against BUS05ai £2,070m (+6.8%). This holds in policyengine-uk 2.132.6 and in 2.152.7.
- Support: the reimbursement per concessionary boarding is £630.6m / 519.1m = £1.215. The stage applies it to 420m eligible boardings.
Why now: since #1324, the national calibration measures the England fare-receipt rows through the engine at 2025. With this gap, the next build will meet the England row by moving weight off fare-paying riders.
Existing issues. None is open. #930, #1207 and #1331 (closed) built and moved the pricing. #1095 tracks uk-data defects and does not cover this.
All figures below are published DfT figures or weighted totals and shares at nation or region level.
What the other concessions are
National Travel Survey (SN 5340), 2022 to 2024, residents of England outside London, other-local-bus boardings weighted by W5 × JJXSC × NumBoardings. Boardings are classed by SpecialTicket_B01ID, as clean_nts_travel_tables classes them:
- People outside the free flag ride on a concession for 12.0% of all boardings:
- scholar's passes, 6.9% (mostly ages 5 to 20);
- disabled person's passes, 2.8%;
- other concessionary tickets, 1.7%;
- older-person passes held before eligibility, 0.6%.
- People outside the flag ride free with no ticket for a further 1.9% of boardings.
- People inside the flag pay a fare or use a season ticket for 1.2% of boardings.
Each share rests on at least 10 unweighted boardings and 10 people. The full cross-tabulation stays in the licensed area.
London's rule (60 and over, or under 18) matches London's total concessionary count: 504m eligible boardings against 498m. So London is not affected.
Changes
1. Near term, with PolicyEngine/policyengine-uk#2640 (option A there).
- Set the England-outside-London
concessionaryselector tojourney_category: elderly_disabled_concessionaryin all three places it appears:price_bus_journeys(uk/spec/sources.yaml:3676);price_bus_support's pricing area (:4110);price_bus_support's support area (:4199).
- Update the eligibility basis (
:3225). The other concessions are absorbed by the yield. Disabled pass holders are not yet flagged. - The yield outside London becomes £1.430. The reimbursement per concessionary boarding becomes £630.6m / 402.8m = £1.566.
- On the certified build's weights, fares outside London move from +6.8% to about −1.8% against BUS05ai.
- Run the usual pin pass: stage hash, coverage manifest, H2 fixture and digests.
bus_engine_parityholds once the engine release is locked.
2. Then, one of these two:
- (B) Flag disabled pass holders from the FRS. The build carries
pip_m_category,dla_m_categoryandis_blind. A broad rule (PIP mobility standard or enhanced, DLA higher mobility, or blind) flags 2.33m people aged 5 and over in England who are not already free. DfT counts about 1.0m disabled passes (11% of 8.9m). So the rule needs to be narrower, or needs a take-up step checked against DfT's pass counts and the NTS disabled-pass share. - (D) Impute each person's concessionary share of boardings from the NTS ticket types. Impute it by series, residence group, frequency band and age band, as
local_bus_single_fare_shareis imputed, and keep C at the total. This needs the engine input in Bus fares: outside London the yield removes all concessionary journeys, but bus_pass_eligible makes only older-person eligibility and under-5s free policyengine-uk#2640 option D. Scholar's pass eligibility depends on distance to school, which the FRS does not carry, so a share fits better than a flag.
Not in this issue
- London, Scotland, Northern Ireland and Wales.
- The lowest frequency band (UK bus travel: the lowest frequency band gives about half the population trips, so incidence counts are about double #1386).
Related
#930, #954, #1207, #1324, #1331. PolicyEngine/policyengine-uk#1871, PolicyEngine/policyengine-uk#2546, and the companion issue PolicyEngine/policyengine-uk#2640. Found while checking PolicyEngine/bus-fare-cap#12.
Activity
juaristi22 commentedon Oct 24, 2026
The companion model fix is in PolicyEngine/policyengine-uk#2641. Its review also flagged the eligibility
basisinpackages/microcosm-build/src/microcosm/build/uk/spec/sources.yamlfor the near-term selector update here.Please replace the statement that "disabled passes and child half-fares are absorbed by the yield". With
elderly_disabled_concessionaryas the denominator selector outside London, youth-scheme journeys remain priced and their discounts enter the average yield; disabled-pass journeys are excluded from that denominator, but their holders are not yet flagged. The revised basis should state that residual explicitly, along with the separate under-5 mismatch.The existing issue's measured comparison holds the certified build's weights fixed: outside-London fares move from 6.8% above BUS05ai to about 1.8% below it. The model documentation attributes those figures to this issue and names the build; this review round has not rerun the population calculation.
The existing selector changes, engine lock, stage hashes/fixtures and
bus_engine_parityfollow-up remain required before certifying a new build against the engine release.vahid-ahmadi commentedon Nov 6, 2026
Plan review at main
f44512d. Change 1 is on main through #1419:uk/spec/sources.yamluseselderly_disabled_concessionaryat:4318,:5123and:5212, and the basis at:3728now reads as the 24 Oct comment asks. So this comment covers only change 2, option B, which I checked against the statute and DfT's eligibility guidance.Should
Option B's rule should be anchored to DfT's automatic test, which a mobility rate cannot identify. The statutory test is the seven limbs of "disabled person" in Transport Act 2000 s146 (a) to (g). DfT's guidance (Assessing eligibility of disabled people for concessionary bus travel, updated 1 April 2025) gives automatic eligibility for:
A PIP mobility award at either rate can rest wholly on "Planning and following journeys" points, which do not qualify. "Communicating verbally" belongs to the daily living component, so the mobility rate misses it. Failure case: a person with standard mobility from planning points alone is flagged free under the broad rule but is not automatically eligible, while a person with 8 points on communicating verbally and no mobility award is eligible but not flagged. The FRS carries rates (
pip_m_category), not points, so narrowing the PIP side cannot reproduce the test. Suggested fix: write the rule as DLA higher mobility, PIP enhanced mobility andis_blindas the core. Treat the rest as a take-up or share step, and state in the basis that it stands in for the points test.Match the pass-count check to the stage's area. The about 1.0m is 11% of England's 8.9m older and disabled passes, which includes London's 1.2m (Concessionary Travel Statistics, year ending March 2025). The 2.33m flagged figure is also England-wide. Change 2 applies outside London only, so both sides of the take-up check should use the metropolitan and non-metropolitan rows of DfT's pass tables, without London's disabled Freedom Passes.
🤖 Generated with Claude Code