import { EncryptedAccountNumber, UserDetails } from "./accounts.types";
import { DateAndTime, ErrorMessageAndErrors } from "./api.types";
import { AssetType, CashEquivalentTypeEnum, CollectiveInvestmentTypeEnum, FixedIncomeTypeEnum, ForexTypeEnum, FutureTypeEnum, IndexTypeEnum, MutualFundTypeEnum, OptionTypeEnum, ProductTypeEnum, PutCallEnum, TransactionEquityTypeEnum } from "./asset.types";
import { FeeTypeEnum } from "./fee.types";
import { PositionEffectEnum } from "./orders.types";
export interface GetTransactionsForAccountRequest {
    accountNumber: EncryptedAccountNumber;
    startDate: Date;
    endDate: Date;
    types: TransactionTypeEnum[];
    symbol?: string;
}
export type GetTransactionsForAccountResponse = Transaction[] | ErrorMessageAndErrors;
export interface GetTransactionForAccountByTransactionIdRequest {
    accountNumber: EncryptedAccountNumber;
    transactionId: number;
}
export type GetTransactionForAccountByTransactionIdResponse = Transaction | ErrorMessageAndErrors;
export declare enum TransactionTypeEnum {
    TRADE = "TRADE",
    RECEIVE_AND_DELIVER = "RECEIVE_AND_DELIVER",
    DIVIDEND_OR_INTEREST = "DIVIDEND_OR_INTEREST",
    ACH_RECEIPT = "ACH_RECEIPT",
    ACH_DISBURSEMENT = "ACH_DISBURSEMENT",
    CASH_RECEIPT = "CASH_RECEIPT",
    CASH_DISBURSEMENT = "CASH_DISBURSEMENT",
    ELECTRONIC_FUND = "ELECTRONIC_FUND",
    WIRE_OUT = "WIRE_OUT",
    WIRE_IN = "WIRE_IN",
    JOURNAL = "JOURNAL",
    MEMORANDUM = "MEMORANDUM",
    MARGIN_CALL = "MARGIN_CALL",
    MONEY_MARKET = "MONEY_MARKET",
    SMA_ADJUSTMENT = "SMA_ADJUSTMENT"
}
export declare enum TransactionStatusEnum {
    VALID = "VALID",
    INVALID = "INVALID",
    PENDING = "PENDING",
    UNKNOWN = "UNKNOWN"
}
export declare enum SubAccountEnum {
    CASH = "CASH",
    MARGIN = "MARGIN",
    SHORT = "SHORT",
    DIV = "DIV",
    INCOME = "INCOME",
    UNKNOWN = "UNKNOWN"
}
export declare enum TransactionActivityTypeEnum {
    ACTIVITY_CORRECTION = "ACTIVITY_CORRECTION",
    EXECUTION = "EXECUTION",
    ORDER_ACTION = "ORDER_ACTION",
    TRANSFER = "TRANSFER",
    UNKNOWN = "UNKNOWN"
}
export interface Transaction {
    activityId: number;
    time: string;
    user: UserDetails;
    description: string;
    accountNumber: string;
    type: TransactionTypeEnum;
    status: TransactionStatusEnum;
    subAccount: SubAccountEnum;
    tradeDate: string;
    settlementDate: string;
    positionId?: number;
    orderId?: number;
    netAmount: number;
    activityType: TransactionActivityTypeEnum;
    transferItems?: TransferItem[];
}
export interface TransferItem {
    instrument: TransactionInstrument;
    amount: number;
    cost: number;
    price: number;
    feeType: FeeTypeEnum;
    positionEffect: PositionEffectEnum;
}
export type TransactionInstrument = TransactionCashEquivalent | CollectiveInvestment | Currency | TransactionEquity | TransactionFixedIncome | Forex | Future | Index | TransactionMutualFund | TransactionOption | Product;
export interface TransactionBaseInstrument {
    assetType: AssetType;
    cusip: string;
    symbol: string;
    description: string;
    instrumentId: number;
    netChange: number;
}
export interface TransactionCashEquivalent extends TransactionBaseInstrument {
    type: CashEquivalentTypeEnum;
}
export interface CollectiveInvestment extends TransactionBaseInstrument {
    type: CollectiveInvestmentTypeEnum;
}
export interface Currency extends TransactionBaseInstrument {
}
export interface TransactionEquity extends TransactionBaseInstrument {
    type: TransactionEquityTypeEnum;
}
export interface TransactionFixedIncome extends TransactionBaseInstrument {
    type: FixedIncomeTypeEnum;
    maturityDate: DateAndTime;
    factor: number;
    multiplier: number;
    variableRate: number;
}
export interface Forex extends TransactionBaseInstrument {
    type: ForexTypeEnum;
    baseCurrency: Currency;
    counterCurrency: Currency;
}
export interface Future extends TransactionBaseInstrument {
    activeContract: boolean;
    type: FutureTypeEnum;
    expirationDate: string;
    lastTradingDate: string;
    firstNoticeDate: string;
    multiplier: number;
}
export interface Index extends TransactionBaseInstrument {
    activeContract: boolean;
    type: IndexTypeEnum;
}
export interface TransactionMutualFund extends TransactionBaseInstrument {
    fundFamilyName: string;
    fundFamilySymbol: string;
    fundGroup: string;
    type: MutualFundTypeEnum;
    exchangeCutoffTime: string;
    purchaseCutoffTime: string;
    redemptionCutoffTime: string;
}
export interface TransactionAPIOptionDeliverable {
    rootSymbol: string;
    strikePercent: number;
    deliverableNumber: number;
    deliverableUnits: number;
    deliverable: TransactionInstrument;
    assetType: AssetType;
}
export interface TransactionOption extends TransactionBaseInstrument {
    expirationDate: string;
    optionDeliverables: TransactionAPIOptionDeliverable[];
    optionPremiumMultiplier: number;
    putCall: PutCallEnum;
    strikePrice: number;
    type: OptionTypeEnum;
    underlyingSymbol: string;
    underlyingCusip: string;
    deliverable: TransactionInstrument;
}
export interface Product extends TransactionBaseInstrument {
    type: ProductTypeEnum;
}
//# sourceMappingURL=transactions.types.d.ts.map