Per-council variables this dataset yields. All file paths are relative to data/.
Council identity is a free-text name only (col1 in the EFS files, council in the s114 file) — no GSS/E-codes — so joining to sibling datasets requires name matching.
efs-<year>.csv, stacked in efs-all-years.csv) have columns year, table_index, col1, col2 (the stacked file pads to col5, always empty). col1 = local authority name, col2 = amount as free text (e.g. £55.7m (support agreed in-principle), Council provided with in-principle support but withdrew its request). Amounts must be regex-parsed; some rows carry revision notes (£405.7m (from £491.1m ...)).col1 = "Local authority" — drop these.table_index matters: table 0 is the main per-council list for that year. In efs-2024-25.csv and efs-2025-26.csv, tables 1–2 are additional per-council rows (Norfolk; Lambeth; South Yorkshire MCA police functions). In efs-2026-27.csv, table 2 is not per-council: col1 holds financial years — it is Birmingham City Council's amended prior-year support profile. Exclude it from per-council extraction (or attribute all its rows to Birmingham with the year taken from col1).s114-notices-compiled.csv is hand-compiled and unofficial (no government register exists): columns council, notice_date, section, notes, source; 10 notices, 8 councils, 2018-02-02 to 2023-11-29. Coverage after Nov 2023 unconfirmed. Treat as indicative, not authoritative.| Variable | File / column (verified) | Unit | Interpretation |
|---|---|---|---|
efs_awarded_in_year |
efs-<year>.csv (or efs-all-years.csv filtered on year): council in col1, presence of a non-header row |
boolean per council-year | Council was granted (or requested) Exceptional Financial Support that year — an official distress flag; a bailout in all but name. |
efs_amount_in_year |
same rows, amount regex-parsed from col2 (£X.Xm pattern; latest figure when a (from £Y ...) revision note is present) |
£ million per council-year | Size of capitalisation support agreed in principle. Not necessarily drawn down; some entries are HRA support or withdrawn requests (Bexley 2020-21) — the free text says which. |
efs_withdrawn_or_conditional |
same rows where col2 has no parseable £ figure or carries qualifying text |
boolean / text | Requested but withdrew, or support conditional/in-principle only. |
efs_years_count |
efs-all-years.csv: count of distinct year values per col1 council |
count (0–7) | Years on EFS, 2020-21 to 2026-27. Repeat appearances signal chronic rather than one-off distress. |
efs_first_year |
efs-all-years.csv: min year per council |
financial year | When distress first became official. |
efs_cumulative_amount |
sum of efs_amount_in_year over years per council |
£ million | Total EFS agreed in principle across 2020-21..2026-27. Sum latest revised figures; exclude the 2026-27 table 2 restatement or double-counting of Birmingham results. |
s114_issued |
s114-notices-compiled.csv: council appears in council |
boolean | Council's s151 officer declared the budget cannot be balanced — effective bankruptcy. Hand-compiled, unofficial list. |
s114_count |
same file: rows per council |
count | Number of notices (Croydon 3, Northamptonshire 2, others 1). |
s114_dates / s114_first_date |
notice_date column (ISO dates) |
date(s) | When distress was declared; section is s114(3) throughout; notes gives the reported cause (equal pay, investment losses, ...). |
Only inputs verified to exist are used. Sibling references: dataset 01-revenue-outturn (research/datasets/01-revenue-outturn/data/RSX_LA_Data_2024-25_data_by_LA.ods etc.) provides per-council revenue expenditure; join is by council name.
| Variable | Formula | Inputs | Unit | Interpretation |
|---|---|---|---|---|
efs_share_of_revenue_spend |
efs_amount_in_year / net_revenue_expenditure |
this dataset + revenue expenditure from 01-revenue-outturn (RSX/RS outturn by LA), matched year |
ratio (%) | Scales the bailout to council size: £40m is existential for a district, marginal for a county. |
cumulative_efs_share_of_spend |
efs_cumulative_amount / net_revenue_expenditure (latest year) |
as above | ratio (%) | Depth of accumulated dependence on exceptional support. |
efs_ever |
efs_years_count > 0 |
this dataset | boolean | Any official EFS distress flag, any year. |
formal_distress_flag |
efs_ever OR s114_issued |
this dataset | boolean | Union of the two official/reported distress signals. s114 component is from the unofficial hand-compiled list. |
distress_severity_score |
e.g. 2*s114_count + efs_years_count (ordinal, tunable) |
this dataset | ordinal score | Ranks councils by breadth of formal distress; s114 weighted above EFS since it is the harder signal. |
efs_trajectory |
sign of efs_amount_in_year(t) - efs_amount_in_year(t-1) for councils with ≥2 EFS years |
this dataset | −/0/+ | Whether reliance on exceptional support is growing or shrinking. |
s114_to_efs_transition |
s114_issued AND efs_years_count > 0, with efs_first_year vs s114_first_date ordering |
this dataset | boolean | Councils whose bankruptcy was followed by the EFS regime (post-2020 s114s have largely been substituted by EFS). |
SOURCE.md re-download script).One file per variable in variables/:
efs_awarded_in_yearefs_amount_in_yearefs_withdrawn_or_conditionalefs_years_countefs_first_yearefs_cumulative_amounts114_issueds114_counts114_dates / s114_first_date