Workflow détaillé - PT2QE¶
Vue d'ensemble du workflow¶
PT2QE (Pricing Tier 2 Quote Engine) calcule des recommandations de prix personnalisées à la maille client × article en utilisant les corridors PT1CE comme référence. Le workflow est organisé en 3 étapes principales :
- Calcul des recommandations : Extraction des offres actuelles, enrichissement avec l'historique transactionnel, calcul de 2 types de recommandations (RECO1 et RECO2), application d'un arbre de décision à 3 chemins avec cascade de cappings
- Ajustement des cappings (optionnel) : Modification des paramètres de capping et recalcul des recommandations
- Génération des offres finales : Export final au format CSV pour utilisation opérationnelle
Caractéristiques clés du workflow : - Itératif : Possibilité d'ajuster les cappings et de recalculer - Traçable : Chaque exécution crée un dossier horodaté avec tous les résultats - Modulaire : Les étapes peuvent être relancées indépendamment - Conservateur : Les tables Oracle sont réutilisées entre les étapes
Périmètre de traitement : - Univers : ZOOM1 exclusivement - Scope temporel : 4 derniers trimestres fiscaux complets - Types de conditions : ZFAP, ZFSP, ZIAP, ZISP - Séquences : A305, A565
Prérequis obligatoires¶
Prérequis système¶
Base de données Oracle : - Connexion active à la base TARIFAIRE (ou autre base configurée) - Privilèges SELECT sur les tables SYS_ et PT0CE_ - Privilèges CREATE TABLE, DROP TABLE, INSERT, UPDATE, DELETE
Environnement Python :
- Python 3.8 ou supérieur
- Variable d'environnement PYTHONPATH incluant P:\PRD\Python\00_Commun\libs
- Modules requis installés (voir requirements.txt)
Modules Python requis :
Prérequis métier¶
Exécution préalable de PT1CE (OBLIGATOIRE) :
PT2QE utilise les corridors optimaux calculés par PT1CE. Avant de lancer PT2QE, il est impératif que PT1CE ait été exécuté complètement :
- PT1CE Option 1 : Application des nouveaux PAS/PRB
- PT1CE Option 2 : Finalisation des corridors (création des tables PT1CE_OPTIMAL_*)
Tables PT1CE requises :
- PT1CE_OPTIMAL_ZOOM1 : Corridors optimaux pour ZOOM1 (utilisée par PT2QE)
- PT1CE_OPTIMAL_ZOOM2 : Corridors optimaux pour ZOOM2 (non utilisée par PT2QE actuellement)
- PT1CE_OPTIMAL_ZOOM3 : Corridors optimaux pour ZOOM3 (non utilisée par PT2QE actuellement)
Sans ces tables, PT2QE ne peut pas fonctionner.
Tables de mapping PT0CE requises :
- PT0CE_TYPE_CLIENT_MAPPING : Mapping ID_TC_CG × ID_TC_CIBLE × FG_HM → TYPE_CLIENT
- PT0CE_TYPE_RESTAURANT_MAPPING : Mapping LC_SFC_CIBLE → TYPE_RESTAURANT
Fichiers d'entrée¶
Fichier de capping obligatoire (Étape 1) :
Fichier : inputs/capping_type_client.csv
Format :
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
Colonnes :
- TYPE_CLIENT : Identifiant du type de client (doit correspondre aux valeurs dans PT0CE_TYPE_CLIENT_MAPPING)
- CAPPING_HIGH : Capping pour produits à sensibilité HIGH (décimal avec virgule, ex: 0,025 = 2,5%)
- CAPPING_MEDIUM : Capping pour produits à sensibilité MEDIUM (décimal avec virgule, ex: 0,05 = 5%)
- CAPPING_LOW : Capping pour produits à sensibilité LOW (décimal avec virgule, ex: 0,075 = 7,5%)
Fichier de corrections de capping (Étape 2, optionnel) :
Fichier : corrections/capping_cubes_corrections.csv
Ce fichier est créé en copiant et modifiant le fichier capping_cubes_generated.csv généré à l'étape 1.
Format :
UNIVERS;TYPE_CLIENT;TYPE_RESTAURANT;GEO;CAPPING_HIGH;CAPPING_MEDIUM;CAPPING_LOW
ZOOM1;RCI PI GI;REST. TRADI;IDF;0,03;0,12;0,18
ZOOM1;RSI HM;SOCIAL;NO;0,02;0,08;0,12
Colonnes :
- UNIVERS : Toujours "ZOOM1" pour PT2QE
- TYPE_CLIENT : Type de client
- TYPE_RESTAURANT : Type de restaurant
- GEO : Zone géographique (peut être NULL)
- CAPPING_HIGH, CAPPING_MEDIUM, CAPPING_LOW : Nouveaux cappings à appliquer
Fichier de configuration (optionnel)¶
Fichier : config/pt2qe_config.json
Ce fichier permet de personnaliser les règles de repositionnement RECO1, les cappings par défaut, et les paramètres de sortie.
Sections principales :
- processing : Taille des batchs, degré de parallélisation
- capping : Cappings par défaut, capping basiques (50%)
- recommendations.reco1_rules : Règles de repositionnement par paliers pour RECO1
- output : Format des exports CSV
Modification des règles RECO1 :
Pour changer le comportement de RECO1 (repositionnement par paliers), éditer la section recommendations.reco1_rules dans pt2qe_config.json.
Exemple de règle :
{
"position": "PL2_PL3",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL3_PL4",
"action": "TO_PL1",
"target": "NEW_BORNE_PL1_PL2",
"comment": "Remonter vers PL1"
}
Champs :
- position : Nom de la position actuelle
- condition : Condition SQL pour détecter cette position
- action : Nom de l'action (description)
- target : Colonne SQL cible (nouveau prix)
- comment : Description de la règle
Règles par défaut : - ABOVE_PL1 → Pas de changement - PL1_PL2 → Remonter vers PL1 - PL2_PL3 → Remonter vers PL1 - PL3_PL4 → Remonter vers PL2 - PL4_PL5 → Remonter vers PL3 - PL5_PL6 → Remonter vers PL5 - PL6_PLX → Remonter vers PL6 - BELOW_PAS → Remonter au PAS
Phase 0 : Préparation et vérification¶
Lancement du menu principal¶
Étape 1 : Démarrer l'application
Exécuter le fichier START.bat à la racine du projet :
Ce fichier :
1. Configure l'environnement Python (variable PYTHONPATH)
2. Affiche le logo PT2QE
3. Lance le menu principal PT2QE_Menu.bat
Étape 2 : Menu principal
Le menu principal propose 6 options :
========================================================================
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
Vérification des prérequis (Option 5)¶
Avant de lancer le traitement, il est recommandé de vérifier les prérequis.
Étape 1 : Sélectionner l'option 5
Étape 2 : Analyse des résultats
Le script vérifie :
[1/10] Vérification Python - Vérifie que Python est installé et accessible - Affiche la version de Python
[2/10] Vérification des modules Python requis - pandas : Manipulation de données - oracledb : Connexion Oracle - openpyxl : Export Excel
[3/10] Vérification du fichier de capping principal
- Vérifie l'existence de inputs/capping_type_client.csv
- Affiche le nombre de lignes
[4/10] Vérification du dossier corrections
- Vérifie l'existence du dossier corrections/
- Vérifie la présence de capping_cubes_corrections.csv (optionnel)
[5/10] Vérification de la connexion Oracle - Teste la connexion à la base TARIFAIRE - Exécute une requête simple (SELECT 1 FROM DUAL)
[6/10] Vérification des tables PT1CE (PREREQUIS OBLIGATOIRE) - Compte les tables PT1CE_OPTIMAL_ - CRITIQUE : Si aucune table trouvée, PT2QE ne peut pas fonctionner - Solution si tables manquantes* : 1. Lancer PT1CE (START.bat dans le dossier PT1CE) 2. Exécuter PT1CE Option 1 (Application nouveaux PAS/PRB) 3. Exécuter PT1CE Option 2 (Finalisation corridors) 4. Revenir à PT2QE et relancer la vérification
[7/10] Vérification des tables PT2QE - Compte les tables PT2QE_* (résultats d'exécutions précédentes) - Information uniquement, pas bloquant
[8/10] Vérification des tables de mapping - Vérifie PT0CE_TYPE_CLIENT_MAPPING (nombre de lignes) - Vérifie PT0CE_TYPE_RESTAURANT_MAPPING (nombre de lignes) - Si vide ou manquant, le matching sera incomplet
[9/10] Historique des exécutions
- Compte les dossiers outputs/run_* (exécutions normales)
- Compte les dossiers outputs/corrections_* (ajustements de capping)
- Compte les dossiers outputs/final_* (exports finaux)
[10/10] Vérification de la configuration
- Vérifie la présence de config/pt2qe_config.json
- Si absent, les valeurs par défaut seront utilisées
Résumé final :
RESUME:
- [1-2] Python et modules : Verifies
- [3] Fichier capping : A verifier ci-dessus
- [6] Tables PT1CE : CRITIQUE - Doit etre OK
- [7] Tables PT2QE : Info sur l'existant
- [8] Tables mapping : Necessaires pour enrichissement
- [5] Connexion Oracle : Doit etre OK
Étape 3 : Corriger les problèmes éventuels
Si des erreurs sont signalées :
- Tables PT1CE manquantes : Exécuter PT1CE complètement
- Fichier capping manquant : Créer inputs/capping_type_client.csv
- Connexion Oracle échouée : Vérifier les credentials et le réseau
- Tables de mapping vides : Vérifier avec l'équipe data PT0CE
Phase 1 : Extraction et enrichissement des offres¶
Lancement du calcul des recommandations (Option 1)¶
Étape 1 : Sélectionner l'option 1
Étape 2 : Confirmer le lancement
L'écran affiche :
========================================================================
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):
Taper O puis Entrée.
Détermination automatique de la période d'analyse¶
Processus automatique :
Le module PeriodManager interroge la table SYS_MD_CALENDRIER_SYSCO pour déterminer automatiquement les 4 derniers trimestres fiscaux complets.
Critères de sélection : - Date de référence : Date du jour (date d'exécution) - Trimestre complet : Un trimestre est considéré complet si sa dernière semaine est passée (END_DATE < date du jour) - Nombre de trimestres : 4 trimestres consécutifs
Affichage dans les logs :
Initialisation du gestionnaire de périodes...
Période d'analyse: 2024-02-05 → 2024-11-02
Trimestres fiscaux: 2024_Q01, 2024_Q02, 2024_Q03, 2024_Q04
Détail du calendrier fiscal Sysco : - Format 4-4-5 (4 semaines, 4 semaines, 5 semaines par trimestre) - Trimestres identifiés par ID_EXF (exercice fiscal) et NO_TRF (numéro de trimestre) - Chaque trimestre contient 13 semaines
Exemple concret :
Si l'exécution a lieu le 03/11/2025 : - Trimestre en cours : 2025_Q04 (non complet) - 4 derniers trimestres complets : 2024_Q04, 2025_Q01, 2025_Q02, 2025_Q03 - Période d'extraction : Du 1er jour de 2024_Q04 au dernier jour de 2025_Q03
Modification de la période (avancé) :
Pour utiliser une période différente, il faut modifier le code source dans pt2qe_main.py :
Extraction des offres de prix actuelles¶
Phase 1.1 : Extraction depuis SYS_TARIF_SIMULATION
Table source : SYS_TARIF_SIMULATION
Filtres appliqués :
Conditions (table SYS_MD_CONDITION) :
- ID_ACC IS NULL : Pas d'accord spécifique
- FG_CND_VLD = 'X' : Condition valide
- DT_FIN > SYSDATE : Condition encore en cours
- ID_TYP_CND IN ('ZFAP', 'ZFSP', 'ZIAP', 'ZISP') : Types de conditions tarifaires
- ID_SEQ IN ('A305', 'A565') : Séquences spécifiques
Clients (table SYS_MD_CLIENT) :
- ID_TC_CG <> 'AUTRES' : Exclut type client "AUTRES"
- ID_STA_CLN IN ('10', '20', '30', '50') ET LC_SEQ_CLN = 'CLIENT' : Clients actifs
- OU ID_AGC <> 'A000' ET LC_SEQ_CLN IN ('HIERARCHIE CLIENT N4', 'N5', 'N6') : Hiérarchies
Articles (table SYS_MD_ARTICLE) :
- ID_GMM <> 'PSN' : Exclut gamme PSN
- LC_HI1 <> 'Qualificatif article inconnu' : Articles qualifiés
- LC_HIC_SYSCO_N2 NOT IN ('Divers', 'Freezer') : Exclut catégories non pertinentes
Colonnes extraites : - Identifiants : ID_CLN, LC_CLN, ID_ART, LC_ART, ID_CND - Dates condition : DT_DEB_CONDITION, DT_FIN_CONDITION - Dimensions client : ID_TC_CG, ID_TC_CIBLE, LC_SFC_CIBLE, GEO (LC_ZDV_GRV), ID_KAM - Hiérarchie article : LC_HIC_SYSCO_N1 à N6, LC_MRQ, LC_ATTRIBUT - Prix : PX_OFF_ACTUEL (prix tarif actuel) - Métadonnées : ID_TYP_CND, LC_SEQ_CLN
Table créée : PT2QE_PRICE_OFFERS (temporaire)
Enrichissement avec l'historique transactionnel 4Q¶
Phase 1.2 : Récupération du FG_HM historique
Table source : SYS_FACTURE_LIGNE
Objectif : Déterminer pour chaque couple (client, article) s'il est "hors mercuriale" (FG_HM = '1') ou "mercuriale" (FG_HM = '0').
Logique : - Pour chaque (ID_CLN, ID_ART), chercher la dernière facture dans la période 4Q - Extraire le FG_HM de cette facture - Si FG_HM = 'X' dans la facture, stocker '1', sinon '0'
Filtres appliqués sur SYS_FACTURE_LIGNE :
- DT_CDE BETWEEN start_date AND end_date : Période 4Q
- ID_TC_CG <> 'AUTRES'
- ID_GMM <> 'PSN'
- LC_HIC_SYSCO_N2 NOT IN ('Divers', 'Freezer')
- FG_PRESTA = '0' : Pas de prestation
- FG_MARCHANDISE IN ('X', '1') : Marchandise uniquement
- MT_GM4 IS NOT NULL
- MT_CAB > 0
- QT_UF > 0
- ID_PRP NOT IN (Prix promo) : Exclut les prix promotionnels
Logique ROW_NUMBER :
Conserve uniquement la ligne avec RN = 1 (dernière facture).Colonnes générées :
- LAST_FG_HM : '1' ou '0'
- ID_MERC_HM : Identifiant mercuriale
Phase 1.3 : Calcul des métriques de performance 4Q
Métriques calculées :
Total global (hors prix promo) :
- MT_CAB_4Q : Chiffre d'affaires total sur 4Q
- QT_UF_4Q : Volume en unités facturées
- QT_KG_4Q : Volume en kilogrammes
Prix fermes uniquement (LC_PRP_N1 = 'Prix fermes') :
- MT_CAB_4Q_FERMES
- QT_UF_4Q_FERMES
- QT_KG_4Q_FERMES
Prix indexés uniquement (LC_PRP_N1 = 'Prix indexés') :
- MT_CAB_4Q_INDEXES
- QT_UF_4Q_INDEXES
- QT_KG_4Q_INDEXES
Filtres appliqués : - Mêmes filtres que pour FG_HM - Agrégation par (ID_CLN, ID_ART) - Période : 4 derniers trimestres fiscaux complets
Dernière QT_UF connue :
- LAST_QT_UF : Dernière quantité facturée (pour calcul prix unitaire)
Phase 1.4 : Calcul de l'UNIVERS selon BusinessRules
Logique de détermination de l'UNIVERS :
Le calcul de l'UNIVERS combine :
- ID_TC_CG (type client CG)
- ID_TC_CIBLE (type client cible)
- FG_HM (hors mercuriale : '1' ou '0')
- ID_KAM (présence ou non d'un KAM)
- ID_MERC_HM (identifiant mercuriale)
Règles de calcul :
ZOOM1 : - RCI PI avec ou sans KAM - RCI GI SANS KAM - FG_HM = '1' (hors mercuriale) HORS RSC - RSC avec ID_MERC_HM = 'HM'
ZOOM2 : - RCI GI AVEC KAM - FG_HM = '0' (mercuriale) pour certains types - RCI GC_REG avec FG_HM = '1'
ZOOM3 : - RSC avec ID_MERC_HM <> 'HM' - RCC
Filtre PT2QE :
PT2QE traite exclusivement l'UNIVERS ZOOM1.
Enrichissement avec les dimensions¶
Phase 1.5 : Jointure avec les tables de mapping
Mapping TYPE_CLIENT :
Table source : PT0CE_TYPE_CLIENT_MAPPING
Colonnes de jointure :
- UNIVERS = UNIVERS calculé
- ID_TC_CG = ID_TC_CG de l'offre
- ID_TC_CIBLE = ID_TC_CIBLE de l'offre
- FG_HM = FG_HM de l'offre
Colonne récupérée :
- TYPE_CLIENT : Ex: "RCI PI GI", "RSI HM", "RSC HM", etc.
Valeur par défaut si pas de match :
- 'Hors référentiel'
Mapping TYPE_RESTAURANT :
Table source : PT0CE_TYPE_RESTAURANT_MAPPING
Colonne de jointure :
- LC_SFC_CIBLE = LC_SFC_CIBLE de l'offre
Colonne récupérée :
- TYPE_RESTAURANT : Ex: "REST. TRADI", "SOCIAL", "RESTAURATION RAPIDE", etc.
Valeur par défaut si pas de match :
- 'Hors référentiel'
GEO (déjà présent) :
- Récupéré depuis LC_ZDV_GRV dans SYS_MD_CLIENT
- Ex: "IDF", "NO", "SO", etc.
Table finale créée : PT2QE_PRICE_OFFERS
Colonnes finales : - Identifiants : ID_CLN, LC_CLN, ID_ART, LC_ART, ID_CND - Dates : DT_DEB_CONDITION, DT_FIN_CONDITION - Dimensions : TYPE_CLIENT, TYPE_RESTAURANT, GEO, UNIVERS - Hiérarchie article : HIE_N1 à HIE_N6, HIE_MRQ, LC_ATTRIBUT - Prix : PRIX_TARIF_ACTUEL - Historique 4Q : MT_CAB_4Q, QT_UF_4Q, QT_KG_4Q, MT_CAB_4Q_FERMES, etc. - Métadonnées : FG_HM, ID_MERC_HM, EXTRACTION_DATE
Logs affichés :
Extraction des offres avec historique de performance
✓ XXX,XXX offres de prix extraites (ZOOM1 uniquement)
Statistiques d'enrichissement:
- Total offres: XXX,XXX
- Clients uniques: X,XXX
- Articles uniques: XX,XXX
- Avec TYPE_CLIENT: XXX,XXX (XX.X%)
- Avec TYPE_RESTAURANT: XXX,XXX (XX.X%)
- Avec FG_HM: XXX,XXX (XX.X%)
Phase 2 : Calcul des recommandations¶
Matching avec les corridors PT1CE¶
Phase 2.1 : Stratégie de matching en cascade
Objectif : Associer chaque offre client × article avec un corridor PT1CE.
Stratégie : 1. Tentative MASTER : Match sur 4 dimensions (ID_ART, TYPE_CLIENT, TYPE_RESTAURANT, GEO) 2. Fallback NATIONAL : Si pas de match MASTER, utiliser le corridor NATIONAL (ID_ART uniquement)
Phase 2.1.1 : Tentative MASTER
Table source : PT1CE_OPTIMAL_ZOOM1
Colonnes de jointure :
- ID_ART = ID_ART de l'offre
- TYPE_CLIENT = TYPE_CLIENT de l'offre
- TYPE_RESTAURANT = TYPE_RESTAURANT de l'offre
- GEO = GEO de l'offre (avec NVL pour gérer les NULL)
- CUBE_TYPE = 'MASTER'
- STATUS = 'OPTIMAL'
Colonnes récupérées depuis PT1CE :
Prix et bornes actuels (PT0CE) :
- PAS_ACTIF : Prix d'achat standard actuel
- PRB_RC_ACTIF : Prix de référence brut RCI actuel
- PRB_COLL_ACTIF : Prix de référence brut COLL actuel
- PRB_TO_USE : Indicateur PRB à utiliser (1 = RC, sinon COLL)
- PRB_ACTIF : PRB actuel calculé selon PRB_TO_USE
- BORNE_PL1_PL2 à BORNE_PL6_PLX : Bornes des paliers actuels
Nouveaux prix et bornes (PT1CE) :
- NEW_PAS : Nouveau prix d'achat standard
- NEW_PRB_RC : Nouveau PRB RCI
- NEW_PRB_COLL : Nouveau PRB COLL
- NEW_PRB : Nouveau PRB calculé selon PRB_TO_USE
- NEW_BORNE_PL1_PL2 à NEW_BORNE_PL6_PLX : Nouvelles bornes des paliers
Métadonnées :
- PRICE_SENSITIVITY : Sensibilité prix (HIGH, MEDIUM, LOW)
- ECART_TYPE : Écart-type des prix
- CUBE_TYPE : 'MASTER'
- STATUS : 'OPTIMAL'
Colonnes ajoutées :
- PCT_HAUSSE_PAS : (NEW_PAS - PAS_ACTIF) / PAS_ACTIF (pourcentage de hausse du PAS)
- HAS_CORRIDOR : 1
- MATCH_TYPE : 'MASTER'
- SOURCE_ZOOM : 'ZOOM1'
Phase 2.1.2 : Fallback NATIONAL
Pour les offres non matchées en MASTER :
Colonnes de jointure :
- ID_ART = ID_ART de l'offre
- TYPE_CLIENT = 'NATIONAL'
- TYPE_RESTAURANT = 'NATIONAL'
- GEO = 'NATIONAL' ou NULL
- CUBE_TYPE = 'NATIONAL'
- STATUS = 'OPTIMAL'
Colonnes récupérées : Identiques à MASTER
Colonnes ajoutées :
- MATCH_TYPE : 'NATIONAL'
Phase 2.1.3 : Offres sans corridor
Pour les offres qui n'ont matché ni en MASTER ni en NATIONAL :
Colonnes ajoutées :
- Toutes les colonnes corridor sont NULL
- HAS_CORRIDOR : 0
- MATCH_TYPE : 'NO_MATCH'
Ces offres seront exclues du calcul des recommandations.
Table créée : PT2QE_PRICE_OFFERS_ENRICHED
Logs affichés :
Jointure offres × corridors
→ Résultats du matching :
- MASTER : XXX,XXX offres, X,XXX clients, XX,XXX articles
- NATIONAL : XX,XXX offres, XXX clients, X,XXX articles
- NO_MATCH : X,XXX offres, XXX clients, XXX articles
→ Total : XXX,XXX/XXX,XXX offres avec corridor (XX.X%)
Calcul des 2 recommandations¶
Phase 2.2 : Calcul RECO1 (repositionnement par paliers)
Logique RECO1 :
RECO1 consiste à repositionner le prix actuel vers un palier supérieur du corridor en fonction de sa position actuelle.
Règles de repositionnement (configurables dans pt2qe_config.json) :
| Position actuelle | Action | Cible |
|---|---|---|
| ABOVE_PL1 (prix > PL1_PL2) | Pas de changement | Prix actuel |
| PL1_PL2 | Remonter vers PL1 | NEW_BORNE_PL1_PL2 |
| PL2_PL3 | Remonter vers PL1 | NEW_BORNE_PL1_PL2 |
| PL3_PL4 | Remonter vers PL2 | NEW_BORNE_PL2_PL3 |
| PL4_PL5 | Remonter vers PL3 | NEW_BORNE_PL3_PL4 |
| PL5_PL6 | Remonter vers PL5 | NEW_BORNE_PL5_PL6 |
| PL6_PLX | Remonter vers PL6 | NEW_BORNE_PL6_PLX |
| BELOW_PAS (prix < PAS) | Remonter au PAS | NEW_PAS |
Calcul de RECO1_BASE :
Le code SQL généré dynamiquement depuis pt2qe_config.json produit une cascade de CASE WHEN :
CASE
WHEN PRIX_TARIF_ACTUEL > NEW_BORNE_PL1_PL2 THEN PRIX_TARIF_ACTUEL -- Prix déjà en PL1
WHEN PRIX_TARIF_ACTUEL > NEW_BORNE_PL2_PL3 THEN NEW_BORNE_PL1_PL2 -- Remonter vers PL1
WHEN PRIX_TARIF_ACTUEL > NEW_BORNE_PL3_PL4 THEN NEW_BORNE_PL1_PL2 -- Remonter vers PL1
WHEN PRIX_TARIF_ACTUEL > NEW_BORNE_PL4_PL5 THEN NEW_BORNE_PL2_PL3 -- Remonter vers PL2
WHEN PRIX_TARIF_ACTUEL > NEW_BORNE_PL5_PL6 THEN NEW_BORNE_PL3_PL4 -- Remonter vers PL3
WHEN PRIX_TARIF_ACTUEL > NEW_BORNE_PL6_PLX THEN NEW_BORNE_PL5_PL6 -- Remonter vers PL5
WHEN PRIX_TARIF_ACTUEL >= NEW_PAS THEN NEW_BORNE_PL6_PLX -- Remonter vers PL6
ELSE NEW_PAS -- Remonter au PAS
END as RECO1_BASE
Colonne générée : RECO1_BASE
Phase 2.3 : Calcul RECO2 (hausse proportionnelle au PAS)
Logique RECO2 :
RECO2 applique au prix actuel le même pourcentage de hausse que le PAS.
Formule :
RECO2 = PRIX_TARIF_ACTUEL × (1 + PCT_HAUSSE_PAS)
Où PCT_HAUSSE_PAS = (NEW_PAS - PAS_ACTIF) / PAS_ACTIF
Exemple : - PAS actuel : 10€ - Nouveau PAS : 11€ - PCT_HAUSSE_PAS : +10% - Prix actuel : 15€ - RECO2 : 15€ × 1,10 = 16,50€
Colonne générée : RECO2
Application de la cascade de cappings¶
Phase 2.4 : Cascade de cappings sur RECO1
RECO1 subit une cascade de cappings en 2 étapes : 1. Capping sensibilité prix (HIGH/MEDIUM/LOW) 2. Capping basiques (50% maximum)
Phase 2.4.1 : Capping sensibilité prix
Logique :
Selon la sensibilité prix du produit (HIGH, MEDIUM, LOW), on applique un capping différent sur RECO1_BASE.
Cappings par sensibilité (configurables dans inputs/capping_type_client.csv) : - HIGH : Capping faible (ex: 2,5%) - MEDIUM : Capping moyen (ex: 5%) - LOW : Capping élevé (ex: 7,5%)
Formule :
Prix max avec capping = PRIX_TARIF_ACTUEL × (1 + taux_capping)
RECO1_APRES_CAPPING_SENSIBILITE = MIN(RECO1_BASE, Prix max avec capping)
Exemple : - Prix actuel : 15€ - RECO1_BASE : 18€ - Sensibilité : MEDIUM - Capping MEDIUM : 5% - Prix max : 15€ × 1,05 = 15,75€ - RECO1_APRES_CAPPING_SENSIBILITE : MIN(18€, 15,75€) = 15,75€
Code SQL :
CASE
WHEN PRICE_SENSITIVITY = 'HIGH' AND CAPPING_HIGH IS NOT NULL THEN
LEAST(RECO1_BASE, PRIX_TARIF_ACTUEL * (1 + CAPPING_HIGH))
WHEN PRICE_SENSITIVITY = 'MEDIUM' AND CAPPING_MEDIUM IS NOT NULL THEN
LEAST(RECO1_BASE, PRIX_TARIF_ACTUEL * (1 + CAPPING_MEDIUM))
WHEN PRICE_SENSITIVITY = 'LOW' AND CAPPING_LOW IS NOT NULL THEN
LEAST(RECO1_BASE, PRIX_TARIF_ACTUEL * (1 + CAPPING_LOW))
ELSE RECO1_BASE
END as RECO1_APRES_CAPPING_SENSIBILITE
Colonne générée : RECO1_APRES_CAPPING_SENSIBILITE
Phase 2.4.2 : Capping basiques (50%)
Logique :
Pour les produits identifiés comme "Basiques" (LC_ATTRIBUT = 'Basiques'), on applique un capping additionnel de 50% maximum de hausse.
Ce capping vient après le capping sensibilité et peut l'écraser s'il est plus restrictif.
Formule :
Prix max basiques = PRIX_TARIF_ACTUEL × 1,50
RECO1_AVEC_CAPPING = MIN(RECO1_APRES_CAPPING_SENSIBILITE, Prix max basiques)
Exemple : - Prix actuel : 10€ - RECO1_APRES_CAPPING_SENSIBILITE : 12€ (hausse de 20%) - LC_ATTRIBUT : 'Basiques' - Prix max basiques : 10€ × 1,50 = 15€ - RECO1_AVEC_CAPPING : MIN(12€, 15€) = 12€ (le capping basiques n'a pas d'effet)
Exemple 2 : - Prix actuel : 10€ - RECO1_APRES_CAPPING_SENSIBILITE : 18€ (hausse de 80%) - LC_ATTRIBUT : 'Basiques' - Prix max basiques : 10€ × 1,50 = 15€ - RECO1_AVEC_CAPPING : MIN(18€, 15€) = 15€ (capping basiques actif)
Code SQL :
CASE
WHEN LC_ATTRIBUT = 'Basiques' THEN
LEAST(RECO1_APRES_CAPPING_SENSIBILITE, PRIX_TARIF_ACTUEL * 1.50)
ELSE RECO1_APRES_CAPPING_SENSIBILITE
END as RECO1_AVEC_CAPPING
Colonne générée : RECO1_AVEC_CAPPING
Arbre de décision à 3 chemins¶
Phase 2.5 : Sélection du chemin décisionnel
PT2QE utilise un arbre de décision à 3 chemins pour déterminer le prix recommandé final.
Les 3 chemins :
CHEMIN 1 : PAS_BAISSE_GEL_PRIX - Condition : NEW_PAS < PAS_ACTIF (le nouveau PAS a baissé) - Action : Gel total du prix (PRIX_RECOMMANDE = PRIX_TARIF_ACTUEL) - Rationale : Ne pas répercuter les baisses de coût d'achat aux clients - Hausse : 0%
CHEMIN 2 : PL1_CONSERVATION_PREMIUM - Condition : Prix actuel dans PL1 des anciennes bornes (PRB_ACTIF ≥ Prix > BORNE_PL1_PL2) - Action : Conservation du prix actuel + application d'un plancher de sécurité (NEW_BORNE_PL2_PL3) - Formule : PRIX_RECOMMANDE = MAX(PRIX_TARIF_ACTUEL, NEW_BORNE_PL2_PL3) - Rationale : Maintenir les clients premium en position haute, avec garde-fou contre compression du corridor - Hausse : Variable (0% si prix déjà au-dessus du plancher, sinon hausse pour atteindre le plancher)
CHEMIN 3 : OPTIMISATION_STANDARD - Condition : Tous les autres cas - Action : MAX(RECO1_avec_capping, RECO2) - Rationale : Optimisation classique avec double recommandation - Hausse : Variable (dépend de RECO1 et RECO2)
Phase 2.5.1 : Détection des conditions
Détection PAS en baisse :
Détection PL1 anciennes bornes :
CASE
WHEN PRIX_TARIF_ACTUEL <= PRB_ACTIF
AND PRIX_TARIF_ACTUEL > BORNE_PL1_PL2
THEN 1 ELSE 0
END as IS_PL1_ANCIENNES
Phase 2.5.2 : Détermination du chemin
Code SQL :
CASE
WHEN IS_PAS_BAISSE = 1 THEN 'PAS_BAISSE_GEL_PRIX'
WHEN IS_PL1_ANCIENNES = 1 THEN 'PL1_CONSERVATION_PREMIUM'
ELSE 'OPTIMISATION_STANDARD'
END as DECISION_PATH
Colonne générée : DECISION_PATH
Phase 2.5.3 : Calcul du prix avant capping PRB final
Code SQL :
CASE
-- CHEMIN 1 : Gel total
WHEN IS_PAS_BAISSE = 1
THEN PRIX_TARIF_ACTUEL
-- CHEMIN 2 : Conservation avec plancher PL2_PL3
WHEN IS_PL1_ANCIENNES = 1
THEN GREATEST(PRIX_TARIF_ACTUEL, NEW_BORNE_PL2_PL3)
-- CHEMIN 3 : MAX(RECO1 cappée, RECO2)
ELSE GREATEST(RECO1_AVEC_CAPPING, RECO2)
END as PRIX_AVANT_CAPPING_PRB
Colonne générée : PRIX_AVANT_CAPPING_PRB
Phase 2.5.4 : Détermination du type de recommandation
Code SQL :
CASE
WHEN IS_PAS_BAISSE = 1
THEN 'GEL_PRIX'
WHEN IS_PL1_ANCIENNES = 1
THEN 'CONSERVATION_PREMIUM'
WHEN RECO1_AVEC_CAPPING >= RECO2
THEN 'REPOSITIONNEMENT_PALIERS'
ELSE 'HAUSSE_PROPORTIONNELLE_PAS'
END as RECO_TYPE
Colonne générée : RECO_TYPE
Nom explicite de la recommandation sélectionnée :
CASE
WHEN IS_PAS_BAISSE = 1
THEN 'GEL_PRIX'
WHEN IS_PL1_ANCIENNES = 1
THEN 'CONSERVATION_PREMIUM'
WHEN RECO1_AVEC_CAPPING >= RECO2
THEN 'RECO1_REPOSITIONNEMENT_PALIERS'
ELSE 'RECO2_HAUSSE_PROPORTIONNELLE_PAS'
END as RECO_SELECTIONNEE
Colonne générée : RECO_SELECTIONNEE
Application du capping PRB final¶
Phase 2.6 : Capping PRB (tous chemins)
Logique :
Le capping PRB final s'applique à tous les chemins pour garantir que le prix recommandé ne dépasse jamais le PRB (Prix de Référence Brut).
Formule :
Code SQL :
Colonne générée : PRIX_RECOMMANDE
Détection du capping PRB appliqué :
Synthèse du capping appliqué¶
Phase 2.7 : Détermination du capping le plus contraignant
Ordre de priorité des cappings : 1. GEL_PAS : Gel total (CHEMIN 1) 2. PRB_FINAL : Plafond absolu PRB 3. PLANCHER_PL2_PL3 : Plancher de sécurité (CHEMIN 2) 4. BASIQUES_50PCT : Capping produits basiques à +50% 5. SENSIBILITE : Capping selon sensibilité prix 6. NONE : Aucun capping appliqué
Code SQL :
CASE
-- Priorité 1 : Gel total
WHEN DECISION_PATH = 'PAS_BAISSE_GEL_PRIX'
THEN 'GEL_PAS'
-- Priorité 2 : Capping PRB final
WHEN CAPPING_PRB_APPLIED = 1
THEN 'PRB_FINAL'
-- Priorité 3 : Plancher PL2_PL3
WHEN PLANCHER_PL2_APPLIED = 1
THEN 'PLANCHER_PL2_PL3'
-- Priorité 4 : Capping basiques
WHEN CAPPING_BASIQUES_APPLIED = 1
THEN 'BASIQUES_50PCT'
-- Priorité 5 : Capping sensibilité
WHEN CAPPING_SENSIBILITE_APPLIED = 1
THEN 'SENSIBILITE'
-- Aucun capping
ELSE 'NONE'
END as CAPPING_APPLIED
Colonne générée : CAPPING_APPLIED
Calcul des positions dans le corridor¶
Phase 2.8 : Calcul des 3 positions
PT2QE calcule et affiche 3 positions pour chaque offre, permettant de visualiser le déplacement du prix à travers le processus d'optimisation.
Position 1 : Prix actuel dans ANCIENNES bornes (PT0CE)
Utilité : Comprendre d'où on part (référence historique)
Code SQL :
CASE
WHEN PRIX_TARIF_ACTUEL > PRB_ACTIF THEN 'ABOVE_PRB'
WHEN PRIX_TARIF_ACTUEL >= BORNE_PL1_PL2 THEN 'PL1'
WHEN PRIX_TARIF_ACTUEL >= BORNE_PL2_PL3 THEN 'PL2'
WHEN PRIX_TARIF_ACTUEL >= BORNE_PL3_PL4 THEN 'PL3'
WHEN PRIX_TARIF_ACTUEL >= BORNE_PL4_PL5 THEN 'PL4'
WHEN PRIX_TARIF_ACTUEL >= BORNE_PL5_PL6 THEN 'PL5'
WHEN PRIX_TARIF_ACTUEL >= BORNE_PL6_PLX THEN 'PL6'
WHEN PRIX_TARIF_ACTUEL >= PAS_ACTIF THEN 'PLX'
ELSE 'BELOW_PAS'
END as POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES
Position 2 : Prix actuel dans NOUVELLES bornes (PT1CE)
Utilité : Voir l'impact du recalibrage PT1CE (le prix peut avoir changé de palier sans bouger)
Code SQL :
CASE
WHEN PRIX_TARIF_ACTUEL > NEW_PRB THEN 'ABOVE_PRB'
WHEN PRIX_TARIF_ACTUEL >= NEW_BORNE_PL1_PL2 THEN 'PL1'
WHEN PRIX_TARIF_ACTUEL >= NEW_BORNE_PL2_PL3 THEN 'PL2'
WHEN PRIX_TARIF_ACTUEL >= NEW_BORNE_PL3_PL4 THEN 'PL3'
WHEN PRIX_TARIF_ACTUEL >= NEW_BORNE_PL4_PL5 THEN 'PL4'
WHEN PRIX_TARIF_ACTUEL >= NEW_BORNE_PL5_PL6 THEN 'PL5'
WHEN PRIX_TARIF_ACTUEL >= NEW_BORNE_PL6_PLX THEN 'PL6'
WHEN PRIX_TARIF_ACTUEL >= NEW_PAS THEN 'PLX'
ELSE 'BELOW_PAS'
END as PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES
Position 3 : Prix recommandé dans NOUVELLES bornes (PT2QE)
Utilité : Voir où on arrive après optimisation PT2QE (objectif : monter vers paliers supérieurs)
Code SQL :
CASE
WHEN PRIX_RECOMMANDE > NEW_PRB THEN 'ABOVE_PRB'
WHEN PRIX_RECOMMANDE >= NEW_BORNE_PL1_PL2 THEN 'PL1'
WHEN PRIX_RECOMMANDE >= NEW_BORNE_PL2_PL3 THEN 'PL2'
WHEN PRIX_RECOMMANDE >= NEW_BORNE_PL3_PL4 THEN 'PL3'
WHEN PRIX_RECOMMANDE >= NEW_BORNE_PL4_PL5 THEN 'PL4'
WHEN PRIX_RECOMMANDE >= NEW_BORNE_PL5_PL6 THEN 'PL5'
WHEN PRIX_RECOMMANDE >= NEW_BORNE_PL6_PLX THEN 'PL6'
WHEN PRIX_RECOMMANDE >= NEW_PAS THEN 'PLX'
ELSE 'BELOW_PAS'
END as POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES
Valeurs possibles : ABOVE_PRB, PL1, PL2, PL3, PL4, PL5, PL6, PLX, BELOW_PAS
Calcul du pourcentage de hausse final¶
Phase 2.9 : Calcul PCT_HAUSSE_FINALE
Formule :
Code SQL :
CASE
WHEN PRIX_TARIF_ACTUEL > 0 THEN
(PRIX_RECOMMANDE - PRIX_TARIF_ACTUEL) / PRIX_TARIF_ACTUEL
ELSE 0
END as PCT_HAUSSE_FINALE
Colonne générée : PCT_HAUSSE_FINALE (valeur décimale, ex: 0.05 = 5%)
Table finale créée : PT2QE_RECOMMENDATIONS
Logs affichés :
Calcul des recommandations
Jointure offres × corridors
Génération des cappings par cube
→ XX,XXX cubes MASTER avec cappings
✓ XXX,XXX recommandations calculées
- X,XXX clients
- XX,XXX articles
- Hausse moyenne: X.X%
✓ Cappings exportés : capping_cubes_generated.csv
Génération des analyses et exports¶
Phase 2.10 : Exports CSV détaillés
PT2QE génère 6 fichiers CSV détaillés dans le dossier de sortie.
Fichier 1 : recommendations_detail.csv
Contenu : Export ligne à ligne de TOUTES les recommandations avec cascade complète visible
Colonnes principales : - Identifiants : ID_CLN, LC_CLN, ID_ART, LC_ART, ID_CND - Dates : DT_DEB_CONDITION, DT_FIN_CONDITION - Dimensions : TYPE_CLIENT, TYPE_RESTAURANT, GEO, UNIVERS, MATCH_TYPE - Hiérarchie produit : CATEGORIE_N1 à N6, MARQUE, LC_ATTRIBUT - Métriques 4Q : MT_CAB_4Q, QT_UF_4Q, QT_KG_4Q (total, fermes, indexés) - Prix actuel : PRIX_TARIF_ACTUEL, PRIX_UNITAIRE_ACTUEL - Anciennes bornes : PAS_ACTIF, PRB_ACTIF, BORNE_PL1_PL2 à BORNE_PL6_PLX - Nouvelles bornes : NEW_PAS, NEW_PRB, NEW_BORNE_PL1_PL2 à NEW_BORNE_PL6_PLX - Les 3 positions : POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES, PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES, POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES - Cascade RECO1 : RECO1_BASE, RECO1_APRES_CAPPING_SENSIBILITE, RECO1_AVEC_CAPPING - RECO2 : RECO2 - Décision : DECISION_PATH, RECO_TYPE, RECO_SELECTIONNEE, CAPPING_APPLIED - Résultat : PRIX_RECOMMANDE, PCT_HAUSSE_FINALE
Tri : PCT_HAUSSE_FINALE DESC (hausses les plus fortes en haut)
Format : Séparateur ;, décimal ,, encodage CP1252
Fichier 2 : statistics_by_dimension.csv
Contenu : Agrégations par TYPE_CLIENT, TYPE_RESTAURANT, UNIVERS
Colonnes : - DIMENSION : TYPE_CLIENT / TYPE_RESTAURANT / UNIVERS - VALEUR : Valeur de la dimension - NB_OFFRES : Nombre d'offres - NB_CLIENTS : Nombre de clients uniques - NB_ARTICLES : Nombre d'articles uniques - PRIX_MOY_ACTUEL : Prix moyen actuel - PRIX_MOY_RECOMMANDE : Prix moyen recommandé - PCT_HAUSSE_MOY/MIN/MAX/STDDEV : Distribution des hausses
Utilité : Comparaison inter-segments, identification des segments les plus impactés
Fichier 3 : impact_analysis.csv
Contenu : Impact CA et distribution des hausses par TYPE_CLIENT × UNIVERS
Colonnes : - TYPE_CLIENT, UNIVERS - NB_OFFRES : Nombre d'offres - CA_ACTUEL, CA_FUTUR : CA total approximatif - IMPACT_EUROS : Gain CA en euros - IMPACT_PCT : Gain CA en pourcentage - HAUSSE_MOY_PCT : Hausse moyenne pondérée - Distribution par tranches : NB_SANS_HAUSSE, NB_0_2PCT, NB_2_5PCT, etc. - Pourcentages : PCT_SANS_HAUSSE, PCT_0_2, PCT_2_5, etc.
Utilité : Estimation du gain CA potentiel par segment, communication de l'impact business
Fichier 4 : price_increase_distribution.csv
Contenu : Histogramme global des hausses par tranches détaillées
Tranches : - 00. Pas de hausse (0%) - 01. 0-2% - 02. 2-5% - 03. 5-7% - 04. 7-10% - 05. 10-12% - 06. 12-15% - 07. 15-17% - 08. 17-20% - 09. Plus de 20%
Colonnes : - TRANCHE_HAUSSE - NB_OFFRES : Volume d'offres - NB_CLIENTS_UNIQUES, NB_ARTICLES_UNIQUES - PRIX_MOY_ACTUEL, PRIX_MOY_RECOMMANDE - HAUSSE_MIN/MAX/MOY_PCT : Statistiques de hausse dans la tranche - PCT_OFFRES : % d'offres dans cette tranche - PCT_CUMULE : % cumulé (jusqu'à cette tranche)
Utilité : Vision synthétique de l'agressivité globale, identification des outliers
Fichier 5 : decision_path_analysis.csv
Contenu : Statistiques par chemin de décision et type de recommandation
Colonnes : - DECISION_PATH : PAS_BAISSE_GEL_PRIX / PL1_CONSERVATION_PREMIUM / OPTIMISATION_STANDARD - RECO_SELECTIONNEE : GEL_PRIX / CONSERVATION_PREMIUM / RECO1_... / RECO2_... - NB_OFFRES, NB_CLIENTS, NB_ARTICLES - HAUSSE_MOY_PCT, HAUSSE_MEDIANE_PCT - Distribution des cappings : NB_CAP_GEL, NB_CAP_PRB, NB_CAP_PLANCHER, NB_CAP_BASIQUES, NB_CAP_SENSIBILITE, NB_SANS_CAPPING
Utilité : Comprendre la répartition entre les 3 chemins, analyser l'impact de chaque type de capping
Fichier 6 : capping_distribution.csv
Contenu : Distribution détaillée des cappings appliqués
Colonnes : - CAPPING_APPLIED : GEL_PAS / PRB_FINAL / PLANCHER_PL2_PL3 / BASIQUES_50PCT / SENSIBILITE / NONE - DECISION_PATH - RECO_SELECTIONNEE - NB_OFFRES - HAUSSE_MOY_PCT
Utilité : Mesurer l'impact de chaque type de capping, calibrer les paramètres
Fichier 7 : capping_cubes_generated.csv
Contenu : Cappings générés par cube (UNIVERS × TYPE_CLIENT × TYPE_RESTAURANT × GEO)
Colonnes : - UNIVERS, TYPE_CLIENT, TYPE_RESTAURANT, GEO - CUBE_TYPE : MASTER / NATIONAL - CAPPING_HIGH, CAPPING_MEDIUM, CAPPING_LOW
Utilité : Base pour créer les corrections de capping (copier vers corrections/)
Logs affichés :
Analyse et export des résultats
→ Export détaillé : XXX,XXX 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
✓ Cappings exportés : capping_cubes_generated.csv
Fichier récapitulatif : summary.txt
Contenu : Résumé de l'exécution
PT2QE - RÉSUMÉ D'EXÉCUTION
======================================================================
Date : 03/11/2025 14:35:42
Période analysée : 2024-02-05 -> 2024-11-02
Trimestres fiscaux : 2024_Q01, 2024_Q02, 2024_Q03, 2024_Q04
Table recommandations : PT2QE_RECOMMENDATIONS
Dossier résultats : outputs/run_20251103_143000
Fin de l'étape 1
Le traitement affiche :
========================================================================
TRAITEMENT TERMINE AVEC SUCCES
========================================================================
Resultats disponibles dans : outputs\run_20251103_143000
Fichiers a 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 generes
PROCHAINES ETAPES:
[Option 2] Ajuster les cappings si necessaire (optionnel)
[Option 3] Generer les offres finales pour export
Appuyez sur une touche pour revenir au menu...
Phase 3 : Ajustement des cappings (optionnel)¶
Analyse des résultats de l'étape 1¶
Avant de lancer l'étape 2, analyser les fichiers générés :
Fichier à analyser en priorité : capping_cubes_generated.csv
Ce fichier contient les cappings appliqués par cube. Il sert de base pour créer les corrections.
Ouvrir dans Excel :
Colonnes : - UNIVERS : Toujours ZOOM1 - TYPE_CLIENT : Ex: RCI PI GI, RSI HM, RSC HM, NATIONAL - TYPE_RESTAURANT : Ex: REST. TRADI, SOCIAL, RESTAURATION RAPIDE, NATIONAL - GEO : Ex: IDF, NO, SO, NULL, NATIONAL - CUBE_TYPE : MASTER ou NATIONAL - CAPPING_HIGH : Capping pour sensibilité HIGH (ex: 0,025 = 2,5%) - CAPPING_MEDIUM : Capping pour sensibilité MEDIUM (ex: 0,05 = 5%) - CAPPING_LOW : Capping pour sensibilité LOW (ex: 0,075 = 7,5%)
Autres fichiers à analyser :
recommendations_detail.csv : - Trier par PCT_HAUSSE_FINALE DESC - Identifier les hausses les plus fortes - Vérifier la cohérence des chemins de décision - Analyser les cappings appliqués
impact_analysis.csv : - Vérifier l'impact CA par TYPE_CLIENT × UNIVERS - Analyser la distribution des hausses par segment - Identifier les segments trop ou pas assez impactés
decision_path_analysis.csv : - Vérifier la répartition entre les 3 chemins - Analyser l'impact des cappings par chemin - Identifier les chemins sous-représentés ou sur-représentés
price_increase_distribution.csv : - Vérifier la distribution globale des hausses - Identifier les outliers (> 20%) - Vérifier que la majorité des hausses est dans les tranches cibles
Décision d'ajustement¶
Scénarios nécessitant un ajustement :
Scénario 1 : Hausses trop fortes sur un segment - Exemple : TYPE_CLIENT "RCI PI GI" avec 30% des offres > 15% de hausse - Action : Réduire les cappings pour ce TYPE_CLIENT
Scénario 2 : Hausses trop faibles sur un segment - Exemple : TYPE_CLIENT "RSI HM" avec 80% des offres < 5% de hausse - Action : Augmenter les cappings pour ce TYPE_CLIENT
Scénario 3 : Disparités géographiques - Exemple : GEO "IDF" avec hausses moyennes de 8%, GEO "NO" avec hausses moyennes de 3% - Action : Ajuster les cappings par GEO
Scénario 4 : Cube spécifique problématique - Exemple : Cube (ZOOM1, RCI PI GI, REST. TRADI, IDF) avec hausses systématiquement > 20% - Action : Ajuster spécifiquement ce cube
Si ajustement nécessaire, passer à l'étape suivante. Sinon, passer directement à la Phase 4.
Création du fichier de corrections¶
Étape 1 : Copier le fichier de cappings générés
Copier le fichier :
Vers :
Étape 2 : Ouvrir dans Excel
Ouvrir le fichier corrections\capping_cubes_corrections.csv dans Excel.
Étape 3 : Modifier les cappings
Pour modifier un cube spécifique :
- Identifier la ligne du cube à modifier (combinaison UNIVERS, TYPE_CLIENT, TYPE_RESTAURANT, GEO)
- Modifier les valeurs CAPPING_HIGH, CAPPING_MEDIUM, CAPPING_LOW
- Enregistrer le fichier (format CSV, séparateur
;, décimal,)
Exemples de modifications :
Exemple 1 : Réduire les cappings pour "RCI PI GI"
Ligne originale :
Ligne modifiée :
Exemple 2 : Augmenter les cappings pour "RSI HM" en zone NO
Ligne originale :
Ligne modifiée :
Étape 4 : Enregistrer le fichier
Enregistrer le fichier dans Excel : - Format : CSV (séparateur point-virgule) (*.csv) - Encodage : Windows-1252 / ANSI
⚠️ Important : Vérifier que le séparateur est bien ; et le décimal ,.
Lancement de l'ajustement (Option 2)¶
Étape 1 : Retour au menu principal
Appuyer sur une touche pour revenir au menu principal.
Étape 2 : Sélectionner l'option 2
Étape 3 : Confirmer le lancement
L'écran affiche :
========================================================================
ETAPE 2: AJUSTEMENT DES CAPPINGS
========================================================================
Configuration:
- Base de donnees : TARIFAIRE
- Corrections : corrections
- Niveau de log : Normal
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 decision
[4] Recalcul cascade cappings (sensibilite + basiques)
[5] Generation des nouvelles analyses
Lancer le traitement ? (O/N):
Taper O puis Entrée.
Processus de recalcul¶
Phase 3.1 : Lecture des tables existantes
PT2QE lit les tables Oracle existantes :
- PT2QE_PRICE_OFFERS : Offres extraites (non modifiées)
- PT2QE_PRICE_OFFERS_ENRICHED : Offres enrichies avec corridors (non modifiées)
- PT2QE_RECOMMENDATIONS : Recommandations à mettre à jour
Phase 3.2 : Upload des corrections
Les corrections sont uploadées dans une table temporaire TEMP_CAPPING_CORRECTIONS.
Phase 3.3 : Mise à jour des recommandations
Opération : UPDATE massif sur PT2QE_RECOMMENDATIONS avec une requête MERGE.
Colonnes recalculées :
Étape 1 : Recalcul RECO1_APRES_CAPPING_SENSIBILITE - Application du nouveau capping sensibilité selon les corrections
Étape 2 : Recalcul RECO1_AVEC_CAPPING - Application du capping basiques (50%) en cascade
Étape 3 : Recalcul PRIX_RECOMMANDE selon DECISION_PATH existant - CHEMIN 1 : Prix actuel (inchangé) - CHEMIN 2 : MAX(Prix actuel, NEW_BORNE_PL2_PL3) + capping PRB - CHEMIN 3 : MAX(RECO1_avec_capping, RECO2) + capping PRB
Étape 4 : Recalcul PCT_HAUSSE_FINALE - (PRIX_RECOMMANDE - PRIX_TARIF_ACTUEL) / PRIX_TARIF_ACTUEL
Étape 5 : Recalcul POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES - Détermine le nouveau palier après recalcul
Étape 6 : Recalcul CAPPING_APPLIED - Détermine le capping le plus contraignant après ajustement
Étape 7 : Recalcul RECO_TYPE et RECO_SELECTIONNEE - Détermine quelle recommandation a gagné après recalcul
Logs affichés :
Application des corrections de capping
→ XX corrections à appliquer
✓ XXX,XXX recommandations mises à jour
Phase 3.4 : Régénération des analyses
Tous les fichiers CSV sont régénérés avec les nouvelles données.
Logs affichés :
Analyse et export des résultats
→ Export détaillé : XXX,XXX 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
Fin de l'étape 2
Le traitement affiche :
========================================================================
TRAITEMENT TERMINE AVEC SUCCES
========================================================================
Les cappings ont ete ajustes et les recommandations recalculees.
PROCHAINES ETAPES:
- Verifier les nouveaux resultats
- Comparer avec la version precedente
[Option 2] Reajuster si necessaire (iteratif)
[Option 3] Generer les offres finales
Appuyez sur une touche pour revenir au menu...
Comparaison des résultats¶
Pour comparer les résultats avant/après ajustement :
Dossier run initial :
Dossier corrections :
Fichiers à comparer :
1. recommendations_detail.csv - Comparer les colonnes PRIX_RECOMMANDE, PCT_HAUSSE_FINALE, CAPPING_APPLIED - Identifier les offres dont les recommandations ont changé
2. impact_analysis.csv - Comparer HAUSSE_MOY_PCT par TYPE_CLIENT × UNIVERS - Vérifier l'impact des ajustements sur les segments ciblés
3. decision_path_analysis.csv - Comparer la distribution des cappings (NB_CAP_SENSIBILITE, NB_CAP_BASIQUES, etc.) - Vérifier que les ajustements ont l'effet attendu
4. price_increase_distribution.csv - Comparer la distribution globale des hausses - Vérifier le déplacement entre les tranches
Décision :
- Si résultats satisfaisants → Passer à la Phase 4
- Si nouveaux ajustements nécessaires → Modifier à nouveau corrections\capping_cubes_corrections.csv et relancer l'option 2
Phase 4 : Génération des offres finales¶
Validation des recommandations¶
Avant de générer les offres finales, vérifier :
1. Cohérence globale - Pas de hausse moyenne anormalement élevée (> 15%) - Pas de proportion anormale d'offres > 20% (doit être < 5%) - Distribution des hausses cohérente avec la stratégie
2. Qualité du matching - Taux de matching MASTER suffisant (> 70%) - Taux de NO_MATCH acceptable (< 5%)
3. Cohérence des chemins - Répartition entre les 3 chemins conforme aux attentes - Pas de sur-représentation du CHEMIN 1 (gel) sauf contexte de baisse PAS généralisée
4. Impact CA - Impact CA global cohérent avec les objectifs - Pas de disparités inter-segments trop importantes
Si validation OK, passer à la génération finale.
Lancement de la génération (Option 3)¶
Étape 1 : Retour au menu principal
Appuyer sur une touche pour revenir au menu principal.
Étape 2 : Sélectionner l'option 3
Étape 3 : Confirmer le lancement
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):
Taper O puis Entrée.
Processus de génération¶
Phase 4.1 : Extraction depuis PT2QE_RECOMMENDATIONS
Table source : PT2QE_RECOMMENDATIONS
Colonnes extraites : - Identifiants : ID_CLN, LC_CLN, ID_ART, LC_ART - Dimensions : TYPE_CLIENT, TYPE_RESTAURANT, GEO, UNIVERS - Condition : ID_CND, DT_DEB_CONDITION, DT_FIN_CONDITION - Prix : PRIX_TARIF_ACTUEL, PRIX_RECOMMANDE (alias NOUVEAU_PRIX) - Impact : PCT_HAUSSE_FINALE (alias PCT_HAUSSE), HAUSSE_EUROS calculée - Les 3 positions : POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES, PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES, POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES - Contexte : PRICE_SENSITIVITY, TYPE_HAUSSE (dérivé de RECO_SELECTIONNEE) - Métadonnées : DATE_CALCUL
Filtres appliqués :
Phase 4.2 : Formatage des données
Arrondis : - Prix : 3 décimales - Pourcentages : 2 décimales
Ajout de colonnes calculées :
- HAUSSE_EUROS : NOUVEAU_PRIX - PRIX_TARIF_ACTUEL
- VALIDATION_STATUS : VALIDE / A_VERIFIER / ANOMALIE
- TYPE_HAUSSE : REPOSITIONNEMENT / HAUSSE_PROPORTIONNELLE / AUTRE
Règles de validation :
- VALIDATION_STATUS = 'VALIDE' : Par défaut
- VALIDATION_STATUS = 'A_VERIFIER' : Si PCT_HAUSSE > 20%
- VALIDATION_STATUS = 'ANOMALIE' : Si PCT_HAUSSE < 0 (baisse)
Phase 4.3 : Export CSV final
Fichier généré : final_price_offers.csv
Colonnes du fichier final : - ID_CLN : Identifiant client - LC_CLN : Libellé client - ID_ART : Identifiant article - LC_ART : Libellé article - TYPE_CLIENT : Type de client - TYPE_RESTAURANT : Type de restaurant - GEO : Zone géographique - UNIVERS : ZOOM1 - ID_CND : Identifiant condition - DT_DEB_CONDITION : Date début condition - DT_FIN_CONDITION : Date fin condition - PRIX_TARIF_ACTUEL : Prix actuel (3 décimales) - NOUVEAU_PRIX : Prix recommandé (3 décimales) - PCT_HAUSSE : Pourcentage de hausse (2 décimales, %) - HAUSSE_EUROS : Hausse en euros (3 décimales) - POSITION_TARIF_ACTUEL_DANS_ANCIENNES_BORNES : Position 1 - PALIER_TARIF_ACTUEL_VS_NOUVELLES_BORNES : Position 2 - POSITION_NOUVEAU_PRIX_DANS_NOUVELLES_BORNES : Position 3 - PRICE_SENSITIVITY : Sensibilité prix (HIGH/MEDIUM/LOW) - TYPE_HAUSSE : Type de recommandation appliquée - VALIDATION_STATUS : Statut de validation (VALIDE/A_VERIFIER/ANOMALIE) - DATE_CALCUL : Date/heure du calcul
Format : Séparateur ;, décimal ,, encodage CP1252
Génération des rapports complémentaires¶
Phase 4.4 : Rapport de validation
Fichier généré : validation_report.csv
Contenu : Statistiques de validation
Sections :
GLOBAL : - Nombre total d'offres - Nombre de clients - Nombre d'articles
HAUSSES : - Hausse moyenne (%) - Hausse médiane (%) - Hausse max (%)
TYPE_HAUSSE : - Nombre d'offres par TYPE_HAUSSE (REPOSITIONNEMENT, HAUSSE_PROPORTIONNELLE, etc.)
VALIDATION : - Nombre d'offres par VALIDATION_STATUS (VALIDE, A_VERIFIER, ANOMALIE)
Format : 3 colonnes (CATEGORIE, METRIQUE, VALEUR)
Phase 4.5 : Résumé textuel
Fichier généré : export_summary.txt
Contenu :
RÉSUMÉ EXPORT FINAL PT2QE
==================================================
Date : 03/11/2025 15:30:45
VOLUMÉTRIE
--------------------
Offres exportées : XXX,XXX
Clients uniques : X,XXX
Articles uniques : XX,XXX
HAUSSES DE PRIX
--------------------
Hausse moyenne : X.X%
Hausse médiane : X.X%
Hausse min : X.X%
Hausse max : XX.X%
VALIDATION
--------------------
VALIDE : XXX,XXX (XX.X%)
A_VERIFIER : X,XXX (X.X%)
ANOMALIE : XX (X.X%)
Logs affichés :
Fin de l'étape 3
Le traitement affiche :
========================================================================
GENERATION TERMINEE AVEC SUCCES
========================================================================
Fichiers generes dans : outputs\final_20251103_153000
Fichiers disponibles:
- final_price_offers.csv : Offres finales client × article
- validation_report.csv : Rapport de validation
- export_summary.txt : Resume de l'export
Le fichier final_price_offers.csv contient:
- ID_CLN / ID_ART : Identifiants client et article
- ID_CND : Identifiant condition
- PRIX_TARIF_ACTUEL : Prix actuel
- NOUVEAU_PRIX : Prix recommande
- PCT_HAUSSE : Pourcentage de hausse
- Les 3 positions : anciennes / nouvelles / apres reco
- VALIDATION_STATUS : Statut de validation
Appuyez sur une touche pour revenir au menu...
Fichiers générés et structure de sortie¶
Arborescence des dossiers¶
PT2QE/
├── START.bat # Point d'entrée
├── PT2QE_Menu.bat # Menu principal
├── pt2qe_main.py # Orchestrateur
├── inputs/
│ └── capping_type_client.csv # Cappings par type client (obligatoire)
├── corrections/
│ └── capping_cubes_corrections.csv # Corrections de capping (optionnel)
├── config/
│ └── pt2qe_config.json # Configuration (optionnel)
├── outputs/
│ ├── run_20251103_143000/ # Exécution normale (Étape 1)
│ │ ├── 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
│ ├── corrections_20251103_150000/ # Ajustement cappings (Étape 2)
│ │ ├── recommendations_detail.csv
│ │ ├── statistics_by_dimension.csv
│ │ ├── impact_analysis.csv
│ │ ├── price_increase_distribution.csv
│ │ ├── decision_path_analysis.csv
│ │ ├── capping_distribution.csv
│ │ └── summary.txt
│ └── final_20251103_153000/ # Export final (Étape 3)
│ ├── final_price_offers.csv
│ ├── validation_report.csv
│ └── export_summary.txt
└── ...
Description des fichiers de sortie¶
Étape 1 : Calcul des recommandations
Dossier : outputs/run_YYYYMMDD_HHMMSS/
| Fichier | Contenu | Utilisation |
|---|---|---|
| recommendations_detail.csv | Export ligne à ligne de toutes les recommandations avec cascade complète | Analyse détaillée, pivots Excel, investigation |
| statistics_by_dimension.csv | Agrégations par TYPE_CLIENT, TYPE_RESTAURANT, UNIVERS | Comparaison inter-segments |
| impact_analysis.csv | Impact CA et distribution des hausses par TYPE_CLIENT × UNIVERS | Estimation gain CA, communication business |
| price_increase_distribution.csv | Histogramme global des hausses par tranches | Vision synthétique agressivité |
| decision_path_analysis.csv | Statistiques par chemin de décision et type de recommandation | Compréhension de l'arbre de décision |
| capping_distribution.csv | Distribution détaillée des cappings appliqués | Mesure impact cappings, calibrage |
| capping_cubes_generated.csv | Cappings générés par cube | Base pour créer corrections |
| summary.txt | Résumé de l'exécution | Traçabilité |
Étape 2 : Ajustement des cappings
Dossier : outputs/corrections_YYYYMMDD_HHMMSS/
Mêmes fichiers que l'Étape 1, avec les nouvelles valeurs après recalcul.
Étape 3 : Génération des offres finales
Dossier : outputs/final_YYYYMMDD_HHMMSS/
| Fichier | Contenu | Utilisation |
|---|---|---|
| final_price_offers.csv | Offres finales client × article | Export opérationnel, import dans système cible |
| validation_report.csv | Statistiques de validation | Contrôle qualité |
| export_summary.txt | Résumé de l'export | Traçabilité |
Format des exports CSV¶
Tous les fichiers CSV :
- Séparateur : ; (point-virgule)
- Décimal : , (virgule)
- Encodage : CP1252 (Windows-1252, ANSI)
- Format Excel Windows : Compatible ouverture directe dans Excel
Ouverture dans Excel : - Double-cliquer sur le fichier CSV - Excel détecte automatiquement le séparateur et le décimal
Import dans un système tiers :
- Utiliser les paramètres : séparateur ;, décimal ,, encodage CP1252
Points de contrôle et validation¶
Métriques de suivi par phase¶
Phase 1 : Extraction - Nombre d'offres extraites (ZOOM1) - Taux d'offres avec historique 4Q (> 80% attendu) - Taux d'offres avec TYPE_CLIENT mappé (> 95% attendu) - Taux d'offres avec TYPE_RESTAURANT mappé (> 95% attendu)
Phase 2 : Matching corridors - Taux de matching MASTER (> 70% attendu) - Taux de matching NATIONAL (< 30% attendu) - Taux de NO_MATCH (< 5% attendu)
Phase 2 : Calcul recommandations - Nombre de recommandations calculées - Hausse moyenne globale - Distribution des hausses (% par tranche) - Répartition par chemin de décision - Répartition par type de recommandation (RECO1 vs RECO2)
Phase 3 : Ajustement cappings - Nombre de cubes ajustés - Impact sur la hausse moyenne - Évolution de la distribution des hausses
Phase 4 : Export final - Nombre d'offres exportées - Taux de validation (VALIDE > 95% attendu) - Taux d'anomalies (< 1% attendu)
Indicateurs d'alerte¶
Alerte CRITIQUE (arrêt recommandé) : - Tables PT1CE_OPTIMAL_* manquantes - Aucune offre extraite - Taux de NO_MATCH > 20% - Taux d'anomalies > 5%
Alerte MAJEURE (investigation recommandée) : - Taux de matching MASTER < 50% - Hausse moyenne > 15% - Plus de 10% des offres avec hausse > 20% - Disparités inter-segments très importantes (écart > 10 points)
Alerte MINEURE (surveillance) : - Taux de matching MASTER < 70% - Hausse moyenne < 2% (peut indiquer un problème de paramétrage) - Plus de 5% des offres avec hausse > 20%
Logs de progression¶
Format des logs :
[INFO] Phase X: Description
[INFO] → Sous-étape
[INFO] ✓ Résultat positif
[INFO] ⚠ Avertissement
[ERROR] ✗ Erreur
Exemple de log complet :
[INFO] Démarrage PRICING_TIER2_QUOTE_ENGINE v1.0.0
[INFO] ⚠️ MODE ZOOM1 EXCLUSIF
[INFO] ✓ Configuration chargée depuis config\pt2qe_config.json
[INFO] ✓ 8 règles RECO1 chargées
[INFO] Mode: NOUVEAU CALCUL complet
[INFO] Initialisation du gestionnaire de périodes...
[INFO] Période d'analyse: 2024-02-05 → 2024-11-02
[INFO] Trimestres fiscaux: 2024_Q01, 2024_Q02, 2024_Q03, 2024_Q04
[INFO] === Phase 1: Extraction des offres de prix avec historique ===
[INFO] Extraction des offres avec historique de performance
[INFO] ✓ 2,345,678 offres de prix extraites (ZOOM1 uniquement)
[INFO] Statistiques d'enrichissement:
[INFO] - Total offres: 2,345,678
[INFO] - Clients uniques: 45,678
[INFO] - Articles uniques: 23,456
[INFO] - Avec TYPE_CLIENT: 2,312,456 (98.6%)
[INFO] - Avec TYPE_RESTAURANT: 2,298,765 (98.0%)
[INFO] - Avec FG_HM: 2,345,678 (100.0%)
[INFO] === Phase 2: Calcul des recommandations ===
[INFO] Calcul des recommandations
[INFO] Jointure offres × corridors
[INFO] → Résultats du matching :
[INFO] - MASTER : 1,987,654 offres, 38,765 clients, 21,234 articles
[INFO] - NATIONAL : 345,678 offres, 12,345 clients, 5,678 articles
[INFO] - NO_MATCH : 12,346 offres, 234 clients, 567 articles
[INFO] → Total : 2,333,332/2,345,678 offres avec corridor (99.5%)
[INFO] Génération des cappings par cube
[INFO] → 1,234 cubes MASTER avec cappings
[INFO] → 123 cubes NATIONAL avec cappings
[INFO] ✓ 2,333,332 recommandations calculées
[INFO] - 45,444 clients
[INFO] - 22,889 articles
[INFO] - Hausse moyenne: 4.2%
[INFO] ✓ Cappings exportés : capping_cubes_generated.csv
[INFO] === Phase 4: Analyse et export des résultats ===
[INFO] Analyse et export des résultats
[INFO] → Export détaillé : 2,333,332 lignes
[INFO] → Statistiques par dimension exportées
[INFO] → Statistiques par path exportées
[INFO] → Statistiques des distributions de capping exportées
[INFO] → Analyse d'impact exportée
[INFO] → Distribution des hausses exportée
[INFO] ✓ TRAITEMENT TERMINÉ AVEC SUCCÈS
[INFO] Résultats dans : outputs\run_20251103_143542
Modification des paramètres¶
Modification des cappings type client¶
Fichier : inputs/capping_type_client.csv
Quand modifier : - Avant la première exécution (Étape 1) - Pour changer la stratégie globale de capping
Comment modifier :
1. Ouvrir le fichier dans Excel
2. Modifier les valeurs CAPPING_HIGH, CAPPING_MEDIUM, CAPPING_LOW
3. Format : décimal avec virgule (ex: 0,025 pour 2,5%)
4. Enregistrer au format CSV (séparateur ;)
Exemple de modification :
Stratégie conservatrice (hausses limitées) :
Stratégie aggressive (hausses importantes) :
Impact : - Modifie les cappings appliqués sur RECO1 pour tous les cubes de ce TYPE_CLIENT - S'applique lors de l'Étape 1 (calcul initial)
Modification des cappings par cube¶
Fichier : corrections/capping_cubes_corrections.csv
Quand modifier : - Après l'Étape 1, si ajustements nécessaires - Pour affiner les cappings par segment (TYPE_CLIENT × TYPE_RESTAURANT × GEO)
Comment modifier :
1. Copier outputs/run_XXX/capping_cubes_generated.csv vers corrections/capping_cubes_corrections.csv
2. Ouvrir dans Excel
3. Modifier les lignes des cubes à ajuster
4. Enregistrer au format CSV (séparateur ;)
5. Lancer l'Étape 2
Exemple de modification ciblée :
Ajuster uniquement le cube (ZOOM1, RCI PI GI, REST. TRADI, IDF) :
UNIVERS;TYPE_CLIENT;TYPE_RESTAURANT;GEO;CAPPING_HIGH;CAPPING_MEDIUM;CAPPING_LOW
ZOOM1;RCI PI GI;REST. TRADI;IDF;0,03;0,06;0,09
Tous les autres cubes gardent les cappings du fichier capping_type_client.csv.
Impact : - Modifie uniquement les cubes spécifiés dans le fichier - S'applique lors de l'Étape 2 (ajustement)
Modification des règles RECO1¶
Fichier : config/pt2qe_config.json
Section : recommendations.reco1_rules
Quand modifier : - Rarement (règles métier stables) - Pour changer la logique de repositionnement par paliers
Comment modifier :
1. Ouvrir config/pt2qe_config.json dans un éditeur de texte
2. Modifier la section recommendations.reco1_rules
3. Enregistrer le fichier
4. Relancer l'Étape 1
Exemple de modification :
Règle par défaut :
{
"position": "PL2_PL3",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL3_PL4",
"action": "TO_PL1",
"target": "NEW_BORNE_PL1_PL2",
"comment": "Remonter vers PL1"
}
Règle modifiée (remonter vers PL2 au lieu de PL1) :
{
"position": "PL2_PL3",
"condition": "PRIX_TARIF_ACTUEL > NEW_BORNE_PL3_PL4",
"action": "TO_PL2",
"target": "NEW_BORNE_PL2_PL3",
"comment": "Remonter vers PL2"
}
Impact : - Modifie le calcul de RECO1_BASE - S'applique à toutes les offres en position PL2_PL3 - Rend les hausses moins agressives
Modification du capping basiques¶
Fichier : config/pt2qe_config.json
Section : capping.basiques
Quand modifier : - Pour ajuster le plafond de hausse sur les produits basiques
Comment modifier :
1. Ouvrir config/pt2qe_config.json
2. Modifier la valeur capping.basiques
3. Enregistrer le fichier
4. Relancer l'Étape 1
Exemple :
Valeur par défaut (50% maximum) :
Valeur modifiée (40% maximum) :
Impact : - Modifie le plafond de hausse pour les produits avec LC_ATTRIBUT = 'Basiques' - S'applique en cascade après le capping sensibilité
Modification du niveau de log¶
Dans le menu (Option 6) :
- Sélectionner l'option 6
- Choisir le niveau :
- [1] Silencieux (erreurs seulement)
- [2] Normal (tout afficher) - PAR DÉFAUT
- [3] Détaillé (mode debug)
Impact : - Silencieux : Affiche uniquement les erreurs critiques - Normal : Affiche INFO, WARNING, ERROR - Détaillé : Affiche DEBUG + tout le reste
En ligne de commande (avancé) :
python pt2qe_main.py TARIFAIRE -qq # Silencieux
python pt2qe_main.py TARIFAIRE # Normal
python pt2qe_main.py TARIFAIRE -vv # Détaillé
Modification de la base de données¶
Par défaut : TARIFAIRE
Dans les fichiers .bat :
Modifier la ligne :
Par :
En ligne de commande :
Impact : - Change la base Oracle utilisée pour toutes les opérations - Les tables PT1CE_OPTIMAL_* doivent exister dans la nouvelle base
Modification des filtres d'extraction¶
Fichier : extract_price_offers.py
Quand modifier : - Rarement (logique métier établie) - Pour changer les critères de sélection des offres
Filtres modifiables :
Types de conditions :
Séquences :
Statuts clients :
Exclusions articles :
⚠️ Attention : Modifier ces filtres peut avoir un impact important sur le périmètre et les résultats.
Résumé du workflow complet¶
PRÉREQUIS :
1. PT1CE exécuté complètement (tables PT1CE_OPTIMAL_* créées)
2. Fichier inputs/capping_type_client.csv présent
3. Tables de mapping PT0CE existantes
4. Connexion Oracle fonctionnelle
ÉTAPE 0 : PRÉPARATION
1. Lancer START.bat
2. Sélectionner Option 5 (Vérifier les prérequis)
3. Corriger les problèmes éventuels
ÉTAPE 1 : CALCUL DES RECOMMANDATIONS
1. Sélectionner Option 1
2. Confirmer le lancement
3. Attendre la fin du traitement
4. Analyser les fichiers générés dans outputs/run_XXX/
ÉTAPE 2 : AJUSTEMENT DES CAPPINGS (optionnel)
1. Analyser capping_cubes_generated.csv
2. Copier vers corrections/capping_cubes_corrections.csv
3. Modifier les cappings souhaités
4. Sélectionner Option 2
5. Confirmer le lancement
6. Comparer les résultats avant/après dans outputs/corrections_XXX/
7. Répéter si nécessaire
ÉTAPE 3 : GÉNÉRATION DES OFFRES FINALES
1. Valider les recommandations
2. Sélectionner Option 3
3. Confirmer le lancement
4. Récupérer final_price_offers.csv dans outputs/final_XXX/
5. Utiliser le fichier pour import dans le système cible
WORKFLOW ALTERNATIF (ligne de commande) :
# Étape 1 : Calcul complet
python pt2qe_main.py TARIFAIRE --capping-file "inputs\capping_type_client.csv" --output-folder "outputs"
# Étape 2 : Ajustement cappings (optionnel)
python pt2qe_main.py TARIFAIRE --output-folder "outputs" --corrections-folder "corrections" --apply-corrections --skip-extraction
# Étape 3 : Export final
python pt2qe_main.py TARIFAIRE --output-folder "outputs" --generate-final-only
RÉCURRENCE :
- Exécuter PT2QE après chaque exécution complète de PT1CE
- Fréquence typique : Trimestrielle (après chaque nouveau trimestre fiscal complet)
- Les tables Oracle PT2QE_* sont conservées entre les exécutions
- Les dossiers outputs/ sont horodatés pour conserver l'historique