/** * Shared interface for the Frihet ERP API client. * * Both the local (Node.js) and remote (Cloudflare Workers) FrihetClient * classes satisfy this interface via structural typing. Tool registration * functions depend on this interface so they can work with either client. */ import type { CreateWebhookInput, CreateWebhookResult, PaginatedResponse, UpdateWebhookInput, Webhook } from "./types.js"; export interface IFrihetClient { listInvoices(params?: { limit?: number; offset?: number; after?: string; fields?: string; status?: string; from?: string; to?: string; clientId?: string; seriesId?: string; }): Promise>>; getInvoice(id: string): Promise>; createInvoice(data: Record): Promise>; updateInvoice(id: string, data: Record): Promise>; /** * Resolves to the soft-cancel payload when the backend answered 200 (non-draft * invoice CANCELLED, not destroyed — VeriFactu hash chain), or void/undefined * when it answered 204 (draft really removed). See `FrihetClient.deleteInvoice`. */ deleteInvoice(id: string): Promise | void>; searchInvoices(query: string, params?: { limit?: number; offset?: number; after?: string; fields?: string; status?: string; from?: string; to?: string; }): Promise>>; listExpenses(params?: { limit?: number; offset?: number; after?: string; fields?: string; from?: string; to?: string; vendorId?: string; category?: string; }): Promise>>; getExpense(id: string): Promise>; createExpense(data: Record): Promise>; updateExpense(id: string, data: Record): Promise>; deleteExpense(id: string): Promise; listClients(params?: { limit?: number; offset?: number; after?: string; fields?: string; q?: string; stage?: string; }): Promise>>; getClient(id: string): Promise>; createClient(data: Record): Promise>; updateClient(id: string, data: Record): Promise>; deleteClient(id: string): Promise; listProducts(params?: { limit?: number; offset?: number; after?: string; fields?: string; q?: string; isActive?: boolean; }): Promise>>; getProduct(id: string): Promise>; createProduct(data: Record): Promise>; updateProduct(id: string, data: Record): Promise>; deleteProduct(id: string): Promise; listQuotes(params?: { limit?: number; offset?: number; after?: string; fields?: string; status?: string; from?: string; to?: string; clientId?: string; seriesId?: string; }): Promise>>; getQuote(id: string): Promise>; createQuote(data: Record): Promise>; updateQuote(id: string, data: Record): Promise>; /** Same 200-cancel / 204-destroy contract as {@link IFrihetClient.deleteInvoice}. */ deleteQuote(id: string): Promise | void>; listVendors(params?: { q?: string; limit?: number; offset?: number; after?: string; fields?: string; }): Promise>>; getVendor(id: string): Promise>; createVendor(data: Record): Promise>; updateVendor(id: string, data: Record): Promise>; deleteVendor(id: string): Promise; sendInvoice(id: string, to?: string): Promise>; markInvoicePaid(id: string, paidDate?: string): Promise>; getInvoicePdf(id: string): Promise; getInvoiceEInvoice(invoiceId: string): Promise; createCreditNote(invoiceId: string, data: { reason: string; reasonDescription?: string; fullCredit?: boolean; issueDate?: string; }, idempotencyKey?: string): Promise>; applyLateFee(invoiceId: string, data?: { amount?: number; daysOverdue?: number; }): Promise; sendQuote(id: string, to?: string): Promise>; listWebhooks(): Promise<{ data: Webhook[]; total: number; _demo?: true; _demoNotice?: string; }>; getWebhook(id: string): Promise; createWebhook(data: CreateWebhookInput): Promise; updateWebhook(id: string, data: UpdateWebhookInput): Promise; deleteWebhook(id: string): Promise; listClientContacts(clientId: string, params?: { limit?: number; offset?: number; }): Promise>>; createClientContact(clientId: string, data: Record): Promise>; deleteClientContact(clientId: string, contactId: string): Promise; listClientActivities(clientId: string, params?: { limit?: number; offset?: number; }): Promise>>; logClientActivity(clientId: string, data: Record): Promise>; listClientNotes(clientId: string, params?: { limit?: number; offset?: number; }): Promise>>; createClientNote(clientId: string, data: Record): Promise>; deleteClientNote(clientId: string, noteId: string): Promise; listDeposits(params?: { limit?: number; offset?: number; after?: string; fields?: string; from?: string; to?: string; clientId?: string; status?: string; }): Promise>>; getDeposit(id: string): Promise>; createDeposit(data: Record): Promise>; updateDeposit(id: string, data: Record): Promise>; deleteDeposit(id: string): Promise; applyDeposit(id: string, data?: Record): Promise>; refundDeposit(id: string, data?: Record): Promise>; getBusinessContext(): Promise>; getMonthlySummary(month?: string): Promise>; getQuarterlyTaxes(quarter?: string): Promise>; sendEInvoice(params: { invoiceId: string; format: string; dispatchMode: string; }): Promise<{ workflowRunId: string; status: "queued"; estimatedCompletionSec: number; }>; getEInvoiceStatus(workflowRunId: string): Promise<{ status: "queued" | "running" | "succeeded" | "failed" | "cancelled"; step: string; error?: string; ackId?: string; pdfA3Url?: string; xmlUrl?: string; }>; validateEInvoiceXml(params: { xml: string; format: string; }): Promise<{ valid: boolean; errors: Array<{ severity: string; location: string; message: string; rule: string; }>; validator: "kosit" | "mustang" | "xsd" | "schematron"; durationMs: number; }>; exportDatev(params: { periodStart: string; periodEnd: string; format: string; }): Promise<{ fileUrl: string; filename: string; rowCount: number; fiscalPeriod: string; encoding: "cp1252"; }>; exportEInvoice(params: { invoiceId: string; format: string; signed?: boolean; }): Promise<{ xmlUrl: string; filename: string; format: string; signed: boolean; }>; faceSubmit(params: { invoiceId: string; mode: "mock" | "sandbox" | "production"; }): Promise<{ registroFACe: string; status: "submitted" | "error"; submittedAt: string; mode: string; }>; faceStatus(params: { invoiceId: string; }): Promise<{ registroFACe: string; statusCode: string; statusDescription: string; rejectionReason?: string; }>; ticketbaiSubmit(params: { invoiceId: string; sandbox: boolean; }): Promise<{ tbaiId: string; territory: "bizkaia" | "gipuzkoa" | "araba"; status: "submitted" | "accepted" | "rejected" | "error"; sandbox: boolean; qrUrl?: string; }>; ticketbaiStatus(params: { invoiceId: string; }): Promise<{ tbaiId: string; territory: "bizkaia" | "gipuzkoa" | "araba"; status: "submitted" | "accepted" | "rejected" | "error"; rejectionReason?: string; error?: string; }>; listReservations(params?: { propertyId?: string; status?: string; checkInFrom?: string; checkInTo?: string; fields?: string; limit?: number; offset?: number; after?: string; }): Promise>>; getReservation(id: string): Promise>; createReservation(data: Record): Promise>; listProperties(params?: { q?: string; isActive?: boolean; fields?: string; limit?: number; offset?: number; after?: string; }): Promise>>; syncChannel(channelId: string, direction: "pull" | "push" | "both"): Promise>; listTerminals(params?: { locationId?: string; limit?: number; offset?: number; }): Promise>>; getSale(id: string): Promise>; listSales(params?: { terminalId?: string; status?: string; from?: string; to?: string; limit?: number; offset?: number; after?: string; }): Promise>>; refundSale(id: string, data?: { amountCents?: number; reason?: string; }): Promise>; listKitchenTickets(params?: { status?: string; stationId?: string; limit?: number; offset?: number; after?: string; }): Promise>>; getKitchenTicket(id: string): Promise>; updateKitchenTicket(id: string, data: Record): Promise>; listKitchenStations(params?: { limit?: number; offset?: number; }): Promise>>; listMenuItems(params?: { q?: string; isActive?: boolean; limit?: number; offset?: number; after?: string; }): Promise>>; listBankAccounts(params?: { limit?: number; offset?: number; }): Promise>>; getBankAccount(id: string): Promise>; listTransactions(params?: { accountId?: string; from?: string; to?: string; status?: string; category?: string; limit?: number; offset?: number; after?: string; }): Promise>>; categorizeTransaction(id: string, data: { category: string; notes?: string; }): Promise>; matchTransactionToDocument(transactionId: string, data: { documentId: string; documentType: "invoice" | "expense"; notes?: string; }): Promise>; getFiscalModeloSummary(modeloCode: string, period?: string): Promise>; getVerifactuStatus(invoiceId: string): Promise>; resubmitVerifactu(invoiceId: string): Promise>; getTicketbaiStatus(invoiceId: string): Promise>; listTimeEntries(params?: { userId?: string; projectId?: string; from?: string; to?: string; billable?: boolean; limit?: number; offset?: number; after?: string; }): Promise>>; getTimeEntry(id: string): Promise>; createTimeEntry(data: Record): Promise>; updateTimeEntry(id: string, data: Record): Promise>; deleteTimeEntry(id: string): Promise; getTimeSummary(params: { from: string; to: string; userId?: string; projectId?: string; groupBy?: string; }): Promise>; listRecurringInvoices(params?: { status?: string; limit?: number; offset?: number; }): Promise>>; getRecurringInvoice(id: string): Promise>; createRecurringInvoice(data: Record): Promise>; updateRecurringInvoice(id: string, data: Record): Promise>; pauseRecurringInvoice(id: string): Promise>; resumeRecurringInvoice(id: string): Promise>; deleteRecurringInvoice(id: string): Promise; runRecurringNow(templateId: string, options?: { draftOnly?: boolean; }): Promise>; listTeamMembers(params?: { role?: string; status?: string; limit?: number; offset?: number; }): Promise>>; inviteTeamMember(data: { email: string; role: string; name?: string; }): Promise>; updateTeamMemberRole(memberId: string, role: string): Promise>; removeTeamMember(memberId: string): Promise; approveGLEntry(entryId: string, notes?: string): Promise>; rejectGLEntry(entryId: string, reason: string): Promise>; getGLEntryAuditLog(entryId: string): Promise>; addCustomPortalDomain(data: { domain: string; workspaceId?: string; }): Promise>; verifyCustomPortalDomain(data: { domain: string; }): Promise>; removeCustomPortalDomain(data: { domain: string; }): Promise>; generatePortalOnboardLink(data: { email: string; name?: string; expiresInHours?: number; workspaceId?: string; }): Promise>; lookupTaxIdViaVIES(data: { vatNumber: string; countryCode: string; }): Promise>; getIgicModeloSummary(modeloCode: string, params?: { year?: string; period?: string; }): Promise>; calculateAiem(data: { ncCode: string; amount: number; description?: string; }): Promise>; getISSummary(modeloCode: string, params?: { year?: string; installment?: string; }): Promise>; listBankRules(params?: { isActive?: boolean; limit?: number; offset?: number; }): Promise>>; createBankRule(data: { name: string; conditions: Array<{ field: string; operator: string; value: string; }>; actions: Array<{ type: string; value: string; }>; isActive?: boolean; }): Promise>; sendGestoriaMessage(data: { workspaceId: string; parentType: "documentRequest" | "filingItem" | "obligation"; parentId: string; body: string; }): Promise>; listGestoriaMessages(params: { workspaceId: string; parentType: "documentRequest" | "filingItem" | "obligation"; parentId: string; limit?: number; before?: string; }): Promise<{ messages: Array>; hasMore: boolean; }>; createGestoriaTemplate(data: { name: string; title: string; description: string; dueDateOffsetDays: number; attachmentRequired?: boolean; variables?: Array<{ key: string; label?: string; defaultValue?: string; }>; }): Promise<{ templateId: string; }>; bulkSendGestoriaTemplate(data: { templateId: string; clientWorkspaceIds: string[]; periodOverrides?: { quarter?: string | number; year?: string | number; month?: string | number; }; }): Promise>; getGestoriaAgingConsolidated(params?: { ownerUid?: string; }): Promise>; listLeaves(params?: { employeeId?: string; status?: string; from?: string; to?: string; limit?: number; offset?: number; after?: string; }): Promise>>; createLeaveRequest(data: { employeeId: string; type: string; startDate: string; endDate: string; reason?: string; }): Promise>; approveLeave(leaveId: string, data?: { reason?: string; }): Promise>; rejectLeave(leaveId: string, data: { reason: string; }): Promise>; cancelLeave(leaveId: string): Promise>; attendanceClockIn(data: { employeeId: string; mood?: string; location?: string; }): Promise>; attendanceClockOut(entryId: string): Promise>; getOvertimeReport(params: { period: string; employeeId?: string; }): Promise>; listAnomalies(params?: { type?: string; severity?: string; from?: string; to?: string; limit?: number; offset?: number; }): Promise>>; testWebhook(id: string, data?: { eventType?: string; }): Promise>; exportPayroll(params: { format: "a3" | "contasol" | "sage" | "siltra"; month: string; }): Promise>; getPayrollChecklist(params: { month: string; }): Promise>; getOnboardingStatus(): Promise>; setOnboardingPersona(data: { persona: "autonomo" | "empresa" | "agencia" | "gestoria"; }): Promise>; getPermissionsMatrix(): Promise>; getMyPermissions(): Promise>; getCurrentPeriod(params?: { fiscalYear?: string; }): Promise>; closePeriod(data: { type: "monthly" | "quarterly"; }): Promise>; reopenPeriod(data: { periodId: string; reason: string; }): Promise>; } //# sourceMappingURL=client-interface.d.ts.map