/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose/types/inferschematype" />
import mongoose from 'mongoose';
import { RedisClientType } from 'redis';
import { IPaginatorOptions } from '../interfaces/collaterals.interface';
import { ELoanChargeType } from '../enums/loan-charge-type.enum';
import { ICombinedPayment, ILoanPaymentDoc, ILoanPaymentWithId } from '../models/LoanPayment.model';
import { BorrowersDB } from './borrowers.db';
import { LoanStatementBalanceService } from './loan-statement-balance.service';
import { LoanProductsService } from './loan-products.service';
import { LoanChargesService } from './loan-charges.service';
import { FinancialComplianceService } from './financial-compliance.service';
import { LoanStatementService } from './loan-statement.service';
import { LoanStatementStatusService } from './loan-statement-status.service';
import { LoanTransactionsService } from './loan-transactions.service';
import { TermLoanService } from './term-loan.service';
import { LockService } from './lock.service';
import { UsersService } from './users.service';
export declare const paymentOrder: ELoanChargeType[];
export declare class LoanPaymentsService {
    private readonly redisClient;
    private readonly borrowersDB;
    private readonly financialComplianceService;
    private readonly loanChargesService;
    private readonly loanProductsService;
    private readonly loanStatementBalanceService;
    private readonly getLoanStatementService;
    private readonly loanStatementStatusService;
    private readonly loanTransactionsService;
    private readonly lockService;
    private readonly termLoanService;
    private readonly usersService;
    constructor(redisClient: RedisClientType, borrowersDB: BorrowersDB, financialComplianceService: FinancialComplianceService, loanChargesService: LoanChargesService, loanProductsService: LoanProductsService, loanStatementBalanceService: LoanStatementBalanceService, getLoanStatementService: () => LoanStatementService, loanStatementStatusService: LoanStatementStatusService, loanTransactionsService: LoanTransactionsService, lockService: LockService, termLoanService: TermLoanService, usersService: UsersService);
    getLoanPayment(paymentId: string): Promise<mongoose.FlattenMaps<ILoanPaymentDoc> & {
        _id: mongoose.Types.ObjectId;
    }>;
    getLoanPayments(filter: {
        productIds: string[];
        start: Date;
        end: Date;
    }, paginatorOptions: IPaginatorOptions): Promise<ILoanPaymentDoc[]>;
    getTotalLoanPaymentsForProduct(filter: {
        productIds: string[];
        start: Date;
        end: Date;
    }): Promise<number>;
    saveLoanPayment(payment: Partial<ILoanPaymentWithId>, userId: string): Promise<void>;
    createLoanPayment(payment: Partial<ILoanPaymentWithId>, userId: string): Promise<void>;
    updateLoanPayment(payment: Partial<ILoanPaymentWithId>, userId: string): Promise<void>;
    recalculateAfterPayment(productId: string, userId: string): Promise<void>;
    deleteLoanPayment(paymentId: string, userId: string): Promise<void>;
    private calculatePaymentProportions;
    updateComplianceBorrowerAmountReceived(borrowerId: string): Promise<void>;
    recalculateProduct(productId: string, userId: string): Promise<void>;
    getPaymentsForPeriod(productIds: string[], startDate: Date, endDate: Date): Promise<ILoanPaymentDoc[]>;
    proceedCombinedPayment(combinedPayment: ICombinedPayment, userId: string): Promise<{
        success: boolean;
        message: string;
    }>;
    getExpectedPayments(userId: string): Promise<any[] | {
        borrowers: {
            borrowerId: string;
            borrowerTitle: string;
            totalDue: number;
            productTotals: {
                [productId: string]: number;
            };
            revolverBalance: number;
            termBalance: number;
        }[];
        isCalculated: boolean;
    }>;
    payExpectedPayments(userId: string, borrowers: {
        [borrowerId: string]: boolean;
    }, selectedDate: Date): Promise<{
        message: string;
    }>;
}
