/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/utility" />
/// <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 Joi from 'joi';
import mongoose from 'mongoose';
import { ISelectedMonth } from '../helpers/date.helper';
import { ILoanChargeLean } from './LoanCharges.model';
import { ILoanProductLean } from './LoanProducts.model';
export declare const yieldParamsValidationSchema: Joi.ObjectSchema<IYieldParams>;
export declare enum ETotalType {
    AVERAGE_BALANCE = "AVERAGE_BALANCE",
    AVERAGE_LIFE_BALANCE = "AVERAGE_LIFE_BALANCE",
    BROKER = "BROKER",
    GROSS = "GROSS",
    NET = "NET",
    APR = "APR",
    APR_GROSS = "APR_GROSS",
    APR_LIFE_GROSS = "APR_LIFE_GROSS"
}
export declare const YIELD_TOTALS_MAP: Record<ETotalType, {
    order: number;
    title: string;
    class: string;
}>;
export interface IYieldParams {
    periodStart?: ISelectedMonth;
    periodEnd?: ISelectedMonth;
    forLifetime?: boolean;
    ignoreOldData?: boolean;
}
export interface IYieldData {
    productId?: mongoose.Types.ObjectId;
    chargeId?: mongoose.Types.ObjectId;
    totalType: string;
    year: number;
    month: number;
    value?: number;
    valuePercent?: number;
}
export interface IYieldViewData {
    order: number;
    charge: ILoanChargeLean;
    product: ILoanProductLean;
    title: string;
    class?: string;
    [key: `value-${string}`]: number | string | ILoanChargeLean | ILoanProductLean;
    [key: `valuePercent-${string}`]: number | string | ILoanChargeLean | ILoanProductLean;
}
export interface IYieldDataDoc extends IYieldData, mongoose.Document {
    _id: mongoose.Types.ObjectId;
    createdAt: Date;
    updatedAt: Date;
}
export interface IYieldDataLean extends IYieldData {
    _id: mongoose.Types.ObjectId;
    createdAt: Date;
    updatedAt: Date;
}
export interface IYieldDataPlain extends Omit<IYieldData, 'productId' | 'chargeId'> {
    _id: string;
    productId: string;
    chargeId: string;
}
export type TYieldDataModel = mongoose.Model<IYieldData>;
export declare const YieldDataSchema: mongoose.Schema<IYieldData, TYieldDataModel, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, IYieldData, mongoose.Document<unknown, {}, mongoose.FlatRecord<IYieldData>> & mongoose.FlatRecord<IYieldData> & {
    _id: mongoose.Types.ObjectId;
}>;
export declare const YieldData: TYieldDataModel;
