Consommer moins, consommer mieux.

Open Source - Guide d'édition des verticales

Ce comparateur est open source, la première intention est l'ouverture de nos catégories produits (appelées verticales dans le jargon de Nudger), et de l'eco score qui est défini dans ces mêmes fichiers de configuration. Ce sont des fichiers au format YAML qui définissent le fonctionnement et le comportement d'une catégorie de produit, par exemple dans les textes affichés ou générés par IA, dans le calcul de l'ecoscore, ou encore l'interpretation des attributs. Ces fichiers de configuration sont conséquents et ammenés à s'enrichir régulièrement

Un principe d'héritage

Mutualisation

Une partie du fonctionnement d'une verticale est généralisable à l'ensemble des univers produits. C'est pourquoi toutes les verticales héritent d'une verticale parente, nommée _default.yml.

Spécialisation

Toutes les verticales définissent ensuite leur comportement spécifique : attributs supplémentaires, définition de l'écoscore, textes..... On retrouve ces définitions dans le répertoire /verticals/src/main/resources/verticals

Un mapping Java

Ces fichiers de configuration correspondent aux classes Java Spring VerticalConfig, et sont utilisées par les différents services pour construire les verticales et calculer les ecoscores à partir des données dont nous disposons.

Système d'héritage des verticales de Nudger

Verticale exemple : Les TV's
(tv.yml)

Si vous souhaitez créer une nouvelle verticale, ou modifier une verticale existante, une simple PR suffit (répertoire /verticals/src/main/resources/verticals ). Ici aussi, la documentation est faite au travers des commentaires. Si certains points ne vous semblent pas clairs, n'hésitez pas à nous adresser une demande via l'outil de feedback !

            		#####################################################################################################################################
#  													VERTICAL DEFAULT CONFUGURATION FILE
# Verticals definition works on an inheritance mode : 
#    > All verticals inherits properties from the "_default.yml" configuration file
#    > All verticals can override settings by redefining them in the dedicated vertical configuration file
#####################################################################################################################################

# If true, products url will be regenerated on each batch. Should not move too much, but... 
forceNameGeneration: true


# These datasources will be excluded from categories matching (for generation assistance)
generationExcludedFromCategoriesMatching:
  - "fnac.com"
#  - "rakuten.com-csv.yml"

# These attributes will be excluded from generation (for generation assistance)
generationExcludedFromAttributesMatching:
  - FEED_URL
  - FABRICANT
  - REFURBISHED
  - DISPONIBILITE
  - ETAT_PRODUIT
  - STOCK
  - AVAILABILITY
  - BRAND_NAME
  - BRAND
  - MARQUE
  - NOMFOURNISSEUR
  - THEME
  - PRODUCT_NAME
  - CATEGORIE
  - DESCRIPTIF
  - TITRE,
  - PRICE
  - SIZE_STOCK_STATUS
  - PRICE_NOREBATE  

# If product categories contains one of this token, this will be unmatched
excludingTokensFromCategoriesMatching:
  - ACCESSOIRE
  - QUINCAILLERIE
  - CABLE


# The scores that are available to build the impact score
availableImpactScoreCriterias:
    CLASSE_ENERGY:
      key: CLASSE_ENERGY
      description:
        fr: "La classe énergétique"
    REPAIRABILITY_INDEX:
      key: REPAIRABILITY_INDEX
      description:
        fr: "L'indice de réparabilité de l'objet"
    WEIGHT:
      key: WEIGHT
      description:
        fr: "Le poids de l'objet"
    POWER_CONSUMPTION_TYPICAL:
      key: POWER_CONSUMPTION_TYPICAL
      description:
        fr: "La consommation électrique de l'objet en fonctionnement"
    POWER_CONSUMPTION_OFF:
      key: POWER_CONSUMPTION_OFF
      description:
        fr: "La consommation électrique à l'arrêt, ou en veille"
    BRAND_SUSTAINABILITY:
      key: BRAND_SUSTAINABILITY
      description:
        fr: "L'évaluation ESG de l'entreprise (filiale ou société mère, suivant la finesse des données) qui fabrique le produit, d'après le score de performance ESG de Sustainalytics"
    DATA_QUALITY:
      key: DATA_QUALITY
      description:
        fr: "La qualité de la donnée pour le produit. Quand un facteur manque pour un produit, on lui associe la moyenne de ce facteur pour sa catégorie, mai on dégrade le facteur DATA_QUALITY. Cela permet de pénaliser sans exclure les pruidts pour lequel un facteur est absent.' "
              
                
      
#####################################################################################################################################
# I18N CONFIGURATION
# Configure in a i18n way all the texts of a product, including the Url, the title, the description, the open graph metas, ....
# Use a micro templated language, that allows to introduce variables and "if condition", which allows to generate dynamic texts 
######################################################################################################################################
i18n:
  # Apply for the default site / language (english, on the .com website)
  fr:
      url: 
        prefix: ""
        attrs:
          - BRAND
          - MODEL
      
      h1Title:  
        prefix: ""
        attrs:
          - BRAND
          - MODEL
        
      productMetaTitle: "[(${p.brand()})] [(${p.model()})] : Eco-score, compensation écologique et meilleurs prix"
      productMetaDescription:  "[(${p.brand()})] [(${p.model()})] : Eco-score, compensation || écologique | environnementale || et meilleurs prix."              
      productMetaOpenGraphTitle: "[(${p.brand()})] - [(${p.model()})] : Ecoscore de [(${p.ecoscore()})]. Venez nudger ce téléviseur au meilleur prix, et reversez gratuitement [(${p.compensation()})]"
      productMetaOpenGraphDescription: "productMetaOpenGraphDescription"
      productMetaTwitterTitle: "productMetaTwitterTitle"
      productMetaTwitterDescription: "productMetaTwitterDescription"


      ####################################################################################
      # AI TEXTS CONFIGS
      ####################################################################################  
