import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { Prisma } from '@prisma/client';
import { UsersService } from "../../organization/users/users.service";
export declare class KpiService {
    private readonly prisma;
    private readonly usersService;
    constructor(prisma: PrismaService, usersService: UsersService);
    assignKpi(data: {
        cycleId: string;
        employeeId: string;
        weight: number;
        name?: string;
        description?: string;
        baseTarget?: string;
        stretchTarget?: string;
        unit?: string;
        targetValue?: number;
        dependencies?: {
            targetUserId: string;
            description?: string;
        }[];
    }): Promise<{
        assessment: {
            id: string;
            status: import("@prisma/client").$Enums.KpiAssessmentStatus;
            deletedAt: Date | null;
            managerId: string | null;
            assignmentId: string;
            selfScore: Prisma.Decimal | null;
            completionNote: string | null;
            selfComment: string | null;
            selfEvaluatedAt: Date | null;
            managerScore: Prisma.Decimal | null;
            managerComment: string | null;
            managerEvaluatedAt: Date | null;
            finalScore: Prisma.Decimal | null;
        } | null;
    } & {
        id: string;
        employeeId: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.KpiAssignmentStatus;
        name: string;
        updatedAt: Date;
        deletedAt: Date | null;
        description: string | null;
        parentId: string | null;
        unit: string | null;
        cycleId: string;
        weight: Prisma.Decimal;
        baseTarget: string | null;
        stretchTarget: string | null;
        targetValue: Prisma.Decimal | null;
        seq: number | null;
        maturityScore: Prisma.Decimal | null;
    }>;
    batchAssignKpi(cycleId: string, employeeIds: string[], assignments: {
        weight: number;
        name?: string;
        targetValue?: number;
    }[]): Promise<{
        created: number;
        failed: number;
    }>;
    findAssignments(query: {
        cycleId?: string;
        employeeId?: string;
        page?: number;
        pageSize?: number;
    }): Promise<{
        items: {
            id: string;
            cycleId: string;
            employeeId: string;
            name: string;
            employeeName: string | undefined;
            weight: Prisma.Decimal;
            targetValue: Prisma.Decimal | null;
            status: import("@prisma/client").$Enums.KpiAssignmentStatus;
            createdAt: Date;
            updatedAt: Date;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    findAssignmentById(id: string): Promise<{
        id: string;
        employeeId: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.KpiAssignmentStatus;
        name: string;
        updatedAt: Date;
        deletedAt: Date | null;
        description: string | null;
        parentId: string | null;
        unit: string | null;
        cycleId: string;
        weight: Prisma.Decimal;
        baseTarget: string | null;
        stretchTarget: string | null;
        targetValue: Prisma.Decimal | null;
        seq: number | null;
        maturityScore: Prisma.Decimal | null;
    }>;
    updateAssignment(id: string, data: {
        weight?: number;
        targetValue?: number;
        name?: string;
        description?: string;
        baseTarget?: string;
        stretchTarget?: string;
        dependentUserId?: string | null;
        dependencyDescription?: string | null;
    }, userId?: string): Promise<{
        assessment: {
            id: string;
            status: import("@prisma/client").$Enums.KpiAssessmentStatus;
            deletedAt: Date | null;
            managerId: string | null;
            assignmentId: string;
            selfScore: Prisma.Decimal | null;
            completionNote: string | null;
            selfComment: string | null;
            selfEvaluatedAt: Date | null;
            managerScore: Prisma.Decimal | null;
            managerComment: string | null;
            managerEvaluatedAt: Date | null;
            finalScore: Prisma.Decimal | null;
        } | null;
        outgoingDependencies: {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.KpiDependencyStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            targetUserId: string;
            sourceAssignmentId: string;
            rejectionReason: string | null;
            confirmedAt: Date | null;
            targetAssignmentId: string | null;
        }[];
    } & {
        id: string;
        employeeId: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.KpiAssignmentStatus;
        name: string;
        updatedAt: Date;
        deletedAt: Date | null;
        description: string | null;
        parentId: string | null;
        unit: string | null;
        cycleId: string;
        weight: Prisma.Decimal;
        baseTarget: string | null;
        stretchTarget: string | null;
        targetValue: Prisma.Decimal | null;
        seq: number | null;
        maturityScore: Prisma.Decimal | null;
    }>;
    deleteAssignment(id: string, userId: string): Promise<void>;
    findAssessmentById(id: string): Promise<{
        assignment: {
            cycle: {
                type: import("@prisma/client").$Enums.CycleType;
                id: string;
                createdAt: Date;
                status: import("@prisma/client").$Enums.CycleStatus;
                name: string;
                startDate: Date;
                endDate: Date;
                updatedAt: Date;
                deletedAt: Date | null;
                organizationId: string;
                createdBy: string;
                resultsPublishedAt: Date | null;
                resultsPublishedBy: string | null;
                gradeConfigId: string | null;
                parentCycleId: string | null;
            };
        } & {
            id: string;
            employeeId: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.KpiAssignmentStatus;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            parentId: string | null;
            unit: string | null;
            cycleId: string;
            weight: Prisma.Decimal;
            baseTarget: string | null;
            stretchTarget: string | null;
            targetValue: Prisma.Decimal | null;
            seq: number | null;
            maturityScore: Prisma.Decimal | null;
        };
    } & {
        id: string;
        status: import("@prisma/client").$Enums.KpiAssessmentStatus;
        deletedAt: Date | null;
        managerId: string | null;
        assignmentId: string;
        selfScore: Prisma.Decimal | null;
        completionNote: string | null;
        selfComment: string | null;
        selfEvaluatedAt: Date | null;
        managerScore: Prisma.Decimal | null;
        managerComment: string | null;
        managerEvaluatedAt: Date | null;
        finalScore: Prisma.Decimal | null;
    }>;
    selfEvaluate(assessmentId: string, userId: string, data: {
        score?: number;
        selfScore?: number;
        comment?: string;
        selfComment?: string;
        completionNote?: string;
    }): Promise<{
        id: string;
        status: import("@prisma/client").$Enums.KpiAssessmentStatus;
        deletedAt: Date | null;
        managerId: string | null;
        assignmentId: string;
        selfScore: Prisma.Decimal | null;
        completionNote: string | null;
        selfComment: string | null;
        selfEvaluatedAt: Date | null;
        managerScore: Prisma.Decimal | null;
        managerComment: string | null;
        managerEvaluatedAt: Date | null;
        finalScore: Prisma.Decimal | null;
    }>;
    private tryActivate360Evaluation;
    managerEvaluate(assessmentId: string, managerId: string, data: {
        score?: number;
        managerScore?: number;
        comment?: string;
        managerComment?: string;
    }): Promise<{
        id: string;
        status: import("@prisma/client").$Enums.KpiAssessmentStatus;
        deletedAt: Date | null;
        managerId: string | null;
        assignmentId: string;
        selfScore: Prisma.Decimal | null;
        completionNote: string | null;
        selfComment: string | null;
        selfEvaluatedAt: Date | null;
        managerScore: Prisma.Decimal | null;
        managerComment: string | null;
        managerEvaluatedAt: Date | null;
        finalScore: Prisma.Decimal | null;
    }>;
    confirmAssessment(assessmentId: string): Promise<{
        id: string;
        status: import("@prisma/client").$Enums.KpiAssessmentStatus;
        deletedAt: Date | null;
        managerId: string | null;
        assignmentId: string;
        selfScore: Prisma.Decimal | null;
        completionNote: string | null;
        selfComment: string | null;
        selfEvaluatedAt: Date | null;
        managerScore: Prisma.Decimal | null;
        managerComment: string | null;
        managerEvaluatedAt: Date | null;
        finalScore: Prisma.Decimal | null;
    }>;
    calculateFinalScore(assessmentId: string): Promise<number>;
    submitAllKpi(cycleId: string, employeeId: string): Promise<{
        submitted: number;
    }>;
    approveAssignment(assignmentId: string): Promise<{
        id: string;
        status: import("@prisma/client").$Enums.KpiAssignmentStatus;
    }>;
    rejectAssignment(assignmentId: string, reason: string): Promise<{
        id: string;
        status: import("@prisma/client").$Enums.KpiAssignmentStatus;
    }>;
    confirmDependency(dependencyId: string, userId: string): Promise<{
        sourceAssignment: {
            cycle: {
                id: string;
                name: string;
            };
        } & {
            id: string;
            employeeId: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.KpiAssignmentStatus;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            parentId: string | null;
            unit: string | null;
            cycleId: string;
            weight: Prisma.Decimal;
            baseTarget: string | null;
            stretchTarget: string | null;
            targetValue: Prisma.Decimal | null;
            seq: number | null;
            maturityScore: Prisma.Decimal | null;
        };
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.KpiDependencyStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        description: string | null;
        targetUserId: string;
        sourceAssignmentId: string;
        rejectionReason: string | null;
        confirmedAt: Date | null;
        targetAssignmentId: string | null;
    }>;
    rejectDependency(dependencyId: string, userId: string, reason: string): Promise<{
        id: string;
        status: import("@prisma/client").$Enums.KpiDependencyStatus;
    }>;
    getPendingDependencyConfirmations(userId: string): Promise<{
        kpiName: string | null;
        dependencyDescription: string | null;
        sourceEmployee: {
            displayName: string;
            id: string;
        } | null;
        sourceAssignment: {
            cycle: {
                id: string;
                name: string;
            };
        } & {
            id: string;
            employeeId: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.KpiAssignmentStatus;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            parentId: string | null;
            unit: string | null;
            cycleId: string;
            weight: Prisma.Decimal;
            baseTarget: string | null;
            stretchTarget: string | null;
            targetValue: Prisma.Decimal | null;
            seq: number | null;
            maturityScore: Prisma.Decimal | null;
        };
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.KpiDependencyStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        description: string | null;
        targetUserId: string;
        sourceAssignmentId: string;
        rejectionReason: string | null;
        confirmedAt: Date | null;
        targetAssignmentId: string | null;
    }[]>;
    validateWeightSum(cycleId: string, employeeId: string): Promise<{
        valid: boolean;
        totalWeight: number;
    }>;
    getMyAssessments(userId: string, query?: {
        cycleId?: string;
        page?: number;
        pageSize?: number;
    }): Promise<{
        items: {
            id: string;
            cycleId: string;
            employeeId: string;
            name: string;
            weight: Prisma.Decimal;
            targetValue: Prisma.Decimal | null;
            baseTarget: string | null;
            stretchTarget: string | null;
            status: import("@prisma/client").$Enums.KpiAssignmentStatus;
            dependencies: any;
            dependentUserId: any;
            dependentUser: {
                displayName: string;
                id: string;
            } | null;
            dependencyStatus: any;
            dependencyDescription: any;
            dependencyRejectionReason: any;
            parentId: string | null;
            seq: number | null;
            assessment: {
                id: any;
                selfScore: number | undefined;
                managerScore: number | undefined;
                finalScore: number | undefined;
                selfComment: any;
                managerComment: any;
                status: any;
            } | null;
            employee: {
                id: string;
                displayName: string;
            } | null;
            createdAt: Date;
            updatedAt: Date;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    getTeamAssessments(managerId: string, query?: {
        cycleId?: string;
        organizationId?: string;
    }): Promise<{
        items: never[];
        teamSize: number;
        departments: never[];
        results?: undefined;
    } | {
        items: {
            employee: {
                id: string;
                displayName: string;
                username: string;
                email: string;
                avatar: string | null;
                department: any;
                position: any;
            } | null;
            assessment: {
                id: string;
                status: import("@prisma/client").$Enums.KpiAssessmentStatus;
                deletedAt: Date | null;
                managerId: string | null;
                assignmentId: string;
                selfScore: Prisma.Decimal | null;
                completionNote: string | null;
                selfComment: string | null;
                selfEvaluatedAt: Date | null;
                managerScore: Prisma.Decimal | null;
                managerComment: string | null;
                managerEvaluatedAt: Date | null;
                finalScore: Prisma.Decimal | null;
            } | null;
            id: string;
            employeeId: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.KpiAssignmentStatus;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            parentId: string | null;
            unit: string | null;
            cycleId: string;
            weight: Prisma.Decimal;
            baseTarget: string | null;
            stretchTarget: string | null;
            targetValue: Prisma.Decimal | null;
            seq: number | null;
            maturityScore: Prisma.Decimal | null;
        }[];
        teamSize: any;
        departments: {
            id: string;
            name: string;
        }[];
        results: {
            [k: string]: {
                employeeId: string;
                isPublished: boolean;
                totalScore: Prisma.Decimal | null;
                gradeCode: string | null;
                gradeName: string | null;
                confirmStatus: import("@prisma/client").$Enums.ResultConfirmStatus;
            };
        };
    }>;
}
