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[(file_objects)]
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​