Aller au contenu

Troubleshooting - PT0CE

Erreurs fréquentes et solutions

Erreurs au démarrage

❌ "Fichiers CSV manquants ou invalides"

Symptôme :

ERREUR CRITIQUE: Fichiers CSV manquants ou invalides
Les fichiers suivants sont OBLIGATOIRES dans le dossier 'inputs':
  - Type_Client.csv
  - Type_Restaurant.csv

Solutions :
1. Vérifier la présence des fichiers dans inputs/
2. Vérifier le format (séparateur ;)
3. Vérifier l'encodage (UTF-8 recommandé)
4. Vérifier les colonnes obligatoires

❌ "Colonnes manquantes dans Type_Client.csv"

Symptôme :

Colonnes manquantes dans Type_Client.csv: {'PRB'}

Causes possibles :
- Fichier CSV mal formaté
- Colonnes renommées ou supprimées
- Mauvais séparateur

Solution :

Type_Client;Univers;ID_TC_CG;ID_TC_CIBLE;FG_HM;PRB
RCI PI GI;ZOOM1;RCI;PINDEP;X;1

Erreurs de connexion Oracle

❌ "Connexion Oracle perdue pendant le calcul"

Symptôme :

Connexion Oracle perdue: ORA-03135: connection lost contact

Solutions :
1. Augmenter le timeout Oracle :

ALTER SYSTEM SET SQLNET.EXPIRE_TIME=10 SCOPE=BOTH;

  1. Vérifier les paramètres réseau

  2. Réduire la taille des batches dans le code

Problèmes de volumétrie

⚠️ "Mémoire insuffisante"

Symptôme :

MemoryError: Unable to allocate array

Solutions :
1. Traiter par univers séparément
2. Réduire la période d'analyse
3. Augmenter la RAM Python :

set PYTHONMALLOC=malloc

Problèmes de données

❌ "Aucune donnée trouvée pour la période"

Vérification :

-- Vérifier les données disponibles
SELECT 
    MIN(DT_CDE) as DEBUT,
    MAX(DT_CDE) as FIN,
    COUNT(*) as NB_LIGNES
FROM SYS_FACTURE_LIGNE
WHERE DT_CDE >= ADD_MONTHS(SYSDATE, -15);

⚠️ "Beaucoup de SOURCE_TYPE = 'NO_DATA'"

Diagnostic :

-- Analyser la distribution
SELECT 
    SOURCE_TYPE,
    SOURCE_LEVEL,
    COUNT(*) as NB,
    ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER(), 2) as PCT
FROM PT0CE_CORRIDOR_HISTORY_ZOOM1
WHERE CUBE_TYPE = 'MASTER'
GROUP BY SOURCE_TYPE, SOURCE_LEVEL
ORDER BY COUNT(*) DESC;

Causes possibles :
- Articles nouveaux sans historique
- Segments clients très spécifiques
- Seuil de 30 marges trop élevé

Incohérences dans les résultats

❌ "Bornes de prix non croissantes"

Vérification :

SELECT * FROM PT0CE_CORRIDOR_HISTORY_ZOOM1
WHERE BORNE_PL1_PL2 > BORNE_PL2_PL3
   OR BORNE_PL2_PL3 > BORNE_PL3_PL4
   -- etc.

Causes :
- Percentiles identiques
- Contraintes PRB trop basses
- Erreur de calcul

❌ "Bornes inférieures au PAS"

Diagnostic :

SELECT * FROM PT0CE_CORRIDOR_HISTORY_ZOOM1
WHERE BORNE_PL1_PL2 < PAS_ACTIF
   OR BORNE_PL6_PLX < PAS_ACTIF;

Solution : Vérifier la logique de contrainte minimale

Problèmes de mapping

❌ "Type_Client = 'Hors référentiel'"

Impact : Ces lignes sont exclues du calcul

Diagnostic :

-- Identifier les clients non mappés
SELECT 
    c.ID_TC_CG,
    c.ID_TC_CIBLE,
    c.LC_CLN,
    COUNT(*) as NB_TRANS,
    SUM(f.MT_CAB) as CA_PERDU
FROM SYS_FACTURE_LIGNE f
JOIN SYS_MD_CLIENT c ON f.ID_CLN_KEY = c.ID_CLN_KEY
LEFT JOIN PT0CE_TYPE_CLIENT_MAPPING m
    ON c.ID_TC_CG = m.ID_TC_CG
    AND c.ID_TC_CIBLE = m.ID_TC_CIBLE
WHERE m.TYPE_CLIENT IS NULL
  AND f.DT_CDE >= ADD_MONTHS(SYSDATE, -3)
GROUP BY c.ID_TC_CG, c.ID_TC_CIBLE, c.LC_CLN
ORDER BY CA_PERDU DESC;

