===== Conseils d'administration de la plateforme ===== {{INLINETOC 3}} ==== Configurer les abonnements ==== **Guide : Configuration des produits dans le système d'abonnement (droits d'accès et crédits)** Grâce à l'architecture « Credit & Entitlement », nous configurons les produits dans le backend de manière à ce qu'ils contrôlent directement notre logique métier interne (coûts, crédits, activation de fonctionnalités). Le système prend en charge les passages en toute transparence entre les différents niveaux de fonctionnalité (mises à niveau et rétrogradations). === 1. Les champs les plus importants dans la fiche produit === * **''creditPrice'' (le champ « caméléon » pour les crédits)**: ce champ gère les transactions de crédits, mais son comportement varie en fonction du mode de paiement et du type d’abonnement : * **Achat via le portefeuille interne (''paidWithCredits = true'') :** Cette valeur définit les **coûts**. Le montant est débité du portefeuille (pour les achats ponctuels ou de manière récurrente lors du renouvellement automatique des abonnements internes). * **Achat via Stripe / argent réel (''paidWithCredits = false'') :** Cette valeur définit l’ **équivalent en crédits** du paiement en argent réel. Le système fait ici la distinction selon le type : * //Pour les abonnements à crédits (abonnements rechargeables) :// la valeur sert uniquement de **recharge** et est automatiquement créditée sur le portefeuille sous la forme de ''WALLET_TOP_UP'' . * //Pour les abonnements à des fonctionnalités :// le système effectue en quelque sorte une **conversion monétaire avec décaissement direct** . Le montant est crédité sur le portefeuille et, dans la foulée, débité à nouveau pour l'activation de la fonctionnalité. De plus, cette valeur constitue la base de calcul obligatoire pour les remboursements au prorata (Proration Refunds) en cas de futurs changements de niveau (passage à un niveau supérieur ou inférieur). * **''billingInterval'' (cycle)** : Facultatif. Indique s’il s’agit d’un abonnement (par ex. ''« month »'' ou ''« year »''). * **''additionalProperties'' -> ''subscriptionInfo'' (Le cœur de la fonctionnalité)**: un objet JSON qui définit ce qu’est le ''droit d’accès'' (abonnement interne) débloque exactement pour l’utilisateur. === 2. Structure de subscriptionInfo (JSON) === Le ''subscriptionInfo'' contrôle directement les autorisations (''HostFeature'') de l'utilisateur. * ''type'' : la catégorie (par exemple ''« credit »'', ''« licence »'', ''« visualizer »''). Par utilisateur et ''type'' , il n’y a jamais plus d’un droit actif. * ''niveau'' : le niveau de fonctionnalité. Les niveaux supérieurs remplacent les niveaux inférieurs du même type (et inversement en cas de rétrogradation). * ''features'' : un objet clé-valeur pour les droits spécifiques. Le backend traite les valeurs de manière typée : * **Booléen (''true'') :** Est repris tel quel comme indicateur (par ex. ''« panorama.model3ds » : true'' devient ''panorama.model3ds = « true »''). * **Nombre (''entier'') :** Le backend combine la clé et le nombre pour former une nouvelle chaîne de drapeaux (par exemple ''« host.licences.visualizer » : 3'' devient ''host.licences.visualizer3 = « true »''). === 3. Exemples de configuration === == Cas A : un abonnement standard à une fonctionnalité (par exemple, Visualizer niveau 3) == Un produit typique pour les nouveaux utilisateurs ou pour les changements de niveau (passages à un niveau supérieur ou inférieur). * ''creditPrice'': ''50'' (Coût en cas de paiement via le portefeuille / valeur équivalente en cas de paiement via Stripe pour les conversions de devises et les remboursements ultérieurs) * ''billingInterval'': ''« month »'' * ''subscriptionInfo'': "subscriptionInfo" : { "type" : "visualizer", "level" : 3, "features" : { "host.licences.visualizer": 3, "panorama.model3ds": true } } **Que se passe-t-il ?** Le backend enregistre le droit de type ''« visualizer »'' et active dans les HostFeatures ''host.licences.visualizer3 = « true »'' ainsi que ''panorama.model3ds = « true »'' . Les anciennes clés Visualizer d’un niveau précédent (par exemple ''visualizer2'') sont alors automatiquement supprimées. == Cas B : similaire à l'abonnement Visualizer (niveau de licence 2) == Un autre abonnement basé sur un niveau, avec un prélèvement annuel. * ''creditPrice'' : ''150'' * ''billingInterval'': ''« year »'' * ''subscriptionInfo'': « subscriptionInfo » : { « type » : « licence », « level » : 2, « features » : { « host.licences.licence » : 2 } } == Cas C : l'abonnement avec recharge de crédits (produit Stripe pur) == Ce produit est destiné à être payé régulièrement via Stripe et à créditer en contrepartie l'utilisateur de crédits dans son portefeuille. * ''creditPrice'' : ''100'' (Comme il s'agit d'un type « credit », cette valeur sert uniquement à la recharge) * ''billingInterval'': ''« month »'' * ''subscriptionInfo'': « subscriptionInfo » : { « type » : « credit », « features » : {} } **Que se passe-t-il ?** L'utilisateur effectue un paiement en argent réel via Stripe. Le webhook détecte le type ''« credit »'' et ignore le prélèvement direct. Le ''creditPrice'' de ''100'' reste sous la forme ''WALLET_TOP_UP'' dans le portefeuille de l'utilisateur. Les remboursements au prorata sont automatiquement désactivés pour ce type de transaction.