Support pour Hydro-Québec (Tarif D / Flex D): non basé sur une puissance, modele de consommation par tiers

Salut @pierre-gilles

Je voulais ouvrir un espace de discussion sur GitHub - GladysAssistant/energy-contracts: Gladys Assistant Energy Contracts as JSON · GitHub , mais je ne peux ouvrir que des issues.

Contexte

Je voudrais ajouter les tarifs résidentiels d’Hydro-Québec (fournisseur d’électricité public du Québec, Canada) à ce repo, mais la structure tarifaire ne rentre pas dans le modèle actuel.

Comment fonctionne le modèle actuel

En regardant EDF (contracts/edf/base) et les autres fournisseurs français du repo, le prix est toujours organisé autour d’une puissance souscrite (kVA) :

  • une clé par palier de puissance (3, 6, 9, 12, 15 kVA…)
  • pour chaque palier : un abonnement fixe (annualisé en mensuel) + un prix variable au kWh constant
  • variantes existantes : base, peak-off-peak (heures pleines/creuses), tempo (jour bleu/blanc/rouge)

Pourquoi le Tarif D d’Hydro-Québec ne rentre pas dans ce modèle

Le Tarif D (résidentiel de base) n’a aucune notion de puissance souscrite. Sa structure est :

  • un frais d’accès au réseau fixe par jour, indépendant de la puissance
  • un prix au kWh progressif selon la consommation réelle du jour (pas un choix de palier à l’avance) :
    • jusqu’à 40 kWh/jour : un premier prix
    • au-delà de 40 kWh/jour : un second prix, plus élevé

Grille en vigueur depuis le 1ᵉʳ avril 2026 (source officielle : grille-tarifaire.pdf) :

Composante Valeur
Frais d’accès au réseau 0,46154 $ CAD / jour
Énergie, ≤ 40 kWh/jour 0,07065 $ CAD / kWh
Énergie, > 40 kWh/jour 0,11142 $ CAD / kWh

Il existe aussi une option de tarification dynamique, Flex D, avec un prix hors-pointe réduit en hiver et un prix majoré pendant des événements de pointe critique annoncés 24h à l’avance (chiffres à revérifier précisément sur la grille officielle avant implémentation) :

Composante Valeur (à confirmer)
Frais d’accès au réseau identique au Tarif D
Hors pointe, période hivernale (1ᵉʳ déc.–31 mars) ≈ 0,04886 $ CAD / kWh
Pointe critique (événements ponctuels) ≈ 0,50 $ CAD / kWh
Reste de l’année Tarif D standard

Autres différences structurelles :

  • devise CAD, pas encore utilisée dans le repo (seul eur semble utilisé en pratique)
  • pas de notion de puissance souscrite à choisir par le client

Ce que je propose de discuter

  1. Comment encoder un tarif sans puissance souscrite ? Une clé neutre ("none" / "standard") à la place du palier de kVA, ou une évolution du schéma pour rendre cette dimension optionnelle ?
  2. Comment encoder un barème progressif au kWh (prix qui change selon le volume consommé dans la période, pas selon l’heure ni le jour) ? Rien dans le repo actuel ne semble couvrir ce cas — les variantes existantes (base, peak-off-peak, tempo) sont toutes indépendantes du volume.
  3. Un nouveau type de dossier serait-il pertinent, par ex. tiered-consumption, en complément de base / peak-off-peak / tempo ?
  4. Confirmation que la devise cad est bien supportée/acceptée par le pipeline process.js / le frontend Gladys qui consomme ce JSON.

Je suis preneur de retours avant d’investir du temps (enfin, des tokens :wink:) dans le CSV + convert.js. Une fois le format validé, je peux proposer une PR avec :

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

Hello @lmilcent,

Merci pour ce sujet très complet, il tombe à pic ! :raising_hands:

Je suis en train de refondre en profondeur le suivi de l’énergie dans Gladys (je l’ai présenté ici : API : permettre aux intégrations externes de déclarer leurs propres types de contrat énergie - #3 par pierre-gilles ).

Les contrats ne sont plus limités à Base / Heures creuses / Tempo : chaque contrat est décrit par des règles, et ça couvre exactement les points que tu soulèves.

Tarif D : ce sera possible directement

  • Pas de puissance souscrite : ce champ devient facultatif.
  • Paliers de consommation : « les 40 premiers kWh du jour à un prix, le reste à un autre » est géré nativement.
  • Frais d’accès quotidien : un montant fixe par jour.
  • Dollar canadien : chaque contrat a sa propre devise (CAD, USD, EUR…).

Concrètement, avec les prix de ton message, le Tarif D s’écrit comme ça :

{
  "tariff_version": 1,
  "components": [
    {
      "key": "energy",
      "kind": "consumption",
      "rules": [
        { "label": "40 premiers kWh du jour", "when": { "tier": { "cumulative": "day", "from_kwh": 0, "to_kwh": 40 } }, "price": 0.07065 }
      ],
      "fallback": { "label": "Au-delà de 40 kWh", "price": 0.11142 }
    },
    { "key": "acces", "kind": "fixed", "amount": 0.46154, "per": "day" }
  ]
}

Tu pourras le coller dans l’éditeur de contrat de Gladys, et il pourra aussi être ajouté au catalogue communautaire pour que tout le monde l’ait en un clic.

Flex D : le calcul est prévu, il manque la source des pointes critiques

Le calcul lui-même est couvert : période d’hiver du 1er décembre au 31 mars, prix réduit hors pointe, prix élevé pendant les événements de pointe critique. Mais comme les événements sont annoncés la veille, il faut que quelque chose les récupère et les transmette à Gladys.

Ce sera le rôle d’une intégration externe, qui publie les jours de pointe dans un « calendrier » que le contrat utilise. Tout est prévu dans Gladys pour ça, mais cette intégration reste à écrire.

Deux questions pour être sûr de coller à ta facture

  1. Pour le seuil de 40 kWh, Hydro-Québec le calcule-t-il jour par jour, ou comme « 40 kWh × nombre de jours » sur toute la période de facturation ? Ça change légèrement le résultat les jours où tu dépasses 40 kWh.
  2. Pour Flex D, peux-tu me confirmer les plages horaires des événements de pointe, et si les paliers de 40 kWh s’appliquent aussi pendant l’hiver ?

Ce n’est pas encore sorti, c’est en cours de relecture avant une prochaine version.