Construire la plateforme marketing omnicanale Enterprise.
Cette couche permet :
Campagnes Segmentation Templates Automatisation Exécution Tracking
afin d'orchestrer les communications clients à grande échelle.
À l'issue de cette étape :
✓ Campaign ✓ CampaignAudience ✓ CampaignTemplate ✓ CampaignExecution ✓ CampaignTracking ✓ MarketingDashboard ✓ Marketing Platform Core
CRM ↓ Marketing Platform ├── Campaign Management ├── Audience Engine ├── Template Engine ├── Campaign Execution ├── Tracking & Attribution └── Marketing Dashboard ↓ Email SMS WhatsApp Push In-App
model Campaign {
id String
@id
@default(uuid())
tenantId String
name String
description String?
type CampaignType
status CampaignStatus
startDate DateTime?
endDate DateTime?
budget Decimal?
@db.Decimal(14,2)
createdBy String
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
audiences CampaignAudience[]
executions CampaignExecution[]
@@index([tenantId])
@@index([status])
@@index([type])
}
model CampaignAudience {
id String
@id
@default(uuid())
campaignId String
name String
audienceType AudienceType
segmentQuery Json?
estimatedSize Int?
createdAt DateTime
@default(now())
campaign Campaign
@relation(
fields:[campaignId],
references:[id],
onDelete:Cascade
)
@@index([campaignId])
}
model CampaignTemplate {
id String
@id
@default(uuid())
tenantId String
name String
channel MarketingChannel
subject String?
content Json
active Boolean
@default(true)
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
@@index([tenantId])
@@index([channel])
}
model CampaignExecution {
id String
@id
@default(uuid())
campaignId String
channel MarketingChannel
executionStatus ExecutionStatus
scheduledAt DateTime?
startedAt DateTime?
completedAt DateTime?
targetedRecipients Int
@default(0)
deliveredRecipients Int
@default(0)
failedRecipients Int
@default(0)
campaign Campaign
@relation(
fields:[campaignId],
references:[id],
onDelete:Cascade
)
@@index([campaignId])
@@index([executionStatus])
}
model CampaignTracking {
id String
@id
@default(uuid())
campaignId String
customerId String?
channel MarketingChannel
eventType CampaignEventType
eventDate DateTime
@default(now())
metadata Json?
@@index([campaignId])
@@index([customerId])
@@index([eventType])
}
model MarketingDashboardSnapshot {
id String
@id
@default(uuid())
tenantId String
snapshotDate DateTime
campaignsCount Int
deliveredCount Int
openedCount Int
clickedCount Int
conversionCount Int
revenueAttributed Decimal?
@db.Decimal(14,2)
createdAt DateTime
@default(now())
@@index([tenantId])
@@index([snapshotDate])
}
enum CampaignType {
PROMOTIONAL
TRANSACTIONAL
LOYALTY
RETENTION
REACTIVATION
NEWSLETTER
}
enum CampaignStatus {
DRAFT
SCHEDULED
RUNNING
COMPLETED
CANCELLED
}
enum AudienceType {
STATIC
DYNAMIC
SMART_SEGMENT
}
enum MarketingChannel {
EMAIL
SMS
WHATSAPP
PUSH
IN_APP
}
enum ExecutionStatus {
PENDING
RUNNING
COMPLETED
FAILED
CANCELLED
}
enum CampaignEventType {
SENT
DELIVERED
OPENED
CLICKED
CONVERTED
UNSUBSCRIBED
}
npx prisma migrate dev \
--name marketing_core
src/modules/marketing ├── campaigns ├── audiences ├── templates ├── execution ├── tracking ├── dashboard └── marketing.module.ts
CampaignService CampaignAudienceService CampaignTemplateService CampaignExecutionService CampaignTrackingService MarketingDashboardService
campaign.service.ts
createCampaign() updateCampaign() scheduleCampaign() cancelCampaign() duplicateCampaign()
Promotion Newsletter Loyalty Retention Reactivation
campaign-audience.service.ts
CRM Segments Customer Tags Customer Scores Behavior Analytics Smart Segments
createAudience() estimateAudienceSize() refreshAudience() previewAudience()
campaign-template.service.ts
Email HTML SMS WhatsApp Push In-App
{{customer.firstName}}
{{property.name}}
{{reservation.checkIn}}
{{loyalty.points}}
campaign-execution.service.ts
Schedule ↓ Audience Build ↓ Send ↓ Track ↓ Analytics
executeCampaign() pauseExecution() resumeExecution() retryFailedMessages()
Email Provider SMS Provider WhatsApp Provider Push Provider
campaign-tracking.service.ts
Delivery Open Click Conversion Unsubscribe
Campaign ↓ Customer ↓ Reservation ↓ Revenue
marketing-dashboard.service.ts
Campaigns Audience Reach Open Rate Click Rate Conversions Revenue Attribution
CTR Conversion Rate Revenue Per Campaign Cost Per Conversion Marketing ROI
GET /marketing/campaigns
POST /marketing/campaigns
PUT /marketing/campaigns/{id}
GET /marketing/audiences
POST /marketing/audiences
GET /marketing/templates
POST /marketing/templates
POST /marketing/executions
GET /marketing/dashboard
{
"campaign":"Summer Promotion",
"audienceSize":12500,
"deliveryRate":98.2,
"openRate":42.7,
"conversionRate":6.4
}
marketing.read marketing.create marketing.execute marketing.analytics marketing.templates marketing.admin
CAMPAIGN_CREATED CAMPAIGN_SCHEDULED CAMPAIGN_EXECUTED AUDIENCE_GENERATED TEMPLATE_CREATED MARKETING_REPORT_VIEWED
Toutes les minutes Campaign Scheduler Toutes les 5 minutes Execution Queue Toutes les nuits Audience Refresh Dashboard Snapshot
Compatible avec :
Marketing Automation Journey Builder Trigger Campaigns Behavior Campaigns AI Marketing
Le Sprint 8-A.1 est terminé lorsque :
✓ Campaign créé ✓ CampaignAudience créé ✓ CampaignTemplate créé ✓ CampaignExecution créé ✓ CampaignTracking créé ✓ MarketingDashboard créé ✓ Marketing Core opérationnel
Campaign CampaignAudience CampaignTemplate CampaignExecution CampaignTracking MarketingDashboardSnapshot CampaignService CampaignAudienceService CampaignTemplateService CampaignExecutionService CampaignTrackingService MarketingDashboardService Marketing Platform Core
Transformer la plateforme marketing en moteur d'automatisation omnicanal Enterprise.
Cette couche permet :
Customer Journeys Automation Rules Behavior Triggers Lifecycle Marketing Real-Time Engagement Journey Analytics
afin d'automatiser l'ensemble du cycle de vie client.
À l'issue de cette étape :
✓ Journey ✓ Automation Rule ✓ Trigger Engine ✓ Behavior Campaigns ✓ Lifecycle Marketing ✓ Journey Analytics ✓ Marketing Automation Platform
CRM ↓ Behavior Engine ↓ Journey Automation Platform ├── Journeys ├── Triggers ├── Rules Engine ├── Lifecycle Campaigns ├── Real-Time Automation └── Journey Analytics ↓ Email SMS WhatsApp Push In-App
model Journey {
id String
@id
@default(uuid())
tenantId String
name String
description String?
status JourneyStatus
triggerType JourneyTriggerType
active Boolean
@default(true)
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
steps JourneyStep[]
@@index([tenantId])
@@index([status])
}
model JourneyStep {
id String
@id
@default(uuid())
journeyId String
stepOrder Int
stepType JourneyStepType
configuration Json
createdAt DateTime
@default(now())
journey Journey
@relation(
fields:[journeyId],
references:[id],
onDelete:Cascade
)
@@index([journeyId])
}
model AutomationRule {
id String
@id
@default(uuid())
tenantId String
name String
triggerEvent String
conditions Json
actions Json
enabled Boolean
@default(true)
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
@@index([tenantId])
@@index([enabled])
}
model JourneyExecution {
id String
@id
@default(uuid())
journeyId String
customerId String
status JourneyExecutionStatus
currentStep Int
@default(0)
startedAt DateTime
@default(now())
completedAt DateTime?
@@index([journeyId])
@@index([customerId])
@@index([status])
}
model JourneyAnalytics {
journeyId String
@id
enrolledCustomers Int
@default(0)
completedCustomers Int
@default(0)
conversionRate Float?
revenueAttributed Decimal?
@db.Decimal(14,2)
updatedAt DateTime
@updatedAt
}
enum JourneyStatus {
DRAFT
ACTIVE
PAUSED
ARCHIVED
}
enum JourneyTriggerType {
CUSTOMER_CREATED
RESERVATION_CREATED
CHECKIN_COMPLETED
CHECKOUT_COMPLETED
TAG_ASSIGNED
BEHAVIOR_EVENT
}
enum JourneyStepType {
WAIT
EMAIL
SMS
WHATSAPP
PUSH
CONDITION
TAG
WEBHOOK
}
enum JourneyExecutionStatus {
ACTIVE
COMPLETED
FAILED
CANCELLED
}
npx prisma migrate dev \
--name marketing_automation
src/modules/marketing-automation ├── journeys ├── rules ├── triggers ├── lifecycle ├── analytics └── marketing-automation.module.ts
JourneyService AutomationRuleService TriggerEngineService BehaviorCampaignService LifecycleMarketingService JourneyAnalyticsService
journey.service.ts
createJourney() publishJourney() pauseJourney() duplicateJourney() archiveJourney()
Drag & Drop Conditions Delays Actions Branches
Welcome Journey Booking Journey Check-In Journey Post-Stay Journey Reactivation Journey
automation-rule.service.ts
Triggers Conditions Actions Schedules
Tag VIP ajouté ↓ Envoyer email premium
Aucune réservation 180 jours ↓ Campagne réactivation
trigger-engine.service.ts
Customer Reservation Payment Property Marketing Behavior
processEvent() evaluateTriggers() executeActions() scheduleExecution()
Event Bus Queue Worker
pour le traitement asynchrone.
behavior-campaign.service.ts
Navigation Recherche Abandon réservation Ouverture email Clic campagne
Abandon réservation ↓ Relance 1h ↓ Relance 24h ↓ Offre promotionnelle
lifecycle-marketing.service.ts
Prospect Client Voyageur VIP Inactif Perdu
Onboarding Loyalty Upsell Cross-Sell Retention Win-Back
CRM Scores Customer Segments Behavior Analytics Communication History
journey-analytics.service.ts
Enrollments Completion Rate Drop-Off Rate Conversion Rate Revenue Attribution
Journey ROI Automation Efficiency Customer Engagement Revenue Per Journey
GET /marketing/journeys
POST /marketing/journeys
PUT /marketing/journeys/{id}
POST /marketing/journeys/{id}/publish
GET /marketing/automation-rules
POST /marketing/automation-rules
GET /marketing/journeys/analytics
{
"journey":"Welcome Journey",
"enrolled":12000,
"completed":10150,
"conversionRate":12.7,
"revenueAttributed":85000
}
marketing.journey.read marketing.journey.manage marketing.automation.manage marketing.behavior.manage marketing.analytics.read marketing.admin
JOURNEY_CREATED JOURNEY_PUBLISHED AUTOMATION_RULE_CREATED TRIGGER_EXECUTED BEHAVIOR_CAMPAIGN_STARTED JOURNEY_ANALYTICS_VIEWED
Toutes les minutes Trigger Processing Journey Scheduler Toutes les 5 minutes Behavior Evaluation Toutes les nuits Journey Analytics Refresh
Compatible avec :
Loyalty Program Rewards Points Engine Membership Tiers Customer Retention
Le Sprint 8-A.2 est terminé lorsque :
✓ Journey créé ✓ Automation Rule créée ✓ Trigger Engine créé ✓ Behavior Campaigns créées ✓ Lifecycle Marketing créé ✓ Journey Analytics créé ✓ Marketing Automation opérationnel
Journey JourneyStep AutomationRule JourneyExecution JourneyAnalytics JourneyService AutomationRuleService TriggerEngineService BehaviorCampaignService LifecycleMarketingService JourneyAnalyticsService Marketing Automation Platform
Construire le moteur de fidélisation client Enterprise.
Cette couche permet :
Comptes fidélité Points Récompenses Niveaux d'adhésion Transactions fidélité Tableaux de bord
afin d'augmenter :
Rétention Réachat Valeur vie client (LTV) Engagement Revenus récurrents
À l'issue de cette étape :
✓ LoyaltyAccount ✓ PointsLedger ✓ Reward ✓ MembershipTier ✓ LoyaltyTransaction ✓ LoyaltyDashboard ✓ Loyalty Platform Core
Customer ↓ Loyalty Platform ├── Loyalty Accounts ├── Points Engine ├── Rewards Catalog ├── Membership Tiers ├── Loyalty Transactions └── Loyalty Dashboard ↓ Marketing Automation ↓ Reservations ↓ Revenue Growth
model LoyaltyAccount {
id String
@id
@default(uuid())
tenantId String
customerId String
@unique
membershipTierId String?
loyaltyNumber String
active Boolean
@default(true)
currentPoints Int
@default(0)
lifetimePoints Int
@default(0)
joinedAt DateTime
@default(now())
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
transactions LoyaltyTransaction[]
@@unique([tenantId, loyaltyNumber])
@@index([tenantId])
@@index([customerId])
}
model PointsLedger {
id String
@id
@default(uuid())
loyaltyAccountId String
transactionType PointsTransactionType
points Int
balanceAfter Int
sourceType LoyaltySourceType
sourceId String?
expiresAt DateTime?
createdAt DateTime
@default(now())
@@index([loyaltyAccountId])
@@index([transactionType])
@@index([expiresAt])
}
model Reward {
id String
@id
@default(uuid())
tenantId String
code String
name String
description String?
rewardType RewardType
pointsRequired Int
quantityAvailable Int?
active Boolean
@default(true)
validFrom DateTime?
validUntil DateTime?
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
@@unique([tenantId, code])
@@index([tenantId])
@@index([rewardType])
@@index([active])
}
model MembershipTier {
id String
@id
@default(uuid())
tenantId String
code String
name String
level Int
pointsThreshold Int
benefits Json?
active Boolean
@default(true)
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
@@unique([tenantId, code])
@@index([tenantId])
@@index([level])
}
model LoyaltyTransaction {
id String
@id
@default(uuid())
loyaltyAccountId String
rewardId String?
transactionType LoyaltyTransactionType
points Int
monetaryValue Decimal?
@db.Decimal(14,2)
status LoyaltyTransactionStatus
createdAt DateTime
@default(now())
completedAt DateTime?
@@index([loyaltyAccountId])
@@index([transactionType])
@@index([status])
}
model LoyaltyDashboardSnapshot {
id String
@id
@default(uuid())
tenantId String
snapshotDate DateTime
activeMembers Int
totalPointsIssued Int
totalPointsRedeemed Int
rewardsRedeemed Int
loyaltyRevenue Decimal?
@db.Decimal(14,2)
createdAt DateTime
@default(now())
@@index([tenantId])
@@index([snapshotDate])
}
enum PointsTransactionType {
EARN
REDEEM
EXPIRE
ADJUSTMENT
BONUS
}
enum LoyaltySourceType {
RESERVATION
CAMPAIGN
REFERRAL
MANUAL
REWARD
}
enum RewardType {
DISCOUNT
FREE_NIGHT
UPGRADE
GIFT
VOUCHER
}
enum LoyaltyTransactionType {
EARN
REDEEM
TRANSFER
ADJUSTMENT
}
enum LoyaltyTransactionStatus {
PENDING
COMPLETED
CANCELLED
FAILED
}
npx prisma migrate dev \
--name loyalty_program_core
src/modules/loyalty ├── accounts ├── points ├── rewards ├── tiers ├── transactions ├── dashboard └── loyalty.module.ts
LoyaltyAccountService PointsLedgerService RewardService MembershipTierService LoyaltyTransactionService LoyaltyDashboardService
loyalty-account.service.ts
createAccount() getAccount() suspendAccount() reactivateAccount() calculateTier()
lors de :
Création client Première réservation Programme invitation
points-ledger.service.ts
Earn Redeem Expire Bonus Adjustment
1 € dépensé ↓ 10 points
Séjour > 5 nuits ↓ Bonus 500 points
earnPoints() redeemPoints() expirePoints() adjustPoints() calculateBalance()
reward.service.ts
Réduction Nuit offerte Upgrade Cadeaux Coupons
createReward() redeemReward() reserveRewardStock() expireReward()
membership-tier.service.ts
Bronze Silver Gold Platinum
Bonus Points Priority Support Late Checkout Free Upgrade Exclusive Offers
assignTier() upgradeTier() downgradeTier() evaluateEligibility()
loyalty-transaction.service.ts
Points Earned Points Redeemed Transfers Adjustments
createTransaction() completeTransaction() cancelTransaction() getTransactionHistory()
loyalty-dashboard.service.ts
Members Points Issued Points Redeemed Rewards Tier Distribution
Retention Rate Redemption Rate Points Liability Loyalty Revenue Average Tier
GET /loyalty/accounts
GET /loyalty/accounts/{id}
POST /loyalty/accounts
GET /loyalty/rewards
POST /loyalty/rewards
GET /loyalty/tiers
POST /loyalty/transactions
GET /loyalty/dashboard
{
"customer":"John Doe",
"tier":"Gold",
"points":18500,
"lifetimePoints":42300,
"availableRewards":17
}
loyalty.read loyalty.manage loyalty.points loyalty.rewards loyalty.analytics loyalty.admin
LOYALTY_ACCOUNT_CREATED POINTS_EARNED POINTS_REDEEMED REWARD_REDEEMED TIER_UPGRADED LOYALTY_DASHBOARD_VIEWED
Toutes les nuits Points Expiration Tier Evaluation Dashboard Snapshot Reward Availability Refresh
Compatible avec :
Loyalty Intelligence Reward Optimization Customer Lifetime Value Retention Prediction VIP Programs
Le Sprint 8-B.1 est terminé lorsque :
✓ LoyaltyAccount créé ✓ PointsLedger créé ✓ Reward créé ✓ MembershipTier créé ✓ LoyaltyTransaction créé ✓ LoyaltyDashboard créé ✓ Loyalty Program opérationnel
LoyaltyAccount PointsLedger Reward MembershipTier LoyaltyTransaction LoyaltyDashboardSnapshot LoyaltyAccountService PointsLedgerService RewardService MembershipTierService LoyaltyTransactionService LoyaltyDashboardService Loyalty Platform Core
Transformer le programme de fidélité en plateforme d'intelligence client Enterprise.
Cette couche permet :
Customer Lifetime Value Prévision de rétention Optimisation des récompenses Gestion VIP Analyse engagement Scoring fidélité
afin d'améliorer :
LTV Rétention Engagement Revenus récurrents Rentabilité client
À l'issue de cette étape :
✓ Customer Lifetime Value ✓ Retention Prediction ✓ Reward Optimization ✓ VIP Intelligence ✓ Loyalty Health Score ✓ Engagement Analytics ✓ Loyalty Intelligence Platform
Loyalty Platform ↓ Loyalty Intelligence Engine ├── CLV Engine ├── Retention Engine ├── Reward Optimization ├── VIP Intelligence ├── Engagement Analytics ├── Loyalty Health Scoring └── AI Recommendations ↓ Marketing Automation ↓ CRM ↓ Revenue Growth
model CustomerLifetimeValue {
customerId String
@id
predictedLtv Decimal
@db.Decimal(14,2)
historicalRevenue Decimal
@db.Decimal(14,2)
projectedRevenue Decimal
@db.Decimal(14,2)
profitabilityScore Float?
calculatedAt DateTime
@updatedAt
}
model RetentionPrediction {
customerId String
@id
retentionProbability Float
churnProbability Float
riskLevel RetentionRiskLevel
nextReviewDate DateTime?
calculatedAt DateTime
@updatedAt
}
model LoyaltyInsight {
id String
@id
@default(uuid())
customerId String
category LoyaltyInsightCategory
severity InsightSeverity
title String
description String
recommendation String?
impactScore Float?
createdAt DateTime
@default(now())
@@index([customerId])
@@index([category])
}
model RewardOptimization {
id String
@id
@default(uuid())
rewardId String
currentCost Decimal
@db.Decimal(14,2)
suggestedCost Decimal
@db.Decimal(14,2)
expectedRedemption Float?
expectedRevenueImpact Decimal?
@db.Decimal(14,2)
implemented Boolean
@default(false)
createdAt DateTime
@default(now())
@@index([rewardId])
}
model LoyaltyHealthScore {
customerId String
@id
overallScore Float
engagementScore Float
retentionScore Float
activityScore Float
valueScore Float
loyaltyScore Float
calculatedAt DateTime
@updatedAt
}
enum RetentionRiskLevel {
LOW
MEDIUM
HIGH
CRITICAL
}
enum LoyaltyInsightCategory {
ENGAGEMENT
RETENTION
REWARD
VIP
REVENUE
}
npx prisma migrate dev \
--name loyalty_intelligence
src/modules/loyalty-intelligence ├── clv ├── retention ├── rewards ├── vip ├── analytics ├── health └── loyalty-intelligence.module.ts
CustomerLifetimeValueService RetentionPredictionService RewardOptimizationService VipIntelligenceService EngagementAnalyticsService LoyaltyHealthScoreService LoyaltyInsightService
customer-lifetime-value.service.ts
Historical Revenue Reservation Frequency Average Basket Retention Rate Future Revenue
calculateLtv() forecastLtv() segmentByLtv() rankCustomers()
VIP High Value Standard Low Value
retention-prediction.service.ts
Recency Frequency Monetary Value Engagement Support History
predictRetention() predictChurn() calculateRisk() generateRetentionActions()
Customer Risque churn 82% ↓ Campagne Win-Back
reward-optimization.service.ts
Reward Cost Redemption Rate Revenue Impact Customer Satisfaction
analyzeRewards() optimizeRewardCost() forecastRedemption() recommendRewards()
Reward 5000 points ↓ 6500 points ↓ +18% marge
vip-intelligence.service.ts
Top Revenue Top LTV Top Loyalty Brand Advocates High Referral
VIP Gold VIP Platinum VIP Elite
identifyVipCustomers() assignVipLevel() trackVipBenefits() generateVipInsights()
engagement-analytics.service.ts
Campaign Activity Loyalty Activity Reservation Activity Reward Usage Portal Usage
Engagement Rate Active Members Reward Usage Rate Referral Rate Program Participation
loyalty-health-score.service.ts
Engagement 25% Retention 25% Activity 20% LTV 20% Loyalty Usage 10%
90-100 Excellent 75-89 Healthy 50-74 Warning 0-49 At Risk
Customer Health 91 Excellent
loyalty-insight.service.ts
Retention Alerts VIP Opportunities Reward Optimization Engagement Opportunities Revenue Growth Actions
Client Gold LTV prévu 12 500 € ↓ Passage VIP recommandé
Segment Standard Baisse engagement ↓ Campagne fidélisation recommandée
GET /loyalty/intelligence GET /loyalty/ltv GET /loyalty/retention GET /loyalty/rewards/optimization GET /loyalty/vip GET /loyalty/health
{
"customerLtv":12500,
"retentionProbability":0.87,
"healthScore":91,
"vipEligible":true,
"recommendations":4
}
LTV Accuracy Retention Accuracy Reward ROI VIP Revenue Share Loyalty Health Trend
loyalty.intelligence.read loyalty.retention.manage loyalty.vip.manage loyalty.analytics.read loyalty.executive
LTV_CALCULATED RETENTION_PREDICTED VIP_ASSIGNED REWARD_OPTIMIZATION_CREATED LOYALTY_HEALTH_UPDATED LOYALTY_INSIGHT_GENERATED
Toutes les nuits LTV Refresh Retention Prediction VIP Evaluation Health Score Refresh Insight Generation
À la fin du Sprint 8-B.2 :
✓ Loyalty Program ✓ Loyalty Intelligence ✓ Retention Prediction ✓ VIP Intelligence ✓ Reward Optimization ✓ Engagement Analytics ✓ Customer Lifetime Value
sont entièrement opérationnels.
Compatible avec :
Referral Program Advocacy Influencers Ambassadors Growth Engine
Le Sprint 8-B.2 est terminé lorsque :
✓ Customer Lifetime Value créé ✓ Retention Prediction créée ✓ Reward Optimization créée ✓ VIP Intelligence créée ✓ Loyalty Health Score créé ✓ Engagement Analytics créée ✓ Loyalty Intelligence finalisée
CustomerLifetimeValue RetentionPrediction LoyaltyInsight RewardOptimization LoyaltyHealthScore CustomerLifetimeValueService RetentionPredictionService RewardOptimizationService VipIntelligenceService EngagementAnalyticsService LoyaltyHealthScoreService LoyaltyInsightService Loyalty Intelligence Platform
Construire le moteur de croissance virale Enterprise.
Cette couche permet :
Parrainage Récompenses Ambassadeurs Advocacy Marketing Tracking viral Attribution
afin d'accélérer :
Acquisition clients Croissance organique Recommandations Rétention Revenus
À l'issue de cette étape :
✓ ReferralProgram ✓ ReferralCode ✓ ReferralReward ✓ ReferralTracking ✓ AdvocateProfile ✓ ReferralDashboard ✓ Referral Growth Platform
Customer ↓ Referral Platform ├── Referral Programs ├── Referral Codes ├── Referral Rewards ├── Tracking Engine ├── Advocate Profiles └── Referral Dashboard ↓ Marketing Automation ↓ Loyalty Program ↓ Growth Engine
model ReferralProgram {
id String
@id
@default(uuid())
tenantId String
code String
name String
description String?
status ReferralProgramStatus
rewardType ReferralRewardType
rewardValue Decimal
@db.Decimal(14,2)
active Boolean
@default(true)
startDate DateTime?
endDate DateTime?
createdAt DateTime
@default(now())
updatedAt DateTime
@updatedAt
@@unique([tenantId, code])
@@index([tenantId])
@@index([status])
}
model ReferralCode {
id String
@id
@default(uuid())
tenantId String
customerId String
referralProgramId String
code String
usageCount Int
@default(0)
maxUsage Int?
active Boolean
@default(true)
expiresAt DateTime?
createdAt DateTime
@default(now())
@@unique([tenantId, code])
@@index([customerId])
@@index([referralProgramId])
}
model ReferralReward {
id String
@id
@default(uuid())
referralTrackingId String
customerId String
rewardType ReferralRewardType
rewardValue Decimal
@db.Decimal(14,2)
status ReferralRewardStatus
grantedAt DateTime?
createdAt DateTime
@default(now())
@@index([customerId])
@@index([status])
}
model ReferralTracking {
id String
@id
@default(uuid())
tenantId String
referralCodeId String
referrerCustomerId String
referredCustomerId String?
status ReferralStatus
source ReferralSource?
firstVisitAt DateTime?
signupAt DateTime?
firstBookingAt DateTime?
conversionValue Decimal?
@db.Decimal(14,2)
createdAt DateTime
@default(now())
@@index([tenantId])
@@index([referrerCustomerId])
@@index([status])
}
model AdvocateProfile {
customerId String
@id
advocateScore Float
referralsCount Int
@default(0)
conversionsCount Int
@default(0)
generatedRevenue Decimal
@db.Decimal(14,2)
socialInfluenceScore Float?
advocateLevel AdvocateLevel
updatedAt DateTime
@updatedAt
}
model ReferralDashboardSnapshot {
id String
@id
@default(uuid())
tenantId String
snapshotDate DateTime
referralsGenerated Int
conversions Int
rewardsGranted Int
revenueGenerated Decimal
@db.Decimal(14,2)
activeAdvocates Int
createdAt DateTime
@default(now())
@@index([tenantId])
@@index([snapshotDate])
}
enum ReferralProgramStatus {
DRAFT
ACTIVE
PAUSED
ARCHIVED
}
enum ReferralRewardType {
POINTS
CREDIT
DISCOUNT
CASHBACK
FREE_NIGHT
}
enum ReferralRewardStatus {
PENDING
GRANTED
CANCELLED
EXPIRED
}
enum ReferralStatus {
INVITED
REGISTERED
CONVERTED
REWARDED
REJECTED
}
enum ReferralSource {
EMAIL
SMS
WHATSAPP
SOCIAL
DIRECT_LINK
}
enum AdvocateLevel {
BRONZE
SILVER
GOLD
PLATINUM
ELITE
}
npx prisma migrate dev \
--name referral_program_core
src/modules/referrals ├── programs ├── codes ├── rewards ├── tracking ├── advocates ├── dashboard └── referrals.module.ts
ReferralProgramService ReferralCodeService ReferralRewardService ReferralTrackingService AdvocateProfileService ReferralDashboardService
referral-program.service.ts
createProgram() activateProgram() pauseProgram() archiveProgram() duplicateProgram()
Double récompense Récompense unique Multi-niveaux Saisonnier VIP
referral-code.service.ts
Code unique Lien court QR Code Deep Link
generateCode() validateCode() expireCode() trackUsage()
JOHN-8X4P2 ↓ https://app/ref/JOHN-8X4P2
referral-reward.service.ts
Points fidélité Crédit portefeuille Réduction Cashback Nuit offerte
grantReward() cancelReward() expireReward() synchronizeLoyaltyReward()
referral-tracking.service.ts
Invitation ↓ Visite ↓ Inscription ↓ Réservation ↓ Récompense
trackVisit() trackSignup() trackConversion() calculateAttribution()
Referral ↓ Customer ↓ Reservation ↓ Revenue
advocate-profile.service.ts
Referrals Conversions Revenue Influence Engagement
Bronze Silver Gold Platinum Elite
calculateAdvocateScore() assignAdvocateLevel() rankAdvocates() generateAdvocateInsights()
referral-dashboard.service.ts
Invitations Conversions Revenue Rewards Top Advocates
Referral Conversion Rate Cost Per Referral Revenue Per Advocate Referral ROI Advocate Growth
GET /referrals/programs POST /referrals/programs GET /referrals/codes POST /referrals/codes GET /referrals/tracking GET /referrals/advocates GET /referrals/dashboard
{
"program":"Refer & Earn",
"referrals":1240,
"conversions":318,
"conversionRate":25.6,
"revenueGenerated":84200
}
referral.read referral.manage referral.rewards referral.analytics referral.advocates referral.admin
REFERRAL_PROGRAM_CREATED REFERRAL_CODE_GENERATED REFERRAL_CONVERTED REWARD_GRANTED ADVOCATE_LEVEL_UPDATED REFERRAL_DASHBOARD_VIEWED
Toutes les heures Referral Attribution Toutes les nuits Reward Distribution Advocate Ranking Refresh Dashboard Snapshot
Compatible avec :
Advocacy Intelligence Influencer Programs Ambassador Platform Referral Optimization Growth Intelligence
Le Sprint 8-C.1 est terminé lorsque :
✓ ReferralProgram créé ✓ ReferralCode créé ✓ ReferralReward créé ✓ ReferralTracking créé ✓ AdvocateProfile créé ✓ ReferralDashboard créé ✓ Referral Platform opérationnelle
ReferralProgram ReferralCode ReferralReward ReferralTracking AdvocateProfile ReferralDashboardSnapshot ReferralProgramService ReferralCodeService ReferralRewardService ReferralTrackingService AdvocateProfileService ReferralDashboardService Referral Growth Platform
Transformer la plateforme de parrainage en moteur de croissance prédictif Enterprise.
Cette couche permet :
Scoring ambassadeurs Prévision referrals Détection influenceurs Optimisation croissance Recommandations IA Pilotage acquisition organique
afin de maximiser :
Referral Revenue Acquisition organique Influence client Croissance virale ROI marketing
À l'issue de cette étape :
✓ Advocate Score ✓ Referral Forecasting ✓ Influencer Detection ✓ Growth Intelligence ✓ Referral Optimization ✓ Growth Health Score ✓ Growth Intelligence Platform
Referral Platform ↓ Growth Intelligence Engine ├── Advocate Scoring ├── Referral Forecasting ├── Influencer Detection ├── Growth Analytics ├── Referral Optimization ├── Growth Health Scoring └── AI Recommendations ↓ Marketing Automation ↓ Loyalty Platform ↓ Revenue Growth
model AdvocateScore {
customerId String
@id
overallScore Float
referralScore Float
conversionScore Float
influenceScore Float
engagementScore Float
revenueScore Float
calculatedAt DateTime
@updatedAt
}
model ReferralForecast {
id String
@id
@default(uuid())
customerId String?
forecastType ReferralForecastType
forecastDate DateTime
predictedValue Float
confidenceScore Float?
generatedAt DateTime
@default(now())
@@index([customerId])
@@index([forecastType])
@@index([forecastDate])
}
model InfluencerProfile {
customerId String
@id
influenceScore Float
audienceScore Float?
engagementScore Float?
referralReach Int
@default(0)
influencerTier InfluencerTier
updatedAt DateTime
@updatedAt
}
model GrowthInsight {
id String
@id
@default(uuid())
tenantId String
category GrowthInsightCategory
severity InsightSeverity
title String
description String
recommendation String?
impactScore Float?
createdAt DateTime
@default(now())
@@index([tenantId])
@@index([category])
}
model GrowthHealthScore {
tenantId String
@id
overallScore Float
acquisitionScore Float
referralScore Float
advocacyScore Float
conversionScore Float
retentionScore Float
calculatedAt DateTime
@updatedAt
}
model ReferralOptimization {
id String
@id
@default(uuid())
referralProgramId String
currentRewardValue Decimal
@db.Decimal(14,2)
suggestedRewardValue Decimal
@db.Decimal(14,2)
expectedConversionGain Float?
expectedRevenueGain Decimal?
@db.Decimal(14,2)
implemented Boolean
@default(false)
createdAt DateTime
@default(now())
@@index([referralProgramId])
}
enum ReferralForecastType {
REFERRALS
CONVERSIONS
REVENUE
ADVOCATES
}
enum InfluencerTier {
MICRO
RISING
MACRO
ELITE
}
enum GrowthInsightCategory {
REFERRAL
ADVOCACY
ACQUISITION
CONVERSION
REVENUE
}
npx prisma migrate dev \
--name advocacy_intelligence
src/modules/growth-intelligence ├── advocates ├── forecasting ├── influencers ├── analytics ├── optimization ├── health └── growth-intelligence.module.ts
AdvocateScoreService ReferralForecastService InfluencerDetectionService GrowthAnalyticsService ReferralOptimizationService GrowthHealthScoreService GrowthInsightService
advocate-score.service.ts
Referrals Conversions Revenue Engagement Influence
Referrals 30% Conversions 25% Revenue 20% Influence 15% Engagement 10%
90-100 Elite Advocate 75-89 Premium Advocate 50-74 Active Advocate 0-49 Emerging Advocate
referral-forecast.service.ts
Referrals Conversions Revenue Growth
30 jours 90 jours 12 mois
forecastReferrals() forecastConversions() forecastRevenue() forecastAdvocateGrowth()
influencer-detection.service.ts
Top Advocates Brand Ambassadors High Reach Customers Community Leaders VIP Influencers
detectInfluencers() calculateInfluenceScore() assignInfluencerTier() generateInfluencerInsights()
Micro Rising Macro Elite
growth-analytics.service.ts
Referral Funnel Acquisition Funnel Conversion Funnel Advocate Funnel Revenue Funnel
Referral Conversion Rate Advocate Activation Rate Revenue Per Referral Customer Acquisition Cost Viral Coefficient
Top Advocates Top Influencers Top Revenue Contributors Fastest Growing Segments
referral-optimization.service.ts
Reward Value Referral Funnel Conversion Rate Program Profitability
analyzeProgram() optimizeRewardValue() forecastRewardImpact() recommendReferralChanges()
Reward 20€ ↓ 25€ ↓ +18% conversions ↓ +11% revenu net
growth-health-score.service.ts
Referral Growth 25% Conversion 25% Advocacy 20% Revenue 20% Retention 10%
90-100 Excellent 75-89 Healthy 50-74 Warning 0-49 Critical
Growth Health 94 Excellent
growth-insight.service.ts
Advocate Opportunities Influencer Opportunities Referral Optimization Acquisition Improvements Growth Risks
Top 5 advocates ↓ 34% du revenu referral ↓ Programme ambassadeur recommandé
Programme A Conversion 7% ↓ Sous moyenne ↓ Récompense à optimiser
GET /referrals/intelligence GET /referrals/forecasting GET /referrals/influencers GET /referrals/optimization GET /referrals/health GET /referrals/leaderboard
{
"advocateScore":96,
"influencerTier":"ELITE",
"forecastRevenue":125000,
"growthHealth":94,
"recommendations":6
}
Forecast Accuracy Influencer Impact Referral ROI Viral Coefficient Growth Health Trend
growth.read growth.analytics growth.forecasting growth.optimization growth.executive
ADVOCATE_SCORE_UPDATED FORECAST_GENERATED INFLUENCER_DETECTED REFERRAL_OPTIMIZATION_CREATED GROWTH_HEALTH_UPDATED GROWTH_INSIGHT_CREATED
Toutes les nuits Advocate Score Refresh Forecast Generation Influencer Detection Optimization Analysis Growth Health Refresh
À la fin du Sprint 8-C.2 :
✓ Referral Platform ✓ Advocacy Intelligence ✓ Influencer Detection ✓ Growth Analytics ✓ Referral Optimization ✓ Growth Health Score ✓ Growth Engine
sont entièrement opérationnels.
Compatible avec :
Business Intelligence Data Warehouse KPIs Reporting Executive Cockpit Enterprise Analytics
Le Sprint 8-C.2 est terminé lorsque :
✓ Advocate Score créé ✓ Referral Forecasting créé ✓ Influencer Detection créé ✓ Growth Intelligence créée ✓ Referral Optimization créée ✓ Growth Health Score créé ✓ Growth Engine finalisé
AdvocateScore ReferralForecast InfluencerProfile GrowthInsight GrowthHealthScore ReferralOptimization AdvocateScoreService ReferralForecastService InfluencerDetectionService GrowthAnalyticsService ReferralOptimizationService GrowthHealthScoreService GrowthInsightService Growth Intelligence Platform