Outils pour utilisateurs

Outils du site


ujusum:3-codage:1-repository:2-prisma-schema

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ujusum:3-codage:1-repository:2-prisma-schema [2026/06/07 18:55] 91.170.108.99ujusum:3-codage:1-repository:2-prisma-schema [2026/06/07 19:04] (Version actuelle) 91.170.108.99
Ligne 6253: Ligne 6253:
 ---- ----
  
-====== Étape suivante ======+====== Phase 2-K — Revenue Management & Tarification Dynamique ======
  
-===== Phase 2-K =====+===== Objectif =====
  
-Revenue Management Tarification Dynamique+Construire le moteur de Revenue Management de la plateforme. 
 + 
 +Ce domaine permettra : 
 + 
 +  * Tarification dynamique 
 +  * Yield Management 
 +  * Prévisions de revenus 
 +  * Analyse de la demande 
 +  * Analyse concurrentielle 
 +  * Optimisation automatique des prix 
 +  * Simulation financière 
 +  * Aide à la décision 
 + 
 +Cette phase couvre : 
 + 
 +<code> 
 +Sprint 10 — Reporting 
 + 
 +Sprint 13 — IA & Prévisions 
 + 
 +Sprint 17 — Revenue Management 
 + 
 +Sprint 20 — Enterprise Analytics 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture ====== 
 + 
 +===== Modèles =====
  
 <code> <code>
Ligne 6273: Ligne 6302:
 </code> </code>
  
-Cette phase couvrira :+----
  
