Skip to content

Add a dashboard for the targeted energy discount results - #2

Merged
juaristi22 merged 20 commits into
mainfrom
targeted-energy-discount-dashboard
Sep 25, 2026
Merged

juaristi22 merged 20 commits into
mainfrom
targeted-energy-discount-dashboard

Conversation

@juaristi22

@juaristi22 juaristi22 commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

This PR adds a static dashboard that presents the pre-computed results from #1: the reach, cost and distribution of the Resolution Foundation's targeted energy discount options, the baseline they act on, and PolicyEngine's estimates beside the report's published figures. It is built on the template of PolicyEngine's published UK dashboards (the same shell as the electricity VAT cut dashboard). #1 (the reform and analysis) is merged, and this PR now targets main.

Live: https://uk-targeted-energy-discount.vercel.app (redirects to /uk/targeted-energy-discount).

Changes

  • dashboard/: Next.js 14 (App Router), React 18, Tailwind 3 with @policyengine/design-system tokens, Recharts and bun, following the published dashboards' layout.

    • It uses their header, footer, tab shell with ?tab= links, section and metric cards, and chart logo.
    • It is path-mounted at /uk/targeted-energy-discount for the policyengine.org multizone, with a redirect from / for the bare deployment URL. The canonical and Open Graph tags point at the policyengine.org path.
  • Controls:

    • option: flat £175, tiered £220 / £85, tiered with passported households on their own income, household-income test, or passporting only;
    • support amounts: RF's amounts, scaled to £2bn, or bill share;
    • year: 2026-27 or 2027-28.

    The page shows the Microcosm dataset. The export also carries the Enhanced FRS, and ?dataset=efrs_1573 switches every tab to it for internal use.

    2026-27 is the default. It runs from April 2026 to March 2027, so it contains January–March 2027, the winter the report proposes; 2027-28 is the following winter.

  • Tabs:

    • Targeted energy discount. This tab has:
      • headline cost, recipients, average support and change in relative poverty;
      • gains by income decile (pounds, % of income or share receiving);
      • winners and losers, overall and by decile;
      • inequality: Gini before and after housing costs, and the top-10% share;
      • the relative change in poverty by age group for each poverty measure (horizontal bars), with the full table behind a toggle.
    • Reach and targeting. Each group (households in absolute or relative poverty, the four lowest income deciles, energy above 10% of income) gets a bar titled with the group's size and the households that get nothing, with its parts labelled in place. The bar splits households into those passported by a benefit, those qualifying through the income test alone, and those who get nothing.
    • By region and household type: labelled eligibility bars, and a table with the passported and income-test-only rates, cost share, gains, households reached and not reached, and effective sample sizes.
    • Income cut-offs: households within £1,000 of each line, the drop in support, and dead zones. Thin samples are flagged per cut-off from the data.
    • Your household. Enter a region, each adult's taxable income, children, benefits and the energy bill, then press Calculate to get the discount under every option and set of amounts, with an explanation of why the household does or does not qualify. The JavaScript calculator mirrors the reform's variables. bun run test checks 78 cases computed with policyengine-uk: the amount under each option, and the eligibility route, tested income and explanation sentence.
    • Baseline and comparisons. This tab covers:
      • GB households, bills (by decile, and sorted by region, household type and tenure) and the two eligibility routes before the scheme;
      • what the data record about energy;
      • a table setting the model beside published figures, with links: ONS and DESNZ household counts, Warm Home Discount rebates, the Ofgem cap, ONS Family Spending, the DESNZ gas grid and fuel poverty statistics, and HBAI poverty rates;
      • the Resolution Foundation's shares beside PolicyEngine's on a dot plot with a 0–100% axis, every figure the report publishes (behind a toggle), and the figures not reproduced.
    • Methodology: the proposal as modelled, including what the three sets of amounts mean. It then covers eligibility, how impacts are measured, years and data, and what the model leaves out, with the commands to reproduce the results.
  • Data caveats shown in the page:

    • the Enhanced FRS household total;
    • a warning on Enhanced FRS with bill share (14% of its households have no electricity spend and get nothing);
    • thin-sample flags at each cut-off;
    • energy spend is held at each dataset's stored price level (about the same for both), which sits below this winter's Ofgem cap. With bill share selected, a note gives each dataset's gap to the October–December 2026 cap and the rate that would match RF's averages at those prices.

    Numbers in the prose are read from the data, not typed in.

  • Data: dashboard/public/data/targeted_energy_discount_results.json and calculator.json are generated by uv run uk-energy-reforms export-dashboard from analyses/rf-billing-me-softly. They hold aggregate estimates and synthetic household cases only.

  • Charts:

    • The standard impact charts use ports of @policyengine/ui-kit's PEWinnersLosersChart and PEImpactBarChart, with the same colours, ordering, tooltips and axes as policyengine.org: winners and losers, gains by decile, and poverty change. They are in dashboard/src/components/charts/.
    • There are two small departures, commented in the code. The impact chart's axis runs to the top nice tick, so the tallest bar's label is not clipped. The winners legend moves under the bars on phones.
    • Every single-series chart uses PE chart-1 teal. Two-category splits (reach, region and household type, cut-offs) use the winners chart's dark teal (chart-3) with teal-400, so the page stays in one hue family. The pair separates well for normal and colour-blind vision (ΔE 25); the dataviz validator flags the dark teal as low-chroma, so these splits carry direct labels and a legend.
    • The poverty, bills and cut-off charts are horizontal, like the winners, reach and breakdown charts. The poverty chart plots the fall in each group's rate, so its bars run left to right.
    • Tables under charts are collapsed behind a "Show the numbers" toggle.
  • Deployment: dashboard/vercel.json pins the Next.js preset and the bun commands. The Vercel project uk-targeted-energy-discount (policy-engine team) is connected to this repository, with root directory dashboard and production branch main.

  • CI: the dashboard job runs bun install --frozen-lockfile, bun run lint (ESLint, next/core-web-vitals), bun run test and bun run build.

