import * as z from "zod/v3";
import { ClosedEnum } from "../../types/enums.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { RFCDate } from "../../types/rfcdate.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import { BankAccount, BankAccount$Outbound } from "./bankaccount.js";
import { Currency } from "./currency.js";
import { CustomField, CustomField$Outbound } from "./customfield.js";
import { LinkedTaxRate } from "./linkedtaxrate.js";
import { LinkedTaxRateInput, LinkedTaxRateInput$Outbound } from "./linkedtaxrateinput.js";
import { PassThroughBody, PassThroughBody$Outbound } from "./passthroughbody.js";
/**
 * The classification of account.
 */
export declare const LedgerAccountClassification: {
    readonly Asset: "asset";
    readonly Equity: "equity";
    readonly Expense: "expense";
    readonly Liability: "liability";
    readonly Revenue: "revenue";
    readonly Income: "income";
    readonly OtherIncome: "other_income";
    readonly OtherExpense: "other_expense";
    readonly CostsOfSales: "costs_of_sales";
    readonly Other: "other";
};
/**
 * The classification of account.
 */
export type LedgerAccountClassification = ClosedEnum<typeof LedgerAccountClassification>;
/**
 * The type of account.
 */
export declare const LedgerAccountType: {
    readonly AccountsPayable: "accounts_payable";
    readonly AccountsReceivable: "accounts_receivable";
    readonly Balancesheet: "balancesheet";
    readonly Bank: "bank";
    readonly CostsOfSales: "costs_of_sales";
    readonly CreditCard: "credit_card";
    readonly CurrentAsset: "current_asset";
    readonly CurrentLiability: "current_liability";
    readonly Equity: "equity";
    readonly Expense: "expense";
    readonly FixedAsset: "fixed_asset";
    readonly NonCurrentAsset: "non_current_asset";
    readonly NonCurrentLiability: "non_current_liability";
    readonly OtherAsset: "other_asset";
    readonly OtherExpense: "other_expense";
    readonly OtherIncome: "other_income";
    readonly OtherLiability: "other_liability";
    readonly Revenue: "revenue";
    readonly Sales: "sales";
    readonly Other: "other";
};
/**
 * The type of account.
 */
export type LedgerAccountType = ClosedEnum<typeof LedgerAccountType>;
/**
 * The status of the account.
 */
export declare const AccountStatus: {
    readonly Active: "active";
    readonly Inactive: "inactive";
    readonly Archived: "archived";
};
/**
 * The status of the account.
 */
