Aller au contenu

Workflow détaillé - PT1CE

Table des matières

  1. Vue d'ensemble du workflow
  2. Étape 1 : Application des nouveaux prix
  3. Étape 2 : Corrections manuelles
  4. Étape 3 : Export SAP
  5. Modes d'exécution
  6. 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 :

  1. Récupération de l'écart historique

    ECART_PL1_PL2_PAS = BORNE_PL1_PL2 - PAS_ACTIF
    

  2. Application sur nouveau PAS

    NEW_BORNE_PL1_PL2 = NEW_PAS + ECART_PL1_PL2_PAS
    

  3. Application des contraintes

    IF NEW_BORNE < NEW_PAS THEN NEW_PAS
    IF NEW_BORNE > PRB THEN PRB
    

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 : À corriger
  • corridors_ecart_type_eleve.csv : Écart-type > 10%
  • corridors_optimaux.csv : Corridors valides
  • evolution_par_type_client.csv : Impact par segment
  • evolution_par_type_restaurant.csv : Impact par type
  • quality_metrics.csv : Métriques globales
  • distribution_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

  1. Upload dans table temporaire

    CREATE TABLE TEMP_CORRECTIONS_ZOOM1 (
        ID_ART VARCHAR2(50),
        TYPE_CLIENT VARCHAR2(100),
        TYPE_RESTAURANT VARCHAR2(100),
        GEO VARCHAR2(100),
        NEW_BORNE_PL1_PL2 NUMBER,
        -- etc.
    )
    

  2. Update des corridors

    UPDATE PT1CE_CORRIDORS_ZOOM1 t
    SET NEW_BORNE_PL1_PL2 = (
        SELECT c.NEW_BORNE_PL1_PL2
        FROM TEMP_CORRECTIONS_ZOOM1 c
        WHERE t.ID_ART = c.ID_ART
          AND t.TYPE_CLIENT = c.TYPE_CLIENT
          -- etc.
    )
    WHERE EXISTS (...)
    

  3. Re-détection

  4. Relance du processus de détection
  5. Mise à jour des tables OPTIMAL
  6. 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

1_appliquer_nouveaux_prix.bat

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

2_appliquer_corrections.bat

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

3_exporter_format_sap.bat

Caractéristiques :
- Utilise les tables PT1CE_OPTIMAL existantes
- Pas de recalcul
- Génération directe des Excel
- --export-sap-only activé

Mode interactif : Menu

PT1CE_Menu.bat

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