[general]
name=STAT GEOM QC
qgisMinimumVersion=3.16
qgisMaximumVersion=3.99
description=Quality control and geometric statistics for vector layers, with a correctness score and exportable report.
about=STAT GEOM QC analyses QGIS vector layers and detects quality issues: null or empty geometries, invalid geometries, self-intersections, overlaps/intersections between polygons, duplicates, small polygons (configurable m² threshold), duplicate or near-duplicate vertices (optional, with distance tolerance), holes in polygons (optional, with an area threshold so that large justified holes are kept) and multipart features. Overlap detection is strictly topological — interiors that intersect, however slightly, with no metric tolerance — so a shared boundary or a single point of contact is never reported. An "Autres" section adds two optional digitising checks: sharp angles (spike vertices) and vertices that are too close together. The overlap check has exactly two exceptions, both off by default and presented as sub-choices of the check itself: ignore overlaps caused by a missing vertex on the shared wall, and ignore polygons entirely contained in another. Neither has any threshold to set. Duplicate vertex detection is likewise threshold-free: only exactly superimposed vertices count. The panel header shows the installed version, and any indicator tied to an unchecked control is labelled "not requested" instead of a misleading zero. It computes a weighted correctness score (0-100), shows a modern summary (gauge, indicators, breakdown) and produces an exportable report (HTML/CSV/JSON). Built-in QGIS actions: select flagged features, create a point error layer locating each issue exactly (self-intersection nodes for invalid geometries, representative point otherwise), and selective geometry repair (checkboxes) that writes the result to a NEW file without modifying the source layer. Native PyQGIS port of the STAT GEOM application, with no external dependencies.
version=2.9.21
author=Adel Bchini
email=adel.bchini@gmail.com
tags=quality,quality control,qc,geometry,validation,topology,statistics,vector,correctness,duplicates,overlaps,intersection,vertex,holes,multipart
category=Vector
icon=icon.svg
experimental=False
deprecated=False
homepage=https://github.com/Bchini/stat-geom-qc
tracker=https://github.com/Bchini/stat-geom-qc/issues
repository=https://github.com/Bchini/stat-geom-qc
changelog=2.9.21
    Ajouté
    - Le numéro de version s'affiche désormais dans l'en-tête du panneau, en petit à côté du titre (badge discret, infobulle « Version du plugin »). Lu directement dans metadata.txt à l'ouverture : il ne peut donc jamais se désynchroniser d'un oubli de mise à jour du code.
    - Un contrôle DÉCOCHÉ n'affiche plus « 0 » dans les résultats. Un compteur à 0 se lisait comme « rien trouvé », alors qu'un contrôle non demandé n'a simplement jamais tourné — les deux situations n'ont rien à voir. Le tableau « Qualité », le rapport HTML et le résumé affiché dans l'onglet Rapport indiquent maintenant « Non demandé » en italique neutre pour ces cas ; un contrôle réellement actif garde son vrai compte, y compris un 0 (couche propre). Le CSV et le JSON conservent le compte brut par souci de compatibilité, mais exposent désormais aussi ``checks_enabled`` pour qu'un traitement automatisé fasse la même distinction.
    Sécurité
    - Export CSV : une cellule ne peut plus être interprétée comme une FORMULE par un tableur. Le nom d'une couche, son chemin source et ses noms de colonnes proviennent du fichier analysé — donc d'une source non maîtrisée. Une couche nommée « =cmd|' /C calc'!A0 » produisait une cellule qu'Excel ou LibreOffice évaluent à l'ouverture du rapport, sans qu'aucun échappement CSV puisse l'empêcher puisque le fichier reste syntaxiquement valide. Toute valeur commençant par « = », « + », « - », « @ », une tabulation ou un retour chariot est désormais préfixée d'une apostrophe, que le tableur lit comme « ceci est du texte ». La valeur reste complète et lisible.
    - Le rapport HTML était déjà protégé : vérifié en analysant le document produit à partir d'une couche dont le nom et les colonnes contiennent du balisage — aucune balise exécutable ni attribut d'événement n'y survit.
    - La lecture du numéro de version, qui a lieu au chargement du module, absorbe désormais toute défaillance du fichier metadata.txt : un fichier illisible ne peut plus empêcher le plugin de démarrer.
    Supprimé
    - Le contrôle « polygones filiformes » est retiré de l'application : de l'analyse, des préréglages, de la réparation, du score de correctness, de la couche d'erreurs et de tous les rapports. Il reposait sur un seuil de forme dont la bonne valeur dépend entièrement du type de donnée, et signalait des géométries légitimes aussi souvent que de vrais résidus de découpage. La section « Extras » ne compte donc plus que deux contrôles (angles aigus, sommets rapprochés). L'activation et le seuil mémorisés sont effacés du profil QGIS.
    - La mesure d'allongement qui servait à ce contrôle est CONSERVÉE en interne : la règle « ignorer les chevauchements dus à un sommet manquant » s'en sert pour distinguer un recouvrement qui longe un mur d'une vraie morsure dans le bâti. Cette option reste donc pleinement fonctionnelle.
    - La tolérance de quasi-doublon des sommets disparaît. Seuls les sommets EXACTEMENT superposés sont désormais détectés comme doublons — plus de zone intermédiaire à régler entre « strictement identique » et « à telle distance près ». Le réglage n'est plus mémorisé et sa clé résiduelle est effacée du profil QGIS.
    - Cette suppression ne change rien à la détection des sommets rapprochés (Extras), qui garde son propre seuil réglable : c'est un contrôle différent, pensé pour un autre usage.