Testing

  • bun run lint is clean. bun run test passes 156 tests: amounts and eligibility routes for 78 calculator cases, against policyengine-uk. bun run build compiles and prerenders the page statically.
  • Checked in a local preview:
    • every tab renders with no console errors;
    • switching the option, amounts, year and dataset updates the results;
    • at 375px wide there is no horizontal page scroll.

Notes

  • Until this PR reaches main, Vercel builds of main fail with "Root Directory does not exist", because main has no dashboard/ yet. That check is not required, and those failed builds do not replace the production deployment.
  • Not done: the multizone rewrite in policyengine-app-v2 that serves the dashboard at policyengine.org/uk/targeted-energy-discount.

🤖 Generated with Claude Code

juaristi22 and others added 3 commits September 24, 2026 11:45
A static Next.js page (Tailwind v4, @policyengine/ui-kit 0.4.0, Recharts)
reading pre-computed results exported by `uk-energy-reforms export-dashboard`.
It lets readers pick the option (flat, tiered, tiered with passported
households on their own income, household-income test, passporting only),
the support amounts (RF's, scaled to £2bn, unit rate) and the dataset, and
shows cost and reach, gains by decile, poverty, coverage of struggling
households, breakdowns by region and household type, income-threshold
cliffs, and PolicyEngine's estimates beside the Resolution Foundation's
published figures. Path-mounted at /uk/targeted-energy-discount for the
policyengine.org multizone. CI lints and builds it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22 added a commit that referenced this pull request Sep 24, 2026
- Rename the unit-rate schedule to a bill-share discount (parameters, CLI
  flag, results keys, docs): it discounts annual gas and electricity spend,
  standing charges included, not pence per kWh, because the microdata carry
  no kWh. State the departure and record the calibrated rates.
- Say that brackets paying the same amount share one rate, so averages
  match across them combined, not per bracket.
- Dead zones use the top earner's marginal rate: 28%, or 20% when the top
  earner is over State Pension age (no employee NI), and are scaled by the
  equivalisation factor under the household-income test.
- RF family-type comparison rows count benefit units wherever they live and
  use household-weighted deciles, as RF does; household-level values stay
  in `extra`. The write-up explains the remaining gaps.
- Caveat the Enhanced FRS household total (30.7m against 28.6m and RF's
  28m) wherever paired counts appear, and quote cliff figures from
  Microcosm only.
- Drop the unused second_income column and the dashboard/ line from the
  README layout (the dashboard arrives in #2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22 and others added 3 commits September 24, 2026 12:45
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
uk-targeted-energy-discount Ready Ready Preview Sep 25, 2026 9:41am UTC

Request Review

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Review at 67ff3a4b (stacked on #1 at 2b6030c4). Local: bun install --frozen-lockfile needs bun ≥ 1.4 (the lockfile is v2; bun 1.3 refuses it, CI's setup-bun honours packageManager), then bun run lint clean and bun run build prerenders the four routes. dashboard/data/results.json is byte-identical to a fresh export-dashboard from analyses/ on #1's head. Every number I traced from data.ts and format.ts back to the receipts is right, the RF tab's page references match the report, and the methodology tab states the bill-share departure, the three-month assessment and the dead-zone rates. The live page shows the same headlines as the receipts (£2.19bn, 12.54m, 43.9 %, −150k / −20k).

On the benchmarks. Ten of the twelve comparison rows sit within a few points of RF and the gaps are explained by the stated method notes. Two are not: couples with children who lose under the individual test (653k / 676k vs 490k) and their poorest-fifth share (54 / 51 % vs 71 %). I've asked on #1 for the definitional fix (net out passporting; one decile basis). Those rows and the pensioner Microcosm figure will move, so this PR regenerates after #1.

Should fix

  1. Dashboard.tsx:263-266 says the eFRS effective sample is "about 10 households within £1,000 of each line". It is 10.8 at £24k but 76–85 at £18k; only the top line is thin.
  2. eFRS with "Bill share" is served without the README's "set aside" caveat: recipients fall 13.11m → 12.09m because 14 % of eFRS households with zero electricity spend get £0, the average shows £190 not £175, and the £18k mean drop is £334 against £135. Warn or hide the combination.
  3. The breakdown tabs' ShareBars label only the total and breakdownColumns omits the passported / income-test-only rates, so that split has neither a direct label nor a table view; the body's claim holds for the overview bars but not here.

Nits. Hard-coded prose numbers that go stale on regeneration: "7–10 %" (:172, :447), "about 10" (:263), "about 28m in the report" (:447), the 21 % / 9 % multi-family shares (:456-457). Methodology should say the thresholds are held nominal to 2026-27. No OG image. Add a "bun ≥ 1.4" note for contributors.

Requesting changes for 1–2 and the regeneration after #1; the rest can ride along.

juaristi22 and others added 4 commits September 24, 2026 13:52
…G image

- Per-line small-sample warning on the thresholds tab (effective sample below 30)
  instead of a blanket Enhanced FRS note.
- Warn when the Enhanced FRS is combined with the bill share: households with no
  recorded energy spend get nothing, so recipients and averages shift.
- Breakdown tables show the passported and income-test-only rates.
- Household totals, multi-family shares, nominal thresholds and the passporting
  basis in the prose are computed from the data.
- Open Graph image, with metadataBase so its URL carries the base path.
- Note that bun 1.4 or later is needed for the v2 lockfile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Moves the dashboard to the stack and shell of PolicyEngine's published UK
dashboards (Next 14, Tailwind 3 with design-system tokens, the PolicyEngine
header and footer, ?tab= links) and adds what the review asked for:

- a 2027-28 year toggle, keeping 2026-27 (which contains January-March
  2027, the report's winter) as the default;
- a "Your household" tab whose calculator mirrors the reform and is tested
  against policyengine-uk cases (bun run test, now in CI);
- a redesigned reach section: one sentence and one labelled bar per group;
- winners and losers and inequality sections;
- a Baseline tab (bills by group, data coverage, and the model beside
  official statistics and other organisations' figures, with links);
- a Methodology tab setting out every assumption, including that
  policyengine-uk 2.100 does not uprate energy spend.

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

Copy link
Copy Markdown
Collaborator Author

Thanks, Vahid. Addressed at f54cc32, regenerated after #1's round-two fixes, and rebuilt on the published dashboard template as you asked on Slack.

Should fix

  1. Thin samples. The cut-off section reads each band's effective sample from the data and flags any below 30, so the text no longer says "about 10". On the Enhanced FRS that flags the £24,000 line and not the £18,000 one.
  2. Enhanced FRS with bill share. That combination now shows a warning. 14% of the Enhanced FRS's households have no electricity spend and get nothing under a bill share, so recipients fall from 13.11m to 12.09m and the average rises to £190. The warning tells readers to use Microcosm for bill-share results.
  3. Breakdown split. The region and household-type bars now label each segment (passported, income test alone, not eligible), and the table has columns for the passported and income-test-only rates.

Nits. The hard-coded prose numbers are gone: the dataset notes come from the export, and the rest is computed from the data. The methodology says the thresholds are held nominal (the £24,000 test covers 36% / 38% of households in 2026-27 and 35% / 37% in 2027-28). The page has an Open Graph image, and the README has a bun ≥ 1.4 note.

Slack notes

  • Template. The dashboard now uses the published dashboards' stack and shell: Next 14, Tailwind 3 with @policyengine/design-system tokens, the PolicyEngine header and footer, ?tab= links, and section and metric cards. It replaces the ui-kit / Next 16 build.
  • 2027-28. There is a year toggle on every tab. I kept 2026-27 as the default rather than dropping it: it runs from April 2026 to March 2027, so it contains January–March 2027, the winter the report proposes. 2027-28 is the following winter.
  • Household impact. A new "Your household" tab takes a region, each adult's taxable income, children, benefits and the energy bill. It returns the discount under every option and set of amounts, with a sentence on why the household does or does not qualify. The JavaScript calculator mirrors the reform's variables, and bun run test checks it against 78 cases computed with policyengine-uk. CI now runs it.
  • The coverage chart you didn't get. It is now "Who the discount reaches among households that are struggling". Each group, for example households in absolute poverty after housing costs, gets:
    • a sentence, such as "86% get the discount: 46% because they receive a means-tested benefit and 40% through the income test alone. 0.56m households (14%) get nothing.";
    • a bar with the three parts labelled in place;
    • a legend.
  • Methodology tab. It sets out the proposal as modelled, with every option's resolved schedule in a table. It then covers eligibility (passporting basis, taxable income, equivalisation, GB only, annual income, nominal thresholds, full take-up), how impacts are measured, years and data, what the model leaves out, and the commands to reproduce the results.
  • Baseline tab. It shows households, bills overall and by decile, region, household type and tenure, and the two eligibility routes before the scheme, plus what each dataset records about energy. A comparison table sets the model beside ONS and DESNZ household counts, Warm Home Discount rebates, the Ofgem cap, ONS Family Spending, the DESNZ gas-grid and energy-burden statistics, HBAI poverty rates and RF, each with a link and a note on how the definitions differ.
  • Winners, losers and inequality. The main tab has winners and losers, overall and by decile, using PolicyEngine's bands. Nobody loses, because the scheme is unfunded, and the page says so. There are also Gini coefficients before and after housing costs and the top-10% share.

Local: bun run test 78 pass; bun run build clean. In the preview, every tab renders with no console errors and there is no horizontal scroll at 375px.

juaristi22 and others added 2 commits September 24, 2026 16:07
- Winners and losers, gains by decile and the new poverty-change chart use
  ports of @policyengine/ui-kit's PEWinnersLosersChart and PEImpactBarChart
  (same colours, ordering, tooltips and axes as policyengine.org), as the
  dashboard skill requires. Two small departures, commented in the code:
  the impact chart's axis runs to the top nice tick so the tallest label
  is not clipped, and the winners legend moves under the bars on phones.
- Reach bars keep their titles and drop the per-bar sentence.
- Methodology drops the schedule table and explains the three sets of
  amounts in plain terms.
- Baseline and Methodology state the corrected price-level caveat: both
  datasets sit at about the same price level (2024-25 vs April-June 2026),
  and both sit below this winter's cap.

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

Copy link
Copy Markdown
Collaborator Author

Correction to the Baseline tab note in my reply above. I said that policyengine-uk 2.100 leaves Microcosm's bills at 2024-25 prices (£1,440) and so understates them. The first half is right: PolicyEngine/policyengine-uk#1868 reverted #1860's CPI uprating, so spend stays at each dataset's stored price level. The conclusion was wrong.

Ofgem's typical-use cap averaged £1,678 over 2024-25 against £1,641 in April–June 2026, the Enhanced FRS's price basis. So the two datasets sit at about the same price level, and the gap between their bills is consumption, not price. Both sit below this winter's prices, since the October–December 2026 cap is 17% above April–June 2026, so bill levels and bill-share payments are understated in the scheme years on both. The Baseline and Methodology tabs now say this (9ad5e15), with the figures drawn from the sources registry. Details are on #1.

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Second pass at 1e1103bf (rebuilt on the published dashboard template; data regenerated). Local with bun 1.4.0: bun install --frozen-lockfile, bun run test 78 pass, bun run build clean; public/data/targeted_energy_discount_results.json is byte-identical to a fresh export from #1's head. The template rebuild is as described (Next 14, Tailwind 3, design-system tokens, PolicyEngine header/footer, ?tab=), the year toggle defaults to 2026-27, the household calculator mirrors the reform correctly (strict £24k, tiers at £18k, NI out of scope, OECD BHC equivalisation with the under-14 weight, passported tier convention, bill share = rate × bill), the thin-sample flag reads each band's ESS against 30, the eFRS bill-share warning is data-driven, the breakdown bars label all three segments with matching table columns, and the hard-coded prose numbers are gone.

Three places where the page drifted from the response:

  1. The struggling-households sentence and the missed count are gone. After 9ad5e15 the reach section shows a split bar with in-segment percentages (hidden below 6 %) and a legend; "86 % get the discount … 0.56m households (14 %) get nothing" no longer appears anywhere on the tab. That missed count is the figure NEF asked for; put the sentence back or add the count to the bar's label.
  2. Methodology's nominal-threshold sentence has no numbers (MethodologyTab.jsx:136-138); the response says it gives 36 / 38 % and 35 / 37 %.
  3. Bill-share caveat placement: the Microcosm bill-share view has no inline note that its rates are calibrated on 2024-25 prices (only the eFRS-gated warning at ReformTab.jsx:147); see #1 for the wording.

Smaller: there is no lint script any more (package.json has only test), so CI and the body's "lint clean" don't apply; 32 sources, not 31; next-env.d.ts is not gitignored so a build dirties the tree; the calculator test asserts amounts only, not the eligibility sentence. Not verified here: console errors and the 375px check (no browser).

Regenerate after #1's basis fix; requesting changes for 1–2.

- Reach bars: each title now carries the households that get nothing
  ("… (4.1m): 0.56m get nothing"), so the missed count is back without
  the per-bar sentence.
- Methodology: the nominal-threshold sentence gives the income-test
  coverage by year and dataset, read from the data.
- Bill share: an inline note on every dataset gives the gap between the
  dataset's price level and the October-December 2026 cap, and the rate
  that would match RF's averages at those prices.
- Comparison with the report: RF-basis and policy-count family rows from
  #1; rows RF does not publish read "not published" and stay off the dot
  plot.
- The household explanation moved to src/lib/explain.js; the calculator
  test now checks each case's eligibility route, tested income and
  sentence against policyengine-uk (156 tests).
- ESLint (next/core-web-vitals) with a lint script, run in CI;
  next-env.d.ts ignored; data regenerated from #1.

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

Copy link
Copy Markdown
Collaborator Author

Thanks, Vahid. Addressed at febf821, with data regenerated from #1's basis fix.

  1. Missed count. Each reach bar's title now carries it, e.g. "Households in absolute poverty after housing costs (4.1m): 0.56m get nothing". María asked for the per-bar sentence to go, so the count lives in the title instead.
  2. Nominal thresholds. The Methodology sentence now reads the coverage from the data: "The £24,000 test covers 40% / 41% of households on 2024-25 incomes, 36% / 38% in 2026-27 and 35% / 37% in 2027-28 (Microcosm / Enhanced FRS)."
  3. Bill-share caveat. With bill share selected, every dataset now shows a note beside the schedule. It gives the gap between that dataset's price level and the October–December 2026 cap (15% for Microcosm, 18% for the Enhanced FRS, on Ofgem's 2023 typical-use basis). It then gives the rate that would match RF's averages at winter prices (about 11.7% rather than 13.5% for the flat option on Microcosm). The Enhanced FRS zero-spend warning still shows below it.

Smaller.

  • Lint. bun run lint is back: ESLint with next/core-web-vitals, clean, and run in CI before test and build.
  • Sources. The body now says 32.
  • next-env.d.ts is gitignored.
  • Calculator test. The explanation moved to src/lib/explain.js. calculator.json now records the model's eligibility route per option (targeted_energy_discount_eligible, _income_route, _tested_income). The test checks the JS route, tested income and the sentence's route against them for every case and option: 156 tests.
  • Comparison with the report. It shows Add the targeted energy discount reform and analysis #1's RF-basis and policy-count rows. Rows RF doesn't publish read "not published" and stay off the dot plot.

Checked in a local preview. No console errors on the tabs I changed. The bill-share note, missed counts, threshold numbers and report rows render as intended. The 375px check from the last round still holds: no horizontal page scroll, and the winners legend sits under the bars on phones.

juaristi22 and others added 2 commits September 25, 2026 10:15
- Data: the page shows Microcosm only. The data toggles are gone, but the
  export still carries the Enhanced FRS and ?dataset=efrs_1573 switches
  every tab to it for internal use.
- Your household: inputs are a draft; a Calculate button applies them,
  with a note when the results are out of date.
- Colours: every single-series chart uses PE chart-1 teal; two-category
  splits keep the one PE pairing that passes the dataviz validator
  (teal-400 with chart-4), documented in colors.js.
- Charts: the poverty chart, bills by group and the cut-off bands are
  horizontal, like the winners, reach and breakdown charts; the ported
  impact bar chart gains a horizontal layout. Bills by region, household
  type and tenure are sorted by bill.
- Tables under charts are collapsed behind a "Show the numbers" toggle.
- Inequality: Gini to two decimals, the top-10% share as a percentage,
  and changes as relative percentages.
- Wording: "lowest income" deciles instead of "poorest"; "in poverty"
  instead of "poor".
- Baseline and the comparison with the report are one tab ("Baseline and
  comparisons"); old ?tab=report links still land there. The report's
  dot plot has gridlines, a 0-100% axis and a caption.

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

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Third pass at febf8211 with bun 1.4.0: bun install --frozen-lockfile, bun run lint (ESLint back, clean), bun run test 156 pass, bun run build clean; next-env.d.ts ignored. All three items closed: each reach bar's title carries the missed count ("… (4.1m): 0.56m get nothing", ReformTab.jsx:379), the methodology sentence reads the coverage figures from the data (MethodologyTab.jsx:149), and the bill-share note gives each dataset's price gap and the winter-matching rate beside the schedule. The comparison tab shows #1's RF-basis and policy rows with "not published" where RF has no figure.

One mechanical thing before merge: the committed data predates #1's last commit (34d21bc, "neutral income-decile wording"). A fresh export from #1's head is identical to public/data/targeted_energy_discount_results.json in every number and differs only in four labels ("four lowest income deciles" / "lowest income fifth") and one not_modelled reason string; calculator.json is identical. Merge #1's branch in once more and regenerate.

Approving; the order is #1 then this, retargeted to main.

…cument the dataset switch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The poverty chart plots the fall in each group's poverty rate, so its bars
run left to right like the other horizontal charts. Two-category splits
(reach, region and household type, cut-offs) use chart-3 dark teal with
teal-400 instead of dark blue, matching the winners-and-losers chart;
segment labels pick dark or white ink by the fill's luminance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@juaristi22
juaristi22 changed the base branch from targeted-energy-discount to main September 25, 2026 10:09
@juaristi22
juaristi22 merged commit 6b7bba3 into main Sep 25, 2026
4 checks passed

This branch was successfully deployed

2 active deployments
Production — 0b63768d Deployed Sep 25, 2026 by vercel[bot]
Preview — 0b63768d Deployed Sep 25, 2026 by vercel[bot]
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.

2 participants