Guide d'utilisation - PT2QE (Pricing Tier 2 Quote Engine)¶
1. Introduction¶
PT2QE (Pricing Tier 2 Quote Engine) est un moteur de calcul de recommandations de prix personnalisées à la maille client × article. Il s'appuie sur les corridors de prix optimisés par PT1CE pour proposer des hausses de prix ciblées et maîtrisées.
Périmètre d'application : - ZOOM1 UNIQUEMENT : Le système traite exclusivement les offres du périmètre ZOOM1 - Offres valides : Conditions encore actives (DT_FIN > SYSDATE) - Types de conditions : ZFAP, ZFSP, ZIAP, ZISP - Séquences : A305, A565 - Historique : 4 derniers trimestres fiscaux complets
Scope temporel : Le système détermine automatiquement les 4 derniers trimestres fiscaux complets en interrogeant SYS_MD_CALENDRIER_SYSCO. Par exemple, si la date de référence est le 15 mars 2025 et que le trimestre Q1 2025 n'est pas encore terminé, le système utilisera Q4 2024, Q3 2024, Q2 2024, Q1 2024.
2. Prérequis obligatoires¶
2.1. Prérequis techniques¶
Système : - Windows (batch scripts fournis) - Python 3.8 ou supérieur - Accès réseau P:\PRD\Python\00_Commun\libs
Modules Python requis :
Librairies Sysco : - sysco.application - sysco.db.oracle
Ces librairies doivent être accessibles via le PYTHONPATH configuré dans les scripts batch.
2.2. Prérequis métier¶
CRITIQUE : PT1CE doit avoir été exécuté au préalable
PT2QE ne peut pas fonctionner sans les tables PT1CE_OPTIMAL_* :
- Lancer PT1CE (dossier PT1CE, fichier START.bat)
- Exécuter PT1CE Option 1 : Application des nouveaux PAS/PRB
- Exécuter PT1CE Option 2 : Finalisation des corridors optimaux
- Vérifier la création des tables PT1CE_OPTIMAL_ZOOM1/ZOOM2/ZOOM3
Tables de référence requises :
- PT0CE_TYPE_CLIENT_MAPPING : Correspondance ID_TC_CG/ID_TC_CIBLE → TYPE_CLIENT
- PT0CE_TYPE_RESTAURANT_MAPPING : Correspondance LC_SFC_CIBLE → TYPE_RESTAURANT
- SYS_MD_CALENDRIER_SYSCO : Calendrier fiscal pour déterminer les 4Q
- SYS_TARIF_SIMULATION : Offres de prix actuelles
- SYS_FACTURE_LIGNE : Historique transactionnel
Données requises : - Au moins 4 trimestres fiscaux complets d'historique dans SYS_FACTURE_LIGNE - Offres de prix valides dans SYS_TARIF_SIMULATION - Mappings à jour dans PT0CE_TYPE_CLIENT_MAPPING et PT0CE_TYPE_RESTAURANT_MAPPING
2.3. Vérification des prérequis¶
Utiliser l'option 5 du menu principal pour vérifier :
Cette vérification contrôle : - Installation de Python et modules - Connexion Oracle à la base TARIFAIRE - Existence des tables PT1CE_OPTIMAL_ (prérequis critique) - Existence des tables PT2QE_ (si déjà exécuté) - Présence des tables de mapping - Fichier capping_type_client.csv dans inputs/
Erreur critique : Si les tables PT1CE_OPTIMAL_* sont absentes, le message suivant s'affiche :
[X] Tables PT1CE_OPTIMAL_* NON TROUVEES
PT2QE NECESSITE que PT1CE ait ete execute auparavant !
SOLUTION:
1. Lancer PT1CE (START.bat dans le dossier PT1CE)
2. Executer PT1CE Option 1 (Application nouveaux PAS/PRB)
3. Executer PT1CE Option 2 (Finalisation corridors)
4. Revenir ici et relancer PT2QE
3. Installation et configuration initiale¶
3.1. Structure des dossiers¶
Créer l'arborescence suivante si elle n'existe pas :
PT2QE/
├── START.bat # Point d'entrée principal
├── PT2QE_Menu.bat # Menu interactif
├── 1_calculer_recommendations.bat # Script étape 1
├── 2_ajuster_cappings.bat # Script étape 2
├── 3_generer_offres_finales.bat # Script étape 3
├── pt2qe_main.py # Orchestrateur Python
├── config/
│ └── pt2qe_config.json # Configuration (optionnel)
├── inputs/
│ └── capping_type_client.csv # OBLIGATOIRE : Cappings par type client
├── corrections/ # Créé automatiquement si nécessaire
│ └── capping_cubes_corrections.csv # Fichier de corrections (optionnel)
├── outputs/ # Créé automatiquement
│ ├── run_YYYYMMDD_HHMMSS/ # Résultats des calculs
│ ├── corrections_YYYYMMDD_HHMMSS/ # Résultats après corrections
│ └── final_YYYYMMDD_HHMMSS/ # Export final
└── [autres modules Python]
3.2. Configuration initiale¶
Fichier config/pt2qe_config.json (optionnel) :
Si ce fichier n'existe pas, PT2QE utilise les valeurs par défaut. Pour personnaliser :
{
"processing": {
"batch_size": 100000,
"parallel_degree": 8
},
"capping": {
"default_high": 0.05,
"default_medium": 0.15,
"default_low": 0.20,
"basiques": 0.50,
"allow_overrides": true
},
"recommendations": {
"reco1_rules": [
{
"position": "ABOVE_PL1",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL1_PL2",
"action": "NO_CHANGE",
"target": "PRIX_TARIF_ACTUEL",
"comment": "Prix déjà en PL1, pas de changement"
},
{
"position": "PL1_PL2",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL2_PL3",
"action": "TO_PL1",
"target": "NEW_BORNE_PL1_PL2",
"comment": "Remonter vers PL1"
},
{
"position": "PL2_PL3",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL3_PL4",
"action": "TO_PL1",
"target": "NEW_BORNE_PL1_PL2",
"comment": "Remonter vers PL1"
},
{
"position": "PL3_PL4",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL4_PL5",
"action": "TO_PL2",
"target": "NEW_BORNE_PL2_PL3",
"comment": "Remonter vers PL2"
},
{
"position": "PL4_PL5",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL5_PL6",
"action": "TO_PL3",
"target": "NEW_BORNE_PL3_PL4",
"comment": "Remonter vers PL3"
},
{
"position": "PL5_PL6",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL6_PLX",
"action": "TO_PL5",
"target": "NEW_BORNE_PL5_PL6",
"comment": "Remonter vers PL5"
},
{
"position": "PL6_PLX",
"condition": "PRIX_TARIF_ACTUEL >= NEW_PAS",
"action": "TO_PL6",
"target": "NEW_BORNE_PL6_PLX",
"comment": "Remonter vers PL6"
},
{
"position": "BELOW_PAS",
"condition": "DEFAULT",
"action": "TO_PAS",
"target": "NEW_PAS",
"comment": "Remonter au PAS minimum"
}
],
"selection_rule": "max"
},
"output": {
"csv_separator": ";",
"csv_encoding": "cp1252",
"decimal_places": 3,
"percentage_format": 2
}
}
Paramètres modifiables :
- batch_size : Taille des lots de traitement (ne pas modifier sans raison)
- parallel_degree : Degré de parallélisation Oracle (ne pas modifier sans raison)
- capping.basiques : Capping maximum pour les produits "Basiques" (0.50 = 50%)
- reco1_rules : Règles de repositionnement RECO1 (modifier avec précaution)
Attention : Les cappings HIGH/MEDIUM/LOW définis ici sont des valeurs par défaut. Les vraies valeurs utilisées sont celles du fichier inputs/capping_type_client.csv.
4. Préparation des fichiers d'entrée¶
4.1. Fichier obligatoire : capping_type_client.csv¶
Localisation : inputs/capping_type_client.csv
Format requis :
TYPE_CLIENT;CAPPING_HIGH;CAPPING_MEDIUM;CAPPING_LOW
RCI PI GI;0,025;0,05;0,075
RSI HM;0,025;0,05;0,075
RSC HM;0,025;0,05;0,075
RSC HM - SRCNAT;0,025;0,05;0,075
RSI HM - SRCREG;0,025;0,05;0,075
RCI autres;0,025;0,05;0,075
NATIONAL;0,025;0,05;0,075
Caractéristiques du fichier : - Séparateur : point-virgule (;) - Décimale : virgule (,) - Encodage : CP1252 (Windows-1252) - Pas de BOM (Byte Order Mark)
Colonnes obligatoires :
- TYPE_CLIENT (texte) :
- Doit correspondre EXACTEMENT aux valeurs dans PT0CE_TYPE_CLIENT_MAPPING
- Sensible à la casse
-
Pas d'espaces superflus
-
CAPPING_HIGH (décimal) :
- Capping pour les produits à sensibilité prix HIGH
- Format : 0,025 pour 2,5%
-
Plage recommandée : 0,01 à 0,05 (1% à 5%)
-
CAPPING_MEDIUM (décimal) :
- Capping pour les produits à sensibilité prix MEDIUM
- Format : 0,05 pour 5%
-
Plage recommandée : 0,03 à 0,15 (3% à 15%)
-
CAPPING_LOW (décimal) :
- Capping pour les produits à sensibilité prix LOW
- Format : 0,075 pour 7,5%
- Plage recommandée : 0,05 à 0,20 (5% à 20%)
Règles de cohérence : - CAPPING_HIGH < CAPPING_MEDIUM < CAPPING_LOW - CAPPING_LOW ne devrait pas dépasser 0,20 (20%) - Au moins une ligne pour chaque TYPE_CLIENT actif dans votre périmètre
Ligne NATIONAL (obligatoire) :
La ligne NATIONAL sert de fallback pour les offres dont le corridor est de type NATIONAL (pas de match MASTER trouvé). Elle doit TOUJOURS être présente et avoir des valeurs plus conservatrices :
Exemple de fichier complet :
TYPE_CLIENT;CAPPING_HIGH;CAPPING_MEDIUM;CAPPING_LOW
RCI PI GI;0,025;0,05;0,075
RSI HM;0,025;0,05;0,075
RSC HM;0,025;0,05;0,075
RSC HM - SRCNAT;0,025;0,05;0,075
RSI HM - SRCREG;0,025;0,05;0,075
RCI autres;0,025;0,05;0,075
NATIONAL;0,025;0,05;0,075
Comment créer ce fichier :
- Dans Excel :
- Créer un nouveau classeur
- Saisir les données avec point-virgule comme séparateur visuel
- Enregistrer sous → Type : CSV (séparateur : point-virgule) (*.csv)
-
Vérifier l'encodage : doit être Windows-1252 ou ANSI
-
Dans Notepad++ :
- Créer un nouveau fichier
- Encodage → Convertir en ANSI
- Saisir les données
- Enregistrer avec extension .csv
Vérification du fichier :
Ouvrir le fichier dans Notepad++ et vérifier : - Les lignes se terminent par un retour à la ligne (LF ou CRLF) - Pas de ligne vide à la fin - Pas de caractères spéciaux invisibles - Les décimales utilisent bien la virgule
Erreurs courantes :
❌ Erreur 1 : Mauvais séparateur
❌ Erreur 2 : Décimale avec point
TYPE_CLIENT;CAPPING_HIGH;CAPPING_MEDIUM;CAPPING_LOW
RCI PI GI;0.025;0.05;0.075 # Point au lieu de virgule
❌ Erreur 3 : TYPE_CLIENT incorrect
TYPE_CLIENT;CAPPING_HIGH;CAPPING_MEDIUM;CAPPING_LOW
RCI PI;0,025;0,05;0,075 # Devrait être "RCI PI GI"
✅ Format correct :
4.2. Modification des cappings pour un nouveau run¶
Scénario : Vous souhaitez être plus agressif sur certains segments.
Procédure :
- Ouvrir
inputs/capping_type_client.csvdans Excel - Modifier les valeurs souhaitées :
- Enregistrer (vérifier format CSV point-virgule, encodage CP1252)
- Relancer l'étape 1 : Calcul des recommandations
Note : Les modifications ne s'appliquent qu'aux nouveaux calculs. Les tables existantes ne sont pas modifiées rétroactivement.
5. Lancement de l'application¶
5.1. Démarrage via START.bat¶
Méthode recommandée :
- Naviguer dans le dossier PT2QE
- Double-cliquer sur
START.bat - Le menu principal s'affiche automatiquement
Logo affiché :
____ ______ ___ ____ ______
/ __ \/_ __/ |__ \ / __ \/ ____/
/ /_/ / / / __/ / / / / / __/
/ ____/ / / / __/ / /_/ / /___
/_/ /_/ /____/ \___\_\____/
Pricing Tier 2 Quote Engine
Version 1.0.0
Chargement du menu principal...
5.2. Menu principal (PT2QE_Menu.bat)¶
Le menu principal offre 6 options + aide :
========================================================================
PRICING TIER 2 QUOTE ENGINE - MENU PRINCIPAL
========================================================================
Niveau de log : Normal
Date/Heure : 03/11/2025 14:30
========================================================================
Que souhaitez-vous faire ?
[1] CALCULER LES RECOMMANDATIONS
[2] AJUSTER LES CAPPINGS (optionnel)
[3] GENERER LES OFFRES FINALES
[4] AFFICHER L'AIDE DETAILLEE
[5] VERIFIER LES PREREQUIS
[6] CHANGER LE NIVEAU DE LOG
[Q] QUITTER
========================================================================
Votre choix (1-6 ou Q): _
Navigation dans le menu : - Saisir le chiffre correspondant à l'option souhaitée - Appuyer sur Entrée - Le traitement s'exécute puis revient au menu - Appuyer sur Q pour quitter
5.3. Niveaux de log disponibles¶
Option 6 : Changer le niveau de log
Trois niveaux sont disponibles :
- Silencieux (-qq) :
- Affiche uniquement les erreurs critiques
- Exécution la plus rapide
-
Recommandé pour la production une fois le processus validé
-
Normal (par défaut) :
- Affiche INFO, WARNING, ERROR
- Mode standard de travail
- Recommandé pour l'utilisation quotidienne
-
C'est le mode par défaut
-
Détaillé (-vv) :
- Affiche DEBUG + INFO + WARNING + ERROR
- Maximum de détails
- Pour diagnostic et troubleshooting
- Utile lors du premier lancement
Comment changer le niveau :
[6] CHANGER LE NIVEAU DE LOG
Niveau actuel : Normal
Choisissez le niveau de detail des messages :
[1] Silencieux (erreurs seulement)
[2] Normal (tout afficher) - PAR DEFAUT
[3] Detaille (mode debug)
Votre choix (1-3): 3
Niveau de log mis à jour : Detaille
Le niveau choisi s'applique aux prochaines exécutions jusqu'à modification.
6. Workflow complet : Vue d'ensemble¶
6.1. Les 3 étapes du processus¶
┌─────────────────────────────────────────────────────────────┐
│ ÉTAPE 1 (Obligatoire) │
│ CALCULER LES RECOMMANDATIONS │
│ │
│ Entrées: │
│ • Offres actuelles (SYS_TARIF_SIMULATION) │
│ • Historique 4Q (SYS_FACTURE_LIGNE) │
│ • Corridors PT1CE (PT1CE_OPTIMAL_ZOOM1) │
│ • Cappings (inputs/capping_type_client.csv) │
│ │
│ Actions: │
│ • Extraction offres ZOOM1 avec enrichissement 4Q │
│ • Matching avec corridors PT1CE (MASTER puis NATIONAL) │
│ • Calcul RECO1 (repositionnement) + RECO2 (proportionnel) │
│ • Application arbre de décision à 3 chemins │
│ • Application cascade cappings (sensibilité → basiques) │
│ • Génération analyses et KPI │
│ │
│ Sorties: │
│ • outputs/run_YYYYMMDD_HHMMSS/recommendations_detail.csv │
│ • outputs/run_YYYYMMDD_HHMMSS/impact_analysis.csv │
│ • outputs/run_YYYYMMDD_HHMMSS/price_increase_distribution.csv│
│ • outputs/run_YYYYMMDD_HHMMSS/decision_path_analysis.csv │
│ • outputs/run_YYYYMMDD_HHMMSS/capping_distribution.csv │
│ • outputs/run_YYYYMMDD_HHMMSS/capping_cubes_generated.csv │
└─────────────────────────────────────────────────────────────┘
↓
Analyser les résultats
↓
┌───────────────┐
│ Satisfaisant? │
└───────────────┘
↙ ↘
OUI NON
↓ ↓
┌─────────────────────────────────────────────────────────────┐
│ ÉTAPE 3 (Finale) │
│ GENERER LES OFFRES FINALES │
└─────────────────────────────────────────────────────────────┘
↑
│
┌─────────────────────────────────────────────────────────────┐
│ ÉTAPE 2 (Optionnelle, itérative) │
│ AJUSTER LES CAPPINGS │
│ │
│ Entrées: │
│ • corrections/capping_cubes_corrections.csv │
│ • Tables PT2QE existantes (pas de réextraction) │
│ │
│ Actions: │
│ • Lecture des recommandations existantes │
│ • Application des nouveaux cappings par cube │
│ • Recalcul complet de l'arbre de décision │
│ • Recalcul cascade cappings │
│ • Régénération des analyses │
│ │
│ Sorties: │
│ • outputs/corrections_YYYYMMDD_HHMMSS/* (mêmes fichiers) │
└─────────────────────────────────────────────────────────────┘
6.2. Scénarios d'utilisation¶
Scénario A : Premier calcul complet (le plus courant)
- Vérifier les prérequis (Option 5)
- Préparer
inputs/capping_type_client.csv - Lancer Option 1 : Calcul des recommandations
- Analyser les résultats
- Si OK : Lancer Option 3 : Génération offres finales
Scénario B : Calcul avec ajustements itératifs
- Vérifier les prérequis (Option 5)
- Préparer
inputs/capping_type_client.csv - Lancer Option 1 : Calcul des recommandations
- Analyser les résultats → Pas satisfaisant
- Préparer
corrections/capping_cubes_corrections.csv - Lancer Option 2 : Ajustement des cappings
- Analyser les nouveaux résultats
- Répéter étapes 5-7 jusqu'à satisfaction
- Lancer Option 3 : Génération offres finales
Scénario C : Recalcul complet avec nouveaux paramètres
- Modifier
inputs/capping_type_client.csv(nouveaux cappings type client) - Lancer Option 1 : Calcul des recommandations (NOUVEAU RUN)
- Analyser les résultats
- Si OK : Lancer Option 3 : Génération offres finales
Note : L'Option 2 ne nécessite pas de nouvelle extraction des offres, elle recalcule uniquement les recommandations avec les nouveaux cappings. L'Option 1 refait toute l'extraction depuis les tables sources.
7. ÉTAPE 1 : Calcul des recommandations (Obligatoire)¶
7.1. Quand exécuter cette étape¶
Vous DEVEZ exécuter l'Étape 1 dans ces cas : - Premier calcul de recommandations - Vous voulez intégrer de nouvelles offres (SYS_TARIF_SIMULATION modifié) - Vous voulez une période historique différente (nouveaux trimestres disponibles) - PT1CE a été réexécuté et les corridors ont changé - Vous voulez modifier les cappings par TYPE_CLIENT (fichier capping_type_client.csv)
Vous pouvez passer directement à l'Étape 2 si : - Vous avez déjà exécuté l'Étape 1 - Vous voulez seulement affiner les cappings par cube sans réextraire les données - Les offres n'ont pas changé depuis le dernier run
7.2. Lancement de l'étape 1¶
Via le menu :
- Lancer
START.bat - Choisir option
[1] CALCULER LES RECOMMANDATIONS - L'écran affiche la configuration :
========================================================================
ETAPE 1: CALCUL DES RECOMMANDATIONS
========================================================================
Configuration:
- Base de donnees : TARIFAIRE
- Fichier capping : inputs\capping_type_client.csv
- Niveau de log : Normal
PHASES QUI SERONT EXECUTEES:
[1] Extraction des offres actuelles (ZOOM1 uniquement)
[2] Enrichissement avec historique 4 derniers trimestres
[3] Jointure avec corridors PT1CE_OPTIMAL_*
[4] Calcul RECO1 (repositionnement paliers)
[5] Calcul RECO2 (hausse proportionnelle PAS)
[6] Application cascade cappings (sensibilite + basiques)
[7] Arbre de decision (3 chemins)
[8] Generation analyses et rapports
NOTE: Necessite que PT1CE ait ete execute au prealable
pour que les tables PT1CE_OPTIMAL_* existent.
Lancer le traitement ? (O/N): _
- Saisir
Opuis Entrée pour confirmer
Via batch direct :
7.3. Déroulement détaillé de l'étape 1¶
Phase 1 : Détermination de la période d'analyse
Initialisation du gestionnaire de periodes...
Periode d'analyse: 2024-04-01 → 2024-12-29
Trimestres fiscaux: 2024_Q02, 2024_Q03, 2024_Q04, 2025_Q01
Le système : - Interroge SYS_MD_CALENDRIER_SYSCO pour identifier le trimestre actuel - Remonte aux 4 derniers trimestres complets (dont la date de fin est dépassée) - Affiche la période START_DATE → END_DATE couvrant ces 4 trimestres
Important : Si le trimestre en cours n'est pas terminé, il n'est PAS inclus dans l'analyse.
Phase 2 : Extraction des offres avec historique 4Q
=== Phase 1: Extraction des offres de prix avec historique ===
Extraction des offres avec historique de performance
✓ 45 123 offres de prix extraites (ZOOM1 uniquement)
Statistiques d'enrichissement:
- Total offres: 45 123
- Clients uniques: 3 245
- Articles uniques: 8 976
- Avec TYPE_CLIENT: 45 123 (100,0%)
- Avec TYPE_RESTAURANT: 45 123 (100,0%)
- Avec FG_HM: 45 123 (100,0%)
Le système : - Extrait toutes les offres ZOOM1 valides de SYS_TARIF_SIMULATION - Pour chaque offre, récupère l'historique transactionnel sur la période déterminée : - MT_CAB_4Q : CA total - QT_UF_4Q : Volume en UF - QT_KG_4Q : Volume en KG - MT_CAB_4Q_FERMES : CA prix fermes uniquement - MT_CAB_4Q_INDEXES : CA prix indexés uniquement - Joint avec PT0CE_TYPE_CLIENT_MAPPING pour obtenir TYPE_CLIENT - Joint avec PT0CE_TYPE_RESTAURANT_MAPPING pour obtenir TYPE_RESTAURANT - Détermine l'UNIVERS selon les Business Rules (ici, ZOOM1 filtré) - Récupère le dernier FG_HM connu ('0' = mercuriale, '1' = hors mercuriale)
Fichiers temporaires créés :
- Table Oracle : PT2QE_PRICE_OFFERS (offres enrichies)
Phase 3 : Jointure avec les corridors PT1CE
=== Phase 2: Calcul des recommandations ===
Calcul des recommandations
Jointure offres × corridors
→ Résultats du matching :
- MASTER : 42 890 offres, 3 120 clients, 8 654 articles
- NATIONAL : 2 233 offres, 125 clients, 322 articles
- NO_MATCH : 0 offres, 0 clients, 0 articles
→ Total : 45 123/45 123 offres avec corridor (100,0%)
Le système : - Tente d'abord un match MASTER :
JOIN PT1CE_OPTIMAL_ZOOM1
ON offre.ID_ART = corridor.ID_ART
AND offre.TYPE_CLIENT = corridor.TYPE_CLIENT
AND offre.TYPE_RESTAURANT = corridor.TYPE_RESTAURANT
AND offre.GEO = corridor.GEO
AND corridor.CUBE_TYPE = 'MASTER'
-
En cas d'échec, fallback vers NATIONAL :
-
Les offres sans corridor (NO_MATCH) sont conservées mais ne recevront pas de recommandations
Données récupérées depuis les corridors : - PAS_ACTIF, PRB_ACTIF : Anciens prix de référence - NEW_PAS, NEW_PRB : Nouveaux prix de référence (post-PT1CE) - BORNE_PL1_PL2, ..., BORNE_PL6_PLX : Anciennes bornes des paliers - NEW_BORNE_PL1_PL2, ..., NEW_BORNE_PL6_PLX : Nouvelles bornes (post-PT1CE) - PRICE_SENSITIVITY : Sensibilité prix (HIGH/MEDIUM/LOW)
Phase 4 : Génération des cappings par cube
Génération des cappings par cube
→ 1 234 cubes MASTER avec cappings
→ 1 cubes NATIONAL avec cappings
✓ Cappings exportés : capping_cubes_generated.csv
Le système :
- Identifie toutes les combinaisons uniques UNIVERS × TYPE_CLIENT × TYPE_RESTAURANT × GEO (cubes MASTER)
- Ajoute les cubes NATIONAL pour chaque UNIVERS
- Applique les cappings depuis inputs/capping_type_client.csv selon le TYPE_CLIENT
- Pour NATIONAL, utilise les valeurs de la ligne NATIONAL du fichier capping
Fichiers générés :
- Table Oracle : PT2QE_CAPPING_CUBES
- CSV : outputs/run_YYYYMMDD_HHMMSS/capping_cubes_generated.csv
Phase 5-7 : Calcul des recommandations
Le système calcule pour chaque offre :
5.1. RECO1_BASE (repositionnement par paliers)
Selon les règles du fichier config/pt2qe_config.json : - Prix dans PL6_PLX → Borne PL6_PLX - Prix dans PL5_PL6 → Borne PL5_PL6 - Prix dans PL3_PL4 → Borne PL2_PL3 - Prix dans PL2_PL3 → Borne PL1_PL2 - Prix dans PL1_PL2 → Borne PL1_PL2 - Prix < PAS → PAS
5.2. RECO1_APRES_CAPPING_SENSIBILITE
Application du capping selon PRICE_SENSITIVITY :
RECO1_APRES_CAPPING_SENSIBILITE = MIN(
RECO1_BASE,
PRIX_TARIF_ACTUEL × (1 + CAPPING_SELON_SENSIBILITE)
)
Exemple : - RECO1_BASE = 52,00 € - PRIX_ACTUEL = 45,00 € - PRICE_SENSITIVITY = MEDIUM → CAPPING = 5% (depuis capping_type_client.csv) - Prix max avec capping = 45,00 × 1,05 = 47,25 € - RECO1_APRES_CAPPING_SENSIBILITE = MIN(52,00; 47,25) = 47,25 €
5.3. RECO1_AVEC_CAPPING (cascade complète)
Application du capping basiques (50%) après le capping sensibilité :
SI LC_ATTRIBUT = 'Basiques' ALORS
RECO1_AVEC_CAPPING = MIN(
RECO1_APRES_CAPPING_SENSIBILITE,
PRIX_TARIF_ACTUEL × 1,50
)
SINON
RECO1_AVEC_CAPPING = RECO1_APRES_CAPPING_SENSIBILITE
Exemple (produit Basique) : - RECO1_APRES_CAPPING_SENSIBILITE = 47,25 € - PRIX_ACTUEL = 45,00 € - Capping basiques = 45,00 × 1,50 = 67,50 € - RECO1_AVEC_CAPPING = MIN(47,25; 67,50) = 47,25 € (le capping sensibilité était plus restrictif)
5.4. RECO2 (hausse proportionnelle PAS)
Exemple : - PRIX_ACTUEL = 45,00 € - PAS_ACTIF = 40,00 € - NEW_PAS = 42,00 € - HAUSSE_PAS = (42 - 40) / 40 = 5% - RECO2 = 45,00 × 1,05 = 47,25 €
5.5. Arbre de décision à 3 chemins
Le système détermine le chemin selon les conditions suivantes :
CHEMIN 1 : PAS_BAISSE_GEL_PRIX
Condition : NEW_PAS < PAS_ACTIF
Action : PRIX_RECOMMANDE = PRIX_TARIF_ACTUEL (gel total)
Capping appliqué : GEL_PAS
Rationale : Ne pas répercuter les baisses de coût d'achat aux clients
CHEMIN 2 : PL1_CONSERVATION_PREMIUM
Condition : Prix actuel dans PL1 des ANCIENNES bornes
(PRB_ACTIF >= PRIX_ACTUEL > BORNE_PL1_PL2)
Action :
1. Prix de base = PRIX_TARIF_ACTUEL (conservation)
2. Plancher sécurité = MAX(PRIX_ACTUEL, NEW_BORNE_PL2_PL3)
3. Plafond PRB = MIN(prix_avec_plancher, NEW_PRB)
PRIX_RECOMMANDE = MIN(
MAX(PRIX_TARIF_ACTUEL, NEW_BORNE_PL2_PL3),
NEW_PRB
)
Capping appliqué :
- PLANCHER_PL2_PL3 si prix actuel < NEW_BORNE_PL2_PL3
- PRB_FINAL si prix avec plancher > NEW_PRB
- NONE sinon
Rationale : Maintenir les clients premium en position haute
tout en évitant la compression du corridor
Exemple CHEMIN 2 :
PRIX_ACTUEL = 95,00 €
PRB_ACTIF = 100,00 € → Prix dans PL1 anciennes bornes ✓
BORNE_PL1_PL2 = 90,00 €
NEW_BORNE_PL2_PL3 = 85,00 €
NEW_PRB = 105,00 €
Étape 1 : Conservation = 95,00 €
Étape 2 : Plancher PL2_PL3 = MAX(95,00; 85,00) = 95,00 € (pas de correction)
Étape 3 : Capping PRB = MIN(95,00; 105,00) = 95,00 € (pas de blocage)
PRIX_RECOMMANDE = 95,00 € (conservation totale, pas de hausse)
CAPPING_APPLIED = NONE
CHEMIN 3 : OPTIMISATION_STANDARD
Condition : Tous les autres cas (la majorité)
Action :
1. Prix intermédiaire = MAX(RECO1_AVEC_CAPPING, RECO2)
2. Prix final = MIN(prix_intermédiaire, NEW_PRB)
PRIX_RECOMMANDE = MIN(
MAX(RECO1_AVEC_CAPPING, RECO2),
NEW_PRB
)
Capping appliqué (par ordre de priorité) :
1. PRB_FINAL si prix intermédiaire > NEW_PRB
2. BASIQUES_50PCT si LC_ATTRIBUT = 'Basiques'
ET RECO1 après sensibilité > PRIX_ACTUEL × 1,50
3. SENSIBILITE si RECO1_BASE > PRIX_ACTUEL × (1 + capping_sensibilité)
4. NONE sinon
Rationale : Optimisation classique avec double recommandation
et cascade de sécurités (sensibilité → basiques → PRB)
Exemple CHEMIN 3 :
PRIX_ACTUEL = 45,00 €
RECO1_AVEC_CAPPING = 47,25 € (après cascade)
RECO2 = 46,80 €
NEW_PRB = 55,00 €
Étape 1 : MAX(47,25; 46,80) = 47,25 € (RECO1 gagne)
Étape 2 : MIN(47,25; 55,00) = 47,25 € (pas de blocage PRB)
PRIX_RECOMMANDE = 47,25 €
RECO_SELECTIONNEE = RECO1_REPOSITIONNEMENT_PALIERS
CAPPING_APPLIED = SENSIBILITE (car RECO1_BASE a été cappé)
PCT_HAUSSE_FINALE = (47,25 - 45,00) / 45,00 = 5,0%
Phase 8 : Génération des analyses
=== Phase 4: Analyse et export des résultats ===
Analyse et export des résultats
→ Export détaillé : 45 123 lignes
→ Statistiques par dimension exportées
→ Statistiques par path exportées
→ Statistiques des distributions de capping exportées
→ Analyse d'impact exportée
→ Distribution des hausses exportée
Le système génère 6 fichiers d'analyse :
- recommendations_detail.csv : Export ligne à ligne complet
- statistics_by_dimension.csv : Stats par TYPE_CLIENT / TYPE_RESTAURANT / UNIVERS
- impact_analysis.csv : Impact CA par TYPE_CLIENT × UNIVERS
- price_increase_distribution.csv : Histogramme des hausses
- decision_path_analysis.csv : Stats par chemin de décision
- capping_distribution.csv : Distribution des cappings appliqués
7.4. Résultats de l'étape 1¶
Localisation des fichiers :
outputs/run_20250315_143022/
├── recommendations_detail.csv
├── statistics_by_dimension.csv
├── impact_analysis.csv
├── price_increase_distribution.csv
├── decision_path_analysis.csv
├── capping_distribution.csv
├── capping_cubes_generated.csv
└── summary.txt
Timestamp : Chaque run crée un nouveau dossier avec timestamp YYYYMMDD_HHMMSS.
Tables Oracle créées :
- PT2QE_PRICE_OFFERS : Offres extraites avec historique 4Q
- PT2QE_PRICE_OFFERS_ENRICHED : Offres + corridors PT1CE
- PT2QE_CAPPING_CUBES : Cappings par cube
- PT2QE_RECOMMENDATIONS : Recommandations finales
Ces tables restent en base pour permettre l'Étape 2 (ajustements) sans réextraction.
7.5. Vérification de la réussite¶
Indicateurs de succès :
✓ TRAITEMENT TERMINE AVEC SUCCES
Résultats disponibles dans : outputs\run_20250315_143022
Fichiers à analyser:
- recommendations_detail.csv : Detail complet des recommandations
- impact_analysis.csv : Analyse d'impact par segment
- price_increase_distribution.csv : Distribution des hausses
- decision_path_analysis.csv : Statistiques par chemin
- capping_distribution.csv : Impact des cappings
- capping_cubes_generated.csv : Cappings générés
PROCHAINES ETAPES:
[Option 2] Ajuster les cappings si nécessaire (optionnel)
[Option 3] Generer les offres finales pour export
Vérifications manuelles :
-
Nombre d'offres extraites cohérent : Vérifier que le nombre affiché correspond à vos attentes (ni trop haut ni trop bas)
-
Taux de matching avec corridors : Doit être > 95% (idéalement 100%)
- Si NO_MATCH > 5% : vérifier les mappings TYPE_CLIENT/TYPE_RESTAURANT
-
Si NATIONAL > 30% : les cubes MASTER sont peut-être incomplets dans PT1CE
-
Hausse moyenne raisonnable : Vérifier que la hausse moyenne affichée est cohérente avec les cappings définis
-
Fichiers CSV générés : Vérifier l'existence de tous les fichiers listés ci-dessus
En cas d'erreur :
Consulter la section 13 (Résolution de problèmes courants) de ce guide.
8. ÉTAPE 2 : Ajustement des cappings (Optionnelle, Itérative)¶
8.1. Quand exécuter cette étape¶
Vous exécutez l'Étape 2 si : - Après l'Étape 1, vous constatez que certains cubes ont des hausses trop agressives - Vous voulez affiner les cappings pour certaines combinaisons UNIVERS × TYPE_CLIENT × TYPE_RESTAURANT × GEO - Vous voulez itérer rapidement sur les paramètres sans réextraire les données
Vous NE devez PAS exécuter l'Étape 2 si :
- Vous n'avez pas encore exécuté l'Étape 1 (prérequis obligatoire)
- Vous voulez modifier les cappings par TYPE_CLIENT → Modifiez plutôt inputs/capping_type_client.csv et relancez l'Étape 1
Différence Étape 1 vs Étape 2 : - Étape 1 : Réextraction complète depuis les tables sources + application des cappings TYPE_CLIENT - Étape 2 : Utilise les tables PT2QE existantes + applique des corrections au niveau CUBE (plus fin)
8.2. Préparation du fichier de corrections¶
Étape 2.1 : Copier le fichier capping_cubes_generated.csv
-
Naviguer dans le dossier du dernier run :
-
Copier le fichier
capping_cubes_generated.csv -
Coller dans le dossier
corrections/ -
Renommer en
capping_cubes_corrections.csv
Structure du dossier corrections après préparation :
Étape 2.2 : Ouvrir le fichier dans Excel
UNIVERS;TYPE_CLIENT;TYPE_RESTAURANT;GEO;CUBE_TYPE;CAPPING_HIGH;CAPPING_MEDIUM;CAPPING_LOW
ZOOM1;RCI PI GI;REST. TRADI;IDF;MASTER;0,025;0,05;0,075
ZOOM1;RCI PI GI;REST. TRADI;NO;MASTER;0,025;0,05;0,075
ZOOM1;RSI HM;SOCIAL;IDF;MASTER;0,025;0,05;0,075
ZOOM1;RSI HM;SOCIAL;NO;MASTER;0,025;0,05;0,075
...
ZOOM1;NATIONAL;NATIONAL;NATIONAL;NATIONAL;0,025;0,05;0,075
Colonnes du fichier : - UNIVERS : Toujours ZOOM1 dans PT2QE - TYPE_CLIENT : Type client (issu des mappings PT0CE) - TYPE_RESTAURANT : Type restaurant (issu des mappings PT0CE) - GEO : Zone géographique (IDF, NO, SE, SO, etc.) - CUBE_TYPE : MASTER ou NATIONAL - CAPPING_HIGH : Capping pour sensibilité HIGH - CAPPING_MEDIUM : Capping pour sensibilité MEDIUM - CAPPING_LOW : Capping pour sensibilité LOW
Étape 2.3 : Identifier les cubes à corriger
Méthode 1 : Via impact_analysis.csv
Ouvrir outputs/run_20250315_143022/impact_analysis.csv et identifier les segments problématiques :
TYPE_CLIENT;UNIVERS;NB_OFFRES;CA_ACTUEL;CA_FUTUR;IMPACT_EUROS;IMPACT_PCT;HAUSSE_MOY_PCT;...
RCI PI GI;ZOOM1;15234;2345678,50;2456789,30;111110,80;4,74;4,8;...
RSI HM;ZOOM1;8976;1234567,80;1345678,90;111111,10;9,00;9,2;... ← Hausse trop forte
Identifier le couple (TYPE_CLIENT, UNIVERS) problématique, par exemple : RSI HM × ZOOM1
Méthode 2 : Via price_increase_distribution.csv
Ouvrir outputs/run_20250315_143022/price_increase_distribution.csv :
TRANCHE_HAUSSE;NB_OFFRES;NB_CLIENTS_UNIQUES;...
00. Pas de hausse;2345;123;...
01. 0-2%;5678;234;...
02. 2-5%;12456;456;...
03. 5-7%;8765;345;...
04. 7-10%;6543;234;...
05. 10-12%;4321;123;...
06. 12-15%;2109;87;...
07. 15-20%;987;45;...
08. Plus de 20%;543;23;... ← Trop d'offres > 20%
Si plus de 5% des offres sont > 20%, il faut probablement ajuster les cappings.
Méthode 3 : Via recommendations_detail.csv
Filtrer dans Excel sur PCT_HAUSSE_FINALE > 15% et analyser les colonnes : - TYPE_CLIENT - TYPE_RESTAURANT - GEO - PRICE_SENSITIVITY - CAPPING_APPLIED
Identifier les combinaisons récurrentes.
Étape 2.4 : Modifier les cappings dans le fichier de corrections
Exemple 1 : Réduire les hausses pour RSI HM en IDF
Dans corrections/capping_cubes_corrections.csv, localiser la ligne :
Modifier en :
Exemple 2 : Réduire uniquement CAPPING_LOW pour un segment
(Seul CAPPING_LOW passe de 0,075 à 0,06)Exemple 3 : Ajuster plusieurs cubes du même TYPE_CLIENT
Modifier toutes les lignes où TYPE_CLIENT = 'RSI HM' :
ZOOM1;RSI HM;SOCIAL;IDF;MASTER;0,02;0,04;0,06
ZOOM1;RSI HM;SOCIAL;NO;MASTER;0,02;0,04;0,06
ZOOM1;RSI HM;SOCIAL;SE;MASTER;0,02;0,04;0,06
ZOOM1;RSI HM;SOCIAL;SO;MASTER;0,02;0,04;0,06
Exemple 4 : Corriger le capping NATIONAL
Si trop de hausses sur les offres en fallback NATIONAL :
Règles de modification : - Ne modifier QUE les lignes des cubes que vous voulez corriger - Conserver les autres lignes inchangées - Respecter la cohérence : CAPPING_HIGH < CAPPING_MEDIUM < CAPPING_LOW - Ne pas mettre de valeurs > 0,20 (20%) - Format décimal avec virgule : 0,05 (pas 0.05)
Étape 2.5 : Enregistrer le fichier
- Enregistrer sous → Type : CSV (séparateur : point-virgule)
- Encodage : Windows-1252 (ANSI)
- Vérifier dans Notepad++ : séparateur =
;, décimale =,
8.3. Lancement de l'étape 2¶
Via le menu :
- Lancer
START.bat - Choisir option
[2] AJUSTER LES CAPPINGS - L'écran affiche :
========================================================================
ETAPE 2: AJUSTEMENT DES CAPPINGS
========================================================================
Verification du dossier corrections...
Creation du dossier corrections...
Recherche des fichiers de correction...
[OK] capping_cubes_corrections.csv trouve
========================================================================
CONFIGURATION
========================================================================
Base de donnees : TARIFAIRE
Dossier corrections : corrections
Dossier output : outputs
PHASES QUI SERONT EXECUTEES:
[1] Lecture des tables de recommandations existantes
[2] Application des nouveaux cappings par cube
[3] Recalcul complet de l'arbre de décision
[4] Recalcul cascade cappings (sensibilite + basiques)
[5] Generation des nouvelles analyses
Lancer le traitement ? (O/N): _
- Saisir
Opuis Entrée
Via batch direct :
8.4. Déroulement de l'étape 2¶
Phase 1 : Vérification des prérequis
=== Phase 3: Application des corrections de capping ===
Application des corrections de capping
→ 8 corrections à appliquer
Le système vérifie :
- Existence de la table PT2QE_RECOMMENDATIONS (créée par l'Étape 1)
- Existence du fichier corrections/capping_cubes_corrections.csv
- Format du fichier de corrections
- Cohérence des colonnes
Phase 2 : Chargement des corrections
Le système :
- Lit le fichier CSV de corrections
- Crée une table temporaire TEMP_CAPPING_CORRECTIONS
- Upload les corrections dans cette table
Phase 3 : Recalcul des recommandations
Le système exécute un MERGE pour chaque offre dont le cube a été corrigé :
MERGE INTO PT2QE_RECOMMENDATIONS r
USING TEMP_CAPPING_CORRECTIONS c
ON (
r.UNIVERS = c.UNIVERS
AND r.TYPE_CLIENT = c.TYPE_CLIENT
AND r.TYPE_RESTAURANT = c.TYPE_RESTAURANT
AND NVL(r.GEO, 'NULL') = NVL(c.GEO, 'NULL')
)
WHEN MATCHED THEN UPDATE SET
-- Recalcul RECO1_APRES_CAPPING_SENSIBILITE avec nouveaux cappings
-- Recalcul RECO1_AVEC_CAPPING (cascade)
-- Recalcul PRIX_RECOMMANDE selon DECISION_PATH existant
-- Recalcul PCT_HAUSSE_FINALE
-- Mise à jour CAPPING_APPLIED
-- etc.
Important : Le DECISION_PATH (chemin de décision) n'est PAS recalculé. Seuls les cappings sont réappliqués sur le chemin existant.
Phase 4 : Régénération des analyses
=== Phase 4: Analyse et export des résultats ===
Analyse et export des résultats
→ Export détaillé : 45 123 lignes
→ Statistiques par dimension exportées
...
Tous les fichiers d'analyse sont régénérés avec les nouvelles valeurs.
8.5. Résultats de l'étape 2¶
Localisation des fichiers :
outputs/corrections_20250315_150245/
├── recommendations_detail.csv
├── statistics_by_dimension.csv
├── impact_analysis.csv
├── price_increase_distribution.csv
├── decision_path_analysis.csv
├── capping_distribution.csv
└── summary.txt
Fichiers identiques à l'Étape 1 : Seul le préfixe du dossier change (corrections_ au lieu de run_).
Table Oracle mise à jour :
- PT2QE_RECOMMENDATIONS : Modifiée en place (pas de nouvelle table créée)
8.6. Comparaison avant/après corrections¶
Méthode manuelle dans Excel :
- Ouvrir les deux fichiers :
outputs/run_20250315_143022/impact_analysis.csv(avant)-
outputs/corrections_20250315_150245/impact_analysis.csv(après) -
Comparer les colonnes HAUSSE_MOY_PCT par TYPE_CLIENT
Exemple de comparaison :
TYPE_CLIENT | HAUSSE_MOY avant | HAUSSE_MOY après | Delta
------------|------------------|------------------|-------
RCI PI GI | 4,8% | 4,8% | 0,0%
RSI HM | 9,2% | 6,5% | -2,7% ← Correction efficace
RSC HM | 5,5% | 5,5% | 0,0%
Méthode via price_increase_distribution.csv :
Comparer la distribution des hausses avant/après :
AVANT APRÈS
TRANCHE | NB_OFFRES | PCT_OFFRES | NB_OFFRES | PCT_OFFRES
-------------|-----------|------------|-----------|------------
Plus de 20% | 543 | 1,2% | 87 | 0,2% ← Réduction
15-20% | 987 | 2,2% | 654 | 1,5% ← Réduction
12-15% | 2109 | 4,7% | 1987 | 4,4%
...
8.7. Itération : Réajuster si nécessaire¶
Si les résultats ne sont toujours pas satisfaisants :
- Modifier à nouveau
corrections/capping_cubes_corrections.csv - Relancer l'Étape 2 (Option 2)
- Comparer les nouveaux résultats
- Répéter jusqu'à satisfaction
Limitation : Pas de limite au nombre d'itérations, mais chaque exécution écrase la table PT2QE_RECOMMENDATIONS.
Conseil : Conserver les dossiers de chaque itération pour traçabilité :
outputs/corrections_20250315_150245/ → Itération 1
outputs/corrections_20250315_153012/ → Itération 2
outputs/corrections_20250315_155634/ → Itération 3
9. ÉTAPE 3 : Génération des offres finales (Finale)¶
9.1. Quand exécuter cette étape¶
Vous exécutez l'Étape 3 lorsque : - Vous avez validé les recommandations de l'Étape 1 (ou après ajustements de l'Étape 2) - Vous êtes prêt à générer le fichier final pour utilisation opérationnelle - Les hausses moyennes et distributions sont conformes aux attentes
Prérequis :
- Avoir exécuté au moins l'Étape 1
- La table PT2QE_RECOMMENDATIONS doit exister en base
9.2. Lancement de l'étape 3¶
Via le menu :
- Lancer
START.bat - Choisir option
[3] GENERER LES OFFRES FINALES - L'écran affiche :
========================================================================
ETAPE 3: GENERATION DES OFFRES FINALES
========================================================================
AVERTISSEMENT:
Cette etape va generer le fichier final des offres de prix
a la maille client × article.
Assurez-vous d'avoir:
- Execute l'etape 1 (calcul des recommandations)
- Verifie et ajuste les cappings si necessaire (etape 2)
- Valide les resultats obtenus
Configuration:
- Base de donnees : TARIFAIRE
- Niveau de log : Normal
Generer les offres finales ? (O/N): _
- Saisir
Opuis Entrée
Via batch direct :
9.3. Déroulement de l'étape 3¶
Phase 1 : Lecture des recommandations
Le système :
- Lit la table PT2QE_RECOMMENDATIONS
- Extrait uniquement les colonnes nécessaires pour l'export final
- Trie les offres par ID_CLN, ID_ART
Phase 2 : Formattage des données
Pour chaque offre : - Arrondit les montants à 3 décimales - Convertit PCT_HAUSSE_FINALE en pourcentage (× 100) - Calcule HAUSSE_EUROS = PRIX_RECOMMANDE - PRIX_TARIF_ACTUEL - Détermine TYPE_HAUSSE selon la recommandation sélectionnée - Attribue un VALIDATION_STATUS
Statuts de validation automatiques :
- VALIDE : Hausse entre 0% et 20%
- A_VERIFIER : Hausse > 20% (cas exceptionnels à contrôler manuellement)
- ANOMALIE : Hausse < 0% (ne devrait pas arriver, bug potentiel)
Phase 3 : Export CSV final
Le système génère final_price_offers.csv avec format standardisé.
Phase 4 : Génération du rapport de validation
Le système génère validation_report.csv avec statistiques globales.
9.4. Fichiers générés¶
Localisation :
outputs/final_20250315_160512/
├── final_price_offers.csv ← Fichier principal
├── validation_report.csv ← Rapport de validation
└── export_summary.txt ← Résumé textuel
9.4.1. final_price_offers.csv
Structure du fichier :
ID_CLN;LC_CLN;ID_ART;LC_ART;TYPE_CLIENT;TYPE_RESTAURANT;GEO;UNIVERS;ID_CND;DT_DEB_CONDITION;DT_FIN_CONDITION;PRIX_TARIF_ACTUEL;NOUVEAU_PRIX;PCT_HAUSSE;HAUSSE_EUROS;POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES;PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES;POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES;PRICE_SENSITIVITY;TYPE_HAUSSE;VALIDATION_STATUS;DATE_CALCUL
12345;RESTAURANT CHEZ PAUL;075130;FILET BOEUF 1KG;RCI PI GI;REST. TRADI;IDF;ZOOM1;123456789;01/01/2025;31/12/2025;45,750;47,900;4,70;2,150;PL3;PL3;PL2;MEDIUM;REPOSITIONNEMENT;VALIDE;15/03/2025 16:05:12
12346;BRASSERIE DU CENTRE;075131;SAUMON FUME 500G;RSI HM;SOCIAL;NO;ZOOM1;123456790;01/01/2025;31/12/2025;28,500;29,350;2,98;0,850;PL4;PL4;PL3;HIGH;HAUSSE_PROPORTIONNELLE;VALIDE;15/03/2025 16:05:12
...
Colonnes du fichier :
| Colonne | Type | Description | Exemple |
|---|---|---|---|
| ID_CLN | Texte | Identifiant client | 12345 |
| LC_CLN | Texte | Libellé client | RESTAURANT CHEZ PAUL |
| ID_ART | Texte | Identifiant article | 075130 |
| LC_ART | Texte | Libellé article | FILET BOEUF 1KG |
| TYPE_CLIENT | Texte | Type client (mapping PT0CE) | RCI PI GI |
| TYPE_RESTAURANT | Texte | Type restaurant (mapping PT0CE) | REST. TRADI |
| GEO | Texte | Zone géographique | IDF |
| UNIVERS | Texte | Univers (toujours ZOOM1) | ZOOM1 |
| ID_CND | Texte | Identifiant condition | 123456789 |
| DT_DEB_CONDITION | Date | Date début condition | 01/01/2025 |
| DT_FIN_CONDITION | Date | Date fin condition | 31/12/2025 |
| PRIX_TARIF_ACTUEL | Décimal | Prix actuel (3 décimales) | 45,750 |
| NOUVEAU_PRIX | Décimal | Prix recommandé (3 décimales) | 47,900 |
| PCT_HAUSSE | Décimal | % hausse (2 décimales) | 4,70 |
| HAUSSE_EUROS | Décimal | Hausse en € (3 décimales) | 2,150 |
| POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES | Texte | Position 1 (anciennes bornes) | PL3 |
| PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES | Texte | Position 2 (nouvelles bornes) | PL3 |
| POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES | Texte | Position 3 (après reco) | PL2 |
| PRICE_SENSITIVITY | Texte | Sensibilité prix | MEDIUM |
| TYPE_HAUSSE | Texte | Type de hausse appliqué | REPOSITIONNEMENT |
| VALIDATION_STATUS | Texte | Statut validation | VALIDE |
| DATE_CALCUL | Date/Heure | Date du calcul | 15/03/2025 16:05:12 |
Valeurs possibles pour les positions :
- ABOVE_PRB : Prix > PRB (au-dessus du plafond)
- PL1 : Prix dans le palier 1 (le plus haut)
- PL2 : Prix dans le palier 2
- PL3 : Prix dans le palier 3
- PL4 : Prix dans le palier 4
- PL5 : Prix dans le palier 5
- PL6 : Prix dans le palier 6
- PLX : Prix dans le palier X (le plus bas)
- BELOW_PAS : Prix < PAS (en dessous du plancher)
Valeurs possibles pour TYPE_HAUSSE :
- REPOSITIONNEMENT : RECO1 sélectionnée (repositionnement par paliers)
- HAUSSE_PROPORTIONNELLE : RECO2 sélectionnée (hausse proportionnelle au PAS)
- AUTRE : Cas particuliers (gel prix, conservation premium)
Valeurs possibles pour VALIDATION_STATUS :
- VALIDE : Hausse normale (0% à 20%)
- A_VERIFIER : Hausse > 20%, nécessite vérification manuelle
- ANOMALIE : Baisse de prix détectée (erreur potentielle)
9.4.2. validation_report.csv
Structure du fichier :
CATEGORIE;METRIQUE;VALEUR
GLOBAL;Nombre total d'offres;45123
GLOBAL;Nombre de clients;3245
GLOBAL;Nombre d'articles;8976
HAUSSES;Hausse moyenne (%);5,23
HAUSSES;Hausse médiane (%);4,87
HAUSSES;Hausse max (%);18,56
TYPE_HAUSSE;REPOSITIONNEMENT;32456
TYPE_HAUSSE;HAUSSE_PROPORTIONNELLE;12667
VALIDATION;VALIDE;44980
VALIDATION;A_VERIFIER;143
Interprétation : - GLOBAL : Métriques de volumétrie - HAUSSES : Statistiques descriptives des hausses - TYPE_HAUSSE : Répartition entre RECO1 et RECO2 - VALIDATION : Répartition par statut de validation
9.4.3. export_summary.txt
Contenu du fichier :
RÉSUMÉ EXPORT FINAL PT2QE
==================================================
Date : 15/03/2025 16:05:12
VOLUMÉTRIE
--------------------
Offres exportées : 45 123
Clients uniques : 3 245
Articles uniques : 8 976
HAUSSES DE PRIX
--------------------
Hausse moyenne : 5,2%
Hausse médiane : 4,9%
Hausse min : 0,0%
Hausse max : 18,6%
VALIDATION
--------------------
VALIDE : 44 980 (99,7%)
A_VERIFIER : 143 (0,3%)
ANOMALIE : 0 (0,0%)
Utilisation : Résumé rapide sans avoir à ouvrir Excel.
9.5. Vérification de la qualité de l'export¶
Contrôles à effectuer :
Contrôle 1 : Nombre d'offres cohérent
Comparer le nombre dans final_price_offers.csv avec le nombre dans recommendations_detail.csv de l'Étape 1 :
- Doivent être identiques
- Si différence : vérifier les logs, possibilité de filtrage inattendu
Contrôle 2 : Pas d'anomalies
Vérifier dans validation_report.csv :
Si ANOMALIE > 0 : ouvrir final_price_offers.csv et filtrer sur VALIDATION_STATUS = 'ANOMALIE' pour investiguer.
Contrôle 3 : Taux de vérification acceptable
Vérifier dans validation_report.csv :
Si A_VERIFIER > 5% du total : trop de hausses > 20%, ajuster les cappings et refaire Étape 2.
Contrôle 4 : Hausses cohérentes
Vérifier dans export_summary.txt :
- Hausse moyenne cohérente avec les cappings définis
- Pas de hausse max aberrante (> 50% par exemple)
Contrôle 5 : Pas de lignes vides
Ouvrir final_price_offers.csv dans Excel :
- Vérifier qu'il n'y a pas de lignes vides intercalées
- Vérifier que toutes les colonnes sont remplies
Contrôle 6 : Format décimal correct
Vérifier que : - Les prix utilisent la virgule comme séparateur décimal : 45,750 (pas 45.750) - Les pourcentages sont corrects : 4,70 (pas 0,047 ni 470)
9.6. Utilisation du fichier final¶
Cas d'usage 1 : Import dans un système SAP
Le fichier final_price_offers.csv peut être importé via une interface standard SAP en utilisant les colonnes :
- ID_CLN (numéro client)
- ID_ART (référence article)
- ID_CND (identifiant condition)
- NOUVEAU_PRIX (nouveau prix à appliquer)
Cas d'usage 2 : Analyse dans Excel/PowerBI
Le fichier peut être chargé dans Excel ou Power BI pour : - Créer des tableaux croisés dynamiques par TYPE_CLIENT / TYPE_RESTAURANT / GEO - Visualiser la distribution des hausses - Analyser les positions avant/après - Comparer avec les objectifs business
Cas d'usage 3 : Validation manuelle des cas A_VERIFIER
- Ouvrir
final_price_offers.csvdans Excel - Filtrer sur VALIDATION_STATUS = 'A_VERIFIER'
- Pour chaque ligne :
- Vérifier la cohérence de la hausse
- Consulter l'historique client
- Valider ou corriger manuellement
- Exporter les lignes validées pour import
Cas d'usage 4 : Communication aux équipes commerciales
Créer des extraits par zone géographique ou par commercial pour diffusion :
-- Dans Excel, filtrer et exporter par GEO
GEO = 'IDF' → export_IDF.csv
GEO = 'NO' → export_NO.csv
...
10. Analyse des résultats : Guide détaillé¶
10.1. recommendations_detail.csv (Export complet)¶
Utilité : Base de données complète ligne à ligne pour analyses pivots et traçabilité.
Colonnes principales à analyser :
10.1.1. Colonnes d'identification
- ID_CLN, LC_CLN : Identifiant et nom du client
- ID_ART, LC_ART : Identifiant et nom de l'article
- ID_CND : Identifiant de la condition de prix
10.1.2. Colonnes de catégorisation produit
- CATEGORIE_N1 à CATEGORIE_N6 : Hiérarchie produit complète
- MARQUE : Marque du produit
- LC_ATTRIBUT : Attribut produit (dont "Basiques")
10.1.3. Colonnes de dimension
- TYPE_CLIENT : Segment client (RCI PI GI, RSI HM, etc.)
- TYPE_RESTAURANT : Type restaurant (REST. TRADI, SOCIAL, etc.)
- GEO : Zone géographique (IDF, NO, SE, SO, etc.)
- UNIVERS : Univers (toujours ZOOM1)
- MATCH_TYPE : Type de matching (MASTER ou NATIONAL)
10.1.4. Colonnes de performance historique (4Q)
- MT_CAB_4Q : CA total sur 4 derniers trimestres
- QT_UF_4Q : Volume en UF
- QT_KG_4Q : Volume en KG
- MT_CAB_4Q_FERMES : CA prix fermes uniquement
- MT_CAB_4Q_INDEXES : CA prix indexés uniquement
10.1.5. Colonnes des 3 positions
- POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES : Position 1 (ref PT0CE)
- PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES : Position 2 (post PT1CE)
- POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES : Position 3 (post PT2QE)
Exemple de lecture des 3 positions :
Client 12345, Article 075130 :
Position 1 : PL4 → Le prix actuel était dans PL4 avec les anciennes bornes
Position 2 : PL3 → Après recalibrage PT1CE, le prix est maintenant dans PL3
Position 3 : PL2 → PT2QE recommande de monter vers PL2
Interprétation : La recommandation PT2QE permet de remonter d'un palier supplémentaire
par rapport au simple effet PT1CE.
10.1.6. Colonnes de cascade de calcul (traçabilité)
- RECO1_BASE : Recommandation 1 brute (repositionnement)
- RECO1_APRES_CAPPING_SENSIBILITE : Après 1er capping (sensibilité)
- RECO1_AVEC_CAPPING : Après cascade complète (sensibilité + basiques)
- RECO2 : Recommandation 2 (hausse proportionnelle PAS)
Exemple de cascade :
RECO1_BASE = 52,00 €
RECO1_APRES_CAPPING_SENSIBILITE = 47,25 € ← Capping sensibilité appliqué
RECO1_AVEC_CAPPING = 47,25 € ← Pas de correction par capping basiques
RECO2 = 46,80 €
PRIX_RECOMMANDE = 47,25 € ← MAX(RECO1_AVEC_CAPPING, RECO2)
10.1.7. Colonnes de décision finale
- DECISION_PATH : Chemin emprunté (PAS_BAISSE_GEL_PRIX, PL1_CONSERVATION_PREMIUM, OPTIMISATION_STANDARD)
- RECO_TYPE : Type de reco gagnante (GEL_PRIX, CONSERVATION_PREMIUM, REPOSITIONNEMENT_PALIERS, HAUSSE_PROPORTIONNELLE_PAS)
- RECO_SELECTIONNEE : Nom complet explicite de la recommandation sélectionnée
- CAPPING_APPLIED : Capping le plus contraignant (GEL_PAS, PRB_FINAL, PLANCHER_PL2_PL3, BASIQUES_50PCT, SENSIBILITE, NONE)
- PRIX_RECOMMANDE : Prix final recommandé
- PCT_HAUSSE_FINALE : % de hausse finale (en décimal, multiplier par 100 pour avoir le %)
10.1.8. Analyses possibles dans Excel
Analyse 1 : Top hausses par segment
Créer un tableau croisé dynamique : - Lignes : TYPE_CLIENT - Valeurs : MAX de PCT_HAUSSE_FINALE, AVG de PCT_HAUSSE_FINALE - Filtrer : PCT_HAUSSE_FINALE > 15%
Analyse 2 : Impact des cappings
Créer un tableau croisé dynamique : - Lignes : CAPPING_APPLIED - Valeurs : COUNT de ID_CLN, AVG de PCT_HAUSSE_FINALE - Visualiser : Graphique en barres
Analyse 3 : Efficacité de l'arbre de décision
Créer un tableau croisé dynamique : - Lignes : DECISION_PATH - Colonnes : RECO_SELECTIONNEE - Valeurs : COUNT de ID_CLN
Exemple de résultat attendu :
DECISION_PATH | RECO1 | RECO2 | GEL | CONSERVATION | TOTAL
-------------------------------|-------|-------|-----|--------------|-------
PAS_BAISSE_GEL_PRIX | 0 | 0 | 876 | 0 | 876
PL1_CONSERVATION_PREMIUM | 0 | 0 | 0 | 543 | 543
OPTIMISATION_STANDARD | 32k | 11k | 0 | 0 | 43k
Analyse 4 : Comparaison MASTER vs NATIONAL
Créer un tableau croisé dynamique : - Lignes : MATCH_TYPE - Valeurs : COUNT de ID_CLN, AVG de PCT_HAUSSE_FINALE
Vérifier que : - NATIONAL représente < 10% du total (sinon, revoir les cubes MASTER de PT1CE) - Les hausses NATIONAL sont cohérentes (généralement plus conservatrices)
Analyse 5 : Produits basiques cappés
Filtrer sur :
- LC_ATTRIBUT = 'Basiques'
- CAPPING_APPLIED = 'BASIQUES_50PCT'
Comparer RECO1_APRES_CAPPING_SENSIBILITE et RECO1_AVEC_CAPPING pour voir l'impact du capping basiques.
10.2. impact_analysis.csv (Impact CA par segment)¶
Utilité : Vision consolidée de l'impact CA par TYPE_CLIENT × UNIVERS.
Structure du fichier :
TYPE_CLIENT;UNIVERS;NB_OFFRES;CA_ACTUEL;CA_FUTUR;IMPACT_EUROS;IMPACT_PCT;HAUSSE_MOY_PCT;NB_SANS_HAUSSE;NB_0_2PCT;NB_2_5PCT;NB_5_10PCT;NB_10_15PCT;NB_15_20PCT;NB_PLUS_20PCT;PCT_SANS_HAUSSE;PCT_0_2;PCT_2_5;PCT_5_10;PCT_10_15;PCT_15_20;PCT_PLUS_20
RCI PI GI;ZOOM1;15234;2345678,50;2456789,30;111110,80;4,74;4,8;234;1234;5678;6543;1234;234;77;1,5;8,1;37,3;42,9;8,1;1,5;0,5
RSI HM;ZOOM1;8976;1234567,80;1345678,90;111111,10;9,00;9,2;123;456;2345;3456;1876;543;177;1,4;5,1;26,1;38,5;20,9;6,0;2,0
...
Colonnes clés :
NB_OFFRES: Nombre d'offres dans le segmentCA_ACTUEL: CA actuel total (approximatif, somme des prix tarif)CA_FUTUR: CA futur total (approximatif, somme des prix recommandés)IMPACT_EUROS: Gain CA en € (CA_FUTUR - CA_ACTUEL)IMPACT_PCT: Gain CA en % ((CA_FUTUR - CA_ACTUEL) / CA_ACTUEL × 100)HAUSSE_MOY_PCT: Hausse moyenne pondérée en %
Distribution des hausses par tranches :
- NB_SANS_HAUSSE / PCT_SANS_HAUSSE : 0%
- NB_0_2PCT / PCT_0_2 : ]0%, 2%]
- NB_2_5PCT / PCT_2_5 : ]2%, 5%]
- NB_5_10PCT / PCT_5_10 : ]5%, 10%]
- NB_10_15PCT / PCT_10_15 : ]10%, 15%]
- NB_15_20PCT / PCT_15_20 : ]15%, 20%]
- NB_PLUS_20PCT / PCT_PLUS_20 : > 20%
Analyses possibles :
Analyse 1 : Segments les plus impactés
Trier par IMPACT_PCT décroissant pour identifier les segments avec le plus fort gain CA relatif.
Analyse 2 : Profil de distribution des hausses
Pour chaque TYPE_CLIENT, analyser les % par tranche :
Profil CONSERVATEUR (bon) :
Profil AGRESSIF (à surveiller) :
Profil DÉSÉQUILIBRÉ (à corriger) :
Analyse 3 : Validation business
Comparer IMPACT_PCT avec les objectifs business :
- Si objectif = +3% global et IMPACT_PCT segment = +9% → Trop agressif, ajuster cappings
- Si objectif = +3% global et IMPACT_PCT segment = +1,5% → Trop conservateur, relâcher cappings
Analyse 4 : Identifier les segments problématiques
Filtrer sur PCT_PLUS_20 > 5% :
- Ces segments nécessitent probablement un ajustement des cappings (Étape 2)
10.3. price_increase_distribution.csv (Histogramme global)¶
Utilité : Vue d'ensemble de la distribution des hausses toutes offres confondues.
Structure du fichier :
TRANCHE_HAUSSE;NB_OFFRES;NB_CLIENTS_UNIQUES;NB_ARTICLES_UNIQUES;PRIX_MOY_ACTUEL;PRIX_MOY_RECOMMANDE;HAUSSE_MIN_PCT;HAUSSE_MAX_PCT;HAUSSE_MOY_PCT;PCT_OFFRES;PCT_CUMULE
00. Pas de hausse;2345;123;876;34,56;34,56;0,00;0,00;0,00;5,2;5,2
01. 0-2%;5678;234;1234;28,45;29,01;0,12;2,00;1,23;12,6;17,8
02. 2-5%;12456;456;2345;42,34;44,12;2,01;5,00;3,67;27,6;45,4
03. 5-7%;8765;345;1987;38,23;40,45;5,01;7,00;6,12;19,4;64,8
04. 7-10%;6543;234;1654;45,67;49,23;7,01;10,00;8,45;14,5;79,3
05. 10-12%;4321;123;987;52,34;57,89;10,01;12,00;11,23;9,6;88,9
06. 12-15%;2109;87;543;48,90;55,67;12,01;15,00;13,45;4,7;93,6
07. 15-17%;987;45;234;39,45;46,78;15,01;17,00;16,12;2,2;95,8
08. 17-20%;543;23;123;44,56;53,21;17,01;20,00;18,67;1,2;97,0
09. Plus de 20%;1356;78;234;35,67;45,23;20,01;28,45;23,12;3,0;100,0
Colonnes clés :
TRANCHE_HAUSSE: Tranche de hausse (10 buckets)NB_OFFRES: Nombre d'offres dans cette tranchePRIX_MOY_ACTUEL/PRIX_MOY_RECOMMANDE: Prix moyensHAUSSE_MOY_PCT: Hausse moyenne dans la tranchePCT_OFFRES: % d'offres dans cette tranchePCT_CUMULE: % cumulé jusqu'à cette tranche
Analyses possibles :
Analyse 1 : Profil global de l'agressivité
Regarder PCT_CUMULE :
- Si 80% des offres ont < 10% de hausse → Profil conservateur
- Si 80% des offres ont < 15% de hausse → Profil équilibré
- Si 80% des offres ont < 20% de hausse → Profil agressif
Analyse 2 : Identification des outliers
Regarder la tranche "09. Plus de 20%" :
- Si PCT_OFFRES > 5% → Trop d'offres avec hausses excessives
- Si HAUSSE_MOY_PCT > 30% → Hausses aberrantes, investiguer
Analyse 3 : Courbe de Lorenz
Créer un graphique avec : - Axe X : TRANCHE_HAUSSE - Axe Y1 (barres) : NB_OFFRES - Axe Y2 (courbe) : PCT_CUMULE
Visualisation type courbe de Lorenz pour voir la concentration des hausses.
Analyse 4 : Comparaison avec objectif business
Si objectif global = +5% de hausse moyenne :
- Localiser la tranche où HAUSSE_MOY_PCT ≈ 5% (ex: tranche "03. 5-7%")
- Vérifier PCT_CUMULE à cette tranche (ex: 64,8%)
- Interprétation : 64,8% des offres sont en dessous de l'objectif, 35,2% au-dessus
10.4. decision_path_analysis.csv (Statistiques par chemin)¶
Utilité : Comprendre la répartition entre les 3 chemins de décision et l'efficacité de chaque chemin.
Structure du fichier :
DECISION_PATH;RECO_SELECTIONNEE;NB_OFFRES;NB_CLIENTS;NB_ARTICLES;HAUSSE_MOY_PCT;HAUSSE_MEDIANE_PCT;NB_CAP_GEL;NB_CAP_PRB;NB_CAP_PLANCHER;NB_CAP_BASIQUES;NB_CAP_SENSIBILITE;NB_SANS_CAPPING
PAS_BAISSE_GEL_PRIX;GEL_PRIX;876;123;234;0,00;0,00;876;0;0;0;0;0
PL1_CONSERVATION_PREMIUM;CONSERVATION_PREMIUM;543;87;156;0,34;0,12;0;89;234;0;0;220
OPTIMISATION_STANDARD;RECO1_REPOSITIONNEMENT_PALIERS;32456;2345;6543;5,67;5,23;0;1234;0;876;12345;18001
OPTIMISATION_STANDARD;RECO2_HAUSSE_PROPORTIONNELLE_PAS;11248;987;2345;4,23;4,01;0;543;0;321;0;10384
Colonnes clés :
DECISION_PATH: Chemin de décision (3 possibles)RECO_SELECTIONNEE: Recommandation finale sélectionnéeNB_OFFRES: Volume d'offresHAUSSE_MOY_PCT/HAUSSE_MEDIANE_PCT: Statistiques de hausseNB_CAP_*: Comptage par type de capping appliqué
Analyses possibles :
Analyse 1 : Répartition entre les chemins
Calculer le % d'offres par chemin :
CHEMIN 1 (GEL) : 876 / 45 123 = 1,9%
CHEMIN 2 (CONSERVATION) : 543 / 45 123 = 1,2%
CHEMIN 3 (OPTIMISATION) : 43 704 / 45 123 = 96,9%
Interprétation : - CHEMIN 1 faible (< 5%) : Peu de PAS en baisse, normal - CHEMIN 2 faible (< 5%) : Peu de clients premium dans PL1 anciennes bornes - CHEMIN 3 dominant (> 90%) : La majorité des offres suit l'optimisation standard
Analyse 2 : Efficacité relative des recommandations (CHEMIN 3)
Comparer RECO1 vs RECO2 :
Interprétation : - Si RECO1 gagne souvent (> 70%) : Les paliers sont bien calibrés (plus agressifs que la hausse proportionnelle) - Si RECO2 gagne souvent (> 50%) : Les paliers sont peut-être trop conservateurs ou les cappings trop restrictifs
Analyse 3 : Impact des cappings par chemin
Regarder les colonnes NB_CAP_* :
Pour CHEMIN 3 RECO1 :
NB_CAP_SENSIBILITE = 12 345 → 38% des offres RECO1 sont cappées par sensibilité
NB_CAP_BASIQUES = 876 → 2,7% des offres RECO1 sont cappées par basiques
NB_CAP_PRB = 1 234 → 3,8% des offres RECO1 sont cappées par PRB
NB_SANS_CAPPING = 18 001 → 55,5% des offres RECO1 n'ont aucun capping
Interprétation : - Capping sensibilité très actif (38%) : Les cappings type client sont efficaces - Capping basiques peu actif (2,7%) : Peu de produits basiques avec RECO1 > 50% - 55% sans capping : La majorité des recommandations RECO1 sont en dessous des limites
Pour CHEMIN 2 :
Interprétation : - 43% des clients premium conservés ont un prix actuel < NEW_BORNE_PL2_PL3 - Le plancher de sécurité joue bien son rôle
10.5. capping_distribution.csv (Distribution des cappings)¶
Utilité : Vision détaillée du croisement CAPPING_APPLIED × DECISION_PATH × RECO_SELECTIONNEE.
Structure du fichier :
CAPPING_APPLIED;DECISION_PATH;RECO_SELECTIONNEE;NB_OFFRES;HAUSSE_MOY_PCT
GEL_PAS;PAS_BAISSE_GEL_PRIX;GEL_PRIX;876;0,00
PRB_FINAL;PL1_CONSERVATION_PREMIUM;CONSERVATION_PREMIUM;89;2,34
PLANCHER_PL2_PL3;PL1_CONSERVATION_PREMIUM;CONSERVATION_PREMIUM;234;0,87
NONE;PL1_CONSERVATION_PREMIUM;CONSERVATION_PREMIUM;220;0,00
PRB_FINAL;OPTIMISATION_STANDARD;RECO1_REPOSITIONNEMENT_PALIERS;1234;8,76
BASIQUES_50PCT;OPTIMISATION_STANDARD;RECO1_REPOSITIONNEMENT_PALIERS;876;12,34
SENSIBILITE;OPTIMISATION_STANDARD;RECO1_REPOSITIONNEMENT_PALIERS;12345;6,45
NONE;OPTIMISATION_STANDARD;RECO1_REPOSITIONNEMENT_PALIERS;18001;4,23
PRB_FINAL;OPTIMISATION_STANDARD;RECO2_HAUSSE_PROPORTIONNELLE_PAS;543;9,12
SENSIBILITE;OPTIMISATION_STANDARD;RECO2_HAUSSE_PROPORTIONNELLE_PAS;321;7,23
NONE;OPTIMISATION_STANDARD;RECO2_HAUSSE_PROPORTIONNELLE_PAS;10384;3,89
Analyses possibles :
Analyse 1 : Cappings les plus actifs
Créer un tableau croisé dynamique : - Lignes : CAPPING_APPLIED - Valeurs : SUM de NB_OFFRES
Trier par NB_OFFRES décroissant :
NONE : 28 605 offres (63,4%)
SENSIBILITE : 12 666 offres (28,1%)
BASIQUES_50PCT : 876 offres (1,9%)
...
Interprétation : - NONE majoritaire (63%) : La plupart des recommandations sont en dessous des limites (bon signe) - SENSIBILITE actif (28%) : Les cappings type client jouent leur rôle de protection - BASIQUES faible (2%) : Peu de produits basiques nécessitent le capping 50%
Analyse 2 : Hausses moyennes par capping
Comparer HAUSSE_MOY_PCT par CAPPING_APPLIED :
NONE : 4,23% → Hausses naturelles sans contrainte
SENSIBILITE : 6,45% → Hausses bridées par sensibilité
BASIQUES_50PCT : 12,34% → Hausses bridées à 50% (les plus fortes)
PRB_FINAL : 8,76% → Hausses bloquées par le plafond PRB
Interprétation : - Les offres avec capping BASIQUES ont les hausses les plus fortes (12,34%) car le capping 50% est très permissif - Les offres avec capping PRB_FINAL sont aussi élevées (8,76%) car elles atteignent le plafond du corridor - Les offres SENSIBILITE sont modérées (6,45%)
Analyse 3 : Efficacité du capping basiques
Filtrer sur CAPPING_APPLIED = 'BASIQUES_50PCT' :
Si ces offres n'avaient pas été cappées, leur hausse aurait été > 50%.
Calcul de l'impact :
Hausse moyenne sans capping = (HAUSSE_MOY_PCT / facteur_capping_moyen)
Si facteur moyen capping basiques = 0,7 (hausse réduite de 30%)
Hausse moyenne sans capping ≈ 12,34% / 0,7 ≈ 17,6%
Impact du capping basiques : -5,3 points de % en moyenne sur 876 offres
11. Modification des paramètres de configuration¶
11.1. Modifier les cappings par TYPE_CLIENT¶
Fichier concerné : inputs/capping_type_client.csv
Scénario : Vous voulez être plus conservateur sur RSI HM.
Procédure :
-
Ouvrir
inputs/capping_type_client.csvdans Excel -
Localiser la ligne RSI HM :
-
Modifier les valeurs :
(Réduction de tous les cappings) -
Enregistrer (format CSV point-virgule, encodage CP1252)
-
Relancer Étape 1 (Option 1) pour un nouveau calcul complet
Important : Modifier ce fichier nécessite un nouveau run complet (Étape 1). Si vous voulez ajuster plus finement par cube, utilisez plutôt l'Étape 2.
11.2. Modifier les règles de repositionnement RECO1¶
Fichier concerné : config/pt2qe_config.json
Scénario : Vous voulez que les prix dans PL3_PL4 remontent directement vers PL2 au lieu de PL1.
Procédure :
-
Ouvrir
config/pt2qe_config.jsondans un éditeur de texte -
Localiser la section
recommendations.reco1_rules: -
Modifier si nécessaire (déjà configuré pour PL2 dans l'exemple)
-
Sauvegarder le fichier
-
Relancer Étape 1 (Option 1)
Attention : Modifier ces règles change fondamentalement la logique de repositionnement. À faire avec précaution et validation.
Règles modifiables :
- action : Nom de l'action (pour logs et documentation)
- target : Colonne SQL cible (ex: NEW_BORNE_PL1_PL2, NEW_BORNE_PL2_PL3, etc.)
Ne PAS modifier :
- position : Identifiant de la position
- condition : Condition SQL (risque d'erreur)
11.3. Modifier le capping produits basiques¶
Fichier concerné : config/pt2qe_config.json
Scénario : Vous voulez limiter les produits basiques à +30% au lieu de +50%.
Procédure :
-
Ouvrir
config/pt2qe_config.json -
Localiser la section
capping.basiques: -
Modifier la valeur :
-
Sauvegarder le fichier
-
Relancer Étape 1 (Option 1)
Impact : Tous les produits avec LC_ATTRIBUT = 'Basiques' seront cappés à +30% au lieu de +50%.
11.4. Modifier les paramètres d'export¶
Fichier concerné : config/pt2qe_config.json
Scénario : Vous voulez que les exports CSV utilisent le point comme séparateur décimal au lieu de la virgule.
Procédure :
-
Ouvrir
config/pt2qe_config.json -
Localiser la section
output: -
Cette section contrôle :
csv_separator: Séparateur de colonnes (ne pas modifier)csv_encoding: Encodage des fichiers (ne pas modifier)decimal_places: Nombre de décimales pour les montants-
percentage_format: Nombre de décimales pour les pourcentages -
Pour changer le séparateur décimal, modifier le code Python n'est PAS recommandé. Le format virgule est imposé par Excel France.
Note : Ces paramètres sont avancés et rarement modifiés.
11.5. Paramètres non modifiables (hardcodés)¶
Certains paramètres sont fixés dans le code et ne peuvent pas être modifiés sans intervention développeur :
Filtres d'extraction :
- UNIVERS = 'ZOOM1' : Extraction ZOOM1 uniquement
- ID_SEQ IN ('A305', 'A565') : Séquences de prix
- ID_TYP_CND IN ('ZFAP', 'ZFSP', 'ZIAP', 'ZISP') : Types de conditions
Scope temporel : - Nombre de trimestres fiscaux : 4 (hardcodé dans PeriodManager) - Type de trimestre : Complets uniquement (dont la date de fin est passée)
Arbre de décision : - Nombre de chemins : 3 (PAS_BAISSE, PL1_CONSERVATION, OPTIMISATION_STANDARD) - Logique des chemins : Définie dans le code SQL (module calculate_recommandations.py)
Ordre de la cascade de capping : 1. Sensibilité (selon TYPE_CLIENT) 2. Basiques (50% ou valeur config) 3. PRB final (plafond absolu)
Cet ordre n'est pas modifiable.
12. Cas d'usage et exemples¶
12.1. Cas 1 : Premier calcul simple sans ajustement¶
Contexte :
- Première utilisation de PT2QE
- PT1CE a été exécuté et validé
- Vous avez préparé le fichier capping_type_client.csv
Étapes :
-
Vérifier les prérequis :
-
Vérifier que le fichier
inputs/capping_type_client.csvest présent et correct -
Lancer le calcul :
-
Attendre la fin du traitement (suivre les logs)
-
Analyser les résultats :
- Ouvrir
outputs/run_YYYYMMDD_HHMMSS/impact_analysis.csv - Vérifier les hausses moyennes par TYPE_CLIENT
-
Vérifier la distribution dans
price_increase_distribution.csv -
Si satisfait, générer les offres finales :
-
Récupérer le fichier :
Durée estimée : Impossible à estimer (dépend du volume de données).
12.2. Cas 2 : Calcul avec ajustements itératifs¶
Contexte : - Après un premier calcul, certaines hausses sont trop fortes sur RSI HM en IDF - Vous voulez affiner les cappings pour ce segment sans tout recalculer
Étapes :
- Analyser le premier run :
Identifier :
-
Préparer les corrections :
-
Ouvrir
corrections/capping_cubes_corrections.csvdans Excel -
Filtrer sur
TYPE_CLIENT = 'RSI HM'etGEO = 'IDF' -
Modifier les cappings :
-
Enregistrer le fichier (CSV point-virgule, CP1252)
-
Lancer l'ajustement :
-
Comparer les résultats :
-
Si satisfait, générer les offres finales :
-
Si pas satisfait, répéter les étapes 3-8
Nombre d'itérations possibles : Illimité
12.3. Cas 3 : Recalcul complet après changement de stratégie¶
Contexte :
- Après analyse, vous décidez de changer la stratégie globale
- Vous voulez être plus agressif sur tous les TYPE_CLIENT
- Modification des cappings dans capping_type_client.csv
Étapes :
-
Modifier
inputs/capping_type_client.csv: -
Enregistrer le fichier
-
Important : Relancer un calcul complet (Étape 1), PAS l'Étape 2
Raison : L'Étape 2 utilise les cubes existants. Pour un changement global de stratégie, il faut un nouveau calcul complet qui régénérera les cubes avec les nouvelles valeurs.
-
Analyser les nouveaux résultats
-
Comparer avec le run précédent pour valider l'impact
-
Si satisfait, générer les offres finales
Différence Étape 1 vs Étape 2 : - Étape 1 : Nouveau calcul complet, nouveaux cubes, application des cappings TYPE_CLIENT depuis le fichier - Étape 2 : Recalcul sur cubes existants, application de corrections ciblées par cube
12.4. Cas 4 : Investigation d'une hausse aberrante¶
Contexte :
- Dans final_price_offers.csv, vous repérez une offre avec 25% de hausse
- Vous voulez comprendre pourquoi
Étapes :
-
Noter les identifiants de l'offre :
-
Ouvrir
outputs/run_YYYYMMDD_HHMMSS/recommendations_detail.csv -
Filtrer sur ID_CLN = 12345 ET ID_ART = 075130
-
Analyser la ligne :
ID_CLN;ID_ART;PRIX_TARIF_ACTUEL;PRIX_RECOMMANDE;PCT_HAUSSE_FINALE;DECISION_PATH;RECO_SELECTIONNEE;CAPPING_APPLIED;PRICE_SENSITIVITY;LC_ATTRIBUT;RECO1_BASE;RECO1_APRES_CAPPING_SENSIBILITE;RECO1_AVEC_CAPPING;RECO2 12345;075130;40,00;50,00;25,00;OPTIMISATION_STANDARD;RECO1_REPOSITIONNEMENT_PALIERS;NONE;LOW;Basiques;50,00;50,00;50,00;48,00 -
Observations :
DECISION_PATH = OPTIMISATION_STANDARD: Optimisation classique (CHEMIN 3)RECO_SELECTIONNEE = RECO1: Repositionnement par paliers a gagnéCAPPING_APPLIED = NONE: Aucun capping n'a été appliqué !PRICE_SENSITIVITY = LOW: Sensibilité LOW → Capping 7,5%-
LC_ATTRIBUT = Basiques: Produit basique → Capping 50% -
Diagnostic :
- RECO1_BASE = 50,00 € (repositionnement vers un palier supérieur)
- Prix actuel × (1 + 0,075) = 40,00 × 1,075 = 43,00 €
- RECO1_BASE (50,00) < 43,00 ? NON → Pas de capping sensibilité appliqué
- Prix actuel × 1,50 = 40,00 × 1,50 = 60,00 €
- RECO1 (50,00) < 60,00 ? OUI → Pas de capping basiques appliqué
-
RECO1 (50,00) < PRB ? Supposons OUI → Pas de capping PRB
-
Conclusion :
- La hausse est due au repositionnement RECO1 vers un palier supérieur (borne = 50,00 €)
-
Les cappings n'ont pas bloqué car :
- Sensibilité LOW trop permissive (7,5%)
- Capping basiques très permissif (50%)
- Repositionnement ne dépassait aucun capping
-
Actions possibles :
- Accepter cette hausse si elle est justifiée par le corridor
- Réduire CAPPING_LOW pour le TYPE_CLIENT concerné dans
capping_type_client.csv - Ajuster le capping par cube dans
corrections/capping_cubes_corrections.csv - Réduire le capping basiques dans
config/pt2qe_config.json
12.5. Cas 5 : Export pour une zone géographique spécifique¶
Contexte : - Vous voulez fournir un fichier d'offres uniquement pour la zone IDF - Pour transmission à l'équipe commerciale IDF
Étapes :
-
Ouvrir
outputs/final_YYYYMMDD_HHMMSS/final_price_offers.csvdans Excel -
Activer les filtres automatiques (Ctrl+Maj+L)
-
Filtrer la colonne GEO sur "IDF"
-
Copier les lignes filtrées (Ctrl+A, Ctrl+C)
-
Créer un nouveau classeur Excel
-
Coller les données (Ctrl+V)
-
Enregistrer sous
export_IDF_YYYYMMDD.csv(CSV point-virgule, CP1252) -
Transmettre ce fichier à l'équipe IDF
Alternative : Créer un script Python dédié pour automatiser cet export.
12.6. Cas 6 : Validation des hausses avant import SAP¶
Contexte : - Avant d'importer dans SAP, vous voulez valider manuellement les hausses > 15%
Étapes :
-
Ouvrir
outputs/final_YYYYMMDD_HHMMSS/final_price_offers.csv -
Filtrer sur
VALIDATION_STATUS = 'A_VERIFIER'ouPCT_HAUSSE > 15 -
Pour chaque ligne :
- Vérifier le TYPE_CLIENT et TYPE_RESTAURANT
- Consulter l'historique transactionnel (colonnes MT_CAB_4Q, QT_UF_4Q)
- Vérifier les positions (les 3 colonnes POSITION_*)
-
Décider : VALIDER ou CORRIGER
-
Pour les lignes à corriger :
- Noter le cube concerné (UNIVERS, TYPE_CLIENT, TYPE_RESTAURANT, GEO)
-
Préparer un fichier de corrections
-
Relancer l'Étape 2 avec les corrections
-
Régénérer l'Étape 3
-
Vérifier que les hausses > 15% ont diminué
-
Si OK, procéder à l'import SAP
13. Résolution de problèmes courants¶
13.1. Erreur : "Fichier capping_type_client.csv manquant"¶
Symptôme :
Cause : Le fichier de capping obligatoire n'est pas présent dans le dossier inputs/.
Solution :
-
Vérifier l'existence du dossier
inputs/(créer si nécessaire) -
Créer le fichier
capping_type_client.csvdans ce dossier -
Format minimal requis :
-
Ajouter toutes les lignes nécessaires pour vos TYPE_CLIENT actifs
-
Vérifier le format : séparateur
;, décimale,, encodage CP1252 -
Relancer le traitement
13.2. Erreur : "Tables PT1CE_OPTIMAL_* NON TROUVEES"¶
Symptôme :
Cause : PT1CE n'a pas été exécuté ou les tables n'ont pas été créées correctement.
Solution :
-
OBLIGATOIRE : Lancer PT1CE AVANT PT2QE
-
Étapes dans PT1CE :
-
Vérifier la création des tables :
Doit afficher :
[OK] PT1CE_OPTIMAL_ZOOM1 : XXXXX lignes
[OK] PT1CE_OPTIMAL_ZOOM2 : XXXXX lignes
[OK] PT1CE_OPTIMAL_ZOOM3 : XXXXX lignes
- Si les tables existent dans PT1CE mais pas accessibles dans PT2QE :
- Vérifier que les deux scripts utilisent la même base de données (TARIFAIRE)
-
Vérifier les droits Oracle (SELECT sur les tables PT1CE_OPTIMAL_*)
-
Revenir dans PT2QE et relancer
13.3. Erreur : "Connexion Oracle perdue"¶
Symptôme :
Causes possibles : 1. Perte de connexion réseau 2. Credentials Oracle incorrects 3. Nom de base incorrect 4. Service Oracle arrêté
Solution :
-
Vérifier la connexion réseau :
-
Vérifier le service Oracle :
-
Vérifier les credentials dans le fichier de configuration Oracle
-
Si problème persistant, contacter l'équipe DBA
-
Relancer le traitement une fois la connexion rétablie
13.4. Problème : "Aucune offre extraite"¶
Symptôme :
Causes possibles : 1. Aucune offre ZOOM1 valide dans SYS_TARIF_SIMULATION 2. Filtres trop restrictifs 3. Mappings TYPE_CLIENT/TYPE_RESTAURANT incomplets 4. Tables PT0CE manquantes ou vides
Solution :
-
Vérifier l'existence d'offres dans SYS_TARIF_SIMULATION :
-
Vérifier les mappings :
Si vide : exécuter les scripts de création des mappings PT0CE
-
Vérifier les conditions :
-
Si le problème persiste, consulter l'équipe en charge des données sources
13.5. Problème : "Taux de matching faible (< 80%)"¶
Symptôme :
→ Résultats du matching :
- MASTER : 15 000 offres
- NATIONAL : 25 000 offres ← Trop élevé
- NO_MATCH : 5 000 offres ← Trop élevé
Cause : Les cubes MASTER dans PT1CE sont incomplets ou les dimensions ne matchent pas.
Solution :
- Pour NO_MATCH élevé :
Vérifier que les dimensions matchent :
-- Articles sans corridor
SELECT DISTINCT o.ID_ART
FROM PT2QE_PRICE_OFFERS o
LEFT JOIN PT1CE_OPTIMAL_ZOOM1 c
ON o.ID_ART = c.ID_ART
WHERE c.ID_ART IS NULL
Si beaucoup d'articles manquants : relancer PT1CE avec un périmètre article plus large
- Pour NATIONAL élevé (> 30%) :
Vérifier que les cubes MASTER existent pour vos combinaisons :
SELECT COUNT(*)
FROM PT1CE_OPTIMAL_ZOOM1
WHERE CUBE_TYPE = 'MASTER'
AND TYPE_CLIENT = 'RCI PI GI' -- Exemple
AND TYPE_RESTAURANT = 'REST. TRADI'
AND GEO = 'IDF'
Si peu de résultats : PT1CE n'a peut-être pas créé tous les cubes MASTER nécessaires
Solution : Vérifier les seuils de volumétrie dans PT1CE (config → volume_min_articles)
- Ajuster les seuils PT1CE si nécessaire et relancer PT1CE puis PT2QE
13.6. Problème : "Hausses moyennes trop élevées"¶
Symptôme :
Cause : Les cappings définis sont trop permissifs.
Solution :
- Solution rapide (Étape 2) :
Identifier les cubes problématiques dans impact_analysis.csv :
Ajuster via corrections/capping_cubes_corrections.csv :
Relancer Option 2
- Solution structurelle (Étape 1) :
Modifier inputs/capping_type_client.csv :
Relancer Option 1
- Vérifier aussi le capping basiques :
Si beaucoup de produits "Basiques" avec hausses > 30%, réduire dans config/pt2qe_config.json :
13.7. Problème : "Trop d'offres avec VALIDATION_STATUS = 'A_VERIFIER'"¶
Symptôme :
Cause : Beaucoup de hausses > 20%.
Solution :
-
Analyser la distribution dans
price_increase_distribution.csv: -
Identifier les segments concernés dans
impact_analysis.csv -
Réduire les cappings pour ces segments (voir solution 13.6)
-
Relancer l'Étape 2 ou l'Étape 1 selon l'ampleur de la correction
13.8. Erreur : "MERGE query failed" lors de l'Étape 2¶
Symptôme :
Cause : Problème dans le fichier de corrections (format incorrect, valeurs manquantes, etc.).
Solution :
- Vérifier le format du fichier
corrections/capping_cubes_corrections.csv: - Séparateur :
; - Décimale :
, - Encodage : CP1252
-
Pas de ligne vide
-
Vérifier que toutes les colonnes obligatoires sont présentes :
-
Vérifier les valeurs :
UNIVERS: doit être 'ZOOM1' (sans apostrophes dans le CSV)GEO: peut être NULL ou vide (mais colonne présente)-
Cappings : valeurs décimales entre 0 et 1
-
Supprimer les caractères spéciaux invisibles (ouvrir dans Notepad++)
-
Régénérer le fichier depuis
capping_cubes_generated.csvpour avoir une base saine -
Relancer l'Étape 2
13.9. Problème : "Les résultats de l'Étape 2 sont identiques à l'Étape 1"¶
Symptôme :
Après avoir modifié capping_cubes_corrections.csv et relancé l'Étape 2, les hausses n'ont pas changé.
Causes possibles : 1. Les modifications n'ont pas été enregistrées correctement 2. Les cubes modifiés ne correspondent pas aux offres problématiques 3. Les nouveaux cappings sont encore trop permissifs
Solution :
-
Vérifier que le fichier a bien été enregistré :
-
Vérifier la correspondance cube ↔ offre :
-
Vérifier que les nouveaux cappings sont plus restrictifs que les anciens
-
Comparer les fichiers avant/après :
-
Si le problème persiste, supprimer tous les fichiers temporaires et relancer un calcul complet (Étape 1)
13.10. Erreur : "Python module not found"¶
Symptôme :
Cause : Modules Python manquants.
Solution :
-
Vérifier l'installation de Python :
-
Installer les modules manquants :
-
Vérifier l'installation :
-
Si erreur persistante, vérifier que le PYTHONPATH est correctement configuré dans les scripts .bat :
-
Relancer le traitement
14. Bonnes pratiques¶
14.1. Documentation et traçabilité¶
Recommandation 1 : Conserver tous les dossiers d'output
Ne jamais supprimer les dossiers outputs/run_* et outputs/corrections_* :
- Permettent de tracer l'évolution des recommandations
- Facilitent les audits
- Permettent de comparer les résultats entre runs
Recommandation 2 : Noter les paramètres de chaque run
Créer un fichier run_log.xlsx avec :
- Date du run
- Dossier de sortie (ex: run_20250315_143022)
- Fichier capping utilisé (copie de capping_type_client.csv)
- Commentaires (raison du run, observations, décisions prises)
Recommandation 3 : Versionner les fichiers de configuration
Si vous modifiez pt2qe_config.json ou capping_type_client.csv :
- Conserver l'ancienne version avec suffixe _v1, _v2, etc.
- Noter la date de modification
- Documenter la raison du changement
14.2. Gestion des cappings¶
Recommandation 1 : Partir conservateur
Lors du premier calcul : - Utiliser des cappings plutôt restrictifs (ex: HIGH=2%, MEDIUM=4%, LOW=6%) - Observer les résultats - Augmenter progressivement si nécessaire
Recommandation 2 : Analyser l'impact avant de valider
Avant de générer les offres finales (Étape 3) :
- Vérifier la distribution des hausses dans price_increase_distribution.csv
- S'assurer que < 5% des offres sont > 15%
- Vérifier l'impact CA dans impact_analysis.csv
Recommandation 3 : Itérer sur l'Étape 2 plutôt que réexécuter l'Étape 1
Si seuls quelques cubes nécessitent des ajustements : - Utiliser l'Étape 2 (plus rapide) - Éviter de réexécuter l'Étape 1 sauf si changement structurel
14.3. Validation des résultats¶
Recommandation 1 : Contrôler les anomalies
Vérifier systématiquement dans validation_report.csv :
Si ANOMALIE > 0 : investiguer immédiatement (prix en baisse = bug potentiel).
Recommandation 2 : Valider les hausses > 20% manuellement
Ne jamais importer directement les offres A_VERIFIER dans SAP sans contrôle :
- Analyser le contexte (historique client, corridor)
- Vérifier si la hausse est justifiée
- Corriger si nécessaire
Recommandation 3 : Comparer avec les objectifs business
Avant de valider : - Calculer la hausse moyenne globale - La comparer avec l'objectif fixé (ex: +3%) - Vérifier que les segments stratégiques respectent les contraintes
14.4. Workflow recommandé pour un nouveau calcul¶
Étape 0 : Préparation (avant le run)
- Vérifier que PT1CE a été exécuté récemment
- Vérifier que le fichier
capping_type_client.csvest à jour - Vérifier les prérequis (Option 5)
- Noter la date et l'objectif du run dans le log
Étape 1 : Calcul initial
- Lancer Option 1
- Surveiller les logs pendant l'exécution
- Noter le timestamp du dossier de sortie
Étape 2 : Analyse des résultats
- Ouvrir
impact_analysis.csv - Ouvrir
price_increase_distribution.csv - Identifier les points d'attention (hausses trop fortes, segments déséquilibrés)
- Décider : valider OU ajuster
Étape 3a : Si validation directe
- Lancer Option 3
- Récupérer
final_price_offers.csv - Contrôler les offres
A_VERIFIER - Documenter la décision de validation
Étape 3b : Si ajustement nécessaire
- Préparer
corrections/capping_cubes_corrections.csv - Modifier les cappings des cubes problématiques
- Lancer Option 2
- Revenir à l'Étape 2 (analyse des nouveaux résultats)
Étape 4 : Finalisation
- Archiver les résultats validés
- Mettre à jour le
run_log.xlsx - Transmettre les offres finales aux équipes concernées
14.5. Maintenance et mise à jour¶
Recommandation 1 : Mettre à jour les mappings régulièrement
Les tables de mapping PT0CE doivent être mises à jour lorsque : - De nouveaux TYPE_CLIENT apparaissent - De nouveaux TYPE_RESTAURANT apparaissent - La segmentation change
Recommandation 2 : Vérifier la cohérence avec PT1CE
Avant chaque run PT2QE : - Vérifier que PT1CE a été exécuté récemment - Vérifier que les dates de calcul PT1CE et PT2QE ne sont pas trop éloignées - Si PT1CE a été relancé, relancer PT2QE (Étape 1 complète)
Recommandation 3 : Surveiller les performances
Si les temps d'exécution augmentent significativement : - Vérifier la volumétrie des tables sources (SYS_TARIF_SIMULATION, SYS_FACTURE_LIGNE) - Vérifier les index Oracle - Consulter l'équipe DBA si nécessaire
15. Annexes¶
15.1. Glossaire des termes¶
Termes métier : - PAS (Prix d'Achat Standard) : Prix plancher minimum, en dessous duquel le prix ne doit pas descendre. - PRB (Prix de Référence Brut) : Prix plafond maximum du corridor. - Palier : Tranche de prix dans le corridor (PL1 à PLX). - Corridor : Fourchette de prix entre PAS et PRB, divisée en paliers. - Sensibilité prix : Réaction attendue du client face à une variation de prix (HIGH/MEDIUM/LOW). - Capping : Limitation de la hausse de prix (ex: +5% maximum). - TYPE_CLIENT : Segment client (ex: RCI PI GI, RSI HM, RSC HM). - TYPE_RESTAURANT : Type de restaurant (ex: REST. TRADI, SOCIAL, LIVRAISON). - UNIVERS : Périmètre d'analyse (ZOOM1/ZOOM2/ZOOM3). PT2QE traite uniquement ZOOM1.
Termes techniques : - MASTER : Cube spécifique avec dimensions complètes (TYPE_CLIENT × TYPE_RESTAURANT × GEO). - NATIONAL : Cube générique sans dimension GEO, utilisé comme fallback. - NO_MATCH : Offre sans corridor correspondant (ni MASTER ni NATIONAL trouvé). - RECO1 : Recommandation 1 (repositionnement par paliers). - RECO2 : Recommandation 2 (hausse proportionnelle au PAS). - FG_HM : Flag Hors Mercuriale ('1' = hors mercuriale, '0' = mercuriale).
Termes processus : - 4Q : 4 derniers trimestres fiscaux complets. - Run : Exécution complète de l'Étape 1 (nouveau calcul). - Correction : Exécution de l'Étape 2 (ajustement sans réextraction). - Final : Export généré par l'Étape 3.
15.2. Structure complète des fichiers d'output¶
Dossier outputs/run_YYYYMMDD_HHMMSS/ (Étape 1) :
recommendations_detail.csv ← Export ligne à ligne complet (45 123 lignes)
statistics_by_dimension.csv ← Stats par TYPE_CLIENT/RESTAURANT/UNIVERS
impact_analysis.csv ← Impact CA par TYPE_CLIENT × UNIVERS
price_increase_distribution.csv ← Histogramme global des hausses
decision_path_analysis.csv ← Stats par chemin de décision
capping_distribution.csv ← Distribution des cappings appliqués
capping_cubes_generated.csv ← Cappings générés par cube (base pour corrections)
summary.txt ← Résumé textuel du run
Dossier outputs/corrections_YYYYMMDD_HHMMSS/ (Étape 2) :
recommendations_detail.csv ← Même structure, valeurs recalculées
statistics_by_dimension.csv ← Idem
impact_analysis.csv ← Idem
price_increase_distribution.csv ← Idem
decision_path_analysis.csv ← Idem
capping_distribution.csv ← Idem
summary.txt ← Résumé avec mention "Corrections appliquées"
Dossier outputs/final_YYYYMMDD_HHMMSS/ (Étape 3) :
final_price_offers.csv ← Export final pour utilisation opérationnelle
validation_report.csv ← Rapport de validation
export_summary.txt ← Résumé de l'export
15.3. Colonnes des fichiers CSV principaux¶
recommendations_detail.csv (91 colonnes) :
Identifiants (7) :
ID_CLN, LC_CLN, ID_ART, LC_ART, ID_CND, DT_DEB_CONDITION, DT_FIN_CONDITION
Catégories produit (8) :
CATEGORIE_N1, CATEGORIE_N2, CATEGORIE_N3, CATEGORIE_N4, CATEGORIE_N5, CATEGORIE_N6, MARQUE, LC_ATTRIBUT
Dimensions (5) :
TYPE_CLIENT, TYPE_RESTAURANT, GEO, UNIVERS, MATCH_TYPE
Métriques 4Q (9) :
MT_CAB_4Q, QT_UF_4Q, QT_KG_4Q, MT_CAB_4Q_FERMES, QT_UF_4Q_FERMES, QT_KG_4Q_FERMES,
MT_CAB_4Q_INDEXES, QT_UF_4Q_INDEXES, QT_KG_4Q_INDEXES
Prix et positions (17) :
PRIX_TARIF_ACTUEL, PRIX_UNITAIRE_ACTUEL,
PAS_ACTIF, PRB_ACTIF, BORNE_PL1_PL2, BORNE_PL2_PL3, BORNE_PL3_PL4, BORNE_PL4_PL5, BORNE_PL5_PL6, BORNE_PL6_PLX,
NEW_PAS, NEW_PRB, NEW_BORNE_PL1_PL2, NEW_BORNE_PL2_PL3, NEW_BORNE_PL3_PL4, NEW_BORNE_PL4_PL5, NEW_BORNE_PL5_PL6, NEW_BORNE_PL6_PLX,
POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES, PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES, POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES
Cascade de calcul (4) :
RECO1_BASE, RECO1_APRES_CAPPING_SENSIBILITE, RECO1_AVEC_CAPPING, RECO2
Décision finale (7) :
DECISION_PATH, RECO_TYPE, RECO_SELECTIONNEE, CAPPING_APPLIED, PRIX_RECOMMANDE, PCT_HAUSSE_FINALE, POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES
Contexte (2) :
PRICE_SENSITIVITY, ECART_TYPE
final_price_offers.csv (22 colonnes) :
ID_CLN, LC_CLN, ID_ART, LC_ART, TYPE_CLIENT, TYPE_RESTAURANT, GEO, UNIVERS,
ID_CND, DT_DEB_CONDITION, DT_FIN_CONDITION,
PRIX_TARIF_ACTUEL, NOUVEAU_PRIX, PCT_HAUSSE, HAUSSE_EUROS,
POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES, PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES, POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES,
PRICE_SENSITIVITY, TYPE_HAUSSE, VALIDATION_STATUS, DATE_CALCUL
15.4. Formules de calcul clés¶
Calcul RECO1_BASE (selon config) :
SI PRIX_ACTUEL dans PL6_PLX ALORS NEW_BORNE_PL6_PLX
SI PRIX_ACTUEL dans PL5_PL6 ALORS NEW_BORNE_PL5_PL6
SI PRIX_ACTUEL dans PL3_PL4 ALORS NEW_BORNE_PL2_PL3
SI PRIX_ACTUEL dans PL2_PL3 ALORS NEW_BORNE_PL1_PL2
SI PRIX_ACTUEL dans PL1_PL2 ALORS NEW_BORNE_PL1_PL2
SI PRIX_ACTUEL < PAS ALORS NEW_PAS
Calcul RECO1_APRES_CAPPING_SENSIBILITE :
RECO1_APRES_CAPPING_SENSIBILITE = MIN(
RECO1_BASE,
PRIX_ACTUEL × (1 + CAPPING_SELON_SENSIBILITE)
)
où CAPPING_SELON_SENSIBILITE =
SI PRICE_SENSITIVITY = 'HIGH' ALORS CAPPING_HIGH
SI PRICE_SENSITIVITY = 'MEDIUM' ALORS CAPPING_MEDIUM
SI PRICE_SENSITIVITY = 'LOW' ALORS CAPPING_LOW
Calcul RECO1_AVEC_CAPPING (cascade) :
SI LC_ATTRIBUT = 'Basiques' ALORS
RECO1_AVEC_CAPPING = MIN(
RECO1_APRES_CAPPING_SENSIBILITE,
PRIX_ACTUEL × 1,50
)
SINON
RECO1_AVEC_CAPPING = RECO1_APRES_CAPPING_SENSIBILITE
Calcul RECO2 :
Calcul PRIX_RECOMMANDE (selon DECISION_PATH) :
SI DECISION_PATH = 'PAS_BAISSE_GEL_PRIX' ALORS
PRIX_RECOMMANDE = PRIX_ACTUEL (gel total)
SI DECISION_PATH = 'PL1_CONSERVATION_PREMIUM' ALORS
PRIX_RECOMMANDE = MIN(
MAX(PRIX_ACTUEL, NEW_BORNE_PL2_PL3),
NEW_PRB
)
SI DECISION_PATH = 'OPTIMISATION_STANDARD' ALORS
PRIX_RECOMMANDE = MIN(
MAX(RECO1_AVEC_CAPPING, RECO2),
NEW_PRB
)
Calcul PCT_HAUSSE_FINALE :
15.5. Contacts et support¶
Support technique : - Pour les problèmes d'exécution : Équipe Pricing - Pour les problèmes Oracle : Équipe DBA - Pour les problèmes de données : Équipe Data Quality
Documentation complémentaire : - PT1CE : Voir guide d'utilisation PT1CE - PT0CE : Voir guide d'utilisation PT0CE (mappings) - Calendrier fiscal : Voir documentation SYS_MD_CALENDRIER_SYSCO
Historique des versions : - v1.0.0 (Mars 2025) : Version initiale avec arbre de décision à 3 chemins et capping basiques
FIN DU GUIDE D'UTILISATION PT2QE