Workflow détaillé - PT1CE¶
Table des matières¶
- Vue d'ensemble du workflow
- Étape 1 : Application des nouveaux prix
- Étape 2 : Corrections manuelles
- Étape 3 : Export SAP
- Modes d'exécution
- Diagrammes de flux
Vue d'ensemble du workflow¶
PT1CE suit un workflow en 3 étapes principales, avec possibilité d'itération :
graph LR
A[Nouveaux PAS/PRB] -->|Étape 1| B[Application<br/>des prix]
B --> C{Corridors<br/>sous-optimaux?}
C -->|OUI| D[Corrections<br/>manuelles]
C -->|NON| E[Export SAP]
D -->|Étape 2| F[Application<br/>corrections]
F --> C
E -->|Étape 3| G[Fichiers Excel<br/>pour SAP]
style B fill:#90ee90
style F fill:#ffa500
style E fill:#87ceeb
Points clés¶
- Workflow itératif : Possibilité de corriger et re-vérifier
- Tables permanentes : Réutilisées entre les étapes
- Export indépendant : Peut être relancé seul
- Traçabilité : Chaque run génère un dossier horodaté
Étape 1 : Application des nouveaux prix¶
Objectif¶
Appliquer les nouveaux PAS/PRB sur tous les corridors existants et détecter ceux nécessitant des ajustements.
Processus détaillé¶
graph TD
A[new_pas_prb.csv] --> B[Validation format]
B --> C[Chargement en table temp]
C --> D[Pour chaque ZOOM]
D --> E[Jointure avec PT0CE_CORRIDOR_HISTORY]
E --> F[Application des écarts]
F --> G[Contraintes min/max]
G --> H[PT1CE_CORRIDORS_ZOOM*]
H --> I[Détection sous-optimaux]
I --> J[Marquage STATUS]
J --> K[PT1CE_OPTIMAL_ZOOM*]
K --> L[Génération rapports]
L --> M[Export CSV analyse]
Entrées requises¶
Fichier inputs/new_pas_prb.csv
:
ID_ART;PAS;PRB_RC;PRB_COLL
075130;12,456;15,820;14,935
075131;8,750;11,245;10,500
075135;25,330;32,150;30,890
Règles :
- Séparateur : point-virgule (;
)
- Décimales : virgule (,
)
- PAS obligatoire pour chaque article
- PRB optionnels (conserve anciens si vides)
Calculs effectués¶
Pour chaque corridor :
-
Récupération de l'écart historique
-
Application sur nouveau PAS
-
Application des contraintes
Détection des problèmes¶
-- Marquage des corridors
CASE
WHEN NEW_BORNE_PL6_PLX = NEW_PAS THEN 'SUBOPTIMAL'
ELSE 'OPTIMAL'
END as STATUS
-- Classification détaillée
CASE
WHEN NEW_BORNE_PL6_PLX = NEW_PAS AND ECART_TYPE > 0.10
THEN 'PL6_ET_ECART_TYPE'
WHEN NEW_BORNE_PL6_PLX = NEW_PAS
THEN 'PL6_EGAL_PAS'
WHEN ECART_TYPE > 0.10
THEN 'ECART_TYPE_ELEVE'
ELSE 'AUCUN'
END as PROBLEM_TYPE
Sorties générées¶
Dans outputs/run_YYYYMMDD_HHMMSS/
:
Par univers (ZOOM½/3)¶
corridors_sous_optimaux.csv
: À corrigercorridors_ecart_type_eleve.csv
: Écart-type > 10%corridors_optimaux.csv
: Corridors validesevolution_par_type_client.csv
: Impact par segmentevolution_par_type_restaurant.csv
: Impact par typequality_metrics.csv
: Métriques globalesdistribution_ecart_type.csv
: Répartition des écarts
Fichier récapitulatif¶
summary.txt
: Résumé d'exécution
Statistiques affichées¶
✓ Phase 1 terminée
ZOOM1: 125,432 corridors
- 118,567 optimaux (94.5%)
- 6,865 sous-optimaux (5.5%)
- 15,234 avec écart-type > 10%
Étape 2 : Corrections manuelles¶
Objectif¶
Permettre l'ajustement manuel des corridors identifiés comme sous-optimaux.
Processus détaillé¶
graph TD
A[Analyser corridors_sous_optimaux.csv] --> B{Corrections<br/>nécessaires?}
B -->|OUI| C[Créer fichiers corrections]
B -->|NON| D[Passer à l'export SAP]
C --> E[corrections/corrections_ZOOM1.csv]
C --> F[corrections/corrections_ZOOM2.csv]
C --> G[corrections/corrections_ZOOM3.csv]
E --> H[Lancer 2_appliquer_corrections.bat]
F --> H
G --> H
H --> I[Chargement corrections]
I --> J[Update PT1CE_CORRIDORS_*]
J --> K[Re-détection sous-optimaux]
K --> L[Nouveaux rapports]
Format des corrections¶
ZOOM1/ZOOM2 (avec GEO)¶
ID_ART;TYPE_CLIENT;TYPE_RESTAURANT;GEO;NEW_BORNE_PL1_PL2;NEW_BORNE_PL2_PL3;NEW_BORNE_PL3_PL4;NEW_BORNE_PL4_PL5;NEW_BORNE_PL5_PL6;NEW_BORNE_PL6_PLX
075130;RCI PI GI;REST. TRADI;IDF;13,500;14,200;15,800;17,200;18,900;21,500
075131;RSI HM;ENSEIGNEMENT;NORD;9,250;9,750;10,800;11,750;12,900;14,650
ZOOM3 (sans GEO)¶
ID_ART;TYPE_CLIENT;TYPE_RESTAURANT;NEW_BORNE_PL1_PL2;NEW_BORNE_PL2_PL3;NEW_BORNE_PL3_PL4;NEW_BORNE_PL4_PL5;NEW_BORNE_PL5_PL6;NEW_BORNE_PL6_PLX
075150;RSC HM;AUTRES;3,665;3,855;4,275;4,660;5,115;5,820
Corrections partielles¶
Possibilité de ne corriger que certaines bornes :
ID_ART;TYPE_CLIENT;TYPE_RESTAURANT;GEO;NEW_BORNE_PL1_PL2;NEW_BORNE_PL2_PL3;NEW_BORNE_PL3_PL4;NEW_BORNE_PL4_PL5;NEW_BORNE_PL5_PL6;NEW_BORNE_PL6_PLX
075140;RSI HM;SOCIAL;EST;;7,590;8,420;9,170;10,070;11,450
075142;RCI PI GI;HOTELS;OUEST;16,600;;19,200;20,900;22,980;26,150
Application technique¶
-
Upload dans table temporaire
-
Update des corridors
-
Re-détection
- Relance du processus de détection
- Mise à jour des tables OPTIMAL
- Génération de nouveaux rapports
Sorties générées¶
Dans outputs/corrections_YYYYMMDD_HHMMSS/
:
- Mêmes fichiers que l'étape 1
- Permet de comparer avant/après corrections
Étape 3 : Export SAP¶
Objectif¶
Générer les fichiers Excel au format attendu par SAP pour l'import des corridors optimaux.
Processus détaillé¶
graph TD
A[PT1CE_OPTIMAL_*] --> B{Tables<br/>disponibles?}
B -->|OUI| C[Vérifier PT0CE_DIMENSION_MAPPING]
B -->|NON| D[ERREUR]
C --> E{Mapping<br/>trouvé?}
E -->|OUI| F[Générer 4 extracts]
E -->|NON| G[Export NATIONAL uniquement]
F --> H[NATIONAL PRB01]
F --> I[NATIONAL PRB02]
F --> J[MASTER PRB01]
F --> K[MASTER PRB02]
H --> L[Division si > 400k lignes]
I --> L
J --> L
K --> L
L --> M[Fichiers Excel]
Structure des extracts¶
1. NATIONAL avec PRB_TO_USE = 1¶
- Corridors NATIONAL
- PRB_RC utilisé
- Codes sources vides
2. NATIONAL avec PRB_TO_USE = 2¶
- Corridors NATIONAL
- PRB_COLL utilisé
- Codes sources vides
3. MASTER avec PRB_TO_USE = 1¶
- Corridors MASTER
- PRB_RC utilisé
- Codes sources depuis PT0CE_DIMENSION_MAPPING
4. MASTER avec PRB_TO_USE = 2¶
- Corridors MASTER
- PRB_COLL utilisé
- Codes sources depuis PT0CE_DIMENSION_MAPPING
Format des données¶
Pour chaque corridor × palier :
# Type tarif avec leading zero
type_tarif = f"{int(corridor['PRB_TO_USE']):02d}" # '01' ou '02'
# Calcul taux de remise
taux_remise = round((prb - borne) / prb, 2)
# Ligne Excel
{
'code_sequence': 526,
'paliers': 'ZRPL', # ou ZP05, ZP04, etc.
'Type tarif': type_tarif,
'code_typo': corridor.get('ID_TC_CIBLE', ''),
'code_gira': corridor.get('ID_SFC_CIBLE', ''),
'code_region': corridor.get('ID_RGC_GRV_SAP', ''),
'Code_Article': corridor['ID_ART'],
'Montant': taux_remise,
'debut': '01.10.2025', # Prochain trimestre
'fin': '31.12.9999'
}
Division des fichiers¶
Si plus de 400 000 lignes :
sap_export/
├── national_prb01/
│ ├── national_prb01_part01.xlsx
│ └── national_prb01_part02.xlsx
├── national_prb02/
│ └── national_prb02_part01.xlsx
├── master_prb01/
│ ├── master_prb01_part01.xlsx
│ ├── master_prb01_part02.xlsx
│ └── master_prb01_part03.xlsx
└── master_prb02/
└── master_prb02_part01.xlsx
Validation du format¶
- En-têtes en ligne 18
- Colonnes dans l'ordre SAP
- Format dates : dd.mm.yyyy
- Montants : 2 décimales
- Codes vides pour NATIONAL
Modes d'exécution¶
Mode 1 : Nouveau traitement complet¶
Caractéristiques :
- Requiert new_pas_prb.csv
- Écrase toutes les tables PT1CE
- Génère tous les rapports
- Point de départ habituel
Mode 2 : Corrections sur tables existantes¶
Caractéristiques :
- Utilise les tables PT1CE_CORRIDORS existantes
- Applique uniquement les corrections
- Re-génère les rapports
- --skip-price-update
activé
Mode 3 : Export SAP uniquement¶
Caractéristiques :
- Utilise les tables PT1CE_OPTIMAL existantes
- Pas de recalcul
- Génération directe des Excel
- --export-sap-only
activé
Mode interactif : Menu¶
Permet de :
- Choisir l'étape à exécuter
- Modifier le niveau de log
- Vérifier les prérequis
- Mode dry-run pour tester
Diagrammes de flux¶
Flux global des données¶
graph TB
subgraph "Sources PT0CE"
A1[PT0CE_CORRIDOR_HISTORY_ZOOM1]
A2[PT0CE_CORRIDOR_HISTORY_ZOOM2]
A3[PT0CE_CORRIDOR_HISTORY_ZOOM3]
A4[PT0CE_DIMENSION_MAPPING]
end
subgraph "PT1CE - Étape 1"
B[new_pas_prb.csv]
C[Application prix]
D[PT1CE_CORRIDORS_*]
E[Détection]
F[PT1CE_OPTIMAL_*]
end
subgraph "PT1CE - Étape 2"
G[corrections_*.csv]
H[Update corridors]
end
subgraph "PT1CE - Étape 3"
I[Export SAP]
J[Excel files]
end
A1 --> C
A2 --> C
A3 --> C
B --> C
C --> D
D --> E
E --> F
G --> H
H --> D
F --> I
A4 --> I
I --> J
style B fill:#90ee90
style G fill:#ffa500
style J fill:#87ceeb
Détail du calcul des bornes¶
graph LR
A[Écart historique] --> B[Plus Nouveau PAS]
B --> C{< PAS?}
C -->|OUI| D[Borne = PAS]
C -->|NON| E{Supérieur à PRB?}
E -->|OUI| F[Borne = PRB]
E -->|NON| G[Borne = Calcul]
style D fill:#ff9999
style F fill:#ff9999
style G fill:#99ff99