#      aiConfig:
#        - key: "global-description" 
#          prompt: " écris un texte de maximum 100 mots, dans un style académique, une description avec des listes à puce en html, comprenant les principaux avantages et inconvénients de  [(${p.brand()})] [(${p.model()})], sur la base des caracteriques suivantes : [(${p.caracteristics()})]"
#        - key: "ecological-description" 
#          prompt: "écris un texte de maximum 100 mots, dans un style académique, une analyse de l'impact environnemental de [(${p.brand()})] [(${p.model()})], sur la base des caracteriques suivantes : [(${p.caracteristics()})]"

  ####################################################################################
   # AI TEXTS CONFIGS
   ####################################################################################  
      aiConfigs:
         override: false
         pauseDurationMs: 1000
         rootPrompt: |
             Tu es un expert en [(${VERTICAL_TITLE})]. Fais une recherche d'information, une analyse technique, fonctionnelle et écologique pour le produit suivant : 
              
             Caractéristiques : 
             [(${p.caracteristics()})]
           
             Génère un fichier JSON clé-valeur, textes en français uniquement, pour l'objet concerné répondant uniquement et strictement aux prompts suivants :      
    
         prompts: 
            - key: "global-description"
              prompt: |           
                 : en tant qu'expert technique, rédige une description de l'objet en mettant en avant ses principales caractéristiques techniques. Le texte doit comporter entre 180 et 200 mots et être composé de deux paragraphes distincts, séparés par un point-virgule. Veille à ce que chaque paragraphe soit équilibré en termes de longueur.
    
            - key: "ecological-description"
              prompt: |           
                 : en tant qu'expert en impacts environnementaux, rédige une analyse de l'impact écologique de l'objet. Le texte doit comporter entre 180 et 200 mots et être composé de deux paragraphes distincts, séparés par un point-virgule. Veille à ce que chaque paragraphe soit équilibré en termes de longueur.
    
            - key: "pros"
              prompt: |           
                 : en tant qu'expert technique, liste cinq avantages du produit dans une seule ligne, séparés par des points-virgules, dans un style formel.
    
            - key: "cons"
              prompt: |           
                 : en tant qu'expert technique, liste cinq inconvénients techniques du produit dans une seule ligne, séparés par des points-virgules, dans un style formel.


                 
# GenAiConfig for this vertical
genAiConfig:
   # If false, will bypass the generativ ia texts generation  
   enabled: false

   
##############################################################################
# Eco score configuration 
# Specify here the specific ecoscore for this vertical. Format : 
# >> EXISTING_SCORE: WEIGHT
# Weight sum MUST BE equals to 1
##############################################################################
# Sum of weight(values) must be equals to 1
impactScoreConfig:
  purpose: "Élaborer un score d'impact environnemental pour les lave-linges en utilisant des facteurs disponibles et coefficientés pour refléter leur impact relatif sur l'environnement."
  availlableDatas: "Les données disponibles incluent le poids de l'objet, la consommation électrique en marche, l'évaluation ESG de la marque, et la qualité des données. Ces facteurs sont pertinents car ils couvrent des aspects clés de l'impact environnemental : l'empreinte matérielle, l'efficacité énergétique, la responsabilité sociale de l'entreprise, et la fiabilité des données."
  criticalReview: "La démarche actuelle se concentre sur des facteurs mesurables et disponibles, mais pourrait être enrichie en incluant des critères tels que la durabilité des matériaux, la recyclabilité, et l'impact du cycle de vie complet. De plus, l'impact du transport et de la distribution pourrait être considéré pour une évaluation plus complète."
  criteriasAnalysis:
    WEIGHT: "Le poids est un indicateur de l'empreinte matérielle du produit. Un poids plus élevé peut indiquer une utilisation accrue de matériaux, ce qui peut avoir un impact environnemental plus important en termes de ressources et de transport."
    POWER_CONSUMPTION: "La consommation électrique est cruciale car elle détermine l'efficacité énergétique du produit. Une consommation plus faible est préférable car elle réduit l'empreinte carbone liée à l'utilisation du produit."
    BRAND_SUSTAINABILITY: "L'évaluation ESG de la marque reflète l'engagement de l'entreprise envers des pratiques durables. Une meilleure évaluation indique que la marque est plus susceptible de minimiser son impact environnemental global."
    DATA_QUALITY: "La qualité des données est essentielle pour garantir la fiabilité de l'évaluation. Des données complètes et précises permettent une meilleure estimation de l'impact environnemental."
  criteriasPonderation:
    WEIGHT: 0.25
    POWER_CONSUMPTION: 0.35
    BRAND_SUSTAINABILITY: 0.25
    DATA_QUALITY: 0.15
        
requiredAttributes:
#  - WEIGHT

####################################################################################
# RESOURCES CONFIGURATION
####################################################################################  

resourcesConfig:
  # In case of images, the min number of pixels the img must have
  minPixelsEvictionSize: 20000
  overrideResources: false
  md5Exclusions:
    - 84fe74f622f163b924b962997adda0e1
    - de819179308dcec8c172e72d06b9e757
    - f4011cbc1e2082616017952f76c0e2d1


####################################################################################
# BARCODE CONFIG
####################################################################################    

barcodeConfig:  
  qrCodeSize: 300
  gtinSize: 300
  datamatrixSize: 600

####################################################################################
# EXTERNAL DESCRIPTIONS CONFIG
####################################################################################    

descriptionsAggregationConfig:
  descriptionsTruncationLength: 4000
  descriptionsTruncationSuffix: "..."

  
        
####################################################################################
#                       GLOBALLY APPLIED FILTERS
####################################################################################  

        
globalTechnicalFilters:
  - "WARRANTY"
  - "YEAR"
  - "COLOR"
  - "WEIGHT"
      
