Aller au contenu principal

GFM Rareté de l'eau

Le Gap Filling Module Rareté de l'eau calcule l'empreinte de rareté de l'eau des produits alimentaires en combinant les données de consommation d'eau spécifiques aux produits avec les indices de stress hydrique régionaux. Cette approche tient compte du fait que la consommation d'eau dans les régions en pénurie d'eau a une incidence environnementale plus importante que la même consommation dans les régions où l'eau est abondante.

Référence rapide

PropriétéDescription
S'exécute surModeledActivityNode avec FoodProductFlowNode parent contenant un nom de produit
DépendancesOriginGapFillingWorker
Entrée cléType de produit (terme FoodEx2), pays d'origine
SortieFlux de consommation d'eau rare en mètres cubes
DéclencheurProduit correspondant à un identifiant d'empreinte de rareté de l'eau

Conditions d'exécution

Le module se déclenche lorsque :

  1. Un ModeledActivityNode a un FoodProductFlowNode parent avec un nom de produit
  2. Le produit est associé à un identifiant d'empreinte de rareté de l'eau dans le glossaire
  3. Le module est planifié sur le noeud Brightway de base (à l'origine)

Sortie clé

Le module ajoute un flux de consommation d'eau rare au graphe de calcul :

  • Consommation d'eau rare : Mesurée en mètres cubes (m3) par kilogramme de produit
  • Connecté à un ElementaryResourceEmissionNode pour le calcul de l'incidence

Méthodologie scientifique

Le modèle de rareté de l'eau utilise les facteurs d'indice de stress hydrique (WSI) fournis par Scherer et Pfister (2016). Cette méthodologie inclut explicitement le stress hydrique régional comme facteur de pondération pour la consommation d'eau douce, fournissant une mesure plus significative sur le plan environnemental que le volume d'eau brut seul.

Approche de l'indice de stress hydrique

L'empreinte de rareté de l'eau est calculée en utilisant la formule :

Eau rare [L/kg] = Consommation d'eau bleue [L/kg] * Indice de stress hydrique [sans dimension]

Où :

  • Consommation d'eau bleue : La quantité d'eau de surface et souterraine consommée pendant la production
  • Indice de stress hydrique : Un facteur régional représentant la rareté de l'eau (échelle de 0 à 1)

Stress hydrique régional

Le stress hydrique dépend de :

  • La quantité d'eau consommée dans une région par rapport à l'eau naturellement disponible provenant des précipitations
  • Des corrections pour l'eau qui est retournée au bassin versant (par exemple, après refroidissement dans la production d'électricité)

La base de données inclut des facteurs de rareté de l'eau différenciés pour 162 pays, permettant des évaluations régionales précises.

Flux de calcul

Quantité de produit [g] -> Conversion en [kg] -> Facteur WSI [L eau rare/kg] -> Eau rare [L]

Le calcul est effectué au niveau le plus bas du graphe et agrégé jusqu'au produit principal.


Détails d'implémentation

Source de données

Les facteurs de rareté de l'eau sont stockés dans EDB_water_expected_wsi_per_kg_country_excel_corrected.xlsx, qui contient :

  • Identifiants de produit (WS_ID)
  • Facteurs WSI spécifiques par pays pour 162 pays
  • Valeurs médianes pour les calculs de repli

Logique de correspondance

Les produits sont associés aux données de rareté de l'eau via :

  1. Termes FoodEx2 du nom du produit
  2. Liens de glossaire qui associent les combinaisons de termes aux identifiants de rareté de l'eau
water_scarcity_term_uid = self.gfm_factory.linked_water_scarcity_terms.get(
frozenset([term.uid for term in parent_flow_product_name_terms])
)

Gestion des codes pays

Le module gère les codes pays comme suit :

  1. Récupère la propriété flow_location du produit ou des noeuds parents
  2. Convertit les codes ISO à 3 lettres en codes à 2 lettres en utilisant iso_3166_map_3_to_2_letter
  3. Recherche le facteur WSI spécifique au pays

Comportement de repli

ScénarioComportement
Pas d'origine trouvéeUtilise la médiane de tous les pays disponibles
Plusieurs origines trouvéesUtilise la médiane de tous les pays disponibles
Origine absente de la table WSIUtilise la médiane pour ce produit dans tous les pays
Produit absent de la table WSIRareté de l'eau définie à zéro
Produit sans ID WSIRareté de l'eau définie à zéro

