import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { DingtalkHrmService } from './sdk/dingtalk-hrm.service';
export declare class EmployeeManagementService {
    private prisma;
    private hrmService;
    private readonly logger;
    private departmentCache;
    constructor(prisma: PrismaService, hrmService: DingtalkHrmService);
    syncDepartments(): Promise<Record<number, {
        name: string;
        firstLevel: string;
    }>>;
    private loadDepartmentCache;
    syncEmployeesFromDingtalk(options?: {
        syncDepartments?: boolean;
    }): Promise<{
        success: boolean;
        total: number;
        created: number;
        updated: number;
        terminated: number;
        errors: string[];
        duration: number;
    }>;
    getEmployees(params: {
        keyword?: string;
        status?: string;
        page?: number;
        pageSize?: number;
    }): Promise<{
        items: any[];
        total: number;
        page: number;
        pageSize: number;
    }>;
    updateEmployee(userId: string, data: {
        status?: string;
    }): Promise<any>;
    private parseEmployeeFields;
    private parseDateString;
    getEmploymentPeriods(userId: string): Promise<any>;
    addEmploymentPeriod(userId: string, data: {
        joinDate: string;
        leaveDate?: string | null;
        countInTenure?: boolean;
        note?: string;
    }): Promise<any>;
    updateEmploymentPeriod(id: string, data: {
        joinDate?: string;
        leaveDate?: string | null;
        countInTenure?: boolean;
        note?: string;
    }): Promise<any>;
    deleteEmploymentPeriod(id: string): Promise<any>;
    calculateTenureDays(userId: string, asOfDate?: Date): Promise<{
        totalDays: number;
        periods: Array<{
            joinDate: Date;
            leaveDate: Date | null;
            days: number;
            countInTenure: boolean;
            note: string;
        }>;
        source: 'periods' | 'joinDate';
    }>;
    recalculateAllTenure(): Promise<{
        updated: number;
    }>;
    private ensureInitialPeriod;
    private addRejoinPeriod;
    private closeOpenPeriods;
    getSuspensionPeriods(userId: string): Promise<any>;
    addSuspensionPeriod(userId: string, data: {
        startDate: string;
        endDate?: string | null;
        reason?: string;
        note?: string;
    }): Promise<any>;
    updateSuspensionPeriod(id: string, data: {
        startDate?: string;
        endDate?: string | null;
        reason?: string;
        note?: string;
    }): Promise<any>;
    deleteSuspensionPeriod(id: string): Promise<any>;
    initEmploymentPeriods(): Promise<{
        created: number;
        skipped: number;
    }>;
}