export type AccountStatus = ClosedEnum<typeof AccountStatus>;
export type Categories = {
    id?: string | undefined;
    /**
     * The name of the category.
     */
    name?: string | undefined;
};
export type ParentAccount = {
    /**
     * The ID of the parent account.
     */
    id?: string | undefined;
    /**
     * The name of the parent account.
     */
    name?: string | undefined;
    /**
     * The human readable display ID used when displaying the parent account
     */
    displayId?: string | undefined;
};
export type SubAccounts = {
    /**
     * The ID of the sub account.
     */
    id?: string | undefined;
    /**
     * The name of the sub account.
     */
    accountSubName?: string | undefined;
};
export type LedgerAccountSubsidiaries = {
    /**
     * The ID of the subsidiary.
     */
    id?: string | undefined;
};
export type LedgerAccount = {
    /**
     * A unique identifier for an object.
     */
    id?: string | undefined;
    /**
     * The human readable display ID used when displaying the account
     */
    displayId?: string | undefined;
    /**
     * The nominal code of the ledger account.
     *
     * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
     */
    nominalCode?: string | null | undefined;
    /**
     * The code assigned to the account.
     */
    code?: string | null | undefined;
    /**
     * The classification of account.
     */
    classification?: LedgerAccountClassification | null | undefined;
    /**
     * The type of account.
     */
    type?: LedgerAccountType | undefined;
    /**
     * The sub type of account.
     */
    subType?: string | null | undefined;
    /**
     * The name of the account.
     */
    name?: string | null | undefined;
    /**
     * The fully qualified name of the account.
     */
    fullyQualifiedName?: string | null | undefined;
    /**
     * The description of the account.
     */
    description?: string | null | undefined;
    /**
     * The opening balance of the account.
     */
    openingBalance?: number | null | undefined;
    /**
     * The current balance of the account.
     */
    currentBalance?: number | null | undefined;
    /**
     * Indicates the associated currency for an amount of money. Values correspond to [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
     */
    currency?: Currency | null | undefined;
    /**
     * The tax type of the account.
     */
    taxType?: string | null | undefined;
    taxRate?: LinkedTaxRate | undefined;
    level?: number | null | undefined;
    /**
     * Whether the account is active or not.
     */
    active?: boolean | null | undefined;
    /**
     * The status of the account.
     */
    status?: AccountStatus | null | undefined;
    /**
     * Whether the account is a header or not.
     */
    header?: boolean | null | undefined;
    bankAccount?: BankAccount | undefined;
    /**
     * The categories of the account.
     */
    categories?: Array<Categories> | undefined;
    parentAccount?: ParentAccount | undefined;
    /**
     * Whether the account is a sub account or not.
     */
    subAccount?: boolean | null | undefined;
    /**
     * The sub accounts of the account.
     */
    subAccounts?: Array<SubAccounts> | undefined;
    /**
     * Reconciliation Date means the last calendar day of each Reconciliation Period.
     */
    lastReconciliationDate?: RFCDate | null | undefined;
    /**
     * The subsidiaries the account belongs to.
     */
    subsidiaries?: Array<LedgerAccountSubsidiaries> | undefined;
    /**
     * When custom mappings are configured on the resource, the result is included here.
     */
    customMappings?: {
        [k: string]: any;
    } | null | undefined;
    customFields?: Array<CustomField> | undefined;
    /**
     * 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.
     */
    rowVersion?: string | null | undefined;
    /**
     * The user who last updated the object.
     */
    updatedBy?: string | null | undefined;
    /**
     * The user who created the object.
     */
    createdBy?: string | null | undefined;
    /**
     * The date and time when the object was last updated.
     */
    updatedAt?: Date | null | undefined;
    /**
     * The date and time when the object was created.
     */
    createdAt?: Date | null | undefined;
    /**
     * The pass_through property allows passing service-specific, custom data or structured modifications in request body when creating or updating resources.
     */
    passThrough?: Array<PassThroughBody> | undefined;
};
export type LedgerAccountInput = {
    /**
     * The human readable display ID used when displaying the account
     */
    displayId?: string | undefined;
    /**
     * The nominal code of the ledger account.
     *
     * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
     */
    nominalCode?: string | null | undefined;
    /**
     * The code assigned to the account.
     */
    code?: string | null | undefined;
    /**
     * The classification of account.
     */
    classification?: LedgerAccountClassification | null | undefined;
    /**
     * The type of account.
     */
    type?: LedgerAccountType | undefined;
    /**
     * The sub type of account.
     */
    subType?: string | null | undefined;
    /**
     * The name of the account.
     */
    name?: string | null | undefined;
    /**
     * The fully qualified name of the account.
     */
    fullyQualifiedName?: string | null | undefined;
    /**
     * The description of the account.
     */
    description?: string | null | undefined;
    /**
     * The opening balance of the account.
     */
    openingBalance?: number | null | undefined;
    /**
     * The current balance of the account.
     */
    currentBalance?: number | null | undefined;
    /**
     * Indicates the associated currency for an amount of money. Values correspond to [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
     */
    currency?: Currency | null | undefined;
    /**
     * The tax type of the account.
     */
    taxType?: string | null | undefined;
    taxRate?: LinkedTaxRateInput | undefined;
    level?: number | null | undefined;
    /**
     * Whether the account is active or not.
     */
    active?: boolean | null | undefined;
    /**
     * The status of the account.
     */
    status?: AccountStatus | null | undefined;
    /**
     * Whether the account is a header or not.
     */
    header?: boolean | null | undefined;
    bankAccount?: BankAccount | undefined;
    parentAccount?: ParentAccount | undefined;
    /**
     * Whether the account is a sub account or not.
     */
    subAccount?: boolean | null | undefined;
    /**
     * Reconciliation Date means the last calendar day of each Reconciliation Period.
     */
    lastReconciliationDate?: RFCDate | null | undefined;
    /**
     * The subsidiaries the account belongs to.
     */
    subsidiaries?: Array<LedgerAccountSubsidiaries> | undefined;
    customFields?: Array<CustomField> | undefined;
    /**
     * 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.
     */
    rowVersion?: string | null | undefined;
    /**
     * The pass_through property allows passing service-specific, custom data or structured modifications in request body when creating or updating resources.
     */
    passThrough?: Array<PassThroughBody> | undefined;
};
/** @internal */
export declare const LedgerAccountClassification$inboundSchema: z.ZodNativeEnum<typeof LedgerAccountClassification>;
/** @internal */
export declare const LedgerAccountClassification$outboundSchema: z.ZodNativeEnum<typeof LedgerAccountClassification>;
/** @internal */
export declare const LedgerAccountType$inboundSchema: z.ZodNativeEnum<typeof LedgerAccountType>;
/** @internal */
export declare const LedgerAccountType$outboundSchema: z.ZodNativeEnum<typeof LedgerAccountType>;
/** @internal */
export declare const AccountStatus$inboundSchema: z.ZodNativeEnum<typeof AccountStatus>;
/** @internal */
export declare const AccountStatus$outboundSchema: z.ZodNativeEnum<typeof AccountStatus>;
/** @internal */
export declare const Categories$inboundSchema: z.ZodType<Categories, z.ZodTypeDef, unknown>;
export declare function categoriesFromJSON(jsonString: string): SafeParseResult<Categories, SDKValidationError>;
/** @internal */
export declare const ParentAccount$inboundSchema: z.ZodType<ParentAccount, z.ZodTypeDef, unknown>;
/** @internal */
export type ParentAccount$Outbound = {
    id?: string | undefined;
    name?: string | undefined;
    display_id?: string | undefined;
};
/** @internal */
export declare const ParentAccount$outboundSchema: z.ZodType<ParentAccount$Outbound, z.ZodTypeDef, ParentAccount>;
export declare function parentAccountToJSON(parentAccount: ParentAccount): string;
export declare function parentAccountFromJSON(jsonString: string): SafeParseResult<ParentAccount, SDKValidationError>;
/** @internal */
export declare const SubAccounts$inboundSchema: z.ZodType<SubAccounts, z.ZodTypeDef, unknown>;
export declare function subAccountsFromJSON(jsonString: string): SafeParseResult<SubAccounts, SDKValidationError>;
/** @internal */
export declare const LedgerAccountSubsidiaries$inboundSchema: z.ZodType<LedgerAccountSubsidiaries, z.ZodTypeDef, unknown>;
/** @internal */
export type LedgerAccountSubsidiaries$Outbound = {
    id?: string | undefined;
};
/** @internal */
export declare const LedgerAccountSubsidiaries$outboundSchema: z.ZodType<LedgerAccountSubsidiaries$Outbound, z.ZodTypeDef, LedgerAccountSubsidiaries>;
export declare function ledgerAccountSubsidiariesToJSON(ledgerAccountSubsidiaries: LedgerAccountSubsidiaries): string;
export declare function ledgerAccountSubsidiariesFromJSON(jsonString: string): SafeParseResult<LedgerAccountSubsidiaries, SDKValidationError>;
/** @internal */
export declare const LedgerAccount$inboundSchema: z.ZodType<LedgerAccount, z.ZodTypeDef, unknown>;
export declare function ledgerAccountFromJSON(jsonString: string): SafeParseResult<LedgerAccount, SDKValidationError>;
/** @internal */
export type LedgerAccountInput$Outbound = {
    display_id?: string | undefined;
    nominal_code?: string | null | undefined;
    code?: string | null | undefined;
    classification?: string | null | undefined;
    type?: string | undefined;
    sub_type?: string | null | undefined;
    name?: string | null | undefined;
    fully_qualified_name?: string | null | undefined;
    description?: string | null | undefined;
    opening_balance?: number | null | undefined;
    current_balance?: number | null | undefined;
    currency?: string | null | undefined;
    tax_type?: string | null | undefined;
    tax_rate?: LinkedTaxRateInput$Outbound | undefined;
    level?: number | null | undefined;
    active?: boolean | null | undefined;
    status?: string | null | undefined;
    header?: boolean | null | undefined;
    bank_account?: BankAccount$Outbound | undefined;
    parent_account?: ParentAccount$Outbound | undefined;
    sub_account?: boolean | null | undefined;
    last_reconciliation_date?: string | null | undefined;
    subsidiaries?: Array<LedgerAccountSubsidiaries$Outbound> | undefined;
    custom_fields?: Array<CustomField$Outbound> | undefined;
    row_version?: string | null | undefined;
    pass_through?: Array<PassThroughBody$Outbound> | undefined;
};
/** @internal */
export declare const LedgerAccountInput$outboundSchema: z.ZodType<LedgerAccountInput$Outbound, z.ZodTypeDef, LedgerAccountInput>;
export declare function ledgerAccountInputToJSON(ledgerAccountInput: LedgerAccountInput): string;
//# sourceMappingURL=ledgeraccount.d.ts.map