Schémas Explicatifs des Scopes - Aaperture CRM
Ce document présente des schémas détaillés du fonctionnement de chaque scope/module du CRM pour photographes.
📋 Table des Matières
- Sessions & Projets
- Contacts & Clients
- Devis & Factures
- Calendrier & Planification
- Recherche & IA
- Communication & Notifications
- Analytics & Reporting
- Workflows & Automatisation
- Sécurité & Conformité
1. Sessions & Projets
Vue d'ensemble
Le scope Sessions gère l'ensemble du cycle de vie d'un projet photographique, de la création à la livraison.
Architecture du Module
graph TB
subgraph "Frontend - Session Management"
A[SessionListPage] --> B[SessionViewPage]
B --> C[SessionFormPage]
B --> D[ChecklistTab]
B --> E[FilesTab]
B --> F[RoadmapTab]
B --> G[ContactsTab]
end
subgraph "Backend - Sessions Service"
H[SessionsController] --> I[SessionsService]
I --> J[SessionRepository]
I --> K[SessionChecklistsService]
I --> L[SessionPlanningService]
I --> M[GoogleCalendarService]
end
subgraph "Database"
J --> N[(sessions)]
J --> O[(session_contacts)]
J --> P[(session_tags)]
J --> Q[(session_providers)]
K --> R[(session_checklists)]
K --> S[(session_checklist_items)]
end
subgraph "External Services"
M --> T[Google Calendar API]
L --> U[Weather API]
L --> U
end
A --> H
C --> H
B --> H
Flux de Création d'une Session
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant DB as Database
participant GC as Google Calendar
U->>F: Créer nouvelle session
F->>B: POST /sessions
B->>B: Validation (Zod)
B->>B: Vérification disponibilité
B->>DB: Insert session
B->>DB: Insert session_contacts
B->>DB: Insert session_tags
B->>GC: Create calendar event
GC-->>B: Event ID
B->>DB: Update session (calendar_event_id)
B->>B: Générer roadmap (si demandé)
B-->>F: Session créée
F->>F: Notification succès
F->>F: Redirection vers session
Gestion des Sessions Récurrentes
graph LR
A[Session Parent<br/>is_recurring=true] --> B[RecurringSessionExpander]
B --> C[Occurrence 1<br/>parent_session_id]
B --> D[Occurrence 2<br/>parent_session_id]
B --> E[Occurrence N<br/>parent_session_id]
C --> F[Google Calendar<br/>Recurring Event]
D --> F
E --> F
G[Modification Occurrence] --> H{Modifier tout<br/>ou une seule?}
H -->|Une seule| I[Exception Google Calendar]
H -->|Toutes| J[Update Parent Pattern]
J --> B
Checklist de Session
graph TB
A[Session] --> B[ChecklistTab]
B --> C{Template<br/>appliqué?}
C -->|Oui| D[Items du Template]
C -->|Non| E[Items Manuels]
D --> F[Items Groupés par Statut]
E --> F
F --> G[PENDING]
F --> H[IN_PROGRESS]
F --> I[COMPLETED]
F --> J[SKIPPED]
K[Modification Item] --> L{Statut changé?}
L -->|Oui| M[Update DB]
L -->|Non| N[Update Autres Champs]
M --> O[Notification si<br/>échéance proche]
2. Contacts & Clients
Vue d'ensemble
Le scope Contacts gère la base de données clients avec leurs informations, historique et relations.
Architecture du Module
graph TB
subgraph "Frontend - Contact Management"
A[ContactListPage] --> B[ContactViewPage]
B --> C[ContactFormPage]
B --> D[HistoryTab]
B --> E[FilesTab]
B --> F[SessionsTab]
end
subgraph "Backend - Contacts Service"
G[ContactsController] --> H[ContactsService]
H --> I[ContactRepository]
H --> J[ConflictDetectionHelper]
H --> K[EmailTrackingService]
end
subgraph "Database"
I --> L[(contacts)]
I --> M[(contact_files)]
I --> N[(session_contacts)]
K --> O[(email_tracking)]
end
subgraph "AI Services"
J --> P[OpenAI Service<br/>Similarity Check]
end
A --> G
C --> G
B --> G
Flux de Création d'un Contact
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant AI as AI Service
participant DB as Database
U->>F: Créer nouveau contact
F->>B: POST /contacts
B->>B: Validation (Zod)
B->>AI: Détection doublons
AI-->>B: Contacts similaires
alt Doublons détectés
B-->>F: Conflit détecté
F->>U: Afficher doublons
U->>F: Confirmer création
F->>B: POST /contacts (force)
end
B->>DB: Insert contact
B-->>F: Contact créé
F->>F: Notification succès
F->>F: Redirection vers contact
Historique d'Interactions
graph TB
A[Contact] --> B[HistoryTab]
B --> C[Timeline]
C --> D[Emails]
C --> E[Sessions]
C --> F[Notes]
C --> G[Appels]
D --> H[Email Tracking]
H --> I[OPEN]
H --> J[LINK_CLICK]
E --> K[Session Created]
E --> L[Session Updated]
E --> M[Session Completed]
N[Email Envoyé] --> O[EmailTrackingService]
O --> P[(email_tracking)]
P --> H
3. Devis & Factures
Vue d'ensemble
Le scope Quotes & Invoices gère la création, l'envoi et le suivi des devis et factures.
Architecture du Module
graph TB
subgraph "Frontend - Quotes/Invoices"
A[QuotesListPage] --> B[QuoteViewPage]
C[InvoicesListPage] --> D[InvoiceViewPage]
B --> E[PDF Preview]
D --> E
B --> F[Email Dialog]
D --> F
end
subgraph "Backend - Quotes/Invoices Service"
G[QuotesInvoicesController] --> H[QuotesInvoicesService]
H --> I[PDFService]
H --> J[GmailService]
H --> K[ScheduledEmailsService]
H --> L[EmailTrackingService]
end
subgraph "Database"
H --> M[(quotes)]
H --> N[(invoices)]
H --> O[(email_templates)]
K --> P[(scheduled_emails)]
L --> Q[(email_tracking)]
end
subgraph "External Services"
I --> R[Cloudflare R2]
J --> S[Gmail API]
end
A --> G
C --> G
B --> G
D --> G
Flux de Création et Envoi d'un Devis
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant DB as Database
participant PDF as PDF Service
participant R2 as Cloudflare R2
participant Gmail as Gmail API
participant Sched as Scheduled Emails
U->>F: Créer devis
F->>B: POST /quotes
B->>DB: Insert quote
B-->>F: Quote créé
U->>F: Envoyer devis
F->>B: POST /quotes/:id/send-email
B->>PDF: Générer PDF
PDF->>R2: Upload PDF
R2-->>PDF: Signed URL
PDF-->>B: PDF URL
alt Email immédiat
B->>Gmail: Send email with PDF
Gmail-->>B: Email sent
B->>L: Track email
else Email planifié
B->>Sched: Schedule email
Sched->>DB: Insert scheduled_email
end
B-->>F: Email envoyé/planifié
F->>F: Notification succès
Gestion des Paiements Stripe
graph TB
A[Invoice] --> B{Status?}
B -->|PENDING| C[Payment Button]
B -->|PAID| D[Payment History]
B -->|CANCELLED| E[Cancelled]
C --> F[Stripe Payment Intent]
F --> G[Stripe Elements]
G --> H[Card Payment]
H --> I[Stripe Webhook]
I --> J[Update Invoice Status]
J --> D
K[Subscription] --> L[Stripe Customer]
L --> M[Payment Method]
M --> N[Recurring Payments]
N --> O[Webhook Events]
O --> P[Update Subscription]
4. Calendrier & Planification
Vue d'ensemble
Le scope Calendar gère la visualisation, la planification et la synchronisation avec Google Calendar.
Architecture du Module
graph TB
subgraph "Frontend - Calendar"
A[CalendarPage] --> B[MonthView]
A --> C[WeekView]
A --> D[DayView]
A --> E[YearView]
A --> F[CalendarFilters]
A --> G[DragAndDrop]
end
subgraph "Backend - Calendar Services"
H[SessionsController] --> I[SessionsService]
J[AvailabilityController] --> K[AvailabilityService]
L[GoogleCalendarController] --> M[GoogleCalendarService]
N[GoogleCalendarSyncScheduler] --> M
end
subgraph "Database"
I --> O[(sessions)]
K --> P[(availability_slots)]
M --> Q[(user_metadata)]
end
subgraph "External Services"
M --> R[Google Calendar API]
end
A --> H
A --> J
A --> L
Synchronisation Bidirectionnelle Google Calendar
sequenceDiagram
participant CRM as CRM System
participant DB as Database
participant Scheduler as Sync Scheduler
participant GC as Google Calendar API
participant User as User Action
Note over Scheduler: Toutes les 5 minutes
Scheduler->>DB: Get users with calendar
loop Pour chaque utilisateur
Scheduler->>GC: List events (timeMin, timeMax)
GC-->>Scheduler: Events list
loop Pour chaque événement
Scheduler->>DB: Check if session exists
alt Session existe
Scheduler->>Scheduler: Check conflict (last_modified)
alt Pas de conflit
Scheduler->>DB: Update session
end
else Session n'existe pas
Scheduler->>DB: Create session
end
end
end
User->>CRM: Create/Update session
CRM->>DB: Save session
CRM->>GC: Create/Update event
GC-->>CRM: Event ID
CRM->>DB: Update session (calendar_event_id)
Gestion de Disponibilité
graph TB
A[Availability Slots] --> B{Type?}
B -->|Unique| C[Single Slot]
B -->|Recurring| D[Recurring Slot]
D --> E[RecurringSlotExpander]
E --> F[Occurrence 1]
E --> G[Occurrence 2]
E --> H[Occurrence N]
I[Booking Request] --> J[SlotFilteringHelper]
J --> K{Slot disponible?}
K -->|Oui| L[Create Booking]
K -->|Non| M[Return Error]
L --> N[Create Google Calendar Event]
N --> O[Send Notifications]
5. Recherche & IA
Vue d'ensemble
Le scope Search & AI fournit une recherche globale et un assistant IA conversationnel.
Architecture du Module
graph TB
subgraph "Frontend - Global Search"
A[GlobalSearchDialog] --> B[SearchResults]
A --> C[AIChat]
C --> D[ActionResults]
end
subgraph "Backend - Search & AI"
E[SearchController] --> F[SearchService]
G[AgentController] --> H[AgentChatService]
G --> I[AgentActionsService]
G --> J[AgentActionsGenerationService]
end
subgraph "Database"
F --> K[(sessions)]
F --> L[(contacts)]
F --> M[(quotes)]
F --> N[(invoices)]
end
subgraph "External Services"
H --> O[OpenAI API]
I --> P[Notion API]
F --> P
end
A --> E
A --> G
Flux de Recherche Globale
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant DB as Database
participant Notion as Notion API
U->>F: Tape recherche (Cmd+K)
F->>F: Debounce 300ms
F->>B: GET /search?q=query
B->>DB: Search sessions
B->>DB: Search contacts
B->>DB: Search quotes
B->>DB: Search invoices
B->>Notion: Search pages
Notion-->>B: Results
B-->>F: Grouped results
F->>F: Display results
U->>F: Select result
F->>F: Navigate to entity
Flux d'Action IA
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant AI as OpenAI
participant DB as Database
U->>F: Prompt action (ex: "Créer session")
F->>B: POST /agent/chat
B->>AI: Generate action structure
AI-->>B: Action JSON
B->>B: Validate action
B->>AI: Stream response
AI-->>B: Chunks
B-->>F: Stream chunks (WebSocket)
F->>F: Display streaming
B->>B: Execute action
B->>DB: Create/Update entity
DB-->>B: Entity created
B->>B: Generate navigation URL
B-->>F: Action result + URL
F->>F: Display result + link
F->>F: Create notification
Builder de Vues Personnalisées
graph TB
A[User Prompt] --> B[AI Search Service]
B --> C[Parse Filters]
C --> D[Generate Filter Object]
D --> E[Apply Filters to Query]
E --> F[Execute Query]
F --> G[Return Results]
H[Example Prompt:<br/>"Sessions mariage juillet"] --> I[AI Analysis]
I --> J[Filters:<br/>- type: wedding<br/>- start_date: >= 2024-07-01<br/>- end_date: <= 2024-07-31]
J --> K[Apply to DB Query]
K --> L[Return Filtered Sessions]
6. Communication & Notifications
Vue d'ensemble
Le scope Notifications gère les notifications in-app, push et les communications par email.
Architecture du Module
graph TB
subgraph "Frontend - Notifications"
A[NotificationCenter] --> B[NotificationList]
A --> C[PushSubscription]
end
subgraph "Backend - Notifications"
D[NotificationsController] --> E[NotificationsService]
F[PushNotificationsController] --> G[PushNotificationsService]
H[WebSocketGateway] --> E
end
subgraph "Database"
E --> I[(notifications)]
G --> J[(push_subscriptions)]
end
subgraph "External Services"
G --> K[Web Push API]
E --> L[Email Service]
end
A --> D
C --> F
Flux de Notification
sequenceDiagram
participant Event as Event Source
participant B as Backend
participant DB as Database
participant WS as WebSocket
participant F as Frontend
participant Push as Push Service
Event->>B: Action executed
B->>DB: Create notification
B->>WS: Emit notification
WS-->>F: Real-time notification
F->>F: Display in-app
alt Push enabled
B->>Push: Send push notification
Push-->>F: Browser push
F->>F: Display push
end
Tracking d'Emails
graph TB
A[Email Sent] --> B[Gmail API]
B --> C[EmailTrackingService]
C --> D[(email_tracking)]
E[Email Opened] --> F[Tracking Pixel]
F --> G[Update Status: OPEN]
G --> D
H[Link Clicked] --> I[Tracking Link]
I --> J[Update Status: LINK_CLICK]
J --> D
K[Contact View] --> L[EmailTrackingService]
L --> D
D --> M[Display Timeline]
7. Analytics & Reporting
Vue d'ensemble
Le scope Analytics fournit des statistiques et rapports sur les performances du photographe.
Architecture du Module
graph TB
subgraph "Frontend - Analytics"
A[AnalyticsPage] --> B[Dashboard]
A --> C[Revenue Charts]
A --> D[Conversion Charts]
A --> E[Session Charts]
A --> F[Export PDF]
end
subgraph "Backend - Analytics"
G[AnalyticsController] --> H[AnalyticsService]
H --> I[AnalyticsPDFService]
end
subgraph "Database"
H --> J[(sessions)]
H --> K[(quotes)]
H --> L[(invoices)]
end
subgraph "External Services"
I --> M[PDF Service]
M --> N[Cloudflare R2]
end
A --> G
Calcul des Statistiques
graph TB
A[Analytics Request] --> B[Date Range]
B --> C[Query Builder]
C --> D[Revenue Stats]
C --> E[Conversion Stats]
C --> F[Session Stats]
D --> G[Total Revenue]
D --> H[Revenue by Status]
D --> I[Revenue by Period]
E --> J[Quotes Count]
E --> K[Invoices Count]
E --> L[Conversion Rate]
F --> M[Sessions Count]
F --> N[Sessions by Status]
F --> O[Sessions by Period]
G --> P[Return Stats]
H --> P
I --> P
J --> P
K --> P
L --> P
M --> P
N --> P
O --> P
8. Workflows & Automatisation
Vue d'ensemble
Le scope Workflows permet d'automatiser les processus métier récurrents.
Architecture du Module
graph TB
subgraph "Frontend - Workflows"
A[WorkflowsListPage] --> B[WorkflowViewPage]
B --> C[Phases]
B --> D[Tasks]
end
subgraph "Backend - Workflows"
E[WorkflowsController] --> F[WorkflowsService]
G[WorkflowTasksScheduler] --> F
end
subgraph "Database"
F --> H[(workflows)]
F --> I[(workflow_phases)]
F --> J[(workflow_tasks)]
end
A --> E
B --> E
Exécution d'un Workflow
sequenceDiagram
participant Trigger as Trigger Event
participant Scheduler as Workflow Scheduler
participant Service as WorkflowsService
participant DB as Database
participant Actions as Action Services
Note over Scheduler: Toutes les minutes
Scheduler->>DB: Get active workflows
loop Pour chaque workflow
Scheduler->>DB: Get tasks (status: PENDING)
loop Pour chaque tâche
Scheduler->>Service: Check conditions
alt Conditions remplies
Service->>Actions: Execute action
Actions-->>Service: Result
Service->>DB: Update task (COMPLETED)
Service->>DB: Create next tasks
else Conditions non remplies
Service->>DB: Keep task (PENDING)
end
end
end
9. Sécurité & Conformité
Vue d'ensemble
Le scope GDPR gère la conformité RGPD et la sécurité des données.
Architecture du Module
graph TB
subgraph "Frontend - GDPR Portal"
A[GDPRPortal] --> B[Consentements]
A --> C[Mes Droits]
A --> D[Mes Demandes]
A --> E[Informations Légales]
end
subgraph "Backend - GDPR"
F[GDPRController] --> G[GDPRService]
G --> H[ExportService]
G --> I[DeletionService]
end
subgraph "Database"
G --> J[(gdpr_consents)]
G --> K[(gdpr_requests)]
G --> L[(gdpr_exports)]
G --> M[(gdpr_deletion_logs)]
end
A --> F
Flux de Demande RGPD
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant DB as Database
participant Email as Email Service
U->>F: Créer demande (ex: ACCESS)
F->>B: POST /gdpr/requests
B->>DB: Create request
B->>Email: Send verification email
Email-->>U: Email de vérification
U->>F: Clique lien vérification
F->>B: POST /gdpr/requests/:id/verify
B->>B: Process request
alt ACCESS
B->>B: Generate export
B->>DB: Create export
B->>Email: Send export link
else ERASURE
B->>B: Delete data
B->>DB: Log deletion
B->>Email: Confirm deletion
end
🔗 Références
- ARCHITECTURE.md - Architecture générale du système
- BACKEND.md - Documentation backend détaillée
- PLAN_AMELIORATIONS_CRM_REORGANISE.md - Plan d'amélioration réorganisé
- CALENDAR_SYNC_ARCHITECTURE.md - Architecture de synchronisation calendrier
- AI_SEARCH_ARCHITECTURE.md - Architecture de recherche IA