import * as z from "zod/v3";
import { OpenEnum } from "../../types/enums.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import { Currency } from "./currency.js";
import { CustomField, CustomField$Outbound } from "./customfield.js";
import { LinkedLedgerAccount, LinkedLedgerAccount$Outbound } from "./linkedledgeraccount.js";
import { LinkedSupplier } from "./linkedsupplier.js";
import { LinkedSupplierInput, LinkedSupplierInput$Outbound } from "./linkedsupplierinput.js";
import { LinkedTrackingCategory, LinkedTrackingCategory$Outbound } from "./linkedtrackingcategory.js";
import { PassThroughBody, PassThroughBody$Outbound } from "./passthroughbody.js";
import { PaymentStatus } from "./paymentstatus.js";
/**
 * Type of payment
 */
export declare const BillPaymentType: {
    readonly AccountsPayableCredit: "accounts_payable_credit";
    readonly AccountsPayableOverpayment: "accounts_payable_overpayment";
    readonly AccountsPayablePrepayment: "accounts_payable_prepayment";
    readonly AccountsPayable: "accounts_payable";
};
/**
 * Type of payment
 */
export type BillPaymentType = OpenEnum<typeof BillPaymentType>;
/**
 * Type of entity this payment should be attributed to.
 */
export declare const BillPaymentAllocationType: {
    readonly Bill: "bill";
    readonly Expense: "expense";
    readonly CreditMemo: "credit_memo";
    readonly OverPayment: "over_payment";
    readonly PrePayment: "pre_payment";
    readonly JournalEntry: "journal_entry";
    readonly Other: "other";
};
/**
 * Type of entity this payment should be attributed to.
 */
