Référence Détaillée des Améliorations CRM - Aaperture
Note : Ce document est une référence détaillée organisée par domaine fonctionnel. Pour les priorités de développement, consultez PRIORITES.md qui est la source de vérité pour la planification.
Ce document consolide toutes les améliorations futures identifiées dans la documentation et propose de nouvelles suggestions basées sur l'analyse du système actuel, organisées par domaine fonctionnel.
📋 Légende
- ✅ Implémenté - Fonctionnalité complètement implémentée et opérationnelle
- ⚠️ Partiellement implémenté - Fonctionnalité en partie implémentée, nécessite des améliorations
- 🚀 En cours / Priorité - Fonctionnalité en cours de développement ou priorisée
- Non implémenté - Fonctionnalité proposée mais pas encore développée
🎯 Focus Actuel
IA Proactive Insights (LOT A - MVP) - ✅ 100% COMPLÉTÉ (2026-01-27) - Système d'insights proactifs opérationnel avec 8 règles déterministes, génération automatique quotidienne, notifications, et interface complète. Toutes les fonctionnalités MVP sont implémentées et testées.
Global Search & Intelligence Artificielle - Développement d'un assistant IA intégré au Global Search pour permettre aux utilisateurs de builder des vues personnalisées et d'exécuter des actions complexes via des prompts en langage naturel. ✅ Phase 1 et 2 complétées.
État Actuel du Global Search
✅ Fonctionnalités Implémentées :
- Recherche unifiée dans sessions, contacts, devis, factures, et Notion
- Recherche en temps réel avec debounce (300ms)
- Intégration Notion avec recherche dans pages et bases de données
- Navigation complète au clavier (Cmd+K / Ctrl+K, flèches, Enter, Escape)
- Actions rapides (créer session, créer contact)
- Résultats groupés par catégorie avec compteurs
- Interface utilisateur optimisée avec états de chargement séparés
✅ Phase 1 Complétée :
- ✅ Assistant conversationnel IA intégré
- ✅ Builder de vues personnalisées via prompts
- ✅ Génération d'actions complexes
- ✅ Traduction de requêtes en langage naturel en filtres
✅ Phase 2 Complétée :
- ✅ Création assistée par IA d'entités
- ✅ Génération de rapports intelligents
- ✅ Rédaction assistée
🚀 Prochaines Étapes (Phase 3) :
- Analyse et insights automatiques
- Suggestions d'actions contextuelles
- Recherche conversationnelle
- Prédictions et recommandations
- Résumé et synthèse
📊 Analytics & Reporting
Améliorations identifiées dans la documentation
- ✅ Custom date range presets - Présélections de plages de dates (semaine, mois, trimestre, année)
- Implémenté : Frontend avec presets (week, month, quarter, year, all) dans
AnalyticsPage.tsx
- Implémenté : Frontend avec presets (week, month, quarter, year, all) dans
- ⚠️ Scheduled report generation - Génération automatique de rapports planifiés
- Partiellement implémenté : Les emails peuvent être planifiés (devis, factures, contrats), mais pas la génération automatique de rapports analytics
- ⚠️ Email delivery of reports - Envoi automatique de rapports par email
- Partiellement implémenté : Les emails de devis/factures peuvent être envoyés/planifiés, mais pas les rapports analytics
- ✅ Export to other formats - Export vers Excel, CSV en plus du PDF
- Implémenté : Backend
ExportServicesupporte CSV, Excel (XLSX), JSON et PDF
- Implémenté : Backend
- ⚠️ Custom metrics and KPIs - Métriques personnalisables par l'utilisateur
- À vérifier : Les métriques semblent fixes, pas de personnalisation visible
- ⚠️ Comparison between periods - Comparaison entre différentes périodes (mois vs mois précédent, année vs année précédente)
- À vérifier : Support de date range mais pas d'interface claire pour comparer des périodes
Suggestions supplémentaires
- Tableaux de bord personnalisables - Permettre aux utilisateurs de créer leurs propres tableaux de bord avec les métriques qu'ils souhaitent
- Alertes sur métriques - Notifications automatiques lorsque certaines métriques atteignent des seuils (ex: revenu mensuel > X€)
- Graphiques interactifs - Graphiques cliquables pour explorer les données en détail
- Analyse de tendances prédictives - Utiliser les données historiques pour prédire les tendances futures
- Rapports comparatifs multi-utilisateurs - Comparer les performances entre différents utilisateurs (pour les admins)
📤 Export & Import
Améliorations identifiées dans la documentation
- ✅ Système d'export centralisé - Système unifié pour tous les exports
- Implémenté : Service centralisé
ExportServiceavec support multi-formats - Formats supportés : PDF, Word (DOCX), CSV, Excel (XLSX), JSON
- Entités : Sessions, Contacts, Quotes, Invoices, Conversations, Roadmaps, Contract Templates
- Documentation :
docs/EXPORT_SYSTEM.md
- Implémenté : Service centralisé
- ✅ Exports multi-formats - Support de plusieurs formats pour chaque type d'export
- Implémenté : Tous les exports supportent maintenant PDF, Word, CSV, Excel selon le contexte
- Backend : Endpoints unifiés avec paramètre
format - Frontend : Composant
ExportFormatDialogréutilisable
- ✅ Import functionality for CSV/Excel - Fonctionnalité d'import depuis CSV/Excel
- Implémenté : Service d'import complet avec support CSV et Excel (XLSX, XLS)
- Backend :
ImportServicepour parser les fichiers, services spécialisés pour chaque entité - Entités supportées : Contacts, Sessions, Quotes, Invoices
- Endpoints :
POST /api/import/contacts- Import de contactsPOST /api/import/sessions- Import de sessionsPOST /api/import/quotes- Import de quotesPOST /api/import/invoices- Import d'invoices
- Fonctionnalités : Auto-détection de mapping, validation des données, rapport d'erreurs détaillé, import incrémental
- Frontend : Composants
ImportButtonet dialogs spécialisés (ImportContactsDialog,ImportSessionsDialog,ImportQuotesDialog,ImportInvoicesDialog) intégrés dans toutes les pages de liste - Documentation :
backend/src/import/,docs/IMPORT_SYSTEM.md
- ✅ Scheduled exports - Exports planifiés automatiques
- Implémenté : Système complet avec table
scheduled_exports, scheduler, et support de récurrence - Fonctionnalités : Récurrence (daily/weekly/monthly/yearly), envoi par email automatique, gestion des statuts
- Endpoints :
GET/POST/PUT/DELETE /api/scheduled-exports - Documentation :
backend/src/scheduled-exports/
- Implémenté : Système complet avec table
- ✅ Email delivery of exports - Envoi automatique d'exports par email
- Implémenté : Support complet dans le processor d'export avec pièces jointes
- Fonctionnalités : Envoi automatique avec sujet et message personnalisables
- Intégration : Utilise
UserEmailSenderServicepour l'envoi
- ✅ Custom field selection - Sélection personnalisée des champs à exporter
- Implémenté : Support via paramètre
fieldsdans les endpoints d'export - Format : Liste de champs séparés par virgules (ex:
?fields=id,title,email) - Disponible pour : Sessions, Contacts, Quotes, Invoices
- Implémenté : Support via paramètre
- ✅ Export templates - Templates d'export pré-configurés
- Implémenté : Système complet avec table
export_templates - Fonctionnalités : Templates réutilisables avec champs sélectionnés, templates par défaut
- Endpoints :
GET/POST/PUT/DELETE /api/export-templates - Documentation :
backend/src/export-templates/
- Implémenté : Système complet avec table
Suggestions supplémentaires
- ✅ Import avec validation - Validation des données importées avec rapport d'erreurs
- Implémenté : Validation complète avec rapport d'erreurs détaillé par ligne
- ✅ Import incrémental - Possibilité de mettre à jour des données existantes via import
- Implémenté : Support via paramètre
updateExisting=true, matching par email ou nom
- Implémenté : Support via paramètre
- ✅ Mapping de champs personnalisé - Permettre le mapping de colonnes CSV vers les champs du CRM
- Implémenté : Auto-détection automatique + support de mapping personnalisé via paramètre JSON
- ❌ Import depuis autres sources - Import depuis Google Contacts, Outlook, etc.
- Non implémenté : À venir
- ❌ Synchronisation bidirectionnelle - Synchronisation automatique avec des sources externes
- Non implémenté : À venir
🔍 Recherche & Filtrage
Recherche Globale (Global Search)
- ✅ Recherche globale unifiée - Recherche unifiée dans toutes les entités (sessions, contacts, devis, factures, Notion)
- ✅ Recherche en temps réel - Recherche avec debounce pour optimiser les performances
- ✅ Intégration Notion - Recherche dans les pages et bases de données Notion
- ✅ Navigation au clavier - Navigation complète au clavier (Cmd+K / Ctrl+K, flèches, Enter)
- ✅ Actions rapides - Actions rapides depuis la recherche (créer session, créer contact)
- ✅ Résultats groupés - Résultats organisés par catégorie avec compteurs
- ⚠️ Recherche sémantique - Recherche intelligente basée sur le sens (partiellement implémenté via filtrage Notion)
- ⚠️ Historique de recherche - Conserver l'historique des recherches récentes (non implémenté)
🤖 Global Search & Intelligence Artificielle
Phase 1 : Assistant IA pour la construction de vues et actions (Priorité Haute) ✅
- ✅ Assistant conversationnel intégré - Un chatbot IA accessible directement depuis le Global Search (Cmd+K) pour répondre aux questions et exécuter des commandes
- Exemple : "Quel est le revenu total du mois dernier ?", "Montre-moi les sessions avec Jean Dupont."
- Implémenté : Détection multilingue (français/anglais), vérification OpenAI, traitement automatique
- ✅ Création assistée par IA de vues personnalisées - Générer des vues filtrées et personnalisées à partir de prompts en langage naturel
- Exemple : "Crée une vue des sessions de mariage du mois de juillet avec un montant supérieur à 2000€"
- Exemple : "Affiche tous les contacts qui n'ont pas eu de session depuis 6 mois"
- Exemple : "Montre-moi les devis en attente pour les sessions de type 'portrait'"
- Implémenté : Génération de filtres intelligents, application automatique des filtres
- ✅ Génération d'actions complexes - L'IA peut générer et exécuter des actions complexes basées sur des prompts
- Exemple : "Crée une facture pour toutes les sessions payées du mois dernier"
- Exemple : "Je veux créer une session pour Fred Le Marquier pour son mariage le 22 août 2026"
- Exemple : "Créez moi un contact et un devis de 2000€ pour cette session"
- Implémenté : Auto-exécution des actions, actions composites (contact + session + devis), notifications automatiques
- ✅ Builder de filtres intelligents - L'IA traduit les requêtes en langage naturel en filtres complexes
- Exemple : "Sessions de mariage en été 2024 avec montant > 3000€" → Filtres automatiques appliqués
- Implémenté : Traduction automatique en filtres structurés, application aux requêtes DB
- Exemple : "Contacts actifs avec au moins 2 sessions cette année" → Filtres et agrégations automatiques
Phase 2 : Création assistée par IA (Priorité Moyenne) ✅
- ✅ Création assistée par IA d'entités - Générer des brouillons de sessions, contacts, devis, factures à partir de prompts
- Exemple : "Crée une nouvelle session photo pour le mariage de Marie et Pierre le 15 juillet 2024 à Paris, avec un devis de 2500€."
- Implémenté : Service
AiCreationServiceavec endpointPOST /api/ai-assistant/draft - Fonctionnalités : Génération de brouillons pour sessions, contacts, devis, factures avec suggestions et avertissements
- Fichiers :
backend/src/ai-assistant/ai-creation.service.ts
- ✅ Génération de rapports intelligents - Demander des rapports personnalisés via des prompts, l'IA agrège les données et génère le rapport
- Exemple : "Génère un rapport PDF des revenus par type de session pour le dernier trimestre."
- Implémenté : Service
AiReportServiceavec endpointPOST /api/ai-assistant/report - Fonctionnalités : Génération de rapports avec sections, insights, recommandations basées sur les données fournies
- Fichiers :
backend/src/ai-assistant/ai-report.service.ts
- ✅ Rédaction assistée - Utiliser l'IA pour générer des ébauches d'emails, de descriptions de sessions, de notes de contact, etc.
- Exemple : "Rédige un email de suivi pour le devis #2024-001 en rappelant les avantages de notre offre."
- Implémenté : Service
AiWritingServiceavec endpointPOST /api/ai-assistant/writing - Fonctionnalités : Génération d'emails, descriptions, notes avec support de contexte, ton, langue
- Fichiers :
backend/src/ai-assistant/ai-writing.service.ts
- Statut : ✅ Complété (2025-01-XX)
- Documentation :
backend/src/ai-assistant/README.md,docs/AI_SEARCH_ARCHITECTURE.md
Phase 3 : Intelligence avancée (Priorité Basse)
- Analyse et insights automatiques - L'IA analyse les données du CRM et propose des insights proactifs
- Exemple : "Vous avez 3 clients inactifs depuis plus de 6 mois, souhaitez-vous leur envoyer un email de relance ?"
- Suggestions d'actions contextuelles - Basé sur le contexte de la recherche ou de la page actuelle, l'IA propose des actions pertinentes
- Exemple : Si l'utilisateur recherche un contact, l'IA pourrait suggérer "Envoyer un email", "Créer une session", "Voir les devis en attente"
- Recherche conversationnelle - Permettre aux utilisateurs de poser des questions en langage naturel pour trouver des informations
- Exemple : "Quels sont les contacts qui ont un anniversaire ce mois-ci et qui n'ont pas eu de session depuis un an ?"
- Prédictions et recommandations - L'IA pourrait prédire la probabilité de conversion d'un devis ou recommander des actions pour améliorer la relation client
- Résumé et synthèse - Demander à l'IA de résumer des conversations, des notes de session ou des documents Notion
- Exemple : "Résume les points clés de la dernière session avec le client X."
💬 Messagerie & Communication
État actuel
- ✅ Messagerie globale (app) : vue centralisée avec liste de contacts + amis, tri par dernier message, pastilles non‑lus, actions rapides
- ✅ Messages portail client : fil de discussion client avec notifications UI et gestion “compte client non créé”
- ✅ Routes agnostiques : endpoints app en
/client-messages/app/*(alias legacy conservé) - ✅ Invitations auto : si le client n’a pas de compte, l’email d’invitation est envoyé avec aperçu du message
- ✅ Notifications différées : email d’alerte sur le 1er message non‑lu après délai, annulé si lecture
- ✅ Préférences utilisateur : toggle pour activer/désactiver ces notifications dans une sidebar settings
Améliorations futures
- ⚠️ Présence temps réel complète : WebSocket + last_seen_at plus précis pour clients et amis
- ⚠️ Recherche avancée : recherche plein‑texte dans conversations et messages
- ⚠️ Archivage : archivage/restauration de conversations côté app et portail
Suggestions supplémentaires
- Filtres sauvegardés - Sauvegarder des combinaisons de filtres fréquemment utilisées
- Recherche par tags - Recherche et filtrage avancé par tags avec opérateurs logiques (ET, OU, SAUF)
- Suggestions de recherche - Autocomplétion intelligente basée sur les données existantes
💡 Insights Proactifs & Intelligence
LOT A : IA Proactive Insights (MVP Production) ✅ 100% COMPLÉTÉ
Objectif : Générer des insights actionnables basés sur les données CRM (devis, factures, sessions, bookings, checklists, emails), les pousser en notifications in-app + push, et les afficher dans un panneau Insights.
Approche MVP : Règles déterministes (pas de LLM au début) pour garantir la fiabilité et la performance.
Statut : ✅ 100% complété (2026-01-27) - Toutes les fonctionnalités MVP implémentées et opérationnelles
Documentation : docs/INSIGHTS_IMPLEMENTATION_PLAN.md
Fonctionnalités implémentées :
- ✅ 8 règles d'insights (QuoteStale, InvoiceOverdue, InvoicePartiallyPaid, SessionPrepMissing, SessionPostprodLag, SessionWithoutDelivery, BookingUpcoming, ChecklistIncomplete)
- ✅ Génération automatique quotidienne (scheduler 3h du matin)
- ✅ Génération réactive via events (quote status changed, invoice created, etc.)
- ✅ Queue BullMQ avec processor et retry/backoff
- ✅ API complète (7 endpoints REST)
- ✅ Interface utilisateur avec filtres avancés
- ✅ Notifications in-app + WebSocket + push
- ✅ Badge compteur dans sidebar
- ✅ Tests unitaires (>80% coverage)
- ✅ i18n FR/EN complet
A1. Modèle & Persistence
- Tables :
ai_insights,ai_insight_events,ai_insight_feedback - Enums :
insight_type,insight_severity,insight_status,insight_feedback_rating,insight_event_type - Indexes : Optimisés pour requêtes par owner_id, status, type, severity
- Déduplication : Contrainte unique sur
(unique_key, owner_id)pour éviter les doublons - Migrations : Liquibase avec up/down
- Types : Kysely types complets
Types d'insights prévus :
QUOTE_STALE- Devis envoyés > N jours sans réponseINVOICE_OVERDUE- Factures en retardINVOICE_PARTIALLY_PAID- Factures partiellement payéesSESSION_PREP_MISSING- Sessions proches sans checklist complèteSESSION_POSTPROD_LAG- Sessions passées sans tâche post-prodSESSION_WITHOUT_DELIVERY- Sessions passées sans livraisonBOOKING_UPCOMING- Réservations à venirCHECKLIST_INCOMPLETE- Checklists incomplètes pour sessions proches
A2. Génération "Rules First"
- Engine de règles :
InsightRuleEngineServiceorchestrant toutes les règles - Règles isolées : Chaque règle dans un fichier séparé, testable individuellement
- 0 appel OpenAI : Approche déterministe en MVP pour garantir la fiabilité
- Structure :
backend/src/insights/generation/rules/- Toutes les règlesbackend/src/insights/generation/insight-rule-engine.service.ts- Engine principalbackend/src/insights/generation/insights-generator.service.ts- Service de génération
Exemple de règle : QuoteStaleRule détecte les devis envoyés depuis plus de 7 jours sans réponse, calcule la sévérité (INFO/WARN/CRITICAL) selon le nombre de jours, génère un insight avec actions suggérées (voir devis, envoyer rappel).
A3. Job + Queue + Notifications
- Queue BullMQ :
ai-insightsavec processor dédié - Scheduler quotidien : Génération automatique à 2h du matin pour tous les utilisateurs actifs
- Triggers event-driven : Génération immédiate sur événements (quote status changed, invoice overdue, session date approaching)
- Notifications :
- Notification in-app via
NotificationsService - WebSocket event
insights:newpour updates temps réel - Push notification (si activé)
- Notification in-app via
- Idempotence : Unique jobId pour éviter les exécutions multiples
- Retry/Backoff : Gestion des erreurs avec retry exponentiel
A4. API + UI
Backend :
GET /api/insights- Liste paginée avec filtres (status, severity, type)GET /api/insights/unread-count- Compteur d'insights non lusPOST /api/insights/:id/read- Marquer comme luPOST /api/insights/:id/archive- ArchiverPOST /api/insights/:id/feedback- Feedback utilisateur (UP/DOWN)POST /api/insights/run- Déclencher génération manuelle (debug/admin)
Frontend :
- Page Insights Center :
/insightsavec onglets (Open / Read / Archived) - Composant InsightCard : Affichage avec titre, résumé, sévérité, actions suggérées
- Badge compteur : Dans le header avec nombre d'insights non lus
- Filtres : Par type, sévérité, statut
- Actions : Deep links vers entités, CTA pour actions suggérées
- WebSocket : Updates temps réel lors de création d'insights
Fonctionnalités :
- ✅ Déduplication automatique via
unique_key - ✅ TTL logique avec
expires_atpour insights obsolètes - ✅ Feedback utilisateur pour améliorer la pertinence
- ✅ Audit trail complet via
ai_insight_events
Corrections Post-MVP (2026-01-27)
Problèmes résolus :
- ✅ Correction des noms de colonnes SQL (
invoice_number→number) - ✅ Correction des références aux alias dans les clauses
having - ✅ Sérialisation JSONB explicite pour éviter les erreurs de double sérialisation
- ✅ Gestion des paramètres de requête avec valeurs par défaut
- ✅ Configuration complète de la navigation et breadcrumbs
LOT B : Insights v2 - LLM-assisted summarization ✅ 100% COMPLÉTÉ
Statut : ✅ 100% complété (2026-01-27) - Service d'enrichissement LLM opérationnel
Objectif : Enrichir (pas remplacer) les insights générés par les règles avec :
- ✅ Titre plus naturel et contextuel
- ✅ Résumé court (1-2 lignes) généré par LLM
- ⚠️ Recommandations plus intelligentes basées sur le contexte (futur)
- ⚠️ Déduplication sémantique (détecter des insights similaires) (futur)
Fonctionnalités implémentées :
- ✅ Service
InsightEnrichmentServicepour enrichir les insights avec LLM - ✅ Cache des résultats (7 jours) pour éviter les appels répétés
- ✅ Anonymisation des données avant envoi à OpenAI (IDs remplacés par
[ID]) - ✅ Fallback gracieux sur les valeurs originales en cas d'erreur
- ✅ Gestion des timeouts avec
withTimeout - ✅ Intégration dans
InsightsGeneratorServiceavec dégradation gracieuse - ✅ Activation automatique basée sur la présence d'une clé OpenAI dans les métadonnées utilisateur
- ✅ Tests unitaires complets (11 tests, 100% passants)
Contraintes respectées :
- ✅ Ne remplace pas les règles déterministes (garantie de fiabilité)
- ✅ Utilise OpenAI uniquement pour l'enrichissement
- ✅ Cache des résultats LLM pour éviter les coûts répétés
- ✅ Fallback sur les valeurs générées par les règles si LLM échoue
- ✅ Appels OpenAI uniquement pour enrichissement, sur payload minimal + anonymisé
- ✅ Cache TTL (7 jours) + timeouts configurés
Activation :
- L'enrichissement LLM est automatiquement activé si l'utilisateur a une clé OpenAI configurée dans ses métadonnées
- Si la clé OpenAI n'est pas configurée, les valeurs originales (générées par les règles) sont utilisées
- Aucune configuration supplémentaire n'est nécessaire
Documentation : docs/INSIGHTS_IMPLEMENTATION_PLAN.md - Section "LOT B"
LOT C : Support Multi-Tenant ✅ 100% COMPLÉTÉ
Statut : ✅ 100% complété (2026-01-27) - Support multi-tenant opérationnel
Objectif : Étendre le système d'insights pour supporter les organisations.
Fonctionnalités implémentées :
- ✅ Génération d'insights au niveau organisation (insights partagés entre membres)
- ✅ Filtrage par organisation dans l'API et l'UI
- ✅ Permissions : Vérification de l'appartenance à l'organisation avant accès
- ✅ Notifications : Tous les membres de l'organisation sont notifiés des nouveaux insights
- ✅ Déduplication : Insights personnels et organisation séparés avec clés uniques distinctes
- ✅ Backward compatibility : Par défaut, affichage des insights personnels uniquement
- ✅ Listener WebSocket
insights:newdans le frontend pour mise à jour en temps réel
Comportement :
- Insights personnels :
organization_id = null, visibles uniquement par le propriétaire - Insights organisation :
organization_id = "org-1", visibles par tous les membres de l'organisation - Lors de la génération, les insights sont créés à la fois au niveau personnel ET au niveau de chaque organisation de l'utilisateur
- Le frontend permet de filtrer entre insights personnels et insights d'organisation via un sélecteur
Documentation : docs/INSIGHTS_IMPLEMENTATION_PLAN.md - Section "LOT C"
LOT D : Personnalisation et Configuration ✅ 100% COMPLÉTÉ
Statut : ✅ 100% complété (2026-01-27) - Système de configuration complet et opérationnel
Objectif : Permettre aux utilisateurs de personnaliser les règles d'insights et les notifications.
Fonctionnalités implémentées :
- ✅ Configuration des seuils (ex: nombre de jours pour "devis en attente")
- ✅ Activation/désactivation de règles spécifiques
- ✅ Configuration des emails d'insights :
- ✅ Activation/désactivation de l'envoi d'emails par utilisateur ou organisation
- ✅ Configuration du contenu : types d'insights à inclure (par type, sévérité)
- ✅ Configuration de l'heure de diffusion (ex: résumé quotidien à 8h, hebdomadaire le lundi)
- ✅ Format : résumé quotidien/hebdomadaire ou notification immédiate pour insights critiques
- ✅ Templates HTML avec statistiques et liens directs
- ✅ Support multi-tenant (settings personnels et organisation, avec fusion intelligente)
- ✅ Intégration dans le rule engine (seuils configurables appliqués automatiquement)
- ⚠️ Règles personnalisées (futur : permettre aux utilisateurs de créer leurs propres règles)
Détails emails d'insights :
- ✅ Niveau utilisateur : Configuration personnelle dans les paramètres utilisateur
- ✅ Niveau organisation : Configuration partagée pour tous les membres (gérée par OWNER/ADMIN)
- ✅ Types de diffusion :
- ✅ Résumé quotidien : tous les insights du jour à une heure configurée
- ✅ Résumé hebdomadaire : tous les insights de la semaine à un jour/heure configuré
- ✅ Notification immédiate : uniquement pour insights critiques (optionnel)
- ✅ Filtres configurables :
- ✅ Types d'insights (QUOTE_STALE, INVOICE_OVERDUE, etc.)
- ✅ Niveaux de sévérité (INFO, WARN, CRITICAL)
- ✅ Scope : personnels uniquement, organisation uniquement, ou les deux
- ✅ Template email : HTML avec liste des insights, liens directs vers chaque insight, statistiques
Implémentation :
- ✅ Table
insight_settingsavec JSONB pour flexibilité - ✅ Repository et Service avec fusion intelligente des settings personnels/organisation
- ✅ API REST complète (5 endpoints)
- ✅ Service d'envoi d'emails avec templates HTML
- ✅ Scheduler automatique (cron horaire)
- ✅ Interface de configuration dans le frontend (dialog avec onglets)
- ✅ Intégration dans le rule engine pour appliquer les seuils configurables
Documentation : docs/INSIGHTS_IMPLEMENTATION_PLAN.md - Section "LOT D"
LOT E : Analytics et Intelligence (Priorité Basse)
Objectif : Analyser l'utilisation des insights pour améliorer le système.
Fonctionnalités :
- Dashboard analytics : Quels insights sont les plus utiles (feedback UP/DOWN)
- Métriques : Taux de résolution, temps moyen de résolution
- Recommandations basées sur l'historique
- Détection de patterns : Identifier les situations récurrentes
Estimation : 2-3 semaines
LOT F : Nouvelles Règles d'Insights (Priorité Moyenne)
Objectif : Ajouter de nouvelles règles pour couvrir plus de cas d'usage.
Règles candidates :
CONTACT_NO_ACTIVITY- Contacts sans interaction depuis X joursQUOTE_EXPIRING- Devis proches de leur date d'expirationINVOICE_PAYMENT_REMINDER- Rappels de paiement automatiquesSESSION_FOLLOWUP_MISSING- Sessions terminées sans suivi clientCONTRACT_EXPIRING- Contrats proches de leur expirationRECURRING_SESSION_MISSING- Sessions récurrentes non créées
Estimation : 1 semaine par règle
Améliorations UI/UX (Priorité Moyenne)
Fonctionnalités :
- Graphiques et visualisations : Tendances des insights sur le temps
- Vue calendrier : Afficher les insights sur un calendrier
- Groupement intelligent : Grouper les insights similaires
- Actions en lot : Marquer plusieurs insights comme lus/archivés en une fois
- Filtres sauvegardés : Permettre de sauvegarder des filtres personnalisés
- Export des insights : Exporter la liste des insights en CSV/Excel
- Listener WebSocket en temps réel : ✅ IMPLÉMENTÉ - Mise à jour automatique de l'UI lors de nouveaux insights
Amélioration globale : Settings contextuels avec Sidebar (Priorité Haute) - ✅ PARTIELLEMENT COMPLÉTÉ (2026-01-29)
Objectif : Décharger les pages de settings en permettant un accès direct aux configurations depuis les vues contextuelles.
Statut :
- ✅ InsightsPage : Sidebar de settings complétée (règles, emails, règles personnalisées)
- ✅ UserViewPage : Sidebar de settings complétée (profile, subscription, permissions)
- ❌ AdminPanelPage : Sidebar retirée (2026-01-29) - La page Admin est déjà une page de configuration, les tabs restent inline
- ✅ SessionViewPage : Sidebar de settings complétée (type de session, notifications) - 2026-01-29
- ✅ OrganizationViewPage : Sidebar de settings complétée (membres, ressources partagées) - 2026-01-29
- ✅ DashboardPage : Sidebar de settings complétée (widgets, rafraîchissement) - 2026-01-29
Fonctionnalités :
- ✅ Sidebar depuis la droite : Panneau latéral qui apparaît au clic sur le bouton Settings
- ✅ Fond foncé overlay : Overlay semi-transparent au-dessus du contenu principal pour mettre en évidence la sidebar
- ✅ Bouton Settings (icône roue crantée) dans header :
- Bouton icon-only (
size="icon") avec variantoutline - Icône
Settingsde lucide-react (h-4 w-4) - Texte
sr-onlypour l'accessibilité - Positionné dans le header à droite, à côté des autres actions
- Pattern uniforme :
<Button size="icon" variant="outline" onClick={() => setSettingsSidebarOpen(true)}><Settings className="h-4 w-4" /><span className="sr-only">{t("common.settings")}</span></Button>
- Bouton icon-only (
- ✅ Configuration par domaine : La sidebar affiche uniquement les settings pertinents au contexte
- ✅ Footer fixe avec actions : Boutons Cancel/Save fixés en bas de la sidebar
Exemples d'utilisation implémentés :
- ✅ Page Insights : Bouton Settings → Sidebar avec : activation/désactivation de règles, configuration des seuils, paramètres d'emails, règles personnalisées
- ✅ Page User : Bouton Settings → Sidebar avec : profile (display name, status), subscription (Stripe), permissions (overrides)
- ✅ Page Session : Bouton Settings → Sidebar avec : type de session (durée par défaut, validation automatique, paiement en ligne), notifications (à venir)
- ✅ Page Organisation : Bouton Settings → Sidebar avec : membres (gestion des rôles), ressources partagées (sessions, quotes, invoices, contracts, contacts)
- ✅ Page Dashboard : Bouton Settings → Sidebar avec : widgets (affichage/masquage des sections), rafraîchissement (à venir)
Avantages :
- ✅ Réduction du nombre de clics pour accéder aux configurations courantes
- ✅ Meilleure découverte des options de configuration
- ✅ Décharge des pages Settings principales (utilisateur et admin)
- ✅ Expérience plus contextuelle et intuitive
- ✅ Pattern uniforme avec
ContextualSettingsSidebarréutilisable
Fichiers créés :
frontend/src/pages/users/UserViewPage/components/UserSettingsSidebarContent.tsxfrontend/src/pages/sessions/SessionViewPage/components/SessionSettingsSidebarContent.tsxfrontend/src/pages/organizations/OrganizationViewPage/components/OrganizationSettingsSidebarContent.tsxfrontend/src/pages/dashboard/DashboardPage/components/DashboardSettingsSidebarContent.tsx
✅ COMPLÉTÉ (2026-01-29) - Toutes les vues principales ont maintenant des sidebars de settings contextuels
Recommandation d'ordre d'implémentation :
- ✅ LOT C (Multi-tenant) - ✅ COMPLÉTÉ (2026-01-27)
- ✅ LOT B (LLM summarization) - ✅ COMPLÉTÉ (2026-01-27)
- LOT D (Personnalisation et Configuration) - Permet aux utilisateurs d'adapter le système à leurs besoins, incluant la configuration des emails d'insights
- Améliorations UI/UX - Améliore l'utilisation quotidienne, incluant les Settings contextuels avec Sidebar Hover (amélioration globale)
- LOT F (Nouvelles règles) - Étend la couverture du système
- LOT E (Analytics) - Nice-to-have pour optimiser le système
LOT C : Analytics Business (Futur)
- Table
session_costs(temps, travel, subcontract) - KPIs : marge brute / type / saison
- Prévisionnel trésorerie 3/6/12 mois
LOT D : Système d'Authentification Client 🚀 EN PLANIFICATION
Objectif : Créer un système d'authentification client complet permettant aux clients de voir tous leurs projets avec tous leurs photographes depuis une interface unifiée, avec messagerie, espace fichiers personnel et préférences sauvegardées.
Statut : 🚀 En planification - Architecture et plan d'implémentation détaillés disponibles
Vision :
Le système d'authentification client transforme l'accès client de token-only vers un système hybride :
- Accès Token (existant) : Accès rapide sans compte pour voir/signer un document spécifique
- Compte Client (nouveau) : Compte authentifié avec login/mot de passe pour une expérience complète
Contexte métier :
Pour le Client :
- Vue unifiée : Tous ses projets avec tous les photographes au même endroit
- Historique persistant : Retrouver ses documents, messages, fichiers même après des années
- Communication directe : Messagerie avec chaque photographe
- Espace personnel : Stockage de fichiers (photos reçues, documents importants)
- Préférences : Notifications, thème, timezone personnalisés
Pour le Photographe :
- Clients engagés : Meilleure conversion et fidélisation
- Communication centralisée : Historique des échanges avec chaque client
- Professionnalisme : Image "studio premium" avec portail client dédié
- Réduction des emails : Moins de "Où en est-on ?" grâce au portail
Architecture :
ClientAccountest global (un email = un compte, système entier)Contactreste local au photographe (owner_id)- La table
client_account_contactsfait la liaison
Tables DB :
client_accounts: Comptes clients globaux (email unique, password_hash, status, etc.)client_account_contacts: Liaison ClientAccount ↔ Contactclient_messages: Messages client ↔ photographeclient_files: Espace fichiers personnel du clientclient_preferences: Préférences (notifications, thème, timezone)client_password_reset_tokens: Tokens de reset passwordclient_refresh_tokens: Refresh tokens JWT
Modules Backend :
client-auth: Register, login, logout, forgot-password, reset-password, refreshclient-accounts: CRUD profil, liaison contacts, projets, documentsclient-messages: Messagerie client ↔ photographeclient-files: Upload/download fichiers personnels
Endpoints principaux :
- Auth :
/api/client-auth/register,login,logout,forgot-password,reset-password,refresh - Compte :
/api/client-accounts/me,/me/photographers,/me/projects,/me/documents - Messages :
/api/client-messages/conversations,/conversations/:contactId - Fichiers :
/api/client-files/,/upload,/:fileId - Photographe :
/api/contacts/:id/invite-to-create-account,/:id/messages
Frontend :
- Layout :
ClientPortalLayoutavec header/sidebar dédiés - Pages : Login, Register, Dashboard, Projects, Documents, Messages, Files, Settings
- Hooks :
useClientAuth,useClientProjects,useClientMessages,useClientFiles
Sécurité :
- JWT séparés : Tokens client (
type: "client") distincts des tokens user - Guards séparés :
ClientAuthGuardvsAuthGuard - Rate limiting : Login (5/15min), Register (3/h/IP), Reset (3/h/email)
- Liaison sécurisée : Vérification email match avant liaison Contact ↔ ClientAccount
Compatibilité :
- ✅ Tokens existants : L'accès token continue de fonctionner indépendamment
- ✅ Pas de migration forcée : Les Contacts existants restent tels quels
- ✅ Liaison progressive : Le photographe peut inviter ses clients quand il le souhaite
Phases d'implémentation :
- Phase 1 - MVP Auth (2-3 sem) : Register, login, logout, forgot-password, reset-password
- Phase 2 - Expérience (2 sem) : Vue projets multi-photographes, documents, timeline
- Phase 3 - Messagerie (1-2 sem) : Communication directe client-photographe
- Phase 4 - Fichiers (1-2 sem) : Espace personnel, préférences
- Phase 5 - Photographe (1 sem) : Invitation clients, indicateur compte actif
Documentation complète : docs/CLIENT_AUTHENTICATION_PLAN.md
👥 Gestion des Contacts
Suggestions basées sur l'analyse
- ❌ Segmentation avancée - Créer des segments de contacts avec critères complexes
- Non implémenté : Pas de système de segmentation de contacts
- ❌ Scoring de contacts - Système de scoring pour identifier les contacts les plus prometteurs
- Non implémenté : Pas de système de scoring automatique des contacts
- ⚠️ Historique d'interactions - Timeline complète de toutes les interactions avec un contact
- Partiellement implémenté : Système de tracking d'emails (ouvertures, clics) via
email_trackingtable - Fonctionnalités : Tracking des emails envoyés (OPEN, LINK_CLICK), association avec contacts/quotes/invoices
- Manquant : Timeline complète centralisée (emails, sessions, appels, notes), vue dédiée dans l'interface contact
- Partiellement implémenté : Système de tracking d'emails (ouvertures, clics) via
- ❌ Relations entre contacts - Gérer les relations entre contacts (famille, amis, collègues)
- Non implémenté : Pas de système de gestion des relations entre contacts
- ❌ Import depuis réseaux sociaux - Import automatique depuis Instagram, Facebook, etc.
- Non implémenté : Pas d'intégration avec les réseaux sociaux pour l'import de contacts
- ⚠️ Détection de doublons améliorée - Algorithme plus intelligent pour détecter les doublons
- Partiellement implémenté : Détection automatique de contacts similaires lors de la création via l'agent IA (
ConflictDetectionHelper.findSimilarContacts) - Fonctionnalités : Recherche par nom (prénom, nom, combinaisons), filtrage des contacts similaires, détection de conflits avant création
- Limitations : Détection uniquement lors de la création via agent IA, pas d'interface dédiée pour détecter les doublons existants
- Partiellement implémenté : Détection automatique de contacts similaires lors de la création via l'agent IA (
- ❌ Fusion de contacts - Outil pour fusionner des contacts en doublon
- Non implémenté : Pas d'outil de fusion de contacts (seulement détection de doublons)
📅 Gestion des Sessions & Réservations
Fonctionnalités implémentées
- ✅ Gestion de disponibilité - Système de gestion des créneaux disponibles/bloqués avec support des créneaux récurrents
- Création de créneaux uniques ou récurrents (hebdomadaire, quotidien)
- Support des jours spécifiques via
byDay(MO, TU, WE, etc.) - Date de fin de récurrence optionnelle
- Expansion automatique des créneaux récurrents en occurrences individuelles
- ✅ Synchronisation calendrier - Sync bidirectionnelle avec Google Calendar (toutes les 5 minutes) avec résolution de conflits intelligente
- Synchronisation automatique des événements
- Gestion des conflits et résolution intelligente
- Support des événements récurrents
- ✅ Système de réservation publique - Interface publique pour permettre aux clients de réserver des créneaux
- ✅ Mise en avant sur la landing page - Section dédiée ajoutée avec présentation des avantages (2026-01-XX)
- Interface publique : Page de réservation accessible via URL publique (
/booking/:userId) - Calendrier interactif : Affichage des créneaux disponibles par mois avec navigation
- Formulaire de réservation : Nom, email, téléphone (obligatoire), type de rendez-vous (téléphone/vidéo), notes
- Création d'événements Google Calendar : Les réservations créent directement des événements (pas de sessions)
- Préfixe
[MEETING]: Identification claire des rendez-vous dans le calendrier - Filtrage intelligent : Exclusion automatique des créneaux déjà réservés
- Cache temporaire : Gestion du délai de propagation Google Calendar (5 minutes)
- Tokens d'annulation : Tokens sécurisés et encryptés pour annuler les réservations
- Emails automatiques : Confirmation au client et notification au User
- Notifications in-app et push : Notifications en temps réel pour le User
- Interface de gestion : Panel de gestion des bookings avec statistiques (total, upcoming, past)
- Édition et suppression : Modification et suppression des bookings depuis l'interface User
- Documentation OpenAPI : Documentation complète des endpoints publics
- Tests unitaires : Couverture >80% pour les services critiques
- Statut : ✅ Production-ready (56% des améliorations planifiées complétées)
Suggestions basées sur l'analyse
- ✅ Calendrier visuel amélioré - Vue calendrier avec drag & drop, vue mensuelle/semaine/jour
- Complété : Vue timeline pour la semaine et le jour avec grille horaire (0h-23h), positionnement précis des événements/sessions, affichage des créneaux de disponibilité, visualisation des chevauchements, légende interactive, filtres visuels, vue agenda/liste, drag & drop dans toutes les vues (Month, Week, Day)
- Documentation : Voir
docs/CALENDAR_VISUAL_IMPROVEMENTS.md
- ✅ Planification récurrente - Sessions récurrentes (hebdomadaire, mensuelle, quotidienne)
- Statut : ✅ Complété
- Description : Permettre de créer des sessions récurrentes avec des patterns de récurrence similaires aux créneaux de disponibilité
- Fonctionnalités implémentées :
- ✅ Patterns de récurrence : Quotidien, hebdomadaire (avec jours spécifiques via
byDay), mensuel, annuel avec intervalle personnalisable - ✅ Date de fin : Date de fin de récurrence optionnelle
- ✅ Gestion des occurrences :
- ✅ Génération automatique des occurrences individuelles lors de la création d'une session récurrente (6 mois à l'avance)
- ✅ Génération dynamique des occurrences dans le calendrier pour affichage au-delà de la période générée
- ✅ Possibilité de modifier/supprimer une occurrence spécifique sans affecter les autres
- ✅ Possibilité de modifier toutes les occurrences d'une série
- ✅ Visualisation de la série récurrente dans le calendrier avec indicateur visuel (icône Repeat, couleur violette)
- ✅ Synchronisation Google Calendar :
- ✅ Création d'événements récurrents dans Google Calendar avec
recurrence(RRULE) - ✅ Gestion des exceptions pour modifications d'occurrences individuelles (
updateRecurringSessionOccurrence) - ✅ Gestion des exceptions pour suppressions d'occurrences individuelles (
deleteRecurringSessionOccurrence)
- ✅ Création d'événements récurrents dans Google Calendar avec
- ✅ Interface utilisateur :
- ✅ Option "Récurrent" lors de la création/modification de session (
RecurrenceSelector) - ✅ Sélecteur de fréquence (quotidien, hebdomadaire, mensuel, annuel)
- ✅ Sélection des jours de la semaine pour récurrence hebdomadaire (checkboxes)
- ✅ Intervalle personnalisable (toutes les X semaines/mois/etc.)
- ✅ Date de fin de récurrence
- ✅ Indicateur visuel dans le calendrier pour les sessions récurrentes
- ✅ Dialog de confirmation pour actions sur occurrences individuelles vs série complète (
RecurringSessionActionDialog)
- ✅ Option "Récurrent" lors de la création/modification de session (
- ✅ Patterns de récurrence : Quotidien, hebdomadaire (avec jours spécifiques via
- Architecture technique implémentée :
- ✅ Base de données : Migration Liquibase ajoutant
is_recurring,recurrence_pattern(JSON),recurrence_end_date,parent_session_idà la tablesessions - ✅ Backend :
- ✅ Helper
RecurringSessionExpanderpour générer les occurrences (similaire àRecurringSlotExpander) - ✅ Modification de
SessionsServicepour gérer la création/mise à jour/suppression de sessions récurrentes - ✅ Méthode
updateSingleSessionpour encapsuler la logique de mise à jour d'une session - ✅ Support de
updateAllOccurrencesdans le endpoint de mise à jour - ✅ Support de
deleteAllOccurrencesdans le endpoint de suppression - ✅
GoogleCalendarService.createRecurringSessionEventpour créer des événements récurrents avec RRULE - ✅
GoogleCalendarService.updateRecurringSessionOccurrencepour créer des exceptions lors de modifications individuelles - ✅
GoogleCalendarService.deleteRecurringSessionOccurrencepour créer des exceptions lors de suppressions individuelles
- ✅ Helper
- ✅ Frontend :
- ✅ Composant
RecurrenceSelectordans le formulaire de création/modification de session - ✅ Composant
RecurringSessionActionDialogpour gérer les actions sur occurrences vs série - ✅ Helper
expandRecurringSessionspour générer dynamiquement les occurrences dans le calendrier - ✅ Modification de
useCalendarDatapour fusionner occurrences existantes et générées dynamiquement - ✅ Affichage visuel des sessions récurrentes dans
DraggableSessionetCalendarLegend
- ✅ Composant
- ✅ Base de données : Migration Liquibase ajoutant
- Cas d'usage :
- Sessions de coaching hebdomadaires (tous les lundis à 10h)
- Séances photo mensuelles (premier samedi de chaque mois)
- Sessions de suivi quotidiennes pendant une période
- Événements annuels récurrents
- Fichiers principaux :
backend/src/sessions/recurring-session-expander.helper.tsbackend/src/google-calendar/google-calendar.service.ts(méthodes récurrentes)backend/src/sessions/sessions.service.ts(logique de gestion)frontend/src/pages/sessions/SessionFormPage/components/RecurrenceSelector.tsxfrontend/src/pages/calendar/CalendarPage/helpers/expandRecurringSessions.tsfrontend/src/pages/calendar/CalendarPage/hooks/useCalendarData.ts
- Améliorations implémentées récemment :
- ✅ Prévisualisation des occurrences : Afficher une liste de prévisualisation des occurrences qui seront générées dans le formulaire de création
- Statut : ✅ Complété
- Description : Composant
RecurrencePreviewintégré dans le formulaire de création/modification de session, affichant jusqu'à 20 occurrences avec mise à jour en temps réel lors des changements de pattern ou de dates - Fichiers :
frontend/src/pages/sessions/SessionFormPage/components/RecurrencePreview.tsx
- ✅ Modification de
recurrence_end_date: Supprimer automatiquement les occurrences au-delà de la nouvelle date de fin- Statut : ✅ Complété
- Description : Lors de la modification de la date de fin de récurrence d'une session parent récurrente, suppression automatique des occurrences futures au-delà de la nouvelle date, avec nettoyage des événements Google Calendar et fichiers associés
- Fichiers :
backend/src/sessions/sessions.service.ts(méthodeupdateSingleSession)
- ✅ Modification du pattern de récurrence : Régénérer les occurrences si le pattern de récurrence est modifié
- Statut : ✅ Complété
- Description : Détection automatique des changements de pattern de récurrence, suppression de toutes les occurrences existantes (et leurs événements Google Calendar, fichiers, etc.), régénération des occurrences avec le nouveau pattern, copie automatique des tags/contacts/providers aux nouvelles occurrences, mise à jour de l'événement Google Calendar récurrent
- Fichiers :
backend/src/sessions/sessions.service.ts(méthoderegenerateOccurrencesForParent)
- ✅ Génération périodique des occurrences : Job cron pour générer automatiquement les occurrences futures dans la DB (au-delà de 6 mois) pour améliorer les performances de recherche/statistiques
- Statut : ✅ Complété
- Description : Scheduler
RecurringSessionsSchedulerexécuté quotidiennement à 2h du matin, générant automatiquement les occurrences jusqu'à 12 mois à l'avance pour toutes les sessions récurrentes actives. Génération uniquement si la dernière occurrence est dans moins de 6 mois. Copie automatique des tags/contacts/providers aux nouvelles occurrences. - Fichiers :
backend/src/sessions/recurring-sessions.scheduler.ts,backend/src/sessions/sessions.service.ts(méthodegenerateFutureOccurrences)
- ✅ Prévisualisation des occurrences : Afficher une liste de prévisualisation des occurrences qui seront générées dans le formulaire de création
- Améliorations complétées récemment :
- ✅ Synchronisation bidirectionnelle depuis Google Calendar : Synchronisation complète des modifications d'événements récurrents depuis Google Calendar vers le CRM
- Statut : ✅ Complété
- Description : Le scheduler de synchronisation Google Calendar détecte et synchronise les modifications d'événements récurrents, y compris les exceptions et suppressions
- Fonctionnalités implémentées :
- ✅ Détection des occurrences modifiées dans Google Calendar (exceptions)
- ✅ Synchronisation des modifications vers les occurrences CRM correspondantes
- ✅ Création automatique d'occurrences manquantes si modifiées dans Google Calendar
- ✅ Détection et suppression des occurrences supprimées dans Google Calendar
- ✅ Gestion des conflits pour éviter d'écraser les modifications récentes du CRM
- ✅ Support des événements récurrents avec gestion des EXDATE (occurrences supprimées)
- Fichiers :
backend/src/google-calendar/google-calendar-sync.scheduler.ts(méthodessyncRecurringExceptionetsyncRecurringParentDeletedOccurrences)
- ✅ Synchronisation bidirectionnelle depuis Google Calendar : Synchronisation complète des modifications d'événements récurrents depuis Google Calendar vers le CRM
- ✅ Checklist de session - Checklists personnalisables par type de session
- Statut : ✅ Complètement implémenté (Backend + Frontend)
- Description : Système complet de gestion des checklists personnalisables par type de session pour s'assurer que toutes les étapes sont complétées
- Backend : ✅ Complété
- Service complet avec CRUD pour templates et items (
SessionChecklistsService) - Endpoints API fonctionnels (
/session-checklists/*) - Tables de base de données créées
- Utilisée dans
session-roadmap.service.tspour générer les roadmaps avec checklist
- Service complet avec CRUD pour templates et items (
- Frontend : ✅ Complété
- Onglet "Checklist" dans la vue de session (premier onglet)
- Affichage et gestion des items de checklist (groupés par statut)
- Application de templates à une session
- Modification du statut des items (checkbox)
- Création/modification/suppression d'items manuels
- Indicateurs visuels pour les items en retard
- Fonctionnalités implémentées :
- ✅ Templates de checklists par type de session (mariage, séance photo, événement, etc.)
- ✅ Checklist personnalisable par utilisateur
- ✅ Items de checklist avec statut (PENDING, IN_PROGRESS, COMPLETED, SKIPPED)
- ✅ Assignation d'items à des membres de l'équipe
- ✅ Dates d'échéance pour les items
- ✅ Application de templates à des sessions
- ✅ Interface utilisateur complète avec dialogs pour créer/modifier
- ✅ Groupement automatique des items par statut
- ✅ Badges de statut avec support dans
StatusBadgecomponent
- Fichiers backend :
- ✅
backend/src/session-checklists/session-checklists.service.ts - ✅
backend/src/session-checklists/session-checklists.controller.ts - ✅
backend/src/session-checklists/session-checklists.module.ts - ✅
backend/src/session-checklists/dto/*.ts
- ✅
- Fichiers frontend :
- ✅
frontend/src/client/session-checklists/useSessionChecklists.ts(hooks API React Query) - ✅
frontend/src/pages/sessions/SessionViewPage/components/ChecklistTab.tsx(onglet checklist) - ✅ Intégration dans
SessionTabs.tsxetSessionViewPage.tsx - ✅ Support du type "checklist" dans
StatusBadge.tsx - ✅ Traductions françaises complètes
- ✅
- Accès :
/sessions/$id→ Onglet "Checklist" (premier onglet) - Date de complétion : 2025-01-XX
- Rappels automatiques - Rappels par email/SMS avant les sessions
- Description : Système de rappels automatiques pour notifier les utilisateurs avant les sessions
- Fonctionnalités proposées :
- Configuration des délais de rappel (24h avant, 1h avant, etc.)
- Rappels par email et/ou SMS
- Rappels personnalisables par type de session
- Rappels pour les participants (contacts) de la session
- Template de messages personnalisables
- Intégration avec le système de notifications existant
- Priorité : Moyenne
- Estimation : 3-4 jours de développement
- ✅ Vue calendrier améliorée - Améliorations supplémentaires de l'interface calendrier
- Statut : ✅ Complété
- Fonctionnalités implémentées :
- ✅ Vue multi-calendrier : Affichage parallèle des sessions, disponibilités et événements Google Calendar dans toutes les vues
- ✅ Recherche dans le calendrier : Recherche rapide de sessions/événements directement depuis la vue calendrier avec navigation vers la date
- ✅ Filtres avancés : Filtres par statut de session, type de session, contact, tags avec interface dédiée
- ✅ Vue liste améliorée : Vue agenda/liste avec tri chronologique et filtres, groupement par jour
- ✅ Export calendrier : Export au format iCal/ICS pour import dans d'autres calendriers (Google Calendar, Outlook, etc.)
- ✅ Impression : Impression du calendrier avec vue formatée optimisée pour l'impression (pleine page, sans interface)
- ✅ Vue année : Vue annuelle pour planification à long terme avec 12 mois affichés
- ✅ Indicateurs visuels : Badges pour sessions en retard, sessions sans contact, sessions sans devis/facture
- ✅ Optimisation des performances : Utilisation de
placeholderDataetstaleTimepour éviter les rechargements inutiles lors du changement de vue - ✅ Refactoring : Refactorisation de
CalendarPage.tsxen hooks et composants plus petits pour améliorer la maintenabilité
- Fichiers principaux :
frontend/src/pages/calendar/CalendarPage/CalendarPage.tsx(refactorisé)frontend/src/pages/calendar/CalendarPage/components/CalendarSearch.tsxfrontend/src/pages/calendar/CalendarPage/components/AdvancedCalendarFilters.tsxfrontend/src/pages/calendar/CalendarPage/components/CalendarActions.tsx(export iCal)frontend/src/pages/calendar/CalendarPage/components/PrintCalendarView.tsxfrontend/src/pages/calendar/CalendarPage/components/YearView.tsxfrontend/src/pages/calendar/CalendarPage/hooks/useCalendarState.tsfrontend/src/pages/calendar/CalendarPage/hooks/useCalendarHandlers.tsfrontend/src/pages/calendar/CalendarPage/components/CalendarContent.tsxfrontend/src/pages/calendar/CalendarPage/components/CalendarViewRenderer.tsxfrontend/src/pages/calendar/CalendarPage/components/CalendarSidebar.tsx
- Documentation : Voir
docs/CALENDAR_VISUAL_IMPROVEMENTS.md
- ✅ Gestion des conflits - Verrouillage Redis pour éviter les doubles réservations simultanées
- Statut : ✅ COMPLÉTÉ - Production-ready
- Implémentation :
- Verrouillage distribué avec Redis (
CacheService.acquireLock()/releaseLock()) - Utilisation de Redis
SET NX EXpour un verrouillage atomique - Verrou avec expiration automatique (60 secondes) pour éviter les verrous orphelins
- Clé de verrou unique :
booking:lock:{userId}:{startDate}:{endDate} - Nettoyage automatique des verrous dans le bloc
finally - Message d'erreur clair si le créneau est déjà pris
- Verrouillage distribué avec Redis (
- Fichiers :
backend/src/cache/cache.service.ts,backend/src/booking/booking.controller.ts - Tests : Tests unitaires complets dans
backend/src/__tests__/cache/cache.service.spec.tset tests d'intégration dansbackend/src/__tests__/booking/booking-conflict-integration.spec.ts
- ✅ Statistiques avancées - Graphiques, export, filtres avancés pour les bookings
- Statut : ✅ COMPLÉTÉ - Production-ready
- Implémentation :
- Dashboard avec statistiques avancées (réservations par jour, semaine, mois)
- Taux d'annulation calculé à partir des tokens d'annulation
- Créneaux les plus populaires (par heure de la journée)
- Heures de pointe (top 3 heures)
- Export des données (CSV, Excel, JSON) avec upload sur R2 et signed URLs
- Filtrage par période (timeMin, timeMax) avec presets (semaine, mois, trimestre, année, tout)
- Graphiques Recharts avec visualisations interactives
- Fichiers :
backend/src/booking/bookings.controller.ts(endpoints/analyticset/export),frontend/src/pages/booking/BookingAnalyticsPage/ - Note : Filtrage actuellement limité à la plage de dates. Les filtres avancés par statut, contact, etc. peuvent être ajoutés ultérieurement si nécessaire.
- ✅ Personnalisation - Personnalisation des couleurs et du thème de la page de réservation
- Statut : ✅ COMPLÉTÉ - Production-ready
- Implémentation :
- Personnalisation des couleurs (couleur principale personnalisable via hex)
- Message d'accueil personnalisé (remplace le message par défaut)
- Messages de confirmation personnalisés
- Application de la couleur principale via CSS variables
- Interface d'administration complète (
BookingSettingsPage) pour gérer les settings - Validation des couleurs (format hex) et des longueurs de messages (max 2000 caractères)
- Fichiers :
backend/src/booking/booking-settings.service.ts,frontend/src/pages/settings/BookingSettingsPage/,infra/liquibase/changes/0107_create_booking_settings/
- ✅ Gestion des timezones - Détection automatique et conversion des timezones
- Statut : ✅ COMPLÉTÉ - Production-ready
- Implémentation :
- Détection automatique du timezone du client via
Intl.DateTimeFormat().resolvedOptions().timeZone - Affichage des heures dans le timezone local du client
- Indication du timezone utilisé (abréviation : CET, EST, PST, etc.)
- Conversion automatique lors de l'affichage dans tous les composants (calendrier, formulaire, confirmation)
- Dates stockées en UTC dans la base de données (comportement standard)
- Détection automatique du timezone du client via
- Fichiers :
frontend/src/utils/timezone.utils.ts,frontend/src/pages/booking/BookingPage/components/BookingCalendar.tsx,frontend/src/pages/booking/BookingPage/components/BookingConfirmation.tsx
💰 Gestion Financière
Fonctionnalités implémentées
- ✅ Intégration Stripe complète - Système complet de gestion des paiements et abonnements
- ✅ Gestion des abonnements : Création, annulation et reprise d'abonnements (FREE, BASIC, PRO)
- Plans configurables via l'interface admin
- Support mensuel et annuel
- Gestion des cycles de facturation
- ✅ Paiement des factures : Paiement sécurisé des factures via Stripe Payment Intents
- Interface utilisateur avec Stripe Elements
- Confirmation de paiement en temps réel
- Mise à jour automatique du statut des factures via webhooks
- ✅ Collecte de méthodes de paiement : SetupIntent pour collecter les méthodes de paiement
- Endpoint
POST /api/stripe/setup-intentpour créer un SetupIntent - Intégration avec Stripe Elements pour la collecte sécurisée
- Support des cartes bancaires
- Endpoint
- ✅ Attachement de méthodes de paiement : Attachement automatique au client Stripe
- Endpoint
POST /api/stripe/payment-methods/:paymentMethodId/attach - Définition automatique comme méthode de paiement par défaut
- Utilisé pour les abonnements récurrents
- Endpoint
- ✅ Webhooks Stripe : Synchronisation automatique des événements
customer.subscription.created/updated/deletedpayment_intent.succeeded/failed- Mise à jour automatique des statuts dans la base de données
- ✅ Historique des paiements : Suivi complet de tous les paiements
- Endpoint
GET /api/stripe/payments/history - Association avec les factures
- Traçabilité complète des transactions
- Endpoint
- ✅ Interface utilisateur : Formulaires et gestion complète
- Page de sélection des plans d'abonnement
- Formulaires de paiement sécurisés avec Stripe Elements
- Gestion des abonnements dans le profil utilisateur
- Onboarding avec collecte de méthode de paiement
- Documentation :
backend/src/stripe/README.md
- ✅ Gestion des abonnements : Création, annulation et reprise d'abonnements (FREE, BASIC, PRO)
💰 Facturation Robuste et Conforme
✅ Système de Facturation Robuste - 100% COMPLÉTÉ (2024-12-19)
- ✅ Numérotation séquentielle atomique - Format
YYYY-000001pour factures,AV-YYYY-000001pour avoirs- Protection contre les doublons même en concurrence
- Transaction atomique avec
SELECT FOR UPDATE - Service :
InvoiceNumberingService
- ✅ Immutabilité vérifiable - Factures immutables dès émission
- Snapshots complets (vendeur, acheteur, totaux, TVA, conditions paiement)
- PDF avec hash SHA-256 stocké à l'émission
- Guards API et service pour bloquer modifications
- Service :
InvoiceIssuanceService
- ✅ Conformité France/UE - Validation complète des mentions obligatoires
- Validation SIREN/SIRET (warnings)
- Validation totaux et calculs
- Endpoint
/invoices/:id/compliancepour vérification - Service :
InvoiceComplianceServiceavec règles détaillées
- ✅ Calculs précis - Utilisation de
decimal.jsvia wrapperMoney- Arrondi bancaire au centime
- Support multiples taux de TVA
- Calculs synchronisés frontend/backend
- Service :
InvoiceTotalsService
- ✅ Avoirs (Credit Notes) - Service complet de gestion des avoirs
- Génération PDF avec hash
- Impact automatique sur solde dû
- Numérotation séquentielle dédiée
- Service :
CreditNotesService
- ✅ Paiements unifiés - Service unifié pour tous les paiements
- Support Stripe, PayPal, Manual
- Paiements partiels avec réconciliation automatique
- Calcul automatique
balance_due - Statuts :
PARTIALLY_PAID,PAID,OVERDUE - Services :
PaymentsService,PaymentReconciliationService
- ✅ Export comptable - Export CSV avec plan comptable français
- Mapping comptes personnalisable par utilisateur
- Export factures, paiements et avoirs
- Format compatible logiciels comptables
- Service :
AccountingExportService,AccountMappingService
- ✅ Audit trail complet - Traçabilité de tous les événements
- Événements : émission, paiements, avoirs, génération PDF
- Métadonnées enrichies pour chaque événement
- Service :
BillingAuditService
- ✅ Endpoints admin - Administration de la facturation
POST /admin/invoices/:id/regenerate-pdf- Régénérer PDFGET /admin/invoices/:id/verify- Vérifier intégrité PDF- Controller :
BillingAdminController
- ✅ Préparation E-invoicing - Structure prête pour facturation électronique
- Champs préparatoires en base de données
- Types TypeScript complets
- Statuts : NONE, PENDING, SUBMITTED, ACCEPTED, REJECTED, CANCELLED
- ✅ Tests complets - 14 fichiers de tests
- 12 tests unitaires couvrant tous les services (tous les mocks corrigés)
- 2 tests d'intégration (concurrence, réconciliation)
- Tests validation, edge cases, erreurs
- Dernière mise à jour : Correction complète des mocks Kysely dans credit-notes.service.spec.ts (7/7 tests passent)
- Statistiques : 425 tests passent, 1 test ignoré (test complexe de réconciliation)
- Documentation complète :
docs/BILLING_LIFECYCLE.md- Cycle de vie des documentsdocs/BILLING_INVENTORY.md- Inventaire du système actueldocs/BILLING_VALIDATION.md- Guide de validationdocs/BILLING_CALCULATIONS.md- Règles de calcul détailléesdocs/BILLING_PROGRESS_RECAP.md- Récapitulatif d'avancementdocs/BILLING_FINAL_SUMMARY.md- Résumé final du projet
Suggestions d'amélioration (futures)
- Automatisation de facturation - Génération automatique de factures récurrentes
- Intégration bancaire - Import automatique des transactions bancaires
- Prévisions financières - Prévisions de revenus basées sur les devis en attente
- Gestion des acomptes - Gestion avancée des acomptes et soldes
- Multi-devises amélioré - Conversion automatique et suivi multi-devises
- Rapports fiscaux - Génération automatique de rapports pour la comptabilité
- E-invoicing complet - Implémentation complète de la facturation électronique (structure prête)
📧 Communication & Notifications
Relances / Email Sequences — RETIRÉ
Cette fonctionnalité a été retirée du codebase. Les tables DB associées ont été supprimées via la migration
0164_drop_email_sequences. Le système d'invitation et de communication client passe désormais par le Portail Client (client-auth,client-accounts).
Portail Client — ✅ Livré
- ✅ Auth client complète (register/login/refresh/forgot/reset/verify)
- ✅ Expérience client : projets, documents, timeline, messagerie
- ✅ Harmonisation UI portail ↔ accès client : header aligné, heading “Votre espace sécurisé” + “Bienvenue,
{{name}}” sur les pages d’accueil - ✅ Galeries côté portail : route
/portal/galleries, navigation + compteur dashboard, galerie visible dans la vue projet - ✅ Paiement par virement côté portail : bloc visible dans
/portal/documents(onglet factures + section factures) et dans la vue projet, même sans IBAN - ✅ Fichiers & préférences : upload/download, notifications, thème, timezone
- ✅ Invitations photographe : création, statut, validation token, re‑invitation
- ✅ Routes :
/portal/login,/portal/dashboard,/portal/projects,/portal/documents,/portal/messages,/portal/files,/portal/settings,/portal/galleries
📧 Communication & Notifications (suite)
Fonctionnalités implémentées récemment
- ✅ Surveillance d'inactivité des formulaires publics - Alertes automatiques lorsque les formulaires n'enregistrent plus de soumissions.
- Backend : champs
monitor_inactivity,inactivity_threshold_days,last_submission_at, scheduler quotidien (LeadFormsScheduler) et service (LeadFormsMonitoringService) envoyant les emails d'alerte et historisantlast_inactivity_alert_sent_at. - API : endpoint
POST /lead-forms/{id}/acknowledge-inactivity+ OpenAPI mis à jour, DTO (CreateLeadFormDto,UpdateLeadFormDto) enrichis, service de soumissions qui réinitialise les compteurs lors de chaque nouvelle soumission. - Frontend : configuration dans
LeadFormEditPage(section "Surveillance d'inactivité"), calcul dansuseDashboardet affichage dansRequestsSectionavec bouton "Marquer comme vérifié". - 🔜 Suivi recommandé : monitorer visuellement les formulaires sur d'autres écrans (liste complète des formulaires, notifications in-app), et exposer l'historique des alertes pour auditer les périodes sans trafic.
- Backend : champs
Suggestions basées sur l'analyse
- ❌ Templates d'email personnalisés - Éditeur visuel pour créer des templates d'email
- Non implémenté : Pas d'éditeur visuel pour les templates d'email (templates existants mais pas d'éditeur visuel)
- ❌ Campagnes email / Email Sequences - Retiré du codebase (migration 0164)
- ❌ SMS integration - Envoi de SMS pour les rappels et notifications
- Non implémenté : Pas d'intégration SMS
- Notifications personnalisables - Permettre aux utilisateurs de configurer leurs préférences de notification
- Non implémenté : Pas de système de préférences de notifications par type
- Notifications groupées - Regrouper les notifications similaires
- Non implémenté : Les notifications sont affichées individuellement
- ⚠️ Historique de communication - Vue centralisée de toutes les communications avec un contact
- Partiellement implémenté : Tracking des emails (voir "Historique d'interactions" ci-dessus)
- Manquant : Vue centralisée dans l'interface contact, intégration de tous les canaux (email, SMS, appels)
Notifications Push
- ✅ Notifications push navigateur - Implémentation des notifications push via Service Worker
- ✅ Permissions et abonnements - Gestion des permissions et des abonnements push
- ✅ Types de notifications - Notifications pour différents événements (nouveau devis, facture payée, rappel session, etc.)
- ✅ Notifications IA - Notifications automatiques (in-app + push) pour toutes les actions exécutées par l'IA
- Création de contact, session, devis, facture
- Actions composites (plusieurs actions en séquence)
- Notifications de succès et d'échec avec détails
- ✅ Actions rapides - Actions rapides dans les notifications (marquer comme lu, ouvrir directement)
- ✅ Notifications en arrière-plan - Recevoir des notifications même quand l'application n'est pas ouverte
- ✅ Badge de notification - Badge sur l'icône de l'application indiquant le nombre de notifications non lues
- Implémenté : Badge affiché sur le bouton de notification dans le header (
NotificationCenter.tsxligne 130-137)
- Implémenté : Badge affiché sur le bouton de notification dans le header (
- Préférences granulaires - Permettre aux utilisateurs de choisir quels types de notifications recevoir
- Son et vibration - Options pour personnaliser le son et la vibration des notifications
- Notifications programmées - Planifier des notifications pour des événements futurs
- Historique des notifications - Consulter l'historique des notifications envoyées
🔐 Sécurité & Conformité
Suggestions basées sur l'analyse
- ❌ Authentification à deux facteurs (2FA) - Ajout de l'2FA pour renforcer la sécurité
- Non implémenté : Pas d'authentification à deux facteurs
- ❌ Gestion des sessions actives - Voir et gérer les sessions actives de l'utilisateur
- Non implémenté : Pas d'interface pour voir/gérer les sessions actives (tokens JWT)
- ⚠️ Logs d'audit améliorés - Export des logs d'audit, alertes sur actions suspectes
- Partiellement implémenté : Système d'audit complet avec logging automatique, filtrage, pagination, interface admin (
/admin→ Audit Logs) - Fonctionnalités implémentées : Logging automatique via
@AuditLog()decorator, filtrage par action/entité/date, pagination, interface admin complète - Manquant : Export des logs d'audit (CSV, Excel, JSON), alertes automatiques sur actions suspectes
- Partiellement implémenté : Système d'audit complet avec logging automatique, filtrage, pagination, interface admin (
- ✅ Conformité RGPD renforcée - Outils pour gérer les demandes RGPD (droit à l'oubli, portabilité)
- Implémenté : Module GDPR complet avec tous les droits RGPD (ACCESS, RECTIFICATION, ERASURE, PORTABILITY, OBJECTION, RESTRICTION)
- ⚠️ Chiffrement de bout en bout - Chiffrement des données sensibles
- Partiellement implémenté : Chiffrement des tokens sensibles (Google OAuth, tokens de validation) via
EncryptionService - Manquant : Chiffrement de bout en bout pour toutes les données sensibles (notes, messages, etc.)
- Partiellement implémenté : Chiffrement des tokens sensibles (Google OAuth, tokens de validation) via
- ⚠️ Backup automatique - Sauvegarde automatique avec restauration point-in-time
- Partiellement implémenté : Script de backup manuel (
infra/backup-db.sh), endpoint API pour déclencher les backups - Manquant : Sauvegardes automatiques planifiées, restauration point-in-time, rétention configurable
- Partiellement implémenté : Script de backup manuel (
GDPR / RGPD ✅
- ✅ Portail de gestion des données - Interface dédiée pour les utilisateurs pour gérer leurs données personnelles
- Implémenté : Portail complet accessible depuis le menu utilisateur (
/gdpr-infopour la page publique d'information,/gdprpour le portail authentifié)
- Implémenté : Portail complet accessible depuis le menu utilisateur (
- ✅ Droit à l'oubli (ERASURE) - Fonctionnalité complète pour supprimer toutes les données d'un utilisateur
- Implémenté : Suppression FULL, PARTIAL et ANONYMIZATION avec logs d'audit
- ✅ Export des données (portabilité) - Export complet des données utilisateur dans un format structuré (JSON, CSV, XML)
- Implémenté : Export en JSON, CSV (avec protection injection) et XML avec URLs signées valides 30 jours
- ✅ Consentement explicite - Système de gestion des consentements pour le traitement des données
- Implémenté : Gestion complète des consentements (NECESSARY, FUNCTIONAL, ANALYTICS, MARKETING, THIRD_PARTY)
- ✅ Journalisation des consentements - Traçabilité de tous les consentements donnés/révoqués
- Implémenté : Logs complets avec IP, user agent, dates de grant/revoke
- ✅ Droit d'accès (ACCESS) - Permettre aux utilisateurs de consulter toutes leurs données personnelles
- Implémenté : Requêtes ACCESS génèrent automatiquement un export de données avec email de notification
- ✅ Droit de rectification (RECTIFICATION) - Interface pour modifier/corriger les données personnelles
- Implémenté : Formulaire de rectification avec vérification par email, validation de sécurité, validation d'unicité de l'email
- ✅ Droit d'opposition (OBJECTION) - Permettre aux utilisateurs de s'opposer au traitement de certaines données
- Implémenté : Type de requête OBJECTION supporté dans le système
- ✅ Suppression automatique - Politique de rétention avec suppression automatique des données après expiration
- Implémenté : Exports expirent après 30 jours, logs de suppression conservés
- ✅ Anonymisation des données - Outils pour anonymiser les données tout en conservant les statistiques
- Implémenté : Type de suppression ANONYMIZATION disponible
- ✅ Audit de conformité - Rapports d'audit pour vérifier la conformité RGPD
- Implémenté : Logs de suppression (
gdpr_deletion_logs) avec sauvegarde des données avant suppression
- Implémenté : Logs de suppression (
- ⚠️ Cookies et tracking - Gestion transparente des cookies et du tracking avec consentement
- Partiellement implémenté : Système de consentement en place, intégration frontend à compléter
- ⚠️ Politique de confidentialité dynamique - Politique de confidentialité mise à jour automatiquement
- Partiellement implémenté : Pages de politique disponibles, mise à jour automatique à implémenter
- ✅ Demandes RGPD automatisées - Traitement automatisé des demandes RGPD avec notifications
- Implémenté : Traitement automatique avec emails de vérification et notifications
Documentation : Voir backend/src/gdpr/README.md pour la documentation complète du module GDPR.
🤝 Collaboration & Partage
✅ Système d'Organisations - 100% COMPLÉTÉ (2026-01-16)
Backend :
- Création et gestion d'organisations : Les utilisateurs peuvent créer des organisations et inviter d'autres utilisateurs
- Gestion des membres : Rôles (OWNER, ADMIN, MEMBER, VIEWER) avec permissions granulaires
- Partage de ressources : Partage de sessions, devis, factures, contrats, contacts avec permissions (read, write, delete)
- Système d'invitations : Invitations par email avec tokens sécurisés
- Vérification d'accès : Service helper
OrganizationAccessServicepour vérifier l'accès aux ressources via organisations - Intégration dans les services existants : Support du partage via
verifyResourceAccessdans tous les services CRUD - Architecture :
- Tables :
organizations,organization_members,organization_resource_shares,organization_invitations,organization_settings - Services :
OrganizationsService,OrganizationMembersService,OrganizationResourcesService,OrganizationPermissionsService,OrganizationInvitationsService,OrganizationAccessService
- Tables :
Frontend :
-
Hooks React Query : Tous les hooks nécessaires pour la gestion des organisations (
useOrganizations,useOrganization,useOrganizationMembers,useOrganizationResources, mutations complètes) -
Pages : Liste, création, édition, vue détaillée avec onglets (Overview, Members, Resources)
-
Composants :
CreateOrganizationDialog,MembersTab,ResourcesTabavec gestion complète -
Routes : Intégration complète dans le router (
/organizations,/organizations/new,/organizations/$id,/organizations/$id/edit) -
Formulaires : Utilisation de
react-hook-formavec validation Zod et composantFormshadcn/ui -
Traductions : Toutes les traductions i18n pour les organisations
-
Optimistic updates : Mises à jour optimistes et invalidation du cache React Query
-
Documentation :
backend/src/organizations/README.md
✅ Système d'Invitations et d'Amis - 100% COMPLÉTÉ (2026-01-16)
Backend :
- Système d'invitations :
- Chaque utilisateur a 5 invitations de base, peut gagner plus via progression
- Création d'invitations par email avec token (lien) et code unique (6 caractères)
- Acceptation via token ou code lors de l'inscription
- Gestion du solde : suivi des invitations gagnées, utilisées et disponibles
- Expiration automatique après 7 jours
- Système d'amis :
- Demandes d'amis mutuelles (acceptation requise)
- Amitié automatique lors de l'acceptation d'invitation
- Gestion complète : liste, acceptation, rejet, suppression
- Intégration avec organisations : limitation de l'ajout aux amis uniquement
- Récompenses référent :
- Lors de l'inscription d'un invité : 50 XP, 25 coins, 1 invitation supplémentaire
- Intégration avec progression pour récompenses automatiques
- Visibilité utilisateur :
- Paramètre
is_visibledansuser_metadatapour contrôler la visibilité - Les utilisateurs non visibles peuvent être vus par leurs amis
- Paramètre
- Architecture :
- Tables :
user_invitations,user_invitation_balance,user_friends - Modifications :
users.referrer_id,user_metadata.is_visible - Services :
InvitationsService,FriendsService - Controllers :
InvitationsController,FriendsController
- Tables :
Frontend :
-
RightSidebar : Panneau latéral avec onglets Chat/Amis pour basculer entre les deux
-
FriendsList : Liste des amis avec recherche et actions rapides
-
InvitationsPage : Page complète pour gérer les invitations (solde, création, liste, codes)
-
FriendsPage : Page complète pour gérer les amis (liste, demandes, ajout)
-
Hooks React Query :
useInvitations,useFriendsavec toutes les mutations -
Modification MembersTab : Filtrage pour n'afficher que les amis dans la sélection
-
Intégration DashboardLayout : RightSidebar remplace Agent avec onglets
-
Documentation :
backend/src/invitations/README.md,backend/src/friends/README.md
Suggestions basées sur l'analyse
- ✅ Partage de ressources - Partage de sessions, contacts, devis, factures, contrats entre utilisateurs via organisations
- Implémenté : Système complet d'organisations avec partage de ressources et permissions granulaires (voir section ci-dessus)
- ❌ Commentaires et notes - Système de commentaires sur les entités
- Non implémenté : Pas de système de commentaires (seulement notes sur contacts/sessions)
- ❌ Mentions - Mentionner des utilisateurs dans les commentaires
- Non implémenté : Pas de système de mentions
- ⚠️ Équipes et rôles - Gestion d'équipes avec rôles personnalisés
- Partiellement implémenté : Système de permissions basé sur les abonnements (FREE, BASIC, PRO), permissions granulaires par fonctionnalité
- Manquant : Gestion d'équipes multi-utilisateurs, rôles personnalisés par équipe
- ⚠️ Permissions granulaires - Permissions plus fines par entité et action
- Partiellement implémenté : Système de permissions par fonctionnalité (voir
PERMISSIONS_ARCHITECTURE.md) - Manquant : Permissions par entité individuelle (ex: partager une session spécifique), permissions par action fine (ex: modifier mais pas supprimer)
- Partiellement implémenté : Système de permissions par fonctionnalité (voir
- ✅ Activité en temps réel - Voir les modifications en temps réel (via WebSocket)
- Implémenté : Système WebSocket complet avec Socket.IO pour notifications en temps réel
- Fonctionnalités : Notifications instantanées (in-app + push), événements agent IA en streaming, connexion automatique avec reconnexion
- Documentation :
backend/src/websocket/README.md,frontend/src/client/websocket/README.md
📱 Mobile & PWA
Suggestions basées sur l'analyse
- ❌ Application mobile native - Développer des apps iOS et Android
- Non implémenté : Pas d'application mobile native (PWA disponible mais pas d'app native)
- ⚠️ Mode hors ligne amélioré - Synchronisation intelligente en mode hors ligne
- Partiellement implémenté : PWA avec Service Worker et cache, support offline basique
- Manquant : Synchronisation intelligente des modifications hors ligne, résolution de conflits lors de la reconnexion
- ✅ Notifications push améliorées - Notifications push avec actions rapides
- Implémenté : Notifications push navigateur complètes avec actions rapides (voir section "Notifications Push" ci-dessus)
- Fonctionnalités : Actions rapides dans les notifications (marquer comme lu, ouvrir directement), notifications en arrière-plan, badge de notification
- ✅ Navigation mobile améliorée - Menu utilisateur optimisé pour mobile
- Implémenté : Menu utilisateur en plein écran sur mobile avec sous-menus expansibles
- Composants :
UserMenuMobilepour affichage full-screen,UserDropdowndétecte automatiquement mobile - Fonctionnalités : Contenu scrollable, sous-menus avec chevrons, navigation tactile optimisée
- ⚠️ Vues responsive améliorées - Amélioration de la responsivité des pages
- En cours : Améliorations progressives de la responsivité des vues principales
- À faire : Audit complet et améliorations des pages pour mobile
- ❌ Géolocalisation - Utiliser la géolocalisation pour les sessions et contacts
- Non implémenté : Pas d'intégration géolocalisation
- ❌ Photo depuis l'app - Prendre des photos directement depuis l'app mobile
- Non implémenté : Pas de fonctionnalité de capture photo (upload de fichiers disponible)
- ❌ Signature électronique - Signature de contrats directement depuis mobile
- Non implémenté : Pas de système de signature électronique
🔧 Automatisation & Workflows
Suggestions basées sur l'analyse
- ⚠️ Workflows visuels - Éditeur visuel pour créer des workflows
- Partiellement implémenté : Module
workflowsexiste avec système de workflows basique - Manquant : Éditeur visuel pour créer/modifier les workflows, interface graphique
- Partiellement implémenté : Module
- ⚠️ Déclencheurs personnalisés - Créer des déclencheurs basés sur des conditions complexes
- Partiellement implémenté : Système de workflows avec déclencheurs basiques
- Manquant : Déclencheurs complexes personnalisables, conditions avancées
- ⚠️ Actions automatiques - Automatiser les tâches répétitives (ex: créer facture après acceptation devis)
- Partiellement implémenté : Système de workflows avec actions automatiques basiques
- Manquant : Actions automatiques avancées, règles métier complexes
- ❌ Intégrations webhooks - Webhooks pour intégrer avec des services externes
- Non implémenté : Pas de système de webhooks sortants (webhooks entrants Stripe existent)
- ❌ API publique - API publique pour permettre des intégrations tierces
- Non implémenté : Pas d'API publique documentée (API interne avec authentification JWT)
- ❌ Zapier/Make integration - Intégration avec Zapier ou Make pour automatisations
- Non implémenté : Pas d'intégration Zapier/Make
🎮 Progression & Engagement
✅ Système de Progression - 100% COMPLÉTÉ (2026-01-16)
- Système d'XP et niveaux : 7 niveaux (Apprenti → Légende) avec progression exponentielle
- Niveau 1 (Apprenti) : 0 XP - Fonctionnalités de base
- Niveau 2 (Amateur) : 500 XP - Templates de devis avancés
- Niveau 3 (Semi-Pro) : 1,500 XP - Workflows automatiques
- Niveau 4 (Professionnel) : 3,500 XP - Analytics avancés
- Niveau 5 (Expert) : 7,500 XP - Branding personnalisé
- Niveau 6 (Maître) : 15,000 XP - API access + priorité support
- Niveau 7 (Légende) : 30,000 XP - Badge profil + fonctionnalités bêta
- Badges : 20+ badges dans différentes catégories
- Gestion d'entreprise : Entrepreneur, As de la facturation, Maître du CA, Ponctuel
- Organisation : Planificateur, Optimiseur, Sans faille, Marathon
- Relation client : Ami des clients, Communicant, Ambassadeur, VIP
- Efficacité : Automatisateur, Gain de temps, Data-driven, Visionnaire
- Spécialisations : Mariage Master, Portrait Pro, Corporate King, Polyvalent
- Événementiels : Lanceur, Bêta testeur, Anniversaire, Contributeur
- Défis : Défis quotidiens, hebdomadaires et mensuels avec renouvellement automatique
- Défis quotidiens : Répondre à 3 clients (+ 30 XP), Créer 1 devis (+ 20 XP), etc.
- Défis hebdomadaires : Réaliser 5 sessions (+ 150 XP), Obtenir 3 paiements (+ 200 XP), etc.
- Défis mensuels : Dépasser l'objectif de CA (+ 500 XP), 100% des sessions réalisées (+ 400 XP), etc.
- Bonus streak : +50% XP après 7 jours consécutifs, +100% après 30 jours
- Classements : Leaderboards par type (XP total, CA mensuel, etc.) avec cache et mise à jour automatique
- Aaperture Coins : Monnaie virtuelle gagnée via niveaux, badges et défis
- Montée de niveau : 100 AC par niveau
- Badges obtenus : 50-500 AC selon rareté
- Défis complétés : 10-100 AC
- Classements : 500-5000 AC selon position
- Boutique de récompenses : 15 récompenses disponibles
- Templates (150-400 AC) : Template de contrat (200 AC), Template de questionnaire client (150 AC), etc.
- Fonctionnel (300-1000 AC) : Stockage +10GB (500 AC), Envois emails illimités 1 mois (800 AC), etc.
- Visuels (200-800 AC) : Thème interface premium (600 AC), Badge profil personnalisé (400 AC), etc.
- Formations (1500-3000 AC) : Webinaire marketing (1500 AC), Session coaching 1h (3000 AC), etc.
- Scheduler automatique : Renouvellement des défis et mise à jour des classements
- Renouvellement des défis quotidiens : Tous les jours à minuit
- Renouvellement des défis hebdomadaires : Tous les lundis à 2h
- Renouvellement des défis mensuels : Le 1er de chaque mois à 2h
- Mise à jour des classements : Toutes les 15 minutes
- Vérification des badges : Tous les jours à 2h
- Intégration dans les services existants : Attribution automatique d'XP lors d'actions utilisateur
- Création de devis : +20 XP
- Création de facture : +30 XP
- Paiement reçu : +50 XP
- Inscription d'un invité (référent) : +50 XP, +25 coins, +1 invitation
- Etc.
- Architecture :
- Tables :
user_progression,badges,user_badges,challenges,xp_transactions,aaperture_coins_transactions,user_aaperture_coins,leaderboard_cache,progression_settings - Services :
ProgressionService,XpService,BadgesService,ChallengesService,LeaderboardService,AapertureCoinsService,ProgressionRewardsService,ProgressionScheduler
- Tables :
- Documentation :
backend/src/progression/README.md
Suggestions d'amélioration (futures)
- Progression au niveau organisation : Intégrer la progression au niveau des organisations pour des défis collaboratifs
- Badges personnalisés : Permettre aux utilisateurs de créer leurs propres badges
- Récompenses personnalisées : Permettre aux utilisateurs de proposer leurs propres récompenses
- Statistiques avancées : Dashboard avec statistiques détaillées de progression, badges obtenus, défis complétés
- Notifications de progression : Notifications push/email lors de montées de niveau, obtention de badges, etc.
- Badges invitations/amis : Badges "Ambassadeur" (inviter 10 utilisateurs), "Social" (avoir 20 amis), "Réseau" (inviter 5 utilisateurs actifs)
- Défis invitations/amis : Défis "Inviter un ami" (hebdomadaire), "Élargir son réseau" (mensuel)
📊 Tableaux de Bord & Interface
Suggestions basées sur l'analyse
- ❌ Widgets personnalisables - Permettre aux utilisateurs d'ajouter/supprimer/réorganiser les widgets
- Non implémenté : Pas de système de widgets personnalisables (dashboard fixe)
- ✅ Thèmes personnalisables - Thèmes clair/sombre et personnalisation des couleurs
- Implémenté : Mode sombre/clair avec détection automatique, persistance des préférences (voir section "Dark / Light Mode" ci-dessous)
- ❌ Vues personnalisées - Créer et sauvegarder des vues personnalisées de listes
- Non implémenté : Pas de système de sauvegarde de vues personnalisées (filtres disponibles mais pas sauvegardables)
- ⚠️ Raccourcis clavier - Raccourcis clavier pour les actions fréquentes
- Partiellement implémenté : Raccourcis pour la recherche globale (Cmd+K/Ctrl+K), navigation avec flèches (↑↓), Enter pour sélectionner, Escape pour fermer
- Fonctionnalités : Recherche globale accessible via Cmd+K/Ctrl+K, navigation au clavier dans les résultats, actions rapides depuis la recherche
- Manquant : Raccourcis pour autres actions fréquentes (créer session, créer contact, etc.)
- ❌ Mode focus - Mode focus pour réduire les distractions
- Non implémenté : Pas de mode focus
- ⚠️ Accessibilité améliorée - Améliorer l'accessibilité (WCAG 2.1 AA)
- Partiellement implémenté : Navigation au clavier basique, attributs ARIA sur certains composants
- Manquant : Conformité WCAG 2.1 AA complète, tests d'accessibilité automatisés, support lecteurs d'écran amélioré
Dark / Light Mode
- ✅ Mode sombre complet - Implémentation d'un thème sombre pour toute l'application (CSS avec variables Tailwind)
- ✅ Détection automatique - Détection automatique des préférences système (prefers-color-scheme) - Support "system" dans Zustand store
- ✅ Persistance des préférences - Sauvegarde du choix de thème dans les préférences utilisateur (Zustand persist + backend settings)
- ✅ Transition fluide - Transitions animées lors du changement de thème (gérées automatiquement par Tailwind CSS)
- ⚠️ Personnalisation avancée - Permettre aux utilisateurs de personnaliser les couleurs du thème (non implémenté - utilise les couleurs par défaut du design system)
- ✅ Thème par défaut - Définir un thème par défaut pour les nouveaux utilisateurs ("system" par défaut dans Zustand store)
🔗 Intégrations
Suggestions basées sur l'analyse
- ❌ Intégration comptabilité - Intégration avec des logiciels de comptabilité (QuickBooks, Xero)
- Non implémenté : Pas d'intégration avec logiciels de comptabilité
- ❌ Intégration CRM externe - Import/export vers d'autres CRM (HubSpot, Salesforce)
- Non implémenté : Pas d'intégration avec autres CRM (export CSV/Excel/JSON disponible mais pas d'intégration directe)
- ❌ Intégration réseaux sociaux - Intégration avec Instagram, Facebook pour importer les contacts
- Non implémenté : Pas d'intégration avec réseaux sociaux
- ❌ Intégration email marketing - Intégration avec Mailchimp, Sendinblue pour les campagnes
- Non implémenté : Pas d'intégration avec plateformes email marketing
- ⚠️ Intégration stockage - Intégration avec Dropbox, Google Drive pour les fichiers
- Partiellement implémenté : Stockage Cloudflare R2 (S3-compatible) pour les fichiers
- Manquant : Intégration directe avec Dropbox, Google Drive (upload depuis ces services)
- ✅ Intégration calendrier - Synchronisation avec Google Calendar, Outlook, Apple Calendar
- Implémenté : Synchronisation bidirectionnelle complète avec Google Calendar
- ✅ Synchronisation CRM → Google Calendar (création/mise à jour automatique des événements)
- ✅ Synchronisation Google Calendar → CRM (toutes les 5 minutes via scheduler)
- ✅ Gestion des événements récurrents avec exceptions et suppressions
- ✅ Résolution de conflits intelligente
- ✅ Gestion de disponibilité (créneaux disponibles/bloqués)
- Documentation :
docs/CALENDAR_SYNC_ARCHITECTURE.md - Manquant : Synchronisation avec Outlook et Apple Calendar
- Implémenté : Synchronisation bidirectionnelle complète avec Google Calendar
📈 Performance & Scalabilité
Améliorations implémentées récemment
- ✅ Gestion des erreurs de connexion PostgreSQL - Retry automatique pour les erreurs de connexion dans les jobs cron
- Implémenté : Fonction
retryQuerydansScheduledEmailsServiceavec détection des erreurs de connexion - Configuration du pool : Pool PostgreSQL configuré avec gestion d'erreurs, timeouts et limites appropriées
- Bénéfices : Réduction des erreurs "Connection terminated unexpectedly" dans les schedulers
- Fichiers :
backend/src/db/db.service.ts,backend/src/scheduled-emails/scheduled-emails.service.ts
- Implémenté : Fonction
Suggestions basées sur l'analyse
-
⚠️ Cache intelligent - Améliorer le système de cache avec invalidation intelligente
- Statut : ⚠️ Partiellement implémenté
- Implémenté :
- ✅ Système de cache Redis avec
CacheService(getOrSetpattern recommandé) - ✅ Invalidation par pattern (
deletePattern) - ✅ Verrouillage distribué (
acquireLock/releaseLock) pour éviter les conflits - ✅ Cache pour les réponses IA (OpenAI) avec TTL configurables (5-10 minutes)
- ✅ Cache pour les permissions utilisateur
- ✅ Fallback gracieux si Redis est désactivé
- ✅ Système de cache Redis avec
- Manquant :
- ❌ Invalidation intelligente basée sur les dépendances (ex: invalider les sessions quand un contact est modifié)
- ❌ Cache hiérarchique (multi-niveaux)
- ❌ Stratégies de cache avancées (LRU, LFU, etc.)
- Fichiers :
backend/src/cache/cache.service.ts,backend/src/cache/README.md - Documentation :
docs/AI_SEARCH_OPTIMIZATION.md(optimisations cache pour IA)
-
⚠️ Pagination améliorée - Pagination infinie avec virtualisation pour les grandes listes
- Statut : ⚠️ Partiellement implémenté
- Implémenté :
- ✅ Système de pagination backend complet avec
buildPaginatedQuery(utilitaires centralisés) - ✅ Composant
Paginationréutilisable côté frontend - ✅ Pagination standard avec navigation page par page
- ✅ Sélection du nombre d'éléments par page (limit configurable, max 100)
- ✅ Composant
ListPageContentpour affichage table/card - ✅ Support de la recherche et des filtres dans la pagination
- ✅ Hooks React Query pour pagination (
usePaginatedList,useListQuery)
- ✅ Système de pagination backend complet avec
- Manquant :
- ❌ Pagination infinie (scroll infini) pour améliorer l'UX
- ❌ Virtualisation avec
react-windowoureact-virtualpour grandes listes (>1000 éléments) - ❌ Cursor-based pagination pour meilleures performances sur très grandes listes
- Fichiers :
backend/src/common/db-pagination.utils.ts,frontend/src/components/molecules/Pagination.tsx,frontend/src/hooks/usePagination.ts
-
⚠️ Optimisation des requêtes - Optimiser les requêtes complexes avec des index appropriés
- Statut : ⚠️ Partiellement implémenté
- Implémenté :
- ✅ Index sur colonnes fréquemment utilisées (
owner_id,created_at,user_id, etc.) - ✅ Index sur clés étrangères pour améliorer les JOINs
- ✅ Utilisation de Kysely query builder pour optimiser les requêtes
- ✅ Pagination backend pour éviter de charger toutes les données
- ✅ Index sur colonnes fréquemment utilisées (
- Manquant :
- ❌ Analyse automatique des requêtes lentes (logging des requêtes >Xms)
- ❌ Optimisation automatique basée sur les patterns de requêtes
- ❌ Index composites pour requêtes complexes fréquentes
- ❌ Monitoring des performances de requêtes (EXPLAIN ANALYZE)
- Fichiers : Migrations Liquibase dans
infra/liquibase/changes/
-
❌ CDN pour les assets - Utiliser un CDN pour servir les assets statiques
- Statut : ❌ Non implémenté
- Description : Pas de CDN configuré actuellement. Les assets sont servis directement par le serveur.
- Recommandation : Configurer Cloudflare CDN ou similaire pour les assets statiques (images, fonts, JS/CSS) en production
- Bénéfices : Réduction de la latence, meilleure scalabilité, cache distribué
-
⚠️ Compression des réponses - Compression gzip/brotli pour les réponses API
- Statut : ⚠️ Partiellement implémenté
- Implémenté :
- ✅ Compression gzip pour les exports (
export.service.tsaveccompression: true) - ✅ Compression gzip pour les backups (
backup.service.tsaveccreateGzip) - ✅ Compression pour les uploads R2 (Cloudflare R2 gère la compression automatiquement)
- ✅ Compression gzip pour les exports (
- Manquant :
- ❌ Compression automatique des réponses HTTP API (middleware Express/NestJS avec
compression) - ❌ Support Brotli pour meilleure compression (nécessite middleware)
- ❌ Configuration de la compression par type de contenu
- ❌ Compression automatique des réponses HTTP API (middleware Express/NestJS avec
- Recommandation : Ajouter
compressionmiddleware NestJS pour compresser automatiquement toutes les réponses JSON/HTML
-
⚠️ Lazy loading - Chargement paresseux des modules et composants
- Statut : ⚠️ Partiellement implémenté
- Implémenté :
- ✅ Lazy loading des images (
loading="lazy"dansFileGalleryet autres composants) - ✅ Code splitting basique dans Vite (vendor chunks automatiques)
- ✅ Configuration Vite avec
build.rollupOptions.output.manualChunkspour séparer les vendors
- ✅ Lazy loading des images (
- Manquant :
- ❌ Lazy loading des routes React avec
React.lazy()(toutes les routes sont chargées statiquement) - ❌ Lazy loading des composants lourds (dialogs, modals, etc.)
- ❌ Suspense boundaries pour améliorer l'UX pendant le chargement
- ❌ Lazy loading des routes React avec
- Fichiers :
frontend/src/router.tsx(routes statiques),frontend/vite.config.ts(code splitting) - Recommandation : Implémenter
React.lazy()pour les routes non-critiques (admin, settings, etc.)
-
⚠️ Monitoring et observabilité - Système de monitoring complet pour les performances et erreurs
- Statut : ⚠️ Partiellement implémenté
- Implémenté :
- ✅ Logging structuré avec
ExtendedLoggerService(scopes, emojis, niveaux) - ✅ Logs de performance pour certaines opérations (timing, latence)
- ✅ Rate limiting avec monitoring (compteurs Redis)
- ✅ Health check basique (
/api/health) - ✅ Intégration Sentry pour le tracking d'erreurs automatique (backend + frontend + workers)
- ✅ Logging structuré avec
- Manquant :
- ❌ Métriques de performance centralisées (Prometheus + Grafana ou Datadog)
- ❌ Logs centralisés (ELK Stack ou CloudWatch)
- ❌ Alertes automatiques pour les problèmes critiques (PagerDuty, Slack, email)
- ❌ Dashboard de monitoring pour les métriques clés (latence P50/P95/P99, taux d'erreur, etc.)
- Recommandation : Ajouter Prometheus pour les métriques de performance
-
⚠️ Health checks améliorés - Endpoints de health check plus détaillés
- Statut : ⚠️ Partiellement implémenté
- Implémenté :
- ✅ Endpoint
/api/healthbasique qui vérifie la connexion PostgreSQL - ✅ Retour du timestamp DB pour vérifier la synchronisation
- ✅ Statut OK/NOK simple
- ✅ Endpoint
/api/database-infopour informations détaillées DB
- ✅ Endpoint
- Manquant :
- ❌ Vérification de Redis (connexion, ping)
- ❌ Vérification des services externes (Google Calendar API, Gmail API, OpenAI API)
- ❌ Métriques détaillées par service (latence, statut, dernière vérification)
- ❌ Health check dégradé (partiel si certains services sont down)
- Fichiers :
backend/src/app.service.ts(méthodehealth()),backend/src/app.controller.ts - Recommandation : Étendre
/api/healthpour vérifier Redis et services externes avec timeout
-
✅ Gestion des timeouts - Timeouts configurables pour toutes les opérations longues
- Statut : ✅ Complété (2025-01-XX)
- Implémenté :
- ✅ Configuration centralisée - Module
TimeoutConfigavec toutes les valeurs configurables via variables d'environnement - ✅ Timeouts pour le pool PostgreSQL (
DB_CONNECTION_TIMEOUT,DB_IDLE_TIMEOUTconfigurables) - ✅ Timeouts configurables pour les requêtes DB individuelles (
DB_QUERY_TIMEOUT) - ✅ Appliqué - ✅ Timeouts configurables pour les appels API externes (OpenAI, Google Calendar, Gmail, OAuth) - ✅ Appliqué dans tous les services
- ✅ Timeouts pour les jobs cron (
CRON_JOB_TIMEOUTconfigurable) - ✅ Appliqué dans tous les schedulers - ✅ Variables d'environnement pour chaque timeout (plus de valeurs hardcodées)
- ✅ Timeout global pour les requêtes HTTP (middleware
TimeoutMiddleware) - ✅ Appliqué - ✅ Timeouts pour migrations et backups dans les scripts shell - ✅ Appliqué
- ✅ Utilitaires de timeout (
withTimeout,executeWithTimeoutAndRetry) - ✅ Disponibles et utilisés
- ✅ Configuration centralisée - Module
- Fichiers :
backend/src/common/timeout.config.ts(configuration centralisée)backend/src/common/timeout.utils.ts(utilitaires)backend/src/common/timeout.middleware.ts(middleware HTTP)backend/src/common/timeout.module.ts(module NestJS)backend/src/db/db.service.ts(timeouts pool et requêtes appliqués)infra/migrate-improved.sh(timeout appliqué)infra/backup-db.sh(timeout appliqué)backend/src/agent/*.ts(timeouts OpenAI appliqués)backend/src/search/*.ts(timeouts OpenAI appliqués)backend/src/extraction/services/llm.service.ts(timeouts OpenAI appliqués)backend/src/openai/openai.service.ts(timeouts OpenAI appliqués)backend/src/google-calendar/google-calendar.service.ts(timeouts Google Calendar appliqués avec helperwithCalendarTimeout)backend/src/quotes-invoices/gmail.service.ts(timeouts Gmail appliqués)backend/src/*/*.scheduler.ts(timeouts cron appliqués dans tous les schedulers)
- Documentation :
docs/TIMEOUT_MANAGEMENT.md(guide complet)docs/ENV_VARIABLES_TIMEOUT.md(liste complète des variables d'environnement)docs/ENV_TIMEOUT_EXAMPLE.txt(exemple à copier dans.env.example)
-
⚠️ Circuit breaker pattern - Protection contre les cascades d'erreurs
- Statut : ❌ Non implémenté
- Description : Pas de circuit breaker pour les services externes actuellement
- Services concernés : Google Calendar API, Gmail API, OpenAI API
- Implémenté :
- ✅ Gestion d'erreurs basique avec retry dans certains services
- ✅ Rate limiting pour protéger contre la surcharge
- ✅ Cache pour réduire les appels API externes
- Manquant :
- ❌ Circuit breaker pattern (open/closed/half-open states)
- ❌ Fallback automatique en cas d'échec répété
- ❌ Dégradation gracieuse des fonctionnalités non critiques
- ❌ Monitoring de l'état des circuits
- Recommandation : Implémenter circuit breaker avec bibliothèque comme
opossumoubrakespour NestJS - Bénéfices : Évite la surcharge en cas de panne d'un service externe, améliore la résilience
🧪 Tests & Qualité
Améliorations implémentées récemment
- ✅ Gestion centralisée des types via OpenAPI - Système unifié pour la gestion des types partagés entre frontend et backend
- Statut : ✅ Complété (2025-12-11)
- Priorité : Haute
- Implémenté :
- ✅ Audit complet des types utilisés dans frontend et backend
- ✅ Migration de tous les types partagés vers OpenAPI
- ✅ Types scope-specific (frontend-only ou backend-only) dans fichiers
types.tsappropriés - ✅ Suppression des définitions de types dupliquées
- ✅ Mise à jour de tous les imports pour utiliser les types générés depuis
_generated/types.gen.ts(ou.jspour backend) - ✅ Vérification que tous les types OpenAPI sont correctement exportés dans
openapi/components/schemas.yaml - ✅ Documentation complète des règles de gestion des types dans
docs/AGENTS_OPENAPI.md - ✅ Mise à jour de la documentation dans
docs/AGENTS.md,docs/AGENTS_BACKEND.md, etdocs/AGENTS_FRONTEND.md - ✅ Ajout d'exemples de migration et d'arbre de décision pour déterminer où placer les types
- ✅ Correction des erreurs de validation OpenAPI (problèmes d'indentation YAML)
- Fichiers modifiés :
openapi/components/search.yaml- Correction des erreurs YAML et structure des types AIopenapi/components/schemas.yaml- Export de tous les types partagésdocs/AGENTS_OPENAPI.md- Documentation complète des règles de gestion des typesdocs/AGENTS.md- Mise à jour de la checklist de pré-commitdocs/AGENTS_BACKEND.md- Ajout des règles sur les types partagésdocs/AGENTS_FRONTEND.md- Ajout des règles sur les types partagés
- Règles établies :
- Types utilisés par frontend ET backend → MUST be in OpenAPI
- Types utilisés uniquement dans un scope → MUST be in scope-specific
types.tsfiles - Processus de migration documenté avec exemples
- Checklist de pré-commit mise à jour pour vérifier la conformité
- Bénéfices :
- Single source of truth pour les types partagés
- Type safety garantie entre frontend et backend
- Génération automatique des types depuis OpenAPI
- Cohérence entre API et validation
- Réduction des erreurs de type et des incohérences
- Documentation :
docs/AGENTS_OPENAPI.md(section "Type Management Rules")
Suggestions basées sur l'analyse
- ⚠️ Couverture de tests - Augmenter la couverture de tests (backend et frontend)
- Statut actuel : Couverture variable selon les modules (certains modules >80%, d'autres <50%)
- Objectif : >80% de couverture pour les modules critiques
- Priorité : Moyenne
- Outils : Vitest pour backend et frontend
- ❌ Tests E2E - Ajouter des tests end-to-end avec Playwright ou Cypress
- Non implémenté : Pas de tests E2E
- Priorité : Moyenne
- Effort : Élevé
- Description : Tests E2E pour les flux critiques (création session, réservation, paiement)
- ❌ Tests de performance - Tests de charge et de performance
- Non implémenté : Pas de tests de performance
- Priorité : Moyenne
- Outils : k6, Artillery, ou JMeter
- Scénarios : Charge normale, pics de trafic, stress tests
- ✅ Monitoring d'erreurs - Intégration avec Sentry pour le monitoring d'erreurs
- Priorité : Haute
- Effort : 1-2 jours
- Statut : ✅ Implémenté (janvier 2026)
- Description : Intégration Sentry pour tracking automatique des erreurs frontend et backend
- Bénéfices : Détection proactive des problèmes, stack traces, contexte utilisateur
- Implémenté :
- ✅ Backend NestJS : Module Sentry avec exception filter global, capture des erreurs 5xx
- ✅ Frontend React : Initialisation Sentry, user context, session replay
- ✅ Worker BullMQ : Erreurs des jobs capturées
- ✅ CI/CD : Variables SENTRY_DSN et VITE_SENTRY_DSN configurées
- Documentation :
docs/SENTRY_SETUP.md
- ❌ Analytics d'usage - Analytics pour comprendre comment les utilisateurs utilisent l'application
- Non implémenté : Pas d'analytics d'usage utilisateur
- Priorité : Basse
- Description : Tracking anonymisé des interactions utilisateur pour améliorer l'UX
- Outils : Plausible, PostHog, ou solution custom
- ❌ Tests de régression automatisés - Suite de tests de régression pour éviter les régressions
- Non implémenté : Pas de suite de tests de régression automatisés
- Priorité : Moyenne
- Description : Tests automatisés exécutés avant chaque déploiement
- Intégration : CI/CD pipeline
- ⚠️ Tests de sécurité - Tests automatisés pour détecter les vulnérabilités
- Partiellement implémenté :
npm auditdans le pipeline CI, vérification des dépendances - Manquant : Scans automatisés OWASP ZAP, Snyk intégration complète, tests de sécurité automatisés dans CI/CD
- Priorité : Haute
- Outils : OWASP ZAP, Snyk, npm audit
- Partiellement implémenté :
🔧 Infrastructure & Robustesse
Améliorations récentes
- ✅ Gestion des erreurs de connexion DB - Retry automatique pour les erreurs de connexion PostgreSQL
- Implémenté : Fonction
retryQueryavec détection intelligente des erreurs de connexion - Configuration : Pool PostgreSQL optimisé avec timeouts et gestion d'erreurs
- Impact : Réduction significative des erreurs dans les jobs cron
- Fichiers :
backend/src/db/db.service.ts,backend/src/scheduled-emails/scheduled-emails.service.ts
- Implémenté : Fonction
Suggestions d'amélioration
1. Monitoring et observabilité
- ⚠️ Système complet de monitoring - Tracking d'erreurs, métriques de performance et logs centralisés
- Statut : ⚠️ Partiellement implémenté
- Priorité : Haute
- Effort : 3-5 jours
- Implémenté :
- ✅ Logging structuré avec
ExtendedLoggerService(scopes, emojis, niveaux) - ✅ Logs de performance pour certaines opérations (timing, latence)
- ✅ Rate limiting avec monitoring (compteurs Redis)
- ✅ Health check basique (
/api/health) - ✅ Système d'audit complet avec logging automatique
- ✅ Intégration Sentry pour le tracking d'erreurs automatique (frontend + backend + workers)
- ✅ Logging structuré avec
- Manquant :
- ❌ Métriques de performance centralisées (Prometheus + Grafana ou Datadog)
- ❌ Logs centralisés (ELK Stack ou CloudWatch)
- ❌ Alertes automatiques pour les problèmes critiques (PagerDuty, Slack, email)
- ❌ Dashboard de monitoring pour les métriques clés (latence P50/P95/P99, taux d'erreur, etc.)
- ❌ Tracing distribué (OpenTelemetry) pour suivre les requêtes à travers les services
- Métriques clés à surveiller :
- Latence API (P50, P95, P99) par endpoint
- Taux d'erreur par endpoint (4xx, 5xx)
- Utilisation DB (connexions actives, requêtes lentes >1s, pool saturation)
- Utilisation Redis (mémoire, hit rate, connexions)
- Performance des jobs cron (durée d'exécution, taux d'échec)
- Utilisation CPU/mémoire du serveur
- Taux de cache hit/miss pour les requêtes IA
- Recommandation : Ajouter Prometheus pour les métriques de performance, puis Grafana pour le dashboard
- Fichiers concernés :
backend/src/common/logger.service.ts,backend/src/app.service.ts,backend/src/app.controller.ts,backend/src/common/sentry/(Sentry implémenté)
2. Health checks améliorés
- ⚠️ Endpoints de santé détaillés - Vérification complète de tous les services
- Statut : ⚠️ Partiellement implémenté
- Priorité : Moyenne
- Effort : 1-2 jours
- Implémenté :
- ✅ Endpoint
/api/healthbasique qui vérifie la connexion PostgreSQL - ✅ Retour du timestamp DB pour vérifier la synchronisation
- ✅ Statut OK/NOK simple
- ✅ Endpoint
/api/database-infopour informations détaillées DB
- ✅ Endpoint
- Manquant :
- ❌ Vérification de Redis (connexion, ping, mémoire disponible)
- ❌ Vérification des services externes (Google Calendar API, Gmail API, OpenAI API)
- ❌ Métriques détaillées par service (latence, statut, dernière vérification)
- ❌ Health check dégradé (partiel si certains services sont down)
- ❌ Endpoint
/api/health/readypour readiness probe (Kubernetes) - ❌ Endpoint
/api/health/livepour liveness probe (Kubernetes)
- Structure proposée :
{
"status": "ok" | "degraded" | "down",
"timestamp": "2024-01-01T00:00:00Z",
"services": {
"database": { "status": "ok", "latency": "5ms" },
"redis": { "status": "ok", "latency": "2ms" },
"google_calendar": { "status": "ok", "latency": "150ms" },
"openai": { "status": "ok", "latency": "800ms" }
}
} - Bénéfices : Détection rapide des problèmes, intégration avec load balancers, monitoring proactif
- Fichiers :
backend/src/app.service.ts(méthodehealth()),backend/src/app.controller.ts - Recommandation : Étendre
/api/healthpour vérifier Redis et services externes avec timeout (5s max par service)
3. Gestion des timeouts
- ✅ Timeouts configurables pour toutes les opérations - Protection contre les opérations bloquantes
-
Statut : ✅ Complété (2025-01-XX)
-
Priorité : Moyenne
-
Effort : 2-3 jours
-
Implémenté :
- ✅ Configuration centralisée - Module
TimeoutConfigavec toutes les valeurs configurables via variables d'environnement - ✅ Timeouts pour le pool PostgreSQL (
DB_CONNECTION_TIMEOUT,DB_IDLE_TIMEOUTconfigurables) - ✅ Appliqué - ✅ Timeouts configurables pour les requêtes DB individuelles (
DB_QUERY_TIMEOUT) - ✅ Appliqué - ✅ Variables d'environnement pour chaque timeout (plus de valeurs hardcodées)
- ✅ Timeout global pour les requêtes HTTP (middleware
TimeoutMiddleware) - ✅ Appliqué - ✅ Timeouts pour migrations et backups dans les scripts shell - ✅ Appliqué
- ✅ Utilitaires de timeout (
withTimeout,executeWithTimeoutAndRetry) - ✅ Disponibles - ✅ Retry automatique pour les erreurs de connexion DB dans les schedulers
- ✅ Application des timeouts dans les services OpenAI - ✅ Appliqué (tous les appels API OpenAI wrappés avec
withTimeout) - ✅ Application des timeouts dans les services Google Calendar/Gmail - ✅ Appliqué (tous les appels API wrappés avec
withCalendarTimeouthelper) - ✅ Application des timeouts dans les schedulers cron - ✅ Appliqué (tous les schedulers wrappés avec
executeWithTimeoutAndRetry)
- ✅ Configuration centralisée - Module
-
Configuration disponible :
# Database timeouts (milliseconds)
DB_QUERY_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=10000
DB_IDLE_TIMEOUT=30000
# External API timeouts (milliseconds)
GOOGLE_CALENDAR_TIMEOUT=10000
GMAIL_API_TIMEOUT=10000
GOOGLE_OAUTH_TIMEOUT=10000
OPENAI_API_TIMEOUT=30000
# Job timeouts (milliseconds)
CRON_JOB_TIMEOUT=300000 # 5 minutes max
# HTTP timeouts (milliseconds)
HTTP_REQUEST_TIMEOUT=30000
# Infrastructure timeouts (seconds for shell scripts)
MIGRATION_TIMEOUT=600
BACKUP_TIMEOUT=1800
# Other timeouts (milliseconds)
EMAIL_TIMEOUT=30000
WEBSOCKET_TIMEOUT=60000 -
Fichiers :
backend/src/common/timeout.config.ts(configuration centralisée) - ✅ Créébackend/src/common/timeout.utils.ts(utilitaires) - ✅ Créébackend/src/common/timeout.middleware.ts(middleware HTTP) - ✅ Créé et appliquébackend/src/common/timeout.module.ts(module NestJS) - ✅ Créébackend/src/db/db.service.ts(timeouts pool et requêtes) - ✅ Appliquéinfra/migrate-improved.sh(timeout pour migrations) - ✅ Appliquéinfra/backup-db.sh(timeout pour backups) - ✅ Appliquébackend/src/agent/*.ts(timeouts OpenAI appliqués) - ✅ Appliquébackend/src/search/*.ts(timeouts OpenAI appliqués) - ✅ Appliquébackend/src/extraction/services/llm.service.ts(timeouts OpenAI appliqués) - ✅ Appliquébackend/src/openai/openai.service.ts(timeouts OpenAI appliqués) - ✅ Appliquébackend/src/google-calendar/google-calendar.service.ts(timeouts Google Calendar appliqués) - ✅ Appliquébackend/src/quotes-invoices/gmail.service.ts(timeouts Gmail appliqués) - ✅ Appliquébackend/src/*/*.scheduler.ts(timeouts cron appliqués) - ✅ Appliqué
-
Documentation :
docs/TIMEOUT_MANAGEMENT.md(guide complet avec statut d'application)docs/ENV_VARIABLES_TIMEOUT.md(liste complète des variables d'environnement)docs/ENV_TIMEOUT_EXAMPLE.txt(exemple à copier dans.env.example)
-
Recommandation : ✅ Complété - Tous les timeouts sont maintenant appliqués dans tous les services et schedulers
-
4. Circuit breaker pattern
- ✅ Protection contre les cascades d'erreurs - Circuit breaker pour services externes
- Statut : ✅ Implémenté (janvier 2026)
- Implémenté :
- ✅
CircuitBreakerServiceavec opossum library - ✅ États CLOSED/OPEN/HALF_OPEN avec logging
- ✅
MetricsServiceavec prom-client pour Prometheus - ✅ Endpoint
/api/metricspour scraping - ✅
ResilienceServicecombinant circuit breaker + métriques - ✅
MetricsInterceptorpour métriques HTTP automatiques
- ✅
- Documentation :
docs/RESILIENCE_METRICS.md - Statut : ❌ Non implémenté
- Priorité : Moyenne
- Effort : 3-4 jours
- Description : Implémenter circuit breaker pour services externes avec états (open/closed/half-open)
- Services concernés : Google Calendar API, Gmail API, OpenAI API
- Implémenté :
- ✅ Gestion d'erreurs basique avec retry dans certains services
- ✅ Rate limiting pour protéger contre la surcharge
- ✅ Cache pour réduire les appels API externes
- Manquant :
- ❌ Circuit breaker pattern (open/closed/half-open states)
- ❌ Fallback automatique en cas d'échec répété
- ❌ Dégradation gracieuse des fonctionnalités non critiques
- ❌ Monitoring de l'état des circuits
- ❌ Configuration des seuils (nombre d'échecs, timeout avant retry)
- Comportement proposé :
- Closed : Service fonctionne normalement
- Open : Service en panne, rejette immédiatement les requêtes (fallback)
- Half-open : Test périodique pour voir si le service est revenu
- Recommandation : Implémenter circuit breaker avec bibliothèque comme
@nestjs/terminusouopossumpour NestJS - Bénéfices : Évite la surcharge en cas de panne d'un service externe, améliore la résilience, dégradation gracieuse
- Fichiers : Créer
backend/src/common/circuit-breaker.service.tset l'intégrer dans les services externes
5. Queue system pour jobs lourds
- ✅ Système de queue pour découpler les opérations longues - Traitement asynchrone avec retry automatique
- Statut : ✅ Complété (2025-01-XX)
- Priorité : Moyenne
- Effort : 5-7 jours
- Description : Utiliser BullMQ pour les jobs lourds avec Redis comme backend
- Implémenté :
- ✅ Module
QueueModuleavec configuration BullMQ - ✅ Service
QueueServicepour gérer les queues et jobs - ✅ 6 queues configurées : exports, google-calendar-sync, scheduled-emails, workflow-tasks, recurring-sessions, audit-cleanup
- ✅ 6 processors implémentés pour chaque type de job
- ✅ Migration complète des schedulers vers la queue
- ✅ Migration du
ExportControllervers la queue - ✅ Intégration WebSocket pour les mises à jour de statut en temps réel
- ✅ Endpoint
/export/status/:jobIdpour vérifier le statut des jobs - ✅ Documentation complète dans
docs/QUEUE_SYSTEM.md
- ✅ Module
- Schedulers migrés :
- ✅
GoogleCalendarSyncScheduler→ Queuegoogle-calendar-sync - ✅
ScheduledEmailsScheduler→ Queuescheduled-emails - ✅
WorkflowTasksScheduler→ Queueworkflow-tasks - ✅
RecurringSessionsScheduler→ Queuerecurring-sessions - ✅
AuditScheduler→ Queueaudit-cleanup
- ✅
- Bénéfices obtenus :
- ✅ Traitement asynchrone (non-bloquant)
- ✅ Retry automatique avec backoff exponentiel
- ✅ Meilleure scalabilité horizontale (workers multiples)
- ✅ Monitoring des jobs (en cours, en attente, échoués)
- ✅ Mises à jour en temps réel via WebSocket
- Architecture implémentée :
Scheduler → QueueService → Queue (Redis/BullMQ) → Processor → Service
↓
WebSocket Updates - Outils utilisés :
@nestjs/bullmq+bullmq - Fichiers créés :
backend/src/queue/queue.module.tsbackend/src/queue/queue.service.tsbackend/src/queue/queue.config.tsbackend/src/queue/types/job-data.types.tsbackend/src/queue/types/queue-names.types.tsbackend/src/queue/processors/export.processor.tsbackend/src/queue/processors/google-calendar-sync.processor.tsbackend/src/queue/processors/scheduled-emails.processor.tsbackend/src/queue/processors/workflow-tasks.processor.tsbackend/src/queue/processors/recurring-sessions.processor.tsbackend/src/queue/processors/audit-cleanup.processor.tsbackend/src/queue/queue-board.module.ts- Dashboard Bull Boarddocs/QUEUE_SYSTEM.mdbackend/src/queue/README.md
- Documentation :
- QUEUE_SYSTEM.md - Documentation complète avec exemples et meilleures pratiques
- backend/src/queue/README.md (documentation technique backend) - Documentation technique du module
- Monitoring :
- ✅ Bull Board intégré - Dashboard accessible à
/admin/queues - Visualisation en temps réel de toutes les queues
- Gestion des jobs (retry, purge, filtrage)
- ✅ Bull Board intégré - Dashboard accessible à
- Monitoring :
- ✅ Bull Board intégré - Dashboard accessible à
/admin/queues - Visualisation en temps réel de toutes les queues
- Gestion des jobs (retry, purge, filtrage)
- ✅ Bull Board intégré - Dashboard accessible à
5.1. Architecture Workers BullMQ - Déportement OCR PDF, Relances, IA, Exports 🚀 EN PLANIFICATION
- Blueprint : Déporter les actions longues/lourdes (CPU/IO/externe) dans des workers BullMQ tout en conservant la logique métier transactionnelle dans l'API NestJS.
- Statut : 🚀 En planification - Architecture et plan d'implémentation détaillés disponibles
- Priorité : Haute
- Effort : 4-6 semaines
- Description : Refactorisation de l'architecture pour séparer clairement l'API synchrone (validation + persistance + enqueue) des workers asynchrones (exécution + retries + observabilité).
Principes architecturaux :
- API synchrone = valider (Zod) + persister (Postgres) + enqueue job (BullMQ) + retourner rapidement
- Workers = exécuter + retries/backoff + idempotence + DLQ + observabilité (
job_runs) - Outbox recommandé dès qu'il faut garantir "DB commit → job/event"
- Contrats de jobs stables : payloads versionnés
{ v: 1, ... }+ validation Zod côté worker - Artefacts (exports, OCR results) stockés en Cloudflare R2 (ou équivalent) via un port
StoragePort
Découpage cible (process) :
api(NestJS) : REST + auth + règles métier + outbox/enqueueworker-email(NestJS) : emails planifiés, tracking, webhooksworker-ai(NestJS) : appels OpenAI, post-processing, quotas/rate limiting, coûtsworker-export(NestJS) : génération CSV/PDF/ZIP, upload R2, presignedworker-doc(NestJS) : orchestration pipeline documents (split pages, enqueue OCR/extraction)ocr-service(Python) optionnel : OCR réel + extraction layout (si besoin libs Python)
Catalogue standard des jobs (BullMQ) :
email:send- Envoi d'email individuelai:run- Exécution de tâche IAexport:build- Génération d'exportdoc:ingest- Ingestion de documentdoc:ocr- OCR de document/pagedoc:extract_structured(optionnel) - Extraction structuréedoc:index_search(optionnel) - Indexation pour recherche
Standard job payload :
- Payload =
{ v: 1, orgId, userId?, entityId, ... } - Validation Zod côté worker
jobIdstable pour idempotence :${orgId}:${jobName}:${entityId}:${hash(stablePayloadPart)}- Config retries/backoff standardisée :
attempts: 5,backoff: { type: "exponential", delay: 3000 }
Tables transversales (recommandées) :
outbox_events: Garantit transaction DB → publication job/eventjob_runs: Suivi d'exécution et corrélation logsfile_objects: Référentiel d'artefacts (R2)
Modules détaillés :
- Module A — Document Processing / OCR PDF : Import contrats PDF, questionnaires scannés → OCR + indexation + extraction structurée
- Module B — IA (AI Orchestration) : Assistant IA pour rédaction, résumés, extraction, classification avec quotas/coûts
- Module D — Exports : Exports comptables, contacts, sessions/projets, GDPR export avec stockage R2
Sécurité / Multi-tenant / Permissions :
- Toutes les tables et payloads ont
orgId - Guards API pour droits (exports, docs, outreach)
- Workers valident
orgId+ existence entité avant exécution - Audit trail sur opérations sensibles
Observabilité & Ops :
- Corrélation :
requestId→jobId→job_runs.id - Logs structurés start/end + duration + attempts + errors
- Métriques : queue depth, success/fail rate, p95 duration, coûts IA
- DLQ + UI admin "replay job" (optionnel)
Documentation :
docs/WORKERS_ARCHITECTURE.md: principes, process, queues, conventions jobsdocs/DOCUMENT_PROCESSING_OCR.md: DDD + DB + endpoints + jobs + UIdocs/AI_ORCHESTRATION.md: tasks, quotas, coûts, endpoints, workerdocs/EXPORTS.md: types, statuts, R2, endpointsdocs/OBSERVABILITY.md: job_runs, corrélation, métriques, DLQ
Checklist d'implémentation :
- Standardiser
jobName/jobId+ payload versionné{ v: 1 } - Zod validation des payloads côté worker
- Ajouter
job_runs+outbox_eventssi manquants - Isoler 4 workers : email / ai / export / doc (process séparés)
- Centraliser
StoragePort(R2) et mappingfile_objects - Mettre en place polling status sur frontend pour jobs longs
- Ajouter DLQ + replay (optionnel)
- Mettre à jour la documentation (fichiers listés ci-dessus)
Estimation : 4-6 semaines de développement (MVP)
6. Backup et disaster recovery
- ✅ Stratégie de sauvegarde et récupération - Sauvegardes automatiques avec plan de récupération
- Statut : ✅ Complété (2025-01-XX)
- Priorité : Haute
- Effort : 3-5 jours
- Implémenté :
- ✅ Script de backup manuel (
infra/backup-db.sh) - ✅ Service de backup avec endpoint API (
BackupService) - ✅ Logging des backups dans la DB (
backup_logstable) - ✅ Compression gzip des backups
- ✅ Nettoyage automatique des anciens backups (rétention configurable via
RETENTION_DAYS) - ✅ Sauvegardes automatiques planifiées - Scheduler NestJS quotidien à 2h du matin (
BackupScheduler) - ✅ Vérification de l'intégrité des backups - Calcul de checksum SHA-256 pour chaque backup
- ✅ Monitoring des sauvegardes - Statut (completed/failed/in_progress), durée, erreurs enregistrées
- ✅ Alertes en cas d'échec - Notifications email automatiques si backup échoue
- ✅ Plan de disaster recovery documenté - Documentation complète dans
docs/DISASTER_RECOVERY.md - ✅ Statistiques de backup - Méthode
getBackupStatistics()pour monitoring
- ✅ Script de backup manuel (
- Manquant :
- ❌ Sauvegardes incrémentielles (WAL archiving pour point-in-time recovery)
- ❌ Tests de restauration réguliers (automatisés)
- ❌ Sauvegarde des fichiers (R2/Cloudflare) en plus de la DB
- ❌ Sauvegarde vers un emplacement distant (S3, autre serveur)
- Stratégie actuelle :
- Sauvegardes complètes : Quotidiennes à 2h du matin (gardées 30 jours par défaut, configurable via
RETENTION_DAYS) - Intégrité : Checksum SHA-256 calculé pour chaque backup
- Monitoring : Tous les backups enregistrés avec statut, durée, erreurs
- Alertes : Notifications email en cas de succès/échec (si
BACKUP_NOTIFICATION_EMAILconfiguré)
- Sauvegardes complètes : Quotidiennes à 2h du matin (gardées 30 jours par défaut, configurable via
- Stratégie future proposée :
- Sauvegardes incrémentielles : Toutes les 6 heures (gardées 7 jours)
- Sauvegardes hebdomadaires : Gardées 90 jours
- Sauvegardes mensuelles : Gardées 1 an
- Outils : pg_dump pour backups complets, pgBackRest ou WAL-E pour backups incrémentiels (futur), ou solution cloud (RDS snapshots)
- Fichiers :
backend/src/backup/backup.service.ts(service amélioré avec checksum, statut, durée)backend/src/backup/backup.scheduler.ts(scheduler automatique)backend/src/backup/backup.module.ts(module avec scheduler)infra/backup-db.sh(script manuel)infra/liquibase/changes/0111_improve_backup_logs/(migration pour nouveaux champs)docs/DISASTER_RECOVERY.md(plan de disaster recovery complet)
- Documentation :
docs/DISASTER_RECOVERY.md- Plan complet avec procédures de restauration, scénarios de sinistre, tests de restauration, monitoring
7. Gestion des migrations DB
- ✅ Amélioration du processus de migration - Validation et rollback automatiques
- Statut : ✅ Complété (2025-01-XX)
- Priorité : Basse
- Effort : 1-2 jours
- Implémenté :
- ✅ Système de migrations Liquibase avec changelog maître
- ✅ Scripts de migration (
infra/migrate-improved.sh) - ✅ Support des rollbacks (
down.sqlpour chaque migration) - ✅ Scripts de rollback dans Makefile (
make rollback) - ✅ Validation automatique des migrations - Validation de syntaxe SQL avant exécution (
migrate-improved.sh) - ✅ Rollback automatique en cas d'échec - Tentative automatique de rollback si migration échoue
- ✅ Vérification de l'ordre des migrations - Validation basique de l'ordre des migrations
- ✅ Backup automatique avant migration en production - Création automatique de backup avant migration (production uniquement)
- ✅ Monitoring des migrations - Table
migration_logspour logger statut, durée, erreurs - ✅ Script amélioré -
migrate-improved.shavec toutes les fonctionnalités intégrées
- Implémenté (suite) :
- ✅ Tests automatisés de migration dans CI/CD - Job
test:migrationsdans.gitlab-ci.ymlqui valide les migrations avant déploiement (infra/test-migrations.sh) - ✅ Interface admin pour visualiser les migrations - Onglet "Migrations" dans le panneau admin avec statistiques, liste des migrations, détection des migrations manquantes
- ✅ Alertes automatiques en cas d'échec de migration - Scheduler NestJS (
MigrationsScheduler) qui vérifie quotidiennement les migrations échouées et envoie des emails d'alerte - ✅ Validation avancée - Détection des migrations manquantes via comparaison DB/changelog (parsing du
changelog-master.yamlet comparaison avecmigration_logs)
- ✅ Tests automatisés de migration dans CI/CD - Job
- Manquant :
- ❌ Tests automatisés de migration dans CI/CD avec base de données de test (actuellement SKIP_DB_TEST=true)
- ❌ Interface pour déclencher manuellement une migration depuis l'admin
- ❌ Rollback manuel depuis l'interface admin
- Processus implémenté :
- ✅ Validation de la syntaxe SQL via Liquibase validate
- ✅ Vérification de l'ordre des migrations
- ✅ Backup automatique avant migration en production
- ✅ Exécution de la migration avec logging dans
migration_logs - ✅ Rollback automatique en cas d'échec
- ✅ Mise à jour du statut dans
migration_logs
- Outils : Liquibase avec validation automatique, script amélioré
migrate-improved.sh - Fichiers :
infra/liquibase/changelog-master.yaml(changelog maître)infra/migrate-improved.sh(script principal avec validation, backup, logging, rollback)infra/test-migrations.sh(script de test pour CI/CD)infra/migrate.sh(script basique, déprécié - utilisermigrate-improved.sh)infra/liquibase/changes/0112_create_migration_logs/(migration pour table de logging)backend/src/migrations/(service, scheduler, module pour migrations)frontend/src/pages/admin/AdminPanelPage/components/MigrationsTab.tsx(interface admin)frontend/src/client/status/useMigrations.ts(hooks React Query).gitlab-ci.yml(intégration CI/CD avec jobtest:migrations)docs/MIGRATION_PROCESS.md(documentation complète)
- Documentation :
docs/MIGRATION_PROCESS.md- Guide complet avec processus, monitoring, gestion des erreurs, bonnes pratiques
8. Gestion des erreurs et retry logic
- ⚠️ Stratégie de retry améliorée - Retry intelligent avec backoff exponentiel
- Statut : ⚠️ Partiellement implémenté
- Priorité : Moyenne
- Effort : 2-3 jours
- Implémenté :
- ✅ Retry pour erreurs de connexion DB dans les schedulers (
retryQuery) - ✅ Gestion d'erreurs basique dans certains services
- ✅ Retry pour erreurs de connexion DB dans les schedulers (
- Manquant :
- ❌ Retry avec backoff exponentiel pour tous les appels API externes
- ❌ Configuration des stratégies de retry (nombre de tentatives, délai initial, max délai)
- ❌ Retry sélectif (ne pas retry sur erreurs 4xx, seulement 5xx et timeouts)
- ❌ Logging des retries pour debugging
- ❌ Circuit breaker intégré avec retry logic
- Stratégie proposée :
- Erreurs réseau/timeout : Retry avec backoff exponentiel (3 tentatives max)
- Erreurs 5xx : Retry avec backoff exponentiel (2 tentatives max)
- Erreurs 4xx : Pas de retry (erreur client)
- Erreurs DB : Retry avec backoff exponentiel (3 tentatives max)
- Fichiers : Créer
backend/src/common/retry.service.tset l'utiliser dans tous les services externes - Recommandation : Utiliser une bibliothèque comme
p-retryou implémenter un helper custom
9. Rate limiting amélioré
- ⚠️ Rate limiting granulaire - Limites par utilisateur, endpoint et type d'opération
- Statut : ⚠️ Partiellement implémenté
- Priorité : Moyenne
- Effort : 2-3 jours
- Implémenté :
- ✅ Rate limiting global avec
RateLimitingGuardet Redis - ✅ Configuration par endpoint avec
@RateLimit()decorator - ✅ Compteurs Redis pour tracking
- ✅ Rate limiting global avec
- Manquant :
- ❌ Rate limiting par utilisateur (limites individuelles)
- ❌ Rate limiting par type d'opération (ex: limites différentes pour IA vs API normale)
- ❌ Rate limiting adaptatif (augmenter les limites pour utilisateurs premium)
- ❌ Headers de rate limiting dans les réponses (X-RateLimit-*)
- ❌ Monitoring des rate limits (nombre de requêtes bloquées)
- Améliorations proposées :
- Headers
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset - Limites différentes pour les plans d'abonnement (FREE, BASIC, PRO)
- Limites spécifiques pour les endpoints IA (plus restrictives)
- Headers
- Fichiers :
backend/src/rate-limiting/rate-limiting.guard.ts - Recommandation : Étendre le système actuel avec des limites granulaires et des headers de réponse
10. Gestion de la charge et autoscaling
- ❌ Autoscaling et gestion de la charge - Scalabilité horizontale automatique
- Statut : ❌ Non implémenté
- Priorité : Basse (pour l'instant, mais importante pour la croissance)
- Effort : 5-7 jours
- Description : Mise en place d'un système d'autoscaling basé sur la charge
- Composants :
- Monitoring de la charge (CPU, mémoire, nombre de requêtes)
- Décision d'autoscaling (règles de scaling up/down)
- Provisionnement automatique de nouvelles instances
- Load balancing entre instances
- Recommandation : Utiliser Kubernetes avec HPA (Horizontal Pod Autoscaler) ou solution cloud (AWS Auto Scaling, Google Cloud Autoscaler)
- Prérequis : Application doit être stateless (sessions dans Redis, pas de state local)
- Bénéfices : Scalabilité automatique selon la charge, réduction des coûts en période creuse
11. Sécurité infrastructure
- ⚠️ Renforcement de la sécurité infrastructure - Protection contre les attaques et vulnérabilités
- Statut : ⚠️ Partiellement implémenté
- Priorité : Haute
- Effort : 3-5 jours
- Implémenté :
- ✅ Rate limiting pour protection contre DDoS
- ✅ Validation des entrées (Zod schemas)
- ✅ Sanitization HTML pour prévenir XSS
- ✅ Authentification JWT avec expiration
- Manquant :
- ❌ WAF (Web Application Firewall) pour protection contre les attaques courantes
- ❌ Détection d'intrusion (IDS) et prévention (IPS)
- ❌ Scans de sécurité automatisés (OWASP ZAP, Snyk)
- ❌ Rotation automatique des secrets (tokens, clés API)
- ❌ Chiffrement des données au repos (DB, fichiers)
- ❌ Audit de sécurité régulier
- Recommandation : Intégrer WAF (Cloudflare, AWS WAF), activer le chiffrement au repos pour la DB, mettre en place la rotation des secrets
- Fichiers : Configuration infrastructure (
infra/docker-compose.*.yml), CI/CD (.gitlab-ci.yml)
12. Documentation infrastructure
- ⚠️ Documentation complète de l'infrastructure - Runbooks et guides opérationnels
- Statut : ⚠️ Partiellement implémenté
- Priorité : Moyenne
- Effort : 2-3 jours
- Implémenté :
- ✅ Documentation technique développeur (
docs/BACKEND.md,docs/ARCHITECTURE.md) - ✅ README avec instructions de setup
- ✅ Documentation technique développeur (
- Manquant :
- ❌ Runbooks pour incidents courants (DB down, Redis down, service externe down)
- ❌ Guide de disaster recovery (étapes de restauration)
- ❌ Documentation des procédures de déploiement
- ❌ Diagrammes d'architecture infrastructure (diagrammes de déploiement)
- ❌ Documentation des variables d'environnement (description de chaque variable)
- Recommandation : Créer
docs/INFRASTRUCTURE.mdetdocs/RUNBOOKS.mdavec les procédures opérationnelles
📚 Documentation & Support
Suggestions basées sur l'analyse
- ⚠️ Documentation utilisateur - Documentation complète pour les utilisateurs finaux
- Partiellement implémenté : Documentation technique développeur (
docs/), README avec setup - Manquant : Documentation utilisateur final, guides d'utilisation, tutoriels
- Partiellement implémenté : Documentation technique développeur (
- ❌ Tutoriels interactifs - Tutoriels interactifs pour guider les nouveaux utilisateurs
- Non implémenté : Pas de tutoriels interactifs (onboarding basique existe mais pas de tutoriels)
- ❌ Centre d'aide intégré - Centre d'aide accessible depuis l'application
- Non implémenté : Pas de centre d'aide intégré
- ❌ Chat support - Chat support intégré pour l'assistance utilisateur
- Non implémenté : Pas de chat support intégré
- ❌ Base de connaissances - Base de connaissances avec articles et FAQ
- Non implémenté : Pas de base de connaissances
📊 Résumé de l'état d'avancement
Pour les priorités de développement et les prochaines étapes, consultez PRIORITES.md
Fonctionnalités majeures complétées récemment
-
✅ Système de facturation robuste et conforme (100% complété) - 2024-12-19
- Numérotation séquentielle atomique, immutabilité vérifiable, conformité France/UE
- Calculs précis, avoirs, paiements unifiés, export comptable, audit trail complet
- Endpoints admin, préparation E-invoicing, tests complets
- Documentation : BILLING_FINAL_SUMMARY.md et BILLING_PROGRESS_RECAP.md
-
✅ Système de réservation publique (100% complété)
- Interface publique, calendrier interactif, gestion des bookings
- ✅ Mise en avant sur la landing page - Section dédiée ajoutée avec présentation des avantages (2026-01-17)
- Documentation : BOOKING_SYSTEM.md et BOOKING_IMPROVEMENTS.md
-
✅ Global Search & IA - Phase 1 (100% complété)
- Assistant conversationnel, vues personnalisées, actions complexes
- Documentation : AI_SEARCH_ARCHITECTURE.md
-
✅ Synchronisation Google Calendar (100% complété)
- Sync bidirectionnelle, gestion de disponibilité, résolution de conflits
- Documentation : CALENDAR_SYNC_ARCHITECTURE.md
-
✅ Notifications Push (100% complété)
- Notifications navigateur, in-app, intégration avec actions IA
- Documentation : TESTING_WEB_PUSH.md
-
✅ Dark / Light Mode (100% complété)
- Thème sombre, détection automatique, persistance des préférences
-
✅ Gestion centralisée des types via OpenAPI (100% complété)
- Audit complet et migration de tous les types partagés vers OpenAPI
- Types scope-specific dans fichiers
types.tsappropriés - Documentation complète des règles de gestion des types
- Correction des erreurs de validation OpenAPI
- Documentation :
docs/AGENTS_OPENAPI.md
-
✅ Calendrier visuel amélioré (100% complété)
- Vues timeline semaine et jour, visualisation des chevauchements, légende interactive, filtres visuels, vue agenda/liste, drag & drop dans toutes les vues
- Documentation :
docs/CALENDAR_VISUAL_IMPROVEMENTS.md
-
✅ GDPR / RGPD - Portail de gestion des données (100% complété)
- Portail complet avec tous les droits RGPD
- Gestion des consentements avec traçabilité
- Export de données (JSON, CSV, XML)
- Suppression sécurisée (FULL, PARTIAL, ANONYMIZATION)
- Protection contre les race conditions et vulnérabilités
- Documentation :
backend/src/gdpr/README.md
-
✅ Intégration Stripe complète (100% complété)
- Gestion des abonnements (FREE, BASIC, PRO) avec cycles mensuels/annuels
- Paiement des factures via Stripe Payment Intents
- Collecte de méthodes de paiement via SetupIntent
- Attachement de méthodes de paiement au client Stripe
- Webhooks pour synchronisation automatique des statuts
- Historique des paiements
- Interface utilisateur complète avec Stripe Elements
- Documentation :
backend/src/stripe/README.md
-
✅ Backup et disaster recovery (100% complété)
- Sauvegardes automatiques quotidiennes (scheduler NestJS à 2h du matin)
- Vérification d'intégrité avec checksum SHA-256
- Monitoring complet (statut, durée, erreurs)
- Alertes email en cas d'échec
- Plan de disaster recovery documenté
- Statistiques de backup pour monitoring
- Documentation :
docs/DISASTER_RECOVERY.md
-
✅ Amélioration du processus de migration (100% complété)
- Validation automatique des migrations avant exécution
- Backup automatique avant migration en production
- Logging complet dans table
migration_logs(statut, durée, erreurs) - Rollback automatique en cas d'échec
- Vérification de l'ordre des migrations
- Script amélioré
migrate-improved.shavec toutes les fonctionnalités - Documentation :
docs/MIGRATION_PROCESS.md
- ✅ Système de progression (100% complété) - 2026-01-16
- Système d'XP et niveaux : 7 niveaux (Apprenti → Légende) avec progression exponentielle
- Badges : 20+ badges dans différentes catégories (Gestion, Organisation, Relation client, Efficacité, Spécialisations, Événementiels)
- Défis : Défis quotidiens, hebdomadaires et mensuels avec renouvellement automatique
- Classements : Leaderboards par type (XP total, CA mensuel, etc.)
- Aaperture Coins : Monnaie virtuelle gagnée via niveaux, badges et défis
- Boutique de récompenses : 15 récompenses disponibles (templates, fonctionnalités, visuels, formations)
- Scheduler automatique : Renouvellement des défis et mise à jour des classements
- Intégration dans les services existants : Attribution automatique d'XP lors d'actions utilisateur
- Documentation :
backend/src/progression/README.md
-
✅ Système d'organisations (100% complété - Backend + Frontend) - 2026-01-16
Backend :
- Création et gestion d'organisations : Les utilisateurs peuvent créer des organisations et inviter d'autres utilisateurs
- Gestion des membres : Rôles (OWNER, ADMIN, MEMBER, VIEWER) avec permissions granulaires
- Partage de ressources : Partage de sessions, devis, factures, contrats, contacts avec permissions (read, write, delete)
- Système d'invitations : Invitations par email avec tokens sécurisés
- Vérification d'accès : Service helper pour vérifier l'accès aux ressources via organisations
- Intégration dans les services existants : Support du partage via
OrganizationAccessService
Frontend :
-
Hooks React Query complets pour toutes les opérations (list, get, create, update, delete, members, resources)
-
Pages complètes : Liste, création, édition, vue détaillée avec onglets (Overview, Members, Resources)
-
Composants :
CreateOrganizationDialog,MembersTab,ResourcesTabavec gestion complète -
Routes intégrées dans le router TanStack React Router
-
Formulaires avec
react-hook-formet validation Zod -
Traductions i18n complètes
-
Optimistic updates et invalidation du cache
-
Documentation :
backend/src/organizations/README.md
Notes
- Ce plan est évolutif et doit être mis à jour régulièrement
- Les priorités peuvent changer en fonction des retours utilisateurs
- Certaines améliorations peuvent être combinées pour optimiser le développement
- Il est important de valider les besoins avec les utilisateurs avant de développer
- Voir les documentations spécifiques pour plus de détails sur chaque fonctionnalité