Apparence
UserAccount
Compte utilisateur. Ne contient aucune donnée personnelle : juste l'identité technique, le plan, le statut d'abonnement et la trace du consentement RGPD.
- Path Firestore :
users/{userId} - Source TS :
klapy-crm/src/types/index.ts - Doc unique par utilisateur, créé par la Cloud Function
initUserAccountau signup.
Interface
ts
interface UserAccount {
id: string;
email: string;
plan: Plan;
subscription_status: SubscriptionStatus;
stripe_customer_id?: string;
onboarding_completed: boolean;
consent_terms: boolean;
consent_terms_date?: Timestamp | null;
consent_privacy: boolean;
consent_privacy_date?: Timestamp | null;
created_at: Timestamp;
updated_at: Timestamp;
}Champs
| Champ | Type | Notes |
|---|---|---|
id | string | UID Firebase Auth, jamais réécrit |
email | string | Miroir de auth.email, facilite les requêtes |
plan | Plan | 🔒 Champ protégé, écrit uniquement par Cloud Function |
subscription_status | SubscriptionStatus | 🔒 Champ protégé |
stripe_customer_id | string? | 🔒 Champ protégé, posé par le webhook Stripe |
onboarding_completed | boolean | Bascule à true à la fin de l'onboarding |
consent_terms | boolean | Article 7 RGPD, preuve de consentement |
consent_terms_date | Timestamp | null | Posé à l'acceptation, jamais modifié |
consent_privacy | boolean | Idem politique de confidentialité |
consent_privacy_date | Timestamp | null | Idem |
created_at | Timestamp | 🔒 Immuable après la création |
updated_at | Timestamp | À mettre à jour à chaque écriture |
Constantes liées
PLAN:starter,proSUBSCRIPTION_STATUS:pending,active,past_due,canceled
Cycle de vie
Isolation PII
Ne jamais ajouter un champ PII (nom, prénom, téléphone, adresse) à UserAccount. Toute donnée personnelle doit aller dans UserProfile. C'est cette séparation qui permet à exportUserData et deleteUserAccount de cibler proprement les données personnelles, et à firestore.rules d'avoir des règles différentes sur le compte et le profil.
Champs protégés
Les champs marqués 🔒 sont rejetés par firestore.rules à toute tentative d'écriture client. Ils ne peuvent être modifiés que par une Cloud Function avec les droits admin SDK. Voir Règles de sécurité.
Voir aussi
UserProfile: où vivent les données personnelles- Cloud Functions :
initUserAccount,recordConsent,deleteUserAccount,exportUserData - Auth & Custom Claims : custom claim admin