####################################################################################
# Brands configuration
####################################################################################      
brandsExclusion:
  - NON COMMUNIQUE    
  - GENERIQUE
  - INCONNU

brandsAlias:
  "LG ELECTRONICS" : LG 

        
####################################################################################
# 						ATTRIBUTES CONFIGURATION
####################################################################################  
  
attributesConfig:

  # Those attributes will be removed from unmatchedAttributes if found
  exclusions:
# Comment the feed url if you need to debug the CSV datasources (get the CSV that provides a product)    
    - "FEED_URL"

    - "PRODUCT_MODEL"
    - "PRODUCT_TYPE"
    - "IDPRODUIT"
    - "PRODUCT_GTIN"
    
    - "EAN GGSHOPPING"
    - "EAN"

#    - "BRAND_ID"
#    - "BRAND_NAME"

            # USED TO BUILD categories path (concat all CSV fields that contains "catego*"") 
    - "SOUSCATEGORIE"
    - "MERCHANT_PRODUCT_SECOND_CATEGORY"
    - "MERCHANT_PRODUCT_THIRD_CATEGORY"
    - "MERCHANT_CATEGORY"
    - "MERCHANT_PRODUCT_CATEGORY_PATH"
    - "CATEGORY_ID"

    
    
# TODO : Check pertinence    
#    - "DESCRIPTION"
#    - "PRODUCT_SHORT_DESCRIPTION"
    
#    - "CUSTOM_1"
#    - "CUSTOM_2"
#    - "CUSTOM_3"
#    - "CUSTOM_4"
#    - "CUSTOM_5"
#    - "CUSTOM_6"
#    - "CUSTOM_7"
#    - "CUSTOM_8"
#    - "CUSTOM_9"

    # TODO Will one day be used to complete offers, better than deleting them
    - "DELIVERY_COST"
    - "FRAISDEPORT"
    - "DELIVERY_TIME"
    - "CONDITION"
    - "CURRENCY"
    - "DELIVERY_COST"
    - "DELIVERY_TIME"
    - "DELIVERY_WEIGHT"
    - "IN_STOCK"
    - "DATEEXPEDITION"
    - "CODEBARRE"
    - "ETAT"
    - "REFURBISHED"
    - "ETAT_PRODUIT"
    - "DISPONIBILITE"
    - "SIZE_STOCK_STATUS"
 
    # Noisy items   
    - "ADVERT_RAKUPON_AMOUNT"
    - "PRICE_WITH_RAKUPON"
    - "ADVERT_RAKUPON_CONDITION"    
    - "CNET INLINE CONTENT"
    - "ADVERT_RAKUPON_NAME"
    - "AW_THUMB_URL"
    - "CRAWLER"
    - "URLFICHEPRODUIT"
    - "AW_IMAGE_URL"
    - "SEARCH KEYWORDS"
    - "ALTERNATE_IMAGE"
    - "AVERAGE_RATING"
    - "AW_DEEP_LINK"
    - "LINK"
    - "AW_PRODUCT_ID"
    - "DATA_FEED_ID"
    - "IS_FOR_SALE"
    - "MERCHANT_DEEP_LINK"
    - "MERCHANT_ID"
    - "MERCHANT_IMAGE_URL"
    - "MERCHANT_NAME"
    - "MERCHANT_PRODUCT_ID"
    - "MPN"
    - "PARENT_PRODUCT_ID"
    - "PRE_ORDER"
    - "RATING"
    - "SEARCH_PRICE"
    - "PRICE_NEW"
    - "STOCK_QUANTITY"
    - "STOCK_STATUS"
    - "WEB_OFFER"
    - "BASE_PRICE"
    - "PRICE_NOREBATE"
    - "PRODUCT_PRICE_OLD"
    - "PRIX"
    - "PRICE"
    - "REVIEWS"
    - "SAVING"
    - "SAVINGS_PERCENT"
    - "SOLDES"
    - "TOP100"
    - "ADVERT_RAKUPON_DISCOUNT"
    - "ADVERT_RAKUPON_END"
    - "BRAND_ID"
    - "LANGUAGE"

  # Attributes having the following value will be classified as product features
  featuredValues:
    - YES
    - OUI
    - Y


  
####################################################################################
# ATTRIBUTES DEFINITIONS
# Those attributes will be availlable for all products if found
####################################################################################      
  configs:
  ## TODO : HAUTEUR, PROFONDEUR, LARGEUR, ...
  
  ##################################
  # CLASSE ENERGETIQUE
  ##################################
  
  - key: "CLASSE_ENERGY"
    faIcon: "fa-bolt"
    name:
      default: "Energy class"
      fr: "Classe énergétique"
    filteringType: "TEXT"
    asScore: true

    attributeValuesOrdering: "MAPPED"
    synonyms:
      all:
      - "CLASSE ÉNERGÉTIQUE"
      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (HDR)"
      - "CLASSE ECO"
      - "CLASSE ENERGÉTIQUE"
      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE"
      - "CLASSE D'EFFICACITE ENERGETIQUE"
      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (HDR)"
      - "ENERGY EFFICIENCY CLASS"
      - "CLASSE_ENERGY"