-  * Sprint 10 Reporting +====== PricingRule ====== 
-  * Sprint 13 IA Prévisions + 
-  * Sprint 17 Revenue Management +===== Règle tarifaire ===== 
-  * Sprint 20 Enterprise Analytics+ 
 +Définit les règles d'ajustement automatique. 
 + 
 +<code prisma> 
 +model PricingRule { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  propertyId            String? 
 + 
 +  code                  String 
 + 
 +  name                  String 
 + 
 +  description           String? 
 + 
 +  priority              Int @default(100) 
 + 
 +  active                Boolean @default(true) 
 + 
 +  conditions            Json 
 + 
 +  actions               Json 
 + 
 +  validFrom             DateTime? 
 + 
 +  validTo               DateTime? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  property              Property? @relation( 
 +                            fields:[propertyId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@unique([tenantId, code]) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([propertyId]) 
 + 
 +  @@index([active]) 
 + 
 +  @@index([priority]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +Occupation > 80% 
 + 
 +↓ 
 + 
 ++15% 
 + 
 +---------------- 
 + 
 +Weekend 
 + 
 +↓ 
 + 
 ++10% 
 + 
 +---------------- 
 + 
 +Haute saison 
 + 
 +↓ 
 + 
 ++25% 
 +</code> 
 + 
 +---- 
 + 
 +====== DynamicPrice ====== 
 + 
 +===== Prix calculé ===== 
 + 
 +Prix final appliqué à une date donnée. 
 + 
 +<code prisma> 
 +model DynamicPrice { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  propertyId            String 
 + 
 +  pricingDate           DateTime 
 + 
 +  basePrice             Decimal @db.Decimal(12,2) 
 + 
 +  adjustedPrice         Decimal @db.Decimal(12,2) 
 + 
 +  occupancyFactor       Decimal? @db.Decimal(5,2) 
 + 
 +  seasonalityFactor     Decimal? @db.Decimal(5,2) 
 + 
 +  demandFactor          Decimal? @db.Decimal(5,2) 
 + 
 +  competitorFactor      Decimal? @db.Decimal(5,2) 
 + 
 +  generatedAt           DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  property              Property @relation( 
 +                            fields:[propertyId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@unique([ 
 +    propertyId, 
 +    pricingDate 
 +  ]) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([propertyId]) 
 + 
 +  @@index([pricingDate]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== RevenueForecast ====== 
 + 
 +===== Prévisions ===== 
 + 
 +Prévision de revenus futurs. 
 + 
 +<code prisma> 
 +model RevenueForecast { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  propertyId            String? 
 + 
 +  forecastDate          DateTime 
 + 
 +  forecastPeriodStart   DateTime 
 + 
 +  forecastPeriodEnd     DateTime 
 + 
 +  expectedRevenue       Decimal @db.Decimal(14,2) 
 + 
 +  expectedOccupancy     Decimal @db.Decimal(5,2) 
 + 
 +  confidenceLevel       Decimal @db.Decimal(5,2) 
 + 
 +  modelVersion          String? 
 + 
 +  generatedAt           DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  property              Property? @relation( 
 +                            fields:[propertyId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([propertyId]) 
 + 
 +  @@index([forecastDate]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== RevenueSimulation ====== 
 + 
 +===== Simulation ===== 
 + 
 +Analyse de scénarios. 
 + 
 +<code prisma> 
 +model RevenueSimulation { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  propertyId            String? 
 + 
 +  name                  String 
 + 
 +  assumptions           Json 
 + 
 +  projectedRevenue      Decimal @db.Decimal(14,2) 
 + 
 +  projectedOccupancy    Decimal @db.Decimal(5,2) 
 + 
 +  createdByUserId       String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  property              Property? @relation( 
 +                            fields:[propertyId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  createdByUser         User? @relation( 
 +                            fields:[createdByUserId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([propertyId]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemple ===== 
 + 
 +<code> 
 +Prix +10% 
 + 
 +↓ 
 + 
 +Occupation -3% 
 + 
 +↓ 
 + 
 +CA +6% 
 +</code> 
 + 
 +---- 
 + 
 +====== CompetitorSnapshot ====== 
 + 
 +===== Veille concurrentielle ===== 
 + 
 +Capture des prix concurrents. 
 + 
 +<code prisma> 
 +model CompetitorSnapshot { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  propertyId            String 
 + 
 +  competitorName        String 
 + 
 +  competitorPropertyId  String? 
 + 
 +  snapshotDate          DateTime 
 + 
 +  nightlyRate           Decimal @db.Decimal(12,2) 
 + 
 +  occupancy             Decimal? @db.Decimal(5,2) 
 + 
 +  source                String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  property              Property @relation( 
 +                            fields:[propertyId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([propertyId]) 
 + 
 +  @@index([snapshotDate]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== MarketDemand ====== 
 + 
 +===== Indicateurs marché ===== 
 + 
 +Mesure de la demande. 
 + 
 +<code prisma> 
 +model MarketDemand { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  regionCode            String 
 + 
 +  demandDate            DateTime 
 + 
 +  demandIndex           Decimal @db.Decimal(5,2) 
 + 
 +  occupancyIndex        Decimal @db.Decimal(5,2) 
 + 
 +  averageDailyRate      Decimal @db.Decimal(12,2) 
 + 
 +  source                String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([regionCode]) 
 + 
 +  @@index([demandDate]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Relations à ajouter ====== 
 + 
 +===== Property ===== 
 + 
 +<code prisma> 
 +pricingRules PricingRule[] 
 + 
 +dynamicPrices DynamicPrice[] 
 + 
 +revenueForecasts RevenueForecast[] 
 + 
 +revenueSimulations RevenueSimulation[] 
 + 
 +competitorSnapshots CompetitorSnapshot[] 
 +</code> 
 + 
 +---- 
 + 
 +===== Tenant ===== 
 + 
 +<code prisma> 
 +pricingRules PricingRule[] 
 + 
 +dynamicPrices DynamicPrice[] 
 + 
 +revenueForecasts RevenueForecast[] 
 + 
 +revenueSimulations RevenueSimulation[] 
 + 
 +marketDemands MarketDemand[] 
 +</code> 
 + 
 +---- 
 + 
 +====== Cas d'usage ====== 
 + 
 +===== Tarification dynamique ===== 
 + 
 +<code> 
 +Occupation 
 + 
 +
 + 
 +Saisonnalité 
 + 
 +
 + 
 +Concurrence 
 + 
 +
 + 
 +Demande 
 + 
 +↓ 
 + 
 +Prix optimal 
 +</code> 
 + 
 +---- 
 + 
 +===== Prévision ===== 
 + 
 +<code> 
 +Historique réservations 
 + 
 +↓ 
 + 
 +Forecast IA 
 + 
 +↓ 
 + 
 +Revenus prévus 
 +</code> 
 + 
 +---- 
 + 
 +===== Simulation ===== 
 + 
 +<code> 
 +Nouveau tarif 
 + 
 +↓ 
 + 
 +Simulation 
 + 
 +↓ 
 + 
 +Impact CA 
 +</code> 
 + 
 +---- 
 + 
 +====== Validation ====== 
 + 
 +<code bash> 
 +npx prisma format 
 + 
 +npx prisma validate 
 + 
 +npx prisma generate 
 +</code> 
 + 
 +---- 
 + 
 +====== Migration ====== 
 + 
 +<code bash> 
 +npx prisma migrate dev \ 
 +--name revenue_management 
 +</code> 
 + 
 +---- 
 + 
 +====== Fonctionnalités couvertes ====== 
 + 
 +===== Revenue Management ===== 
 + 
 +<code> 
 +Yield Management 
 + 
 +Dynamic Pricing 
 + 
 +Optimisation tarifaire 
 +</code> 
 + 
 +---- 
 + 
 +===== Analytics ===== 
 + 
 +<code> 
 +Forecast 
 + 
 +Simulation 
 + 
 +Benchmark concurrence 
 + 
 +Demand Analytics 
 +</code> 
 + 
 +---- 
 + 
 +===== IA ===== 
 + 
 +<code> 
 +Aide à la décision 
 + 
 +Prévisions 
 + 
 +Recommandations 
 +</code> 
 + 
 +---- 
 + 
 +====== État du schéma ====== 
 + 
 +Après Phase 2-K : 
 + 
 +<code> 
 +≈ 86 modèles Prisma 
 +</code> 
 + 
 +avec les domaines : 
 + 
 +<code> 
 +Core 
 + 
 +Security 
 + 
 +Properties 
 + 
 +Owners 
 + 
 +Customers 
 + 
 +Reservations 
 + 
 +Contracts 
 + 
 +Payments 
 + 
 +CRM 
 + 
 +Messaging 
 + 
 +Marketing 
 + 
 +Automation 
 + 
 +Governance 
 + 
 +OTA 
 + 
 +Revenue Management 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 2-L — Sécurité Enterprise & Conformité ====== 
 + 
 +===== Objectif ===== 
 + 
 +Construire la couche Enterprise de sécurité, conformité et gouvernance des données. 
 + 
 +Cette phase permettra : 
 + 
 +  Conformité RGPD 
 +  * Gestion des consentements 
 +  * Gestion des risques 
 +  * Gouvernance des données 
 +  * Classification des données 
 +  * Rétention réglementaire 
 +  * Gestion des incidents de sécurité 
 +  * Préparation ISO 27001 
 +  * Préparation SOC2 
 +  * Préparation NIS2 
 + 
 +Cette phase couvre : 
 + 
 +<code> 
 +Sprint 19 
 + 
 +Governance 
 + 
 +Compliance 
 + 
 +Enterprise Security 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture ====== 
 + 
 +===== Modèles ===== 
 + 
 +<code> 
 +Consent 
 + 
 +SecurityPolicy 
 + 
 +Risk 
 + 
 +ComplianceAudit 
 + 
 +SecurityIncident 
 + 
 +DataClassification 
 + 
 +RetentionPolicy 
 +</code> 
 + 
 +---- 
 + 
 +====== Consent ====== 
 + 
 +===== Gestion des consentements ===== 
 + 
 +Traçabilité complète des consentements utilisateurs. 
 + 
 +<code prisma> 
 +model Consent { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  customerId            String? 
 + 
 +  userId                String? 
 + 
 +  consentType           ConsentType 
 + 
 +  granted               Boolean 
 + 
 +  version               String 
 + 
 +  source                String? 
 + 
 +  ipAddress             String? 
 + 
 +  userAgent             String? 
 + 
 +  grantedAt             DateTime 
 + 
 +  revokedAt             DateTime? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  customer              Customer? @relation( 
 +                            fields:[customerId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  user                  User? @relation( 
 +                            fields:[userId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([customerId]) 
 + 
 +  @@index([userId]) 
 + 
 +  @@index([consentType]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== ConsentType ===== 
 + 
 +<code prisma> 
 +enum ConsentType { 
 + 
 +  GDPR 
 + 
 +  COOKIES 
 + 
 +  MARKETING_EMAIL 
 + 
 +  MARKETING_SMS 
 + 
 +  PROFILING 
 + 
 +  THIRD_PARTY_SHARING 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== SecurityPolicy ====== 
 + 
 +===== Politiques de sécurité ===== 
 + 
 +Configuration centralisée. 
 + 
 +<code prisma> 
 +model SecurityPolicy { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String? 
 + 
 +  code                  String @unique 
 + 
 +  name                  String 
 + 
 +  description           String? 
 + 
 +  configuration         Json 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  tenant                Tenant? @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([active]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +PASSWORD_POLICY 
 + 
 +SESSION_POLICY 
 + 
 +MFA_POLICY 
 + 
 +RETENTION_POLICY 
 + 
 +ACCESS_CONTROL_POLICY 
 +</code> 
 + 
 +---- 
 + 
 +====== Risk ====== 
 + 
 +===== Registre des risques ===== 
 + 
 +<code prisma> 
 +model Risk { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  code                  String 
 + 
 +  title                 String 
 + 
 +  description           String? 
 + 
 +  category              RiskCategory 
 + 
 +  probability           Int 
 + 
 +  impact                Int 
 + 
 +  score                 Int 
 + 
 +  mitigationPlan        String? 
 + 
 +  ownerUserId           String? 
 + 
 +  status                RiskStatus 
 + 
 +  identifiedAt          DateTime 
 + 
 +  reviewedAt            DateTime? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  ownerUser             User? @relation( 
 +                            fields:[ownerUserId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@unique([tenantId, code]) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([status]) 
 + 
 +  @@index([score]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== RiskCategory ===== 
 + 
 +<code prisma> 
 +enum RiskCategory { 
 + 
 +  SECURITY 
 + 
 +  COMPLIANCE 
 + 
 +  OPERATIONAL 
 + 
 +  FINANCIAL 
 + 
 +  LEGAL 
 + 
 +  TECHNICAL 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== RiskStatus ===== 
 + 
 +<code prisma> 
 +enum RiskStatus { 
 + 
 +  IDENTIFIED 
 + 
 +  ASSESSED 
 + 
 +  MITIGATED 
 + 
 +  ACCEPTED 
 + 
 +  CLOSED 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== ComplianceAudit ====== 
 + 
 +===== Audits réglementaires ===== 
 + 
 +<code prisma> 
 +model ComplianceAudit { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  auditType             ComplianceAuditType 
 + 
 +  scope                 String? 
 + 
 +  status                ComplianceAuditStatus 
 + 
 +  auditor               String? 
 + 
 +  findings              Json? 
 + 
 +  recommendations       Json? 
 + 
 +  startedAt             DateTime 
 + 
 +  completedAt           DateTime? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([auditType]) 
 + 
 +  @@index([status]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== ComplianceAuditType ===== 
 + 
 +<code prisma> 
 +enum ComplianceAuditType { 
 + 
 +  GDPR 
 + 
 +  ISO27001 
 + 
 +  SOC2 
 + 
 +  NIS2 
 + 
 +  INTERNAL 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== ComplianceAuditStatus ===== 
 + 
 +<code prisma> 
 +enum ComplianceAuditStatus { 
 + 
 +  PLANNED 
 + 
 +  RUNNING 
 + 
 +  COMPLETED 
 + 
 +  CLOSED 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== SecurityIncident ====== 
 + 
 +===== Gestion des incidents ===== 
 + 
 +<code prisma> 
 +model SecurityIncident { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  code                  String 
 + 
 +  title                 String 
 + 
 +  description           String? 
 + 
 +  severity              IncidentSeverity 
 + 
 +  status                IncidentStatus 
 + 
 +  detectedAt            DateTime 
 + 
 +  resolvedAt            DateTime? 
 + 
 +  reportedByUserId      String? 
 + 
 +  rootCause             String? 
 + 
 +  correctiveActions     String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  reportedByUser        User? @relation( 
 +                            fields:[reportedByUserId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@unique([tenantId, code]) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([severity]) 
 + 
 +  @@index([status]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== IncidentSeverity ===== 
 + 
 +<code prisma> 
 +enum IncidentSeverity { 
 + 
 +  LOW 
 + 
 +  MEDIUM 
 + 
 +  HIGH 
 + 
 +  CRITICAL 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== IncidentStatus ===== 
 + 
 +<code prisma> 
 +enum IncidentStatus { 
 + 
 +  OPEN 
 + 
 +  INVESTIGATING 
 + 
 +  MITIGATED 
 + 
 +  RESOLVED 
 + 
 +  CLOSED 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== DataClassification ====== 
 + 
 +===== Classification des données ===== 
 + 
 +<code prisma> 
 +model DataClassification { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  code                  String @unique 
 + 
 +  name                  String 
 + 
 +  description           String? 
 + 
 +  level                 ClassificationLevel 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== ClassificationLevel ===== 
 + 
 +<code prisma> 
 +enum ClassificationLevel { 
 + 
 +  PUBLIC 
 + 
 +  INTERNAL 
 + 
 +  CONFIDENTIAL 
 + 
 +  RESTRICTED 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +Client 
 + 
 +→ CONFIDENTIAL 
 + 
 +---------------- 
 + 
 +Paiement 
 + 
 +→ RESTRICTED 
 + 
 +---------------- 
 + 
 +Catalogue public 
 + 
 +→ PUBLIC 
 +</code> 
 + 
 +---- 
 + 
 +====== RetentionPolicy ====== 
 + 
 +===== Politique de conservation ===== 
 + 
 +<code prisma> 
 +model RetentionPolicy { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String? 
 + 
 +  code                  String @unique 
 + 
 +  entityType            String 
 + 
 +  retentionDays         Int 
 + 
 +  archiveBeforeDelete   Boolean @default(true) 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant? @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([entityType]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +AuditLog 
 + 
 +3650 jours 
 + 
 +---------------- 
 + 
 +LoginHistory 
 + 
 +365 jours 
 + 
 +---------------- 
 + 
 +MarketingEvent 
 + 
 +1095 jours 
 + 
 +---------------- 
 + 
 +Consent 
 + 
 +1825 jours 
 +</code> 
 + 
 +---- 
 + 
 +====== Relations à ajouter ====== 
 + 
 +===== Tenant ===== 
 + 
 +<code prisma> 
 +consents Consent[] 
 + 
 +securityPolicies SecurityPolicy[] 
 + 
 +risks Risk[] 
 + 
 +complianceAudits ComplianceAudit[] 
 + 
 +securityIncidents SecurityIncident[] 
 + 
 +retentionPolicies RetentionPolicy[] 
 +</code> 
 + 
 +---- 
 + 
 +===== User ===== 
 + 
 +<code prisma> 
 +consents Consent[] 
 + 
 +ownedRisks Risk[] 
 + 
 +reportedIncidents SecurityIncident[] 
 +</code> 
 + 
 +---- 
 + 
 +===== Customer ===== 
 + 
 +<code prisma> 
 +consents Consent[] 
 +</code> 
 + 
 +---- 
 + 
 +====== Validation ====== 
 + 
 +<code bash> 
 +npx prisma format 
 + 
 +npx prisma validate 
 + 
 +npx prisma generate 
 +</code> 
 + 
 +---- 
 + 
 +====== Migration ====== 
 + 
 +<code bash> 
 +npx prisma migrate dev \ 
 +--name enterprise_security_compliance 
 +</code> 
 + 
 +---- 
 + 
 +====== Fonctionnalités couvertes ====== 
 + 
 +===== RGPD ===== 
 + 
 +<code> 
 +Consentements 
 + 
 +Traçabilité 
 + 
 +Conservation 
 + 
 +Export 
 + 
 +Suppression 
 +</code> 
 + 
 +---- 
 + 
 +===== Sécurité ===== 
 + 
 +<code> 
 +Politiques 
 + 
 +Incidents 
 + 
 +MFA 
 + 
 +Gestion des risques 
 +</code> 
 + 
 +---- 
 + 
 +===== Gouvernance ===== 
 + 
 +<code> 
 +Classification 
 + 
 +Rétention 
 + 
 +Audit 
 + 
 +Conformité 
 +</code> 
 + 
 +---- 
 + 
 +====== État du schéma ====== 
 + 
 +Après Phase 2-L : 
 + 
 +<code> 
 +≈ 93 modèles Prisma 
 +</code> 
 + 
 +avec les domaines : 
 + 
 +<code> 
 +Core 
 + 
 +Security 
 + 
 +Properties 
 + 
 +Owners 
 + 
 +Customers 
 + 
 +Reservations 
 + 
 +Contracts 
 + 
 +Payments 
 + 
 +CRM 
 + 
 +Messaging 
 + 
 +Marketing 
 + 
 +Automation 
 + 
 +Governance 
 + 
 +OTA 
 + 
 +Revenue Management 
 + 
 +Enterprise Security 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 2-M — Internationalisation & Multi-régions ====== 
 + 
 +===== Objectif ===== 
 + 
 +Transformer la plateforme en solution SaaS internationale capable de gérer : 
 + 
 +  * Plusieurs langues 
 +  * Plusieurs devises 
 +  * Plusieurs pays 
 +  * Plusieurs fuseaux horaires 
 +  * Plusieurs régions d'exploitation 
 +  * Plusieurs marques 
 +  * Plusieurs réseaux d'agences 
 +  * Plusieurs juridictions 
 + 
 +Cette phase couvre : 
 + 
 +<code> 
 +Sprint 15 — Réseau d'agences 
 + 
 +Sprint 20 — Internationalisation 
 + 
 +Enterprise SaaS 
 + 
 +Commercialisation internationale 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture ====== 
 + 
 +===== Modèles ===== 
 + 
 +<code> 
 +Country 
 + 
 +Currency 
 + 
 +Language 
 + 
 +Timezone 
 + 
 +CurrencyRate 
 + 
 +Translation 
 + 
 +Region 
 + 
 +EnterpriseLicense 
 +</code> 
 + 
 +---- 
 + 
 +====== Country ====== 
 + 
 +===== Référentiel pays ===== 
 + 
 +Norme ISO 3166. 
 + 
 +<code prisma> 
 +model Country { 
 + 
 +  code                  String @id 
 + 
 +  iso3                  String @unique 
 + 
 +  name                  String 
 + 
 +  nativeName            String? 
 + 
 +  phonePrefix           String? 
 + 
 +  euMember              Boolean @default(false) 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  regions               Region[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +FR 
 + 
 +BE 
 + 
 +CH 
 + 
 +ES 
 + 
 +IT 
 + 
 +DE 
 + 
 +UK 
 + 
 +US 
 + 
 +CA 
 +</code> 
 + 
 +---- 
 + 
 +====== Currency ====== 
 + 
 +===== Référentiel devises ===== 
 + 
 +Norme ISO 4217. 
 + 
 +<code prisma> 
 +model Currency { 
 + 
 +  code                  String @id 
 + 
 +  numericCode           String? 
 + 
 +  name                  String 
 + 
 +  symbol                String 
 + 
 +  decimalPlaces         Int @default(2) 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  rates                 CurrencyRate[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +EUR 
 + 
 +USD 
 + 
 +GBP 
 + 
 +CHF 
 + 
 +CAD 
 +</code> 
 + 
 +---- 
 + 
 +====== Language ====== 
 + 
 +===== Référentiel langues ===== 
 + 
 +Norme ISO 639. 
 + 
 +<code prisma> 
 +model Language { 
 + 
 +  code                  String @id 
 + 
 +  name                  String 
 + 
 +  nativeName            String 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  translations          Translation[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +fr 
 + 
 +en 
 + 
 +de 
 + 
 +es 
 + 
 +it 
 + 
 +nl 
 +</code> 
 + 
 +---- 
 + 
 +====== Timezone ====== 
 + 
 +===== Fuseaux horaires ===== 
 + 
 +<code prisma> 
 +model Timezone { 
 + 
 +  id                    String @id 
 + 
 +  displayName           String 
 + 
 +  utcOffset             String 
 + 
 +  active                Boolean @default(true) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +Europe/Paris 
 + 
 +Europe/London 
 + 
 +America/New_York 
 + 
 +America/Montreal 
 + 
 +Asia/Tokyo 
 +</code> 
 + 
 +---- 
 + 
 +====== CurrencyRate ====== 
 + 
 +===== Taux de change ===== 
 + 
 +Historisation des taux. 
 + 
 +<code prisma> 
 +model CurrencyRate { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  fromCurrencyCode      String 
 + 
 +  toCurrencyCode        String 
 + 
 +  rate                  Decimal @db.Decimal(18,8) 
 + 
 +  rateDate              DateTime 
 + 
 +  source                String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  fromCurrency          Currency 
 +                          @relation( 
 +                            "FromCurrency", 
 +                            fields:[fromCurrencyCode], 
 +                            references:[code] 
 +                          ) 
 + 
 +  toCurrency            Currency 
 +                          @relation( 
 +                            "ToCurrency", 
 +                            fields:[toCurrencyCode], 
 +                            references:[code] 
 +                          ) 
 + 
 +  @@unique([ 
 +    fromCurrencyCode, 
 +    toCurrencyCode, 
 +    rateDate 
 +  ]) 
 + 
 +  @@index([rateDate]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Translation ====== 
 + 
 +===== Traductions ===== 
 + 
 +Permet l'internationalisation dynamique. 
 + 
 +<code prisma> 
 +model Translation { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  languageCode          String 
 + 
 +  namespace             String 
 + 
 +  translationKey        String 
 + 
 +  translationValue      String 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  language              Language @relation( 
 +                            fields:[languageCode], 
 +                            references:[code] 
 +                         ) 
 + 
 +  @@unique([ 
 +    languageCode, 
 +    namespace, 
 +    translationKey 
 +  ]) 
 + 
 +  @@index([namespace]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +property.title 
 + 
 +reservation.confirm 
 + 
 +payment.invoice 
 +</code> 
 + 
 +---- 
 + 
 +====== Region ====== 
 + 
 +===== Régions d'exploitation ===== 
 + 
 +Permet la gestion géographique. 
 + 
 +<code prisma> 
 +model Region { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  countryCode           String 
 + 
 +  code                  String 
 + 
 +  name                  String 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  country               Country @relation( 
 +                            fields:[countryCode], 
 +                            references:[code] 
 +                         ) 
 + 
 +  @@unique([ 
 +    countryCode, 
 +    code 
 +  ]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +FR_OCCITANIE 
 + 
 +FR_PACA 
 + 
 +FR_IDF 
 + 
 +ES_CATALUNYA 
 + 
 +US_FLORIDA 
 +</code> 
 + 
 +---- 
 + 
 +====== EnterpriseLicense ====== 
 + 
 +===== Licence SaaS Enterprise ===== 
 + 
 +Gestion des déploiements internationaux. 
 + 
 +<code prisma> 
 +model EnterpriseLicense { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  licenseKey            String @unique 
 + 
 +  edition               EnterpriseEdition 
 + 
 +  maxUsers              Int? 
 + 
 +  maxProperties         Int? 
 + 
 +  maxAgencies           Int? 
 + 
 +  validFrom             DateTime 
 + 
 +  validTo               DateTime? 
 + 
 +  active                Boolean @default(true) 
 + 
 +  features              Json? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([active]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== EnterpriseEdition ===== 
 + 
 +<code prisma> 
 +enum EnterpriseEdition { 
 + 
 +  COMMUNITY 
 + 
 +  PROFESSIONAL 
 + 
 +  BUSINESS 
 + 
 +  ENTERPRISE 
 + 
 +  ENTERPRISE_PLUS 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Évolutions du modèle Tenant ====== 
 + 
 +===== Tenant ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +countryCode String? 
 + 
 +currencyCode String? 
 + 
 +languageCode String? 
 + 
 +timezoneId String? 
 + 
 +enterpriseLicense EnterpriseLicense? 
 +</code> 
 + 
 +---- 
 + 
 +===== Relations ===== 
 + 
 +<code prisma> 
 +country Country? 
 + 
 +currency Currency? 
 + 
 +language Language? 
 + 
 +timezone Timezone? 
 +</code> 
 + 
 +---- 
 + 
 +====== Évolutions du modèle Property ====== 
 + 
 +===== Property ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +currencyCode String? 
 +</code> 
 + 
 +---- 
 + 
 +===== Relation ===== 
 + 
 +<code prisma> 
 +currency Currency? 
 +</code> 
 + 
 +---- 
 + 
 +====== Évolutions du modèle Reservation ====== 
 + 
 +===== Reservation ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +currencyCode String? 
 +exchangeRate Decimal? 
 +</code> 
 + 
 +---- 
 + 
 +====== Cas d'usage ====== 
 + 
 +===== Multi-langues ===== 
 + 
 +<code> 
 +FR 
 + 
 +↓ 
 + 
 +EN 
 + 
 +↓ 
 + 
 +DE 
 + 
 +↓ 
 + 
 +ES 
 +</code> 
 + 
 +---- 
 + 
 +===== Multi-devises ===== 
 + 
 +<code> 
 +EUR 
 + 
 +↓ 
 + 
 +USD 
 + 
 +↓ 
 + 
 +GBP 
 + 
 +↓ 
 + 
 +CHF 
 +</code> 
 + 
 +---- 
 + 
 +===== Multi-régions ===== 
 + 
 +<code> 
 +France 
 + 
 +↓ 
 + 
 +Occitanie 
 + 
 +↓ 
 + 
 +Agence 
 + 
 +↓ 
 + 
 +Biens 
 +</code> 
 + 
 +---- 
 + 
 +===== Réseau international ===== 
 + 
 +<code> 
 +Tenant 
 + 
 +↓ 
 + 
 +Multi-marques 
 + 
 +↓ 
 + 
 +Multi-pays 
 + 
 +↓ 
 + 
 +Multi-régions 
 +</code> 
 + 
 +---- 
 + 
 +====== Validation ====== 
 + 
 +<code bash> 
 +npx prisma format 
 + 
 +npx prisma validate 
 + 
 +npx prisma generate 
 +</code> 
 + 
 +---- 
 + 
 +====== Migration ====== 
 + 
 +<code bash> 
 +npx prisma migrate dev \ 
 +--name internationalization_multiregion 
 +</code> 
 + 
 +---- 
 + 
 +====== Fonctionnalités couvertes ====== 
 + 
 +===== Internationalisation ===== 
 + 
 +<code> 
 +Multi-langues 
 + 
 +Multi-devises 
 + 
 +Multi-fuseaux 
 +</code> 
 + 
 +---- 
 + 
 +===== Réseau ===== 
 + 
 +<code> 
 +Multi-pays 
 + 
 +Multi-régions 
 + 
 +Multi-agences 
 +</code> 
 + 
 +---- 
 + 
 +===== Enterprise ===== 
 + 
 +<code> 
 +Licensing 
 + 
 +Commercialisation 
 + 
 +SaaS mondial 
 +</code> 
 + 
 +---- 
 + 
 +====== État du schéma ====== 
 + 
 +Après Phase 2-M : 
 + 
 +<code> 
 +≈ 101 modèles Prisma 
 +</code> 
 + 
 +avec les domaines : 
 + 
 +<code> 
 +Core 
 + 
 +Security 
 + 
 +Properties 
 + 
 +Owners 
 + 
 +Customers 
 + 
 +Reservations 
 + 
 +Contracts 
 + 
 +Payments 
 + 
 +CRM 
 + 
 +Messaging 
 + 
 +Marketing 
 + 
 +Automation 
 + 
 +Governance 
 + 
 +OTA 
 + 
 +Revenue Management 
 + 
 +Enterprise Security 
 + 
 +Internationalization 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 2-M — Internationalisation Multi-régions ====== 
 + 
 +===== Objectif ===== 
 + 
 +Transformer la plateforme en solution SaaS internationale capable de gérer : 
 + 
 +  * Plusieurs langues 
 +  * Plusieurs devises 
 +  * Plusieurs pays 
 +  * Plusieurs fuseaux horaires 
 +  * Plusieurs régions d'exploitation 
 +  * Plusieurs marques 
 +  * Plusieurs réseaux d'agences 
 +  * Plusieurs juridictions 
 + 
 +Cette phase couvre : 
 + 
 +<code> 
 +Sprint 15 — Réseau d'agences 
 + 
 +Sprint 20 — Internationalisation 
 + 
 +Enterprise SaaS 
 + 
 +Commercialisation internationale 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture ====== 
 + 
 +===== Modèles ===== 
 + 
 +<code> 
 +Country 
 + 
 +Currency 
 + 
 +Language 
 + 
 +Timezone 
 + 
 +CurrencyRate 
 + 
 +Translation 
 + 
 +Region 
 + 
 +EnterpriseLicense 
 +</code> 
 + 
 +---- 
 + 
 +====== Country ====== 
 + 
 +===== Référentiel pays ===== 
 + 
 +Norme ISO 3166. 
 + 
 +<code prisma> 
 +model Country { 
 + 
 +  code                  String @id 
 + 
 +  iso3                  String @unique 
 + 
 +  name                  String 
 + 
 +  nativeName            String? 
 + 
 +  phonePrefix           String? 
 + 
 +  euMember              Boolean @default(false) 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  regions               Region[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +FR 
 + 
 +BE 
 + 
 +CH 
 + 
 +ES 
 + 
 +IT 
 + 
 +DE 
 + 
 +UK 
 + 
 +US 
 + 
 +CA 
 +</code> 
 + 
 +---- 
 + 
 +====== Currency ====== 
 + 
 +===== Référentiel devises ===== 
 + 
 +Norme ISO 4217. 
 + 
 +<code prisma> 
 +model Currency { 
 + 
 +  code                  String @id 
 + 
 +  numericCode           String? 
 + 
 +  name                  String 
 + 
 +  symbol                String 
 + 
 +  decimalPlaces         Int @default(2) 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  rates                 CurrencyRate[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +EUR 
 + 
 +USD 
 + 
 +GBP 
 + 
 +CHF 
 + 
 +CAD 
 +</code> 
 + 
 +---- 
 + 
 +====== Language ====== 
 + 
 +===== Référentiel langues ===== 
 + 
 +Norme ISO 639. 
 + 
 +<code prisma> 
 +model Language { 
 + 
 +  code                  String @id 
 + 
 +  name                  String 
 + 
 +  nativeName            String 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  translations          Translation[] 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +fr 
 + 
 +en 
 + 
 +de 
 + 
 +es 
 + 
 +it 
 + 
 +nl 
 +</code> 
 + 
 +---- 
 + 
 +====== Timezone ====== 
 + 
 +===== Fuseaux horaires ===== 
 + 
 +<code prisma> 
 +model Timezone { 
 + 
 +  id                    String @id 
 + 
 +  displayName           String 
 + 
 +  utcOffset             String 
 + 
 +  active                Boolean @default(true) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +Europe/Paris 
 + 
 +Europe/London 
 + 
 +America/New_York 
 + 
 +America/Montreal 
 + 
 +Asia/Tokyo 
 +</code> 
 + 
 +---- 
 + 
 +====== CurrencyRate ====== 
 + 
 +===== Taux de change ===== 
 + 
 +Historisation des taux. 
 + 
 +<code prisma> 
 +model CurrencyRate { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  fromCurrencyCode      String 
 + 
 +  toCurrencyCode        String 
 + 
 +  rate                  Decimal @db.Decimal(18,8) 
 + 
 +  rateDate              DateTime 
 + 
 +  source                String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  fromCurrency          Currency 
 +                          @relation( 
 +                            "FromCurrency", 
 +                            fields:[fromCurrencyCode], 
 +                            references:[code] 
 +                          ) 
 + 
 +  toCurrency            Currency 
 +                          @relation( 
 +                            "ToCurrency", 
 +                            fields:[toCurrencyCode], 
 +                            references:[code] 
 +                          ) 
 + 
 +  @@unique([ 
 +    fromCurrencyCode, 
 +    toCurrencyCode, 
 +    rateDate 
 +  ]) 
 + 
 +  @@index([rateDate]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Translation ====== 
 + 
 +===== Traductions ===== 
 + 
 +Permet l'internationalisation dynamique. 
 + 
 +<code prisma> 
 +model Translation { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  languageCode          String 
 + 
 +  namespace             String 
 + 
 +  translationKey        String 
 + 
 +  translationValue      String 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  language              Language @relation( 
 +                            fields:[languageCode], 
 +                            references:[code] 
 +                         ) 
 + 
 +  @@unique([ 
 +    languageCode, 
 +    namespace, 
 +    translationKey 
 +  ]) 
 + 
 +  @@index([namespace]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +property.title 
 + 
 +reservation.confirm 
 + 
 +payment.invoice 
 +</code> 
 + 
 +---- 
 + 
 +====== Region ====== 
 + 
 +===== Régions d'exploitation ===== 
 + 
 +Permet la gestion géographique. 
 + 
 +<code prisma> 
 +model Region { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  countryCode           String 
 + 
 +  code                  String 
 + 
 +  name                  String 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  country               Country @relation( 
 +                            fields:[countryCode], 
 +                            references:[code] 
 +                         ) 
 + 
 +  @@unique([ 
 +    countryCode, 
 +    code 
 +  ]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +FR_OCCITANIE 
 + 
 +FR_PACA 
 + 
 +FR_IDF 
 + 
 +ES_CATALUNYA 
 + 
 +US_FLORIDA 
 +</code> 
 + 
 +---- 
 + 
 +====== EnterpriseLicense ====== 
 + 
 +===== Licence SaaS Enterprise ===== 
 + 
 +Gestion des déploiements internationaux. 
 + 
 +<code prisma> 
 +model EnterpriseLicense { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  licenseKey            String @unique 
 + 
 +  edition               EnterpriseEdition 
 + 
 +  maxUsers              Int? 
 + 
 +  maxProperties         Int? 
 + 
 +  maxAgencies           Int? 
 + 
 +  validFrom             DateTime 
 + 
 +  validTo               DateTime? 
 + 
 +  active                Boolean @default(true) 
 + 
 +  features              Json? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([active]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== EnterpriseEdition ===== 
 + 
 +<code prisma> 
 +enum EnterpriseEdition { 
 + 
 +  COMMUNITY 
 + 
 +  PROFESSIONAL 
 + 
 +  BUSINESS 
 + 
 +  ENTERPRISE 
 + 
 +  ENTERPRISE_PLUS 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Évolutions du modèle Tenant ====== 
 + 
 +===== Tenant ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +countryCode String? 
 + 
 +currencyCode String? 
 + 
 +languageCode String? 
 + 
 +timezoneId String? 
 + 
 +enterpriseLicense EnterpriseLicense? 
 +</code> 
 + 
 +---- 
 + 
 +===== Relations ===== 
 + 
 +<code prisma> 
 +country Country? 
 + 
 +currency Currency? 
 + 
 +language Language? 
 + 
 +timezone Timezone? 
 +</code> 
 + 
 +---- 
 + 
 +====== Évolutions du modèle Property ====== 
 + 
 +===== Property ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +currencyCode String? 
 +</code> 
 + 
 +---- 
 + 
 +===== Relation ===== 
 + 
 +<code prisma> 
 +currency Currency? 
 +</code> 
 + 
 +---- 
 + 
 +====== Évolutions du modèle Reservation ====== 
 + 
 +===== Reservation ===== 
 + 
 +Ajouter : 
 + 
 +<code prisma> 
 +currencyCode String? 
 +exchangeRate Decimal? 
 +</code> 
 + 
 +---- 
 + 
 +====== Cas d'usage ====== 
 + 
 +===== Multi-langues ===== 
 + 
 +<code> 
 +FR 
 + 
 +↓ 
 + 
 +EN 
 + 
 +↓ 
 + 
 +DE 
 + 
 +↓ 
 + 
 +ES 
 +</code> 
 + 
 +---- 
 + 
 +===== Multi-devises ===== 
 + 
 +<code> 
 +EUR 
 + 
 +↓ 
 + 
 +USD 
 + 
 +↓ 
 + 
 +GBP 
 + 
 +↓ 
 + 
 +CHF 
 +</code> 
 + 
 +---- 
 + 
 +===== Multi-régions ===== 
 + 
 +<code> 
 +France 
 + 
 +↓ 
 + 
 +Occitanie 
 + 
 +↓ 
 + 
 +Agence 
 + 
 +↓ 
 + 
 +Biens 
 +</code> 
 + 
 +---- 
 + 
 +===== Réseau international ===== 
 + 
 +<code> 
 +Tenant 
 + 
 +↓ 
 + 
 +Multi-marques 
 + 
 +↓ 
 + 
 +Multi-pays 
 + 
 +↓ 
 + 
 +Multi-régions 
 +</code> 
 + 
 +---- 
 + 
 +====== Validation ====== 
 + 
 +<code bash> 
 +npx prisma format 
 + 
 +npx prisma validate 
 + 
 +npx prisma generate 
 +</code> 
 + 
 +---- 
 + 
 +====== Migration ====== 
 + 
 +<code bash> 
 +npx prisma migrate dev \ 
 +--name internationalization_multiregion 
 +</code> 
 + 
 +---- 
 + 
 +====== Fonctionnalités couvertes ====== 
 + 
 +===== Internationalisation ===== 
 + 
 +<code> 
 +Multi-langues 
 + 
 +Multi-devises 
 + 
 +Multi-fuseaux 
 +</code> 
 + 
 +---- 
 + 
 +===== Réseau ===== 
 + 
 +<code> 
 +Multi-pays 
 + 
 +Multi-régions 
 + 
 +Multi-agences 
 +</code> 
 + 
 +---- 
 + 
 +===== Enterprise ===== 
 + 
 +<code> 
 +Licensing 
 + 
 +Commercialisation 
 + 
 +SaaS mondial 
 +</code> 
 + 
 +---- 
 + 
 +====== État du schéma ====== 
 + 
 +Après Phase 2-M : 
 + 
 +<code> 
 +≈ 101 modèles Prisma 
 +</code> 
 + 
 +avec les domaines : 
 + 
 +<code> 
 +Core 
 + 
 +Security 
 + 
 +Properties 
 + 
 +Owners 
 + 
 +Customers 
 + 
 +Reservations 
 + 
 +Contracts 
 + 
 +Payments 
 + 
 +CRM 
 + 
 +Messaging 
 + 
 +Marketing 
 + 
 +Automation 
 + 
 +Governance 
 + 
 +OTA 
 + 
 +Revenue Management 
 + 
 +Enterprise Security 
 + 
 +Internationalization 
 +</code> 
 + 
 +---- 
 + 
 +====== Phase 2-N — IA, Knowledge Base & Automatisation Avancée ====== 
 + 
 +===== Objectif ===== 
 + 
 +Construire la couche d'intelligence artificielle de la plateforme. 
 + 
 +Cette couche permettra : 
 + 
 +  * Assistant IA interne 
 +  * Recherche sémantique 
 +  * Base de connaissances 
 +  * Recommandations intelligentes 
 +  * Analyse documentaire 
 +  * Automatisation avancée 
 +  * Aide à la décision 
 +  * Support opérationnel 
 + 
 +Cette phase finalise : 
 + 
 +<code> 
 +Sprint 13 — IA & Automatisation 
 + 
 +Sprint 20 — Enterprise Analytics 
 +</code> 
 + 
 +---- 
 + 
 +====== Architecture ====== 
 + 
 +===== Modèles ===== 
 + 
 +<code> 
 +AiConversation 
 + 
 +AiMessage 
 + 
 +KnowledgeDocument 
 + 
 +KnowledgeChunk 
 + 
 +AutomationScenario 
 + 
 +AutomationExecution 
 + 
 +Recommendation 
 +</code> 
 + 
 +---- 
 + 
 +====== AiConversation ====== 
 + 
 +===== Conversations IA ===== 
 + 
 +Historisation des échanges avec l'assistant. 
 + 
 +<code prisma> 
 +model AiConversation { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  userId                String 
 + 
 +  title                 String? 
 + 
 +  modelName             String 
 + 
 +  contextType           String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  user                  User @relation( 
 +                            fields:[userId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  messages              AiMessage[] 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([userId]) 
 + 
 +  @@index([createdAt]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +Analyse réservations 
 + 
 +Prévision revenus 
 + 
 +Recherche client 
 + 
 +Analyse contrat 
 + 
 +Support utilisateur 
 +</code> 
 + 
 +---- 
 + 
 +====== AiMessage ====== 
 + 
 +===== Messages IA ===== 
 + 
 +<code prisma> 
 +model AiMessage { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  conversationId        String 
 + 
 +  role                  AiRole 
 + 
 +  content               String 
 + 
 +  tokenCount            Int? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  conversation          AiConversation 
 +                          @relation( 
 +                            fields:[conversationId], 
 +                            references:[id] 
 +                          ) 
 + 
 +  @@index([conversationId]) 
 + 
 +  @@index([createdAt]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== AiRole ===== 
 + 
 +<code prisma> 
 +enum AiRole { 
 + 
 +  SYSTEM 
 + 
 +  USER 
 + 
 +  ASSISTANT 
 + 
 +  TOOL 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== KnowledgeDocument ====== 
 + 
 +===== Base documentaire ===== 
 + 
 +Documents utilisés par l'IA. 
 + 
 +<code prisma> 
 +model KnowledgeDocument { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  documentId            String? 
 + 
 +  title                 String 
 + 
 +  sourceType            KnowledgeSourceType 
 + 
 +  sourceReference       String? 
 + 
 +  content               String? 
 + 
 +  metadata              Json? 
 + 
 +  indexed               Boolean @default(false) 
 + 
 +  indexedAt             DateTime? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  document              Document? @relation( 
 +                            fields:[documentId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  chunks                KnowledgeChunk[] 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([indexed]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== KnowledgeSourceType ===== 
 + 
 +<code prisma> 
 +enum KnowledgeSourceType { 
 + 
 +  DOCUMENT 
 + 
 +  CONTRACT 
 + 
 +  FAQ 
 + 
 +  WEBSITE 
 + 
 +  POLICY 
 + 
 +  PROCEDURE 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== KnowledgeChunk ====== 
 + 
 +===== Découpage vectoriel ===== 
 + 
 +Préparation RAG. 
 + 
 +<code prisma> 
 +model KnowledgeChunk { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  knowledgeDocumentId   String 
 + 
 +  chunkIndex            Int 
 + 
 +  content               String 
 + 
 +  embeddingId           String? 
 + 
 +  metadata              Json? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  knowledgeDocument     KnowledgeDocument 
 +                          @relation( 
 +                            fields:[knowledgeDocumentId], 
 +                            references:[id] 
 +                          ) 
 + 
 +  @@unique([ 
 +    knowledgeDocumentId, 
 +    chunkIndex 
 +  ]) 
 + 
 +  @@index([knowledgeDocumentId]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== AutomationScenario ====== 
 + 
 +===== Automatisations avancées ===== 
 + 
 +Version métier évoluée de : 
 + 
 +<code> 
 +AutomationRule 
 +</code> 
 + 
 +<code prisma> 
 +model AutomationScenario { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  code                  String 
 + 
 +  name                  String 
 + 
 +  description           String? 
 + 
 +  triggerType           String 
 + 
 +  configuration         Json 
 + 
 +  active                Boolean @default(true) 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  updatedAt             DateTime @updatedAt 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  executions            AutomationExecution[] 
 + 
 +  @@unique([tenantId, code]) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([active]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== Exemples ===== 
 + 
 +<code> 
 +ReservationConfirmed 
 + 
 +↓ 
 + 
 +SendContract 
 + 
 +↓ 
 + 
 +CreateTask 
 + 
 +↓ 
 + 
 +NotifyOwner 
 + 
 +---------------- 
 + 
 +PaymentReceived 
 + 
 +↓ 
 + 
 +GenerateInvoice 
 + 
 +↓ 
 + 
 +NotifyCustomer 
 +</code> 
 + 
 +---- 
 + 
 +====== AutomationExecution ====== 
 + 
 +===== Historique d'exécution ===== 
 + 
 +Extension du modèle existant. 
 + 
 +<code prisma> 
 +model AutomationExecution { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  automationScenarioId  String? 
 + 
 +  automationRuleId      String? 
 + 
 +  status                ExecutionStatus 
 + 
 +  entityType            String? 
 + 
 +  entityId              String? 
 + 
 +  executionContext      Json? 
 + 
 +  startedAt             DateTime 
 + 
 +  completedAt           DateTime? 
 + 
 +  errorMessage          String? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  automationScenario    AutomationScenario? 
 +                          @relation( 
 +                            fields:[automationScenarioId], 
 +                            references:[id] 
 +                          ) 
 + 
 +  automationRule        AutomationRule? 
 +                          @relation( 
 +                            fields:[automationRuleId], 
 +                            references:[id] 
 +                          ) 
 + 
 +  @@index([automationScenarioId]) 
 + 
 +  @@index([automationRuleId]) 
 + 
 +  @@index([status]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Recommendation ====== 
 + 
 +===== Recommandations IA ===== 
 + 
 +Aide à la décision. 
 + 
 +<code prisma> 
 +model Recommendation { 
 + 
 +  id                    String @id @default(uuid()) 
 + 
 +  tenantId              String 
 + 
 +  entityType            String 
 + 
 +  entityId              String 
 + 
 +  recommendationType    RecommendationType 
 + 
 +  title                 String 
 + 
 +  description           String 
 + 
 +  confidenceScore       Decimal @db.Decimal(5,2) 
 + 
 +  accepted              Boolean? 
 + 
 +  acceptedAt            DateTime? 
 + 
 +  createdAt             DateTime @default(now()) 
 + 
 +  tenant                Tenant @relation( 
 +                            fields:[tenantId], 
 +                            references:[id] 
 +                         ) 
 + 
 +  @@index([tenantId]) 
 + 
 +  @@index([entityType]) 
 + 
 +  @@index([recommendationType]) 
 + 
 +  @@index([confidenceScore]) 
 +
 +</code> 
 + 
 +---- 
 + 
 +===== RecommendationType ===== 
 + 
 +<code prisma> 
 +enum RecommendationType { 
 + 
 +  PRICE_OPTIMIZATION 
 + 
 +  CUSTOMER_RETENTION 
 + 
 +  LEAD_CONVERSION 
 + 
 +  REVENUE_FORECAST 
 + 
 +  PROPERTY_IMPROVEMENT 
 + 
 +  RISK_ALERT 
 + 
 +  AUTOMATION 
 +
 +</code> 
 + 
 +---- 
 + 
 +====== Relations à ajouter ====== 
 + 
 +===== Tenant ===== 
 + 
 +<code prisma> 
 +aiConversations AiConversation[] 
 + 
 +knowledgeDocuments KnowledgeDocument[] 
 + 
 +automationScenarios AutomationScenario[] 
 + 
 +recommendations Recommendation[] 
 +</code> 
 + 
 +---- 
 + 
 +===== User ===== 
 + 
 +<code prisma> 
 +aiConversations AiConversation[] 
 +</code> 
 + 
 +---- 
 + 
 +===== Document ===== 
 + 
 +<code prisma> 
 +knowledgeDocuments KnowledgeDocument[] 
 +</code> 
 + 
 +---- 
 + 
 +====== Cas d'usage ====== 
 + 
 +===== Assistant Agence ===== 
 + 
 +<code> 
 +"Quels biens sont sous-performants ?" 
 + 
 +↓ 
 + 
 +Analyse IA 
 + 
 +↓ 
 + 
 +Recommandations 
 +</code> 
 + 
 +---- 
 + 
 +===== Assistant Commercial ===== 
 + 
 +<code> 
 +"Nouveaux leads prioritaires" 
 + 
 +↓ 
 + 
 +Scoring 
 + 
 +↓ 
 + 
 +Liste qualifiée 
 +</code> 
 + 
 +---- 
 + 
 +===== Assistant Revenue ===== 
 + 
 +<code> 
 +"Optimiser les tarifs" 
 + 
 +↓ 
 + 
 +Forecast 
 + 
 +↓ 
 + 
 +Recommandations 
 +</code> 
 + 
 +---- 
 + 
 +===== Recherche documentaire ===== 
 + 
 +<code> 
 +Question 
 + 
 +↓ 
 + 
 +RAG 
 + 
 +↓ 
 + 
 +KnowledgeDocument 
 + 
 +↓ 
 + 
 +KnowledgeChunk 
 + 
 +↓ 
 + 
 +Réponse 
 +</code> 
 + 
 +---- 
 + 
 +====== Validation ====== 
 + 
 +<code bash> 
 +npx prisma format 
 + 
 +npx prisma validate 
 + 
 +npx prisma generate 
 +</code> 
 + 
 +---- 
 + 
 +====== Migration ====== 
 + 
 +<code bash> 
 +npx prisma migrate dev \ 
 +--name ai_knowledge_automation 
 +</code> 
 + 
 +---- 
 + 
 +====== Fonctionnalités couvertes ====== 
 + 
 +===== IA ===== 
 + 
 +<code> 
 +Assistant conversationnel 
 + 
 +Recherche sémantique 
 + 
 +Analyse métier 
 + 
 +Aide à la décision 
 +</code> 
 + 
 +---- 
 + 
 +===== Knowledge Base ===== 
 + 
 +<code> 
 +FAQ 
 + 
 +Procédures 
 + 
 +Contrats 
 + 
 +Documentation 
 +</code> 
 + 
 +---- 
 + 
 +===== Automatisation ===== 
 + 
 +<code> 
 +Workflows avancés 
 + 
 +Scénarios 
 + 
 +Actions automatiques 
 +</code> 
 + 
 +---- 
 + 
 +====== État final du schéma ====== 
 + 
 +Après Phase 2-N : 
 + 
 +<code> 
 +≈ 108 à 112 modèles Prisma 
 +</code> 
 + 
 +répartis sur : 
 + 
 +<code> 
 +Core 
 + 
 +Security 
 + 
 +RBAC 
 + 
 +Properties 
 + 
 +Owners 
 + 
 +Customers 
 + 
 +Reservations 
 + 
 +Contracts 
 + 
 +Payments 
 + 
 +Accounting 
 + 
 +CRM 
 + 
 +Messaging 
 + 
 +Marketing 
 + 
 +Automation 
 + 
 +Governance 
 + 
 +OTA 
 + 
 +Revenue Management 
 + 
 +Enterprise Security 
 + 
 +Internationalization 
 + 
 +Artificial Intelligence 
 +</code> 
 + 
 +---- 
 + 
 +====== Fin de la Phase 2 ====== 
 + 
 +Le schéma Prisma couvre désormais l'intégralité des sprints : 
 + 
 +<code> 
 +Sprint 1  → Sprint 20 
 +</code> 
 + 
 +et constitue la base pour : 
 + 
 +<code> 
 +Phase 3 
 + 
 +OpenAPI 3.1 complet 
 + 
 +↓ 
 + 
 +DTO NestJS 
 + 
 +↓ 
 + 
 +SDK TypeScript 
 + 
 +↓ 
 + 
 +Génération Backend NestJS 
 + 
 +↓ 
 + 
 +Génération Frontend NextJS 
 + 
 +↓ 
 + 
 +Monorepo Enterprise 4.0 
 +</code>
ujusum/3-codage/1-repository/2-prisma-schema.1780851335.txt.gz · Dernière modification : 2026/06/07 18:55 de 91.170.108.99

DokuWiki Appliance - Powered by TurnKey Linux