/**
 * SubcontractorService - Servicio de gestión de subcontratistas
 *
 * Catálogo de subcontratistas con evaluaciones.
 *
 * @module Contracts
 */
import { Repository } from 'typeorm';
import { Subcontractor, SubcontractorStatus, SubcontractorSpecialty } from '../entities/subcontractor.entity';
import { ServiceContext, PaginatedResult } from '../../../shared/services/base.service';
export interface CreateSubcontractorDto {
    businessName: string;
    tradeName?: string;
    rfc: string;
    address?: string;
    phone?: string;
    email?: string;
    contactName?: string;
    contactPhone?: string;
    primarySpecialty: SubcontractorSpecialty;
    secondarySpecialties?: string[];
    bankName?: string;
    bankAccount?: string;
    clabe?: string;
    notes?: string;
}
export interface UpdateSubcontractorDto {
    tradeName?: string;
    address?: string;
    phone?: string;
    email?: string;
    contactName?: string;
    contactPhone?: string;
    secondarySpecialties?: string[];
    bankName?: string;
    bankAccount?: string;
    clabe?: string;
    notes?: string;
}
export interface SubcontractorFilters {
    specialty?: SubcontractorSpecialty;
    status?: SubcontractorStatus;
    search?: string;
    minRating?: number;
}
export declare class SubcontractorService {
    private readonly subcontractorRepository;
    constructor(subcontractorRepository: Repository<Subcontractor>);
    private generateCode;
    findWithFilters(ctx: ServiceContext, filters?: SubcontractorFilters, page?: number, limit?: number): Promise<PaginatedResult<Subcontractor>>;
    findById(ctx: ServiceContext, id: string): Promise<Subcontractor | null>;
    findByRfc(ctx: ServiceContext, rfc: string): Promise<Subcontractor | null>;
    create(ctx: ServiceContext, dto: CreateSubcontractorDto): Promise<Subcontractor>;
    update(ctx: ServiceContext, id: string, dto: UpdateSubcontractorDto): Promise<Subcontractor | null>;
    updateRating(ctx: ServiceContext, id: string, rating: number): Promise<Subcontractor | null>;
    incrementContracts(ctx: ServiceContext, id: string, completed?: boolean): Promise<Subcontractor | null>;
    incrementIncidents(ctx: ServiceContext, id: string): Promise<Subcontractor | null>;
    deactivate(ctx: ServiceContext, id: string): Promise<Subcontractor | null>;
    blacklist(ctx: ServiceContext, id: string, reason: string): Promise<Subcontractor | null>;
    softDelete(ctx: ServiceContext, id: string): Promise<boolean>;
    getBySpecialty(ctx: ServiceContext, specialty: SubcontractorSpecialty): Promise<Subcontractor[]>;
}
//# sourceMappingURL=subcontractor.service.d.ts.map