import { DunningLevel, Prisma } from '@prisma/client';
import { PrismaService } from '../../prisma/prisma.service';
import { NotificationsService } from '../notifications/notifications.service';
import { PdfService } from '../pdf/pdf.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
export declare class DunningService {
    private readonly prisma;
    private readonly notifications;
    private readonly pdf;
    private readonly logger;
    constructor(prisma: PrismaService, notifications: NotificationsService, pdf: PdfService);
    ensureDefaultRules(user: AuthenticatedUser, complexId: string): Promise<{
        id: string;
        createdAt: Date;
        complexId: string;
        enabled: boolean;
        template: string;
        level: import(".prisma/client").$Enums.DunningLevel;
        daysAfterDue: number;
        penaltyRate: Prisma.Decimal;
    }[]>;
    listRules(user: AuthenticatedUser, complexId: string): Promise<{
        id: string;
        createdAt: Date;
        complexId: string;
        enabled: boolean;
        template: string;
        level: import(".prisma/client").$Enums.DunningLevel;
        daysAfterDue: number;
        penaltyRate: Prisma.Decimal;
    }[]>;
    upsertRule(user: AuthenticatedUser, complexId: string, level: DunningLevel, data: {
        daysAfterDue?: number;
        template?: string;
        penaltyRate?: number;
        enabled?: boolean;
    }): Promise<{
        id: string;
        createdAt: Date;
        complexId: string;
        enabled: boolean;
        template: string;
        level: import(".prisma/client").$Enums.DunningLevel;
        daysAfterDue: number;
        penaltyRate: Prisma.Decimal;
    }>;
    runDailyDunning(): Promise<void>;
    executeDunningCycle(referenceDate: Date): Promise<{
        processed: number;
        actionsCreated: number;
    }>;
    private renderTemplate;
    triggerNow(_user: AuthenticatedUser): Promise<{
        processed: number;
        actionsCreated: number;
    }>;
    generateFormalNoticePdf(user: AuthenticatedUser, fundCallItemId: string): Promise<Buffer | null>;
    private assertComplexAccess;
    private assertFundCallItemAccess;
}
