import { apiClient } from './client'; import type { CfdiListResponse, CfdiFilters, Cfdi } from '@horux/shared'; export async function getCfdis(filters: CfdiFilters): Promise { const params = new URLSearchParams(); if (filters.tipo) params.set('tipo', filters.tipo); if (filters.estado) params.set('estado', filters.estado); if (filters.fechaInicio) params.set('fechaInicio', filters.fechaInicio); if (filters.fechaFin) params.set('fechaFin', filters.fechaFin); if (filters.rfc) params.set('rfc', filters.rfc); if (filters.search) params.set('search', filters.search); if (filters.page) params.set('page', filters.page.toString()); if (filters.limit) params.set('limit', filters.limit.toString()); const response = await apiClient.get(`/cfdi?${params}`); return response.data; } export async function getCfdiById(id: string): Promise { const response = await apiClient.get(`/cfdi/${id}`); return response.data; } export async function getResumenCfdi(año?: number, mes?: number) { const params = new URLSearchParams(); if (año) params.set('año', año.toString()); if (mes) params.set('mes', mes.toString()); const response = await apiClient.get(`/cfdi/resumen?${params}`); return response.data; } export interface CreateCfdiData { uuidFiscal: string; tipo: 'ingreso' | 'egreso' | 'traslado' | 'nomina' | 'pago'; serie?: string; folio?: string; fechaEmision: string; fechaTimbrado: string; rfcEmisor: string; nombreEmisor: string; rfcReceptor: string; nombreReceptor: string; subtotal: number; descuento?: number; iva?: number; isrRetenido?: number; ivaRetenido?: number; total: number; moneda?: string; tipoCambio?: number; metodoPago?: string; formaPago?: string; usoCfdi?: string; estado?: string; } export async function createCfdi(data: CreateCfdiData): Promise { const response = await apiClient.post('/cfdi', data); return response.data; } export interface BatchUploadResult { message: string; batchNumber: number; totalBatches: number; inserted: number; duplicates: number; errors: number; errorMessages?: string[]; } export async function createManyCfdis( cfdis: CreateCfdiData[], batchNumber?: number, totalBatches?: number, totalFiles?: number ): Promise { const response = await apiClient.post('/cfdi/bulk', { cfdis, batchNumber: batchNumber || 1, totalBatches: totalBatches || 1, totalFiles: totalFiles || cfdis.length }); return response.data; } export async function deleteCfdi(id: string): Promise { await apiClient.delete(`/cfdi/${id}`); }