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 webstreamlit-extras: Composants avancés (stylable_container)st-supabase-connection: Connexion Supabasepandas: Manipulation de donnéesplotly: Graphiques interactifsfolium: Cartes interactivesstreamlit-folium: Intégration Folium dans Streamlitpyproj: 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: Projetsrevit_models: Modèles Revitrevit_audits: Audits des modèlesrevit_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 StreamlitCACHE_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 subtilemetric-header: Flexbox space-betweenmetric-icon-circle: 32px, fond gris clair, icône centréemetric-value: Valeur principale en grasmetric-subtitle: Informations complémentaires
📝 Développement
Ajouter une nouvelle page
- Créer un fichier dans
src/ui/pages/ - Définir une fonction
render() - Importer et utiliser dans
app.py
Ajouter un nouveau service
- Créer un fichier dans
src/services/ - Définir une classe avec les méthodes métier
- Utiliser les repositories pour l'accès aux données
- Ajouter
@st.cache_data(ttl=CACHE_TTL)pour performance
Ajouter un nouveau composant
- Créer un fichier dans
src/ui/components/ - Définir des fonctions de rendu
- 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