NEWS


obr 0.5.0

Full EFO detailed-forecast-table coverage (39 of 39)

This release closes the v0.3.x feedback that "the range of forecast lines was fairly limited" by exposing every detailed-forecast table in the EFO Aggregates and Economy workbooks. v0.4.x exposed 4. v0.5.0 exposes all 39: 35 via standard layout parsers, 2 via bespoke layout parsers (subsector_matrix for Table 6.4, quarterly_indented for Table 6.10), and 2 via cross-reference auto-follow to the previous EFO vintage (Tables 6.11 and 6.15, which OBR redirects to Tables 6.2 and 6.5 of the November 2025 EFO).

New: get_efo_table() and obr_efo_catalogue()

get_efo_fiscal() and get_efo_economy() are now thin wrappers over the dispatcher and continue to work unchanged. Series names for the single-series Economy tables (output gap, nominal GDP, electricity price) are preserved via internal overrides so v0.4.x scripts still match.

New layouts handled

The dispatcher routes each table to one of:

Classifier hardening

Tightened classify_metric_type() so the v0.5.0 expanded coverage tags each row correctly:

obr 0.4.0

Breaking: standard tidy long schema for the EFO / PFD / HFD / WTR / FSR functions

This release standardises the columns returned by the data-fetching functions backing the Public Finances Databank (PFD), Economic and Fiscal Outlook (EFO), Historical Forecasts Database (HFD), Welfare Trends Report (WTR), and Fiscal Risks and Sustainability Report (FSR) so they can be rbind()'d, joined, plotted, and reasoned about the same way regardless of which OBR publication produced them. Driven by feedback from Ben Northcott (Office for Budget Responsibility) on the v0.3.x release.

The Forecast Revisions Database (get_forecast_revisions()) and Policy Measures Database (get_policy_measures()) keep their existing multi-dimensional schemas in v0.4.0; migrating them to the standard schema is queued for a later release.

All long-format outputs from the EFO / PFD / HFD / WTR / FSR functions now share the columns:

get_forecasts() adds forecast_date as a leading column. get_pension_projections() adds scenario_type as a trailing column.

Migration

| Old column | New column | |------------|-----------| | year, fiscal_year | period (with period_type to disambiguate) | | value_bn, psnb_bn, psnd_bn, tme_bn | value (with unit = "gbp_bn") | | pct_gdp (FSR pension projections) | value (with unit = "pct") | | scenario (FSR) | series |

get_psnb(), get_psnd(), get_expenditure() now return the standard long schema and tag rows with series = "PSNB", "PSND", "TME" respectively rather than collapsing the value into a series-named column.

CPI Index vs YoY split (the headline fix)

In v0.3.x, calling get_efo_economy("inflation") returned CPI Index values (~135) and CPI YoY growth values (~2.1) in the same value column with no machine-readable distinction between them. v0.4.0 tags every row with a metric_type ("index" for index levels, "yoy_pct" for growth rates, "pct" for shares, etc.) and a matching unit, so callers can filter or facet on metric type directly.

This is the v0.4.0 fix for the bug Ben Northcott raised on 2026-04-29: "If I pull e.g. the CPI forecast the index value and the YoY growth rate appear in the same 'value' column. Probably an additional column in long format indicating YoY or Index would be useful."

New helpers

Constants

New: workflow helpers

Both helpers feed naturally into the kind of forecast-evaluation tables the OBR's own Forecast Evaluation Report uses.

New: vignette

obr 0.3.0

New: provenance metadata on every returned object

New: vintage layer for reproducible analysis

New: Policy Measures Database

New: fiscal rules reference

New: Forecast Revisions Database and forecast panel

Breaking-ish changes

URL resolution and reliability

Parser robustness

Documentation

obr 0.2.5 (2026-04-14)

obr 0.2.4 (2026-03-17)

obr 0.2.3

obr 0.2.2 (2026-03-12)

obr 0.2.1

obr 0.2.0

New datasets

Economic and Fiscal Outlook (EFO)

Welfare Trends Report (WTR)

Fiscal Risks and Sustainability Report (FSR)

obr 0.1.0