Exclusion du transport

Le module ignore les flux liés au transport pour éviter le double comptage :

if product_name_term.sub_class_of == self.gfm_factory.root_transport_term.uid:
transport_term = True
if transport_term:
continue

Gestion des produits séchés

Pour les ingrédients subdivisés en versions fraîches et séchées (via le GFM Perte d'eau) :

  • La rareté de l'eau est calculée pour la quantité d'ingrédient frais
  • La rareté de l'eau est également calculée pour la quantité d'ingrédient frais correspondant à la version séchée
  • Cela tient correctement compte de la plus grande quantité de produit frais nécessaire pour produire des versions séchées

Modifications du graphe

Le module effectue les modifications de graphe suivantes :

Étape 1 : Supprimer l'arête originale

remove_edge_mutation = RemoveEdgeMutation(
from_node_uid=parent_flow.uid,
to_node_uid=self.node.uid,
)

Étape 2 : Créer l'activité de consommation d'eau

water_consumption_activity = FoodProcessingActivityNode.model_construct(
uid=UuidStr(uuid4()),
production_amount=self.node.production_amount.duplicate(),
)

Étape 3 : Rétablir les connexions de flux

Le module crée un nouveau noeud de flux alimentaire entre l'activité de consommation d'eau et le noeud Brightway original.

Étape 4 : Ajouter le flux d'eau rare

scarce_water_consumption_flow = FlowNode.model_construct(
uid=UuidStr(uuid4()),
product_name=NamesProp.unvalidated_construct(
terms=[
GlossaryTermProp.unvalidated_construct(
term_uid=self.gfm_factory.scarce_water_consumption_term.uid
)
]
),
amount_in_original_source_unit=QuantityProp.unvalidated_construct(
# Le signe négatif indique la consommation
value=-production_amount_in_kg * scarce_water_consumption_m3_per_kg,
unit_term_uid=self.gfm_factory.cubic_meter_term.uid,
for_reference=ReferenceAmountEnum.amount_for_activity_production_amount,
),
)

Étape 5 : Connecter au noeud de ressource élémentaire

Le flux d'eau rare est connecté à un ElementaryResourceEmissionNode partagé pour l'évaluation de l'incidence.


Référence complète du code

Logique de planification du worker

def should_be_scheduled(self) -> bool:
"""Indique s'il faut planifier le worker de comblement de la rareté de l'eau."""
if (
isinstance(self.node, ModeledActivityNode)
and self.node.get_parent_nodes()
and any(
isinstance(parent_node, FoodProductFlowNode) and parent_node.product_name
for parent_node in self.node.get_parent_nodes()
)
):
return True
return False

Vérification de disponibilité d'exécution

def can_run_now(self) -> GapFillingWorkerStatusEnum:
"""Indique si le worker de comblement de la rareté de l'eau peut s'exécuter."""
global_gfm_state = self.get_global_gfm_state()

# Attendre la détermination de l'origine
if global_gfm_state.get(OriginGapFillingWorker.__name__, 0) == NodeGfmStateEnum.scheduled.value:
return GapFillingWorkerStatusEnum.reschedule

# Ne s'exécuter que sur le noeud Brightway de base
if any(isinstance(sub_node, FoodProductFlowNode) for sub_node in self.node.get_sub_nodes()):
return GapFillingWorkerStatusEnum.cancel

return GapFillingWorkerStatusEnum.ready

Calcul de la rareté de l'eau

# Convertir la quantité de production en kilogrammes
production_amount_unit: Term = self.node.production_amount.get_unit_term()
production_amount_in_kg = UnitWeightConverter.convert_between_same_unit_types(
self.node.production_amount.value,
production_amount_unit,
self.gfm_factory.kilogram_term,
"mass-in-g",
)

# Rechercher le facteur spécifique au pays
if flow_country_code in water_scarcity_term.data:
scarce_water_consumption_m3_per_kg = water_scarcity_term.data[flow_country_code]
else:
# Repli vers la médiane
scarce_water_consumption_m3_per_kg = water_scarcity_term.data["median"]

# Calculer la consommation d'eau rare
scarce_water_value = -production_amount_in_kg * scarce_water_consumption_m3_per_kg

Initialisation de l'usine

Le WaterScarcityGapFillingFactory initialise les données mises en cache suivantes :

Termes d'unité

self.cubic_meter_term = self.service_provider.glossary_service.get_term_by_xid_ag_uid(
("EOS_cubic-meter", root_unit_term.access_group_uid)
)
self.liter_term = self.service_provider.glossary_service.get_term_by_xid_ag_uid(
("EOS_liter", root_unit_term.access_group_uid)
)
self.kilogram_term = self.service_provider.glossary_service.get_term_by_xid_ag_uid(
("EOS_kilogram", root_unit_term.access_group_uid)
)

Cache des liens de glossaire

water_scarcity_glossary_links = await self.service_provider.glossary_link_service.get_glossary_links_by_gfm(
gap_filling_module="WaterScarcity"
)
for water_scarcity_glossary_link in water_scarcity_glossary_links:
self.linked_water_scarcity_terms[
frozenset(water_scarcity_glossary_link.term_uids)
] = water_scarcity_glossary_link.linked_term_uid

Exemple de calcul

Scénario : 500 g de tomates d'Espagne

Étape 1 : Conversion en kilogrammes

500 g = 0,5 kg

Étape 2 : Rechercher le facteur WSI

Depuis la base de données de rareté de l'eau pour les tomates en Espagne :

Facteur WSI = 142,3 L eau rare/kg

Étape 3 : Calculer l'eau rare

Eau rare = 0,5 kg * 142,3 L/kg = 71,15 L eau rare

Étape 4 : Conversion en mètres cubes

71,15 L = 0,07115 m3 eau rare

Comparaison par origine

Les mêmes tomates de différentes origines auraient des incidences différentes :

OrigineFacteur WSI (L/kg)Eau rare (L) pour 500 g
Espagne142,371,15
Pays-Bas12,86,40
Maroc285,6142,80
Italie98,449,20

Cela démontre pourquoi les facteurs de stress hydrique spécifiques à l'origine sont essentiels pour une évaluation environnementale précise.


Limitations connues

Couverture des données

  • 162 pays couverts : La plupart des principaux pays producteurs alimentaires sont inclus
  • Pays manquants : Certains pays peuvent ne pas avoir de données WSI ; des valeurs médianes sont utilisées en repli
  • Couverture des produits : Tous les produits alimentaires n'ont pas d'ID de rareté de l'eau attribués

Limitations de l'héritage

L'implémentation actuelle ne prend pas en charge l'héritage des ID de rareté de l'eau entre produits apparentés :

  • Dans le système hérité, les produits pouvaient hériter des ID WSI de produits liés
  • Dans l'implémentation actuelle, les produits sans ID WSI direct reçoivent une rareté de l'eau nulle
  • Cela peut entraîner une sous-estimation pour certains produits (par exemple, des farines de spécialité qui pourraient hériter de la farine générale)

Résolution des données

  • Résolution au niveau du pays uniquement (pas de différenciation infranationale)
  • Ne tient pas compte des variations saisonnières du stress hydrique
  • Utilise des valeurs attendues (moyennes) plutôt que des données spécifiques à l'année en cours

Repli vers la médiane

Lorsque des valeurs médianes sont utilisées (origine inconnue, données pays manquantes), aucun avertissement n'est affiché dans la sortie. C'est un comportement connu documenté dans les revues scientifiques.


Sources de données

Source principale

Scherer, L., & Pfister, S. (2016). Global water footprint assessment of hydropower. Renewable Energy, 99, 711-720.

Les données de rareté de l'eau combinent :

  • Consommation d'eau bleue provenant des bases de données d'analyse du cycle de vie
  • Valeurs d'indice de stress hydrique basées sur la disponibilité de l'eau au niveau des bassins versants

Structure de la base de données

Les facteurs de rareté de l'eau sont stockés dans la base de données Eaternity (EDB) avec :

  • water-scarcity-footprint-id : Lie les produits aux entrées de données WSI
  • Valeurs spécifiques par pays : Stockées pour chaque combinaison produit-pays
  • Valeurs médianes : Pré-calculées pour les scénarios de repli

Références

  1. Scherer, L., & Pfister, S. (2016). Global water footprint assessment of hydropower. Renewable Energy, 99, 711-720.

  2. Pfister, S., Koehler, A., & Hellweg, S. (2009). Assessing the environmental impacts of freshwater consumption in LCA. Environmental Science and Technology, 43(11), 4098-4104.

  3. Base de données Eaternity (EDB). Données d'empreinte de rareté de l'eau. Documentation interne.