@openade/fe
Version:
Fatturazione Elettronica - Electronic Invoicing for Sistema di Interscambio (SDI)
86 lines • 2.98 kB
TypeScript
import type { FatturaElettronica } from '@openade/common';
export interface QueryFilter {
vatNumber?: string;
invoiceNumber?: string;
dateFrom?: string;
dateTo?: string;
status?: string;
documentType?: string;
identificativoSdI?: string;
limit?: number;
offset?: number;
}
export interface AuditLogEntry {
entityType: string;
entityId: string;
action: string;
timestamp: string;
userId?: string;
metadata?: Record<string, unknown>;
}
export interface QueryResult<T> {
items: T[];
data: T[];
total: number;
hasMore: boolean;
}
export interface InvoiceRecord {
id: string;
vatNumber: string;
invoiceNumber: string;
invoiceDate: string;
identificativoSdI?: string;
invoice: FatturaElettronica;
xmlContent: string;
status: 'draft' | 'sent' | 'delivered' | 'rejected' | 'error';
createdAt: string;
updatedAt: string;
metadata?: Record<string, unknown>;
}
export interface ReceiptRecord {
id: string;
invoiceId: string;
identificativoSdI: string;
receiptType: 'RC' | 'NS' | 'MC' | 'NE' | 'MT' | 'DT';
content: string;
receiptDate: string;
createdAt: string;
}
export interface IDatabase {
saveInvoice(invoice: InvoiceRecord): Promise<void>;
getInvoice(id: string): Promise<InvoiceRecord | null>;
getInvoiceByIdentifiers(vatNumber: string, invoiceNumber: string, invoiceDate: string): Promise<InvoiceRecord | null>;
updateInvoiceStatus(id: string, status: InvoiceRecord['status']): Promise<void>;
updateInvoiceSdiId(id: string, identificativoSdI: string): Promise<void>;
listInvoices(filter: QueryFilter): Promise<QueryResult<InvoiceRecord>>;
deleteInvoice(id: string): Promise<void>;
saveReceipt(receipt: ReceiptRecord): Promise<void>;
getReceipt(id: string): Promise<ReceiptRecord | null>;
getReceiptsForInvoice(invoiceId: string): Promise<ReceiptRecord[]>;
getReceiptBySdiId(identificativoSdI: string): Promise<ReceiptRecord | null>;
listReceipts(filter: QueryFilter): Promise<QueryResult<ReceiptRecord>>;
deleteReceipt(id: string): Promise<void>;
getAuditTrail(entityType: string, entityId: string, dateFrom?: string, dateTo?: string): Promise<AuditLogEntry[]>;
saveAuditLog(entry: {
timestamp: string;
entityType: string;
entityId: string;
action: string;
userId?: string;
metadata?: Record<string, unknown>;
}): Promise<void>;
isHealthy(): Promise<boolean>;
close(): Promise<void>;
beginTransaction?(): Promise<void>;
commitTransaction?(): Promise<void>;
rollbackTransaction?(): Promise<void>;
}
export interface DatabaseConfig {
type: 'postgres' | 'mysql' | 'mongodb' | 'sqlite' | 'custom';
connection: string | Record<string, unknown>;
poolSize?: number;
timeout?: number;
logging?: boolean;
options?: Record<string, unknown>;
}
//# sourceMappingURL=database.interface.d.ts.map