← Retour

📖 Documentation Technique V2

SystĂšme de Regroupement Intelligent des Sites et PRM

🎯 SOLUTION V2 : Regroupement Intelligent des PRM par C68 + Rattachements ENEDIS

📌 RĂ©sumĂ© ExĂ©cutif

ProblÚme Identifié

Des PRM qui devraient ĂȘtre regroupĂ©s ensemble se retrouvent dans des sites diffĂ©rents, crĂ©ant une organisation incorrecte de la hiĂ©rarchie SociĂ©tĂ© → Sites → PRM. Exemple concret LINEX :
  • Site #134 "LINEX USINE" → PRM 30000230176430
  • Site #135 "LINEX PROD" → PRM 50088783673630
  • MĂȘme adresse (76190 ALLOUVILLE BELLEFOSSE) mais 2 sites sĂ©parĂ©s ❌
  • Pourtant : rattachement RI officiel ENEDIS entre ces 2 PRM ! ✅
  • Solution DĂ©ployĂ©e

    SystÚme de regroupement intelligent V2 utilisant 3 niveaux de critÚres hiérarchisés pour recréer une structure optimale basée sur les données officielles ENEDIS C68 et les rattachements RI. ---

    🔑 CritĂšres de Regroupement (Par Ordre de PrioritĂ©)

    1ïžâƒŁ Rattachements ENEDIS RI ⭐ PRIORITÉ MAXIMALE

    Source : Table c68_rattachements CritĂšre : type_rattachement = 'RI' (Raccordement Interne) Badge : ✅ Vert (validĂ© automatiquement) Principe :
  • ENEDIS dĂ©clare officiellement des liens entre PRM (ex: PRM principal ↔ PRM secondaire)
  • Ces PRM doivent absolument ĂȘtre dans le mĂȘme site
  • Identifiant de groupe : PRM de tĂȘte (celui qui est dans prm_id_rattache)
  • Exemple LINEX :
    Table c68_rattachements:
    ┌─────────────────┬──────────────────┬──────────────────┬──────────────────────┐
    │ idPrm           │ prm_id_rattache  │ type_rattachement│ type_point_rattache  │
    ├─────────────────┌──────────────────┌──────────────────┌───────────────────────
    │ 30000230176430  │ 50088783673630   │ RI               │ INT                  │
    └─────────────────┮──────────────────┮──────────────────┮──────────────────────┘
    
    Résultat V2:
    → ClĂ© de regroupement: RATT_523_50088783673630
    → Les 2 PRM dans LE MÊME site V2
    → validation_status = 'validĂ©_auto'
    
    Avantages :
  • ✅ DonnĂ©e officielle ENEDIS
  • ✅ Lien technique certifiĂ©
  • ✅ FiabilitĂ© maximale (pas besoin de vĂ©rification manuelle)
  • Logique technique :
  • RĂ©cupĂ©rer tous les PRM rattachĂ©s → identifier le prm_id_rattache (PRM de tĂȘte)
  • Ajouter aussi les PRM de tĂȘte avec eux-mĂȘmes comme groupe
  • ClĂ© unique : RATT_{ID_SOCIETE}_{PRM_TETE}
  • RĂ©sultat : PRM principal + tous ses rattachĂ©s = 1 seul site V2
  • ---

    2ïžâƒŁ Adresse ComplĂšte C68 ⚠ PRIORITÉ MOYENNE

    Source : Table c68 CritĂšre : numeroNomVoie + codePostal + commune (tous non vides) Badge : ⚠ Orange (Ă  vĂ©rifier) Principe :
  • Si pas de rattachement RI, on regroupe par adresse exacte
  • Distingue les bĂątiments diffĂ©rents sur une mĂȘme commune
  • Exemple :
    PRM A : "ZA Caux Multipoles BĂątiment A" - 76190 ALLOUVILLE BELLEFOSSE
    PRM B : "ZA Caux Multipoles BĂątiment B" - 76190 ALLOUVILLE BELLEFOSSE
    → ClĂ© ADR_523_ZA Caux Multipoles BĂątiment A_76190_ALLOUVILLE BELLEFOSSE
    → 2 sites V2 distincts (adresses diffĂ©rentes)
    
    Avantages :
  • ✅ PrĂ©cision : Distingue les bĂątiments/adresses
  • ✅ DonnĂ©es C68 ENEDIS structurĂ©es
  • Limites :
  • ⚠ QualitĂ© variable selon la saisie C68
  • ⚠ NĂ©cessite vĂ©rification manuelle
  • ---

    3ïžâƒŁ C68 Basique (CP + Commune) ⚠ FALLBACK - PRIORITÉ FAIBLE

    Source : Table c68 ou tbl_gpt_societe_site CritĂšre : codePostal + commune uniquement Badge : ⚠ ROUGE - ATTENTION : Regroupement imprĂ©cis, vĂ©rification OBLIGATOIRE Exemple :
    PRM A : "Rue du Moulin" - 76190 ALLOUVILLE BELLEFOSSE
    PRM B : "Avenue de la Gare" - 76190 ALLOUVILLE BELLEFOSSE
    → ⚠ RISQUE : RegroupĂ©s dans 1 site V2 alors que ce sont 2 adresses diffĂ©rentes !
    → ClĂ© C68_76190_ALLOUVILLE BELLEFOSSE
    
    Avantages :
  • ✅ Toujours disponible
  • Limites CRITIQUES :
  • ❌ IMPRÉCIS : Regroupe TOUTES les adresses d'une mĂȘme commune
  • ❌ Risque Ă©levĂ© de regroupements incorrects
  • ⚠ NÉCESSITE VÉRIFICATION MANUELLE OBLIGATOIRE
  • ---

    đŸ—ïž Architecture Technique V2

    Nouvelles Tables V2

    tbl_gpt_societe_site_v2
    ├── ID_SITE_V2 (PK AUTO_INCREMENT)
    ├── ID_SOCIETE (FK → tbl_gpt_societes)
    ├── nom_site_v2 VARCHAR(255) -- Format: "NOM_SOCIETE - CP VILLE"
    ├── cle_regroupement VARCHAR(255) -- RATT_/ADR_/C68_ + identifiant unique
    ├── CP VARCHAR(10)
    ├── ville VARCHAR(100)
    ├── adresse VARCHAR(255)
    ├── id_site_source INT -- ID du site V1 d'origine
    ├── nom_site_source VARCHAR(255) -- Nom du site V1 d'origine
    ├── nb_prm_groupes INT -- Nombre de PRM regroupĂ©s
    ├── puissance_totale DECIMAL(10,2) -- Somme des puissances souscrites
    ├── verification_status ENUM('pending', 'auto_validated', 'manually_validated', 'conflict')
    ├── date_creation TIMESTAMP
    └── INDEX(ID_SOCIETE), INDEX(cle_regroupement)
    
    tbl_gpt_societe_site_prm_v2
    ├── ID_PRM_V2 (PK AUTO_INCREMENT)
    ├── ID_SITE_V2 (FK → tbl_gpt_societe_site_v2)
    ├── idPrm VARCHAR(14) -- Identifiant PRM ENEDIS
    ├── cle_regroupement VARCHAR(255) -- MĂȘme clĂ© que le site parent
    ├── nom_site_source VARCHAR(255) -- Nom du site V1 d'origine
    ├── id_site_source INT -- ID du site V1 d'origine
    ├── puissance_souscrite DECIMAL(10,2)
    ├── rattachement_info TEXT -- Infos rattachements ENEDIS (JSON ou texte)
    ├── validate_regroupement TINYINT(1) DEFAULT 0 -- 0=non validĂ©, 1=validĂ©
    ├── date_ajout TIMESTAMP
    └── UNIQUE KEY(idPrm), INDEX(ID_SITE_V2), INDEX(cle_regroupement)
    
    tbl_gpt_societe_site_regroupement_log
    ├── ID_LOG (PK AUTO_INCREMENT)
    ├── ID_SOCIETE INT
    ├── action VARCHAR(50) -- 'migration', 'validation', 'modification'
    ├── details TEXT -- DĂ©tails de l'opĂ©ration
    ├── nb_sites_crees INT
    ├── nb_prm_regroupes INT
    └── date_action TIMESTAMP
    

    Clés de Regroupement (Format)

    Format : {PRIORITE}_{ID_SOCIETE}_{IDENTIFIANT_UNIQUE} Exemples :
  • RATT_523_50088783673630 → PrioritĂ© 1 (RI), sociĂ©tĂ© 523, PRM de tĂȘte 50088783673630
  • ADR_523_ZA Caux Multipoles_76190_ALLOUVILLE → PrioritĂ© 2 (adresse complĂšte)
  • C68_523_76190_ALLOUVILLE BELLEFOSSE → PrioritĂ© 3 (CP + commune)
  • ---

    Procédures Stockées V2

    #### 1. sp_regrouper_prm_par_c68 - Procédure Principale
    CALL sp_regrouper_prm_par_c68(
        @id_societe,         -- ID société à traiter
        @nb_sites_v2,        -- OUT: Nombre sites V2 créés
        @nb_prm_groupes,     -- OUT: Nombre PRM regroupés
        @nb_conflits         -- OUT: Nombre conflits détectés
    );
    
    Logique : Étape 1 : RĂ©cupĂ©rer les PRM rattachĂ©s
    INSERT INTO tmp_groupes_rattachement (idPrm, groupe_prm)
    SELECT r.idPrm, MIN(r.prm_id_rattache)
    FROM c68_rattachements r
    WHERE r.type_rattachement = 'RI'
    GROUP BY r.idPrm;
    
    Étape 2 : ⚠ CRITIQUE - Ajouter le PRM de tĂȘte
    -- Sans cette Ă©tape, le PRM de tĂȘte ne serait PAS dans tmp_groupes_rattachement !
    INSERT INTO tmp_groupes_rattachement (idPrm, groupe_prm)
    SELECT DISTINCT r.prm_id_rattache, r.prm_id_rattache
    FROM c68_rattachements r
    WHERE r.type_rattachement = 'RI'
    AND NOT EXISTS (
        SELECT 1 FROM tmp_groupes_rattachement t
        WHERE t.idPrm = r.prm_id_rattache
    );
    
    Étape 3 : Construire les clĂ©s de regroupement (3 prioritĂ©s)
  • PrioritĂ© 1 : RATT_{ID_SOCIETE}_{groupe_prm} pour les PRM rattachĂ©s
  • PrioritĂ© 2 : ADR_{ID_SOCIETE}_{adresse_complĂšte} si adresse disponible
  • PrioritĂ© 3 : C68_{ID_SOCIETE}_{CP}_{commune} en fallback
  • Étape 4 : CrĂ©er les sites V2 - ⚠ GROUP BY UNIQUEMENT cle_regroupement
    -- ✅ Crucial : GROUP BY seulement la clĂ© pour fusionner les sites
    GROUP BY tmp.cle_regroupement;
    
    -- ❌ Ancienne version causait des sites multiples :
    -- GROUP BY cle_regroupement, nom_site_source, id_site_source
    
    Étape 5 : Associer les PRM aux sites V2 #### 2. sp_transfert_prm_site_v2 - Transfert de PRM Permet de dĂ©placer un PRM d'un site V2 Ă  un autre avec traçabilitĂ© complĂšte. #### 3. sp_detecter_conflits_c68 - DĂ©tection des Conflits Identifie les PRM avec donnĂ©es C68 manquantes ou incohĂ©rentes. #### 4. sp_migration_complete_v2 - Migration Globale ExĂ©cute la migration complĂšte pour toutes les sociĂ©tĂ©s avec logging. ---

    đŸ–„ïž Interface Utilisateur V2

    interface_regroupement_v2.php - Dashboard Principal

    URL : http://localhost/PAM_light_P15/interface_regroupement_v2.php Features :
  • 📊 Statistiques Globales par SociĂ©tĂ©
  • - Nombre total de sites V2 - Nombre total de PRM regroupĂ©s - PRM validĂ©s vs en attente - Moyenne PRM par site
  • 🎯 Filtres AvancĂ©s
  • - Par sociĂ©tĂ© (dropdown) - Par statut de validation (tous, validĂ©s, non validĂ©s) - Conflits uniquement (checkbox) - Recherche par nom/CP/ville
  • 🎹 Badges de PrioritĂ©
  • - ✅ VERT : Rattachement ENEDIS (RATT_) - Auto-validĂ©, haute confiance - ⚠ ORANGE : Adresse complĂšte (ADR_) - VĂ©rification recommandĂ©e - ⚠ ROUGE : C68 basique (C68_) - ⚠ ATTENTION : VĂ©rification OBLIGATOIRE
  • 📋 Cartes Expandables
  • - Cliquer "đŸ‘ïž DĂ©tails" pour dĂ©plier - Affiche tous les PRM du site - Pour chaque PRM : - Nom du site V1 d'origine - Puissance souscrite - 🔗 Rattachements ENEDIS (si applicables) avec GROUP_CONCAT - Statut validation (✓ validĂ© ou ⏳ en attente)
  • ✓ Validation en 1 Clic
  • - Bouton "✓ Valider ce site" sur chaque carte - Post/Redirect/Get : Pas de warning de resoumission - Message de confirmation
  • 🏠 Navigation
  • - Bouton "🏠 Accueil" vers index.php - Lien "📖 Documentation" vers SOLUTION_REGROUPEMENT_C68.md ---

    lancer_migration_v2.php + api_migration_v2.php

    Migration initiale ou re-regroupement pour une société Affiche pour un site V2 :
  • Infos gĂ©nĂ©rales : Nom, adresse, CP, ville, puissance
  • 🔗 Rattachements ENEDIS : Section spĂ©ciale RI
  • Liste des PRM : Avec site original, validation, rattachements
  • 📜 Historique : Timeline des modifications
  • ---

    📊 Exemple Concret : LINEX PANNEAUX

    Avant (Tables V1)

    tbl_gpt_societe_site:
    ├── ID_SITE: 134 - "LINEX USINE" - 76190 ALLOUVILLE BELLEFOSSE
    │   └── PRM: 30000230176430 (Usine)
    └── ID_SITE: 135 - "LINEX PROD" - 76190 ALLOUVILLE BELLEFOSSE
        └── PRM: 50088783673630 (Production - PRM de tĂȘte)
    
    ProblĂšme : MĂȘme adresse exacte, mais 2 sites sĂ©parĂ©s ! ---

    Analyse C68 + Rattachements

    c68_rattachements:
    ├── PRM: 30000230176430 (Usine)
    │   └── prm_id_rattache: 50088783673630
    │       Type: RI (Rattachement Interne)
    │       Point: INT (Point IntermĂ©diaire)
    │
    └── PRM: 50088783673630 (Production)
        └── PRM de tĂȘte (pas de rattachement - c'est lui le point principal)
    
    🔑 DĂ©couverte : Le PRM 30000230176430 est officiellement rattachĂ© au PRM 50088783673630 selon ENEDIS ! 💡 Logique V2 :
  • PRM rattachĂ© 30000230176430 → rĂ©cupĂ©rĂ© avec son lien vers 50088783673630
  • PRM de tĂȘte 50088783673630 → DOIT aussi ĂȘtre inclus avec lui-mĂȘme comme groupe
  • Les 2 PRM reçoivent la mĂȘme clĂ© de regroupement : RATT_523_50088783673630
  • RĂ©sultat : 1 seul site V2 contenant les 2 PRM
  • ---

    AprĂšs (Tables V2)

    tbl_gpt_societe_site_v2:
    └── ID_SITE_V2: 1 - "LINEX - 76190 ALLOUVILLE BELLEFOSSE"
        ├── cle_regroupement: RATT_523_50088783673630
        ├── nb_prm_groupes: 2
        ├── puissance_totale: 250 kW (136 + 114)
        ├── verification_status: auto_validated ✅
        └── Badge: ✅ VERT (PrioritĂ© 1 - Rattachement ENEDIS)
    
    tbl_gpt_societe_site_prm_v2:
    ├── PRM: 30000230176430
    │   ├── ID_SITE_V2: 1
    │   ├── cle_regroupement: RATT_523_50088783673630
    │   ├── nom_site_source: "LINEX USINE" (site #134)
    │   ├── puissance_souscrite: 136 kW
    │   ├── rattachement_info: "RattachĂ© Ă  50088783673630 (RI-INT)"
    │   └── validate_regroupement: 1 ✓ (auto RI)
    │
    └── PRM: 50088783673630
        ├── ID_SITE_V2: 1
        ├── cle_regroupement: RATT_523_50088783673630
        ├── nom_site_source: "LINEX PROD" (site #135)
        ├── puissance_souscrite: 114 kW
        ├── rattachement_info: "PRM de tĂȘte"
        └── validate_regroupement: 1 ✓ (auto RI)
    
    RĂ©sultat : ✅ 2 sites V1 → 1 seul site V2 avec badge vert ! Gain : Regroupement automatique avec validation ENEDIS officielle ---

    ïżœ Corrections Techniques Critiques V2

    Fix 1 : Inclusion du PRM de TĂȘte

    ProblĂšme Initial :
    -- ❌ Ancienne version : seuls les PRM rattachĂ©s Ă©taient inclus
    INSERT INTO tmp_groupes_rattachement (idPrm, groupe_prm)
    SELECT DISTINCT r.idPrm, r.prm_id_rattache
    FROM c68_rattachements r;
    
    RĂ©sultat : Le PRM de tĂȘte (50088783673630) n'Ă©tait PAS dans la table temporaire ! Solution :
    -- ✅ V2 : 2 Ă©tapes
    -- Étape 1 : RĂ©cupĂ©rer les PRM rattachĂ©s
    INSERT INTO tmp_groupes_rattachement (idPrm, groupe_prm)
    SELECT r.idPrm, MIN(r.prm_id_rattache)
    FROM c68_rattachements r
    WHERE r.type_rattachement = 'RI'
    GROUP BY r.idPrm;
    
    -- Étape 2 : Ajouter le PRM de tĂȘte avec lui-mĂȘme
    INSERT INTO tmp_groupes_rattachement (idPrm, groupe_prm)
    SELECT DISTINCT r.prm_id_rattache, r.prm_id_rattache
    FROM c68_rattachements r
    WHERE r.type_rattachement = 'RI'
    AND NOT EXISTS (
        SELECT 1 FROM tmp_groupes_rattachement t
        WHERE t.idPrm = r.prm_id_rattache
    );
    
    RĂ©sultat : Le PRM de tĂȘte reçoit la mĂȘme clĂ© que ses rattachĂ©s → regroupement correct ! ---

    Fix 2 : GROUP BY Uniquement sur Clé de Regroupement

    ProblĂšme Initial :
    -- ❌ Ancienne version : GROUP BY multiple colonnes
    GROUP BY cle_regroupement, nom_site_source, id_site_source
    
    RĂ©sultat : MĂȘme avec la mĂȘme clĂ© RATT_523_50088783673630, LINEX avait 2 sites car :
  • Site 1 : cle=RATT_523_..., nom="LINEX USINE", id=134
  • Site 2 : cle=RATT_523_..., nom="LINEX PROD", id=135
  • Solution :
    -- ✅ V2 : GROUP BY seulement la clĂ© + agrĂ©gations MIN()
    INSERT INTO tbl_gpt_societe_site_v2 (
        ID_SOCIETE,
        nom_site_v2,
        cle_regroupement,
        CP, ville, adresse,
        id_site_source, nom_site_source,
        nb_prm_groupes,
        puissance_totale,
        verification_status
    )
    SELECT 
        c.ID_SOCIETE,
        CONCAT(s.nom, ' - ', c.codePostal, ' ', c.commune) as nom_site_v2,
        tmp.cle_regroupement,
        c.codePostal, c.commune, c.numeroNomVoie,
        MIN(tsp.ID_SITE) as id_site_source,
        MIN(tgs.site_NOM) as nom_site_source,
        COUNT(DISTINCT c.idPrm) as nb_prm_groupes,
        SUM(c.ps_valeur) as puissance_totale,
        CASE 
            WHEN tmp.cle_regroupement LIKE 'RATT_%' THEN 'auto_validated'
            ELSE 'pending'
        END as verification_status
    FROM tmp_sites_regroupement tmp
    -- ... JOINs ...
    GROUP BY tmp.cle_regroupement;  -- ✅ UNIQUEMENT la clĂ© !
    
    Résultat : Les 2 PRM avec cle=RATT_523_... sont fusionnés en 1 seul site V2 ! ---

    Fix 3 : Élimination des Doublons d'Affichage

    ProblĂšme : Un PRM avec plusieurs rattachements apparaissait plusieurs fois Solution Interface :
    // ✅ GROUP BY tous les champs du PRM + GROUP_CONCAT pour rattachements
    GROUP BY 
        sp.idPrm, sp.ID_SITE_V2, sp.cle_regroupement,
        sp.nom_site_source, sp.id_site_source,
        sp.puissance_souscrite, sp.validate_regroupement
    HAVING rattachement_count > 0
    
    ---

    ïżœđŸš€ Guide d'Utilisation Rapide

    Installation (1 fois)

    1. Créer les tables

    mysql -u root -p appros < create_tables_v2_regroupement.sql

    2. Créer les procédures stockées

    mysql -u root -p appros < create_stored_procedures_v2.sql
    ---

    Migration Initiale (1 fois)

    http://localhost/PAM_light_P15/migration_regroupement_c68.php
    
    Attendre la fin → Consulter le rapport ---

    Gestion Quotidienne

    http://localhost/PAM_light_P15/interface_regroupement_v2.php
    
    Interface Features :
  • Dashboard : Statistiques globales par sociĂ©tĂ©
  • Filtres : Par sociĂ©tĂ©, par statut de validation, conflits uniquement
  • Badges de PrioritĂ© :
  • - ✅ VERT : Rattachement ENEDIS (prioritĂ© 1) - Auto-validĂ© - ⚠ ORANGE : Adresse complĂšte (prioritĂ© 2) - VĂ©rification recommandĂ©e - ⚠ ROUGE : C68 basique (prioritĂ© 3) - ⚠ ATTENTION : VĂ©rification OBLIGATOIRE
  • Navigation : Bouton 🏠 Accueil vers index.php
  • Documentation : Lien direct vers ce document
  • Workflow de Validation :
  • Filtrer "Conflits uniquement" ou par badge rouge ⚠
  • Pour chaque site :
  • - Cliquer "đŸ‘ïž DĂ©tails" pour dĂ©plier la carte - VĂ©rifier les PRM regroupĂ©s - VĂ©rifier les rattachements ENEDIS (colonne 🔗) - Si badge vert ✅ : DĂ©jĂ  auto-validĂ©, juste vĂ©rifier - Si badge orange ⚠ : VĂ©rifier l'adresse complĂšte, puis "✓ Valider" - Si badge rouge ⚠ : ATTENTION - VĂ©rifier attentivement avant validation
  • Post/Redirect/Get : Pas de warning de resoumission de formulaire
  • ---

    📈 MĂ©triques Attendues

    D'aprÚs l'analyse initiale : | Métrique | Valeur | |----------|--------| | Cas de conflits détectés | ~60 | | Validation automatique (RI) | ~30-40% | | Nécessitant vérification manuelle | ~60-70% | | Gain de précision | +++++ | ---

    ✅ Avantages de la Solution

    1. Précision Maximale

  • Utilise les donnĂ©es officielles ENEDIS
  • PrioritĂ© aux rattachements techniques validĂ©s
  • 2. FlexibilitĂ©

  • 3 niveaux de critĂšres (fallback automatique)
  • Gestion des cas incomplets
  • 3. TraçabilitĂ© ComplĂšte

  • Conservation des sites originaux
  • Historique de toutes les modifications
  • PossibilitĂ© de rollback
  • 4. Interface Intuitive

  • Dashboard avec statistiques
  • Filtres avancĂ©s
  • Validation en 1 clic
  • 5. Évolutif

  • ProcĂ©dures stockĂ©es (performances)
  • Structure modulaire
  • Facilement extensible
  • ---

    🎯 Prochaines Étapes RecommandĂ©es

  • ✅ ExĂ©cuter la migration initiale
  • ✅ Valider les regroupements avec rattachements RI (auto-validĂ©s)
  • ⚠ VĂ©rifier manuellement les conflits (~60 cas)
  • 📊 Analyser les statistiques par sociĂ©tĂ©
  • 🔄 Ajuster si nĂ©cessaire via l'interface
  • ---

    📞 Ressources

  • Documentation complĂšte : README_REGROUPEMENT_V2.md
  • Analyse C68 : http://localhost/PAM_light_P15/analyze_c68_structure.php
  • Interface V2 : http://localhost/PAM_light_P15/interface_regroupement_v2.php
  • Migration : http://localhost/PAM_light_P15/migration_regroupement_c68.php
  • --- 🎉 RĂ©sultat Final : Une structure SociĂ©tĂ© → Sites V2 → PRM parfaitement alignĂ©e avec les donnĂ©es officielles ENEDIS, avec traçabilitĂ© complĂšte et validation facilitĂ©e !