import type { Connection } from 'mongoose';
import * as factory from '../factory';
/**
 * 口座リポジトリ
 */
export declare class AccountRepo {
    private readonly accountModel;
    constructor(connection: Connection);
    static CREATE_MONGO_CONDITIONS(params: factory.account.ISearchConditions): any[];
    /**
     * 口座を開設する
     */
    open(params: {
        project: {
            typeOf: factory.organizationType.Project;
            id: string;
        };
        /**
         * 口座種別
         */
        typeOf: string;
        /**
         * 口座タイプ
         */
        accountType: string;
        /**
         * 口座名義
         */
        name: string;
        /**
         * 口座番号
         */
        accountNumber: string;
        /**
         * 初期金額
         */
        initialBalance: number;
        /**
         * 開設日時
         */
        openDate: Date;
    }[]): Promise<factory.account.IAccount[]>;
    /**
     * 口座を解約する
     */
    /**
     * 口座番号で検索する
     */
    findByAccountNumber(params: {
        /**
         * 口座番号
         */
        accountNumber: string;
    }): Promise<factory.account.IAccount>;
    /**
     * 金額を確保する
     * https://en.wikipedia.org/wiki/Authorization_hold
     */
    authorizeAmount(params: {
        /**
         * 口座番号
         */
        accountNumber: string;
        /**
         * 金額
         */
        amount: number;
        /**
         * 進行取引
         */
        transaction: factory.account.IPendingTransaction;
        /**
         * 利用可能金額確認をしない場合、force: true
         */
        force?: boolean;
    }): Promise<void>;
    /**
     * 取引を開始する
     */
    startTransaction(params: {
        /**
         * 口座番号
         */
        accountNumber: string;
        /**
         * 進行取引
         */
        transaction: factory.account.IPendingTransaction;
    }): Promise<void>;
    /**
     * 決済処理を実行する
     * 口座上で進行中の取引について、実際に金額移動処理を実行します。
     */
    settleTransaction(params: {
        fromAccountNumber?: string;
        toAccountNumber?: string;
        amount: number;
        transactionId: string;
    }): Promise<void>;
    /**
     * 取引を取り消す
     * 口座上で進行中の取引を中止します。
     * https://www.investopedia.com/terms/v/void-transaction.asp
     */
    voidTransaction(params: {
        fromAccountNumber?: string;
        toAccountNumber?: string;
        amount: number;
        transactionId: string;
    }): Promise<void>;
    /**
     * 通貨転送返金
     */
    returnTransaction(params: {
        fromAccountNumber?: string;
        toAccountNumber?: string;
        amount: number;
        transactionId: string;
    }): Promise<void>;
    count(params: factory.account.ISearchConditions): Promise<number>;
    /**
     * 口座を検索する
     */
    search(params: factory.account.ISearchConditions): Promise<factory.account.IAccount[]>;
    unsetUnnecessaryFields(params: {
        filter: any;
        $unset: any;
    }): Promise<import("mongoose").UpdateWriteOpResult>;
}
