Aller au contenu

Workflow détaillé - PT0CE

Vue d'ensemble du processus

PT0CE suit un workflow en 6 phases pour calculer les corridors de prix optimaux basés sur l'analyse des marges nettes historiques.

graph TB
    Start([Début PT0CE]) --> Validation[Validation des inputs]
    Validation --> 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: Tables finales]
    Phase6 --> End([Fin])

    style Phase1 fill:#FFF7ED,stroke:#F97316,stroke-width:2px
    style Phase2 fill:#FED7AA,stroke:#EA580C,stroke-width:2px
    style Phase3 fill:#FDBA74,stroke:#F97316,stroke-width:2px
    style Phase4 fill:#FB923C,stroke:#EA580C,stroke-width:2px
    style Phase5 fill:#F97316,stroke:#EA580C,stroke-width:2px,color:#fff
    style Phase6 fill:#EA580C,stroke:#C2410C,stroke-width:2px,color:#fff

Phase 0 : Initialisation et validation

Détermination de la période d'analyse

PT0CE analyse automatiquement les 4 derniers trimestres fiscaux complets :

graph LR
    A[Date référence] --> B[Calendrier fiscal]
    B --> C{Trimestre<br/>en cours?}
    C -->|Exclure| D[4 trimestres<br/>précédents]
    D --> E[Période analyse]

    style A fill:#FFF7ED,stroke:#F97316
    style E fill:#F97316,stroke:#EA580C,color:#fff

Validation des fichiers CSV

Deux fichiers CSV sont obligatoires dans le dossier inputs/ :

📁 Fichiers requis
- Type_Client.csv : Mapping des types clients avec univers et PRB
- Type_Restaurant.csv : Mapping des types restaurants

Phase 1 : Extraction PAS/PRB

Objectif

Extraire l'historique des Prix d'Achat Standard (PAS) et Prix de Référence Brut (PRB) pour chaque article.

Tables créées

graph TD
    A[SYS_MD_CONDITION] --> B[PT0CE_PAS_PRB_HISTORY]
    A --> C[PT0CE_PAS_PRB_ACTIFS]

    B --> D[PAS jour par jour<br/>sur la période]
    C --> E[PAS/PRB actifs<br/>derniers en date]

    style B fill:#FED7AA,stroke:#F97316
    style C fill:#FED7AA,stroke:#F97316

Détail du processus

  1. Historique PAS : Une ligne par article × jour avec le PAS applicable
  2. PAS/PRB actifs : Dernières valeurs en vigueur pour le calcul des bornes
  3. Types de PRB :
  4. PRB RC (Restaurant Commercial) : ID_TAR = '01'
  5. PRB COLL (Collectivités) : ID_TAR = '02'

Phase 2 : Enrichissement Master Data

Objectif

Enrichir les transactions avec les dimensions métier et calculer la marge nette.

Processus d'enrichissement

graph TD
    A[SYS_FACTURE_LIGNE] --> B[Jointure mappings]
    B --> C[Calcul UNIVERS]
    C --> D[Calcul marge nette]
    D --> E[PT0CE_MASTER_DATA]

    F[Type_Client.csv] --> G[PT0CE_TYPE_CLIENT_MAPPING]
    H[Type_Restaurant.csv] --> I[PT0CE_TYPE_RESTAURANT_MAPPING]

    G --> B
    I --> B

    style E fill:#F97316,stroke:#EA580C,color:#fff
    style G fill:#FFF7ED,stroke:#F97316
    style I fill:#FFF7ED,stroke:#F97316

Calcul de la marge nette

📊 Formule de la marge nette

Marge nette = (Prix vente unitaire - PAS unitaire) / Prix vente unitaire

Où :
- Prix vente unitaire = MT_CAB / QT_UF
- PAS unitaire = PAS historique au moment de la transaction

Détermination des univers

Les transactions sont classées dans 3 univers selon des règles métier précises :

  • ZOOM1 : Clients indépendants et petites structures
  • ZOOM2 : Grands comptes régionaux + RSI Marché
  • ZOOM3 : Grands comptes nationaux

Phase 3 : Calcul des cubes

Types de cubes

graph TD
    A[Transactions enrichies] --> B[Agrégation]
    B --> C{Type de cube}

    C -->|Par dimensions| D[Cubes MASTER]
    C -->|Par article uniquement| E[Cubes NATIONAL]

    D --> F[Article × Type_Client<br/>× Type_Restaurant × Geo]
    E --> G[Article uniquement<br/>toutes transactions]

    style D fill:#F97316,stroke:#EA580C,color:#fff
    style E fill:#DC2626,stroke:#B91C1C,color:#fff

Métriques calculées

Pour chaque cube, calcul de :
- Statistiques de base : Nombre de transactions, CA total, volume
- Percentiles de marge : P10, P30, P40, P50, P60, P80, P90
- Indicateurs : Écart-type, marges distinctes

