Mise a jour FT/BT
Import du fichier FT-BT KO Excel, analyse des correspondances poteaux, puis mise a jour SQL directe PostgreSQL en thread background avec rollback atomique et triggers auto.
Controle qualite et analyse des poteaux aeriens ENEDIS (FT/BT). 6 modules d'analyse, Mode Projet BDD, GraceTHD Axione, execution par lot, rapports Excel unifies.
Un ensemble d'outils puissants pour gérer vos données terrain
Import du fichier FT-BT KO Excel, analyse des correspondances poteaux, puis mise a jour SQL directe PostgreSQL en thread background avec rollback atomique et triggers auto.
Comparaison des poteaux FT vs fiches appuis. Extraction single-pass unifiee (doublons, hors-etude, dico poteaux, terrains prives). Normalisation robuste via normalize_appui_num().
Validation BT + VérifCabCOMAC (fddcpiax, CDI+posemode, capacites). Verification boitiers fibre optique (col AR). Filtrage poteaux par SRO. PostgreSQL natif (schema comac).
Extraction IN+OUT single-pass via QgsSpatialIndex. Auto-detection champ etude centralise. Hors-perimetre explicit. Deduplication fichiers output.
Analyse via fddcpiax (NGE auto + Axione ST_Snap). Filtrage bold-only cables C6. Attaches-aware detection (cables + BPE). Compteur par etude. Exclusion appuis EDF. Securite NFC.
Chargement couches PostgreSQL par SRO derive du nom de dossier. Layers async en background. Disambiguation inline si multi-candidats. Persistance etat via QgsSettings.
Controle portees cables NFC 11201-A1. Zones ZVN/ZVF. Guards division par zero. Rapport unifie multi-modules avec KPI agreges et checks diagnostiques.
Pipeline alternatif pour SRO Axione via fichiers locaux SHP+CSV. Detection auto NGE vs Axione. Fonction SQL fddcpiax avec ST_Snap tolerance elargie. Match mode ligne.
Mode diagnostic 6 sections (structure, detection, couches, export, PG, modules). Preflight global avant batch. Messages actionnables. Tooltips prerequis par module.
Vue d'ensemble des composants du plugin v3.1
| Ordre | Module | Fichier metier | Workflow | Description |
|---|---|---|---|---|
| 0 | MAJ FT/BT | Maj_Ft_Bt.py |
maj_workflow.py |
Import Excel FT-BT KO, MAJ SQL directe PostgreSQL en background, rollback atomique, triggers auto |
| 1 | C6 vs BD | C6_vs_Bd.py |
c6bd_workflow.py |
Comparaison annexes C6 Excel vs couches QGIS, QgsSpatialIndex, auto-detection champ etude |
| 2 | CAP FT | CapFt.py |
capft_workflow.py |
Verification poteaux FT vs fiches appuis, detection ecarts, rapport Excel |
| 3 | COMAC | Comac.py |
comac_workflow.py |
Validation BT + VérifCabCOMAC (fddcpiax, CDI+posemode, capacites, boitiers FO), PostgreSQL schema comac |
| 4 | Police C6 | PoliceC6.py |
police_workflow.py |
Analyse fddcpiax complete, bold-only C6, attaches-aware, CDI/posemode, exclusion EDF, securite NFC |
| 5 | C6-C3A-C7 | C6_vs_C3A_vs_Bd.py |
c6c3a_workflow.py |
Croisement annexes C6, C3A et C7, detection incoherences inter-documents |
| Couche | Fichier | Role |
|---|---|---|
| UI | PoleAerien.py |
Point d'entree (128 lignes), toolbar, instanciation workflows, lazy init dialog |
| UI | dialog_v2.py |
PoleAerienDialogV2 : interface unifiee, QSplitter, QgsCollapsibleGroupBox, journal |
| UI | batch_orchestrator.py |
Pont dialog-workflows, caches fddcpi2/SRO/appuis_wkb inter-modules, preflight, recap post-batch |
| UI | batch_runner.py |
Execution sequentielle des modules, progression globale par sous-plage |
| UI | project_detector.py |
Auto-detection structure projet, SRO extraction, multi-candidats, deduplication, diagnostics |
| Async | async_tasks.py |
6 QgsTask (CapFtTask, ComacTask, C6BdTask, C6C3ATask, PoliceC6Task, MajSqlBg) |
| Async | maj_sql_background.py |
MajSqlBackgroundTask : MAJ SQL directe PostgreSQL en thread background |
| Regles | security_rules.py |
Verification portees NFC 11201-A1, zones ZVN/ZVF, guards division par zero |
| Regles | pcm_parser.py |
Parsing XML fiches PCM (ISO-8859-1), extraction donnees etude |
| Regles | gracethd_reader.py |
GraceTHDReader : cables, BPE, poteaux depuis fichiers SHP+CSV locaux (Axione) |
| Regles | cable_analyzer.py |
Comptage cables par appui, CDI+posemode, group_by_gid, attaches, comparer_source_cables() |
| Donnees | comac_db_reader.py |
PostgreSQL only (schema comac), cache thread-safe, 591 cables references |
| Donnees | db_connection.py |
Connexion psycopg2 auto (credentials QGIS), fddcpiax() (NGE auto + Axione ST_Snap) |
| Donnees | qgis_utils.py |
get_layer_safe(), normalize_appui_num(), build_spatial_index(), extraire_appuis |
| Donnees | core_utils.py |
Fonctions pures Python : safe_float, safe_int, build_export_path, parse_bool |
| Donnees | unified_report.py |
Rapport unifie multi-modules : KPI agreges, checks diagnostiques, export Excel |
| Donnees | db_layer_loader.py |
Mode Projet : chargement couches PostgreSQL filtrees par SRO (infra_pt_pot, etudes) |
| Donnees | dataclasses_results.py |
Dataclasses structurees pour resultats inter-modules |
| Couche | Type | Source | Utilisation |
|---|---|---|---|
| infra_pt_pot | Points | PostgreSQL | Poteaux FT/BT (champ inf_num), base de tous les modules |
| etude_cap_ft | Polygones | PostgreSQL | Zones d'etude FT pour CAP FT, C6 vs BD, Police C6 |
| etude_comac | Polygones | PostgreSQL | Zones d'etude BT pour COMAC |
| bpe | Points | GraceTHD | Boitiers de protection (Police C6) |
| t_cheminement | Lignes | GraceTHD | Chemins reseau (filtre cm_typ_imp != 7) |
| t_cableline | Lignes | GraceTHD | Trace geometrique des cables |
| t_noeud | Points | GraceTHD | Points d'ancrage reseau |
Historique des versions majeures et fonctionnalites ajoutees
Pipeline GraceTHD Axione (SHP+CSV locaux, fddcpiax ST_Snap). Mode Projet BDD (layers async PostgreSQL par SRO). 4 sprints optimisation : caches inter-modules (fddcpi2, SRO, appuis_wkb, CRS), extractions single-pass, centralisation credentials PG. Police C6 : bold-only C6, attaches-aware, compteur etudes. COMAC : boitiers FO, group_by_gid. UX : disambiguation inline, diagnostic 6 sections, preflight, refresh, persistance etat, liens cliquables. Dead code -1400 lignes.
ACTUELLEReecriture complete de l'interface : PoleAerienDialogV2 avec detection automatique du projet, execution par lot sequentielle via BatchRunner + BatchOrchestrator. PoleAerien.py reduit de 2100 a 128 lignes. 11 fichiers obsoletes supprimes. Architecture Workflows : God Object decouple en 6 workflows async.
Module verification securite NFC 11201-A1, detection zones climatiques ZVN/ZVF, feuille VERIF_SECURITE.
Analyse croisee C6/C3A/C7, couches erreur temporaires, integration donnees reseau.
Architecture MVC, execution asynchrone QgsTask, 6 modules d'analyse independants.
Comprendre le fonctionnement interne du plugin dans QGIS
classFactory(iface) dans __init__.py est appelée par QGIS au démarrage. Cette fonction instancie et retourne l'objet PoleAerien.
__init__(iface) configure le plugin : instanciation de 6 workflows (Maj, CapFt, Comac, C6Bd, C6C3A, Police), creation de la toolbar. Le dialog, le BatchRunner et le BatchOrchestrator sont initialises en lazy dans run().
initGui() ajoute l'icône du plugin au menu QGIS et à la toolbar. L'action est connectée à la méthode run().
run() cree le PoleAerienDialogV2 (lazy init), le BatchRunner et le BatchOrchestrator au premier appel. Initialise les couches par defaut, puis affiche le dialog en mode non-modal avec show(). QGIS reste utilisable pendant que le dialog est ouvert.
unload() nettoie les ressources : fermeture du dialog, retrait des actions du menu QGIS, suppression des icones de la toolbar.
6 workflows (QObject) orchestrent les modules métier. Ils délèguent l'exécution à async_tasks.py (QgsTask) en arrière-plan. Signaux standardisés : progress_changed, message_received, analysis_finished, error_occurred.
Dans __init__() (lignes 30-58) :
self.maj_workflow = MajWorkflow() - Workflow MAJ FT/BTself.comac_workflow = ComacWorkflow() - Workflow COMACself.capft_workflow = CapFtWorkflow() - Workflow CAP FTself.c6bd_workflow = C6BdWorkflow() - Workflow C6 vs BDself.police_workflow = PoliceWorkflow() - Workflow Police C6self.c6c3a_workflow = C6C3AWorkflow() - Workflow C6-C3A-C7self._dlg = None - Dialog lazy init dans run()self.toolbar = self.iface.addToolBar()project_detector.py analyse le dossier projet selectionne et detecte automatiquement :
Les modules sont automatiquement coches selon les fichiers detectes.
BatchRunner execute les modules selectionnes de facon sequentielle. Le BatchOrchestrator fait le lien entre le dialog, le runner et les workflows :
Un seul dialog pour toutes les operations
Auto-detection projet (FT-BT KO, CAP FT, COMAC, GraceTHD, C6, C3A, C7). Patterns elargis (ETUDE COMAC, KPFT). Deduplication fichiers output. Bouton refresh pour resync.
Toggle "Couches QGIS" / "Mode Projet". SRO derive du nom de dossier (63041-B1I-PMZ-00003). Chargement async couches PostgreSQL. Option "Charger dans le projet".
Dropdowns inline si multi-candidats (COMAC, CAP FT, C7, C3A). Bouton Diagnostic : rapport 6 sections. Preflight global. Tooltips prerequis. Persistance etat QgsSettings.
Liens cliquables vers rapports Excel. Compteur etude Police C6 [i/N]. Recap post-batch avec metriques. Progression SmoothProgressController. Export log texte.
63041-B1I-PMZ-00003/ -- SRO = 63041/B1I/PMZ/00003
FT-BT KO B1L_00003.xlsx -- MAJ BD
CAP FT/ -- CAP_FT + C6 browse dir
CMD 1/
FTTH-NGE-ETUDE-B1L-63041-7/ -- Annexe C6 = study xlsx
CMD 2/...
COMAC/ -- COMAC (ou ETUDE COMAC, ETUDE-COMAC)
C6/ -- Standalone C6 (si present)
C3A/ -- Annexe C3A
C7/ -- Annexe C7
BASE DE DONNEES/
NGE/ -- GraceTHD NGE (bpe.shp, t_cheminement.shp)
GRACE_APD_DTR_*/ -- GraceTHD Axione (SHP+CSV a plat)
Schémas explicatifs du fonctionnement des composants
Ameliorations v3.1 (non visibles sur ce schema generique) :
Architecture fddcpi2 : SRO → PostgreSQL → cables decoupes → intersection appuis → comparaison C6 Excel
Nouveau module (402 lignes) : compter_cables_par_appui(), analyser_charge_appuis(). Filtre combine CDI + posemode pour comptage precis.
768 lignes. Architecture fddcpi2 : SRO depuis QGIS → db_connection.py appelle fddcpi2() PostgreSQL → CableSegment → cable_analyzer.py intersecte appuis.
Connexion psycopg2 auto (credentials QGIS). Fonction SQL fddcpi2() retourne cables decoupes. Schema comac : 591 cables, hypotheses. Serveur AUVERGNE 10.241.228.107.
Comparaison intelligente des fichiers Excel C6 avec la base de données QGIS
Reconnaissance automatique via patterns regex: nom_etudes, etudes, decoupage, zone. Plus besoin de sélection manuelle.
Ignore automatiquement les fichiers non-C6: FicheAppui_*.xlsx, *_C7*.xlsx, GESPOT_*.xlsx. Zéro erreur de parsing.
Utilise QgsSpatialIndex pour intersections géométriques ultra-rapides. Cache géométries polygones CAP FT.
Vérification correspondance poteaux FT vs fiches appuis individuelles
Structure: 1 fichier par poteau. Organisation par dossiers études. Extraction nom fichier → Numéro appui automatique.
Gestion formats variables: E000123, FicheAppui_E123.xlsx, E123/63041. Fonction normalize_appui_num_bt(strip_e_prefix=True).
Extraction simultanée poteaux normaux et privés via champ spécifique. Retour: (dict_poteaux, dict_poteaux_prives).
3 chemins d'execution dupliques → 1 chemin unique SQL background
Processus étape par étape pour une utilisation optimale
Importez les couches dans votre projet QGIS et vérifiez la connexion PostgreSQL (serveur AUVERGNE, 10.241.228.107).
# Couches QGIS requises
infra_pt_pot # Table poteaux (Point, PostgreSQL)
etude_cap_ft # Périmètres CAP_FT (Polygon)
cables_dc # Câbles découpés (via fddcpi2)
# PostgreSQL: schema comac (591 câbles, hypotheses)
Ouvrez le plugin via Extensions > Pole Aerien. Selectionnez le dossier projet : le project_detector identifie automatiquement les fichiers et active les modules disponibles. Cochez les modules souhaites.
Cliquez sur Demarrer. Le BatchRunner execute les modules coches sequentiellement via QgsTask en arriere-plan. La barre de progression et le journal montrent l'avancement en temps reel. QGIS reste utilisable.
Les rapports Excel sont generes automatiquement (openpyxl, coloration conditionnelle). Pour MAJ BD, le SQL s'execute en background avec rollback atomique. Les resultats sont affiches dans le journal du dialog.
Spécifications techniques de chaque composant
| Module | Fonction | Entrées | Sorties |
|---|---|---|---|
| MAJ FT/BT | MAJ attributs poteaux via SQL background (chemin unique v2.3.0) | Excel .xlsx, couches QGIS, PostgreSQL | Table modifiée, rollback atomique |
| CAP_FT | Vérification fichiers capacitaires FT (154 L + 110 L workflow) | Répertoire FicheAppui_*.xlsx, couches | Rapport .xlsx coloré |
| COMAC | Contrôle données COMAC via PostgreSQL natif (564 L) | Répertoire COMAC, PostgreSQL (schema comac) | Rapport .xlsx + VERIF_SECURITE |
| C6 vs BD | Comparaison C6 / BD async (382 L + 218 L workflow) | Fichiers C6, couches, QgsSpatialIndex | Excel 3 feuilles, -84% temps |
| C6/C3A/C7 | Analyse croisée multi-fichiers (406 L + 217 L workflow) | C6, C3A, C7, couches | Rapport consolidé |
| Police C6 | fddcpi2 : SRO→PG→cables→appuis→C6 (718 L + 768 L wf) | C6 Excel, infra_pt_pot, fddcpi2() PG, cable_analyzer | Rapport conformité, -78% temps |
| VERIF_SECURITE | Portées câbles NFC 11201-A1 (434 L security_rules.py) | Excel COMAC, zone climatique ZVN/ZVF | Feuille VERIF_SECURITE (OK/PORTEE MOLLE) |
Comprendre l'impact du vent sur les portées maximales des câbles aériens
Carte interactive des vents en temps réel - Source: Windy.com
Tout ce qu'il faut savoir pour exploiter pleinement le plugin
Le plugin Pole Aerien v3.0 est compatible avec QGIS 3.28 et les versions ulterieures (jusqu'a 3.99). Nous recommandons la version 3.28 LTS pour la stabilite en production. Le plugin utilise PostgreSQL comme base de donnees principale (schema comac, AUVERGNE).
Remarque : Les versions antérieures à 3.28 ne sont plus officiellement prises en charge. Si vous rencontrez des difficultés, vérifiez d'abord votre version de QGIS.
Selon les modules utilisés, les couches suivantes doivent être chargées dans votre projet :
inf_num, inf_type, etatnom_etudesetudesLes noms des couches doivent correspondre exactement à ceux attendus par le plugin.
Oui, de plusieurs manières :
Le module de mise à jour des poteaux FT/BT modifie les champs suivants :
Les champs d'audit modifie_par et date_modif sont également renseignés automatiquement pour assurer la traçabilité.
Ce module compare les fichiers Excel Annexe C6 avec les données présentes dans QGIS afin d'identifier les écarts :
Le résultat est exporté dans un fichier Excel comportant trois feuilles : Analyse C6 BD, Poteaux hors périmètre et Vérification études.
Le module VERIF CAP_COMAC analyse les portées de câbles fibre optique selon la norme NFC 11201-A1.
Le processus s'effectue comme suit :
L1092-xx-P)Les dépassements sont signalés comme « PORTÉE MOLLE » et nécessitent une vérification terrain.
Le module Police C6 utilise plusieurs sources de données :
infra_pt_pot, cables_dc et couches réseau chargées dans le projetnom_etudes dans le répertoire de travailv2.3.0 : Filtres spatiaux bbox, exclusion appuis EDF, cleanup mémoire. Données COMAC via PostgreSQL uniquement (plus de GeoPackage/CSV/SQLite).
Lorsque le dossier projet est selectionne, le project_detector identifie automatiquement les fichiers C6 dans le dossier CAP FT. Les annexes C6 sont les Excel d'etude (FTTH-NGE-ETUDE-*.xlsx) situes dans les sous-dossiers CMD du dossier CAP FT.
Motifs de recherche utilises :
*nom_etudes*.xlsx
*Annexe*C6*nom_etudes*.xlsx
*C6*nom_etudes*.xlsx
La detection est automatique lors de la selection du dossier projet.
La correspondance des numéros d'appui repose sur le couple N° appui + Nom d'études. Vérifiez les points suivants :
1016436/63041 est normalisé en 1016436)Astuce : Utilisez la fonction SUPPRESPACE() dans Excel pour nettoyer vos données avant l'import.
Le bouton "Demarrer l'analyse" necessite que les conditions suivantes soient remplies :
Le Mode Projet permet de charger les couches QGIS directement depuis PostgreSQL, filtrees par SRO :
63041-B1I-PMZ-00003 donne SRO 63041/B1I/PMZ/00003)infra_pt_pot, etude_cap_ft, etude_comac filtrees par SROPrerequis : La connexion PostgreSQL au serveur AUVERGNE doit etre configuree dans QGIS. Le nom du dossier projet doit suivre le format SRO (segments separes par des tirets).
Le plugin detecte automatiquement le type de bureau d'etudes (BE) via la table comac.sro_nge_axione :
fddcpi2 PostgreSQL. Cables deja recales sur l'infrastructure. Match par endpoints.fddcpiax avec ST_Snap tolerance elargie (0.70m). Cables decales par rapport aux poteaux. Utilise aussi GraceTHD local (fichiers SHP+CSV) si present.
Important : Les modifications GraceTHD/Axione n'impactent jamais le code NGE. Les chemins sont proteges par des conditions if be_type == 'axione'.
Pour tout signalement, contactez Youcef ADDA en fournissant les informations suivantes :
GraceTHD Axione, Mode Projet BDD, 4 sprints d'optimisation, ameliorations Police C6, COMAC et UX
Pipeline alternatif complet pour SRO Axione via fichiers locaux SHP+CSV. Detection auto NGE vs Axione via comac.sro_nge_axione. Fonction SQL fddcpiax avec ST_Snap tolerance elargie (0.70m). Match mode ligne pour cables BPE-to-BPE.
Fichiers : gracethd_reader.py, fddcpiax (SQL), db_connection.py (routage auto NGE/Axione)
Couches PostgreSQL par SRO derive du nom de dossier. Chargement async en background thread (_LoadProjectLayersTask). DbLayerLoader pour infra_pt_pot, etude_cap_ft, etude_comac filtres par SRO.
UX : Toggle radio, SRO display monospace, option "Charger dans le projet", cleanup auto apres batch
-30% a -40% temps batch. Caches inter-modules (fddcpi2, SRO, appuis_wkb, CRS). Extractions single-pass. Centralisation credentials PG. Connexions PG de ~10 a ~3.
Bold-only C6 : seuls les cables en gras (nouveaux) sont compares. Attaches-aware : verification cables et BPE de chaque cote des attaches. Compteur [i/N] par etude. Bilan post-boucle.
Fix : Liaison vs cable confusion (re.match L+digit), fddcpiax routage auto NGE/Axione
Boitiers fibre optique : col AR (idx 43), extraction oui+non, verification BPE pour oui uniquement. group_by_gid : comptage cables physiques (pas segments). Normalisation appuis unifiee.
Hors-perimetre : log et Excel indiquent clairement filtrage SRO + message diagnostic
Disambiguation inline pour multi-candidats. Diagnostic 6 sections. Preflight global avant batch. Persistance etat QgsSettings. Liens cliquables. Standalone C6 folder detection.