Aller au contenu principal

Fonctionnement du EOS Core

Ce guide parcourt le processus de calcul complet, des données 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 ingrédients sont representes comme des noeuds avec des relations. Les Gap Filling Modules (GFM) operent sur ces noeuds pour combler les données manquantes et calculer les incidences.

583d0330f2205e8aac4960a0be26e9f1

Étape 1 : Traitement des entrées

Formats d'entrée acceptés

Le moteur accepte des données produit avec différents niveaux de détail :

// 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
}

Création des noeuds du graphe

Chaque produit et ingrédient 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)

Étape 2 : Planification des Gap Filling Modules

L'orchestrateur coordonne quels GFM doivent s'exécuter sur quels noeuds.

Logique de planification

Chaque GFM implémente deux méthodes clés :

  • should_be_scheduled() - Determine si ce module est pertinent pour un noeud
  • can_run_now() - Vérifie si toutes les dépendances 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 différents aspects du calcul :

ModuleObjectif
match_product_name_gfmFaire correspondre les noms de produits aux entrées de la base de données
origin_gfmDéterminer l'origine géographique
location_gfmGérer les facteurs spécifiques à la localisation
greenhouse_gfmCalculer les émissions de gaz à effet de serre
water_scarcity_gfmCalculer l'empreinte hydrique
rainforest_gfmÉvaluer l'incidence sur la déforestation
processing_gfmModeliser les incidences de la transformation alimentaire
transportation_decision_gfmDéterminer les modes de transport
transportation_mode_distance_gfmCalculer les distances de transport
impact_assessment_gfmAgreger les calculs d'incidence

Étape 3 : Exécution des modules

Lorsqu'un GFM s'exécute, il lit les propriétés du noeud, effectué des calculs et ecrit les résultats dans le graphe.

Exemple de flux d'exécution

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

Exécution parallele

Les modules indépendants peuvent s'exécuter en parallele lorsque leurs dépendances sont satisfaites :

198e8bdba0a99cbba60e3b0bffcfe969

Étape 4 : Calcul de l'incidence

Les modules d'incidence agrègent les données de toutes les sources en métriques environnementales.

Calcul matriciel

Avant l'évaluation de l'incidence, le matrix_calculation_gfm effectué des calculs d'Analyse du Cycle de Vie bases sur des matrices pour les systèmes de produits complexes. C'est un composant de performance critique qui :

  • Convertit le graphe de calcul en représentation matricielle
  • Résout l'équation ACV (h = B × A⁻¹ × f) efficacement
  • Agrege les flux à travers les graphes de produits complexes

Composants de l'incidence climatique

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

  • Émissions agricoles - Agriculture et utilisation des sols
  • Émissions de transformation - Énergie utilisée dans la transformation alimentaire
  • Émissions de transport - Distance × facteur d'émission du mode
  • Émissions d'emballage - Production et élimination des matériaux

Évaluation multidimensionnelle

DimensionUnitéBase de calcul
Climatkg CO₂éqProtocole GES, facteurs du GIEC
EaulitresEmpreinte hydrique bleue
Forêt tropicaleÉvaluation du risque de déforestation
Bien-être animalnotationConditions d'élevage

Étape 5 : Génération de la sortie

Les résultats finaux sont structures pour la réponse de l'API.

Format de sortie standard

L'API retourne un objet Calculation avec les résultats 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 réponse API

La réponse API réelle inclut des champs supplémentaires pour les options de configuration, les journaux de mutations et les propriétés détaillées des noeuds. Consultez la documentation de référence de l'API v2 pour le schéma 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 données et les caches
  • Worker (Par noeud) : Crée pour chaque noeud, implémente la logique de calcul

Pour des informations détaillées sur l'architecture Factory/Worker, y compris des exemples de code et des stratégies de mise en cache, consultez l'Approfondissement technique.

Prochaines étapes