#      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (HDR)"
#      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (SDR)"
      
    parser:
      normalize: true
      trim: true
      lowerCase: false
      upperCase: true
      removeParenthesis: false
      deleteTokens:
      - "CLASSE"
      - "(ÉCHELLE A++ À E)"
      - "NOT AVAILABLE"
    numericMapping:
      A+++: 18.0    
      A++: 18.0
      A+: 17.0
      A: 16.0
      B++: 15.0
      B+: 14.0
      B: 13.0
      C++: 12.0
      C+: 11.0
      C: 10.0
      D++: 9.0
      D+: 8.0
      D: 7.0
      E++: 6.0
      E+: 5.0
      E: 4.0
      F++: 3.0
      F+: 2.0
      F: 1.0
      G: 0.0      
      



  ##################################
  # REPAIRABILITY INDEX
  ##################################
  
  - key: "REPAIRABILITY_INDEX"
    faIcon: "fa-screwdriver-wrench"
    name:
      default: "Repairability index"
      fr: "Indice de réparabilité"
    filteringType: "NUMERIC"
    asScore: true


    attributeValuesOrdering: "MAPPED"

    synonyms:
      all:
      - "REPAIRABILITY INDEX"
      - "INDICE DE RÉPARABILITÉ (NOTE SUR 10)"
      - "INDICE DE RÉPARABILITÉ"
      - "L’INDICE DE RÉPARABILITÉ"
      - "REPAIRABILITY_INDEX"
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false
      deleteTokens:
      - "/10"


  ##################################
  # ANNEE DE SORTIE
  ##################################
  
  - key: "YEAR"
    faIcon: "calendar-days"
    name:
      default: "Year"
      fr: "Année de mise en service"
    filteringType: "NUMERIC"
    asScore: false
    
    synonyms:
      all:
      - "ANNÉE DE LANCEMENT"
      - "ANNÉE DE SORTIE"
      - "ANNEE DE SORTIE"                
      - "ANNÉE DE MODÈLE"
      - "ANNEE DE LANCEMENT"
      - "YEAR"
      
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false
#      deleteTokens:
#      - "ANS"



  ##################################
  # PORTS HDMI
  ##################################
  
  - key: "HDMI_PORTS_QUANTITY"
    faIcon: "fa-sitemap"
    icecatFeaturesIds: 
      - 3566      
    name:
      default: "HDMI ports quantity"
      fr: "Quantité de ports HDMI"
    filteringType: "NUMERIC"
    asScore: false
    
    synonyms:
      all:
      - "QTE DE PORTS HDMI"
      - "QUANTITE DE PORTS HDMI"   
      - "HDMI_PORTS_QUANTITY"
      
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false
#      deleteTokens:
#      - "ANS"





  ##################################
  # COULEUR
  ##################################
  
  - key: "COLOR"
    faIcon: "fa-droplet"
    name:
      default: "Color"
      fr: "Couleur"
    filteringType: "TEXT"
    asScore: false
    
    synonyms:
      all:
      - "COULEUR"
      - "COULEUR DU PRODUIT"
      - "CATÉGORIE DE COULEUR"
      - "CATEGORIE DE COULEUR"
      - "COULEUR DU PRODUIT"
      - "COULEUR GÉNÉRIQUE"
      - "COULEUR GENÉRIQUE"
      - "COLOUR"
      - "COLOR"
      
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      
      removeParenthesis: false
#      deleteTokens:
#      - "ANS"
      

  ##################################
  # POIDS
  ##################################
  
  - key: "WEIGHT"
    icecatFeaturesIds:
      - 94
      - 33015    
    faIcon: "fa-weight"
    name:
      default: "Weight"
      fr: "Poids"
    filteringType: "NUMERIC"
    asScore: true
    reverseScore: true
    
    synonyms:
      all:
      - "POIDS"
      - "WEIGHT"
      
    parser:
      clazz: org.open4goods.api.services.aggregation.services.realtime.parser.WeightParser  
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false

      


  ################################################################################
  #                         CONSOMMATION ELECTRIQUE (MAX / TYPIQUE)
  ################################################################################
  # Generated on 10/12/2024 21:22, coverage was 40% (956/2389) . 
  # TOP attributes values are :
#     - 70 (26 items)
#     - 54 (21 items)
#     - 84 (20 items)
#     - 53 (18 items)
#     - 112 (17 items)
#     - 65 (16 items)
#     - 80 (16 items)
#     - 71 (15 items)
#     - 77 (15 items)
#     - 110 (14 items)
#     + 144 more attributes...
#   
  ##################################
  - key: "POWER_CONSUMPTION_TYPICAL"
    filteringType: "NUMERIC"
    asScore: true
    reverseScore: true    
    faIcon: "fa-plug-circle-check"
  
    icecatFeaturesIds:      
        - 445
        - 9137 
      
    name:
        default: "Power consumption"
        fr: "Consommation électrique (typique/max)"
      
    synonyms:
        all:
          - "CONSOMMATION ELECTRIQUE TYPIQUE"
          - "CONSOMMATION (MAX)"
          - "POWER_CONSUMPTION_TYPICAL"
          
             
    parser:
        normalize: true
        trim: false
        lowerCase: false
        upperCase: true
        removeParenthesis: false
        
  ################################################################################
  #                         CONSOMMATION ELECTRIQUE (ARRET / VEILLE)
  ################################################################################
  # Generated on 10/12/2024 21:22, coverage was 2% (63/2389) . 
  # TOP attributes values are :
#     - 0.3 (34 items)
#     - 0.5 (24 items)
#     - 0 (2 items)
#     - 0, 3 W (2 items)
#   
  ##################################
  - key: "POWER_CONSUMPTION_OFF"
    filteringType: "NUMERIC"
    asScore: true
    reverseScore: true    
    faIcon: "fa-plug-circle-xmark"
  
    icecatFeaturesIds:      
         - 2034
         - 2036 
      
    name:
         default: "Power consumption (off)"
         fr: "Consommation électrique (arrêt/veille)"
      
    synonyms:
         all:
           - "CONSOMMATION ELECTRIQUE (ARRET)"
           - "CONSOMMATION D'ENERGIE (MODE VEILLE)"
           - "POWER_CONSUMPTION_OFF"
             
    parser:
         normalize: true
         trim: true
         lowerCase: false
         upperCase: true
         removeParenthesis: false
         deleteTokens:
          - "W"


      
#################################################
# UI / Scores Oriented attributes
#################################################

  ##################################
  # FEATURES
