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-09-05 — Vague C cleanup (voir APP_CLEANUP_MAP.md) :
- Produit commercial Proposal DELETED (FE/BE + Liquibase
0277) - Day-planner client proposals KEEP ; GC R2
proposal-covers//proposal-defaults/optionnel - Progression / recommendations deleted (Vague A)
- Billing = export CSV (Pennylane in-app retiré)
- SMS deferred (UI hidden ; provider backlog)
- Friends KEEP + port mobile backlog (
aaperture-mobile//mobile/network) - Gmail plugin FREEZE — scope à part / plus tard (ne pas ouvrir dans les MRs cleanup ; plan dédié)
Nouveau chantier lancé
- Galleries library / session decoupling : démarrage du refactor pour sortir les galeries du simple contexte session, ajouter une vraie page owner
/galleries, permettre des galeries non assignées, et réduire l’onglet session à une surface contextuelle. Source active : GALLERIES_LIBRARY_PLAN.md. - Gallery sharing / recipient delivery : préparation du chantier pour partager des galeries à des destinataires nommés, ajouter un vrai panier de téléchargement côté galerie, et notifier le photographe lors des téléchargements. Source active : GALLERIES_SHARING_PLAN.md.
🎯 Prochaines étapes recommandées
| Priorité | Sujet | Où |
|---|---|---|
| Haute | Billing / export comptable CSV – export-first (Pennylane in-app done/deleted) | ACCOUNTING_EXPORT_GUIDE.md |
| ⏸️ Pause | Storage abstraction + migration Scaleway – abstraction livrée, migration en pause (on reste sur R2) | § Priorité Haute > Storage abstraction / Scaleway |
| Haute | Relances automatiques – devis/factures/sessions réellement fiables via workflows | § Prochain focus recommandé |
| Moyenne | Friends → mobile – port UX réseau vers aaperture-mobile (/mobile/network*) | INVITATIONS_FRIENDS_IMPROVEMENTS.md |
| Moyenne | Portail client V2 – documents enrichis | § Priorité Moyenne > Portail client V2 |
| Moyenne | Analytics business – conversion, revenus, lecture business | § Priorité Moyenne > Analytics business |
| Moyenne | Iris proactive V1 – signaux contextualisés (pas le bloc Cmd+K recommendations, deleted) | § Priorité Moyenne > Iris proactive V1 |
| Basse | SMS provider – deferred ; UI hidden | backlog |
| — | Gmail plugin | FREEZE — scope à part / plus tard |
| — | Proposal product | DELETED (FE/BE + DB 0277) — day-planner client proposals KEEP; R2 GC later — APP_CLEANUP_MAP.md Vague C |
🚀 Priorité plateforme immédiate
Le socle staging + SOPS + promotion prod est maintenant validé.
Avant de relancer un gros lot produit, les priorités opérationnelles sont :
- Garder staging comme vraie porte de validation
- smoke test sur tout lot significatif
- tenant / booking / portal / lead forms / OAuth / storage provider / Sentry / backups
- Réduire la dérive entre local, staging et production
- garder les fichiers
infra/env/*.env.enccomme source de vérité - éviter le retour de variables runtime app dans GitLab
- garder les fichiers
- Optimisation pipeline / build
- mesurer les temps réels
- optimiser ensuite les builds Docker / cache uniquement si nécessaire
- Perception publique
- derniers loaders/flickers publics hors booking
- QA visuelle emails transactionnels sur vrais envois
✅ Focus soldés récemment
- Proposal product (commercial
/proposal+ builder + upsells) : DELETED (FE/BE + Liquibase0277) — soldé / retiré du produit ; day-planner client proposals KEEP ; writes R2proposal-*denied (GC optionnel). VoirAPP_CLEANUP_MAP.mdVague C. - Aaperture Companion desktop auth handoff: public client contract with Authorization Code + PKCE, strict loopback redirect validation, Redis-backed short-lived requests and one-time codes, token exchange, minimal profile endpoint, OpenAPI generation, and interruption/abuse tests. The web login now preserves the request through email and Google authentication, supports an already authenticated browser, approves the request and returns to the desktop loopback callback. The remaining integration step is the Electron-side listener, token exchange and secure storage.
- Galeries / slideshow (socle livraison) : qualité d’export persistée et normalisée pour le rendu MP4 sur la file dédiée
gallery-slideshow, editor timeline aligné avec la persistance (dont durée de cover), pages galerie publique et portail client réutilisant les mêmes primitives de présentation que l’owner ; règles ESLint documentées dansdocs/AGENTS_FRONTEND.mdetdocs/AGENTS_BACKEND.mdpour éviter les régressions CI. - Workspaces & surfaces produit - passe transverse de cohérence : harmonisation large des vues
quote,invoice,contract,organization,user,contact,session, des listes denses, des settings, des écrans admin/system, du calendrier, du portail client, des surfaces publiques et des workspaces secondaires. Le lot sort du focus immédiat sauf régression UI concrète ou écran resté manifestement en dehors du contrat commun. - 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. - Booking public : réduction du range chargé, suppression de la dépendance Google Calendar dans l’availability publique, vue hebdomadaire, empty states dédiés et confirmation réalignée avec la page studio.
- CRM pipeline workspace : route dédiée
/pipeline, vraie page lead/pipeline/$leadId, suppression du fluxdetaillegacy, vues système métier, quick actions, sélection multiple légère, refacto massif frontend et meilleure cohérence visuelle badges/filtres/table. - CRM pipeline - stabilisation de la liste : la liste principale du pipeline a été réalignée sur le shell commun des autres pages (
ListPageContent), avec scroll interne du tableau, tri sur les colonnes principales et bulk actions reconnectées. Le prochain incrément CRM n’est plus un sujet structurel de table, mais la page lead dédiée et les flows métier qu’elle porte. - Assistant CRM / chat workspace :
Irisdevient le nom produit du chat, shell unifié sidebar/window/mobile/fullscreen, contexte unifié, mémoire courte métier, résultats d’action plus prescriptifs, formulaires inline mieux préremplis, et rendu conversationnel largement nettoyé. - Messages / inbox workspace : page messages, liste de conversations, threads, panneau fichiers et création de conversation harmonisés pour former un vrai workspace quotidien cohérent au lieu d’un assemblage de sous-écrans hétérogènes.
- Modales create/edit (lot formellement refermé) : pattern
FormEntityModalétendu surquotes,invoices,contracts,organizations,user session types,user providers,rates,payment plansettask types, avec fermeture locale, formulaires compatibles modal-first, duplication locale quand utile (rates,payment plans) et rendu modal harmonisé sans cadres internes parasites. Le lot sort du focus prioritaire et ne revient plus qu’au fil des écrans secondaires restants. - Fiches contact / session (polish UX) : harmonisation des headers de tabs et sous-sections, overview transformés en hubs plus utiles, timeline et blocs financiers plus lisibles, sidebar session densifiée, bloc équipe / documents améliorés, sticky tabs mobile et hiérarchie visuelle mieux alignée entre
contactetsession. Le sujet sort du focus immédiat sauf régression UI concrète.
🎯 Prochain focus recommandé
Le réalignement 2026 change l’ordre des chantiers actifs. Le meilleur enchaînement recommandé devient :
Billing / export CSV: already export-first post Vague A; deepen export UX / fiscal packaging as needed (ACCOUNTING_EXPORT_GUIDE.md).Storage abstraction / Scaleway: ⏸️ en pause (2026-10-23) : on reste sur R2 ; abstractionStorageProviderlivrée.Relances automatiques: fiabiliser les relances devis/factures et rappels session via workflows + BullMQ.Friends → aaperture-mobile: port UX via/mobile/network*(KEEP web).
Soldé / deleted : produit commercial Proposal (
/proposal, builder, upsell dynamique dédié, ADDON quote lines) — retiré FE/BE/DB (0277) ; ne plus prioriser. Day-planner proposals KEEP.
🧹 Prochain nettoyage recommandé
- Vague D (orphan schema) : done — Liquibase
0278 - Suite : Galleries F002 (orchestration slideshow), R2 GC Proposal —
APP_CLEANUP_MAP.md
Assistant CRM / chat workspace
Le chat Iris n’est plus à traiter comme un simple panneau utilitaire. Il devient un espace de travail CRM transversal.
Objectifs du lot:
- unifier les variantes
sidebar,window,mobileetfullscreenautour d’un shell commun, - rendre la conversation lisible comme un vrai chat produit,
- traiter les pièces jointes, formulaires inline et résultats d’actions comme des objets conversationnels cohérents,
- clarifier la hiérarchie
historique / contexte / action, - fiabiliser l’upload de fichiers sans dégrader le flux principal par URL signée.
Prochains incréments recommandés:
- finir les scénarios E2E critiques (
message + pièce jointe + action, contextes métier, formulaires inline), - consolider les actions métier depuis les résultats assistant vers le pipeline/CRM,
- continuer le durcissement runtime/lint/types sur les derniers flux agent,
- documenter explicitement la stratégie
presigned upload principal + fallback backend de sécurité.
Le booking public sort du focus prioritaire immédiat sauf :
- incident de performance réel
- bug de disponibilité
- régression visible sur les états vides ou la confirmation
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 sont supprimés de
docs/(détail dans git).
- 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 : PLAN_AMELIORATIONS_CRM.md (messagerie / CRM)
- ✅ 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) - 98% complété (2026-03-13)
- ✅ 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)
- ✅ Share & Send finalisé : génération automatique de lien, sauvegarde du slug avant envoi, état du lien clarifié (
active,expired,read-only) et blocage explicite si le lien n’est pas envoyable - 🔎 Reste léger : suivi post-cut, QA opportuniste et E2E complémentaire seulement si besoin
- Documentation : produit DELETED — voir
APP_CLEANUP_MAP.mdVague C (plan Proposal retiré)
- ✅ 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 : PLAN_AMELIORATIONS_CRM.md — améliorations UI/UX (insights)
-
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 : PLAN_AMELIORATIONS_CRM.md — LOT F (insights)
- ✅
-
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 : PLAN_AMELIORATIONS_CRM.md — 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 : PLAN_AMELIORATIONS_CRM.md — 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 : PLAN_AMELIORATIONS_CRM.md — 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 : PLAN_AMELIORATIONS_CRM.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 — DELETED (Vague A, 2026-07)
XP / badges / défis / coinsremoved from app code;progression_*tables → later DB drop wave.- Référence : APP_CLEANUP_MAP.md, DB_CLEANUP_AUDIT.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 : 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 : QUEUE_SYSTEM.md (résumé opérationnel), contrat routage BullMQ :
docs/AGENTS_BACKEND.md§ BullMQ - 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 : BACKEND_STRUCTURE_IMPROVEMENT_PLAN.md, BACKEND.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 : BACKEND_STRUCTURE_IMPROVEMENT_PLAN.md, BACKEND.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 : BACKEND_STRUCTURE_IMPROVEMENT_PLAN.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 : ✅ Stabilisé en production (builder + email + public premium + Share & Send fiabilisé)
- 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) - ✅
Share & Sendfiabilisé : génération automatique de lien, save slug avant envoi, clarification état du lien, blocage explicite si expiré
- Reste léger (v3) :
- suivi post-cut et QA opportuniste sur appareils réels
- E2E complémentaire uniquement si un nouveau parcours critique apparaît
- Documentation : produit DELETED — voir
APP_CLEANUP_MAP.mdVague C (plan Proposal retiré)
0.c Billing externalisé / Pennylane 🚀
- Impact : Très élevé (continuité métier, réduction du risque réglementaire porté en interne, valeur visible portail/documents)
- Effort : Moyen-Élevé
- Description : introduire un
BillingProvideravecPennylaneProvidercomme cible initiale pour créer des factures externes depuis les devis acceptés et refléter les documents fiscaux dans Aaperture. - Statut : 🚀 Priorité active
- Décision produit :
Aaperture = source de vérité métierPennylane = source de vérité fiscale / facturation externe
- Périmètre MVP :
- création facture externe depuis devis accepté,
- récupération PDF,
- affichage app + portail,
- stockage des IDs externes, statuts et métadonnées minimales.
- Référence détaillée :
docs/ACCOUNTING_EXPORT_GUIDE.md(export-first; in-app Pennylane sync removed)
0.d Storage abstraction / Scaleway ⏸️
- Impact : Élevé (souveraineté, maintenabilité infra, réduction du couplage provider)
- Effort : Moyen-Élevé
- Description : introduire
StorageProvider, conserver une compatibilité S3 stricte, déployerScalewayStorageProvideret migrer progressivement l’existant depuis R2. - Statut : ⏸️ en pause (2026-10-23) : on reste sur R2 ; abstraction
StorageProviderlivrée - Périmètre initial :
- nouveaux uploads vers Scaleway,
- dual-read temporaire,
- lazy migration pour l’existant,
- couverture
documents,portal files,galleries,slideshow/video assets.
- Référence détaillée :
docs/PLAN_AMELIORATIONS_CRM.md(section "Storage abstraction / Scaleway")
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é - ✅
DuplicateViewPage.tsx- 741 → 222 lignes (-70%) - Complété - ✅
OnboardingPlanSelection.tsx- 730 → 88 lignes (-88%) - Complété - ✅
ChecklistTab.tsx(SessionViewPage) - 725 → 157 lignes (-78%) - Complété - ✅
EventDialogs.tsx- 720 → 62 lignes (-91%) - Complété - ✅
UserSessionTypeFormPage.tsx- 710 → 123 lignes (-83%) - Complété - ✅
InvoicesListPage.tsx- 663 → 206 lignes (-69%) - Complété - ✅
AdminDefaultPaymentPlansPage.tsx- 632 → 77 lignes (-88%) - Complété - ✅
DefaultPaymentPlansTab.tsx- 630 → 79 lignes (-87%) - Complété - ✅
ContractsListPage.tsx- 623 → 179 lignes (-71%) - Complété - ✅
AnalyticsPage.tsx- 597 → 162 lignes (-73%) - Complété - ✅
ContactsListPage.tsx- 601 → 273 lignes (-55%) - Complété - ✅
AdminDefaultWorkflowFormPage.tsx- 591 → 190 lignes (-68%) - Complété - ✅
AdminSubscriptionPlansPage.tsx- 560 → 92 lignes (-84%) - Complété - ✅
DefaultWorkflowsTab.tsx- 542 → 126 lignes (-77%) - Complété - ✅
AgendaListView.tsx- 531 → 85 lignes (-84%) - Complété - ✅
LeadFormSubmissionsPage.tsx- 520 → 194 lignes (-63%) - Complété - ✅
SettingsTab.tsx(LeadFormEdit) - 514 → 64 lignes (-88%) - Complété
- ✅
- Résultat final :
- ✅ 32 fichiers refactorisés au total
- ✅ ~15,000+ lignes de code réduites
- ✅ Réduction moyenne : ~75% par fichier
- ✅ 0 fichier restant à refactorer
- Documentation :
- 📋 FRONTEND_IMPROVEMENT_PLAN.md - Référence active des règles de refactoring frontend
- 🎯 FRONTEND_NEXT_STEPS.md - Optimisations futures
1. Calendrier visuel amélioré ✅ COMPLÉTÉ
- Impact : Essentiel pour la gestion des sessions
- Effort : Moyen-Élevé
- Description : Améliorer l'interface calendrier pour une meilleure visualisation et gestion des sessions
- Statut : ✅ Complété (2025-01-27)
- Réalisations :
- ✅ Vue timeline pour la semaine avec grille horaire (0h-23h)
- ✅ Vue timeline pour le jour avec grille horaire (0h-23h)
- ✅ Positionnement précis des événements/sessions
- ✅ Affichage des créneaux de disponibilité
- ✅ Navigation et scroll optimisés
- ✅ Visualisation des chevauchements (bordure rouge, icône d'alerte, tooltip)
- ✅ Légende interactive avec icônes et couleurs
- ✅ Filtres visuels (masquer/afficher sessions, événements, disponibilités)
- ✅ Vue agenda/liste chronologique
- ✅ Drag & drop dans toutes les vues (Month, Week, Day) avec zones droppables
- Documentation : CALENDAR_SYNC_ARCHITECTURE.md, APP_OVERVIEW.md
2. Sécurité CASA pour validation Google ✅ COMPLÉTÉ
- Impact : Validation Google requise pour intégration OAuth/Calendar
- Effort : Moyen
- Description : Corrections de sécurité critiques identifiées dans l'évaluation CASA pour passer la validation Google
- Statut : ✅ Complété (2025-01-26)
- Référence : SECURITY_ASSESSMENT_CASA.md
- Score de sécurité : A (95/100) ⬆️
- Améliorations critiques (Phase 1) : ✅ COMPLÉTÉ
- ✅ Supprimer valeur par défaut JWT_SECRET - Validation stricte implémentée
- ✅ Configurer CORS avec whitelist d'origines - Whitelist configurée via
ALLOWED_ORIGINS - ✅ Installer et configurer Helmet - Helmet configuré avec CSP et headers de sécurité
- ✅ Configurer whitelist d'origines pour WebSocket - Whitelist appliquée aux gateways WebSocket
- Améliorations importantes (Phase 2) : ✅ COMPLÉTÉ
- ⚠️ Mettre à jour dépendances vulnérables (glob, js-yaml) - Nécessite breaking changes, à planifier
- ✅ Ajouter rate limiting global par défaut - Rate limit global (100 req/min) via
APP_GUARD - ✅ Implémenter protection CSRF - Guard CSRF avec validation des tokens
- ✅ Validation contenu fichiers (magic bytes) - Validation intégrée dans
StorageController
- Améliorations (Phase 3) : ✅ COMPLÉTÉ
- ✅ Implémenter refresh token - Refresh token JWT (access: 15min, refresh: 30 jours)
- ✅ Système d'alerte pour tentatives suspectes -
SecurityAlertsServiceavec alertes email - ✅ Sanitizer HTML côté serveur -
HtmlSanitizerServiceavec DOMPurify
3. IA Proactive Insights (LOT A - MVP) ✅ 100% COMPLÉTÉ
- Impact : Très élevé - Améliore la productivité en détectant automatiquement les situations nécessitant une action
- Effort : Moyen-Élevé
- Description : Système d'insights proactifs qui détecte automatiquement des situations nécessitant une action (devis en attente, factures en retard, sessions sans préparation, etc.) et les présente à l'utilisateur avec des actions suggérées
- Statut : ✅ 100% complété (2026-01-27) - Toutes les fonctionnalités MVP implémentées et opérationnelles
- Approche MVP : Règles déterministes (pas de LLM au début) pour garantir la fiabilité
- Fonctionnalités :
- ✅ 8 types d'insights : Devis en attente, factures en retard, sessions sans préparation, etc.
- ✅ Génération automatique : Scheduler quotidien + triggers event-driven
- ✅ Notifications : In-app + WebSocket + push
- ✅ Interface dédiée : Insights Center avec filtres et actions
- ✅ Feedback utilisateur : Système de rating pour améliorer la pertinence
- Livrables :
- A1. Modèle & Persistence (tables, migrations, types)
- A2. Génération "Rules First" (8 règles déterministes)
- A3. Job + Queue + Notifications (BullMQ, scheduler, event handlers)
- A4. API + UI (endpoints, hooks, composants)
- Documentation : PLAN_AMELIORATIONS_CRM.md (insights)
- Référence : PLAN_AMELIORATIONS_CRM.md - Section "Insights Proactifs & Intelligence"
- Corrections post-MVP (2026-01-27) : Colonnes SQL corrigées, sérialisation JSONB, navigation/breadcrumb configurés
Prochaines étapes :
- ✅ LOT C : Support Multi-Tenant (Priorité Haute) - ✅ COMPLÉTÉ (2026-01-27)
- ✅ LOT B : LLM-assisted Summarization (Priorité Moyenne) - ✅ COMPLÉTÉ (2026-01-27)
- ✅ LOT D : Personnalisation et Configuration (Priorité Haute) - ✅ COMPLÉTÉ (2026-01-27)
- ✅ Améliorations UI/UX (Priorité Moyenne) - ✅ COMPLÉTÉ (2026-01-28) - Graphiques, calendrier, groupement, actions en lot, filtres sauvegardés, export multi-format, menu "More", settings contextuels
- ✅ LOT F : Nouvelles Règles d'Insights (Priorité Moyenne) - ✅ PARTIELLEMENT COMPLÉTÉ (2026-01-28) - 6 règles sur 8 implémentées + système de règles personnalisées
- LOT E : Analytics et Intelligence (Priorité Basse) - À venir - Dashboard analytics, métriques de résolution, recommandations
- ✅ LOT D : Personnalisation et Configuration (Priorité Moyenne) - ✅ COMPLÉTÉ (2026-01-27) - Configuration des seuils, règles, et emails d'insights (résumés quotidiens/hebdomadaires, configuration par utilisateur/organisation)
- ✅ Améliorations UI/UX (Priorité Moyenne) - ✅ COMPLÉTÉ (2026-01-29) - Graphiques, actions en lot, export, Settings contextuels avec Sidebar (✅ UserViewPage et AdminPanelPage complétés)
- LOT F : Nouvelles Règles (Priorité Moyenne) - Étendre la couverture
- LOT E : Analytics (Priorité Basse) - Dashboard analytics sur les insights