import { CreateLeaveDto } from '../types';
import { LeaveRepository } from '../repositories/LeaveRepository';
import { HolidayRepository } from '../repositories/HolidayRepository';
import { LeaveValidationService } from '../domain/leave/LeaveValidationService';
import { LeaveBalanceService } from '../domain/leave/LeaveBalanceService';
import { TeamResolutionService } from '../domain/team/TeamResolutionService';
import { NotificationFactory } from '../factories/NotificationFactory';
export declare class LeaveFacade {
    private leaveRepo;
    private holidayRepo;
    private validation;
    private teamService;
    private balanceService;
    private notifications;
    private monthCounters;
    constructor(leaveRepo: LeaveRepository | undefined, holidayRepo: HolidayRepository | undefined, validation: LeaveValidationService | undefined, teamService: TeamResolutionService | undefined, balanceService: LeaveBalanceService | undefined, notifications: NotificationFactory);
    private buildCalculators;
    applyLeave(employeeId: string, dto: CreateLeaveDto): Promise<{
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        backdateApprovalCount: number;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    listLeaves(employeeId: string, status?: string): Promise<{
        items: {
            id: string;
            employeeId: string;
            leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
            duration: import(".prisma/client").$Enums.leave_requests_duration;
            halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
            startDate: string;
            endDate: string;
            leaveDays: number;
            status: import(".prisma/client").$Enums.leave_requests_status;
            reason: string;
            isBackdated: boolean;
            sandwichApplied: boolean;
            backdateApprovalCount: number;
            approvals: {
                approverEmployeeId: string;
                approvalReason: string | null;
                approvedAt: string;
            }[];
        }[];
    }>;
    listPendingApprovals(approverId: string): Promise<{
        items: {
            id: string;
            employeeId: string;
            leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
            duration: import(".prisma/client").$Enums.leave_requests_duration;
            halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
            startDate: string;
            endDate: string;
            leaveDays: number;
            status: import(".prisma/client").$Enums.leave_requests_status;
            reason: string;
            isBackdated: boolean;
            sandwichApplied: boolean;
            backdateApprovalCount: number;
            approvals: {
                approverEmployeeId: string;
                approvalReason: string | null;
                approvedAt: string;
            }[];
        }[];
    }>;
    getLeave(id: string, requesterId: string): Promise<{
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        backdateApprovalCount: number;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    cancelLeave(id: string, employeeId: string): Promise<{
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        backdateApprovalCount: number;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    approveLeave(approverId: string, id: string, comment?: string): Promise<{
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        backdateApprovalCount: number;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    rejectLeave(approverId: string, id: string, comment?: string): Promise<{
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        backdateApprovalCount: number;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    getBalances(employeeId: string): Promise<{
        monthCounters: {
            yearMonth: string;
            halfDayCount: number;
            shortLeaveCount: number;
            halfDaysUntilLeave: number;
            shortLeavesUntilLeave: number;
        };
        policy: {
            types: readonly ["CASUAL", "SICK"];
            monthlyCredit: {
                casualLeave: number;
                sickLeave: number;
            };
            halfDayMaxHours: number;
            halfDaysPerLeave: number;
            shortLeavesPerLeave: number;
        };
        sickLeave: number;
        casualLeave: number;
        compOff: number;
        pendingDeductions: number;
    }>;
    /** HR records an already-approved leave (rollout / alignment with actual time off). */
    hrRecordApprovedLeave(hrUsername: string, employeeId: string, dto: CreateLeaveDto): Promise<{
        id: string;
        employeeId: string;
        leaveType: import(".prisma/client").$Enums.leave_requests_leave_type;
        duration: import(".prisma/client").$Enums.leave_requests_duration;
        halfDaySlot: import(".prisma/client").$Enums.leave_requests_half_day_slot | null;
        startDate: string;
        endDate: string;
        leaveDays: number;
        status: import(".prisma/client").$Enums.leave_requests_status;
        reason: string;
        isBackdated: boolean;
        sandwichApplied: boolean;
        backdateApprovalCount: number;
        approvals: {
            approverEmployeeId: string;
            approvalReason: string | null;
            approvedAt: string;
        }[];
    }>;
    accrueAll(yearMonth: string): Promise<{
        skipped: boolean;
        yearMonth: string;
        credited?: undefined;
    } | {
        credited: number;
        yearMonth: string;
        skipped?: undefined;
    }>;
}
//# sourceMappingURL=LeaveFacade.d.ts.map