# Note : not associated with any vals, features of parsed base on yes or no values
  ##################################
  
  - key: "FEATURES"
    faIcon: "fa-list"
    attributePath: attributes.features
    name:
      default: "Features"
      fr: "Fonctionnalités"
      
  - key: "BRAND_SUSTAINABILITY"
    faIcon: "fa-globe"
#    attributePath: attributes.features
    name:
      default: "Evaluation ESG (Sustainalytics) de la marque"
      fr: "Evaluation ESG de la marque (Sustainalytics)"
      

  - key: "DATA_QUALITY"
    faIcon: "fa-file-shield"
#    attributePath: attributes.features
    name:
      default: "Data quality"
      fr: "Qualité de la donnée"
      




            	

Verticale parente
(_default.yml)

La documentation est faite au travers des commentaires. Si certains points ne vous semblent pas clairs, n'hésitez pas à nous adresser une demande via l'outil de feedback !

            		#####################################################################################################################################
#  													VERTICAL DEFAULT CONFUGURATION FILE
# Verticals definition works on an inheritance mode : 
#    > All verticals inherits properties from the "_default.yml" configuration file
#    > All verticals can override settings by redefining them in the dedicated vertical configuration file
#####################################################################################################################################

# If true, products url will be regenerated on each batch. Should not move too much, but... 
forceNameGeneration: true


# These datasources will be excluded from categories matching (for generation assistance)
generationExcludedFromCategoriesMatching:
  - "fnac.com"
#  - "rakuten.com-csv.yml"

# These attributes will be excluded from generation (for generation assistance)
generationExcludedFromAttributesMatching:
  - FEED_URL
  - FABRICANT
  - REFURBISHED
  - DISPONIBILITE
  - ETAT_PRODUIT
  - STOCK
  - AVAILABILITY
  - BRAND_NAME
  - BRAND
  - MARQUE
  - NOMFOURNISSEUR
  - THEME
  - PRODUCT_NAME
  - CATEGORIE
  - DESCRIPTIF
  - TITRE,
  - PRICE
  - SIZE_STOCK_STATUS
  - PRICE_NOREBATE  

# If product categories contains one of this token, this will be unmatched
excludingTokensFromCategoriesMatching:
  - ACCESSOIRE
  - QUINCAILLERIE
  - CABLE


# The scores that are available to build the impact score
availableImpactScoreCriterias:
    CLASSE_ENERGY:
      key: CLASSE_ENERGY
      description:
        fr: "La classe énergétique"
    REPAIRABILITY_INDEX:
      key: REPAIRABILITY_INDEX
      description:
        fr: "L'indice de réparabilité de l'objet"
    WEIGHT:
      key: WEIGHT
      description:
        fr: "Le poids de l'objet"
    POWER_CONSUMPTION_TYPICAL:
      key: POWER_CONSUMPTION_TYPICAL
      description:
        fr: "La consommation électrique de l'objet en fonctionnement"
    POWER_CONSUMPTION_OFF:
      key: POWER_CONSUMPTION_OFF
      description:
        fr: "La consommation électrique à l'arrêt, ou en veille"
    BRAND_SUSTAINABILITY:
      key: BRAND_SUSTAINABILITY
      description:
        fr: "L'évaluation ESG de l'entreprise (filiale ou société mère, suivant la finesse des données) qui fabrique le produit, d'après le score de performance ESG de Sustainalytics"
    DATA_QUALITY:
      key: DATA_QUALITY
      description:
        fr: "La qualité de la donnée pour le produit. Quand un facteur manque pour un produit, on lui associe la moyenne de ce facteur pour sa catégorie, mai on dégrade le facteur DATA_QUALITY. Cela permet de pénaliser sans exclure les pruidts pour lequel un facteur est absent.' "
              
                
      
#####################################################################################################################################
# I18N CONFIGURATION
# Configure in a i18n way all the texts of a product, including the Url, the title, the description, the open graph metas, ....
# Use a micro templated language, that allows to introduce variables and "if condition", which allows to generate dynamic texts 
######################################################################################################################################
i18n:
  # Apply for the default site / language (english, on the .com website)
  fr:
      url: 
        prefix: ""
        attrs:
          - BRAND
          - MODEL
      
      h1Title:  
        prefix: ""
        attrs:
          - BRAND
          - MODEL
        
      productMetaTitle: "[(${p.brand()})] [(${p.model()})] : Eco-score, compensation écologique et meilleurs prix"
      productMetaDescription:  "[(${p.brand()})] [(${p.model()})] : Eco-score, compensation || écologique | environnementale || et meilleurs prix."              
      productMetaOpenGraphTitle: "[(${p.brand()})] - [(${p.model()})] : Ecoscore de [(${p.ecoscore()})]. Venez nudger ce téléviseur au meilleur prix, et reversez gratuitement [(${p.compensation()})]"
      productMetaOpenGraphDescription: "productMetaOpenGraphDescription"
      productMetaTwitterTitle: "productMetaTwitterTitle"
      productMetaTwitterDescription: "productMetaTwitterDescription"


      ####################################################################################
      # AI TEXTS CONFIGS
      ####################################################################################  
