Projects Hub
npm run dev
Tous les projets
Maintenu Outils & CLI

Streamlit ANMA Dashboard

Application Streamlit pour la visualisation et l'analyse de données BIM (Building Information Modeling). - Dashboard Overview : Métriques globales avec carte...

Projet maintenu (dernière activité il y a 166 jours)

Démarrer

  • Installer les dépendances

    $ pip install -r requirements.txt
  • Lancer l'application

    $ streamlit run app.py
  • À venir : tests unitaires

    $ pytest tests/

Documentation

BIM Data Hub - Architecture Modulaire

Application Streamlit pour la visualisation et l'analyse de données BIM (Building Information Modeling).

🎯 Fonctionnalités

Vue Agence

  • Dashboard Overview : Métriques globales avec cartes modernes
    • Total projets
    • Modèles BIM actifs (audités < 2 mois)
    • Audits obsolètes (> 2 mois)
    • Tendances warnings (depuis vue SQL optimisée)
  • Graphique Évolution Warnings : Timeline des avertissements par projet (sans limite 1000)
  • Ring Charts : Distribution par statut et version Revit
  • Carte Interactive : Localisation GPS des projets
  • Tableau Modèles Actifs : Derniers audits avec colonnes enrichies (Utilisateur, Chemin Fichier)

Vue Projet

  • Navigation par tabs : Vue Générale, Audit, TBQL, Économie
  • Header enrichi : Métadonnées projet (Version Revit, Utilisateur, Coordonnées GPS)
  • Cartes métriques modernes :
    • Avertissements avec breakdown par sévérité (Critiques/Modérés/Mineurs)
    • Poids du fichier avec différence par rapport à audit précédent
    • Tendances avec indicateurs visuels (+/- et couleurs)
  • Vue Audit détaillée : Sélecteurs alignés, cartes modernes warnings + poids

Optimisations

  • Vue KPI SQL : Résout la limite Supabase 1000 warnings
  • Cache intelligent : TTL configuré pour performances optimales
  • Détection automatique : Systèmes de coordonnées (Lambert 93, UTM, RGF93 CC)

🏗️ Architecture

streamlit_dashboard_bim/
├── app.py                      # Point d'entrée (45 lignes)
├── src/
│   ├── config/                 # Configuration
│   │   └── settings.py
│   ├── utils/                  # Utilitaires
│   │   ├── coordinates.py      # Détection coordonnées
│   │   └── styles.py           # CSS
│   ├── data/                   # Accès données
│   │   ├── supabase_client.py
│   │   └── repositories/
│   │       ├── audit_repository.py
│   │       ├── model_repository.py
│   │       ├── project_repository.py
│   │       ├── warning_repository.py
│   │       └── kpi_repository.py      # Vue SQL optimisée
│   ├── services/               # Logique métier
│   │   ├── data_service.py
│   │   ├── warning_service.py
│   │   └── map_service.py
│   └── ui/                     # Interface utilisateur
│       ├── components/         # Composants réutilisables
│       │   ├── map.py
│       │   └── metrics.py
│       └── pages/              # Pages
│           ├── vue_agence.py
│           ├── vue_projet.py
│           └── projet_views/   # Sub-views modulaires
│               ├── general.py
│               ├── audit.py
│               ├── tbql.py
│               └── economy.py

Principes de Design

  • Separation of Concerns : Chaque couche a une responsabilité claire
  • Repository Pattern : Abstraction de l'accès aux données
  • Service Layer : Logique métier isolée avec cache
  • Component-Based UI : Composants réutilisables avec design moderne
  • Sub-Views Pattern : Modularité recursive pour pages complexes

🚀 Installation

# Installer les dépendances
pip install -r requirements.txt

# Lancer l'application
streamlit run app.py

📦 Dépendances

  • streamlit : Framework web
  • streamlit-extras : Composants avancés (stylable_container)
  • st-supabase-connection : Connexion Supabase
  • pandas : Manipulation de données
  • plotly : Graphiques interactifs
  • folium : Cartes interactives
  • streamlit-folium : Intégration Folium dans Streamlit
  • pyproj : Transformations de coordonnées

🗺️ Systèmes de Coordonnées Supportés

L'application détecte automatiquement le système de coordonnées :

  • Lambert 93 (EPSG:2154) : Système national français
  • UTM (zones 30N, 31N, 32N) : Projections UTM
  • RGF93 CC (zones CC42-CC50) : Projections régionales

📊 Structure des Données

L'application utilise Supabase avec les tables suivantes :

Tables principales

  • revit_projects : Projets
  • revit_models : Modèles Revit
  • revit_audits : Audits des modèles
  • revit_warnings : Warnings détectés

Vues SQL optimisées

  • vue_kpi_severite : Tendances globales (tous projets)
  • vue_kpi_severite_par_projet : KPI par projet (résout limite 1000 warnings)

🔧 Configuration

La configuration se trouve dans src/config/settings.py :

  • PAGE_CONFIG : Configuration de la page Streamlit
  • CACHE_TTL : Durée de vie du cache (300s par défaut)
  • MAP_DEFAULT_CENTER : Centre de la carte (France)
  • FOLIUM_COLORS : Palette de couleurs pour les statuts

🎨 Design System

Cartes Métriques Modernes

  • Header horizontal : Titre à gauche, icône ronde grise à droite
  • Valeur principale : 1.75rem, font-weight 700
  • Sous-titres : Gris clair, 0.875rem
  • Tendances : Couleurs sémantiques inversées (rouge = augmentation warnings)

CSS

  • metric-card : Fond blanc, border-radius 12px, shadow subtile
  • metric-header : Flexbox space-between
  • metric-icon-circle : 32px, fond gris clair, icône centrée
  • metric-value : Valeur principale en gras
  • metric-subtitle : Informations complémentaires

📝 Développement

Ajouter une nouvelle page

  1. Créer un fichier dans src/ui/pages/
  2. Définir une fonction render()
  3. Importer et utiliser dans app.py

Ajouter un nouveau service

  1. Créer un fichier dans src/services/
  2. Définir une classe avec les méthodes métier
  3. Utiliser les repositories pour l'accès aux données
  4. Ajouter @st.cache_data(ttl=CACHE_TTL) pour performance

Ajouter un nouveau composant

  1. Créer un fichier dans src/ui/components/
  2. Définir des fonctions de rendu
  3. Réutiliser dans les pages

🧪 Tests

# À venir : tests unitaires
pytest tests/

📚 Documentation

  • Walkthrough : Documentation complète des améliorations
  • Task List : Phases de refactoring et optimisations
  • Architecture KI : Patterns et best practices Streamlit/Supabase

⚠️ Gotchas Résolus

  • Limite Supabase 1000 lignes : Résolu via vue SQL vue_kpi_severite_par_projet
  • CSS Bubbling : Résolu via streamlit-extras.stylable_container
  • Coordonnées JSON : Parser selon type (str/dict)
  • Ring Charts : Compter modèles uniques, pas audits

🎨 Améliorations Futures

  • Tests unitaires complets
  • Documentation API avec Sphinx
  • Logging structuré
  • Configuration via variables d'environnement
  • Pipeline CI/CD
  • Mode offline avec cache persistant
  • Détails warnings par audit (table interactive)

📄 Licence

Propriétaire - ANMA

👥 Auteurs

Développé avec ❤️ par l'équipe ANMA