export type BillPaymentAllocationType = OpenEnum<typeof BillPaymentAllocationType>;
export type Allocations = {
    /**
     * A unique identifier for an object.
     */
    id?: string | null | undefined;
    /**
     * Type of entity this payment should be attributed to.
     */
    type?: BillPaymentAllocationType | undefined;
    code?: string | undefined;
    /**
     * Amount of payment that should be attributed to this allocation. If null, the total_amount will be used.
     */
    amount?: number | null | undefined;
    /**
     * Unique identifier of the allocation
     */
    allocationId?: string | undefined;
};
export type BillPayment = {
    /**
     * A unique identifier for an object.
     */
    id: string;
    /**
     * The third-party API ID of original entity
     */
    downstreamId?: string | 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;
    /**
     * Currency Exchange Rate at the time entity was recorded/generated.
     */
    currencyRate?: number | null | undefined;
    /**
     * The total amount of the transaction or record
     */
    totalAmount: number | null;
    /**
     * Optional transaction reference message ie: Debit remittance detail.
     */
    reference?: string | null | undefined;
    /**
     * Payment method used for the transaction, such as cash, credit card, bank transfer, or check
     */
    paymentMethod?: string | null | undefined;
    /**
     * Optional reference message returned by payment method on processing
     */
    paymentMethodReference?: string | null | undefined;
    /**
     * A unique identifier for an object.
     */
    paymentMethodId?: string | null | undefined;
    account?: LinkedLedgerAccount | null | undefined;
    /**
     * The date of the transaction - YYYY:MM::DDThh:mm:ss.sTZD
     */
    transactionDate: Date | null;
    /**
     * The supplier this entity is linked to.
     */
    supplier?: LinkedSupplier | null | undefined;
    /**
     * The company ID the transaction belongs to
     */
    companyId?: string | null | undefined;
    /**
     * Indicates if the transaction has been reconciled.
     */
    reconciled?: boolean | null | undefined;
    /**
     * Status of payment
     */
    status?: PaymentStatus | undefined;
    /**
     * Type of payment
     */
    type?: BillPaymentType | undefined;
    allocations?: Array<Allocations> | undefined;
    /**
     * Note associated with the transaction
     */
    note?: string | null | undefined;
    /**
     * Number associated with the transaction
     */
    number?: string | null | undefined;
    /**
     * A list of linked tracking categories.
     */
    trackingCategories?: Array<LinkedTrackingCategory | null> | 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;
    /**
     * Id to be displayed.
     */
    displayId?: string | null | undefined;
    /**
     * When custom mappings are configured on the resource, the result is included here.
     */
    customMappings?: {
        [k: string]: any;
    } | 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 created.
     */
    createdAt?: Date | null | undefined;
    /**
     * The date and time when the object was last updated.
     */
    updatedAt?: 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 BillPaymentAllocations = {
    /**
     * A unique identifier for an object.
     */
    id?: string | null | undefined;
    /**
     * Type of entity this payment should be attributed to.
     */
    type?: BillPaymentAllocationType | undefined;
    /**
     * Amount of payment that should be attributed to this allocation. If null, the total_amount will be used.
     */
    amount?: number | null | undefined;
    /**
     * Unique identifier of the allocation
     */
    allocationId?: string | undefined;
};
export type BillPaymentInput = {
    /**
     * 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;
    /**
     * Currency Exchange Rate at the time entity was recorded/generated.
     */
    currencyRate?: number | null | undefined;
    /**
     * The total amount of the transaction or record
     */
    totalAmount: number | null;
    /**
     * Optional transaction reference message ie: Debit remittance detail.
     */
    reference?: string | null | undefined;
    /**
     * Payment method used for the transaction, such as cash, credit card, bank transfer, or check
     */
    paymentMethod?: string | null | undefined;
    /**
     * Optional reference message returned by payment method on processing
     */
    paymentMethodReference?: string | null | undefined;
    /**
     * A unique identifier for an object.
     */
    paymentMethodId?: string | null | undefined;
    account?: LinkedLedgerAccount | null | undefined;
    /**
     * The date of the transaction - YYYY:MM::DDThh:mm:ss.sTZD
     */
    transactionDate: Date | null;
    /**
     * The supplier this entity is linked to.
     */
    supplier?: LinkedSupplierInput | null | undefined;
    /**
     * The company ID the transaction belongs to
     */
    companyId?: string | null | undefined;
    /**
     * Indicates if the transaction has been reconciled.
     */
    reconciled?: boolean | null | undefined;
    /**
     * Status of payment
     */
    status?: PaymentStatus | undefined;
    /**
     * Type of payment
     */
    type?: BillPaymentType | undefined;
    allocations?: Array<BillPaymentAllocations> | undefined;
    /**
     * Note associated with the transaction
     */
    note?: string | null | undefined;
    /**
     * Number associated with the transaction
     */
    number?: string | null | undefined;
    /**
     * A list of linked tracking categories.
     */
    trackingCategories?: Array<LinkedTrackingCategory | null> | 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;
    /**
     * Id to be displayed.
     */
    displayId?: 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 BillPaymentType$inboundSchema: z.ZodType<BillPaymentType, z.ZodTypeDef, unknown>;
/** @internal */
export declare const BillPaymentType$outboundSchema: z.ZodType<string, z.ZodTypeDef, BillPaymentType>;
/** @internal */
export declare const BillPaymentAllocationType$inboundSchema: z.ZodType<BillPaymentAllocationType, z.ZodTypeDef, unknown>;
/** @internal */
export declare const BillPaymentAllocationType$outboundSchema: z.ZodType<string, z.ZodTypeDef, BillPaymentAllocationType>;
/** @internal */
export declare const Allocations$inboundSchema: z.ZodType<Allocations, z.ZodTypeDef, unknown>;
export declare function allocationsFromJSON(jsonString: string): SafeParseResult<Allocations, SDKValidationError>;
/** @internal */
export declare const BillPayment$inboundSchema: z.ZodType<BillPayment, z.ZodTypeDef, unknown>;
export declare function billPaymentFromJSON(jsonString: string): SafeParseResult<BillPayment, SDKValidationError>;
/** @internal */
export type BillPaymentAllocations$Outbound = {
    id?: string | null | undefined;
    type?: string | undefined;
    amount?: number | null | undefined;
    allocation_id?: string | undefined;
};
/** @internal */
export declare const BillPaymentAllocations$outboundSchema: z.ZodType<BillPaymentAllocations$Outbound, z.ZodTypeDef, BillPaymentAllocations>;
export declare function billPaymentAllocationsToJSON(billPaymentAllocations: BillPaymentAllocations): string;
/** @internal */
export type BillPaymentInput$Outbound = {
    currency?: string | null | undefined;
    currency_rate?: number | null | undefined;
    total_amount: number | null;
    reference?: string | null | undefined;
    payment_method?: string | null | undefined;
    payment_method_reference?: string | null | undefined;
    payment_method_id?: string | null | undefined;
    account?: LinkedLedgerAccount$Outbound | null | undefined;
    transaction_date: string | null;
    supplier?: LinkedSupplierInput$Outbound | null | undefined;
    company_id?: string | null | undefined;
    reconciled?: boolean | null | undefined;
    status?: string | undefined;
    type?: string | undefined;
    allocations?: Array<BillPaymentAllocations$Outbound> | undefined;
    note?: string | null | undefined;
    number?: string | null | undefined;
    tracking_categories?: Array<LinkedTrackingCategory$Outbound | null> | null | undefined;
    custom_fields?: Array<CustomField$Outbound> | undefined;
    row_version?: string | null | undefined;
    display_id?: string | null | undefined;
    pass_through?: Array<PassThroughBody$Outbound> | undefined;
};
/** @internal */
export declare const BillPaymentInput$outboundSchema: z.ZodType<BillPaymentInput$Outbound, z.ZodTypeDef, BillPaymentInput>;
export declare function billPaymentInputToJSON(billPaymentInput: BillPaymentInput): string;
//# sourceMappingURL=billpayment.d.ts.map