Support for Hydro-Québec (Tariff D / Flex D): not based on power, tiered consumption model

Hi @pierre-gilles

I wanted to open a discussion space on GitHub - GladysAssistant/energy-contracts: Gladys Assistant Energy Contracts as JSON · GitHub, but I can only open issues.

Context

I would like to add Hydro-Québec’s residential rates (Québec’s public electricity provider, Canada) to this repo, but the pricing structure does not fit the current model.

How the Current Model Works

Looking at EDF (contracts/edf/base) and other French providers in the repo, the price is always organized around a subscribed power (kVA):

  • a key per power tier (3, 6, 9, 12, 15 kVA…)
  • for each tier: a fixed subscription (annualized to monthly) + a constant variable price per kWh
  • existing variants: base, peak-off-peak (peak/off-peak hours), tempo (blue/white/red day)

Why Hydro-Québec’s Tariff D Does Not Fit This Model

Tariff D (basic residential) has no notion of subscribed power. Its structure is:

  • a fixed daily network access fee, independent of power
  • a progressive price per kWh based on actual daily consumption (not a choice of tier in advance):
    • up to 40 kWh/day: a first price
    • beyond 40 kWh/day: a second, higher price

Rate grid in effect since April 1, 2026 (official source: grille-tarifaire.pdf):

Component Value
Network Access Fee 0.46154 $ CAD / day
Energy, ≤ 40 kWh/day 0.07065 $ CAD / kWh
Energy, > 40 kWh/day 0.11142 $ CAD / kWh

There is also a dynamic pricing option, Flex D, with a reduced off-peak price in winter and a surcharged price during critical peak events announced 24 hours in advance (figures to be precisely verified on the official grid before implementation):

Component Value (to confirm)
Network Access Fee same as Tariff D
Off-peak, winter period (Dec 1–March 31) ≈ 0.04886 $ CAD / kWh
Critical Peak (occasional events) ≈ 0.50 $ CAD / kWh
Rest of the year Standard Tariff D

Other structural differences:

  • currency CAD, not yet used in the repo (only eur seems to be used in practice)
  • no notion of subscribed power to be chosen by the customer

What I Propose to Discuss

  1. How to encode a tariff without subscribed power? A neutral key ("none" / "standard") instead of the kVA tier, or an evolution of the schema to make this dimension optional?
  2. How to encode a tiered kWh rate (price that changes based on the volume consumed in the period, not based on the time or day)? Nothing in the current repo seems to cover this case — the existing variants (base, peak-off-peak, tempo) are all independent of volume.
  3. Would a new type of folder be relevant, for example, tiered-consumption, in addition to base / peak-off-peak / tempo?
  4. Confirmation that the cad currency is supported/accepted by the process.js pipeline / the Gladys frontend that consumes this JSON.

I would appreciate feedback before investing time (well, tokens :wink:) in the CSV + convert.js. Once the format is validated, I can propose a PR with:

  • contracts/hydro-quebec/base (Tariff D)
  • contracts/hydro-quebec/flex (Flex D)