import { Repository } from 'typeorm';
import { Advance } from '../advances/entities/advance.entity';
import { Attendance } from '../attendances/entities/attendance.entity';
import { AttendanceType } from '../attendances/entities/attendance-type.entity';
import { JobTitle } from '../job-titles/entities/job-title.entity';
import { Period } from '../periods/entities/period.entity';
import { Site } from '../sites/entities/site.entity';
import { WorkerPeriodSnapshotsService } from '../periods/snapshots/worker-period-snapshots.service';
import { Worker } from '../workers/entities/worker.entity';
export interface WorkerJobTitleBreakdown {
    jobTitleId: number;
    days: number;
    dailyRate: number;
    remuneration: number;
    invoiceRate: number;
    invoiceAmount: number;
}
export interface WorkerAbsenceBreakdown {
    code: string;
    days: number;
}
export interface WorkerSummary {
    workerId: number;
    totalDays: number;
    dailyRate: number;
    remuneration: number;
    invoiceRate: number;
    invoiceAmount: number;
    totalAdvances: number;
    netBalance: number;
    byJobTitle: WorkerJobTitleBreakdown[];
    absenceDays: number;
    absencesByType: WorkerAbsenceBreakdown[];
}
export interface SiteBreakdown {
    siteId: number;
    siteName: string;
    siteCode: string;
    periodId: number;
    totalDays: number;
    remuneration: number;
}
export interface WorkerLabelMonthSummary {
    workerId: number;
    labelMonth: number;
    labelYear: number;
    totalDays: number;
    remuneration: number;
    invoiceAmount: number;
    totalAdvances: number;
    netBalance: number;
    perSite: SiteBreakdown[];
    byJobTitle: WorkerJobTitleBreakdown[];
    absenceDays: number;
    absencesByType: WorkerAbsenceBreakdown[];
}
export interface AggregateRow {
    workerId: number;
    workerFirstName: string;
    workerLastName: string;
    siteId: number;
    siteName: string;
    jobTitleId: number | null;
    totalDays: number;
}
export interface AggregateQuery {
    from: string;
    to: string;
    companyId?: number;
    siteId?: number;
    departmentId?: number;
    jobTitleId?: number;
}
export declare class CalculationsService {
    private readonly workersRepository;
    private readonly attendancesRepository;
    private readonly attendanceTypesRepository;
    private readonly advancesRepository;
    private readonly periodsRepository;
    private readonly sitesRepository;
    private readonly jobTitlesRepository;
    private readonly snapshotsService;
    private readonly logger;
    constructor(workersRepository: Repository<Worker>, attendancesRepository: Repository<Attendance>, attendanceTypesRepository: Repository<AttendanceType>, advancesRepository: Repository<Advance>, periodsRepository: Repository<Period>, sitesRepository: Repository<Site>, jobTitlesRepository: Repository<JobTitle>, snapshotsService: WorkerPeriodSnapshotsService);
    summarizePeriod(periodId: number): Promise<WorkerSummary[]>;
    summarizeWorker(periodId: number, workerId: number): Promise<WorkerSummary | null>;
    summarizeWorkerForLabelMonth(workerId: number, labelYear: number, labelMonth: number): Promise<WorkerLabelMonthSummary | null>;
    aggregateByDateRange(query: AggregateQuery): Promise<AggregateRow[]>;
    private summarizeWorkerLines;
    private resolveRateForLine;
    private resolveLiveRate;
    private loadJobTitlesFor;
    private accumulateJobTitle;
    private finalizeJobTitles;
    private finalizeAbsences;
    private round;
}
