Aller au contenu principal

Fonctionnement du EOS Core

Ce guide parcourt le processus de calcul complet, des donnees brutes du produit aux scores d'incidence environnementale finaux.

Le graphe de calcul

Le EOS Core utilise une architecture de graphe de calcul ou les produits et ingredients sont representes comme des noeuds avec des relations. Les Gap Filling Modules (GFM) operent sur ces noeuds pour combler les donnees manquantes et calculer les incidences.

583d0330f2205e8aac4960a0be26e9f1

Etape 1 : Traitement des entrees

Formats d'entree acceptes

Le moteur accepte des donnees produit avec differents niveaux de detail :

// Entree minimale - juste un nom de produit
{
"name": "Curry de poulet avec riz"
}

// Entree structuree avec ingredients
{
"name": "Curry de poulet avec riz",
"ingredients": [
{ "name": "Blanc de poulet", "amount": 150, "unit": "g" },
{ "name": "Riz basmati", "amount": 200, "unit": "g" },
{ "name": "Lait de coco", "amount": 100, "unit": "ml" },
{ "name": "Pate de curry", "amount": 30, "unit": "g" }
],
"servings": 1
}

Creation des noeuds du graphe

Chaque produit et ingredient devient un noeud dans le graphe de calcul :

Noeud produit : "Curry de poulet avec riz"
├── Noeud de flux : Blanc de poulet (150g)
├── Noeud de flux : Riz basmati (200g)
├── Noeud de flux : Lait de coco (100ml)
└── Noeud de flux : Pate de curry (30g)

Etape 2 : Planification des Gap Filling Modules

L'orchestrateur coordonne quels GFM doivent s'executer sur quels noeuds.

Logique de planification

Chaque GFM implemente deux methodes cles :

  • should_be_scheduled() - Determine si ce module est pertinent pour un noeud
  • can_run_now() - Verifie si toutes les dependances sont satisfaites
Boucle de l'orchestrateur :
1. Collecter tous les GFM qui should_be_scheduled() sur les nouveaux noeuds
2. Pour chaque GFM planifie :
- Verifier can_run_now()
- Si pret : executer run()
- Si en attente : replanifier pour la prochaine iteration
3. Repeter jusqu'a ce qu'aucun GFM ne doive s'executer

Gap Filling Modules disponibles

Le EOS Core inclut des modules pour differents aspects du calcul :

ModuleObjectif
match_product_name_gfmFaire correspondre les noms de produits aux entrees de la base de donnees
origin_gfmDeterminer l'origine geographique
location_gfmGerer les facteurs specifiques a la localisation
greenhouse_gfmCalculer les emissions de gaz a effet de serre
water_scarcity_gfmCalculer l'empreinte hydrique
rainforest_gfmEvaluer l'incidence sur la deforestation
processing_gfmModeliser les incidences de la transformation alimentaire
transportation_decision_gfmDeterminer les modes de transport
transportation_mode_distance_gfmCalculer les distances de transport
impact_assessment_gfmAgreger les calculs d'incidence

Etape 3 : Execution des modules

Lorsqu'un GFM s'execute, il lit les proprietes du noeud, effectue des calculs et ecrit les resultats dans le graphe.

Exemple de flux d'execution

Produit : "Pomme bio de Suisse"

1. match_product_name_gfm
→ Correspond a l'entree de base de donnees "pomme"
→ Definit la categorie et les termes FoodEx2

2. origin_gfm
→ Detecte "Suisse" dans le nom
→ Definit le pays d'origine : CH

3. transportation_decision_gfm
→ Determine le transport de l'origine a la consommation
→ Definit les modes de transport selon la perissabilite

4. transportation_mode_distance_gfm
→ Calcule les distances via l'API EcoTransit
→ Ajoute les emissions de transport au graphe

5. matrix_calculation_gfm
→ Effectue les calculs ACV bases sur des matrices
→ Agrege toutes les donnees d'inventaire

6. impact_assessment_gfm
→ Calcule le CO₂eq selon la methodologie du GIEC
→ Genere les scores d'incidence climatique

7. water_scarcity_gfm
→ Applique les facteurs de stress hydrique regionaux
→ Calcule l'empreinte hydrique

8. aggregation_gfm
→ Combine les resultats de tous les ingredients
→ Produit les scores finaux au niveau du produit

Execution parallele

Les modules independants peuvent s'executer en parallele lorsque leurs dependances sont satisfaites :

198e8bdba0a99cbba60e3b0bffcfe969

Etape 4 : Calcul de l'incidence

Les modules d'incidence agregent les donnees de toutes les sources en metriques environnementales.

Calcul matriciel

Avant l'evaluation de l'incidence, le matrix_calculation_gfm effectue des calculs d'Analyse du Cycle de Vie bases sur des matrices pour les systemes de produits complexes. C'est un composant de performance critique qui :

  • Convertit le graphe de calcul en representation matricielle
  • Resout l'equation ACV (h = B × A⁻¹ × f) efficacement
  • Agrege les flux a travers les graphes de produits complexes

Composants de l'incidence climatique

Le calcul des gaz a effet de serre prend en compte :

  • Emissions agricoles - Agriculture et utilisation des sols
  • Emissions de transformation - Energie utilisee dans la transformation alimentaire
  • Emissions de transport - Distance × facteur d'emission du mode
  • Emissions d'emballage - Production et elimination des materiaux

Evaluation multidimensionnelle

DimensionUniteBase de calcul
Climatkg CO₂eqProtocole GES, facteurs du GIEC
EaulitresEmpreinte hydrique bleue
Foret tropicaleEvaluation du risque de deforestation
Bien-etre animalnotationConditions d'elevage

Etape 5 : Generation de la sortie

Les resultats finaux sont structures pour la reponse de l'API.

Format de sortie standard

L'API retourne un objet Calculation avec les resultats du calcul :

{
"uid": "calc-123e4567-e89b-12d3-a456-426614174000",
"success": true,
"statuscode": 200,
"message": null,
"final_root": {
"activity": {
"name": "Curry de poulet avec riz",
"props": {
"climate_impact": {
"value": 2340,
"unit": "g CO₂eq"
},
"water_footprint": {
"value": 450,
"unit": "L"
},
"daily_food_unit": {
"value": 0.85
}
}
},
"sub_flows": [
{
"flow": { "name": "Blanc de poulet", "amount": 150, "unit": "g" },
"activity": { "props": { "climate_impact": { "value": 1521 } } }
},
{
"flow": { "name": "Riz basmati", "amount": 200, "unit": "g" },
"activity": { "props": { "climate_impact": { "value": 468 } } }
}
]
},
"data_errors": [],
"created_at": 1705934400.0
}
Structure de la reponse API

La reponse API reelle inclut des champs supplementaires pour les options de configuration, les journaux de mutations et les proprietes detaillees des noeuds. Consultez la documentation de reference de l'API v2 pour le schema complet.

Le patron Factory/Worker

Chaque GFM suit un patron Factory/Worker ou :

  • Factory (Singleton) : Initialise une fois par service API, detient les connexions a la base de donnees et les caches
  • Worker (Par noeud) : Cree pour chaque noeud, implemente la logique de calcul

Pour des informations detaillees sur l'architecture Factory/Worker, y compris des exemples de code et des strategies de mise en cache, consultez l'Approfondissement technique.

Prochaines etapes