veza/veza-docs/ORIGIN/ORIGIN_BUSINESS_LOGIC.md
2026-03-05 19:22:31 +01:00

1249 lines
30 KiB
Markdown

# ORIGIN_BUSINESS_LOGIC.md
## 📋 RÉSUMÉ EXÉCUTIF
Ce document définit toutes les règles métier (business logic) de la plateforme Veza. Il couvre les prix, commissions, workflows utilisateurs, machines à états, règles de validation, calculs complexes, notifications, limites, quotas, et SLAs. Ces règles sont alignées avec les principes éthiques fondateurs du projet et garantissent la cohérence des comportements métier.
**Dernière révision**: 2026-03-04 (révision éthique — suppression crypto, AI, publicité)
## 🎯 OBJECTIFS
### Objectif Principal
Centraliser et définir de manière exhaustive toutes les règles métier de la plateforme Veza pour garantir la cohérence, la traçabilité, et la maintenabilité pendant 24 mois.
### Objectifs Secondaires
- Standardiser les calculs financiers (prix, commissions, taxes)
- Définir les workflows utilisateurs de bout en bout
- Spécifier les transitions d'état valides
- Documenter les règles de validation
- Établir les limites et quotas par rôle
## 📖 TABLE DES MATIÈRES
0. [Principes Éthiques et Modèle Économique](#0-principes-éthiques-et-modèle-économique)
1. [Pricing Models](#1-pricing-models)
2. [Commission Structure](#2-commission-structure)
3. [User Workflows](#3-user-workflows)
4. [State Machines](#4-state-machines)
5. [Business Rules Engine](#5-business-rules-engine)
6. [Validation Rules](#6-validation-rules)
7. [Complex Calculations](#7-complex-calculations)
8. [Notification Rules](#8-notification-rules)
9. [Limits & Quotas](#9-limits--quotas)
10. [SLA Definitions](#10-sla-definitions)
11. [Exclusions et Raisons Éthiques](#11-exclusions-et-raisons-éthiques)
12. [Gouvernance](#12-gouvernance)
## 🔒 RÈGLES IMMUABLES
1. **Prix TOUJOURS en centimes** (éviter erreurs d'arrondi)
2. **Commissions CALCULÉES avant taxes**
3. **Remboursements MAX 30 jours** après achat
4. **State transitions VALIDÉES** (pas de transitions invalides)
5. **Limites APPLIQUÉES** côté serveur (never trust client)
6. **Notifications ASYNCHRONES** (via queue, pas bloquant)
7. **Calculs financiers AUDITÉS** (log toutes les transactions)
8. **Quotas PAR RÔLE** (user < creator < premium < admin)
9. **SLAs MESURABLES** (métriques, alerting)
10. **Règles VERSIONÉES** (changements documentés)
## 0. PRINCIPES ÉTHIQUES ET MODÈLE ÉCONOMIQUE
L'éthique de Veza n'est pas un argument marketing. C'est l'architecture de valeurs qui détermine chaque décision économique. Aucune règle métier ne peut contredire ces principes.
### Modèle open source / open core
**Gratuit (open core)** :
- Upload (quotas raisonnables)
- Streaming illimité
- Profil artiste complet
- Chat et collaboration
- Marketplace (commission sur transactions)
**Premium individuel** :
- Stockage cloud étendu
- Analytics avancés (détaillés, exportables)
- Distribution (upload vers plateformes tierces)
- Priorité dans les files de transcoding
**Pro / Label** :
- API complète (rate limits étendus)
- White label partiel
- Analytics équipe
- Support prioritaire
**Commission marketplace** :
- Pourcentage sur les ventes de licences et beats
- Transparente, documentée, sans surprise
### Ce qui ne sera JAMAIS monétisé
- **Publicité** : zéro régie publicitaire, zéro pixel de tracking tiers
- **Données utilisateurs** : les données ne sont pas un produit
- **Freemium agressif** : pas de features artificiellement bridées pour forcer l'upgrade
- **Algorithmes de rétention** : pas d'optimisation pour maximiser le temps passé
## 1. PRICING MODELS
### 1.1 Product Pricing
**Fixed Price**:
```
Product price: $29.99
No variation
```
**Pay What You Want (PWYW)**:
```
Minimum price: $5.00 (set by seller)
Suggested price: $15.00
Buyer chooses: $10.00 - $100.00+
```
**Tiered Licensing**:
```
Basic License: $29.99 (personal use)
Standard License: $49.99 (commercial use, 10k streams)
Premium License: $99.99 (unlimited commercial use)
Exclusive License: $499.99 (buyer gets exclusive rights)
```
**Subscription Plans**:
```
Free: $0/month
- Upload limit: 5 tracks/month
- Download: No
- Analytics: Basic
- Storage: 1 GB
Creator: $9.99/month ($99.99/year, 17% savings)
- Upload limit: Unlimited
- Download: Yes
- Analytics: Advanced
- Storage: 50 GB
- Sell products: Yes (15% commission)
Premium: $19.99/month ($199.99/year, 17% savings)
- All Creator features
- Priority support
- Storage: 200 GB
- Sell products: Yes (10% commission)
- Collaboration tools
- Distribution vers plateformes tierces
Note: Aucun plan ne contient de publicité. Veza est 100% sans publicité.
```
### 1.2 Dynamic Pricing
**Early Bird Discounts**:
```
First 100 buyers: 20% off
Next 400 buyers: 10% off
After 500 buyers: Regular price
```
**Bundle Pricing**:
```
Single product: $29.99
3-product bundle: $79.99 (11% savings)
5-product bundle: $119.99 (20% savings)
```
**Volume Discounts** (for API/enterprise):
```
0-1,000 requests: $0.01/request
1,001-10,000: $0.008/request
10,001-100,000: $0.006/request
100,001+: $0.004/request
```
### 1.3 Currency Support
**Supported Currencies**:
```
USD (default)
EUR
GBP
CAD
AUD
```
**Exchange Rates**:
```
Source: European Central Bank (ECB) API
Update frequency: Daily at 00:00 UTC
Cache: 24 hours
Fallback: Manual rates (updated weekly)
```
**Conversion Formula**:
```
Price_Target = Price_USD * Exchange_Rate
Rounded to 2 decimals (0.01 precision)
Example:
$29.99 USD * 0.92 EUR/USD = 27.59 EUR
```
## 2. COMMISSION STRUCTURE
### 2.1 Platform Commission
**Marketplace Sales**:
```
User: N/A (cannot sell)
Creator: 15% commission
Premium: 10% commission
Admin: N/A (no commission on own sales)
Example (Creator selling $100 product):
Product price: $100.00
Platform commission: -$15.00 (15%)
Payment processing: -$3.20 (Stripe 2.9% + $0.30)
Seller receives: $81.80
```
**Subscription Revenue Share**:
```
Streaming plays:
- Creator receives $0.004 per play (avg)
- Revenus issus des abonnements Premium uniquement (pas de publicité)
Example (10,000 plays):
Creator revenue: 10,000 * $0.004 = $40.00
```
### 2.2 Payment Processing Fees
**Stripe** (default):
```
Card payments: 2.9% + $0.30
ACH (US): 0.8% (max $5.00)
SEPA (EU): 0.8% (max €5.00)
International: +1.5% currency conversion
```
**PayPal** (alternative):
```
Domestic: 2.99% + $0.49
International: 4.49% + $0.49
```
> **Note** : Le paiement via Hyperswitch (open source, multi-provider) est le standard. Stripe et PayPal sont des providers configurés. Les cryptomonnaies sont exclues définitivement (voir [§11 Exclusions](#11-exclusions-et-raisons-éthiques)).
### 2.3 Payout Schedule
**Minimum Payout**:
```
$50.00 minimum balance required
```
**Payout Frequency**:
```
Weekly: Every Monday (for balances ≥ $50)
Manual: Anytime (for balances ≥ $100)
```
**Payout Methods**:
```
Stripe Connect: 1-3 business days
PayPal: Instant
Bank Transfer: 3-5 business days
```
### 2.4 Refund Policy
**Timeframe**:
```
Digital products: 14 days
Subscription: Pro-rated to end of billing cycle
Services: 30 days (or as agreed)
```
**Refund Amount**:
```
Full refund: 100% (within 7 days, no downloads)
Partial refund: 50% (7-14 days, or after downloads)
No refund: After 30 days
```
**Commission on Refunds**:
```
Platform commission: Refunded to buyer
Payment processing: NOT refunded (non-recoverable)
Example (refund of $100 sale):
Buyer paid: $100.00
Seller received: $81.80
Refund to buyer: $100.00
Platform loses: $15.00 (commission)
Seller loses: $18.20 (commission + processing fees)
```
## 3. USER WORKFLOWS
### 3.1 User Onboarding
**Flow**:
```mermaid
graph TD
A[Visit Homepage] --> B{Has Account?}
B -->|No| C[Click Sign Up]
B -->|Yes| D[Click Log In]
C --> E[Enter Email/Password]
E --> F[Receive Verification Email]
F --> G[Click Verification Link]
G --> H[Email Verified]
H --> I[Complete Profile]
I --> J[Choose Role: Listener/Creator]
J --> K{Creator?}
K -->|Yes| L[Upload First Track]
K -->|No| M[Browse Feed]
L --> N[Onboarding Complete]
M --> N
D --> O[Enter Credentials]
O --> P[Dashboard]
```
**Steps**:
1. **Registration** (< 2 minutes)
- Email, username, password
- Captcha (after 3 failed attempts)
- Terms acceptance
2. **Email Verification** (< 5 minutes)
- Send verification email
- Link expires in 24 hours
- Resend option (max 3 times)
3. **Profile Setup** (< 5 minutes)
- Display name, bio, avatar
- Location (optional)
- Social links (optional)
4. **Role Selection**
- Listener (default)
- Creator (requires verification for monetization)
5. **First Interaction**
- Creator: Upload first track
- Listener: Follow 3 suggested users
### 3.2 Track Upload Workflow
**Flow**:
```
1. Click "Upload Track"
2. Select audio file (drag & drop or browse)
3. File validation (format, size, duration)
4. Upload to S3 (resumable, chunked)
5. Extract metadata (ID3 tags)
6. Generate waveform (background job)
7. Fill metadata form:
- Title, artist, genre
- BPM, key (optional)
- Description
- Cover art
- Visibility (public, unlisted, private)
- Downloadable (yes/no)
8. Preview track
9. Publish
10. Track processing (transcode to multiple bitrates)
11. Track live (appears in feed)
```
**Processing Time**:
```
Upload: ~1-5 min (depends on file size)
Metadata extract: ~5-10 sec
Waveform: ~10-30 sec
Transcode: ~1-3 min
Total: ~2-9 min
```
### 3.3 Purchase Workflow
**Flow**:
```
1. Browse marketplace
2. Click product → View details
3. Listen to preview (30-60 sec)
4. Click "Add to Cart"
5. Continue shopping OR Checkout
6. Cart review:
- Item list
- Subtotal
- Discount code (optional)
- Tax calculation
- Total
7. Click "Proceed to Checkout"
8. Select payment method:
- Credit card (via Hyperswitch)
- PayPal (via Hyperswitch)
9. Enter billing info
10. Review order
11. Click "Place Order"
12. Payment processing (Stripe/PayPal)
13. Payment successful:
- Order confirmation email
- Download links available
- Invoice generated
14. Download files
```
**Panier** :
```
Le panier est conservé 30 jours.
Pas de relance email agressive pour paniers abandonnés.
Un seul email de rappel optionnel après 7 jours (si l'utilisateur a activé les notifications marketing).
Pas de discount de pression temporelle (pas de FOMO).
```
### 3.4 Subscription Workflow
**Flow**:
```
1. Click "Upgrade to Premium"
2. View plan comparison
3. Select plan (monthly/annual)
4. Enter payment info (saved for recurring)
5. Review subscription terms
6. Click "Subscribe"
7. Payment processed
8. Subscription active
9. Invoice sent monthly/annually
10. Auto-renewal (7 days before expiry)
11. Cancellation:
- Access until end of billing period
- No auto-renewal
- Option to re-subscribe anytime
```
**Trial Period**:
```
Premium plan: 14-day free trial
- Full access
- No payment required upfront
- Reminder 3 days before trial ends
- Auto-convert to paid (if card on file)
- Cancel anytime during trial (no charge)
```
## 4. STATE MACHINES
### 4.1 Order State Machine
**States**:
```
pending → Initial state after order created
paid → Payment successful
processing → Order being fulfilled (digital delivery)
completed → Order fulfilled, files delivered
cancelled → Order cancelled (before payment)
refunded → Order refunded (after payment)
failed → Payment failed
```
**Transitions**:
```mermaid
stateDiagram-v2
[*] --> pending
pending --> paid: Payment successful
pending --> cancelled: User cancels
pending --> failed: Payment failed
paid --> processing: Start fulfillment
processing --> completed: Delivery successful
paid --> refunded: Refund requested (<14 days)
completed --> refunded: Refund requested (<14 days)
cancelled --> [*]
failed --> [*]
completed --> [*]
refunded --> [*]
```
**Business Rules**:
```
- pending → paid: Stripe webhook confirms payment
- paid → processing: Triggered immediately (async job)
- processing → completed: Files delivered to buyer's library
- * → refunded: Only if within refund window (14 days)
- * → cancelled: Only if order not yet paid
```
### 4.2 Moderation State Machine
**States**:
```
submitted → Content submitted by user
pending → Awaiting moderation
approved → Approved by moderator
rejected → Rejected by moderator
flagged → Flagged by users/auto-detection
banned → Permanently banned
```
**Transitions**:
```mermaid
stateDiagram-v2
[*] --> submitted
submitted --> pending: Auto-check complete
pending --> approved: Moderator approves
pending --> rejected: Moderator rejects
approved --> flagged: User reports
flagged --> approved: False positive
flagged --> rejected: Violates policy
rejected --> banned: Repeat offender (3 strikes)
banned --> [*]
```
**Auto-Moderation Rules**:
```
1. Détection par règles (pas d'IA) :
- Mots-clés bloqués → flagged
- Patterns de contenu explicite → flagged (règles déterministes)
2. Spam Detection :
- Identical title/description → flagged
- Excessive links → flagged
- Bot patterns (rate, timing) → flagged
3. Copyright Detection :
- Audio fingerprinting (ACRCloud)
- Matches known tracks → flagged
4. Modération humaine :
- Tout contenu flaggé est revu par un modérateur humain
- La décision finale est toujours humaine
If flagged → pending modération humaine
If auto-approved → approved (contenu conforme aux règles)
```
### 4.3 User Account State Machine
**States**:
```
registered → Account created
verified → Email verified
active → Account active, can use platform
inactive → Account inactive (user choice)
suspended → Temporarily suspended (violation)
banned → Permanently banned
deleted → Account deleted (GDPR)
```
**Transitions**:
```
registered → verified: Email verification
verified → active: Profile completed
active → inactive: User deactivates
inactive → active: User reactivates
active → suspended: Policy violation (1-30 days)
suspended → active: Suspension period ends
suspended → banned: Multiple violations (3 strikes)
active → banned: Severe violation (illegal content)
* → deleted: User requests deletion (GDPR right)
```
## 5. BUSINESS RULES ENGINE
### 5.1 Track Publication Rules
**Rule 1: Minimum Track Duration**
```
IF track.duration < 30 seconds THEN
REJECT with error "Track too short (min 30 seconds)"
END IF
```
**Rule 2: Maximum Track Duration**
```
IF track.duration > 3600 seconds (1 hour) THEN
REJECT with error "Track too long (max 1 hour)"
END IF
```
**Rule 3: File Size Limits**
```
IF user.role == "user" AND file.size > 100MB THEN
REJECT with error "File too large (max 100MB for free users)"
ELSE IF user.role IN ["creator", "premium"] AND file.size > 500MB THEN
REJECT with error "File too large (max 500MB)"
END IF
```
**Rule 4: Upload Limits**
```
IF user.role == "user" AND user.tracks_this_month >= 5 THEN
REJECT with error "Upload limit reached (5/month for free users)"
ELSE IF user.role == "creator" AND user.tracks_this_day >= 50 THEN
REJECT with error "Upload limit reached (50/day for creators)"
END IF
```
### 5.2 Pricing Rules
**Rule 1: Minimum Product Price**
```
IF product.price < 1.00 THEN
REJECT with error "Minimum price is $1.00"
END IF
```
**Rule 2: Maximum Product Price**
```
IF product.price > 10000.00 THEN
REJECT with error "Maximum price is $10,000"
END IF
```
**Rule 3: PWYW Minimum**
```
IF product.pricing_model == "pwyw" AND product.minimum_price < 1.00 THEN
REJECT with error "PWYW minimum must be at least $1.00"
END IF
```
### 5.3 Discount Rules
**Rule 1: Discount Code Validity**
```
IF discount_code.valid_from > NOW() THEN
REJECT with error "Discount code not yet valid"
ELSE IF discount_code.valid_until < NOW() THEN
REJECT with error "Discount code expired"
ELSE IF discount_code.usage_count >= discount_code.usage_limit THEN
REJECT with error "Discount code usage limit reached"
END IF
```
**Rule 2: Minimum Purchase Amount**
```
IF discount_code.minimum_purchase_amount IS NOT NULL
AND cart.subtotal < discount_code.minimum_purchase_amount THEN
REJECT with error "Minimum purchase amount not met"
END IF
```
**Rule 3: Maximum Discount Amount**
```
IF discount_code.discount_type == "percentage" THEN
discount_amount = cart.subtotal * (discount_code.discount_value / 100)
IF discount_code.maximum_discount_amount IS NOT NULL
AND discount_amount > discount_code.maximum_discount_amount THEN
discount_amount = discount_code.maximum_discount_amount
END IF
END IF
```
## 6. VALIDATION RULES
### 6.1 User Input Validation
**Email**:
```
Pattern: ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
Max length: 255 characters
Unique: Must not already exist (case-insensitive)
```
**Username**:
```
Pattern: ^[a-zA-Z0-9_]{3,30}$
Min length: 3 characters
Max length: 30 characters
Unique: Must not already exist (case-insensitive)
Reserved: admin, root, system, veza, api, www (blocked)
```
**Password**:
```
Min length: 12 characters
Max length: 128 characters
Must contain:
- At least 1 uppercase letter
- At least 1 lowercase letter
- At least 1 digit
- At least 1 special character (!@#$%^&*)
Cannot contain:
- Email or username
- Common passwords (check against Have I Been Pwned API)
- Sequential characters (abc, 123)
```
**Bio**:
```
Max length: 500 characters
Allowed characters: Any UTF-8
Blocked patterns: Excessive links (max 3), mots-clés bloqués (liste de modération)
```
### 6.2 Track Metadata Validation
**Title**:
```
Min length: 1 character
Max length: 255 characters
Required: Yes
```
**Artist**:
```
Max length: 255 characters
Required: No (defaults to creator's name)
```
**Genre**:
```
Enum: electronic, house, techno, trance, dubstep, drum-and-bass, ...
Required: Yes
```
**BPM**:
```
Min: 60
Max: 200
Required: No
```
**Duration**:
```
Min: 30 seconds
Max: 3600 seconds (1 hour)
Required: Yes (auto-extracted from file)
```
### 6.3 Financial Validation
**Product Price**:
```
Min: $1.00
Max: $10,000.00
Precision: 2 decimals
Currency: USD, EUR, GBP, CAD, AUD
```
**Discount Percentage**:
```
Min: 1%
Max: 99%
Integer: Yes (no fractional percentages)
```
**Discount Fixed Amount**:
```
Min: $0.01
Max: $1,000.00
Precision: 2 decimals
```
## 7. COMPLEX CALCULATIONS
### 7.1 Order Total Calculation
**Formula**:
```
subtotal = SUM(item.price for item in cart.items)
discount_amount = 0
IF discount_code IS NOT NULL THEN
IF discount_code.discount_type == "percentage" THEN
discount_amount = subtotal * (discount_code.discount_value / 100)
IF discount_code.maximum_discount_amount IS NOT NULL THEN
discount_amount = MIN(discount_amount, discount_code.maximum_discount_amount)
END IF
ELSE IF discount_code.discount_type == "fixed_amount" THEN
discount_amount = discount_code.discount_value
END IF
END IF
taxable_amount = subtotal - discount_amount
tax_rate = get_tax_rate(user.country, user.state)
tax_amount = taxable_amount * tax_rate
total = subtotal - discount_amount + tax_amount
ROUND(total, 2) // Round to 2 decimals
```
**Example**:
```
Item 1: $29.99
Item 2: $49.99
Subtotal: $79.98
Discount (20%): -$16.00
Taxable: $63.98
Tax (10%): +$6.40
Total: $70.38
```
### 7.2 Seller Payout Calculation
**Formula**:
```
order_total = $100.00
platform_commission_rate = 0.15 // 15% for creators
platform_commission = order_total * platform_commission_rate
= $100.00 * 0.15 = $15.00
payment_processing_fee = (order_total * 0.029) + 0.30
= ($100.00 * 0.029) + $0.30 = $3.20
seller_payout = order_total - platform_commission - payment_processing_fee
= $100.00 - $15.00 - $3.20 = $81.80
```
**Example**:
```
Order total: $100.00
Platform commission (15%): -$15.00
Payment processing (2.9% + $0.30): -$3.20
Seller receives: $81.80
```
### 7.3 Streaming Royalty Calculation
**Formula**:
```
monthly_subscription_revenue = $100,000
total_plays_this_month = 10,000,000
per_play_rate = monthly_subscription_revenue / total_plays_this_month
= $100,000 / 10,000,000 = $0.01 per play
track_plays = 50,000
track_royalty = track_plays * per_play_rate
= 50,000 * $0.01 = $500.00
creator_share = 0.70 // 70% to creator, 30% platform
creator_payout = track_royalty * creator_share
= $500.00 * 0.70 = $350.00
```
**Minimum Payout**:
```
IF creator_balance >= $50.00 THEN
process_payout(creator_id, creator_balance)
ELSE
hold_until_minimum_reached()
END IF
```
### 7.4 Tax Calculation
**US Sales Tax** (varies by state):
```
state_tax_rates = {
"CA": 0.0725, // California: 7.25%
"TX": 0.0625, // Texas: 6.25%
"NY": 0.04, // New York: 4%
"FL": 0.06, // Florida: 6%
// ... other states
}
tax_amount = subtotal * state_tax_rates[buyer.state]
```
**EU VAT** (value-added tax):
```
country_vat_rates = {
"DE": 0.19, // Germany: 19%
"FR": 0.20, // France: 20%
"UK": 0.20, // UK: 20%
"ES": 0.21, // Spain: 21%
// ... other countries
}
IF buyer.has_valid_vat_number THEN
// Reverse charge (B2B)
vat_amount = 0
ELSE
// Standard VAT (B2C)
vat_amount = subtotal * country_vat_rates[buyer.country]
END IF
```
## 8. NOTIFICATION RULES
### 8.1 Email Notifications
**Transactional Emails** (always sent):
```
- Account verification
- Password reset
- Order confirmation
- Order shipped (physical goods)
- Refund processed
- Subscription activated
- Subscription expiring (7 days before)
- Payment failed
```
**Marketing Emails** (opt-in, jamais agressif):
```
- New features announcement
- Weekly digest (new tracks from followed users)
- Monthly summary (stats personnels du créateur)
Note: Pas de recommandations produit basées sur le comportement.
Pas de notifications de type FOMO.
```
**Cadence Limits**:
```
Transactional: No limit
Marketing: Max 2/week (user can opt out)
```
### 8.2 Push Notifications
**Real-time Notifications**:
```
- New message received
- New follower
- Track liked
- Track commented
- Mention in comment/post
- Order placed (for sellers)
- Payout processed
```
**Batched Notifications** (hourly):
```
- Multiple comments (3+ comments → "Your track has 3 new comments")
- Regroupées pour éviter la surcharge
Note: Pas de compteurs de likes en notification push (anti social validation loop)
```
**Quiet Hours & Respect du DND**:
```
Default: 22:00 - 08:00 (user's timezone)
User can configure in settings
Respect du mode "Do Not Disturb" OS
Contrôle total utilisateur sur chaque type de notification
```
### 8.3 In-App Notifications
**Notification Types**:
```
- Follow: "John Doe started following you"
- Like: "Jane Smith liked your track 'Summer Vibes'"
- Comment: "User123 commented on your track"
- Mention: "You were mentioned in a post"
- Order: "New order #12345 from BuyerName"
- System: "Your track 'Track Name' has been approved"
```
**Notification Grouping**:
```
IF same_type AND same_resource AND time_diff < 1 hour THEN
group_notifications()
// "John and 5 others liked your track"
END IF
```
**Notification Expiry**:
```
Mark as read: User clicks notification
Auto-expire: 30 days (unread notifications)
Delete: 90 days (all notifications)
```
## 9. LIMITS & QUOTAS
### 9.1 Upload Limits
**Free User**:
```
Tracks: 5/month
File size: 100 MB/file
Storage: 1 GB total
Playlist: 10 playlists
```
**Creator**:
```
Tracks: Unlimited (50/day rate limit)
File size: 500 MB/file
Storage: 50 GB total
Playlist: Unlimited
Products: Unlimited
```
**Premium**:
```
Tracks: Unlimited (100/day rate limit)
File size: 500 MB/file
Storage: 200 GB total
Playlist: Unlimited
Products: Unlimited
Collaboration: Yes
```
### 9.2 API Rate Limits
**Public API** (unauthenticated):
```
100 requests/hour per IP
```
**Authenticated API**:
```
Free: 1,000 requests/hour
Creator: 5,000 requests/hour
Premium: 10,000 requests/hour
Enterprise: Custom
```
**WebSocket Connections**:
```
Max connections per user: 5
Max rooms per user: 50
Max messages per minute: 60
```
### 9.3 Social Limits
**Follows**:
```
Free: Follow up to 500 users
Creator: Follow up to 2,000 users
Premium: Follow up to 5,000 users
```
**Messages**:
```
Free: 50 DMs/day
Creator: 200 DMs/day
Premium: Unlimited
```
**Comments**:
```
All users: 100 comments/day
Rate limit: 1 comment/second
```
## 10. SLA DEFINITIONS
### 10.1 Uptime SLA
**Target**: 99.95% uptime
```
Allowed downtime per month: 21.6 minutes
Allowed downtime per year: 4.38 hours
```
**Credits** (for Premium/Enterprise):
```
Uptime 99.95% - 99.99%: No credit
Uptime 99.00% - 99.95%: 10% monthly fee credit
Uptime 95.00% - 99.00%: 25% monthly fee credit
Uptime < 95.00%: 50% monthly fee credit
```
**Exclusions**:
```
- Scheduled maintenance (announced 7 days in advance)
- Force majeure (natural disasters, wars, etc.)
- Third-party failures (AWS, Stripe, etc.)
- User-caused issues (DDoS from user's network)
```
### 10.2 Performance SLA
**API Response Time**:
```
p50 (median): < 50ms
p95: < 100ms
p99: < 500ms
```
**Page Load Time**:
```
Time to First Byte (TTFB): < 200ms
First Contentful Paint: < 1.5s
Time to Interactive: < 3.5s
```
**Audio Streaming**:
```
Buffering: < 1 second initial
Rebuffering rate: < 0.5%
Audio start time: < 2 seconds
```
### 10.3 Support SLA
**Response Time**:
```
Critical (platform down): < 15 minutes
High (feature broken): < 2 hours
Medium (minor issue): < 8 hours
Low (question/enhancement): < 24 hours
```
**Resolution Time**:
```
Critical: < 4 hours
High: < 24 hours
Medium: < 3 days
Low: < 7 days
```
**Support Channels**:
```
Free users: Email, Help Center
Premium users: Email, Chat, Priority support
Enterprise: Phone, Dedicated account manager
```
### 10.4 Payout SLA
**Processing Time**:
```
Stripe Connect: 1-3 business days
PayPal: Instant (< 1 hour)
Bank Transfer: 3-5 business days
```
**Failure Handling**:
```
IF payout_failed THEN
retry_after_24_hours()
IF retry_failed THEN
notify_user_email()
manual_review_by_finance_team()
END IF
END IF
```
## 11. EXCLUSIONS ET RAISONS ÉTHIQUES
Les éléments suivants sont **définitivement exclus** de la logique métier de Veza.
### Cryptomonnaies
- Aucun paiement en Bitcoin, Ethereum, ou autre cryptomonnaie
- **Raison** : impact environnemental disproportionné, spéculation, fraude documentée dans le domaine musical
### Publicité
- Zéro régie publicitaire, zéro pixel de tracking tiers, zéro retargeting
- **Raison** : la publicité transforme les utilisateurs en produit. Incompatible avec le principe « l'humain d'abord »
### Vente de données
- Aucune monétisation des données comportementales
- **Raison** : les données des utilisateurs ne sont pas un produit
### Recommandations ML
- Pas de collaborative filtering, content-based filtering, ou analyse prédictive du comportement
- **Raison** : optimise pour la rétention, pas pour la découverte authentique. La découverte musicale est basée sur les genres/tags déclarés par les artistes, la curation éditoriale humaine, et les connexions sociales
### Gamification addictive
- Pas de systèmes XP, niveaux, streaks, leaderboards de popularité
- **Raison** : transforme l'expression artistique en compétition et normalise les métriques de performance comme mesure de la valeur artistique
### Freemium agressif
- Pas de features artificiellement bridées, pas de dark patterns dans les flows d'upgrade
- **Raison** : les modèles de tarification sont simples et honnêtes
## 12. GOUVERNANCE
### Roadmap publique
- La roadmap produit est publique et commentable
- Les utilisateurs peuvent voter sur les features planifiées
- Les décisions produit majeures sont documentées avec leur justification
### Contribution open source
- Le cœur de la plateforme est open source
- Processus de contribution documenté (CONTRIBUTING.md)
- Code review systématique par les mainteneurs
### Transparence économique
- Les commissions sont documentées et visibles avant chaque transaction
- Les conditions d'utilisation sont rédigées en langage humain
- Les changements tarifaires sont annoncés 90 jours à l'avance
## ✅ CHECKLIST DE VALIDATION
### Pricing
- [ ] All prices in centimes (avoid rounding errors)
- [ ] Currency conversion rates updated daily
- [ ] Commission structure documented
- [ ] Refund policy defined
### Workflows
- [ ] All user workflows documented
- [ ] State machines defined
- [ ] Valid state transitions specified
- [ ] Business rules engine implemented
### Calculations
- [ ] Financial calculations audited
- [ ] Tax calculations compliant
- [ ] Royalty calculations transparent
- [ ] Rounding handled correctly
### Limits & Quotas
- [ ] Per-role limits enforced
- [ ] Rate limiting implemented
- [ ] Quota monitoring enabled
- [ ] Graceful degradation
### SLAs
- [ ] Uptime targets defined
- [ ] Performance targets measurable
- [ ] Support SLAs documented
- [ ] Monitoring & alerting configured
## 📊 MÉTRIQUES DE SUCCÈS
### Business Metrics
- **Conversion Rate**: > 3% (visitors → purchases)
- **Average Order Value**: > $50
- **Customer Lifetime Value**: > $500
- **Churn Rate**: < 5%/month
### Operational Metrics
- **Uptime**: 99.95%
- **API Response Time p95**: < 100ms
- **Support Response Time**: < 2 hours (high priority)
- **Payout Success Rate**: > 99%
## 🔄 HISTORIQUE DES VERSIONS
| Version | Date | Changements |
|---------|------|-------------|
| 1.0.0 | 2025-11-02 | Version initiale - Règles métier complètes |
| 2.0.0 | 2026-03-04 | Révision éthique : suppression crypto/AI/publicité, ajout principes éthiques, modèle open core, gouvernance |
---
## ⚠️ AVERTISSEMENT
**CES RÈGLES MÉTIER SONT ALIGNÉES AVEC L'ÉTHIQUE DU PROJET**
Toute modification nécessite :
1. **RFC Business Logic Change** avec impact analysis et vérification d'alignement éthique
2. **Approbation Product Owner** + Legal (si implications légales)
3. **Migration plan** pour données existantes
4. **Communication** aux utilisateurs (si impact visible)
**Les changements de règles financières nécessitent validation CFO.**
**Aucune modification ne peut contredire les principes éthiques fondateurs (§0).**
---
**Document créé par**: Product Team + Business Analysts
**Date de création**: 2025-11-02
**Dernière révision**: 2026-03-04 (révision éthique)
**Prochaine révision**: Trimestrielle
**Propriétaire**: Chief Product Officer
**Statut**: ✅ **APPROUVÉ — v2.0.0**