Solution : Ajouter les mappings manquants dans Type_Client.csv

Validation des résultats

Contrôles de cohérence

1. Vérifier la complétude

-- Articles sans corridors
SELECT a.ID_ART, a.LC_ART
FROM SYS_MD_ARTICLE a
WHERE a.FG_ACT = '1'
  AND NOT EXISTS (
    SELECT 1 FROM PT0CE_CORRIDOR_HISTORY_ZOOM1 c
    WHERE c.ID_ART = a.ID_ART
  );

2. Analyser les remontées

-- Distribution des niveaux de remontée
WITH stats AS (
    SELECT 
        CASE 
            WHEN SOURCE_LEVEL = -1 THEN '0. NATIONAL'
            WHEN SOURCE_LEVEL = 1 THEN '1. Exact'
            WHEN SOURCE_LEVEL BETWEEN 2 AND 3 THEN '2. Article réduit'
            WHEN SOURCE_LEVEL BETWEEN 4 AND 9 THEN '3. Hiérarchie haute'
            WHEN SOURCE_LEVEL BETWEEN 10 AND 21 THEN '4. Hiérarchie basse'
            WHEN SOURCE_LEVEL = 22 THEN '5. Aucune donnée'
        END as NIVEAU_GROUPE,
        COUNT(*) as NB_CUBES,
        SUM(CA_TOTAL) as CA_TOTAL
    FROM PT0CE_CORRIDOR_HISTORY_ZOOM1
    WHERE CUBE_TYPE = 'MASTER'
    GROUP BY 
        CASE 
            WHEN SOURCE_LEVEL = -1 THEN '0. NATIONAL'
            WHEN SOURCE_LEVEL = 1 THEN '1. Exact'
            WHEN SOURCE_LEVEL BETWEEN 2 AND 3 THEN '2. Article réduit'
            WHEN SOURCE_LEVEL BETWEEN 4 AND 9 THEN '3. Hiérarchie haute'
            WHEN SOURCE_LEVEL BETWEEN 10 AND 21 THEN '4. Hiérarchie basse'
            WHEN SOURCE_LEVEL = 22 THEN '5. Aucune donnée'
        END
)
SELECT 
    NIVEAU_GROUPE,
    NB_CUBES,
    ROUND(100.0 * NB_CUBES / SUM(NB_CUBES) OVER(), 2) as PCT_CUBES,
    CA_TOTAL,
    ROUND(100.0 * CA_TOTAL / SUM(CA_TOTAL) OVER(), 2) as PCT_CA
FROM stats
ORDER BY NIVEAU_GROUPE;

Indicateurs de qualité

Cas particuliers

Articles saisonniers

Problème : Pas assez de données sur 4 trimestres

Solution :

-- Identifier les articles saisonniers
SELECT 
    ID_ART,
    LC_ART,
    COUNT(DISTINCT TO_CHAR(DT_CDE, 'MM')) as NB_MOIS_ACTIFS
FROM SYS_FACTURE_LIGNE
WHERE DT_CDE >= ADD_MONTHS(SYSDATE, -12)
GROUP BY ID_ART, LC_ART
HAVING COUNT(DISTINCT TO_CHAR(DT_CDE, 'MM')) < 6
ORDER BY NB_MOIS_ACTIFS;

Nouveaux clients/articles

Problème : Pas d'historique disponible

Solutions :
1. Utiliser les cubes NATIONAL comme référence
2. Appliquer les corridors de produits similaires
3. Attendre 1-2 trimestres pour avoir des données

Clients multi-univers

Problème : Un client peut avoir des sites dans différents univers

Gestion :

-- Identifier les clients multi-univers
WITH client_univers AS (
    SELECT DISTINCT
        ID_CLN,
        CATEGORY
    FROM PT0CE_CORRIDOR_HISTORY_ZOOM1
)
SELECT 
    ID_CLN,
    LISTAGG(CATEGORY, ', ') WITHIN GROUP (ORDER BY CATEGORY) as UNIVERS
FROM client_univers
GROUP BY ID_CLN
HAVING COUNT(DISTINCT CATEGORY) > 1;

Logs et diagnostic

Activer les logs détaillés

# Dans pt0ce_main.py
app.log.setLevel(logging.DEBUG)

Messages clés à surveiller

Normal :

✓ Phase 1: 125,432 articles avec PAS
✓ Phase 2: 8,456,234 lignes extraites
✓ Phase 3: 45,678 cubes master + 12,345 cubes nationaux

⚠️ Attention :

⚠️ 15,234 lignes avec Type_Client = 'Hors référentiel'
⚠️ 2,345 cubes avec SOURCE_LEVEL > 15

Erreur :

❌ Connexion Oracle perdue
❌ Mémoire insuffisante
❌ Aucune donnée trouvée