Priorités de Développement - Aaperture
Source de vérité : Ce document est la référence principale pour les priorités de développement. Point d’entrée vers les plans : ROADMAP.md. Pour une vue détaillée par domaine fonctionnel, consultez PLAN_AMELIORATIONS_CRM.md.
Ce document liste les priorités de développement basées sur l'analyse de la documentation et l'état actuel du projet.
Dernière mise à jour : 2026-03-09 - Priorités resserrées après stabilisation lead forms / emails / docs
🎯 Prochaines étapes recommandées
| Priorité | Sujet | Où |
|---|---|---|
| Haute | Proposal v3 – E2E optionnel (flux builder + envoi email) | § Priorité Haute > Proposal v3 |
| Haute | Tests E2E – Renforcer la suite (parcours critiques, CI, flakiness) | § Priorité Moyenne > Renforcement tests E2E |
| Haute | Tableau de suivi clientèle – Vue pipeline unifiée leads/contacts/sessions/actions | § Priorité Haute > Relation clientèle omnicanale (CRM) |
| Haute | Création/édition en modales – Remplacer les pages formulaire lourdes par modales standardisées | § Priorité Haute > Relation clientèle omnicanale (CRM) |
| Haute | Visual Day Planner mariage – Timeline visuelle journée + publication client + workflow de propositions | § Priorité Haute > Visual Day Planner mariage |
| Moyenne | Plugin Gmail – Suivi des demandes entrantes email (liaison contact/session + statut) | § Priorité Haute > Relation clientèle omnicanale (CRM) |
| Moyenne | Agent IA – Tests unitaires des handlers d’actions | § Améliorations Agent IA > Tests unitaires helpers et handlers |
| Moyenne | Conformité fiscale – Finaliser Bloc 1 (attestation signée), Blocs 2–6 | § Priorité Moyenne > Conformité fiscale |
| Moyenne | Workflows – Lot 0 (nettoyage, audit) puis Sprints 1–2 | § Priorité Haute > 8.b Séquence validée |
✅ Focus soldés récemment
- Lead forms - fiabilité de réception et conversion : durcissement de la création automatique de contact depuis une soumission, action manuelle “créer un contact” depuis la liste des soumissions, matching UI amélioré après refresh, et migration SQL
guest_countcorrigée. - Lead forms - intégration publique : embed iframe simplifié en version sans script, hauteur fixe documentée, et clarification du comportement d’email côté propriétaire / auto-réponse.
- Emails transactionnels : correctifs de rendu de signature HTML, sanitation, dépendances Nest (
UserEmailSenderService,StorageService,HtmlSanitizerService) et stabilité du build TypeScript backend. - Documentation active : recentrage sur
docs/README.md,docs/PRIORITES.mdetdocs/ROADMAP.mdcomme points d’entrée, avec nettoyage des priorités devenues non urgentes.
🎯 Prochain focus recommandé
Le sujet lead forms / emails sort du haut de pile sauf incident production nouveau. Le meilleur prochain lot est:
Proposal v3: fermer la boucle qualité avec E2E et QA finale.CRM pipeline: lancer la vue de suivi clientèle unifiée.Modales create/edit: réduire les pages formulaire lourdes les plus fréquentes.
Gouvernance documentaire
- Objectif: garder une documentation rapide à parcourir, non contradictoire, et exploitable en production.
- Décisions:
docs/README.mddevient l'index court des docs actives.- une source de vérité par sujet; les duplicats deviennent des pointeurs.
- les documents obsolètes passent en
docs/archive/.
- Outillage agent local:
.agents/frontend-performance/SKILL.md.agents/docs-performance/SKILL.md
✅ Complété Récemment
-
Proposal default cover (upload) + page Proposal defaults + settings API - 100% complété (2026-02-28)
- ✅ Cover par défaut en fichier : l’image de cover par défaut des proposals n’est plus une URL saisie à la main mais un fichier uploadé (presigned URL → PUT R2, clé
proposal-defaults/{userId}/...). - ✅ Backend : colonne
proposal_default_cover_image_key(migration 0192), GETme/settingsrenvoie une URL signée calculée à partir de la clé, DTO user settings acceptenullpour tous les champs optionnels (évite 400 sur sauvegarde). - ✅ Stockage :
StorageAccessServiceautorise upload/lecture pourproposal-defaults/{userId}/...(utilisateur = propriétaire du dossier). - ✅ Frontend : page dédiée
/settings/proposal-defaultsavec zone d’upload (glisser-déposer, aperçu, suppression), lien depuis le builder proposal ; entrée menu « Proposal defaults » ; types OpenAPI régénérés. - Documentation :
backend/src/storage/README.md(règles d’accèsproposal-defaults, clés métier et lecture).
- ✅ Cover par défaut en fichier : l’image de cover par défaut des proposals n’est plus une URL saisie à la main mais un fichier uploadé (presigned URL → PUT R2, clé
-
Tests E2E auth + Agent helpers + doc DI - 100% complété (2026-02-27)
- ✅ E2E auth smoke :
frontend/e2e/auth.smoke.spec.ts– parcours login UI (email → mot de passe → dashboard), requiertE2E_EMAIL/E2E_PASSWORD - ✅ Tests unitaires Agent :
ActionHelpers(validateRequiredParams, replacePlaceholders, extractEntityId, buildContextFromResults + actionResult, 14 tests),EntitySearchHelper.searchContactByName(4 tests) - ✅ Documentation :
docs/DI_CONVENTIONS.md– conventions DI NestJS, Core Modules, tests
- ✅ E2E auth smoke :
-
Messagerie – Recherche plein-texte + présence + portail client - 100% complété (2026-02-28)
- ✅ Recherche plein-texte (app) : debounce 300 ms, appels
client-messagesetfriend-messagessearch à partir de 2 caractères, fusion des résultats, snippets avec surlignage (reste gris, match blanc gras), bouton croix pour vider la recherche, scroll au message trouvé à l’ouverture - ✅ Ping présence : envoi d’un
Client.Pingtoutes les 60 s depuisuseGlobalMessageslorsque le socket est connecté (mise à jourlast_seen_at) - ✅ Portail client : bouton croix sur le champ recherche, surlignage du terme dans le nom du photographe et l’aperçu du dernier message (ConversationsPanel, ConversationItem)
- Documentation :
docs/MESSAGING_IMPROVEMENTS_PLAN.md(sections 1–4 mises à jour)
- ✅ Recherche plein-texte (app) : debounce 300 ms, appels
-
Notifications Invitations & Amis + UX Portail client + Skeleton loaders - 100% complété (2026-02-26)
- ✅ Notifications in-app + email : invitation acceptée (parrain), demande d'ami reçue (destinataire), demande d'ami acceptée (expéditeur) — FR/EN selon locale, liens vers
/invitationset/friends - ✅ Portail client (fiche contact) : fallback statut compte par email si pas de lien
client_account_contacts, bloc « Aucune adresse email » avec bouton « Modifier le contact », rafraîchissement statut (staleTime 0, refetch on focus) - ✅ Skeleton loaders :
ListPageSkeletonpour listes contacts et sessions (useSkeletonWhenLoading),DashboardPageSkeletonpour chargement initial du dashboard - Documentation :
docs/INVITATIONS_FRIENDS_IMPROVEMENTS.md,docs/FRONTEND_NEXT_STEPS.md
- ✅ Notifications in-app + email : invitation acceptée (parrain), demande d'ami reçue (destinataire), demande d'ami acceptée (expéditeur) — FR/EN selon locale, liens vers
-
Proposal v2/v3 + add-ons par SessionType (socle + builder dédié + email proposal + UX publique premium) - 93% complété (2026-02-24)
- ✅ Tarifs add-ons :
user_ratesenrichi (is_addon,is_active,addon_*) + endpointGET /api/user-rates/addons-catalog - ✅ Devis add-ons traçables :
quote_items.item_type = ADDON, provenanceline_origin,line_metadata,user_rate_id - ✅ Proposal public par token dédié : endpoints publics
/api/public/proposals/:token(read/selection/apply/accept) - ✅ Builder API v3 :
/upsells,/link,/builder,/presentation,/preview-email,/send-email - ✅ Traçabilité :
quote_revisions+ patch add-ons UPSSELL uniquement - ✅ OpenAPI : schemas/paths proposals + types générés backend/frontend alignés
- ✅ Frontend public premium :
/proposal/:token|slug, navigation immersive, auto-update/auto-apply, invitation finale - ✅ Builder dédié :
/quotes/:quoteId/proposal(slug/token, cover dropzone, validité du lien, email proposal, read-only si devis accepté) - ✅ Custom proposal items : support builder/public/apply au devis
- ✅ Story defaults Proposal : defaults user settings (titre + texte) + préremplissage builder (migration
0190) - ✅ Correctifs clés : emails Proposal slug-first, access read-only public après acceptation, fallback
contract_template_iddepuis SessionType en édition de devis, fixes de calculs/UX Review - ✅ Garde métier : proposal en lecture seule (
read-only) après acceptation, builder bloqué si devis non prêt - ✅ Tests backend read-only :
proposals.controller.spec– putPresentation, putUpsells, createLink rejettent avecUnauthorizedExceptionquand le devis est accepté (2026-02-27) - ✅ QA UX : loading/error/empty states, responsive mobile/desktop, alignements, wording (ProposalBuilderPage, PublicProposalPage, ProposalUpsellsPanel) (2026-02-27)
- 🚧 Restant : E2E optionnel pour le flux proposal complet
- Documentation :
docs/PROPOSAL_V2_UPSELLS_IMPLEMENTATION_PLAN.md
- ✅ Tarifs add-ons :
-
Chat agent - Stabilisation post-refonte - 100% complété (2026-02-08)
- ✅ Suppression complète du streaming front/back (pipeline unique request/response)
- ✅ Renommage d’état UI en
isProcessing - ✅ Affichage à chaud des formulaires sans refresh (cache/déduplication corrigés)
- ✅ Préremplissage formulaires unifié (
action.parameters+requestInfo.initialValues) - ✅ Format unique des retours d’action via
metadata.actionResult - ✅ Rendu UI harmonisé succès/erreur/warning
- ✅ Tests ciblés backend/frontend pour contrat
actionResultet prefill
-
Messagerie & fichiers conversation (app + portail + contacts) - 100% complété (2026-02-04)
- ✅ UI unifiée :
ClientThreadViewpartagé entre app, portail client et onglet communications - ✅ Previews sécurisées : URLs signées + cache, modal plein écran pour images
- ✅ Uploads résilients : presigned URL + fallback backend côté portail (CORS)
- ✅ Temps réel : événement WebSocket commun pour messages + fichiers (refresh conversations + fichiers)
- ✅ UX : loaders de conversation, scroll interne (pas de scroll page)
- ✅ UI unifiée :
-
Messagerie globale (app + portail) + notifications différées - 100% complété (2026-01-31)
- ✅ Routes agnostiques : endpoints app en
/client-messages/app/*(alias legacy conservé) - ✅ Vue globale messages : liste contacts + amis, tri par dernier message, pastilles non‑lus, gestion présence légère
- ✅ Actions : suppression conversation, accès profil, message “compte client non créé”
- ✅ Email différé si non‑lu : 1er message non‑lu programmé (30 min), annulation si lu
- ✅ Settings utilisateur : opt‑in/out des emails de notifications messages via sidebar
- ✅ Invitations client sans compte : envoi d’un email d’invitation avec extrait du message
- Fichiers clés :
client-messagesbackend + templates email,MessagesPage+ sidebar settings, hooks messages app/portail
- ✅ Routes agnostiques : endpoints app en
-
Revue complète Portail Client - Phases 3, 4, 5 (i18n, UX, robustesse) - 100% complété (2026-01-31)
- ✅ i18n : suppression des chaînes françaises hardcodées dans la messagerie (
"fr-FR","Hier","Vous: "), locale dynamique, defaultValues EN - ✅ Clés de traduction : ajout
galleries,profile,logout(nav),yesterday,you,markReadError(messages),downloadError,fileTooLarge(files),sendError(contacts) - ✅ Toasts d'erreur : envoi message client, markAsRead, envoi message photographe
- ✅ Validation upload : limite 10 MB côté frontend avec toast d'erreur
- ✅ Fix download : clé
uploadError→downloadErrordansClientPortalFilesPage - ✅ UX responsive : hauteur messages
h-[600px]→h-[calc(100vh-12rem)] min-h-[500px] - ✅ Badge ContactCard : "Invitation en attente" ajouté dans la liste contacts (même pattern que ContactHero)
- Fichiers clés :
ClientPortalMessagesPage,ClientPortalFilesPage,ContactCard,ContactClientMessagesSection,ClientPortalLayout, traductions EN/FR
- ✅ i18n : suppression des chaînes françaises hardcodées dans la messagerie (
-
Harmonisation Portail Client ↔ Accès Client (UI + fonctionnalités) - 100% complété (2026-01-31)
- ✅ Navigation & Header unifiés : structure, logo, tokens
background/foreground - ✅ Heading accueil : “Votre espace sécurisé” + “Bienvenue,
{{name}}” sur/portal/dashboardet/client - ✅ Retrait du nom dans le header : “Bienvenue,
{{name}}” conservé en heading, pas dans le header global - ✅ Galeries côté portail :
- Route
/portal/galleries - Page dédiée + navigation + compteur dans dashboard
- Galerie disponible dans
ClientPortalSessionViewPage
- Route
- ✅ Paiement par virement côté portail :
- Bloc virement dans
/portal/documents(onglet factures + section factures) - Affichage même sans IBAN (message “infos bancaires manquantes”)
- Bloc virement ajouté dans la vue séance
- Bloc virement dans
- ✅ Données API :
ClientProject.galleryUrl/galleryPasswordClientDocuments.invoices[].bankDetails
- Fichiers clés :
- Backend :
backend/src/client-accounts/*,openapi/components/client-auth.yaml - Frontend :
ClientPortalLayout,ClientAccessPage,ClientPortalDocumentsPage,ClientPortalSessionViewPage,ClientPortalGalleriesPage,ClientPortalDashboardPage
- Backend :
- ✅ Navigation & Header unifiés : structure, logo, tokens
-
Système d'Authentification Client - Phases 1→5 - 100% complété (2026-01-30)
- ✅ Phase 1 - MVP Authentification :
- Migration DB (0161) : 7 tables créées
- Backend : modules
client-auth,client-accounts - Frontend : auth pages, dashboard, layout
- OpenAPI : schemas et paths complets
- i18n : traductions FR/EN
- ✅ Phase 2 - Expérience Client :
ClientPortalSessionsPage: liste avec filtres, recherche, groupementClientPortalSessionViewPage: détail avec timeline et documentsClientPortalDocumentsPage: vue unifiée devis/factures/contrats- Navigation simplifiée (Dashboard, Séances, Documents)
- ✅ Phase 3 - Messagerie :
- Migration DB (0162) : table
client_messages - Backend : module
client-messagesavec CRUD complet - Endpoints photographe dans
contacts.controller.ts - Frontend :
ClientPortalMessagesPageavec conversations et fil de discussion - Hooks TanStack Query pour messages en temps réel
- OpenAPI : schemas et paths pour messagerie
- Migration DB (0162) : table
- ✅ Phase 4 - Fichiers & Préférences :
ClientPortalFilesPage: upload, download, suppression, vue responsiveClientPortalSettingsPage: profil, sécurité, notifications, thème, suppression compte- Préférences client persistées et appliquées (thème, timezone)
- ✅ Phase 5 - Côté Photographe :
- Invitations portail client (création, statut, relances)
- Validation token côté portail + re‑invitation qui invalide l'ancien token
- Routes :
/portal/login,/portal/dashboard,/portal/sessions,/portal/documents,/portal/messages,/portal/files,/portal/settings - Phases restantes : aucune
- Documentation :
docs/CLIENT_AUTHENTICATION_PLAN.md- Journal d'implémentation complet
- ✅ Phase 1 - MVP Authentification :
-
Notifications automatiques de session - Partiellement implémenté, flux à fiabiliser
- ✅ Settings utilisateur : configuration dans
user_metadata.session_reminder_settings - ✅ UI/settings : réglages exposés dans la sidebar session
- ✅ Moteur v2 : les workflows utilisent
workflow_tasks,workflow_task_actions,session_workflow_task_runs - ⚠️ Trou fonctionnel actuel : les rappels 1 semaine / 24h / 1h ne sont pas générés automatiquement pour les nouvelles sessions
- ⚠️ Ancienne documentation : l’ancien document sur les notifications de session était basé sur des tables supprimées en 0173 et ne reflète plus le runtime réel
- Source de vérité actuelle :
docs/WORKFLOWS_ARCHITECTURE.md
- ✅ Settings utilisateur : configuration dans
-
Settings contextuels avec Sidebar - Partiellement complété (2026-01-29)
- ✅ Intégration des panneaux de settings directement dans les vues User
- ✅
UserSettingsSidebarContentavec tabs Profile, Subscription, Permissions - ❌ AdminPanelPage : Sidebar retirée (2026-01-29) - La page Admin est déjà une page de configuration, les tabs restent inline
- ✅ Pattern uniforme avec
ContextualSettingsSidebarréutilisable - ✅ Bouton Settings (icône roue crantée) dans les headers :
- Bouton icon-only (
size="icon") avec variantoutline - Icône
Settingsde lucide-react positionnée dans le header à droite - Texte
sr-onlypour l'accessibilité - Pattern uniforme appliqué sur InsightsPage, UserViewPage
- Bouton icon-only (
- ✅ Footer fixe avec actions (Cancel/Save) dans les panneaux
- ✅ SessionViewPage : Sidebar complétée (type de session, notifications)
- ✅ OrganizationViewPage : Sidebar complétée (membres, ressources partagées)
- ✅ DashboardPage : Sidebar complétée (widgets, rafraîchissement)
- Fichiers créés/modifiés :
- Frontend :
frontend/src/pages/users/UserViewPage/components/UserSettingsSidebarContent.tsx(CREATED)frontend/src/pages/sessions/SessionViewPage/components/SessionSettingsSidebarContent.tsx(CREATED)frontend/src/pages/organizations/OrganizationViewPage/components/OrganizationSettingsSidebarContent.tsx(CREATED)frontend/src/pages/dashboard/DashboardPage/components/DashboardSettingsSidebarContent.tsx(CREATED)
- Modifications :
UserViewPage.tsx(bouton Settings + sidebar)SessionViewPage.tsx(bouton Settings dans SessionHero + sidebar)OrganizationViewPage.tsx(bouton Settings dans headerActions + sidebar, tabs members/resources déplacés dans sidebar)DashboardPage.tsx(bouton Settings dans header + sidebar)AdminPanelPage.tsx(tabs inline restaurés, sidebar retirée)
- Frontend :
- Documentation :
docs/FRONTEND_IMPROVEMENT_PLAN.md,docs/PLAN_AMELIORATIONS_CRM.md,docs/AGENTS_FRONTEND.md
-
Améliorations UI/UX pour Insights - 100% complété (2026-01-28)
- ✅ Graphiques et visualisations (barres et camemberts pour sévérité/statut)
- ✅ Vue calendrier avec navigation mensuelle
- ✅ Groupement intelligent (par type, entité, ou date)
- ✅ Actions en lot (sélection multiple et actions groupées)
- ✅ Filtres sauvegardés (persistance localStorage)
- ✅ Export multi-format (CSV, Excel, JSON, PDF, DOCX) avec génération backend et URLs signées
- ✅ Menu "More" pour regrouper les actions Generate/Export
- ✅ Settings contextuels avec Sidebar Hover pour configuration rapide
- Fichiers créés/modifiés :
- Frontend :
frontend/src/pages/insights/InsightsPage/components/InsightsCharts.tsx,InsightsCalendarView.tsx,SavedFiltersMenu.tsx, etc. - Backend :
backend/src/export/export.service.ts(support insights)
- Frontend :
- Documentation :
docs/INSIGHTS_IMPLEMENTATION_PLAN.md- Section "Améliorations UI/UX"
-
LOT F : Nouvelles Règles d'Insights - 100% complété (2026-01-28)
- ✅
CONTACT_NO_ACTIVITY- Contacts sans interaction depuis X jours - ✅
QUOTE_EXPIRING- Devis proches de leur date d'expiration - ✅
INVOICE_PAYMENT_REMINDER- Rappels de paiement automatiques - ✅
SESSION_FOLLOWUP_MISSING- Sessions terminées sans suivi client - ✅
CONTRACT_EXPIRING- Contrats proches de leur expiration - ✅
RECURRING_SESSION_MISSING- Sessions récurrentes non créées - ✅
EMAIL_BOUNCE- Emails en erreur (bounce, spam, invalid) - Détecte les emails échoués dans scheduled_emails - ❌
LOW_STOCK- RETIRÉ (2026-01-28) - Ne correspond pas au domaine CRM - ✅ Règles personnalisées : Système complet permettant aux utilisateurs de créer leurs propres règles
- Fichiers créés :
- Backend :
backend/src/insights/generation/rules/*.rule.ts(7 nouvelles règles),backend/src/insights/custom-insight-rules.* - Frontend :
frontend/src/pages/insights/InsightsPage/components/CustomRulesTab.tsx - Tests :
backend/src/__tests__/insights/generation/rules/email-bounce.rule.spec.ts - Migrations :
infra/liquibase/changes/0145_create_custom_insight_rules/,0148_add_low_stock_and_email_bounce_insight_types/
- Backend :
- Documentation :
docs/INSIGHTS_IMPLEMENTATION_PLAN.md- Section "LOT F"
- ✅
-
LOT D : Personnalisation et Configuration pour Insights - 100% complété (2026-01-27)
- ✅ Table
insight_settingspour stocker les configurations utilisateur/organisation - ✅ Configuration des seuils de règles (ex: jours avant alerte pour devis en attente)
- ✅ Activation/désactivation de règles spécifiques
- ✅ Configuration des emails d'insights :
- ✅ Résumés quotidiens/hebdomadaires avec horaires configurables
- ✅ Notifications immédiates pour insights critiques
- ✅ Filtres configurables (types, sévérités, scope)
- ✅ Service d'envoi d'emails avec templates HTML
- ✅ Scheduler automatique pour envoi aux heures configurées
- ✅ Interface de configuration dans le frontend (dialog avec onglets)
- ✅ Support multi-tenant (settings personnels et organisation)
- ✅ Intégration dans le rule engine pour utiliser les seuils configurables
- Fichiers créés :
- Backend :
backend/src/insights/insight-settings.*,backend/src/insights/insights-email.* - Frontend :
frontend/src/client/insights/useInsightSettings.ts,frontend/src/pages/insights/InsightsPage/components/InsightSettingsDialog.tsx - Migrations :
infra/liquibase/changes/0144_create_insight_settings/
- Backend :
- Documentation :
docs/INSIGHTS_IMPLEMENTATION_PLAN.md- Section "LOT D"
- ✅ Table
-
LOT C : Support Multi-Tenant pour Insights - 100% complété (2026-01-27)
- ✅ Génération d'insights au niveau organisation (partagés entre membres)
- ✅ Filtrage par organisation dans l'API et l'UI
- ✅ Permissions : Vérification de l'appartenance à l'organisation
- ✅ Notifications : Tous les membres de l'organisation sont notifiés
- ✅ Sélecteur d'organisation dans le frontend
- ✅ Tests unitaires pour la génération multi-tenant
- Fichiers modifiés :
- Backend :
backend/src/insights/generation/insights-generator.service.ts,backend/src/insights/insights.repository.ts,backend/src/insights/insights.service.ts,backend/src/insights/insights.controller.ts - Frontend :
frontend/src/client/insights/useInsights.ts,frontend/src/pages/insights/InsightsPage/InsightsPage.tsx - Tests :
backend/src/__tests__/insights/generation/insights-generator-organization.spec.ts
- Backend :
- Documentation :
docs/INSIGHTS_IMPLEMENTATION_PLAN.md- Section "LOT C"
-
LOT B : LLM-assisted Summarization - 100% complété (2026-01-27)
- ✅ Service d'enrichissement LLM pour améliorer titres et résumés
- ✅ Cache des résultats (7 jours) pour éviter les appels répétés
- ✅ Anonymisation des données avant envoi à OpenAI
- ✅ Activation automatique basée sur la présence d'une clé OpenAI
- ✅ Tests unitaires complets (11 tests, 100% passants)
- Documentation :
docs/INSIGHTS_IMPLEMENTATION_PLAN.md- Section "LOT B"
-
LOT A : IA Proactive Insights (MVP Production) - 100% complété (2026-01-27)
- ✅ Migrations & Modèle : Tables
ai_insights,ai_insight_events,ai_insight_feedbackavec enums et indexes - ✅ 8 Règles d'insights : QuoteStale, InvoiceOverdue, InvoicePartiallyPaid, SessionPrepMissing, SessionPostprodLag, SessionWithoutDelivery, BookingUpcoming, ChecklistIncomplete
- ✅ Génération automatique : Scheduler quotidien à 3h du matin + génération réactive via events
- ✅ Queue & Processor : BullMQ avec retry/backoff, traitement asynchrone
- ✅ API complète : 7 endpoints REST avec validation Zod
- ✅ Interface utilisateur : Page Insights avec tabs (Open/Read/Archived), filtres avancés, badge compteur
- ✅ Notifications : In-app + WebSocket + push pour insights critiques
- ✅ Tests : 50+ tests unitaires (>80% coverage) + tests d'intégration
- ✅ i18n : Traductions FR/EN complètes
- ✅ Documentation : Plan d'implémentation complet, README backend
- ✅ Corrections post-MVP (2026-01-27) : Colonnes SQL corrigées, sérialisation JSONB, navigation/breadcrumb configurés
- Fichiers créés :
- Backend :
backend/src/insights/(repository, service, controller, rules, generator, scheduler, event handlers) - Frontend :
frontend/src/pages/insights/,frontend/src/client/insights/ - Tests :
backend/src/__tests__/insights/(8 fichiers de tests) - Migrations :
infra/liquibase/changes/0143_create_ai_insights/
- Backend :
- Documentation :
docs/INSIGHTS_IMPLEMENTATION_PLAN.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Insights Proactifs & Intelligence"
- ✅ Migrations & Modèle : Tables
-
Système de réservation publique - 100% complété
- ✅ Interface publique avec calendrier interactif
- ✅ Gestion des conflits avec verrouillage Redis
- ✅ Tests unitaires et d'intégration complets (149 tests)
- ✅ Documentation complète
- ✅ Mise en avant sur la landing page - Section dédiée ajoutée avec présentation des avantages (2026-01-17)
-
Global Search & IA - Phase 1 - 100% complété
- ✅ Assistant conversationnel intégré
- ✅ Builder de vues personnalisées via prompts
- ✅ Génération d'actions complexes
-
Tests d'intégration pour conflits de réservation - 100% complété
- ✅ 7 tests d'intégration pour scénarios concurrents
- ✅ Tests de verrouillage et nettoyage
-
Intégration Stripe complète - 100% complété
- ✅ Gestion des abonnements (création, annulation, reprise)
- ✅ 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
- ✅ Historique des paiements
- ✅ Interface utilisateur complète avec Stripe Elements
-
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 - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Infrastructure & Robustesse"
-
Gestion des timeouts - 100% complété
- ✅ Configuration centralisée via module
TimeoutConfig - ✅ Timeouts configurables pour toutes les opérations (DB, APIs externes, HTTP, cron, migrations, backups)
- ✅ Middleware HTTP global pour timeout des requêtes - ✅ Appliqué
- ✅ Timeouts dans scripts shell (migrations, backups) - ✅ Appliqué
- ✅ Timeouts DB (pool et requêtes) - ✅ Appliqué
- ✅ Utilitaires de timeout avec support retry - ✅ Disponibles et utilisés
- ✅ Application des timeouts dans services OpenAI - ✅ Appliqué (tous les appels API wrappés)
- ✅ Application des timeouts dans services Google Calendar/Gmail - ✅ Appliqué (helper
withCalendarTimeoututilisé) - ✅ Application des timeouts dans schedulers cron - ✅ Appliqué (tous les schedulers wrappés avec
executeWithTimeoutAndRetry) - Documentation :
docs/TIMEOUT_MANAGEMENT.md,docs/ENV_VARIABLES_TIMEOUT.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Infrastructure & Robustesse"
- ✅ Configuration centralisée via module
-
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 - ✅ Tests automatisés de migration dans CI/CD - Job
test:migrationsqui valide les migrations avant déploiement - ✅ Interface admin pour visualiser les migrations - Onglet "Migrations" avec statistiques, liste des migrations, détection des migrations manquantes
- ✅ Alertes automatiques en cas d'échec de migration - Scheduler NestJS 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) - Documentation :
docs/MIGRATION_PROCESS.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Infrastructure & Robustesse"
-
Système d'export centralisé multi-formats - 100% complété
- ✅ Service centralisé
ExportServicepour tous les exports - ✅ Support multi-formats : PDF, Word (DOCX), CSV, Excel (XLSX), JSON
- ✅ Endpoints unifiés avec paramètre
formatpour toutes les entités - ✅ Conversion HTML→Word pour quotes, invoices, contracts
- ✅ Composant frontend réutilisable
ExportFormatDialog - ✅ Exports pour : sessions, contacts, quotes, invoices, conversations, roadmaps, contract templates
- ✅ Types TypeScript générés depuis OpenAPI
- ✅ Documentation complète
- Documentation :
docs/EXPORT_SYSTEM.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Export & Import"
- ✅ Service centralisé
-
Navigation mobile améliorée - 100% complété
- ✅ Menu utilisateur full-screen sur mobile (
UserMenuMobile) - ✅ Sous-menus expansibles avec chevrons
- ✅ Contenu scrollable pour menus longs
- ✅ Détection automatique mobile/desktop dans
UserDropdown - ✅ Navigation tactile optimisée
- ✅ Menu utilisateur full-screen sur mobile (
-
Système de facturation robuste et conforme - 100% complété (2024-12-19)
- ✅ Numérotation séquentielle atomique (format YYYY-000001)
- ✅ Immutabilité vérifiable avec snapshots complets
- ✅ Conformité France/UE avec validation complète
- ✅ Calculs précis avec wrapper
Money(decimal.js) - ✅ Avoirs (credit notes) avec génération PDF
- ✅ Paiements unifiés (Stripe/PayPal/Manual) avec réconciliation automatique
- ✅ Export comptable CSV avec mapping personnalisable
- ✅ Audit trail complet de tous les événements
- ✅ Endpoints admin (régénérer PDF, vérifier hash)
- ✅ Préparation E-invoicing (structure prête)
- ✅ Tests complets (12 unitaires + 2 intégration)
- ✅ Dernière mise à jour : Correction complète des mocks Kysely dans credit-notes.service.spec.ts (7/7 tests passent, tous les mocks alignés avec l'exécution réelle)
- ✅ Statistiques : 425 tests passent, 1 test ignoré (test complexe de réconciliation)
- Documentation :
docs/BILLING_*.md(5 documents) - Référence : BILLING.md
-
Refactoring InvoiceFormPage.tsx - 100% complété (2025-12-19)
-
Refactoring AdminPanelPage.tsx - 100% complété (2025-12-19)
- ✅ Réduction de 1091 → 101 lignes (-91%)
- ✅ Extraction de composants :
UsersTab,AccessTab,ServerTab - ✅ Création de hooks :
useUsersTab,useAccessTab,useServerTab - ✅ Architecture modulaire et maintenable
- ✅ Pas d'erreurs TypeScript ou lint
- Fichiers créés :
frontend/src/pages/admin/AdminPanelPage/components/UsersTab.tsxfrontend/src/pages/admin/AdminPanelPage/components/AccessTab.tsxfrontend/src/pages/admin/AdminPanelPage/components/ServerTab.tsxfrontend/src/pages/admin/AdminPanelPage/hooks/useUsersTab.tsfrontend/src/pages/admin/AdminPanelPage/hooks/useAccessTab.tsfrontend/src/pages/admin/AdminPanelPage/hooks/useServerTab.ts
- Documentation :
frontend/src/pages/admin/AdminPanelPage/REFACTORING_COMPLETE.md - Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
Refactoring SessionViewPage.tsx - 100% complété (2025-12-19)
- ✅ Réduction de 1083 → 210 lignes (-81%)
- ✅ Extraction de composants :
SessionHeader,SessionInfoSidebar - ✅ Création de hooks :
useSessionViewPage,useSessionEvents,useSessionFiles - ✅ Architecture modulaire et maintenable
- ✅ Pas d'erreurs TypeScript ou lint
- Fichiers créés :
frontend/src/pages/sessions/SessionViewPage/components/SessionHeader.tsxfrontend/src/pages/sessions/SessionViewPage/components/SessionInfoSidebar.tsxfrontend/src/pages/sessions/SessionViewPage/hooks/useSessionViewPage.tsfrontend/src/pages/sessions/SessionViewPage/hooks/useSessionEvents.tsfrontend/src/pages/sessions/SessionViewPage/hooks/useSessionFiles.ts
- Documentation :
frontend/src/pages/sessions/SessionViewPage/REFACTORING_COMPLETE.md - Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
Refactoring SessionFormPage.tsx - 100% complété (2025-12-19)
- ✅ Réduction de 1068 → 235 lignes (-78%)
- ✅ Extraction de composants :
SessionDetailsForm - ✅ Création de hooks :
useSessionForm - ✅ Création de constants :
SESSION_STATUS_VALUES - ✅ Architecture modulaire et maintenable
- ✅ Pas d'erreurs TypeScript ou lint
- Fichiers créés :
frontend/src/pages/sessions/SessionFormPage/components/SessionDetailsForm.tsxfrontend/src/pages/sessions/SessionFormPage/hooks/useSessionForm.tsfrontend/src/pages/sessions/SessionFormPage/constants.ts
- Documentation :
frontend/src/pages/sessions/SessionFormPage/REFACTORING_COMPLETE.md - Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
Refactoring QuoteFormPage.tsx - 100% complété (2025-12-19)
- ✅ Réduction de 992 → 280 lignes (-72%)
- ✅ Extraction de composants :
QuoteDetailsForm - ✅ Création de hooks :
useQuoteForm - ✅ Architecture modulaire et maintenable
- ✅ Pas d'erreurs TypeScript ou lint
- Fichiers créés :
frontend/src/pages/quotes/QuoteFormPage/components/QuoteDetailsForm.tsxfrontend/src/pages/quotes/QuoteFormPage/hooks/useQuoteForm.ts
- Documentation :
frontend/src/pages/quotes/QuoteFormPage/REFACTORING_COMPLETE.md - Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
Refactoring SubscriptionPlansPage.tsx - 100% complété (2025-12-19)
- ✅ Réduction de 951 → 175 lignes (-82%)
- ✅ Extraction de composants :
AdminInfoCard,CurrentSubscriptionCard,PlanCard,CreateSubscriptionDialog,CancelSubscriptionDialog - ✅ Création de hooks :
useSubscriptionPlans - ✅ Création de helpers :
parsePrice,isValidPrice - ✅ Architecture modulaire et maintenable
- ✅ Pas d'erreurs TypeScript ou lint
- Fichiers créés :
frontend/src/pages/subscription/SubscriptionPlansPage/components/AdminInfoCard.tsxfrontend/src/pages/subscription/SubscriptionPlansPage/components/CurrentSubscriptionCard.tsxfrontend/src/pages/subscription/SubscriptionPlansPage/components/PlanCard.tsxfrontend/src/pages/subscription/SubscriptionPlansPage/components/CreateSubscriptionDialog.tsxfrontend/src/pages/subscription/SubscriptionPlansPage/components/CancelSubscriptionDialog.tsxfrontend/src/pages/subscription/SubscriptionPlansPage/hooks/useSubscriptionPlans.tsfrontend/src/pages/subscription/SubscriptionPlansPage/helpers.ts
- Documentation :
frontend/src/pages/subscription/SubscriptionPlansPage/REFACTORING_COMPLETE.md - Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
Refactoring GdprPortalPage.tsx - 100% complété (2025-12-19)
- ✅ Réduction de 920 → 120 lignes (-87%)
- ✅ Extraction de composants :
ConsentsTab,RightsTab,RequestsTab,LegalTab - ✅ Création de hooks :
useGdprPortal - ✅ Création de constants :
getConsentTypes,getRequestTypes,getStatusLabels - ✅ Architecture modulaire et maintenable
- ✅ Pas d'erreurs TypeScript ou lint
- Fichiers créés :
frontend/src/pages/gdpr/GdprPortalPage/components/ConsentsTab.tsxfrontend/src/pages/gdpr/GdprPortalPage/components/RightsTab.tsxfrontend/src/pages/gdpr/GdprPortalPage/components/RequestsTab.tsxfrontend/src/pages/gdpr/GdprPortalPage/components/LegalTab.tsxfrontend/src/pages/gdpr/GdprPortalPage/hooks/useGdprPortal.tsfrontend/src/pages/gdpr/GdprPortalPage/constants.ts
- Documentation :
frontend/src/pages/gdpr/GdprPortalPage/REFACTORING_COMPLETE.md - Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
Refactoring DashboardPage.tsx - 100% complété (2025-12-19)
-
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 - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Progression & Engagement"
-
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 : Invitation par email avec token (lien) et code (6 caractères)
- ✅ Acceptation d'invitations : Via token ou code lors de l'inscription
- ✅ Gestion du solde : Suivi des invitations gagnées, utilisées et disponibles
- ✅ Système d'amis : Demandes mutuelles, acceptation, rejet, suppression
- ✅ Amitié automatique : Création automatique d'amitié mutuelle lors de l'acceptation d'invitation
- ✅ Récompenses référent : XP (50), coins (25), invitations supplémentaires (1) lors de l'inscription d'un invité
- ✅ Intégration organisations : Limitation de l'ajout aux organisations aux amis uniquement
- ✅ Visibilité utilisateur : Paramètre
is_visibledansuser_metadatapour contrôler la visibilité
- ✅ 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 - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Collaboration & Partage"
- ✅ Backend :
-
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 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 :
useOrganizations,useOrganization,useOrganizationMembers,useOrganizationResources, et toutes les mutations - ✅ Pages complètes : Liste, création, édition, vue détaillée avec onglets (Overview, Members, Resources)
- ✅ Composants :
CreateOrganizationDialog,MembersTab,ResourcesTabavec gestion complète des membres et ressources - ✅ Routes intégrées :
/organizations,/organizations/new,/organizations/$id,/organizations/$id/edit - ✅ Traductions complètes : Toutes les traductions i18n pour les organisations
- ✅ Formulaires : Utilisation de
react-hook-formavec validation Zod - ✅ Optimistic updates : Mises à jour optimistes et invalidation du cache React Query
- ✅ Hooks React Query complets :
- Documentation :
backend/src/organizations/README.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Collaboration & Partage"
- ✅ Backend :
-
Navigation breadcrumb améliorée - 100% complété (2026-01-27)
- ✅ Composant
Breadcrumbréutilisable avec support mobile et desktop - ✅ Navigation contextuelle pour quotes et invoices avec liens vers sessions/contacts parents
- ✅ Intégration dans le header avec affichage adaptatif (dropdown mobile, navigation desktop)
- ✅ Support des icônes et traductions i18n
- ✅ Gestion des paramètres de recherche pour préserver le contexte de navigation
- ✅ Composant
-
Liens portail client pour documents - 100% complété (2026-01-27)
- ✅ Génération de liens portail client pour contracts, invoices et quotes
- ✅ Partage sécurisé via tokens d'accès client
- ✅ Interface utilisateur pour copier et partager les liens
- ✅ Intégration dans les pages de détail des documents
-
Génération PDF directe - 100% complété (2026-01-27)
- ✅ Génération PDF directe pour invoices et quotes sans passer par le système d'export
- ✅ Endpoints dédiés avec URLs signées temporaires
- ✅ Amélioration des performances et de l'expérience utilisateur
- ✅ Support du téléchargement direct depuis le portail client
-
Améliorations système d'export - 100% complété (2026-01-27)
- ✅ Amélioration du styling des exports (PDF, Word, Excel, CSV)
- ✅ Gestion améliorée des statuts d'export avec feedback utilisateur
- ✅ Interface utilisateur améliorée pour la sélection de formats
- ✅ Support des exports planifiés avec templates personnalisables
-
Synchronisation migrations depuis Liquibase - 100% complété (2026-01-27)
- ✅ Endpoint admin
/migrations/sync-from-liquibasepour synchroniser les logs de migration - ✅ Synchronisation automatique depuis la table
databasechangelogde Liquibase - ✅ Détection et import des migrations exécutées directement avec Liquibase
- ✅ Interface admin avec bouton de synchronisation manuelle
- ✅ Prévention des doublons lors de la synchronisation
- Documentation :
backend/src/migrations/README.md(à mettre à jour)
- ✅ Endpoint admin
-
Réinitialisation de mot de passe - 100% complété (2026-01-27)
- ✅ Système complet de réinitialisation de mot de passe avec tokens sécurisés
- ✅ Génération de tokens cryptographiquement sécurisés (32 bytes)
- ✅ Chiffrement AES-256-GCM des tokens avant stockage
- ✅ Hash SHA-256 pour recherche rapide O(1)
- ✅ Expiration des tokens après 60 minutes
- ✅ Utilisation unique des tokens avec opérations atomiques
- ✅ Envoi d'emails avec liens de réinitialisation
- ✅ Interface frontend complète avec validation
- ✅ Support Google OAuth avec codes d'invitation lors de l'inscription
- Documentation :
backend/src/password-reset/README.md,backend/src/auth/README.md
-
Améliorations landing page - 100% complété (2026-01-27)
-
✅ Sections animées avec effets de transition fluides
-
✅ Background avec particules animées pour un effet visuel moderne
-
✅ Amélioration de l'expérience utilisateur et de l'engagement
-
✅ Optimisation des performances pour les animations
-
✅ Réduction de 895 → 85 lignes (-90%)
-
✅ Extraction de composants :
QuickActionsCard,RevenueSection,DuplicatesSection,ContactsSection,SessionsSection,DocumentsSection -
✅ Création de hooks :
useDashboard -
✅ Architecture modulaire et maintenable
-
✅ Pas d'erreurs TypeScript ou lint
-
Fichiers créés :
frontend/src/pages/dashboard/DashboardPage/components/QuickActionsCard.tsxfrontend/src/pages/dashboard/DashboardPage/components/RevenueSection.tsxfrontend/src/pages/dashboard/DashboardPage/components/DuplicatesSection.tsxfrontend/src/pages/dashboard/DashboardPage/components/ContactsSection.tsxfrontend/src/pages/dashboard/DashboardPage/components/SessionsSection.tsxfrontend/src/pages/dashboard/DashboardPage/components/DocumentsSection.tsxfrontend/src/pages/dashboard/DashboardPage/hooks/useDashboard.ts
-
Documentation :
frontend/src/pages/dashboard/DashboardPage/REFACTORING_COMPLETE.md -
Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
-
Surveillance d'inactivité des formulaires publics - 100% complété (2025-12-20)
-
✅ Backend : migration
0118(champsmonitor_inactivity,inactivity_threshold_days,last_submission_at,last_inactivity_alert_sent_at), nouveaux servicesLeadFormsMonitoringServiceetLeadFormsSchedulerpour envoyer les alertes quotidiennement en respectant une fenêtre de 24h. -
✅ API : DTO (
CreateLeadFormDto,UpdateLeadFormDto) enrichis,LeadFormSubmissionsServiceréinitialise les compteurs à chaque soumission et endpointPOST /lead-forms/{id}/acknowledge-inactivitypour accuser réception. -
✅ Frontend : configuration dans
LeadFormEditPage, hookuseDashboardexposeinactiveForms/handleAcknowledgeInactivity, composantRequestsSectionaffiche les alertes avec CTA etuseLeadFormsapporte la mutationuseAcknowledgeLeadFormInactivity. -
✅ Documentation : PLAN_AMELIORATIONS_CRM.md mis à jour avec la description détaillée et les suivis recommandés.
-
✅ Réduction de 1120 → 175 lignes (-84%)
-
✅ Extraction de composants :
InvoiceDetailsForm,InvoiceItemsForm,InvoiceHeaderDates,InvoiceCompanyInfo,InvoiceContactInfo -
✅ Création de hooks :
useInvoiceForm,useInvoiceContactSelection,useInvoiceSessionSelection -
✅ Extraction de types, helpers et constantes
-
✅ Architecture modulaire et maintenable
-
✅ Pas d'erreurs TypeScript ou lint
-
Fichiers créés :
frontend/src/pages/invoices/InvoiceFormPage/components/InvoiceDetailsForm.tsxfrontend/src/pages/invoices/InvoiceFormPage/components/InvoiceItemsForm.tsxfrontend/src/pages/invoices/InvoiceFormPage/components/InvoiceHeaderDates.tsxfrontend/src/pages/invoices/InvoiceFormPage/components/InvoiceCompanyInfo.tsxfrontend/src/pages/invoices/InvoiceFormPage/components/InvoiceContactInfo.tsxfrontend/src/pages/invoices/InvoiceFormPage/hooks/useInvoiceForm.tsfrontend/src/pages/invoices/InvoiceFormPage/hooks/useInvoiceContactSelection.tsfrontend/src/pages/invoices/InvoiceFormPage/hooks/useInvoiceSessionSelection.tsfrontend/src/pages/invoices/InvoiceFormPage/types.tsfrontend/src/pages/invoices/InvoiceFormPage/helpers.tsfrontend/src/pages/invoices/InvoiceFormPage/constants.ts
-
Documentation :
frontend/src/pages/invoices/InvoiceFormPage/REFACTORING_COMPLETE.md -
Référence : FRONTEND_IMPROVEMENT_PLAN.md, FRONTEND_NEXT_STEPS.md
-
- ✅ Intégration dans
MobileSidebar
-
Système de queue pour jobs lourds - 100% complété
- ✅ Module
QueueModuleavec configuration BullMQ et Redis - ✅ 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 (non-bloquant)
- ✅ Migration du
ExportControllervers la queue - ✅ Intégration WebSocket pour mises à jour de statut en temps réel
- ✅ Endpoint
/export/status/:jobIdpour vérifier le statut des jobs - ✅ Retry automatique avec backoff exponentiel
- ✅ Documentation complète
- Documentation :
docs/QUEUE_SYSTEM.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Infrastructure & Robustesse"
- ✅ Module
-
Gestion centralisée des types via OpenAPI - 100% complété
- ✅ Audit complet des types utilisés dans frontend et backend
- ✅ Migration de tous les types partagés vers OpenAPI
-
Refactoring des services volumineux (Phase 6.5) - 100% complété
- ✅
duplicates.service.ts: 858 → 157 lignes (-82%) - 4 services créés - ✅
storage.service.ts: 750 → 160 lignes (-79%) - 5 services créés - ✅
pdf.service.ts: 683 → 84 lignes (-88%) - 4 services créés - ✅
contacts.service.ts: 677 → 62 lignes (-91%) - 3 services créés - ✅ Réduction globale : 2968 → 463 lignes (-84%)
- ✅ Lint et type-check passent sans erreurs
- ✅ Principes architecturaux respectés (SRP, Core Modules)
- ✅ 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
- ✅ Vérification que tous les types OpenAPI sont correctement exportés
- ✅ Documentation complète des règles de gestion des types
- ✅ Correction des erreurs de validation OpenAPI
- Documentation :
docs/AGENTS_OPENAPI.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Tests & Qualité"
- ✅
-
Refactoring des services volumineux (Phase 6.6 - Priorité Haute) - 100% complété
- ✅ Refactoring de tous les fichiers de priorité haute (> 600 lignes)
- ✅ 8 fichiers refactorisés avec réduction moyenne de -82.8%
- Refonte complète du chat agent - 100% complété (Décembre 2024)
- ✅ Architecture modulaire avec hooks spécialisés (
useConversationState,useMessageState) - ✅ Gestion optimiste des conversations (mise à jour immédiate de la liste)
- ✅ Correction du problème de suppression (plus de rechargement automatique)
- ✅ Améliorations visuelles (animations subtiles, transitions fluides)
- ✅ Séparation claire des responsabilités (conversations vs messages)
- ✅ Gestion propre du cache React Query
- Documentation :
docs/REFONTE_CHAT_AGENT.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Architecture & Qualité"
- ✅ sessions.service.ts : 832 → 143 lignes (-83%)
- ✅ user-session-types.service.ts : 651 → 121 lignes (-81%)
- ✅ user-payment-plans.service.ts : 651 → 110 lignes (-83%)
- ✅ session-checklists.service.ts : 646 → 206 lignes (-68%)
- ✅ ai-search.service.ts : 637 → 144 lignes (-77%)
- ✅ backup.service.ts : 621 → 73 lignes (-88%)
- ✅ search.service.ts : 620 → 42 lignes (-93%)
- ✅ scheduled-emails.service.ts : 616 → 65 lignes (-89%)
- Résultats globaux Phase 6.6 : 5,274 → 904 lignes (-82.8% de réduction)
- ✅ Tous les fichiers refactorisés < 400 lignes (objectif atteint)
- ✅ Services spécialisés créés pour chaque responsabilité (SRP)
- ✅ Architecture Clean respectée avec modules Core
- ✅ Tous les tests passent (lint + type-check)
- Documentation :
docs/archive/backend-refactoring-archive.md,docs/archive/refactoring-architecture-complete.md
- Refactoring des services volumineux (Phase 6.7 - Priorité Moyenne) - 100% complété
- ✅ Refactoring de tous les fichiers de priorité moyenne (500-600 lignes)
- ✅ 10 fichiers refactorisés avec réduction moyenne de -83.3%
- ✅ user-rates.service.ts : 595 → 98 lignes (-84%)
- ✅ workflows-user.service.ts : 594 → 79 lignes (-87%)
- ✅ session-recurrence.service.ts : 593 → 106 lignes (-82%)
- ✅ email.service.ts : 545 → 91 lignes (-83%)
- ✅ google-calendar-events-sessions.service.ts : 541 → 148 lignes (-73%)
- ✅ notifications.service.ts : 526 → 96 lignes (-82%)
- ✅ user-metadata.service.ts : 512 → 43 lignes (-92%)
- ✅ export-excel.service.ts : 505 → 56 lignes (-89%)
- ✅ paypal.service.ts : 502 → 119 lignes (-76%)
- ✅ notion.service.ts : 500 → 67 lignes (-87%)
- Résultats globaux Phase 6.7 : 5,406 → 903 lignes (-83.3% de réduction)
- ✅ 30 services spécialisés créés pour améliorer la maintenabilité
- ✅ Tous les fichiers refactorisés < 400 lignes (objectif atteint)
- ✅ Services spécialisés créés pour chaque responsabilité (SRP)
- ✅ Architecture Clean respectée avec modules Core
- ✅ Tous les tests passent (lint + type-check)
- Documentation :
docs/archive/backend-refactoring-archive.md,docs/archive/refactoring-architecture-complete.md
-
Refactoring des services volumineux (Phase 6.3, 6.4 et 6.5) - 100% complété
- ✅ SessionRoadmapWordService : 887 → 135 lignes (-85%)
- 8 builders spécialisés créés dans
backend/src/sessions/helpers/ - Séparation claire des responsabilités (header, session info, weather, contacts, providers, checklist)
- 8 builders spécialisés créés dans
- ✅ PermissionsService : 812 → 339 lignes (-58%)
- 4 services spécialisés créés : Subscription, Overrides, Plans, PlanData
- Structure Core Module vérifiée, pas de dépendances circulaires
- ✅ WorkflowTasksService : 833 → 110 lignes (-87%)
- 4 services spécialisés créés : Helpers, Creation, Execution, Query
- Séparation claire entre création, exécution et requêtes
- ✅ WorkflowsDefaultService : 883 → 124 lignes (-86%)
- 4 services spécialisés créés : CRUD, Phases, Tasks, Reset
- Architecture modulaire pour la gestion des workflows par défaut
- ✅ DuplicatesService : 858 → 157 lignes (-82%)
- 4 services spécialisés créés : Helpers, CRUD, Registration, Actions
- Séparation claire entre CRUD, inscriptions et actions métier
- ✅ StorageService : 750 → 160 lignes (-79%)
- 5 services spécialisés créés : Helpers, Config, URL, Upload, FileManagement, Image
- Architecture modulaire pour la gestion du stockage R2/S3
- ✅ PdfService : 683 → 84 lignes (-88%)
- 4 services spécialisés créés : Helpers, TableRendering, Rendering, Generation
- Séparation claire entre génération, rendu et upload
- ✅ ContactsService : 677 → 62 lignes (-91%)
- 3 services spécialisés créés : Sessions, CRUD, Timeline
- Séparation claire entre CRUD, associations et timeline
- Résultats globaux Phase 6.3 et 6.4 : 3415 → 708 lignes (-79% de réduction)
- Résultats globaux Phase 6.5 : 2968 → 463 lignes (-84% de réduction)
- Total nouveaux services spécialisés créés : 32 services pour améliorer la maintenabilité
- ✅ Tous les fichiers refactorés < 400 lignes (objectif atteint)
- ✅ Lint et type-check passent sans erreurs
- ✅ Pas de dépendances circulaires, Core Modules correctement configurés
- Documentation :
docs/archive/refactoring-architecture-complete.md - Référence : PLAN_AMELIORATIONS_CRM.md - Section "Architecture & Qualité"
- ✅ SessionRoadmapWordService : 887 → 135 lignes (-85%)
-
Refonte complète du chat agent - 100% complété (Décembre 2024)
-
✅ Architecture modulaire avec hooks spécialisés (
useConversationState,useMessageState) -
✅ Gestion optimiste des conversations (mise à jour immédiate de la liste)
-
✅ Correction du problème de suppression (plus de rechargement automatique)
-
✅ Améliorations visuelles (animations subtiles, transitions fluides)
-
✅ Séparation claire des responsabilités (conversations vs messages)
-
✅ Gestion propre du cache React Query
-
Documentation :
docs/REFONTE_CHAT_AGENT.md -
Référence : PLAN_AMELIORATIONS_CRM.md - Section "Architecture & Qualité"
-
✅ Renommage menu "Administration" → "Système" pour éviter confusion
-
Documentation :
docs/MOBILE_NAVIGATION.md -
Référence : PLAN_AMELIORATIONS_CRM.md - Section "Mobile & PWA"
🚀 Priorité Haute (Impact élevé, Effort moyen)
Note :
- ✅ Refactoring backend priorité haute et moyenne terminé (Phase 6.6 et 6.7)
- 📋 Plan d'amélioration frontend : Voir
docs/FRONTEND_IMPROVEMENT_PLAN.mdpour le plan complet- 🎯 Prochaines étapes frontend : Voir
docs/FRONTEND_NEXT_STEPS.mdpour la vue synthétique- 🧩 Plan CRM relation clientèle : Voir
docs/PLAN_AMELIORATIONS_CRM.md, section "Plan d'amélioration relation clientèle (2026-03)"
0.a Relation clientèle omnicanale (CRM) 🚀
- Impact : Élevé (conversion, réactivité commerciale, qualité du suivi client)
- Effort : Moyen-Élevé
- Description : Structurer un socle CRM orienté exécution avec un tableau de suivi unique, des flux de création/édition en modale, et un suivi unifié des demandes email entrantes via Gmail.
- Statut : 🚀 Priorité active (plan validé, implémentation à lancer)
- Périmètre validé :
- Tableau de suivi clientèle : pipeline opérationnel par statuts avec actions rapides (assignation, relance, conversion en session/devis).
- Création/édition en modales : standardiser les CRUD principaux en overlays pour éviter les ruptures de contexte.
- Plugin Gmail : capter les demandes entrantes, associer contact/session, et suivre le statut de traitement.
- Découpage recommandé :
- Phase 1 : Tableau de suivi clientèle + statuts + vues sauvegardées.
- Phase 2 : Migration progressive des écrans création/édition vers modales standard.
- Phase 3 : Intégration Gmail (OAuth, sync, déduplication, liaison CRM).
- Référence détaillée :
docs/PLAN_AMELIORATIONS_CRM.md(section dédiée 2026-03)
0.b Visual Day Planner mariage 🚀
- Impact : Élevé (coordination client/prestataire, qualité d’exécution jour J, valeur premium perçue)
- Effort : Moyen-Élevé
- Description : Ajouter un planificateur visuel de journée mariage basé sur une timeline verticale avec drag/drop et publication client.
- Décision technique :
FullCalendar React(@fullcalendar/react,@fullcalendar/core,@fullcalendar/timegrid,@fullcalendar/interaction). - Statut : 🚧 En implémentation (backend day planner + intégration frontend scheduler en cours)
- Périmètre MVP :
- template journée mariage pré-rempli,
- édition interne blocs horaires (CRUD + drag/drop/resize),
- publication client (scope publié),
- propositions client soumises puis validées/refusées côté photographe.
- Référence détaillée :
docs/PLAN_AMELIORATIONS_CRM.md(section "Visual Day Planner mariage")
0. Proposal v3 - Tests + QA + polish final 🚧
- Impact : Élevé (conversion devis + expérience client premium)
- Effort : Moyen-Élevé
- Description : Finaliser la phase v3 (tests backend/E2E, QA UX premium, derniers ajustements) après le builder dédié, l’email proposal et la route publique premium
- Statut : 🚧 Fonctionnel en production candidate (builder + email + public premium) / QA + tests v3 à renforcer
- Complété :
- ✅ Add-ons
user_ratesfiltrés parSessionType - ✅ Endpoints proposals auth + publics par token dédié
- ✅ Patch de devis via
quote_itemsADDONtraçables +quote_revisions - ✅ OpenAPI schemas/paths + types générés backend/frontend
- ✅ Builder dédié
/quotes/:quoteId/proposal+ slug + cover + envoi email (new-proposal) - ✅ Route publique premium
/proposal/:token|slug+ invitation portail en fin de flow - ✅ Migration/suppression legacy
/client
- ✅ Add-ons
- Complété (v3) :
- ✅ Tests backend read-only (putPresentation, putUpsells, createLink quand devis accepté)
- ✅ QA UX premium (loading/error/empty, responsive, alignements, wording)
- ✅ Tests backend
preview-email/send-email(déjà couverts dans proposals-email.service.spec + controller)
- Restant (v3) :
- E2E optionnel : builder dédié + envoi email Proposal (full-flow existant avec creds)
- Documentation :
docs/PROPOSAL_V2_UPSELLS_IMPLEMENTATION_PLAN.md
0. Refactoring Frontend - Fichiers Critiques ✅ TERMINÉ
- Impact : Essentiel pour la maintenabilité et la qualité du code
- Effort : Moyen-Élevé
- Description : Refactorer les fichiers frontend volumineux (> 400 lignes) pour améliorer la maintenabilité
- Statut : ✅ Terminé - Tous les fichiers ont été refactorés
- Objectif : Réduire tous les fichiers sous 400 lignes ✅ Atteint
- Complété :
- ✅
router.tsx- 1119 → 227 lignes (-80%) - Routes extraites dansroutes/ - ✅
InvoiceFormPage.tsx- 1120 → 175 lignes (-84%) - ✅
AdminPanelPage.tsx- 1091 → 101 lignes (-91%) - ✅
SessionViewPage.tsx- 1083 → 210 lignes (-81%) - ✅
SessionFormPage.tsx- 1068 → 235 lignes (-78%) - ✅
QuoteFormPage.tsx- 992 → 280 lignes (-72%)
- ✅
- Complété :
- ✅
QuotesInvoicesTab.tsx- 1300 → 252 lignes (-81%) - Hook principal + 6 composants de section - ✅
LeadFormEditPage.tsx- 894 → 158 lignes (-82%) - Hook principal + 3 composants d'onglets - ✅
StripeSubscriptionTab.tsx- 890 → 113 lignes (-87%) - Hook principal + 3 composants - ✅
UserRateFormPage.tsx- 882 → 150 lignes (-83%) - Hook principal + 6 composants de sections
- ✅
- Fichiers prioritaires restants :
- ✅
ContactFormPage.tsx- 834 → 236 lignes (-72%) - Complété - ✅
WeekTimelineView.tsx- 830 → 104 lignes (-87%) - Complété - ✅
ProfilePage.tsx- 815 → 126 lignes (-85%) - Complété - ✅
LeadFormStylingEditor.tsx- 802 → 46 lignes (-94%) - Complété - ✅
DayTimelineView.tsx- 771 → 87 lignes (-89%) - Complété - ✅
QuotesListPage.tsx- 786 → 217 lignes (-72%) - Complété - ✅
UserViewPage.tsx- 747 → 201 lignes (-73%) - Complété - ✅
AdminDefaultSessionTypesPage.tsx- 747 → 170 lignes (-77%) - Complété - ✅
InfoTab.tsx(SessionViewPage) - 744 → 108 lignes (-85%) - Complété - ✅
DefaultSessionTypesTab.tsx- 743 → 166 lignes (-78%) - Complété
- ✅