import type { InvoiceRequest, IssueOptions, ProviderState, ProviderLog, ProviderSummary, ListFilter, } from "./invoice.ts"; import type { PendingTaxInvoiceLog } from "./queue.ts"; import type { Party } from "./invoice.ts"; export interface TaxInvoiceDriver { name(): string; registIssue(req: InvoiceRequest): Promise; register(req: InvoiceRequest): Promise; issue(docKey: string, opts: IssueOptions): Promise; cancelIssue(docKey: string, memo: string): Promise; registReverseRequest(req: InvoiceRequest): Promise; reverseRequest(docKey: string, memo: string): Promise; cancelReverseRequest(docKey: string, memo: string): Promise; refuse(docKey: string, memo: string): Promise; delete(docKey: string): Promise; getState(docKey: string): Promise; getDetail(docKey: string): Promise; getLogs(docKey: string): Promise; list(filter: ListFilter): Promise; sendEmail(docKey: string, emails: string[]): Promise; sendSMS(docKey: string, to: string): Promise; sendToNTS(docKey: string): Promise; } export interface TaxInvoiceQuerier { submitTaxInvoiceLog( logEntry: Partial, ): Promise; claimPendingTaxInvoiceLogs(limit: number): Promise; updateTaxInvoiceLogStatus( logSeq: number, status: string, result?: unknown, ): Promise; resetStaleTaxInvoiceLogs(staleMinutes: number): Promise; submitTaxInvoice(invoice: InvoiceRequest): Promise; updateTaxInvoice( seq: number, fields: Record, ): Promise; getTaxInvoice(seq: number): Promise>; getTaxInvoiceByMgtKey( provider: string, mgtKey: string, ): Promise>; listTaxInvoicesForSync( provider: string, ): Promise[]>; findOrCreateParty(party: Party): Promise; }