Section 1 : Achat et Facturation de l’énergie
1.1. Électricité
1.1.1. France
Module TURPE - Tarif d’Utilisation des Réseaux Publics d’Électricité
Le module TURPE permet de calculer les coûts de transport et de distribution de l’électricité selon les tarifs réglementés français.
Classes principales
TURPEProfil
Représente un profil tarifaire TURPE avec ses caractéristiques :
from energysystemmodels.Facture.TURPE import TURPEProfil
profil = TURPEProfil(
nom="HTA5",
puissance_souscrite_kW=250,
type_comptage="C5",
option_tarifaire="LU"
)
TURPECalculateur
Effectue les calculs de facturation TURPE :
from energysystemmodels.Facture.TURPE import TURPECalculateur
import pandas as pd
# Préparer les données de consommation
dates = pd.date_range('2024-01-01', periods=8760, freq='H')
consommation = pd.Series([100.0] * 8760, index=dates)
calculateur = TURPECalculateur(profil)
cout_total = calculateur.calculer_cout_annuel(consommation)
print(f"Coût TURPE annuel : {cout_total:.2f} €")
Exemple complet : Analyse tarifaire HTA
from energysystemmodels.Facture.TURPE import TURPEProfil, TURPECalculateur
import pandas as pd
import numpy as np
# Définir le profil HTA5
profil_hta5 = TURPEProfil(
nom="HTA5",
puissance_souscrite_kW=250,
type_comptage="C5",
option_tarifaire="LU"
)
# Générer un profil de charge réaliste
dates = pd.date_range('2024-01-01', periods=8760, freq='H')
base_load = 150.0
variation = 50.0 * np.sin(2 * np.pi * np.arange(8760) / 24)
consommation = pd.Series(base_load + variation, index=dates)
# Calculer les coûts
calculateur = TURPECalculateur(profil_hta5)
# Coût annuel total
cout_total = calculateur.calculer_cout_annuel(consommation)
# Décomposition par composante
details = calculateur.decomposition_couts(consommation)
print(f"Coût annuel total : {cout_total:.2f} €")
print("\nDécomposition :")
for composante, montant in details.items():
print(f" {composante}: {montant:.2f} €")
Exemple : Comparaison de profils tarifaires
from energysystemmodels.Facture.TURPE import TURPEProfil, TURPECalculateur
import pandas as pd
# Profils à comparer
profils = [
TURPEProfil("HTA5", 250, "C5", "LU"),
TURPEProfil("HTA5", 250, "C5", "MU"),
TURPEProfil("BT>36", 100, "C5", "LU")
]
# Même profil de consommation
dates = pd.date_range('2024-01-01', periods=8760, freq='H')
consommation = pd.Series([100.0] * 8760, index=dates)
# Comparer les coûts
resultats = {}
for profil in profils:
calculateur = TURPECalculateur(profil)
cout = calculateur.calculer_cout_annuel(consommation)
resultats[profil.nom] = cout
print("Comparaison des coûts annuels :")
for nom, cout in resultats.items():
print(f" {nom}: {cout:.2f} €")
Exemple : Optimisation de la puissance souscrite
from energysystemmodels.Facture.TURPE import TURPEProfil, TURPECalculateur
import pandas as pd
import numpy as np
# Profil de charge avec des pointes
dates = pd.date_range('2024-01-01', periods=8760, freq='H')
consommation = pd.Series(100 + 50 * np.random.random(8760), index=dates)
# Puissance de pointe réelle
puissance_pointe = consommation.max()
print(f"Puissance de pointe : {puissance_pointe:.1f} kW")
# Tester différentes puissances souscrites
puissances_test = np.arange(
puissance_pointe * 0.9,
puissance_pointe * 1.3,
10
)
resultats_optimisation = []
for ps in puissances_test:
profil = TURPEProfil("HTA5", ps, "C5", "LU")
calculateur = TURPECalculateur(profil)
cout = calculateur.calculer_cout_annuel(consommation)
depassements = calculateur.calculer_depassements(consommation)
resultats_optimisation.append({
'puissance_souscrite': ps,
'cout_total': cout,
'nb_depassements': depassements
})
# Trouver l'optimum
df_optim = pd.DataFrame(resultats_optimisation)
optimum = df_optim.loc[df_optim['cout_total'].idxmin()]
print(f"\nPuissance souscrite optimale : {optimum['puissance_souscrite']:.1f} kW")
print(f"Coût annuel optimal : {optimum['cout_total']:.2f} €")
Exemples de tests (France)
from Facture.TURPE import input_Contrat, TurpeCalculator, input_Facture, input_Tarif
facture = input_Facture(
start="2022-09-01", end="2022-09-30",
heures_depassement=0, depassement_PS_HPB=64,
kWh_pointe=0, kWh_HPH=0, kWh_HCH=0, kWh_HPB=26635, kWh_HCB=12846
)
contrat = input_Contrat(
domaine_tension="BT > 36 kVA",
PS_pointe=129, PS_HPH=129, PS_HCH=129, PS_HPB=129, PS_HCB=250,
version_utilisation="LU", pourcentage_ENR=100
)
tarif = input_Tarif(
c_euro_kWh_pointe=0.2, c_euro_kWh_HPB=0.15, c_euro_kWh_HCB=0.12,
c_euro_kWh_HPH=0.18, c_euro_kWh_HCH=0.16, c_euro_kwh_CSPE_TICFE=0.05,
c_euro_kWh_certif_capacite_pointe=0.0, c_euro_kWh_certif_capacite_HPH=0.0,
c_euro_kWh_certif_capacite_HCH=0.0, c_euro_kWh_certif_capacite_HPB=0.0,
c_euro_kWh_certif_capacite_HCB=0.0, c_euro_kWh_ENR=0.1, c_euro_kWh_ARENH=0.09
)
turpe_calculator = TurpeCalculator(contrat, tarif, facture)
turpe_calculator.calculate_turpe()
print(f"Acheminement (€) : {turpe_calculator.euro_TURPE}")
print(f"Taxes et Contributions (€) : {turpe_calculator.euro_taxes_contrib}")
1.1.2. Algérie
SONELGAZ - Électricité (tarifs 41/42/43/44)
from Facture.SONALGAZ_Elec import input_Contrat, input_Facture, Sonalgaz_Elec
contrat = input_Contrat(
code_tarif="41", # Code 41,42,43,44 => HTA automatiquement
PMD_kW=1000
)
facture = input_Facture(
start="2025-03-01",
end="2025-03-31",
kWh_pointe=20585.00,
kWh_pleine=63963.00,
kWh_nuit=40091.00,
PMA_kW=367,
kvarh_reactif=50827.00
)
calc = Sonalgaz_Elec(contrat, facture)
calc.calculate()
print(calc.df)
calc.plot()
calc.plot_detail()
from Facture.SONALGAZ_Elec import input_Contrat, input_Facture, Sonalgaz_Elec
contrat = input_Contrat(
code_tarif="42",
PMD_kW=80
)
facture = input_Facture(
start="2025-01-01",
end="2025-01-31",
kWh_pointe=3174.90,
kWh_hors_pointe=10215.24,
PMA_kW=37,
kvarh_reactif=11784.40
)
calc = Sonalgaz_Elec(contrat, facture)
calc.calculate()
print(calc.df)
calc.plot()
calc.plot_detail()
1.2. Gaz
1.2.1. France
ATR - Transport & Distribution (naTran (ex-GRTgaz))
from Facture.ATR_Transport_Distribution import input_Contrat, input_Facture, input_Tarif, ATR_calculation
contrat = input_Contrat(
type_tarif_acheminement='T4',
CJN_MWh_j=93,
modulation_MWh_j=20.891,
CAR_MWh=8920.959,
profil="P019",
station_meteo="PARIS-MONTSOURIS",
reseau_transport="naTran",
niv_tarif_region=2
)
facture = input_Facture(start="2024-01-01", end="2024-01-31", kWh_total=1358713)
tarif = input_Tarif(prix_kWh=0.03171 + 0.00571)
atr = ATR_calculation(contrat, facture, tarif)
atr.calculate()
print(atr.df_results) # Resume general complet
print(atr.df_contrat) # Parametres contrat + coefficients CRE
print(atr.df_fourniture) # Molecule gaz (fournisseur)
print(atr.df_transport) # Detail ATRT (TCS, TCR, TCL, stockage)
print(atr.df_distribution) # Detail ATRD (fixe, capacite, variable)
print(atr.df_taxes) # CTA + Accise gaz
print(atr.df_totaux) # Totaux HT/TTC + couts EUR/MWh
1.2.2. Algérie
SONELGAZ - Gaz (thermies)
from Facture.SONALGAZ_gaz import input_Contrat, input_Facture, Sonalgaz_Gaz
contrat = input_Contrat(
code_tarif="11",
DMD_thermie_h=40000
)
facture = input_Facture(
start="2025-01-01",
end="2025-01-31",
thermies=23177817.83,
DMA_thermie_h=37079
)
calc = Sonalgaz_Gaz(contrat, facture)
calc.calculate()
print(calc.df)
calc.plot()
calc.plot_detail()