#      aiConfig:
#        - key: "global-description" 
#          prompt: " écris un texte de maximum 100 mots, dans un style académique, une description avec des listes à puce en html, comprenant les principaux avantages et inconvénients de  [(${p.brand()})] [(${p.model()})], sur la base des caracteriques suivantes : [(${p.caracteristics()})]"
#        - key: "ecological-description" 
#          prompt: "écris un texte de maximum 100 mots, dans un style académique, une analyse de l'impact environnemental de [(${p.brand()})] [(${p.model()})], sur la base des caracteriques suivantes : [(${p.caracteristics()})]"

  ####################################################################################
   # AI TEXTS CONFIGS
   ####################################################################################  
      aiConfigs:
         override: false
         pauseDurationMs: 1000
         rootPrompt: |
             Tu es un expert en [(${VERTICAL_TITLE})]. Fais une recherche d'information, une analyse technique, fonctionnelle et écologique pour le produit suivant : 
              
             Caractéristiques : 
             [(${p.caracteristics()})]
           
             Génère un fichier JSON clé-valeur, textes en français uniquement, pour l'objet concerné répondant uniquement et strictement aux prompts suivants :      
    
         prompts: 
            - key: "global-description"
              prompt: |           
                 : en tant qu'expert technique, rédige une description de l'objet en mettant en avant ses principales caractéristiques techniques. Le texte doit comporter entre 180 et 200 mots et être composé de deux paragraphes distincts, séparés par un point-virgule. Veille à ce que chaque paragraphe soit équilibré en termes de longueur.
    
            - key: "ecological-description"
              prompt: |           
                 : en tant qu'expert en impacts environnementaux, rédige une analyse de l'impact écologique de l'objet. Le texte doit comporter entre 180 et 200 mots et être composé de deux paragraphes distincts, séparés par un point-virgule. Veille à ce que chaque paragraphe soit équilibré en termes de longueur.
    
            - key: "pros"
              prompt: |           
                 : en tant qu'expert technique, liste cinq avantages du produit dans une seule ligne, séparés par des points-virgules, dans un style formel.
    
            - key: "cons"
              prompt: |           
                 : en tant qu'expert technique, liste cinq inconvénients techniques du produit dans une seule ligne, séparés par des points-virgules, dans un style formel.


                 
# GenAiConfig for this vertical
genAiConfig:
   # If false, will bypass the generativ ia texts generation  
   enabled: false

   
##############################################################################
# Eco score configuration 
# Specify here the specific ecoscore for this vertical. Format : 
# >> EXISTING_SCORE: WEIGHT
# Weight sum MUST BE equals to 1
##############################################################################
# Sum of weight(values) must be equals to 1
impactScoreConfig:
  purpose: "Élaborer un score d'impact environnemental pour les lave-linges en utilisant des facteurs disponibles et coefficientés pour refléter leur impact relatif sur l'environnement."
  availlableDatas: "Les données disponibles incluent le poids de l'objet, la consommation électrique en marche, l'évaluation ESG de la marque, et la qualité des données. Ces facteurs sont pertinents car ils couvrent des aspects clés de l'impact environnemental : l'empreinte matérielle, l'efficacité énergétique, la responsabilité sociale de l'entreprise, et la fiabilité des données."
  criticalReview: "La démarche actuelle se concentre sur des facteurs mesurables et disponibles, mais pourrait être enrichie en incluant des critères tels que la durabilité des matériaux, la recyclabilité, et l'impact du cycle de vie complet. De plus, l'impact du transport et de la distribution pourrait être considéré pour une évaluation plus complète."
  criteriasAnalysis:
    WEIGHT: "Le poids est un indicateur de l'empreinte matérielle du produit. Un poids plus élevé peut indiquer une utilisation accrue de matériaux, ce qui peut avoir un impact environnemental plus important en termes de ressources et de transport."
    POWER_CONSUMPTION: "La consommation électrique est cruciale car elle détermine l'efficacité énergétique du produit. Une consommation plus faible est préférable car elle réduit l'empreinte carbone liée à l'utilisation du produit."
    BRAND_SUSTAINABILITY: "L'évaluation ESG de la marque reflète l'engagement de l'entreprise envers des pratiques durables. Une meilleure évaluation indique que la marque est plus susceptible de minimiser son impact environnemental global."
    DATA_QUALITY: "La qualité des données est essentielle pour garantir la fiabilité de l'évaluation. Des données complètes et précises permettent une meilleure estimation de l'impact environnemental."
  criteriasPonderation:
    WEIGHT: 0.25
    POWER_CONSUMPTION: 0.35
    BRAND_SUSTAINABILITY: 0.25
    DATA_QUALITY: 0.15
        
requiredAttributes:
#  - WEIGHT

####################################################################################
# RESOURCES CONFIGURATION
####################################################################################  

resourcesConfig:
  # In case of images, the min number of pixels the img must have
  minPixelsEvictionSize: 20000
  overrideResources: false
  md5Exclusions:
    - 84fe74f622f163b924b962997adda0e1
    - de819179308dcec8c172e72d06b9e757
    - f4011cbc1e2082616017952f76c0e2d1


####################################################################################
# BARCODE CONFIG
####################################################################################    

barcodeConfig:  
  qrCodeSize: 300
  gtinSize: 300
  datamatrixSize: 600

####################################################################################
# EXTERNAL DESCRIPTIONS CONFIG
####################################################################################    

descriptionsAggregationConfig:
  descriptionsTruncationLength: 4000
  descriptionsTruncationSuffix: "..."

  
        
####################################################################################
#                       GLOBALLY APPLIED FILTERS
####################################################################################  

        
globalTechnicalFilters:
  - "WARRANTY"
  - "YEAR"
  - "COLOR"
  - "WEIGHT"
      
####################################################################################
# Brands configuration
####################################################################################      
brandsExclusion:
  - NON COMMUNIQUE    
  - GENERIQUE
  - INCONNU

brandsAlias:
  "LG ELECTRONICS" : LG 

        
####################################################################################
# 						ATTRIBUTES CONFIGURATION
####################################################################################  
  
attributesConfig:

  # Those attributes will be removed from unmatchedAttributes if found
  exclusions:
# Comment the feed url if you need to debug the CSV datasources (get the CSV that provides a product)    
    - "FEED_URL"

    - "PRODUCT_MODEL"
    - "PRODUCT_TYPE"
    - "IDPRODUIT"
    - "PRODUCT_GTIN"
    
    - "EAN GGSHOPPING"
    - "EAN"

