Aller au contenu principal

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

  1. Sessions & Projets
  2. Contacts & Clients
  3. Devis & Factures
  4. Calendrier & Planification
  5. Recherche & IA
  6. Communication & Notifications
  7. Analytics & Reporting
  8. Workflows & Automatisation
  9. 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