/**
 * Received Invoices module
 *
 * Module for interacting with received invoices in the Minimax API
 */
import { BaseResource, ListResponse } from './base-resource';
/**
 * Resource reference interface
 */
export interface ResourceReference {
    /**
     * Resource ID
     */
    ID: number;
    /**
     * Resource name
     */
    Name: string;
    /**
     * Resource URL
     */
    ResourceUrl: string;
}
/**
 * Received invoice resource
 */
export interface ReceivedInvoice {
    /**
     * Unique identifier
     */
    ReceivedInvoiceId: number;
    /**
     * Year
     */
    Year: number;
    /**
     * Invoice number
     */
    InvoiceNumber: number;
    /**
     * Document numbering
     */
    DocumentNumbering: ResourceReference;
    /**
     * Document reference
     */
    DocumentReference: string;
    /**
     * Customer
     */
    Customer: ResourceReference;
    /**
     * Analytic
     */
    Analytic: ResourceReference;
    /**
     * Currency
     */
    Currency: ResourceReference;
    /**
     * Date issued
     */
    DateIssued: string;
    /**
     * Transaction date
     */
    DateTransaction: string;
    /**
     * Due date
     */
    DateDue: string;
    /**
     * Date received
     */
    DateReceived: string;
    /**
     * Invoice amount
     */
    InvoiceAmount: number;
    /**
     * Status
     */
    Status: string;
    /**
     * Payment status
     */
    PaymentStatus: string;
    /**
     * Invoice value
     */
    InvoiceValue: number;
    /**
     * Paid value
     */
    PaidValue: number;
    /**
     * Record modified date
     */
    RecordDtModified: string;
    /**
     * Concurrency control token
     */
    RowVersion: string;
}
/**
 * Invoice item
 */
export interface InvoiceItem {
    /**
     * Unique identifier
     */
    Id: string;
    /**
     * Invoice ID
     */
    InvoiceId: string;
    /**
     * Item description
     */
    Description: string;
    /**
     * Quantity
     */
    Quantity: number;
    /**
     * Unit price
     */
    UnitPrice: number;
    /**
     * Discount percentage
     */
    DiscountPercentage?: number;
    /**
     * Tax rate percentage
     */
    TaxRatePercentage: number;
    /**
     * Total amount
     */
    TotalAmount: number;
}
/**
 * Invoice create data
 */
export interface InvoiceCreateData {
    /**
     * Invoice data for creation
     */
    [key: string]: any;
}
/**
 * Invoice update data
 */
export interface InvoiceUpdateData {
    /**
     * Row version for concurrency control
     */
    RowVersion: string;
    /**
     * Other invoice data for update
     */
    [key: string]: any;
}
/**
 * Invoice creation parameters
 */
export interface CreateInvoiceParams {
    /**
     * Customer ID
     */
    CustomerId: string;
    /**
     * Invoice date (YYYY-MM-DD)
     */
    Date: string;
    /**
     * Invoice due date (YYYY-MM-DD)
     */
    DueDate: string;
    /**
     * Currency code
     */
    CurrencyCode: string;
    /**
     * Invoice items
     */
    Items: Array<{
        /**
         * Product ID
         */
        ProductId?: string;
        /**
         * Description
         */
        Description: string;
        /**
         * Quantity
         */
        Quantity: number;
        /**
         * Unit price
         */
        UnitPrice: number;
        /**
         * Discount percentage
         */
        DiscountPercentage?: number;
        /**
         * Tax rate
         */
        TaxRate?: number;
    }>;
}
/**
 * Invoice update parameters
 */
export interface UpdateInvoiceParams {
    /**
     * Customer ID
     */
    CustomerId?: string;
    /**
     * Invoice date (YYYY-MM-DD)
     */
    Date?: string;
    /**
     * Invoice due date (YYYY-MM-DD)
     */
    DueDate?: string;
    /**
     * Currency code
     */
    CurrencyCode?: string;
    /**
     * Invoice items
     */
    Items?: Array<{
        /**
         * Item ID (required for existing items)
         */
        Id?: string;
        /**
         * Product ID
         */
        ProductId?: string;
        /**
         * Description
         */
        Description?: string;
        /**
         * Quantity
         */
        Quantity?: number;
        /**
         * Unit price
         */
        UnitPrice?: number;
        /**
         * Discount percentage
         */
        DiscountPercentage?: number;
        /**
         * Tax rate
         */
        TaxRate?: number;
    }>;
}
/**
 * Received invoices list response
 */
export type ReceivedInvoicesListResponse = ListResponse<ReceivedInvoice>;
/**
 * Invoice filter options
 */
export interface InvoiceFilterOptions {
    /**
     * Filter by customer ID
     */
    customerId?: string;
    /**
     * Filter by status
     */
    status?: 'Draft' | 'Issued' | 'Paid' | 'Cancelled';
    /**
     * Filter by date from (inclusive)
     */
    dateFrom?: string;
    /**
     * Filter by date to (inclusive)
     */
    dateTo?: string;
    /**
     * Maximum number of results to return
     */
    limit?: number;
    /**
     * Number of results to skip
     */
    offset?: number;
    /**
     * Whether to include the total count
     */
    count?: boolean;
}
/**
 * Received Invoices module
 */
export declare class ReceivedInvoicesModule extends BaseResource {
    /**
     * Base endpoint for received invoices
     * The actual endpoint will be constructed as api/orgs/{organizationId}/receivedInvoices
     */
    protected readonly endpoint = "receivedinvoices";
    /**
     * Get all received invoices
     *
     * @param options Filter options
     * @returns Promise resolving to an array of received invoices
     */
    getAll(options?: InvoiceFilterOptions): Promise<ReceivedInvoice[]>;
    /**
     * Get a received invoice by ID
     *
     * @param id Received invoice ID
     * @returns Promise resolving to the received invoice
     */
    get(id: string): Promise<ReceivedInvoice>;
    /**
     * Create a new received invoice
     *
     * @param data Invoice data
     * @returns Promise resolving to the created received invoice
     */
    create(data: InvoiceCreateData): Promise<ReceivedInvoice>;
    /**
     * Update a received invoice
     *
     * @param id Received invoice ID
     * @param data Invoice data with RowVersion
     * @returns Promise resolving to the updated received invoice
     */
    update(id: string, data: InvoiceUpdateData): Promise<ReceivedInvoice>;
    /**
     * Delete a received invoice
     *
     * @param id Received invoice ID
     * @param rowVersion RowVersion for concurrency control
     * @returns Promise resolving when the received invoice is deleted
     */
    delete(id: string, rowVersion: string): Promise<void>;
    /**
     * Issue a received invoice
     *
     * @param id Received invoice ID
     * @returns Promise resolving to the issued received invoice
     */
    issue(id: string): Promise<ReceivedInvoice>;
    /**
     * Mark a received invoice as paid
     *
     * @param id Received invoice ID
     * @param paymentDate Payment date (YYYY-MM-DD)
     * @returns Promise resolving to the paid received invoice
     */
    markAsPaid(id: string, paymentDate: string): Promise<ReceivedInvoice>;
    /**
     * Cancel a received invoice
     *
     * @param id Received invoice ID
     * @returns Promise resolving to the cancelled received invoice
     */
    cancel(id: string): Promise<ReceivedInvoice>;
}
