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 :
Causes possibles :
- Fichier CSV mal formaté
- Colonnes renommées ou supprimées
- Mauvais séparateur
Solution :
Erreurs de connexion Oracle¶
❌ "Connexion Oracle perdue pendant le calcul"¶
Symptôme :
Solutions :
1. Augmenter le timeout Oracle :
-
Vérifier les paramètres réseau
-
Réduire la taille des batches dans le code
Problèmes de volumétrie¶
⚠️ "Mémoire insuffisante"¶
Symptôme :
Solutions :
1. Traiter par univers séparément
2. Réduire la période d'analyse
3. Augmenter la RAM Python :
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¶
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 :
❌ Erreur :