import { AccountBase, BankAccount, BillPayConfig, BillableStatus, ClassBase, Currency, CustomerBase, EditBillDetailSelectorView, EditRecurringBillType, EntityAutoCompleteView, ID, InternationalTransferFeeBearerPaymentMethod, NestedAccountHierarchyForReport, NestedClassHierarchyForReport, PaymentAccount, Recommendation, RecommendedAccountBase, RecommendedClassBase, TransactionWithAccountAndClassLine, ZeniDate } from '@zeniai/client-epic-state';
import { CreatableSingleSelectFieldValue } from '../../../creatableSingleSelect/CreatableSingleSelectField';
import { OptionType } from '../../../formElements/autoCompleteGroupedSingleSelectField/AutoCompleteGroupedSingleSelectField';
import { AutoCompleteSingleSelectFieldValue } from '../../../formElements/autoCompleteSingleSelectField/AutoCompleteSingleSelectField';
import { CreatableAutoCompleteSingleSelectFieldValue } from '../../../formElements/creatableAutoCompleteSingleSelectTitleField/CreatableAutoCompleteSingleSelectTitleField';
import { DatePickerWithRadioOptionsSelectValue } from '../../../formElements/datePickerWithRadioOptions/DatePickerWithRadioOptions';
import { GroupedSingleSelectFieldValue } from '../../../formElements/labeledGroupSingleSelectFieldWithRecommendationCheckbox/GroupedSingleSelectField';
import { SingleSelectPickerFieldValue } from '../../../formElements/singleSelectPickerField/SingleSelectPickerField';
import { BillableOptionsField } from './sections/formElements/singleSelectForBills/SingleSelectField';
export declare const getCustomerOptions: (entityAutoCompleteView?: EntityAutoCompleteView) => OptionType[];
export declare const getDefaultCustomerOptions: (selectedCustomer?: CustomerBase, customerSearchEntityAutoCompleteView?: EntityAutoCompleteView) => {
    label: string;
    value: string;
}[];
export declare const getCustomerDataFromAutoComplete: (currentLineData: Partial<TransactionWithAccountAndClassLine>, currentItem: LineItemsSectionFormData, currentLineId: number, entityAutoCompleteView?: EntityAutoCompleteView) => CustomerBase | undefined;
export declare const checkIfBillDetailsChanged: (billDetails: EditBillDetailSelectorView) => boolean;
export interface LineData {
    lineId: ID;
    lineIndex: number;
    account?: AccountBase;
    accountsHierarchyList?: NestedAccountHierarchyForReport[];
    amount?: number;
    billable?: BillableStatus;
    class?: ClassBase;
    classHierarchyList?: NestedClassHierarchyForReport[];
    currencySymbol?: string;
    customer?: CustomerBase;
    customerAutoCompleteData?: AutoCompleteSingleSelectFieldValue;
    lineDescription?: string;
    recipientAmount?: number;
    recipientCurrencySymbol?: string;
}
export interface LineDataForEdit extends LineData {
    isCategoryFirstTimeAutofilled: boolean;
    isCategoryOrClassUpdated: boolean;
    isCategoryUpdateSelected: boolean;
    isClassFirstTimeAutofilled: boolean;
    isClassUpdateSelected: boolean;
    isRetainedCategorySelected: boolean;
    isRetainedClassSelected: boolean;
    recommendations: Recommendation[];
    updateAllCheckbox: boolean;
    recommendedCategory?: RecommendedAccountBase;
    recommendedClass?: RecommendedClassBase;
    retainedCategory?: AccountBase;
    retainedClass?: ClassBase;
}
export interface WhatForSectionFormData {
    billDueDate?: Date;
    currency?: string;
    invoiceDate?: Date;
    invoiceNumber?: string;
    isInvoiceDateAutoUpdated?: boolean;
    memo?: string;
    paymentDate?: Date;
    recipientCurrency?: string;
}
export interface LineItemsSectionFormData {
    account: GroupedSingleSelectFieldValue;
    class: GroupedSingleSelectFieldValue;
    isCategoryFirstTimeAutofilled: boolean;
    isCategoryOrClassUpdated: boolean;
    isCategoryUpdateSelected: boolean;
    isClassFirstTimeAutofilled: boolean;
    isClassUpdateSelected: boolean;
    isRetainedCategorySelected: boolean;
    isRetainedClassSelected: boolean;
    lineId: string;
    lineIndex: number;
    recommendations: Recommendation[];
    updateAllCheckbox: boolean;
    amount?: number;
    billable?: BillableOptionsField;
    currency?: Currency;
    customer?: AutoCompleteSingleSelectFieldValue;
    lineDescription?: string;
    recipientAmount?: number;
    recipientCurrency?: Currency;
    recommendedCategory?: RecommendedAccountBase;
    recommendedClass?: RecommendedClassBase;
    retainedCategory?: AccountBase;
    retainedClass?: ClassBase;
}
export type LineItemsSectionFormDataKeys = keyof LineItemsSectionFormData;
export interface WhatForSectionLocalData {
    billDueDate?: ZeniDate;
    currencyCode?: string;
    invoiceDate?: ZeniDate;
    invoiceNumber?: string;
    isInvoiceDateAutoUpdated?: boolean;
    memo?: string;
    recipientCurrencyCode?: string;
}
export type WhatForSectionFormDataKeys = keyof WhatForSectionFormData;
export interface RecurringPaymentDetailsFormData {
    frequency: CreatableSingleSelectFieldValue;
    requireApproval: CreatableSingleSelectFieldValue;
    endDateSelector?: DatePickerWithRadioOptionsSelectValue;
    startDate?: Date;
    updateRecurringBills?: EditRecurringBillType;
}
export interface PaymentDetailsSectionFormData {
    internationalTransferFeeBearerPaymentMethod?: InternationalTransferFeeBearerPaymentMethod;
    paymentDate?: Date;
    paymentTo?: CreatableSingleSelectFieldValue;
    paymentType?: BillPayConfig;
    recurringPaymentDetails?: RecurringPaymentDetailsFormData;
    recurringPaymentType?: CreatableSingleSelectFieldValue;
    withdrawFrom?: SingleSelectPickerFieldValue;
    withdrawFromAccountingName?: string;
}
export interface VendorDetailsFormData {
    vendor: CreatableAutoCompleteSingleSelectFieldValue;
    vendorName: string;
}
export type VendorDetailsFormDataKeys = keyof VendorDetailsFormData;
export type PaymentDetailsSectionFormDataKeys = keyof PaymentDetailsSectionFormData;
export interface PaymentDetailsSectionLocalData {
    paymentDate?: ZeniDate;
    paymentTo?: BankAccount;
    paymentType?: BillPayConfig;
    withdrawFrom?: PaymentAccount;
    withdrawFromAccountingName?: string;
}
export declare const whosItForSectionId = "whosItFor";
export declare const uniqueBillPayTabKey: (key: PaymentDetailsSectionFormDataKeys | WhatForSectionFormDataKeys | LineItemsSectionFormDataKeys | VendorDetailsFormDataKeys | typeof whosItForSectionId, index?: number) => "class" | "currency" | "vendor" | "recommendations" | "recommendedCategory" | "recommendedClass" | "customer" | "account" | "billable" | "whosItFor" | "internationalTransferFeeBearerPaymentMethod" | "paymentDate" | "paymentTo" | "paymentType" | "recurringPaymentDetails" | "recurringPaymentType" | "withdrawFrom" | "withdrawFromAccountingName" | "billDueDate" | "invoiceDate" | "invoiceNumber" | "isInvoiceDateAutoUpdated" | "memo" | "recipientCurrency" | "isCategoryFirstTimeAutofilled" | "isCategoryOrClassUpdated" | "isCategoryUpdateSelected" | "isClassFirstTimeAutofilled" | "isClassUpdateSelected" | "isRetainedCategorySelected" | "isRetainedClassSelected" | "lineId" | "lineIndex" | "updateAllCheckbox" | "amount" | "lineDescription" | "recipientAmount" | "retainedCategory" | "retainedClass" | "vendorName" | `${number}.class` | `${number}.currency` | `${number}.vendor` | `${number}.recommendations` | `${number}.recommendedCategory` | `${number}.recommendedClass` | `${number}.customer` | `${number}.account` | `${number}.billable` | `${number}.whosItFor` | `${number}.internationalTransferFeeBearerPaymentMethod` | `${number}.paymentDate` | `${number}.paymentTo` | `${number}.paymentType` | `${number}.recurringPaymentDetails` | `${number}.recurringPaymentType` | `${number}.withdrawFrom` | `${number}.withdrawFromAccountingName` | `${number}.billDueDate` | `${number}.invoiceDate` | `${number}.invoiceNumber` | `${number}.isInvoiceDateAutoUpdated` | `${number}.memo` | `${number}.recipientCurrency` | `${number}.isCategoryFirstTimeAutofilled` | `${number}.isCategoryOrClassUpdated` | `${number}.isCategoryUpdateSelected` | `${number}.isClassFirstTimeAutofilled` | `${number}.isClassUpdateSelected` | `${number}.isRetainedCategorySelected` | `${number}.isRetainedClassSelected` | `${number}.lineId` | `${number}.lineIndex` | `${number}.updateAllCheckbox` | `${number}.amount` | `${number}.lineDescription` | `${number}.recipientAmount` | `${number}.retainedCategory` | `${number}.retainedClass` | `${number}.vendorName`;
export type BillPayTabKeys = ReturnType<typeof uniqueBillPayTabKey>;