Seuil de fiabilité

⚠️ Seuil minimum

Un cube doit avoir au moins 30 marges distinctes pour être considéré comme fiable.
Sinon → remontée hiérarchique nécessaire

Phase 4 : Calcul des corridors

Remontée hiérarchique

Pour les cubes MASTER avec données insuffisantes :

graph TD
    A[Cube MASTER] --> B{≥ 30 marges?}
    B -->|Non| C[Niveau 1: ID_ART × toutes dims]
    B -->|Oui| Z[Utiliser statistiques]

    C --> D{≥ 30 marges?}
    D -->|Non| E[Niveau 2: ID_ART × dims réduites]
    D -->|Oui| Z

    E --> F{≥ 30 marges?}
    F -->|Non| G[Niveau 3-6: HIE_N6...]
    F -->|Oui| Z

    G --> H[...]
    H --> I[Niveau 19-21: HIE_N1]

    style A fill:#F97316,stroke:#EA580C,color:#fff
    style Z fill:#10B981,stroke:#059669,color:#fff

Calcul des bornes de prix

📐 Formule des bornes

Borne = PAS actif / (1 - Percentile de marge)

Avec contraintes :
- Borne ≥ PAS actif (contrainte minimale)
- Borne ≤ PRB approprié (contrainte maximale)

Tableau des bornes

Borne Percentile Description
PL1/PL2 P90 PVC
PL2/PL3 P80 Paliers intermédiaires
PL3/PL4 P60 Paliers intermédiaires
PL4/PL5 P50 Paliers intermédiaires
PL5/PL6 P30 Paliers intermédiaires
PL6/PLX P10 Seuil de dérogation

Phase 5 : Analyse de sensibilité prix

Classification bidimensionnelle

graph TD
    A[Articles du cube] --> B[Classification Fréquence]
    A --> C[Classification Ventes]

    B --> D[F1: Top 25%<br/>plus commandés]
    B --> E[F2: Reste 75%]

    C --> F[S1: 70% du CA<br/>Principe Pareto]
    C --> G[S2: 30% restant]

    D --> H[Matrice de<br/>sensibilité]
    E --> H
    F --> H
    G --> H

    style H fill:#DC2626,stroke:#B91C1C,color:#fff

Matrice de sensibilité

Fréquence × Ventes Sensibilité
F1 × S1 HIGH - Articles critiques
F1 × S2 MEDIUM - Fréquents mais CA limité
F2 × S1 MEDIUM - Rares mais gros volumes
F2 × S2 LOW - Articles peu critiques

Phase 6 : Création des tables finales

Tables de sortie

graph TD
    A[Corridors + Sensibilité] --> B[Fusion des données]
    B --> C[PT0CE_CORRIDOR_HISTORY_ZOOM1]
    B --> D[PT0CE_CORRIDOR_HISTORY_ZOOM2]
    B --> E[PT0CE_CORRIDOR_HISTORY_ZOOM3]

    F[PT0CE_DIMENSION_MAPPING] --> G[Conservée pour PT1CE]

    style C fill:#EA580C,stroke:#C2410C,color:#fff
    style D fill:#EA580C,stroke:#C2410C,color:#fff
    style E fill:#EA580C,stroke:#C2410C,color:#fff
    style G fill:#10B981,stroke:#059669,color:#fff

Contenu des tables finales

Chaque table CORRIDOR_HISTORY contient : - Identifiants : Article, dimensions du corridor
- Métriques : CA, transactions, statistiques de marge
- Bornes de prix : PL1/PL2 à PL6/PLX avec écarts au PAS
- Métadonnées : Source level, type de cube, sensibilité prix

Nettoyage

Toutes les tables temporaires sont supprimées sauf :
- PT0CE_DIMENSION_MAPPING_YYYYMMDD : Nécessaire pour PT1CE
- PT0CE_TYPE_CLIENT_MAPPING : Rechargée à chaque run
- PT0CE_TYPE_RESTAURANT_MAPPING : Rechargée à chaque run

Points de contrôle qualité

Validation continue

À chaque phase, PT0CE vérifie :

Cohérence des données :
- Bornes croissantes (PL1 < PL2 < ... < PLX)
- Respect des contraintes min/max
- Présence des données obligatoires

Volumétrie :
- Nombre de transactions traitées
- Nombre de cubes générés
- Taux de remontée hiérarchique

Performance :
- Temps de traitement par phase
- Utilisation mémoire
- Keep-alive Oracle

Logs détaillés

✓ Phase 1: 125,432 articles avec PAS
✓ Phase 2: 8,456,234 lignes extraites
✓ Phase 3: 45,678 cubes master + 12,345 cubes nationaux
✓ Phase 4: 87% des cubes avec bornes calculées
✓ Phase 5: Distribution sensibilité: HIGH 15%, MEDIUM 35%, LOW 50%
✓ Phase 6: Tables finales créées avec succès