/// <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 { IPaginatorOptions } from '../interfaces/collaterals.interface';
import { ELoanChargeType } from '../enums/loan-charge-type.enum';
import { ILoanProductDoc, ILoanProductView } from '../models/LoanProducts.model';
import { ILoanChargeView } from '../models/LoanCharges.model';
import { ILoanStatementTransactionDoc, ILoanStatementTransactionDocWithCharge } from '../models/LoanStatementTransaction.model';
import { BorrowersDB } from './borrowers.db';
export declare class LoanChargesService {
    private readonly borrowersDB;
    constructor(borrowersDB: BorrowersDB);
    private validateCharge;
    getProductByChargeId(chargeId: string): Promise<mongoose.FlattenMaps<ILoanProductDoc> & Required<{
        _id: mongoose.Types.ObjectId;
    }>>;
    getBorrowersLoanProducts(borrowerId: string): Promise<(mongoose.FlattenMaps<ILoanProductDoc> & Required<{
        _id: mongoose.Types.ObjectId;
    }>)[]>;
    getAllLoanProducts(): Promise<ILoanProductDoc[]>;
    getLoanProducts(borrowerId: string): Promise<ILoanProductView[]>;
    getLoanProductsByIds(productIds: string[]): Promise<ILoanProductView[]>;
    getLoanProductBalance(productId: string, forDate?: Date): Promise<{
        balance: number;
        floatedBalance: number;
    }>;
    getParticipationBalance(code: string, end: Date): Promise<number>;
    getLoanProductById(productId: string): Promise<mongoose.FlattenMaps<ILoanProductDoc> & Required<{
        _id: mongoose.Types.ObjectId;
    }>>;
    getLoanProductIdByCode(code: string): Promise<string>;
    getLoanChargeIdByCode(code: string): Promise<string>;
    saveLoanProducts(borrowerId: string, loanProducts: ILoanProductView[]): Promise<void>;
    getLoanCharges(borrowerId: string): Promise<ILoanChargeView[]>;
    getLoanChargeForProduct(productId: string): Promise<ILoanChargeView[]>;
    validateLoanCharge(loanCharge: ILoanChargeView): boolean;
    saveLoanCharges(borrowerId: string, loanCharges: ILoanChargeView[], quickCreate?: boolean): Promise<void>;
    private getChargeIds;
    getLoanStatementsForProduct(filter: {
        productIds: string[];
        start: Date;
        end: Date;
    }, paginatorOptions?: IPaginatorOptions, chargeType?: ELoanChargeType): Promise<ILoanStatementTransactionDoc[]>;
    getLoanStatementsForIdsAndCharge(filter: {
        productIds: string[];
        transactionIds: string[];
        start: Date;
        end: Date;
    }, paginatorOptions?: IPaginatorOptions, chargeType?: ELoanChargeType): Promise<ILoanStatementTransactionDoc[]>;
    getLoanStatementsForForProductWithCharges(filter: {
        productIds: string[];
        start: Date;
        end: Date;
    }, paginatorOptions?: IPaginatorOptions): Promise<ILoanStatementTransactionDocWithCharge[]>;
    getTotalLoanStatementsForProduct(filter: {
        productIds: string[];
        start: Date;
        end: Date;
    }): Promise<number>;
    updatedChargeCodes(productId: string): Promise<void>;
}