#    - "BRAND_ID"
#    - "BRAND_NAME"

            # USED TO BUILD categories path (concat all CSV fields that contains "catego*"") 
    - "SOUSCATEGORIE"
    - "MERCHANT_PRODUCT_SECOND_CATEGORY"
    - "MERCHANT_PRODUCT_THIRD_CATEGORY"
    - "MERCHANT_CATEGORY"
    - "MERCHANT_PRODUCT_CATEGORY_PATH"
    - "CATEGORY_ID"

    
    
# TODO : Check pertinence    
#    - "DESCRIPTION"
#    - "PRODUCT_SHORT_DESCRIPTION"
    
#    - "CUSTOM_1"
#    - "CUSTOM_2"
#    - "CUSTOM_3"
#    - "CUSTOM_4"
#    - "CUSTOM_5"
#    - "CUSTOM_6"
#    - "CUSTOM_7"
#    - "CUSTOM_8"
#    - "CUSTOM_9"

    # TODO Will one day be used to complete offers, better than deleting them
    - "DELIVERY_COST"
    - "FRAISDEPORT"
    - "DELIVERY_TIME"
    - "CONDITION"
    - "CURRENCY"
    - "DELIVERY_COST"
    - "DELIVERY_TIME"
    - "DELIVERY_WEIGHT"
    - "IN_STOCK"
    - "DATEEXPEDITION"
    - "CODEBARRE"
    - "ETAT"
    - "REFURBISHED"
    - "ETAT_PRODUIT"
    - "DISPONIBILITE"
    - "SIZE_STOCK_STATUS"
 
    # Noisy items   
    - "ADVERT_RAKUPON_AMOUNT"
    - "PRICE_WITH_RAKUPON"
    - "ADVERT_RAKUPON_CONDITION"    
    - "CNET INLINE CONTENT"
    - "ADVERT_RAKUPON_NAME"
    - "AW_THUMB_URL"
    - "CRAWLER"
    - "URLFICHEPRODUIT"
    - "AW_IMAGE_URL"
    - "SEARCH KEYWORDS"
    - "ALTERNATE_IMAGE"
    - "AVERAGE_RATING"
    - "AW_DEEP_LINK"
    - "LINK"
    - "AW_PRODUCT_ID"
    - "DATA_FEED_ID"
    - "IS_FOR_SALE"
    - "MERCHANT_DEEP_LINK"
    - "MERCHANT_ID"
    - "MERCHANT_IMAGE_URL"
    - "MERCHANT_NAME"
    - "MERCHANT_PRODUCT_ID"
    - "MPN"
    - "PARENT_PRODUCT_ID"
    - "PRE_ORDER"
    - "RATING"
    - "SEARCH_PRICE"
    - "PRICE_NEW"
    - "STOCK_QUANTITY"
    - "STOCK_STATUS"
    - "WEB_OFFER"
    - "BASE_PRICE"
    - "PRICE_NOREBATE"
    - "PRODUCT_PRICE_OLD"
    - "PRIX"
    - "PRICE"
    - "REVIEWS"
    - "SAVING"
    - "SAVINGS_PERCENT"
    - "SOLDES"
    - "TOP100"
    - "ADVERT_RAKUPON_DISCOUNT"
    - "ADVERT_RAKUPON_END"
    - "BRAND_ID"
    - "LANGUAGE"

  # Attributes having the following value will be classified as product features
  featuredValues:
    - YES
    - OUI
    - Y


  
####################################################################################
# ATTRIBUTES DEFINITIONS
# Those attributes will be availlable for all products if found
####################################################################################      
  configs:
  ## TODO : HAUTEUR, PROFONDEUR, LARGEUR, ...
  
  ##################################
  # CLASSE ENERGETIQUE
  ##################################
  
  - key: "CLASSE_ENERGY"
    faIcon: "fa-bolt"
    name:
      default: "Energy class"
      fr: "Classe énergétique"
    filteringType: "TEXT"
    asScore: true

    attributeValuesOrdering: "MAPPED"
    synonyms:
      all:
      - "CLASSE ÉNERGÉTIQUE"
      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (HDR)"
      - "CLASSE ECO"
      - "CLASSE ENERGÉTIQUE"
      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE"
      - "CLASSE D'EFFICACITE ENERGETIQUE"
      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (HDR)"
      - "ENERGY EFFICIENCY CLASS"
      - "CLASSE_ENERGY"
