đŻ 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 !