Fuel Duty#

Fuel duty is a tax levied on the sale of fuels, mainly petrol and diesel used in vehicles or used for heating. PolicyEngine models fuel duty imposed on the purchases of petrol and diesel for vehicles only.

Fuel duty parameters can be found in policyengine_uk/parameters/gov/hmrc/fuel_duty and logic in policyengine_uk/variables/gov/hmrc/fuel_duty.

Fuel Duty Rate#

Fuel duty is levied per unit of petrol or diesel sold. The UK government usually updates rates in Spring or Autumn Budgets alongside other tax reforms. In March 2022, the UK government announced a 5 pence cut in fuel duty rates for 12 months and the cut was further extended to March 2024. Before this reduction, the rates of fuel duty had been frozen at £0.5795 per litre of petrol and diesel since April 2013.

The table and graph of historical rates on petrol and diesel for fuel duty since April 2010 show below:

Hide code cell source
from policyengine_uk import CountryTaxBenefitSystem
import plotly.express as px
import pandas as pd

system = CountryTaxBenefitSystem()
hmrc = system.parameters.gov.hmrc

df = pd.DataFrame()

df["Date of change"] = [
    parameter.instant_str
    for parameter in hmrc.fuel_duty.petrol_and_diesel.values_list
]
df["Fuel duty rate (£/litre)"] = [
    parameter.value
    for parameter in hmrc.fuel_duty.petrol_and_diesel.values_list
]
df.sort_values("Date of change", inplace=True)
df.set_index("Date of change")
Fuel duty rate (£/litre)
Date of change
2010-04-01 0.571900
2010-10-01 0.581900
2011-01-01 0.589500
2011-03-23 0.579500
2012-01-01 0.609700
2013-04-01 0.579500
2015-01-01 0.579500
2016-01-01 0.579500
2017-01-01 0.579500
2018-01-01 0.579500
2019-01-01 0.579500
2020-01-01 0.579500
2021-01-01 0.579500
2022-01-01 0.529500
2023-01-01 0.529500
2024-01-01 0.579500
2025-01-01 0.583879
2026-01-01 0.583909
2026-04-01 0.592897
2026-07-01 0.596999
2026-10-01 0.603298
2027-01-01 0.599042
2027-04-01 0.609043
2027-07-01 0.614374
2027-10-01 0.621257
2028-01-01 0.617539
Hide code cell source
import plotly.express as px

px.line(
    df,
    x="Date of change",
    y="Fuel duty rate (£/litre)",
    title="Fuel duty rate on petrol and giesel",
    color_discrete_sequence=["#2C6496"],
).update_layout(
    yaxis_title="Fuel duty rate per litre",
    yaxis_tickprefix="£",
    yaxis_tickformat=",.2f",
    xaxis_title="Date",
    xaxis_tickformat="%Y",
    height=600,
    width=800,
    template="plotly_white",
).update_xaxes(
    tickangle=45, tickfont={"size": 10}
).update_traces(
    line_shape="hv"
)