← Retour à la marketplace
👥

CRM

⭐ Recommandé

Gestion de la relation client : contacts, entreprises, opportunités, historique.

CRMMoyen~8 joursv1.1.0

Module CRM complet avec gestion des contacts, entreprises, pipeline d'opportunités, historique des interactions, tags, notes et activités. Conçu pour s'intégrer avec les modules Facturation et Emails.

crmcontactscompaniespipelinesales

Dépendances requises :

📋 Schéma Prisma

// === Module CRM ===

enum ContactStatus {
  LEAD
  PROSPECT
  CLIENT
  INACTIVE
}

enum OpportunityStage {
  NEW
  QUALIFIED
  PROPOSAL
  NEGOTIATION
  WON
  LOST
}

model Company {
  id        String    @id @default(cuid())
  name      String
  website   String?
  industry  String?
  size      String?
  address   String?
  createdAt DateTime  @default(now())
  updatedAt DateTime  @updatedAt
  contacts  Contact[]

  @@map("companies")
}

model Contact {
  id            String        @id @default(cuid())
  email         String        @unique
  firstName     String
  lastName      String
  phone         String?
  status        ContactStatus @default(LEAD)
  companyId     String?
  company       Company?      @relation(fields: [companyId], references: [id])
  tags          String[]
  notes         String?
  createdAt     DateTime      @default(now())
  updatedAt     DateTime      @updatedAt
  opportunities Opportunity[]
  activities    Activity[]

  @@map("contacts")
}

model Opportunity {
  id          String           @id @default(cuid())
  title       String
  contactId   String
  contact     Contact          @relation(fields: [contactId], references: [id])
  stage       OpportunityStage @default(NEW)
  value       Decimal?
  probability Int?
  expectedAt  DateTime?
  wonAt       DateTime?
  lostAt      DateTime?
  lostReason  String?
  createdAt   DateTime         @default(now())
  updatedAt   DateTime         @updatedAt

  @@map("opportunities")
}

model Activity {
  id        String   @id @default(cuid())
  contactId String
  contact   Contact  @relation(fields: [contactId], references: [id])
  type      String   // email, call, meeting, note
  subject   String
  body      String?
  doneAt    DateTime @default(now())
  createdAt DateTime @default(now())

  @@map("activities")
}

🔌 Endpoints API

## API CRM

GET    /api/contacts              # Liste paginée (filtres: status, tag, company)
POST   /api/contacts              # Créer un contact
GET    /api/contacts/:id          # Détail + historique
PUT    /api/contacts/:id          # Modifier
DELETE /api/contacts/:id          # Supprimer
POST   /api/contacts/:id/notes    # Ajouter une note
POST   /api/contacts/:id/activities # Ajouter une activité

GET    /api/companies             # Liste entreprises
POST   /api/companies             # Créer
GET    /api/companies/:id         # Détail + contacts
PUT    /api/companies/:id         # Modifier

GET    /api/opportunities         # Pipeline (groupé par stage)
POST   /api/opportunities         # Créer
PUT    /api/opportunities/:id/stage # Changer de stage
PUT    /api/opportunities/:id     # Modifier

🛠️ Guide d'implémentation

## Implémentation CRM

### Étape 1 — Modèles DB
Intégrer les modèles (Company, Contact, Opportunity, Activity) dans le schéma Prisma.

### Étape 2 — Service couche
Créer `src/lib/crm/` avec :
- contactService.ts — CRUD + recherche
- companyService.ts — CRUD
- opportunityService.ts — CRUD + transitions stage
- activityService.ts — log des interactions

### Étape 3 — Routes API
Implémenter toutes les routes avec validation Zod.
Pagination cursor-based sur les listes.

### Étape 4 — UI
- Liste contacts (tableau filtrable + recherche)
- Fiche contact (détail + timeline activités)
- Vue pipeline Kanban (colonnes par stage)
- Formulaire contact/entreprise

### Étape 5 — Recherche
Implémentation d'une recherche full-text sur nom, email, entreprise.

Prêt à installer ce module ?

Ajoutez-le à un projet existant depuis la page modules du projet.

Voir les projets →