boncourant

Meilleure courbe de charge disponible (`profile.resolve-best-curve`)


Pourquoi

La qualité d'une recommandation tarifaire dépend d'abord de la qualité de la

courbe de charge. Le moteur disposait déjà de plusieurs producteurs de courbes

(SGE, Linky, CSV CDC, reconstruction depuis facture, synthèse Enedis) mais

choisissait toujours la synthèse, même quand une mesure réelle existait.

Cette méthode introduit une échelle de priorité : on utilise toujours la

meilleure source disponible, et on n'« invente » une forme que faute de mesure.


Échelle de sources (premier succès gagne)

  • Courbe mesurée (graphe énergie) — SGE / Linky / import d'intervalles.
  • Confiance high. Jamais remise à l'échelle (vérité mesurée).

  • CSV CDC (export 30 min). Confiance high.
  • Reconstruction depuis facture (série demi-horaire). Confiance medium.
  • Synthèse Enedis depuis les données déclarées. Confiance low.
  • Seul ce niveau pose using_default_profile=true.


    Entrées

  • year, annual_kwh (requis pour la synthèse ; sert à remettre à l'échelle les
  • niveaux 2–3, jamais le niveau 1)

  • site { accountId, siteId } (niveau 1, via dépendances injectées)
  • cdc_csv (niveau 2), invoice { half_hour_series, coefficient_snapshot_id }
  • (niveau 3), synth { enedis_class | sector_id } (niveau 4)


    Garanties

  • Pureté / isolation : aucune requête base de données directe ; l'accès au
  • graphe passe par siteBaselineDeps injecté (le portée par compte/site

    autorisé est de la responsabilité de l'appelant).

  • Conservation d'énergie : remise à l'échelle vers annual_kwh uniquement
  • pour les niveaux non mesurés.

  • Refus honnête : InsufficientProfileError propagée quand aucune source ne
  • produit de courbe et que la synthèse manque d'entrées → l'appelant demande une

    vraie courbe (needs_cdc_upload) au lieu d'un profil plat trompeur.


    Limites

  • Ne fusionne pas plusieurs sources ; choisit la meilleure unique.
  • L'ordre intra-mesuré (SGE vs Linky) suit CURVE_SOURCE_RANK du graphe.