import { PrismaService } from "../../core/database/prisma/prisma.service";
import { TemporalService } from './temporal/temporal.service';
import { BusinessTypeRegistry } from './business-type-registry.service';
import { StartApprovalDto, ApproveDto, RejectDto, ReturnDto, ForwardDto, WithdrawDto, ApproverWithdrawDto, AddSignDto, ClaimDto, UnclaimDto, ExecuteDto, PendingTasksQueryDto, InitiatedQueryDto, ProcessedQueryDto, CcQueryDto, ProcessSearchDto, RemindDto, BatchRemindDto } from './dto/approval.dto';
import { StartApprovalResponse, ApprovalActionResponse, WithdrawResponse, PaginatedTasksResponse, TaskDetailResponse, ProcessDetailResponse, ProcessStatusResponse, ApprovalHistoryResponse, DiagramResponse, RemindResponse, BatchRemindResponse, TaskStatsResponse, ReturnableNode } from './dto/approval-response.dto';
export declare class ApprovalService {
    private readonly prisma;
    private readonly temporalService;
    private readonly businessTypeRegistry;
    private readonly logger;
    constructor(prisma: PrismaService, temporalService: TemporalService, businessTypeRegistry: BusinessTypeRegistry);
    private mapApprovalModeForWorkflow;
    private normalizeApprovalMode;
    startApproval(dto: StartApprovalDto, initiatorId: string): Promise<StartApprovalResponse>;
    approve(dto: ApproveDto, operatorId: string): Promise<ApprovalActionResponse>;
    reject(dto: RejectDto, operatorId: string): Promise<ApprovalActionResponse>;
    return(dto: ReturnDto, operatorId: string): Promise<ApprovalActionResponse>;
    forward(dto: ForwardDto, operatorId: string): Promise<ApprovalActionResponse>;
    withdraw(instanceId: string, dto: WithdrawDto, operatorId: string): Promise<WithdrawResponse>;
    approverWithdraw(instanceId: string, dto: ApproverWithdrawDto, operatorId: string): Promise<ApprovalActionResponse>;
    addSign(instanceId: string, dto: AddSignDto, operatorId: string): Promise<ApprovalActionResponse>;
    claim(instanceId: string, dto: ClaimDto, operatorId: string): Promise<ApprovalActionResponse>;
    unclaim(instanceId: string, dto: UnclaimDto, operatorId: string): Promise<ApprovalActionResponse>;
    execute(instanceId: string, dto: ExecuteDto, operatorId: string): Promise<ApprovalActionResponse>;
    getMyPendingTasks(userId: string, query: PendingTasksQueryDto): Promise<PaginatedTasksResponse>;
    getMyInitiated(userId: string | undefined, query: InitiatedQueryDto): Promise<PaginatedTasksResponse>;
    getMyProcessed(userId: string, query: ProcessedQueryDto): Promise<PaginatedTasksResponse>;
    getMyCc(userId: string, query: CcQueryDto): Promise<PaginatedTasksResponse>;
    getMyStats(userId: string): Promise<TaskStatsResponse>;
    getTaskDetail(taskId: string, userId: string): Promise<TaskDetailResponse>;
    getReturnableNodes(instanceId: string, taskId: string): Promise<ReturnableNode[]>;
    getProcessDetail(instanceId: string): Promise<ProcessDetailResponse>;
    private mapTaskToItemFromDb;
    getProcessStatus(instanceId: string): Promise<ProcessStatusResponse>;
    getProcessHistory(instanceId: string): Promise<ApprovalHistoryResponse>;
    getProcessByBusiness(businessType: string, businessId: string): Promise<ProcessDetailResponse>;
    searchProcesses(query: ProcessSearchDto): Promise<PaginatedTasksResponse>;
    getDiagram(instanceId: string): Promise<DiagramResponse>;
    getDiagramByBusiness(businessType: string, businessId: string): Promise<DiagramResponse>;
    remind(instanceId: string, dto: RemindDto, operatorId: string): Promise<RemindResponse>;
    batchRemind(instanceId: string, dto: BatchRemindDto, operatorId: string): Promise<BatchRemindResponse>;
    private getTaskWithValidation;
    private validateTaskForAction;
    private createActionLog;
    private getCurrentNodeInfo;
    private getUserInfo;
    private mapUserInfo;
    private getAvailableActions;
    getReminders(instanceId: string): Promise<{
        items: {
            id: string;
            instanceId: string;
            taskId: string;
            reminderType: import("@prisma/client").$Enums.ReminderType;
            channels: string[];
            status: import("@prisma/client").$Enums.ReminderStatus;
            scheduledAt: string;
            executedAt: string | undefined;
            createdAt: string;
        }[];
    }>;
    getMyReminders(userId: string, query: PendingTasksQueryDto): Promise<{
        items: {
            id: string;
            instanceId: string;
            taskId: string;
            taskName: string;
            businessKey: string;
            reminderType: import("@prisma/client").$Enums.ReminderType;
            channels: string[];
            status: import("@prisma/client").$Enums.ReminderStatus;
            scheduledAt: string;
            executedAt: string | undefined;
            createdAt: string;
        }[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
        hasNext: boolean;
        hasPrev: boolean;
    }>;
    private isValidUUID;
}
