/**
 * AsignacionService - Servicio de asignaciones de vivienda INFONAVIT
 *
 * Gestión de asignaciones de vivienda a derechohabientes.
 *
 * @module Infonavit
 */
import { Repository } from 'typeorm';
import { AsignacionVivienda, AsignacionStatus } from '../entities/asignacion-vivienda.entity';
import { OfertaVivienda } from '../entities/oferta-vivienda.entity';
import { Derechohabiente } from '../entities/derechohabiente.entity';
import { ServiceContext, PaginatedResult } from '../../../shared/services/base.service';
export interface CreateAsignacionDto {
    ofertaId: string;
    derechohabienteId: string;
    assignmentDate: Date;
    creditAmount: number;
    subsidyAmount?: number;
    downPayment?: number;
    notes?: string;
}
export interface FormalizeDto {
    formalizationDate: Date;
    notaryName: string;
    notaryNumber: string;
    deedNumber: string;
    deedDate: Date;
}
export interface AsignacionFilters {
    registroId?: string;
    ofertaId?: string;
    derechohabienteId?: string;
    status?: AsignacionStatus;
    dateFrom?: Date;
    dateTo?: Date;
}
export declare class AsignacionService {
    private readonly asignacionRepository;
    private readonly ofertaRepository;
    private readonly derechohabienteRepository;
    constructor(asignacionRepository: Repository<AsignacionVivienda>, ofertaRepository: Repository<OfertaVivienda>, derechohabienteRepository: Repository<Derechohabiente>);
    private generateAssignmentNumber;
    findWithFilters(ctx: ServiceContext, filters?: AsignacionFilters, page?: number, limit?: number): Promise<PaginatedResult<AsignacionVivienda>>;
    findById(ctx: ServiceContext, id: string): Promise<AsignacionVivienda | null>;
    findWithDetails(ctx: ServiceContext, id: string): Promise<AsignacionVivienda | null>;
    create(ctx: ServiceContext, dto: CreateAsignacionDto): Promise<AsignacionVivienda>;
    approve(ctx: ServiceContext, id: string): Promise<AsignacionVivienda | null>;
    formalize(ctx: ServiceContext, id: string, dto: FormalizeDto): Promise<AsignacionVivienda | null>;
    deliver(ctx: ServiceContext, id: string, deliveryDate: Date): Promise<AsignacionVivienda | null>;
    cancel(ctx: ServiceContext, id: string, reason: string): Promise<AsignacionVivienda | null>;
}
//# sourceMappingURL=asignacion.service.d.ts.map