Commit Graph

87 Commits

Author SHA1 Message Date
Colin Maudry e44e2940fc Tous les libellés de sources apparaissent dans la matrice 2026-07-04 20:50:30 +02:00
Colin Maudry eb8f54dbf2 fix(figures): calculer center/zoom côté serveur au lieu d'utiliser bounds
La prop `bounds` de dash-leaflet lève une exception JS (TypeError sur
.equals() avec une valeur précédente indéfinie) au tout premier montage
du composant Map — confirmé via la stack trace navigateur, reproductible
même en dernière version (1.1.3). Cette exception laissait le clustering
dans un état incohérent (declustering impossible avant un zoom complet
suivi d'un dézoom).

bounds_to_center_zoom calcule un center/zoom approximatifs (projection
Web Mercator, taille de conteneur supposée) pour cadrer l'organisme et
ses contreparties, en évitant complètement la prop `bounds` bugguée.
Cadrage moins précis qu'un vrai fitBounds() navigateur, mais robuste.
2026-07-03 22:54:21 +02:00
Colin Maudry 9d3b0dd068 fix(figures): réactiver l'animation du fitBounds sur les cartes organisme
animate: False (ajouté pour contourner le point organisme surdimensionné,
désormais résolu via un rendu en icône) empêchait apparemment la
bibliothèque de clustering de recalculer correctement son arbre de
clusters par niveau de zoom au montage, bloquant le declustering des
contreparties jusqu'à un zoom complet suivi d'un dézoom.
2026-07-03 22:34:26 +02:00
Colin Maudry f1c28acc96 feat(figures): mettre en avant le point de l'organisme consulté sur la carte
Marque is_home=True sur les marqueurs du home_type (acheteur ou titulaire
selon la page) dans get_org_location_map. Côté client, pointToLayer donne
à ce point un rayon légèrement plus grand (8 vs 5) et le ramène toujours
au premier plan (bringToFront), indépendamment de l'ordre des couches.
2026-07-03 22:08:43 +02:00
Colin Maudry a96f772d7a fix(figures): désactiver l'animation du fitBounds sur les cartes organisme
Un fitBounds animé interrompu (deux Input sur pathname+année pouvant
re-déclencher le callback quasi simultanément) laissait le transform CSS
de zoom de Leaflet figé à une grande échelle (ex: scale(16)), faisant
apparaître les marqueurs individuels démesurément gros sur /acheteurs et
/titulaires. Constaté en vérification manuelle sur test.colibre.fr.
2026-07-03 16:43:04 +02:00
Colin Maudry 22dd49f337 docs(figures): corriger le commentaire d'ordre des couches GeoJSON
Le commentaire affirmait à tort que l'organisme consulté est toujours
peint au-dessus de sa contrepartie ; l'ordre est en réalité fixe
(titulaire puis acheteur), indépendant de home_type. Relevé par la
revue finale de branche.
2026-07-03 16:15:13 +02:00
Colin Maudry acb8d5e0d1 feat(titulaire): afficher les acheteurs sur la carte de la fiche titulaire
Supprime point_on_map, devenue inutilisée après migration des deux pages
vers get_org_location_map.
2026-07-03 16:10:02 +02:00
Colin Maudry 8b69fee31c feat(figures): ajouter get_org_location_map (carte cluster organisme + contrepartie) 2026-07-03 15:59:47 +02:00
Colin Maudry 21d3a30d8b refactor(figures): extraite build_org_markers pour réutilisation 2026-07-03 15:55:29 +02:00
Colin Maudry a2c20adb4e perf: paginer/agréger les pages acheteur et titulaire côté DuckDB
Les pages acheteur/titulaire chargeaient l'intégralité des marchés d'une
organisation dans un dcc.Store côté client (jusqu'à 16k lignes pour les
plus gros acheteurs), envoyée sur le réseau à chaque interaction. Le
tableau, le top 10 et l'histogramme des distances récupèrent maintenant
leurs données via des requêtes DuckDB scopées (pagination/agrégation
poussées en SQL), sur le modèle déjà utilisé par la page tableau.

Corrige aussi le CLS des mêmes pages en réservant l'espace des
conteneurs remplis par callback (carte, top 10, histogramme).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01 13:46:44 +02:00
Colin Maudry 63a7ff3d89 Petites améliorations de formulation et d'UI 2026-07-01 10:17:25 +02:00
Colin Maudry 82999ef056 Redesign de a-propos 2026-06-25 01:19:36 +02:00
Colin Maudry e591c5500f Petites améliorations du rendu #81 2026-06-22 22:47:37 +02:00
Colin Maudry 074716bc16 feat(observatoire): restructurer tuile en 3 barres
- Barre 1 (grise) : % marchés avec champs considérations renseignés
- Barre 2 (rose)  : % positifs parmi les marchés renseignés — sociales
- Barre 3 (verte) : % positifs parmi les marchés renseignés — env

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 22:21:37 +02:00
Colin Maudry ae8292d68d fix(observatoire): filtre renseignées sur != 'Sans objet' plutôt que regex
Seule 'Sans objet' est considérée négative parmi les marchés renseignés,
cohérent avec le reste des traitements.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 22:02:37 +02:00
Colin Maudry 26455a7616 fix(observatoire): barre renseignée = positifs parmi les marchés renseignés
Dénominateur = marchés non-null ; numérateur = marchés positifs (regex).
Label affiché : "parmi les N marchés renseignés".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 21:18:00 +02:00
Colin Maudry 19e181734c feat(observatoire): ajouter barres 'valeur renseignée' dans tuile considérations
Affiche 4 barres groupées par type (sociales/env) : une pour les marchés
avec au moins une considération, une pour ceux qui ont une valeur renseignée
(non nulle, y compris 'Sans objet').

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:55:38 +02:00
Colin Maudry 8efd9b45eb fix(observatoire): texte % blanc sur les barres de considérations
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:46:37 +02:00
Colin Maudry eab06eedae fix(observatoire): couleurs barres considérations palette Plotly Safe
Utilise les codes hex #CC6677 (sociales) et #117733 (env) via le prop
color de dbc.Progress, qui accepte les valeurs hex.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:45:33 +02:00
Colin Maudry a85baca408 feat(observatoire): calcul et rendu tuile considérations sociales/env
Ajoute compute_considerations_stats (dédoublonnage par uid, regex
Clause|Critère|Marché réservé, colonne absente → 0%) et
get_considerations_card_content (deux dbc.Progress colorés Safe).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:16:34 +02:00
Colin Maudry cb93dbe05a feat: chargements de pages best-effort au boot (tableau, sources) (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:58:50 +02:00
Colin Maudry 25746b4869 Amélioration du rendu de la carte org 2026-04-28 13:34:33 +02:00
Colin Maudry 1a5f049b1a Map fonctionne mais lf cassé 2026-04-28 11:23:02 +02:00
Colin Maudry bd6a4ff266 Tentative de rétablissement de la carte sur acheteur/titulaire 2026-04-28 10:40:50 +02:00
Colin Maudry 1839928e69 Réduction des petites erreurs 2026-04-24 13:36:15 +02:00
Colin Maudry 3e89dacff9 Correction de setup_table_columns et autres 2026-04-22 21:16:51 +02:00
Colin Maudry 600567330f Améliorations typing 2026-04-18 19:01:22 +02:00
Colin Maudry e4e1438220 Refactorisation des fonctions utils 2026-04-18 18:33:09 +02:00
Colin Maudry e352624c02 Capitalisation des constantes 2026-04-18 18:09:42 +02:00
Colin Maudry 342f7b53a9 figures.py : remplacement de df.columns par schema.names() depuis src.db (#71) 2026-04-16 11:09:43 +02:00
Colin Maudry a54f78875e Utilise l'année en cours pour plafonner les données du graph sources #65 2026-03-21 12:25:31 +01:00
Colin Maudry 91ea9eccea Top 10 acheteurs et titulaires #65 2026-03-20 16:44:29 +01:00
Colin Maudry a89677604b Médian des distances titulaire-acheteur #65 2026-03-20 14:20:44 +01:00
Colin Maudry e5419bab9c Donut : ajout à autres si moins de 1% #65; 2026-03-20 13:57:44 +01:00
Colin Maudry 771dcf0ea1 Moins de barres dans l'histogramme distances #65 2026-03-20 11:32:50 +01:00
Colin Maudry dac9efee88 Carte résumé => figures.py #65 2026-03-20 10:20:44 +01:00
Colin Maudry 144e714235 fix: reduce right margin in distance histogram to use full card width
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 13:02:41 +01:00
Colin Maudry d8f1a884a3 fix: show actual km ranges in distance histogram tooltip
Replace px.histogram with manually-computed go.Bar so hover text
displays human-readable distance ranges (e.g. "8.9 – 10.0 km")
instead of raw log10 bin values.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:35:04 +01:00
Colin Maudry 32aa877797 fix: guard against missing titulaire_distance column in get_distance_histogram 2026-03-18 22:40:28 +01:00
Colin Maudry f2af09bb35 fix: use streaming collect and filter zero distances in get_distance_histogram 2026-03-18 22:22:54 +01:00
Colin Maudry 24db748b6a feat: add get_distance_histogram figure function
Implement get_distance_histogram that creates a histogram of titulaire distances
with logarithmic scale. Add 3 unit tests covering basic functionality, null handling,
and edge cases. Also add DATA_SCHEMA_PATH to pytest env config.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 22:15:26 +01:00
Colin Maudry c77511d4e8 Taille de donut flexible #65 2026-03-18 20:57:30 +01:00
Colin Maudry 26dd2aaf1a Correction de l'injection du nom d'org dans le titre #65 2026-03-18 20:41:46 +01:00
Colin Maudry 79a06f996e Bouton de téléchargement des données #65 2026-03-18 13:54:00 +01:00
Colin Maudry 2f90a754ab Style inputs, ajout donut type marché #65 2026-03-18 13:38:38 +01:00
Colin Maudry c02fb995c5 Ajout de filtres et des donuts de catégorie #65 2026-03-17 22:44:15 +01:00
Colin Maudry e754a3a217 Configuration fine des tailles de cartes #65 2026-03-17 20:33:36 +01:00
Colin Maudry 9629231e29 Fixed masquage silencieux de la chloropleth #65 2026-03-17 17:30:41 +01:00
Colin Maudry ab3377ef60 Grid de cards avec points de rupture #65 2026-03-17 17:16:24 +01:00
Colin Maudry f531ce7091 Choix de carte dynamique, même pour les TOM #65 2026-03-16 18:06:32 +01:00