import { PrismaService } from "../../../core/database/prisma/prisma.service";
export declare class ReportsService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    getAttendanceReport(): Promise<{
        summary: {
            totalAttendances: number;
            presentCount: number;
            lateCount: number;
            absentCount: number;
            attendanceRate: number;
        };
        departmentStats: {
            department: string;
            total: number;
            present: number;
            attendanceRate: number;
        }[];
    }>;
    listSeriesOptions(): Promise<{
        id: string;
        title: string;
        startDate: string;
        endDate: string | null;
        hasLegacy: boolean;
    }[]>;
    getSeriesReport(query: {
        seriesId?: string;
        startDate?: string;
        endDate?: string;
        includeLegacy?: boolean;
    }): Promise<{
        series: {
            id: any;
            title: any;
            meetings: never[];
            startDate: any;
            effectiveStartTime: any;
        };
        meetingRange: {
            startDate: string | null;
            endDate: string | null;
            actualCount: number;
            firstMeeting: null;
            lastMeeting: null;
        };
        overallStats: {
            totalMeetings: number;
            totalRequired: number;
            totalAttended: number;
            attendanceRate: number;
            optionalTotal: number;
            optionalAttended: number;
        };
        statusDistribution: {
            status: string;
            name: string;
            count: number;
            color: string;
        }[];
        roleStats: never[];
        personalStats: never[];
        departmentStats: never[];
        lowAttendanceRanking: never[];
        hasLegacy: boolean;
        legacyIncluded: string[];
        enforceCheckinMode?: undefined;
        city?: undefined;
    } | {
        series: {
            id: any;
            title: any;
            meetings: any;
            startDate: any;
            effectiveStartTime: any;
        };
        meetingRange: {
            startDate: string | null;
            endDate: string | null;
            actualCount: number;
            firstMeeting: {
                title: any;
                startTime: any;
            } | null;
            lastMeeting: {
                title: any;
                startTime: any;
            } | null;
        };
        overallStats: {
            totalMeetings: number;
            totalRequired: number;
            totalAttended: number;
            attendanceRate: number;
            optionalTotal: number;
            optionalAttended: number;
        };
        enforceCheckinMode: boolean;
        city: any;
        statusDistribution: {
            status: string;
            name: string;
            count: number;
            color: string;
        }[];
        roleStats: {
            role: import("@prisma/client").$Enums.AttendeeRole;
            roleName: string;
            total: number;
            attended: number;
            attendanceRate: number;
        }[];
        personalStats: {
            user: {
                id: string;
                displayName: string;
                email: string;
                department: string | null;
            };
            role: import("@prisma/client").$Enums.AttendeeRole;
            totalMeetings: number;
            attended: number;
            attendanceRate: number;
            statusCounts: {
                ON_SITE: number;
                ONLINE: number;
                LATE: number;
                ABSENT: number;
                PTO: number;
                BUSINESS_CONFLICT: number;
                NOT_CHECKED_IN: number;
            };
            allowedMode: "ON_SITE" | "ONLINE" | null;
            allowedModeSource: "SERIES_PREFERENCE" | "CITY_DERIVED";
            adjustmentCount: number;
            adjustmentMeetingIds: string[];
        }[];
        departmentStats: {
            department: string;
            total: number;
            attended: number;
            attendanceRate: number;
        }[];
        lowAttendanceRanking: ({
            user: {
                id: string;
                displayName: string;
                email: string;
                department: string | null;
            };
            role: import("@prisma/client").$Enums.AttendeeRole;
            totalMeetings: number;
            attended: number;
            attendanceRate: number;
            statusCounts: {
                ON_SITE: number;
                ONLINE: number;
                LATE: number;
                ABSENT: number;
                PTO: number;
                BUSINESS_CONFLICT: number;
                NOT_CHECKED_IN: number;
            };
            allowedMode: "ON_SITE" | "ONLINE" | null;
            allowedModeSource: "SERIES_PREFERENCE" | "CITY_DERIVED";
            adjustmentCount: number;
            adjustmentMeetingIds: string[];
        } & {
            rank: number;
        })[];
        hasLegacy: boolean;
        legacyIncluded: string[];
    }>;
    getSingleMeetingReport(query: {
        meetingId?: string;
    }): Promise<{
        meeting: {
            id: any;
            title: any;
            startTime: any;
            endTime: any;
            location: any;
            status: any;
        };
        overallStats: {
            totalRequired: number;
            totalAttended: number;
            attendanceRate: number;
            optionalTotal: number;
            optionalAttended: number;
        };
        enforceCheckinMode: boolean;
        city: any;
        statusDistribution: {
            status: string;
            name: string;
            count: number;
            color: string;
        }[];
        roleStats: {
            role: import("@prisma/client").$Enums.AttendeeRole;
            roleName: string;
            total: number;
            attended: number;
            attendanceRate: number;
        }[];
        personalStats: {
            user: {
                id: any;
                displayName: any;
                email: any;
                department: any;
            };
            role: any;
            attended: any;
            actualStatus: any;
            statusCounts: any;
            allowedMode: "ON_SITE" | "ONLINE" | null;
            allowedModeSource: "MEETING_OVERRIDE" | "SERIES_PREFERENCE" | "CITY_DERIVED";
            isOverridden: boolean;
            defaultMode: "ON_SITE" | "ONLINE" | null;
        }[];
        departmentStats: {
            department: string;
            total: number;
            attended: number;
            attendanceRate: number;
        }[];
    }>;
    private getPrimaryDepartmentName;
}
