import * as z from "zod"; /** * Plan Limits Schema * Defines usage limits for each subscription plan * Aligned with backend API: GET /api/subscription/features */ export declare const PlanLimitsSchema: z.ZodObject<{ maxEvents: z.ZodNumber; maxMembers: z.ZodNumber; maxActivities: z.ZodNumber; maxInventoryItems: z.ZodNumber; maxBankAccounts: z.ZodNumber; maxIncomingTransactions: z.ZodNumber; maxOutcomeTransactions: z.ZodNumber; maxRitualBaths: z.ZodNumber; advancedReports: z.ZodBoolean; customBranding: z.ZodBoolean; apiAccess: z.ZodBoolean; prioritySupport: z.ZodBoolean; dataExport: z.ZodBoolean; slackIntegration: z.ZodBoolean; }, "strip", z.ZodTypeAny, { maxEvents: number; maxMembers: number; maxActivities: number; maxInventoryItems: number; maxBankAccounts: number; maxIncomingTransactions: number; maxOutcomeTransactions: number; maxRitualBaths: number; advancedReports: boolean; customBranding: boolean; apiAccess: boolean; prioritySupport: boolean; dataExport: boolean; slackIntegration: boolean; }, { maxEvents: number; maxMembers: number; maxActivities: number; maxInventoryItems: number; maxBankAccounts: number; maxIncomingTransactions: number; maxOutcomeTransactions: number; maxRitualBaths: number; advancedReports: boolean; customBranding: boolean; apiAccess: boolean; prioritySupport: boolean; dataExport: boolean; slackIntegration: boolean; }>; export type PlanLimits = z.infer; export declare const UsageStatsSchema: z.ZodObject<{ current: z.ZodNumber; limit: z.ZodNumber; percentage: z.ZodNumber; nearingLimit: z.ZodBoolean; }, "strip", z.ZodTypeAny, { current: number; limit: number; percentage: number; nearingLimit: boolean; }, { current: number; limit: number; percentage: number; nearingLimit: boolean; }>; export type UsageStats = z.infer; export declare const FeatureUsageSchema: z.ZodObject<{ feature: z.ZodString; limit: z.ZodNumber; used: z.ZodNumber; remaining: z.ZodNumber; unlimited: z.ZodBoolean; allowed: z.ZodBoolean; }, "strip", z.ZodTypeAny, { limit: number; feature: string; used: number; remaining: number; unlimited: boolean; allowed: boolean; }, { limit: number; feature: string; used: number; remaining: number; unlimited: boolean; allowed: boolean; }>; export type FeatureUsage = z.infer; export declare const UsageTrackingSchema: z.ZodObject<{ tier: z.ZodOptional; plan: z.ZodOptional; planName: z.ZodOptional; context: z.ZodOptional; upgradeRecommended: z.ZodOptional; nearingLimits: z.ZodOptional>; usage: z.ZodOptional>; members: z.ZodOptional>; activities: z.ZodOptional>; inventoryItems: z.ZodOptional>; bankAccounts: z.ZodOptional>; incomingTransactions: z.ZodOptional>; outcomeTransactions: z.ZodOptional>; ritualBaths: z.ZodOptional>; }, "strip", z.ZodTypeAny, { events?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; members?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; activities?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; inventoryItems?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; bankAccounts?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; incomingTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; outcomeTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; ritualBaths?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; }, { events?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; members?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; activities?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; inventoryItems?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; bankAccounts?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; incomingTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; outcomeTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; ritualBaths?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; }>>; features: z.ZodOptional>>; }, "strip", z.ZodTypeAny, { plan?: string | undefined; tier?: string | undefined; planName?: string | undefined; context?: string | undefined; upgradeRecommended?: boolean | undefined; nearingLimits?: string[] | undefined; usage?: { events?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; members?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; activities?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; inventoryItems?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; bankAccounts?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; incomingTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; outcomeTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; ritualBaths?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; } | undefined; features?: Record | undefined; }, { plan?: string | undefined; tier?: string | undefined; planName?: string | undefined; context?: string | undefined; upgradeRecommended?: boolean | undefined; nearingLimits?: string[] | undefined; usage?: { events?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; members?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; activities?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; inventoryItems?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; bankAccounts?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; incomingTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; outcomeTransactions?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; ritualBaths?: { current: number; limit: number; percentage: number; nearingLimit: boolean; } | undefined; } | undefined; features?: Record | undefined; }>; export type UsageTracking = z.infer; export declare const UsageCountsSchema: z.ZodObject<{ periodStart: z.ZodString; periodEnd: z.ZodString; events: z.ZodDefault; members: z.ZodDefault; activities: z.ZodDefault; inventoryItems: z.ZodDefault; bankAccounts: z.ZodDefault; incomingTransactions: z.ZodDefault; outcomeTransactions: z.ZodDefault; ritualBaths: z.ZodDefault; }, "strip", z.ZodTypeAny, { events: number; members: number; activities: number; inventoryItems: number; bankAccounts: number; incomingTransactions: number; outcomeTransactions: number; ritualBaths: number; periodStart: string; periodEnd: string; }, { periodStart: string; periodEnd: string; events?: number | undefined; members?: number | undefined; activities?: number | undefined; inventoryItems?: number | undefined; bankAccounts?: number | undefined; incomingTransactions?: number | undefined; outcomeTransactions?: number | undefined; ritualBaths?: number | undefined; }>; export type UsageCounts = z.infer; export declare const PlanDefinitionSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; description: z.ZodString; price: z.ZodNumber; currency: z.ZodDefault; interval: z.ZodDefault>; limits: z.ZodObject<{ maxEvents: z.ZodNumber; maxMembers: z.ZodNumber; maxActivities: z.ZodNumber; maxInventoryItems: z.ZodNumber; maxBankAccounts: z.ZodNumber; maxIncomingTransactions: z.ZodNumber; maxOutcomeTransactions: z.ZodNumber; maxRitualBaths: z.ZodNumber; advancedReports: z.ZodBoolean; customBranding: z.ZodBoolean; apiAccess: z.ZodBoolean; prioritySupport: z.ZodBoolean; dataExport: z.ZodBoolean; slackIntegration: z.ZodBoolean; }, "strip", z.ZodTypeAny, { maxEvents: number; maxMembers: number; maxActivities: number; maxInventoryItems: number; maxBankAccounts: number; maxIncomingTransactions: number; maxOutcomeTransactions: number; maxRitualBaths: number; advancedReports: boolean; customBranding: boolean; apiAccess: boolean; prioritySupport: boolean; dataExport: boolean; slackIntegration: boolean; }, { maxEvents: number; maxMembers: number; maxActivities: number; maxInventoryItems: number; maxBankAccounts: number; maxIncomingTransactions: number; maxOutcomeTransactions: number; maxRitualBaths: number; advancedReports: boolean; customBranding: boolean; apiAccess: boolean; prioritySupport: boolean; dataExport: boolean; slackIntegration: boolean; }>; features: z.ZodArray; isPopular: z.ZodDefault; trialDays: z.ZodDefault; }, "strip", z.ZodTypeAny, { id: string; name: string; description: string; features: string[]; price: number; currency: string; interval: "month" | "year"; limits: { maxEvents: number; maxMembers: number; maxActivities: number; maxInventoryItems: number; maxBankAccounts: number; maxIncomingTransactions: number; maxOutcomeTransactions: number; maxRitualBaths: number; advancedReports: boolean; customBranding: boolean; apiAccess: boolean; prioritySupport: boolean; dataExport: boolean; slackIntegration: boolean; }; isPopular: boolean; trialDays: number; }, { id: string; name: string; description: string; features: string[]; price: number; limits: { maxEvents: number; maxMembers: number; maxActivities: number; maxInventoryItems: number; maxBankAccounts: number; maxIncomingTransactions: number; maxOutcomeTransactions: number; maxRitualBaths: number; advancedReports: boolean; customBranding: boolean; apiAccess: boolean; prioritySupport: boolean; dataExport: boolean; slackIntegration: boolean; }; currency?: string | undefined; interval?: "month" | "year" | undefined; isPopular?: boolean | undefined; trialDays?: number | undefined; }>; export type PlanDefinition = z.infer; export declare const FREE_PLAN_LIMITS: PlanLimits; export declare const FREE_PLAN: PlanDefinition; export declare const BASIC_PLAN_LIMITS: PlanLimits; export declare const BASIC_PLAN: PlanDefinition; export declare const STANDARD_PLAN_LIMITS: PlanLimits; export declare const STANDARD_PLAN: PlanDefinition; export declare const ADVANCED_PLAN_LIMITS: PlanLimits; export declare const ADVANCED_PLAN: PlanDefinition; export declare const UNLIMIT_PLAN_LIMITS: PlanLimits; export declare const UNLIMIT_PLAN: PlanDefinition; export declare const ENTERPRISE_PLAN_LIMITS: PlanLimits; export declare const ENTERPRISE_PLAN: PlanDefinition; export declare const PERSONAL_BASIC_PLAN_LIMITS: PlanLimits; export declare const PERSONAL_BASIC_PLAN: PlanDefinition; export declare const PLAN_REGISTRY: Record; export declare const ALL_PLANS: PlanDefinition[]; export declare const PERSONAL_PLANS: PlanDefinition[]; /** * Get plan limits by plan ID */ export declare const getPlanLimits: (planId: string) => PlanLimits; /** * Get plan definition by plan ID */ export declare const getPlanById: (planId: string) => PlanDefinition; /** * Feature keys for type-safe access (matching backend API) */ export type FeatureKey = "maxEvents" | "maxMembers" | "maxActivities" | "maxInventoryItems" | "maxBankAccounts" | "maxIncomingTransactions" | "maxOutcomeTransactions" | "maxRitualBaths" | "events" | "members" | "activities" | "inventoryItems" | "bankAccounts" | "incomingTransactions" | "outcomeTransactions" | "ritualBaths" | "mediums" | "baths" | "incomes" | "outcomes" | "financialAccounts"; export declare const FEATURE_KEYS: FeatureKey[]; /** * Feature display names (Portuguese) */ export declare const FEATURE_DISPLAY_NAMES: Record;