import { AadeBookInvoiceType } from '../models/invoice.model';
import { ResponseDoc } from '../models/response.model';
import { IncomeClassificationsDoc } from '../models/incomeClassification.model';
import { ExpensesClassificationsDoc } from '../models/expensesClassification.model';
import { PaymentMethodsDoc } from '../models/paymentMethods.model';
import { RequestedDoc } from '../models/requestedDoc.model';
import { RequestedProviderDoc } from '../models/requestedProviderDoc.model';
import { ReceiverInfoDoc } from '../models/receiverInfoDoc.model';
import { RequestedBookInfo } from '../models/requestedBookInfo.model';
import { RequestedVatInfo } from '../models/requestVatInfoResponse.model';
import { RequestedE3Info } from '../models/requestE3InfoResponse.model';
import { RequestDocParams, RequestMyDataParams, RequestVatE3Params } from '../models/request-params.model';
export interface MyDataClientConfig {
    userId: string;
    subscriptionKey: string;
    production: boolean;
}
/**
 * MyDATA API Service (Browser & Node.js compatible)
 *
 * This service provides functions for interacting with the Greek myDATA API for both ERP and Provider users.
 */
export declare class MyDataClient {
    private _xmlService;
    private _userId;
    private _subscriptionKey;
    private _production;
    private get erpBaseUrl();
    private get providerBaseUrl();
    constructor(initConfig: MyDataClientConfig);
    private getHeaders;
    private handleResponse;
    /**
     * [ERP] Sends one or more invoices, including corrected/amending ones.
     * @param invoices Array of invoice objects
     * @returns The full ResponseDoc from myDATA
     */
    sendErpInvoices(invoices: AadeBookInvoiceType[]): Promise<ResponseDoc>;
    /**
     * [ERP] Sends one or more income classifications, corresponding to already submitted invoices.
     * @param classificationsDoc Object containing income classifications
     * @returns The full ResponseDoc from myDATA
     */
    sendErpIncomeClassification(classificationsDoc: IncomeClassificationsDoc): Promise<ResponseDoc>;
    /**
     * [ERP] Sends one or more expense classifications.
     * @param classificationsDoc Object containing classifications
     * @returns The full ResponseDoc from myDATA
     */
    sendErpExpensesClassification(classificationsDoc: ExpensesClassificationsDoc): Promise<ResponseDoc>;
    /**
     * [ERP] Sends payment methods for an invoice.
     * @param paymentsDoc Object containing payment methods
     * @returns The full ResponseDoc from myDATA
     */
    sendErpPaymentsMethod(paymentsDoc: PaymentMethodsDoc): Promise<ResponseDoc>;
    /**
     * [ERP] Cancels a previously transmitted invoice.
     * @param mark The MARK of the invoice to cancel
     * @param entityVatNumber Optional: VAT of the entity if called by a representative
     * @returns The full ResponseDoc from myDATA (containing cancellationMark on success)
     */
    cancelErpInvoice(mark: number, entityVatNumber?: string): Promise<ResponseDoc>;
    /**
     * [ERP] Requests documents (invoices, classifications, cancellations) received from others.
     * @param params Search parameters
     * @returns Parsed RequestedDoc object
     */
    requestErpDocs(params: RequestDocParams): Promise<RequestedDoc>;
    /**
     * [ERP] Requests documents (invoices, classifications, cancellations) previously transmitted by the user.
     * @param params Search parameters
     * @returns Parsed RequestedDoc object
     */
    requestErpTransmittedDocs(params: RequestDocParams): Promise<RequestedDoc>;
    /**
     * [ERP] Requests aggregated income data for a period.
     * @param params Search parameters (dateFrom, dateTo required)
     * @returns Parsed RequestedBookInfo object
     */
    requestErpMyIncome(params: RequestMyDataParams): Promise<RequestedBookInfo>;
    /**
     * [ERP] Requests aggregated expense data for a period.
     * @param params Search parameters (dateFrom, dateTo required)
     * @returns Parsed RequestedBookInfo object
     */
    requestErpMyExpenses(params: RequestMyDataParams): Promise<RequestedBookInfo>;
    /**
     * [ERP] Requests VAT related data for a period.
     * @param params Search parameters (dateFrom, dateTo required)
     * @returns Parsed RequestedVatInfo object
     */
    requestErpVatInfo(params: RequestVatE3Params): Promise<RequestedVatInfo>;
    /**
     * [ERP] Requests E3 related data for a period.
     * @param params Search parameters (dateFrom, dateTo required)
     * @returns Parsed RequestedE3Info object
     */
    requestErpE3Info(params: RequestVatE3Params): Promise<RequestedE3Info>;
    /**
     * [Provider] Sends one or more invoices.
     * @param invoices Array of invoice objects
     * @returns The full ResponseDoc from myDATA
     */
    sendProviderInvoices(invoices: AadeBookInvoiceType[]): Promise<ResponseDoc>;
    /**
     * [Provider] Sends one or more invoices pending issuance (unsigned).
     * @param invoices Array of invoice objects
     * @returns The full ResponseDoc from myDATA
     */
    sendProviderUnsignedInvoices(invoices: AadeBookInvoiceType[]): Promise<ResponseDoc>;
    /**
     * [Provider] Sends payment methods for an invoice.
     * @param paymentsDoc Object containing payment methods
     * @returns The full ResponseDoc from myDATA
     */
    sendProviderPaymentsMethod(paymentsDoc: PaymentMethodsDoc): Promise<ResponseDoc>;
    /**
     * [Provider] Requests summaries of documents previously transmitted by the provider for a specific issuer.
     * @param issuerVat The VAT number of the issuer whose invoices were sent
     * @param mark The minimum MARK to retrieve (exclusive)
     * @param nextPartitionKey Optional key for pagination
     * @param nextRowKey Optional key for pagination
     * @returns Parsed RequestedProviderDoc object
     */
    requestProviderTransmittedDocs(issuerVat: string, mark: number, nextPartitionKey?: string, nextRowKey?: string): Promise<RequestedProviderDoc>;
    /**
     * [Provider] Requests information about a recipient's registered providers and emails.
     * @param vatNumber The VAT number of the recipient entity to query
     * @returns Parsed ReceiverInfoDoc object
     */
    requestProviderReceiverInfo(vatNumber: string): Promise<ReceiverInfoDoc>;
}
