Diagrammes de flux - PT0CE
Table des matières
- Vue d'ensemble du processus
- Flux d'enrichissement des données
- Processus de calcul des cubes
- Algorithme de remontée hiérarchique
- Calcul des bornes de prix
- Analyse de sensibilité
- Cycle de vie des tables
Vue d'ensemble du processus
graph TB
Start([Début PT0CE]) --> CheckCSV{Fichiers CSV<br/>présents ?}
CheckCSV -->|Non| Error[Erreur]
CheckCSV -->|Oui| LoadConfig[Charger configuration]
LoadConfig --> GetPeriod[Déterminer période<br/>4 derniers trimestres]
GetPeriod --> Phase1[Phase 1: Extraction PAS/PRB]
Phase1 --> Phase2[Phase 2: Enrichissement Master Data]
Phase2 --> Phase3[Phase 3: Calcul des cubes]
Phase3 --> Phase4[Phase 4: Calcul des corridors]
Phase4 --> Phase5[Phase 5: Analyse sensibilité]
Phase5 --> Phase6[Phase 6: Création tables finales]
Phase6 --> Cleanup[Nettoyage tables temporaires]
Cleanup --> End([Fin])
style Phase1 fill:#e1f5fe
style Phase2 fill:#e1f5fe
style Phase3 fill:#e1f5fe
style Phase4 fill:#e1f5fe
style Phase5 fill:#e1f5fe
style Phase6 fill:#e1f5fe
Flux d'enrichissement des données
graph LR
subgraph "Sources CSV"
TC[Type_Client.csv]
TR[Type_Restaurant.csv]
end
subgraph "Tables Oracle"
TCM[PT0CE_TYPE_CLIENT_MAPPING]
TRM[PT0CE_TYPE_RESTAURANT_MAPPING]
end
subgraph "Transactions"
SF[SYS_FACTURE_LIGNE]
SC[SYS_MD_CLIENT]
SA[SYS_MD_ARTICLE]
end
subgraph "Enrichissement"
E1[FG_HM → '0'/'1']
E2[ID_TC_CG + ID_TC_CIBLE<br/>+ FG_HM → TYPE_CLIENT]
E3[LC_SFC_CIBLE → TYPE_RESTAURANT]
E4[LC_ZDV_GRV → GEO]
E5[Règles → UNIVERS]
E6[PAS historique → MARGE_NETTE]
end
subgraph "Résultat"
MD[PT0CE_MASTER_DATA]
end
TC -->|Rechargement| TCM
TR -->|Rechargement| TRM
SF --> E1
SC --> E2
SC --> E3
SC --> E4
TCM --> E2
TRM --> E3
E1 --> E5
E2 --> E5
E1 --> MD
E2 --> MD
E3 --> MD
E4 --> MD
E5 --> MD
E6 --> MD
style TC fill:#fff2cc
style TR fill:#fff2cc
style MD fill:#d4edda
Processus de calcul des cubes
graph TD
subgraph "Données Master"
MD[Master Data<br/>avec marge nette]
end
subgraph "Calcul ZOOM1"
Z1A[Agrégation par<br/>ID_ART × TYPE_CLIENT<br/>× TYPE_RESTAURANT × GEO]
Z1B[Calcul statistiques<br/>si ≥ 30 marges]
Z1C[Cubes MASTER]
Z1D[Génération<br/>cubes NATIONAL]
Z1A --> Z1B
Z1B --> Z1C
Z1A --> Z1D
end
subgraph "Calcul ZOOM2"
Z2[Même processus<br/>avec GEO]
end
subgraph "Calcul ZOOM3"
Z3[Même processus<br/>sans GEO]
end
MD --> Z1A
MD --> Z2
MD --> Z3
subgraph "Résultats"
C1[PT0CE_CUBES_ZOOM1]
C2[PT0CE_CUBES_ZOOM2]
C3[PT0CE_CUBES_ZOOM3]
end
Z1C --> C1
Z1D --> C1
Z2 --> C2
Z3 --> C3
style MD fill:#e3f2fd
style C1 fill:#c8e6c9
style C2 fill:#c8e6c9
style C3 fill:#c8e6c9
Algorithme de remontée hiérarchique
graph TD
Start[Cube MASTER<br/>à traiter] --> Check{Type = NATIONAL ?}
Check -->|Oui| SetNat[SOURCE_LEVEL = -1<br/>SOURCE_TYPE = 'NATIONAL']
Check -->|Non| L1{Niveau 1<br/>≥ 30 marges ?}
L1 -->|Oui| Found1[SOURCE_LEVEL = 1<br/>Utiliser stats niveau 1]
L1 -->|Non| L2{Niveau 2<br/>≥ 30 marges ?}
L2 -->|Oui| Found2[SOURCE_LEVEL = 2<br/>Utiliser stats niveau 2]
L2 -->|Non| L3{Niveau 3<br/>≥ 30 marges ?}
L3 -->|Non| Continue[...]
Continue --> LN{Niveau N<br/>≥ 30 marges ?}
LN -->|Oui| FoundN[SOURCE_LEVEL = N<br/>Utiliser stats niveau N]
LN -->|Non| NoData[SOURCE_LEVEL = 22<br/>SOURCE_TYPE = 'NO_DATA']
SetNat --> End[Fin]
Found1 --> End
Found2 --> End
FoundN --> End
NoData --> End
style Start fill:#fff2cc
style SetNat fill:#d4edda
style Found1 fill:#d4edda
style Found2 fill:#d4edda
style FoundN fill:#d4edda
style NoData fill:#f8d7da
Détail des niveaux (ZOOM½)
graph LR
subgraph "Niveaux 1-3 (ID_ART)"
N1[1: ART×TC×TR×GEO]
N2[2: ART×TC×TR]
N3[3: ART×TC]
end
subgraph "Niveaux 4-6 (HIE_N6)"
N4[4: N6×TC×TR×GEO]
N5[5: N6×TC×TR]
N6[6: N6×TC]
end
subgraph "..."
N7[...]
end
subgraph "Niveaux 19-21 (HIE_N1)"
N19[19: N1×TC×TR×GEO]
N20[20: N1×TC×TR]
N21[21: N1×TC]
end
N1 -->|Pas assez<br/>de données| N2
N2 --> N3
N3 --> N4
N6 --> N7
N7 --> N19
N21 -->|Aucune<br/>donnée| N22[22: NO_DATA]
style N1 fill:#e3f2fd
style N22 fill:#ffebee
Calcul des bornes de prix
graph TD
subgraph "Entrées"
P[Percentiles<br/>P10 à P90]
PAS[PAS actif]
PRB[PRB approprié<br/>selon PRB_TO_USE]
end
subgraph "Calcul pour chaque borne"
F1[Formule de base<br/>Borne = PAS / 1 - P]
C1{Borne < PAS ?}
C1 -->|Oui| Min[Borne = PAS]
C1 -->|Non| C2{Borne > PRB ?}
C2 -->|Oui| Max[Borne = PRB]
C2 -->|Non| Keep[Garder borne calculée]
Min --> Final[Borne finale]
Max --> Final
Keep --> Final
end
subgraph "Résultat"
B1[BORNE_PL1_PL2<br/>P90]
B2[BORNE_PL2_PL3<br/>P80]
B3[BORNE_PL3_PL4<br/>P60]
B4[BORNE_PL4_PL5<br/>P50]
B5[BORNE_PL5_PL6<br/>P30]
B6[BORNE_PL6_PLX<br/>P10]
end
P --> F1
PAS --> F1
PRB --> C2
Final --> B1
Final --> B2
Final --> B3
Final --> B4
Final --> B5
Final --> B6
style F1 fill:#fff2cc
style Final fill:#d4edda
Analyse de sensibilité
graph LR
subgraph "Données cube"
CD[Transactions<br/>du cube]
end
subgraph "Étape 1: Métriques"
M1[Nb commandes<br/>par article]
M2[CA par article]
M3[Ratio fréquence]
end
subgraph "Étape 2: Classification F"
F1[Top 25%<br/>→ F1]
F2[Reste<br/>→ F2]
end
subgraph "Étape 3: Classification S"
S1[Tri par CA desc]
S2[Cumul 70%<br/>→ S1]
S3[Reste<br/>→ S2]
end
subgraph "Étape 4: Matrice"
MH[F1×S1 → HIGH]
MM1[F1×S2 → MEDIUM]
MM2[F2×S1 → MEDIUM]
ML[F2×S2 → LOW]
end
CD --> M1
CD --> M2
M1 --> M3
M3 --> F1
M3 --> F2
M2 --> S1
S1 --> S2
S1 --> S3
F1 --> MH
F1 --> MM1
F2 --> MM2
F2 --> ML
S2 --> MH
S2 --> MM2
S3 --> MM1
S3 --> ML
style MH fill:#ffcccc
style MM1 fill:#fff4cc
style MM2 fill:#fff4cc
style ML fill:#ccffcc
Cycle de vie des tables
stateDiagram-v2
[*] --> CSVFiles: Début
state "Fichiers CSV" as CSVFiles {
Type_Client.csv
Type_Restaurant.csv
}
state "Tables de mapping" as Mapping {
PT0CE_TYPE_CLIENT_MAPPING
PT0CE_TYPE_RESTAURANT_MAPPING
}
state "Tables temporaires" as Temp {
PT0CE_PAS_PRB_*_HISTORY
PT0CE_PAS_PRB_*
PT0CE_MASTER_DATA_*
PT0CE_CUBES_*
PT0CE_CORRIDORS_*
PT0CE_PRICE_SENSITIVITY_*
}
state "Tables conservées" as Keep {
PT0CE_DIMENSION_MAPPING_YYYYMMDD
}
state "Tables finales" as Final {
PT0CE_CORRIDOR_HISTORY_ZOOM1
PT0CE_CORRIDOR_HISTORY_ZOOM2
PT0CE_CORRIDOR_HISTORY_ZOOM3
}
CSVFiles --> Mapping: Rechargement<br/>à chaque run
Mapping --> Temp: Enrichissement
Temp --> Keep: Pour PT1CE
Temp --> Final: Fusion finale
Temp --> [*]: Suppression
Final --> [*]: Remplacées au<br/>prochain run
Timeline d'exécution
gantt
title Timeline d'exécution PT0CE
dateFormat HH:mm
axisFormat %H:%M
section Initialisation
Validation CSV :done, init1, 00:00, 1m
Chargement config :done, init2, after init1, 1m
Calcul période :done, init3, after init2, 2m
section Phase 1
Extraction PAS history :active, pas1, after init3, 15m
Extraction PAS/PRB actifs :active, pas2, after pas1, 5m
section Phase 2
Chargement mappings :active, map1, after pas2, 2m
Enrichissement data :active, enr1, after map1, 20m
Calcul marge nette :active, enr2, after enr1, 10m
section Phase 3
Calcul cubes ZOOM1 :active, cube1, after enr2, 10m
Calcul cubes ZOOM2 :active, cube2, after cube1, 10m
Calcul cubes ZOOM3 :active, cube3, after cube2, 8m
section Phase 4
Corridors ZOOM1 :active, cor1, after cube3, 15m
Corridors ZOOM2 :active, cor2, after cor1, 15m
Corridors ZOOM3 :active, cor3, after cor2, 12m
section Phase 5
Sensibilité ZOOM1 :active, sens1, after cor3, 5m
Sensibilité ZOOM2 :active, sens2, after sens1, 5m
Sensibilité ZOOM3 :active, sens3, after sens2, 4m
section Finalisation
Création tables finales :done, final, after sens3, 10m
Nettoyage :done, clean, after final, 3m