/**
 * iCure Data Stack API Documentation
 * The iCure Data Stack Application API is the native interface to iCure. This version is obsolete, please use v2.
 *
 * OpenAPI spec version: v1
 *
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */
import { XHR } from './XHR';
import { DocIdentifier } from '../model/DocIdentifier';
import { FilterChainInvoice } from '../model/FilterChainInvoice';
import { IcureStub } from '../model/IcureStub';
import { Invoice } from '../model/Invoice';
import { InvoicingCode } from '../model/InvoicingCode';
import { LabelledOccurence } from '../model/LabelledOccurence';
import { ListOfIds } from '../model/ListOfIds';
import { PaginatedListInvoice } from '../model/PaginatedListInvoice';
import { AuthenticationProvider } from '../../icc-x-api/auth/AuthenticationProvider';
import { EntityBulkShareResult } from '../model/requests/EntityBulkShareResult';
import { MinimalEntityBulkShareResult } from '../model/requests/MinimalEntityBulkShareResult';
import { BulkShareOrUpdateMetadataParams } from '../model/requests/BulkShareOrUpdateMetadataParams';
import { TimingInfo } from '../model/TimingInfo';
export declare class IccInvoiceApi {
    host: string;
    _headers: Array<XHR.Header>;
    authenticationProvider: AuthenticationProvider;
    fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
    get headers(): Promise<Array<XHR.Header>>;
    constructor(host: string, headers: any, authenticationProvider?: AuthenticationProvider, fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>);
    setHeaders(h: Array<XHR.Header>): void;
    handleError(e: XHR.XHRError): never;
    /**
     *
     * @summary Append codes to new or existing invoice
     * @param body
     * @param userId
     * @param type
     * @param sentMediumType
     * @param secretFKeys
     * @param insuranceId
     * @param invoiceId
     * @param gracePeriod
     */
    appendCodes(userId: string, type: string, sentMediumType: string, secretFKeys: string, insuranceId?: string, invoiceId?: string, gracePeriod?: number, body?: Array<InvoicingCode>): Promise<Array<Invoice>>;
    /**
     *
     * @summary Creates an invoice
     * @param body
     */
    createInvoice(body?: Invoice): Promise<Invoice>;
    /**
     * Returns the created invoices.
     * @summary Create a batch of invoices
     * @param body
     */
    createInvoices(body?: Array<Invoice>): Promise<Array<Invoice>>;
    /**
     *
     * @summary Deletes an invoice
     * @param invoiceId
     */
    deleteInvoice(invoiceId: string): Promise<DocIdentifier>;
    /**
     * Returns a list of invoices along with next start keys and Document ID. If the nextStartKey is Null it means that this is the last page.
     * @summary Filter invoices for the current user (HcParty)
     * @param body
     * @param collectTiming if true, include server-side filter timing information in the response
     */
    filterInvoicesBy(body?: FilterChainInvoice, collectTiming?: false): Promise<Array<Invoice>>;
    filterInvoicesBy(body?: FilterChainInvoice, collectTiming?: true): Promise<Array<Invoice> & TimingInfo>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param hcPartyId
     * @param fromDate
     * @param toDate
     * @param startKey The start key for pagination: a JSON representation of an array containing all the necessary components to form the Complex Key&#x27;s startKey
     * @param startDocumentId A patient document ID
     * @param limit Number of rows
     */
    findByAuthor(hcPartyId: string, fromDate?: number, toDate?: number, startKey?: string, startDocumentId?: string, limit?: number): Promise<PaginatedListInvoice>;
    /**
     * @deprecated use {@link findInvoiceIdsByDataOwnerPatientInvoiceDate} instead.
     * @summary List invoices found By Healthcare Party and secret foreign patient keys.
     * @param body
     * @param hcPartyId
     */
    findInvoicesByHCPartyPatientForeignKeysUsingPost(hcPartyId: string, body?: Array<string>): Promise<Array<Invoice>>;
    /**
     * Keys have to delimited by commas.
     * @deprecated use {@link findInvoiceIdsByDataOwnerPatientInvoiceDate} instead.
     * @summary List invoices found By Healthcare Party and secret foreign patient keys.
     * @param hcPartyId
     * @param secretFKeys
     */
    findInvoicesByHCPartyPatientForeignKeys(hcPartyId: string, secretFKeys: string): Promise<Array<Invoice>>;
    /**
     * @summary List Invoice ids by data owner and a set of secret foreign key. The ids will be sorted by Invoice invoiceDate, in ascending or descending
     * order according to the specified parameter value.
     *
     * @param dataOwnerId the data owner id.
     * @param secretFKeys an array of secret foreign keys.
     * @param startDate a timestamp in epoch milliseconds. If undefined, all the invoice ids since the beginning of time will be returned.
     * @param endDate a timestamp in epoch milliseconds. If undefined, all the invoice ids until the end of time will be returned.
     * @param descending whether to return the ids ordered in ascending or descending order by Invoice invoiceDate.
     * @return a promise that will resolve in an Array of Invoice ids.
     */
    findInvoiceIdsByDataOwnerPatientInvoiceDate(dataOwnerId: string, secretFKeys: string[], startDate?: number, endDate?: number, descending?: boolean): Promise<string[]>;
    /**
     * @summary List Invoice ids by data owner and a decision reference
     *
     * @param dataOwnerId the data owner id.
     * @param decisionReference the decision reference to search.
     * @return a promise that will resolve in an Array of Invoice ids.
     */
    findInvoiceIdsByDataOwnerDecisionReference(dataOwnerId: string, decisionReference: string): Promise<string[]>;
    /**
     * @deprecated use {@link findInvoicesDelegationsStubsByIds} instead.
     * @summary List helement stubs found By Healthcare Party and secret foreign keys.
     * @param body
     * @param hcPartyId
     */
    findInvoicesDelegationsStubsByHCPartyPatientForeignKeysUsingPost(hcPartyId: string, body?: Array<string>): Promise<Array<IcureStub>>;
    /**
     * Keys must be delimited by commas.
     * @deprecated use {@link findInvoicesDelegationsStubsByIds} instead.
     * @summary List helement stubs found By Healthcare Party and secret foreign keys.
     * @param hcPartyId
     * @param secretFKeys
     */
    findInvoicesDelegationsStubsByHCPartyPatientForeignKeys(hcPartyId: string, secretFKeys: string): Promise<Array<IcureStub>>;
    findInvoicesDelegationsStubsByIds(invoiceIds: string[]): Promise<Array<IcureStub>>;
    /**
     *
     * @summary Gets an invoice
     * @param invoiceId
     */
    getInvoice(invoiceId: string): Promise<Invoice>;
    /**
     *
     * @summary Gets an invoice
     * @param body
     */
    getInvoices(body?: ListOfIds): Promise<Array<Invoice>>;
    /**
     *
     * @summary Get the list of all used tarifications frequencies in invoices
     * @param minOccurrences
     */
    getTarificationsCodesOccurences(minOccurrences: number): Promise<Array<LabelledOccurence>>;
    /**
     *
     * @summary Gets all invoices per status
     * @param body
     * @param status
     * @param from
     * @param to
     */
    listAllHcpsByStatus(status: string, from?: number, to?: number, body?: ListOfIds): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param body
     */
    listByContactIds(body?: ListOfIds): Promise<Array<Invoice>>;
    /**
     * Keys have to delimited by coma
     * @summary List invoices by groupId
     * @param hcPartyId
     * @param groupId
     */
    listByHcPartyGroupId(hcPartyId: string, groupId: string): Promise<Array<Invoice>>;
    /**
     * Keys have to delimited by coma
     * @summary List invoices by type, sent or unsent
     * @param hcPartyId
     * @param sentMediumType
     * @param invoiceType
     * @param sent
     * @param from
     * @param to
     */
    listByHcPartySentMediumTypeInvoiceTypeSentDate(hcPartyId: string, sentMediumType: string, invoiceType: string, sent: boolean, from?: number, to?: number): Promise<Array<Invoice>>;
    /**
     *
     * @summary Get all invoices by author, by sending mode, by status and by date
     * @param hcPartyId
     * @param sendingMode
     * @param status
     * @param from
     * @param to
     */
    listByHcpartySendingModeStatusDate(hcPartyId: string, sendingMode?: string, status?: string, from?: number, to?: number): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param invoiceIds
     */
    listByIds(invoiceIds: string): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param recipientIds
     */
    listByRecipientsIds(recipientIds: string): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param serviceIds
     */
    listByServiceIds(serviceIds: string): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param userIds
     */
    listToInsurances(userIds?: string): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param userIds
     */
    listToInsurancesUnsent(userIds?: string): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param hcPartyId
     */
    listToPatients(hcPartyId?: string): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param hcPartyId
     */
    listToPatientsUnsent(hcPartyId?: string): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param body
     * @param invoiceId
     */
    mergeTo(invoiceId: string, body?: ListOfIds): Promise<Invoice>;
    /**
     *
     * @summary Modifies an invoice
     * @param body
     */
    modifyInvoice(body?: Invoice): Promise<Invoice>;
    /**
     * Returns the modified invoices.
     * @summary Modify a batch of invoices
     * @param body
     */
    modifyInvoices(body?: Array<Invoice>): Promise<Array<Invoice>>;
    /**
     *
     * @summary Modifies an invoice
     * @param body
     */
    reassignInvoice(body?: Invoice): Promise<Invoice>;
    /**
     *
     * @summary removeCodes for linked serviceId
     * @param body
     * @param userId
     * @param serviceId
     * @param secretFKeys
     */
    removeCodes(userId: string, serviceId: string, secretFKeys: string, body?: Array<string>): Promise<Array<Invoice>>;
    /**
     *
     * @summary Gets all invoices for author at date
     * @param invoiceId
     * @param scheme
     * @param forcedValue
     */
    validate(invoiceId: string, scheme: string, forcedValue: string): Promise<Invoice>;
    /**
     * @internal this method is for internal use only and may be changed without notice
     */
    bulkShareInvoices(request: BulkShareOrUpdateMetadataParams): Promise<EntityBulkShareResult<Invoice>[]>;
    /**
     * @internal this method is for internal use only and may be changed without notice
     */
    bulkShareInvoicesMinimal(request: BulkShareOrUpdateMetadataParams): Promise<MinimalEntityBulkShareResult[]>;
}
