Aller au contenu

Diagrammes de flux - PT0CE

Table des matières

  1. Vue d'ensemble du processus
  2. Flux d'enrichissement des données
  3. Processus de calcul des cubes
  4. Algorithme de remontée hiérarchique
  5. Calcul des bornes de prix
  6. Analyse de sensibilité
  7. 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