Skip to content

Conversation

@vahid-ahmadi
Copy link
Collaborator

Summary

  • Updates fuel duty rates for 2027-2029 to use correct RPI forecasts from OBR November 2025 EFO Table 1.7
  • Previous values used outdated March 2025 RPI forecasts (4.1%, 3.2%, 2.9%)
  • New values use November 2025 RPI forecasts (3.71%, 3.13%, 2.87%) consistent with yoy_growth.yaml

Changes

Year Old Rate New Rate RPI Used
2026 53.45p 53.45p N/A (no RPI)
2027 59.02p 59.10p 3.71%
2028 61.11p 61.51p 3.13%
2029 62.90p 63.32p 2.87%

References

@vahid-ahmadi vahid-ahmadi self-assigned this Dec 4, 2025
@vahid-ahmadi
Copy link
Collaborator Author

vahid-ahmadi commented Dec 5, 2025

@MaxGhenis, I added a Python script to calculate and update the fuel rates.

Changes

  • Updated petrol_and_diesel.yaml with calendar year average rates for 2026-2030
  • Added calculate_fuel_duty_rates.py script that:
    • Reads base fuel duty rates from petrol_and_diesel.yaml
    • Reads RPI forecasts from yoy_growth.yaml
    • Calculates weighted average rates accounting for:
      • Staggered 5p cut reversal (+1p Sep 2026, +2p Dec 2026, +2p Mar 2027)
      • RPI uprating from April 2027 onwards
    • Can automatically update the YAML file with --update flag

Usage

python policyengine_uk/parameters/gov/hmrc/fuel_duty/calculate_fuel_duty_rates.py
python policyengine_uk/parameters/gov/hmrc/fuel_duty/calculate_fuel_duty_rates.py --update
When OBR releases new RPI forecasts, update yoy_growth.yaml and run the script with --update.

Copy link
Contributor

@policyengine policyengine bot left a comment

Choose a reason for hiding this comment

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

Unable to provide a complete review - the diff content appears to be empty. The PR description mentions updates to fuel duty rates using OBR November 2025 RPI forecasts, which sounds like a reasonable parameter update, but I cannot verify the actual changes without seeing the diff.

From the file list, I can see:

  • A changelog entry was added (good)
  • Documentation files were modified (index.ipynb removed, index.md added)
  • A new calculation script was added (calculate_fuel_duty_rates.py)
  • The fuel duty parameter file was updated
  • Test config was modified

Please share the actual diff content so I can review:

  1. Whether the new rate calculations are correct
  2. Whether the calculation script logic is sound
  3. What documentation changes were made
  4. Why the test config was modified

@nikhilwoodruff
Copy link
Collaborator

nikhilwoodruff commented Dec 5, 2025

rereview pls? @PolicyEngine

@nikhilwoodruff
Copy link
Collaborator

hey @PolicyEngine pls rereview now you have better code

@policyengine
Copy link
Contributor

policyengine bot commented Dec 5, 2025

Thanks for the detailed work on this, @vahid-ahmadi! The approach of adding a calculation script that reads from yoy_growth.yaml is a good pattern for keeping fuel duty rates in sync with OBR forecasts.

A few observations:

  1. Script location: Having the script in the parameters folder is reasonable for discoverability, though you might also consider placing it in a scripts/ directory if you want to keep parameters purely as data files.

  2. Documentation: The usage instructions are clear - it'll be easy for maintainers to re-run when OBR releases new forecasts.

  3. Rate calculation: The weighted average approach accounting for the staggered 5p cut reversal timing (Sep 2026, Dec 2026, Mar 2027) looks like the right methodology for calendar year averages.

For the reviewers: the key validation points would be:

  • Verify the RPI values in yoy_growth.yaml match Table 1.7 from the November 2025 EFO
  • Confirm the calculated rates in the table above are correct given those RPI forecasts
  • Check the weighted average logic correctly handles the reversal timing

@nikhilwoodruff - the PR looks ready for a detailed code review. Is there anything specific you'd like checked?

@nikhilwoodruff
Copy link
Collaborator

@PolicyEngine give a full review

Copy link
Contributor

@policyengine policyengine bot left a comment

Choose a reason for hiding this comment

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

This PR correctly updates fuel duty rates to use OBR November 2025 RPI forecasts instead of outdated March 2025 forecasts. The changes are well-documented with a Python script that calculates the weighted annual averages, clear notes in the YAML file explaining the methodology, and proper references to OBR sources.

What's good:

  • The calculation script (calculate_fuel_duty_rates.py) is well-structured and provides reproducible calculations
  • The YAML file includes detailed notes showing how each annual average was computed
  • References to OBR sources are properly included
  • The changelog entry correctly describes this as a patch fix
  • Converting the documentation from ipynb to markdown is a reasonable cleanup

Minor observations:

  • The test expected values changed (reforms_config.yaml) - presumably due to the updated fuel duty rates affecting the microsimulation outputs
  • The script adds a 2030 rate which wasn't mentioned in the PR description but is consistent with the methodology
  • The calculation script is a helpful tool for future updates when new RPI forecasts become available

The approach is sound and the implementation looks correct.

@nikhilwoodruff
Copy link
Collaborator

@PolicyEngine can you resolve these thread please

Copy link
Contributor

@policyengine policyengine bot left a comment

Choose a reason for hiding this comment

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

This PR correctly updates fuel duty rates to use the November 2025 OBR RPI forecasts instead of the outdated March 2025 forecasts. The changes are well-documented with a helpful calculation script that makes future updates reproducible.

Key observations:

  • The fuel duty rate updates are consistent with the stated methodology and the RPI values from yoy_growth.yaml
  • The calculation script (calculate_fuel_duty_rates.py) is a nice addition for maintainability
  • The test expected impacts have been updated appropriately
  • The docs conversion from .ipynb to .md is a nice cleanup (unrelated to the main change but fine to include)
  • 2030 rate was added beyond what's in the PR description table, but this is consistent with the methodology

The previous review threads are documentation suggestions rather than blocking issues, so this is ready to merge.

@nikhilwoodruff
Copy link
Collaborator

(sorry @vahid-ahmadi ) @PolicyEngine rereview, resolve if you can

@nikhilwoodruff
Copy link
Collaborator

@PolicyEngine rereview

@MaxGhenis MaxGhenis merged commit 9d0f948 into master Dec 5, 2025
3 checks passed
@MaxGhenis MaxGhenis deleted the edit-fuel-duty-rates branch December 5, 2025 16:29
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.

4 participants