// SPDX-License-Identifier: LicenseRef-ConusAI-Template-1.0 import { token } from "@conusai-kit/core" import type { InvoiceTerms, InvoiceView, SeriesView } from "../contract/index.js" export interface Page { rows: T[] after?: string } export interface InvoicingReads { list(after?: string): Promise> get(id: string): Promise series(after?: string): Promise> ubl(id: string): Promise<{ filename: string; xml: string }> } export interface InvoicingService extends InvoicingReads { draft(data: InvoiceTerms, key: string): Promise update(id: string, data: InvoiceTerms, revision: string, key: string): Promise transition( operation: "issue" | "credit" | "void", input: { invoiceId: string; expectedVersion: string; key: string; seriesId?: string; reason?: string }, ): Promise createSeries(input: { code: string prefix: string kind: "invoice" | "credit_note" key: string }): Promise } export const readsOf = (service: InvoicingReads): InvoicingReads => ({ list: (after) => service.list(after), get: (id) => service.get(id), series: (after) => service.series(after), ubl: (id) => service.ubl(id), }) export const INVOICING_SERVICE = token("invoicing.service", { views: { read: readsOf, write: readsOf }, })