/// <reference types="mongoose/types/document" />
/// <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 { IQuickbooksAccount } from '../models/QuickbooksAccount.model';
import { IQuickbooksUploadItem } from '../classes/quickbook-item';
import { BanksService } from './banks.service';
import { BankUploadedTransactionsService } from './bank-uploaded-transactions.service';
import { BorrowersDB } from './borrowers.db';
import { BrokersService } from './brokers.service';
import { CashAllocationService } from './cash-allocation.service';
import { CompaniesService } from './companies.service';
import { LoanChargesService } from './loan-charges.service';
import { LoanPaymentsService } from './loan-payments.service';
export type QuickBookReportType = 'accrual' | 'payment' | 'cash';
interface IQBReportTransaction {
    service: string;
    id: string;
    type: string;
    date: string;
    account: string;
    class: string;
    amount: number | string;
    document: string;
    memo: string;
    productId?: string;
    location?: string;
}
export declare class QuickbooksService {
    private readonly banksService;
    private readonly bankUploadedTransactionsService;
    private readonly borrowersDB;
    private readonly brokersService;
    private readonly cashAllocationService;
    private readonly companiesService;
    private readonly loanChargesService;
    private readonly loanPaymentsService;
    constructor(banksService: BanksService, bankUploadedTransactionsService: BankUploadedTransactionsService, borrowersDB: BorrowersDB, brokersService: BrokersService, cashAllocationService: CashAllocationService, companiesService: CompaniesService, loanChargesService: LoanChargesService, loanPaymentsService: LoanPaymentsService);
    uploadAccounts(accounts: IQuickbooksUploadItem[], deleteOld: boolean): Promise<void>;
    getAllAccounts(): Promise<(mongoose.FlattenMaps<IQuickbooksAccount> & {
        _id: mongoose.Types.ObjectId;
    })[]>;
    saveAccounts(accounts: (IQuickbooksAccount & {
        _id: string;
    })[], deleteOld: boolean): Promise<(mongoose.Document<unknown, object, IQuickbooksAccount> & Omit<IQuickbooksAccount & {
        _id: mongoose.Types.ObjectId;
    }, never> & object)[]>;
    getAllProducts(): Promise<any[]>;
    getChargeTransactionsForAccrual(productIds: string[], reportDate: Date): Promise<import("../models/LoanStatementTransaction.model").ILoanStatementTransactionDoc[]>;
    getChargeTransactionsForPayments(productIds: string[], reportDate: Date): Promise<import("../models/LoanStatementTransaction.model").ILoanStatementTransactionDoc[]>;
    getPrincipalTransactionsForPayments(productId: string, reportDate: Date): Promise<{
        [settlementCode: string]: number;
    }>;
    getQuickbooksReport(params: {
        reportType: QuickBookReportType;
        productIds: string[];
        chargeTypes: string[];
        reportDate: Date;
        format: 'IIF' | 'CSV';
        companyIds: string[];
    }): Promise<{
        reportData: IQBReportTransaction[];
        reportErrors: string[];
    }>;
    getQuickbooksCashReport(params: {
        reportType: QuickBookReportType;
        productIds: string[];
        chargeTypes: string[];
        reportDate: Date;
        format: 'IIF' | 'CSV';
        companyId: string;
    }): Promise<{
        reportData: IQBReportTransaction[];
        reportErrors: string[];
    }>;
    convertQuickbooksReport(reportData: IQBReportTransaction[], format: 'IIF' | 'CSV', memo: string): string;
    reassignAccounts(): Promise<void>;
}
export {};
