/**
 * Apideck
 * The Apideck OpenAPI Spec: SDK Optimized
 *
 * The version of the OpenAPI document: 10.13.0
 * Contact: support@apideck.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */
import { BankAccount } from './BankAccount';
import { Currency } from './Currency';
import { CustomField } from './CustomField';
import { LedgerAccountCategories } from './LedgerAccountCategories';
import { LedgerAccountParentAccount } from './LedgerAccountParentAccount';
import { LinkedTaxRate } from './LinkedTaxRate';
import { PassThroughBody } from './PassThroughBody';
/**
 *
 * @export
 * @interface LedgerAccount
 */
export interface LedgerAccount {
    /**
     * A unique identifier for an object.
     * @type {string}
     * @memberof LedgerAccount
     */
    readonly id?: string;
    /**
     * The human readable display ID used when displaying the account
     * @type {string}
     * @memberof LedgerAccount
     */
    display_id?: string;
    /**
     * The nominal code of the ledger account.
     * @type {string}
     * @memberof LedgerAccount
     */
    nominal_code?: string | null;
    /**
     * The code assigned to the account.
     * @type {string}
     * @memberof LedgerAccount
     */
    code?: string | null;
    /**
     * The classification of account.
     * @type {string}
     * @memberof LedgerAccount
     */
    classification?: LedgerAccountClassification;
    /**
     * The type of account.
     * @type {string}
     * @memberof LedgerAccount
     */
    type?: LedgerAccountType;
    /**
     * The sub type of account.
     * @type {string}
     * @memberof LedgerAccount
     */
    sub_type?: string | null;
    /**
     * The name of the account.
     * @type {string}
     * @memberof LedgerAccount
     */
    name?: string | null;
    /**
     * The fully qualified name of the account.
     * @type {string}
     * @memberof LedgerAccount
     */
    fully_qualified_name?: string | null;
    /**
     * The description of the account.
     * @type {string}
     * @memberof LedgerAccount
     */
    description?: string | null;
    /**
     * The opening balance of the account.
     * @type {number}
     * @memberof LedgerAccount
     */
    opening_balance?: number | null;
    /**
     * The current balance of the account.
     * @type {number}
     * @memberof LedgerAccount
     */
    current_balance?: number | null;
    /**
     *
     * @type {Currency}
     * @memberof LedgerAccount
     */
    currency?: Currency | null;
    /**
     * The tax type of the account.
     * @type {string}
     * @memberof LedgerAccount
     */
    tax_type?: string | null;
    /**
     *
     * @type {LinkedTaxRate}
     * @memberof LedgerAccount
     */
    tax_rate?: LinkedTaxRate;
    /**
     *
     * @type {number}
     * @memberof LedgerAccount
     */
    level?: number | null;
    /**
     * Whether the account is active or not.
     * @type {boolean}
     * @memberof LedgerAccount
     */
    active?: boolean | null;
    /**
     * The status of the account.
     * @type {string}
     * @memberof LedgerAccount
     */
    status?: LedgerAccountStatus;
    /**
     * Whether the account is a header or not.
     * @type {boolean}
     * @memberof LedgerAccount
     */
    header?: boolean | null;
    /**
     *
     * @type {BankAccount}
     * @memberof LedgerAccount
     */
    bank_account?: BankAccount;
    /**
     * The categories of the account.
     * @type {Array<LedgerAccountCategories>}
     * @memberof LedgerAccount
     */
    readonly categories?: Array<LedgerAccountCategories>;
    /**
     *
     * @type {LedgerAccountParentAccount}
     * @memberof LedgerAccount
     */
    parent_account?: LedgerAccountParentAccount;
    /**
     * Whether the account is a sub account or not.
     * @type {boolean}
     * @memberof LedgerAccount
     */
    sub_account?: boolean | null;
    /**
     * The sub accounts of the account.
     * @type {Array<object>}
     * @memberof LedgerAccount
     */
    readonly sub_accounts?: Array<object>;
    /**
     * Reconciliation Date means the last calendar day of each Reconciliation Period.
     * @type {Date}
     * @memberof LedgerAccount
     */
    last_reconciliation_date?: Date | null;
    /**
     * The subsidiaries the account belongs to.
     * @type {Array<object>}
     * @memberof LedgerAccount
     */
    subsidiaries?: Array<object>;
    /**
     * When custom mappings are configured on the resource, the result is included here.
     * @type {object}
     * @memberof LedgerAccount
     */
    readonly custom_mappings?: object | null;
    /**
     *
     * @type {Array<CustomField>}
     * @memberof LedgerAccount
     */
    custom_fields?: Array<CustomField>;
    /**
     * A binary value used to detect updates to a object and prevent data conflicts. It is incremented each time an update is made to the object.
     * @type {string}
     * @memberof LedgerAccount
     */
    row_version?: string | null;
    /**
     * The user who last updated the object.
     * @type {string}
     * @memberof LedgerAccount
     */
    readonly updated_by?: string | null;
    /**
     * The user who created the object.
     * @type {string}
     * @memberof LedgerAccount
     */
    readonly created_by?: string | null;
    /**
     * The date and time when the object was last updated.
     * @type {Date}
     * @memberof LedgerAccount
     */
    readonly updated_at?: Date | null;
    /**
     * The date and time when the object was created.
     * @type {Date}
     * @memberof LedgerAccount
     */
    readonly created_at?: Date | null;
    /**
     *
     * @type {PassThroughBody}
     * @memberof LedgerAccount
     */
    pass_through?: PassThroughBody;
}
/**
 * @export
 * @enum {string}
 */
export declare enum LedgerAccountClassification {
    asset = "asset",
    equity = "equity",
    expense = "expense",
    liability = "liability",
    revenue = "revenue",
    income = "income",
    other_income = "other_income",
    other_expense = "other_expense",
    costs_of_sales = "costs_of_sales",
    other = "other"
}
/**
 * @export
 * @enum {string}
 */
export declare enum LedgerAccountType {
    accounts_receivable = "accounts_receivable",
    revenue = "revenue",
    sales = "sales",
    other_income = "other_income",
    bank = "bank",
    current_asset = "current_asset",
    fixed_asset = "fixed_asset",
    non_current_asset = "non_current_asset",
    other_asset = "other_asset",
    balancesheet = "balancesheet",
    equity = "equity",
    expense = "expense",
    other_expense = "other_expense",
    costs_of_sales = "costs_of_sales",
    accounts_payable = "accounts_payable",
    credit_card = "credit_card",
    current_liability = "current_liability",
    non_current_liability = "non_current_liability",
    other_liability = "other_liability",
    other = "other"
}
/**
 * @export
 * @enum {string}
 */
export declare enum LedgerAccountStatus {
    active = "active",
    inactive = "inactive",
    archived = "archived"
}
export declare function LedgerAccountFromJSON(json: any): LedgerAccount;
export declare function LedgerAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): LedgerAccount;
export declare function LedgerAccountToJSON(value?: LedgerAccount | null): any;
