import { ISubscriptionRepository } from '../repositories/ISubscriptionRepository.js'; import { ICustomerRepository } from '../repositories/ICustomerRepository.js'; import { IPlanRepository } from '../repositories/IPlanRepository.js'; import { IBillingCycleRepository } from '../repositories/IBillingCycleRepository.js'; import { IFeatureRepository } from '../repositories/IFeatureRepository.js'; import { IProductRepository } from '../repositories/IProductRepository.js'; import { CreateSubscriptionDto, UpdateSubscriptionDto, SubscriptionFilterDto, DetailedSubscriptionFilterDto, SubscriptionDto } from '../dtos/SubscriptionDto.js'; import { OverrideType } from '../../domain/value-objects/OverrideType.js'; /** * Transition report for expired subscription processing */ export interface TransitionExpiredSubscriptionsReport { processed: number; transitioned: number; archived: number; errors: Array<{ subscriptionKey: string; error: string; }>; } export declare class SubscriptionManagementService { private readonly subscriptionRepository; private readonly customerRepository; private readonly planRepository; private readonly billingCycleRepository; private readonly featureRepository; private readonly productRepository; constructor(subscriptionRepository: ISubscriptionRepository, customerRepository: ICustomerRepository, planRepository: IPlanRepository, billingCycleRepository: IBillingCycleRepository, featureRepository: IFeatureRepository, productRepository: IProductRepository); private resolveSubscriptionKeys; createSubscription(dto: CreateSubscriptionDto): Promise; updateSubscription(subscriptionKey: string, dto: UpdateSubscriptionDto): Promise; getSubscription(subscriptionKey: string): Promise; /** * Resolve filter keys to IDs for database querying * Returns null if any required entity is not found (to indicate empty result) */ private resolveFilterKeys; listSubscriptions(filters?: SubscriptionFilterDto): Promise; findSubscriptions(filters: DetailedSubscriptionFilterDto): Promise; getSubscriptionsByCustomer(customerKey: string): Promise; archiveSubscription(subscriptionKey: string): Promise; unarchiveSubscription(subscriptionKey: string): Promise; deleteSubscription(subscriptionKey: string): Promise; addFeatureOverride(subscriptionKey: string, featureKey: string, value: string, overrideType?: OverrideType): Promise; removeFeatureOverride(subscriptionKey: string, featureKey: string): Promise; clearTemporaryOverrides(subscriptionKey: string): Promise; private calculatePeriodEnd; /** * Generate versioned subscription key from base key * Examples: * - "sub-abc" -> "sub-abc-v1" * - "sub-abc-v1" -> "sub-abc-v2" * - "sub-abc-v5" -> "sub-abc-v6" */ private generateVersionedKey; /** * Process expired subscriptions and transition them to configured plans. * * This method: * 1. Finds all expired subscriptions (status='expired', not archived) whose plan has a transition requirement * 2. For each expired subscription: * - Archives the old subscription * - Creates a new subscription to the transition billing cycle * - New subscription key is versioned: original key + "-vX" (or increments if already versioned) * * Note: Plans do not have grace periods. A subscription is expired when * `expirationDate <= NOW()` and there is no cancellation. * * @returns Report of processed subscriptions */ transitionExpiredSubscriptions(): Promise; } //# sourceMappingURL=SubscriptionManagementService.d.ts.map