#      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (HDR)"
#      - "CLASSE D'EFFICACITÉ ÉNERGÉTIQUE (SDR)"
      
    parser:
      normalize: true
      trim: true
      lowerCase: false
      upperCase: true
      removeParenthesis: false
      deleteTokens:
      - "CLASSE"
      - "(ÉCHELLE A++ À E)"
      - "NOT AVAILABLE"
    numericMapping:
      A+++: 18.0    
      A++: 18.0
      A+: 17.0
      A: 16.0
      B++: 15.0
      B+: 14.0
      B: 13.0
      C++: 12.0
      C+: 11.0
      C: 10.0
      D++: 9.0
      D+: 8.0
      D: 7.0
      E++: 6.0
      E+: 5.0
      E: 4.0
      F++: 3.0
      F+: 2.0
      F: 1.0
      G: 0.0      
      



  ##################################
  # REPAIRABILITY INDEX
  ##################################
  
  - key: "REPAIRABILITY_INDEX"
    faIcon: "fa-screwdriver-wrench"
    name:
      default: "Repairability index"
      fr: "Indice de réparabilité"
    filteringType: "NUMERIC"
    asScore: true


    attributeValuesOrdering: "MAPPED"

    synonyms:
      all:
      - "REPAIRABILITY INDEX"
      - "INDICE DE RÉPARABILITÉ (NOTE SUR 10)"
      - "INDICE DE RÉPARABILITÉ"
      - "L’INDICE DE RÉPARABILITÉ"
      - "REPAIRABILITY_INDEX"
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false
      deleteTokens:
      - "/10"


  ##################################
  # ANNEE DE SORTIE
  ##################################
  
  - key: "YEAR"
    faIcon: "calendar-days"
    name:
      default: "Year"
      fr: "Année de mise en service"
    filteringType: "NUMERIC"
    asScore: false
    
    synonyms:
      all:
      - "ANNÉE DE LANCEMENT"
      - "ANNÉE DE SORTIE"
      - "ANNEE DE SORTIE"                
      - "ANNÉE DE MODÈLE"
      - "ANNEE DE LANCEMENT"
      - "YEAR"
      
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false
#      deleteTokens:
#      - "ANS"



  ##################################
  # PORTS HDMI
  ##################################
  
  - key: "HDMI_PORTS_QUANTITY"
    faIcon: "fa-sitemap"
    icecatFeaturesIds: 
      - 3566      
    name:
      default: "HDMI ports quantity"
      fr: "Quantité de ports HDMI"
    filteringType: "NUMERIC"
    asScore: false
    
    synonyms:
      all:
      - "QTE DE PORTS HDMI"
      - "QUANTITE DE PORTS HDMI"   
      - "HDMI_PORTS_QUANTITY"
      
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false
#      deleteTokens:
#      - "ANS"





  ##################################
  # COULEUR
  ##################################
  
  - key: "COLOR"
    faIcon: "fa-droplet"
    name:
      default: "Color"
      fr: "Couleur"
    filteringType: "TEXT"
    asScore: false
    
    synonyms:
      all:
      - "COULEUR"
      - "COULEUR DU PRODUIT"
      - "CATÉGORIE DE COULEUR"
      - "CATEGORIE DE COULEUR"
      - "COULEUR DU PRODUIT"
      - "COULEUR GÉNÉRIQUE"
      - "COULEUR GENÉRIQUE"
      - "COLOUR"
      - "COLOR"
      
    parser:
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      
      removeParenthesis: false
#      deleteTokens:
#      - "ANS"
      

  ##################################
  # POIDS
  ##################################
  
  - key: "WEIGHT"
    icecatFeaturesIds:
      - 94
      - 33015    
    faIcon: "fa-weight"
    name:
      default: "Weight"
      fr: "Poids"
    filteringType: "NUMERIC"
    asScore: true
    reverseScore: true
    
    synonyms:
      all:
      - "POIDS"
      - "WEIGHT"
      
    parser:
      clazz: org.open4goods.api.services.aggregation.services.realtime.parser.WeightParser  
      normalize: true
      trim: false
      lowerCase: false
      upperCase: true
      removeParenthesis: false

      


  ################################################################################
  #                         CONSOMMATION ELECTRIQUE (MAX / TYPIQUE)
  ################################################################################
  # Generated on 10/12/2024 21:22, coverage was 40% (956/2389) . 
  # TOP attributes values are :
#     - 70 (26 items)
#     - 54 (21 items)
#     - 84 (20 items)
#     - 53 (18 items)
#     - 112 (17 items)
#     - 65 (16 items)
#     - 80 (16 items)
#     - 71 (15 items)
#     - 77 (15 items)
#     - 110 (14 items)
#     + 144 more attributes...
#   
  ##################################
  - key: "POWER_CONSUMPTION_TYPICAL"
    filteringType: "NUMERIC"
    asScore: true
    reverseScore: true    
    faIcon: "fa-plug-circle-check"
  
    icecatFeaturesIds:      
        - 445
        - 9137 
      
    name:
        default: "Power consumption"
        fr: "Consommation électrique (typique/max)"
      
    synonyms:
        all:
          - "CONSOMMATION ELECTRIQUE TYPIQUE"
          - "CONSOMMATION (MAX)"
          - "POWER_CONSUMPTION_TYPICAL"
          
             
    parser:
        normalize: true
        trim: false
        lowerCase: false
        upperCase: true
        removeParenthesis: false
        
  ################################################################################
  #                         CONSOMMATION ELECTRIQUE (ARRET / VEILLE)
  ################################################################################
  # Generated on 10/12/2024 21:22, coverage was 2% (63/2389) . 
  # TOP attributes values are :
#     - 0.3 (34 items)
#     - 0.5 (24 items)
#     - 0 (2 items)
#     - 0, 3 W (2 items)
#   
  ##################################
  - key: "POWER_CONSUMPTION_OFF"
    filteringType: "NUMERIC"
    asScore: true
    reverseScore: true    
    faIcon: "fa-plug-circle-xmark"
  
    icecatFeaturesIds:      
         - 2034
         - 2036 
      
    name:
         default: "Power consumption (off)"
         fr: "Consommation électrique (arrêt/veille)"
      
    synonyms:
         all:
           - "CONSOMMATION ELECTRIQUE (ARRET)"
           - "CONSOMMATION D'ENERGIE (MODE VEILLE)"
           - "POWER_CONSUMPTION_OFF"
             
    parser:
         normalize: true
         trim: true
         lowerCase: false
         upperCase: true
         removeParenthesis: false
         deleteTokens:
          - "W"


      
#################################################
# UI / Scores Oriented attributes
#################################################

  ##################################
  # FEATURES
# Note : not associated with any vals, features of parsed base on yes or no values
  ##################################
  
  - key: "FEATURES"
    faIcon: "fa-list"
    attributePath: attributes.features
    name:
      default: "Features"
      fr: "Fonctionnalités"
      
  - key: "BRAND_SUSTAINABILITY"
    faIcon: "fa-globe"
#    attributePath: attributes.features
    name:
      default: "Evaluation ESG (Sustainalytics) de la marque"
      fr: "Evaluation ESG de la marque (Sustainalytics)"
      

  - key: "DATA_QUALITY"
    faIcon: "fa-file-shield"
#    attributePath: attributes.features
    name:
      default: "Data quality"
      fr: "Qualité de la donnée"