/**
 * 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 { Address } from './Address';
import { BankAccount } from './BankAccount';
import { Currency } from './Currency';
import { CustomField } from './CustomField';
import { Email } from './Email';
import { LinkedLedgerAccount } from './LinkedLedgerAccount';
import { LinkedParentCustomer } from './LinkedParentCustomer';
import { LinkedTaxRate } from './LinkedTaxRate';
import { PassThroughBody } from './PassThroughBody';
import { PhoneNumber } from './PhoneNumber';
import { Website } from './Website';
/**
 *
 * @export
 * @interface Customer
 */
export interface Customer {
    /**
     * A unique identifier for an object.
     * @type {string}
     * @memberof Customer
     */
    readonly id: string;
    /**
     * The third-party API ID of original entity
     * @type {string}
     * @memberof Customer
     */
    readonly downstream_id?: string | null;
    /**
     * Display ID
     * @type {string}
     * @memberof Customer
     */
    display_id?: string | null;
    /**
     * Display name
     * @type {string}
     * @memberof Customer
     */
    display_name?: string | null;
    /**
     * The name of the company.
     * @type {string}
     * @memberof Customer
     */
    company_name?: string | null;
    /**
     * The company or subsidiary id the transaction belongs to
     * @type {string}
     * @memberof Customer
     */
    company_id?: string | null;
    /**
     * The job title of the person.
     * @type {string}
     * @memberof Customer
     */
    title?: string | null;
    /**
     * The first name of the person.
     * @type {string}
     * @memberof Customer
     */
    first_name?: string | null;
    /**
     * Middle name of the person.
     * @type {string}
     * @memberof Customer
     */
    middle_name?: string | null;
    /**
     * The last name of the person.
     * @type {string}
     * @memberof Customer
     */
    last_name?: string | null;
    /**
     *
     * @type {string}
     * @memberof Customer
     */
    suffix?: string | null;
    /**
     * Is this an individual or business customer
     * @type {boolean}
     * @memberof Customer
     */
    individual?: boolean | null;
    /**
     * If true, indicates this is a Project.
     * @type {boolean}
     * @memberof Customer
     */
    project?: boolean | null;
    /**
     *
     * @type {Array<Address>}
     * @memberof Customer
     */
    addresses?: Array<Address>;
    /**
     *
     * @type {Array<PhoneNumber>}
     * @memberof Customer
     */
    phone_numbers?: Array<PhoneNumber>;
    /**
     *
     * @type {Array<Email>}
     * @memberof Customer
     */
    emails?: Array<Email>;
    /**
     *
     * @type {Array<Website>}
     * @memberof Customer
     */
    websites?: Array<Website>;
    /**
     *
     * @type {Array<BankAccount>}
     * @memberof Customer
     */
    bank_accounts?: Array<BankAccount>;
    /**
     * Some notes about this customer
     * @type {string}
     * @memberof Customer
     */
    notes?: string | null;
    /**
     *
     * @type {LinkedTaxRate}
     * @memberof Customer
     */
    tax_rate?: LinkedTaxRate;
    /**
     *
     * @type {string}
     * @memberof Customer
     */
    tax_number?: string | null;
    /**
     *
     * @type {Currency}
     * @memberof Customer
     */
    currency?: Currency | null;
    /**
     *
     * @type {LinkedLedgerAccount}
     * @memberof Customer
     */
    account?: LinkedLedgerAccount | null;
    /**
     *
     * @type {LinkedParentCustomer}
     * @memberof Customer
     */
    parent?: LinkedParentCustomer | null;
    /**
     * Customer status
     * @type {string}
     * @memberof Customer
     */
    status?: CustomerStatus;
    /**
     * Payment method used for the transaction, such as cash, credit card, bank transfer, or check
     * @type {string}
     * @memberof Customer
     */
    payment_method?: string | null;
    /**
     * The channel through which the transaction is processed.
     * @type {string}
     * @memberof Customer
     */
    channel?: string | null;
    /**
     *
     * @type {Array<CustomField>}
     * @memberof Customer
     */
    custom_fields?: Array<CustomField>;
    /**
     * When custom mappings are configured on the resource, the result is included here.
     * @type {object}
     * @memberof Customer
     */
    readonly custom_mappings?: object | null;
    /**
     * The user who last updated the object.
     * @type {string}
     * @memberof Customer
     */
    readonly updated_by?: string | null;
    /**
     * The user who created the object.
     * @type {string}
     * @memberof Customer
     */
    readonly created_by?: string | null;
    /**
     * The date and time when the object was last updated.
     * @type {Date}
     * @memberof Customer
     */
    readonly updated_at?: Date | null;
    /**
     * The date and time when the object was created.
     * @type {Date}
     * @memberof Customer
     */
    readonly created_at?: Date | null;
    /**
     * 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 Customer
     */
    row_version?: string | null;
    /**
     *
     * @type {PassThroughBody}
     * @memberof Customer
     */
    pass_through?: PassThroughBody;
}
/**
 * @export
 * @enum {string}
 */
export declare enum CustomerStatus {
    active = "active",
    inactive = "inactive",
    archived = "archived",
    gdpr_erasure_request = "gdpr-erasure-request",
    unknown = "unknown"
}
export declare function CustomerFromJSON(json: any): Customer;
export declare function CustomerFromJSONTyped(json: any, ignoreDiscriminator: boolean): Customer;
export declare function CustomerToJSON(value?: Customer | null): any;
