feat: Implement Phase 3 & 4 - AI Reports & ERP Integrations
## Phase 3: DeepSeek AI Integration ### AI Services (apps/api/src/services/ai/) - DeepSeek API client with streaming, rate limiting, retries - AI service for financial analysis, executive summaries, recommendations - Optimized prompts for Mexican CFO digital assistant - Redis caching for AI responses ### Report Generation (apps/api/src/services/reports/) - ReportGenerator: monthly, quarterly, annual, custom reports - PDF generator with corporate branding (PDFKit) - Report templates for PYME, Startup, Enterprise - Spanish prompts for financial narratives - MinIO storage for generated PDFs ### AI & Reports API Routes - POST /api/ai/analyze - Financial metrics analysis - POST /api/ai/chat - CFO digital chat with streaming - POST /api/reports/generate - Async report generation - GET /api/reports/:id/download - PDF download - BullMQ jobs for background processing ### Frontend Pages - /reportes - Report listing with filters - /reportes/nuevo - 3-step wizard for report generation - /reportes/[id] - Full report viewer with charts - /asistente - CFO Digital chat interface - Components: ChatInterface, ReportCard, AIInsightCard ## Phase 4: ERP Integrations ### CONTPAQi Connector (SQL Server) - Contabilidad: catalog, polizas, balanza, estado de resultados - Comercial: clientes, proveedores, facturas, inventario - Nominas: empleados, nominas, percepciones/deducciones ### Aspel Connector (Firebird/SQL Server) - COI: accounting, polizas, balanza, auxiliares - SAE: sales, purchases, inventory, A/R, A/P - NOI: payroll, employees, receipts - BANCO: bank accounts, movements, reconciliation - Latin1 to UTF-8 encoding handling ### Odoo Connector (XML-RPC) - Accounting: chart of accounts, journal entries, reports - Invoicing: customer/vendor invoices, payments - Partners: customers, vendors, statements - Inventory: products, stock levels, valuations - Multi-company and version 14-17 support ### Alegra Connector (REST API) - Invoices, credit/debit notes with CFDI support - Contacts with Mexican fiscal fields (RFC, regimen) - Payments and bank reconciliation - Financial reports: trial balance, P&L, balance sheet - Webhook support for real-time sync ### SAP Business One Connector (OData/Service Layer) - Session management with auto-refresh - Financials: chart of accounts, journal entries, reports - Sales: invoices, credit notes, delivery notes, orders - Purchasing: bills, POs, goods receipts - Inventory: items, stock, transfers, valuation - Banking: accounts, payments, cash flow ### Integration Manager - Unified interface for all connectors - BullMQ scheduler for automated sync - Webhook handling for real-time updates - Migration 003_integrations.sql with sync tables - Frontend page /integraciones for configuration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
263
apps/api/src/services/integrations/contpaqi/index.ts
Normal file
263
apps/api/src/services/integrations/contpaqi/index.ts
Normal file
@@ -0,0 +1,263 @@
|
||||
/**
|
||||
* CONTPAQi Integration Module
|
||||
*
|
||||
* Conector completo para integracion con los sistemas CONTPAQi:
|
||||
* - CONTPAQi Contabilidad
|
||||
* - CONTPAQi Comercial (ventas/compras)
|
||||
* - CONTPAQi Nominas
|
||||
*
|
||||
* ESTRUCTURA DE TABLAS CONSULTADAS:
|
||||
*
|
||||
* ============================================================================
|
||||
* CONTPAQi CONTABILIDAD
|
||||
* ============================================================================
|
||||
*
|
||||
* Empresas
|
||||
* - CIDEMPRESA: ID interno
|
||||
* - CCODIGOEMPRESA: Codigo de empresa
|
||||
* - CNOMBREEMPRESA: Nombre
|
||||
* - CRFC: RFC
|
||||
* - CRUTADATOS: Base de datos de la empresa
|
||||
*
|
||||
* Cuentas (Catalogo de cuentas contables)
|
||||
* - CIDCUENTA: ID de cuenta
|
||||
* - CCODIGOCUENTA: Codigo (ej: 1101-001)
|
||||
* - CNOMBRECUENTA: Nombre
|
||||
* - CTIPOCUENTA: 1=Activo, 2=Pasivo, 3=Capital, 4=Ingreso, 5=Costo, 6=Gasto, 7=Orden
|
||||
* - CNATURALEZA: 1=Deudora, 2=Acreedora
|
||||
* - CNIVEL: Nivel jerarquico
|
||||
* - CCUENTAPADRE: Cuenta padre
|
||||
* - CESDECATALOGO: 1=Cuenta de detalle
|
||||
* - CCODIGOAGRUPADOR: Codigo agrupador SAT
|
||||
*
|
||||
* Polizas (Encabezado)
|
||||
* - CIDPOLIZA: ID poliza
|
||||
* - CTIPOPOLIZA: 1=Ingresos, 2=Egresos, 3=Diario, 4=Orden
|
||||
* - CNUMPOLIZA: Numero
|
||||
* - CFECHA: Fecha
|
||||
* - CCONCEPTO: Descripcion
|
||||
* - CIDEJERCICIO: Ano fiscal
|
||||
* - CIDPERIODO: Mes (1-13)
|
||||
* - CAFECTADA: Si esta aplicada a saldos
|
||||
* - CUUIDCFDI: UUID del CFDI relacionado
|
||||
*
|
||||
* MovPolizas (Detalle de polizas)
|
||||
* - CIDMOVPOLIZA: ID movimiento
|
||||
* - CIDPOLIZA: Poliza padre
|
||||
* - CNUMEROPARTIDA: Numero de linea
|
||||
* - CCODIGOCUENTA: Cuenta contable
|
||||
* - CCONCEPTO: Descripcion
|
||||
* - CCARGO: Importe cargo
|
||||
* - CABONO: Importe abono
|
||||
* - CREFERENCIA: Referencia (num cheque, factura, etc)
|
||||
* - CUUIDCFDI: UUID CFDI
|
||||
* - CRFCTERCERO: RFC del tercero
|
||||
*
|
||||
* SaldosCuentas
|
||||
* - CIDCUENTA: Cuenta
|
||||
* - CIDEJERCICIO: Ejercicio
|
||||
* - CIDPERIODO: Periodo
|
||||
* - CSALDOINICIAL: Saldo inicial
|
||||
* - CCARGOS: Total cargos
|
||||
* - CABONOS: Total abonos
|
||||
* - CSALDOFINAL: Saldo final
|
||||
*
|
||||
* ============================================================================
|
||||
* CONTPAQi COMERCIAL
|
||||
* ============================================================================
|
||||
*
|
||||
* admClientes (Clientes y Proveedores - tabla unificada)
|
||||
* - CIDCLIENTEPROVEEDOR: ID
|
||||
* - CCODIGOCLIENTE: Codigo
|
||||
* - CRAZONSOCIAL: Razon social
|
||||
* - CRFC: RFC
|
||||
* - CTIPOCLIENTE: 1=Cliente, 2=ClienteProveedor, 3=Proveedor
|
||||
* - CREGIMENFISCAL: Regimen fiscal
|
||||
* - CUSOCFDI: Uso CFDI predeterminado
|
||||
* - CLIMITECREDITO: Limite de credito
|
||||
* - CDIASCREDITO: Dias de credito
|
||||
* - CSALDOACTUAL: Saldo actual
|
||||
*
|
||||
* admDomicilios (Direcciones)
|
||||
* - CIDDOMICILIO: ID
|
||||
* - CIDCLIENTEPROVEEDOR: Cliente/Proveedor
|
||||
* - CTIPO: Tipo de direccion
|
||||
* - CCALLE, CNUMEROEXTERIOR, CCOLONIA, CCODIGOPOSTAL, etc.
|
||||
*
|
||||
* admProductos (Catalogo de productos)
|
||||
* - CIDPRODUCTO: ID
|
||||
* - CCODIGOPRODUCTO: Codigo
|
||||
* - CNOMBREPRODUCTO: Nombre
|
||||
* - CTIPOPRODUCTO: 1=Producto, 2=Paquete, 3=Servicio
|
||||
* - CUNIDADMEDIDA: Unidad
|
||||
* - CCLAVESAT: Clave SAT
|
||||
* - CPRECIOBASE: Precio base
|
||||
* - CULTIMOCOSTO: Ultimo costo
|
||||
* - CCOSTOPROMEDIO: Costo promedio
|
||||
* - CTASAIVA: Tasa de IVA
|
||||
*
|
||||
* admDocumentos (Facturas, Notas, Remisiones, etc.)
|
||||
* - CIDDOCUMENTO: ID
|
||||
* - CIDCONCEPTODOCUMENTO: Tipo de documento
|
||||
* - CSERIEFASCICULO: Serie
|
||||
* - CFOLIO: Folio
|
||||
* - CFECHA: Fecha
|
||||
* - CIDCLIENTEPROVEEDOR: Cliente/Proveedor
|
||||
* - CSUBTOTAL, CDESCUENTO, CIVA, CTOTAL: Totales
|
||||
* - CUUID: UUID del CFDI
|
||||
* - CFORMAPAGO, CMETODOPAGO: Forma y metodo de pago
|
||||
* - CPENDIENTE: Saldo pendiente
|
||||
* - CCANCELADO: Si esta cancelado
|
||||
*
|
||||
* admMovimientos (Detalle de productos en documentos)
|
||||
* - CIDMOVIMIENTO: ID
|
||||
* - CIDDOCUMENTO: Documento padre
|
||||
* - CIDPRODUCTO: Producto
|
||||
* - CUNIDADES: Cantidad
|
||||
* - CPRECIO: Precio unitario
|
||||
* - CDESCUENTO: Descuento
|
||||
* - CIMPORTE: Importe
|
||||
* - CIVA: IVA
|
||||
*
|
||||
* admAlmacenes (Almacenes)
|
||||
* - CIDALMACEN: ID
|
||||
* - CCODIGOALMACEN: Codigo
|
||||
* - CNOMBREALMACEN: Nombre
|
||||
*
|
||||
* admExistencias (Inventario por almacen)
|
||||
* - CIDPRODUCTO: Producto
|
||||
* - CIDALMACEN: Almacen
|
||||
* - CEXISTENCIA: Cantidad
|
||||
*
|
||||
* ============================================================================
|
||||
* CONTPAQi NOMINAS
|
||||
* ============================================================================
|
||||
*
|
||||
* nomEmpleados (Catalogo de empleados)
|
||||
* - CIDEMPLEAD: ID
|
||||
* - CCODIGOEMPLEADO: Codigo/Numero
|
||||
* - CNOMBRE, CAPELLIDOPATERNO, CAPELLIDOMATERNO: Nombre
|
||||
* - CRFC, CCURP, CNSS: Identificadores
|
||||
* - CFECHAALTA, CFECHABAJA: Fechas
|
||||
* - CTIPOCONTRATO: Tipo de contrato
|
||||
* - CTIPOREGIMEN: Regimen (Sueldos, Asimilados, etc.)
|
||||
* - CPERIODICIDADPAGO: Periodicidad
|
||||
* - CSALARIODIARIO: Salario diario
|
||||
* - CSALARIODIAINTEGRADO: SDI
|
||||
* - CDEPARTAMENTO, CPUESTO: Puesto
|
||||
* - CBANCO, CCLABE: Datos bancarios
|
||||
*
|
||||
* nomPeriodos (Periodos de nomina)
|
||||
* - CIDPERIODO: ID
|
||||
* - CNUMEROPERIODO: Numero de periodo
|
||||
* - CEJERCICIO: Ano
|
||||
* - CFECHAINICIO, CFECHAFIN, CFECHAPAGO: Fechas
|
||||
* - CTIPONOMINA: 1=Ordinaria, 2=Extraordinaria
|
||||
*
|
||||
* nomNominas (Nomina por empleado/periodo)
|
||||
* - CIDNOMINA: ID
|
||||
* - CIDEMPLEAD: Empleado
|
||||
* - CIDPERIODO: Periodo
|
||||
* - CTOTALPERCEPCIONES, CTOTALDEDUCCIONES: Totales
|
||||
* - CNETO: Neto a pagar
|
||||
* - CUUID: UUID del CFDI de nomina
|
||||
*
|
||||
* nomMovimientos (Percepciones y deducciones)
|
||||
* - CIDMOVIMIENTO: ID
|
||||
* - CIDNOMINA: Nomina
|
||||
* - CTIPOMOVIMIENTO: 1=Percepcion, 2=Deduccion, 3=OtroPago
|
||||
* - CIDTIPOMOVIMIENTO: ID del tipo
|
||||
* - CIMPORTE: Importe
|
||||
* - CIMPORTEGRAVADO, CIMPORTEEXENTO: Gravado/Exento
|
||||
*
|
||||
* nomTiposPercepcion (Catalogo de percepciones)
|
||||
* - CIDTIPOPERCEPCION: ID
|
||||
* - CCLAVE: Clave
|
||||
* - CCONCEPTO: Descripcion
|
||||
* - CTIPOPERCEPCIONSAT: Clave SAT
|
||||
*
|
||||
* nomTiposDeduccion (Catalogo de deducciones)
|
||||
* - CIDTIPODEDUCCION: ID
|
||||
* - CCLAVE: Clave
|
||||
* - CCONCEPTO: Descripcion
|
||||
* - CTIPODEDUCCIONSAT: Clave SAT
|
||||
*
|
||||
* ============================================================================
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* import {
|
||||
* createCONTPAQiClient,
|
||||
* createContabilidadConnector,
|
||||
* createComercialConnector,
|
||||
* createNominasConnector,
|
||||
* createCONTPAQiSyncService,
|
||||
* } from './services/integrations/contpaqi';
|
||||
*
|
||||
* // Crear cliente
|
||||
* const client = createCONTPAQiClient({
|
||||
* host: 'localhost',
|
||||
* port: 1433,
|
||||
* user: 'sa',
|
||||
* password: 'password',
|
||||
* database: 'ctCONTPAQi',
|
||||
* });
|
||||
*
|
||||
* // Conectar a una empresa
|
||||
* const empresas = await client.getEmpresas('Contabilidad');
|
||||
* await client.connectToEmpresa(empresas[0]);
|
||||
*
|
||||
* // Usar conectores especificos
|
||||
* const contabilidad = createContabilidadConnector(client);
|
||||
* const cuentas = await contabilidad.getCatalogoCuentas();
|
||||
* const balanza = await contabilidad.getBalanzaComprobacion({ ejercicio: 2024, periodo: 12 });
|
||||
*
|
||||
* // Sincronizar a Horux
|
||||
* const syncService = createCONTPAQiSyncService({ dbPool, getSchemaName });
|
||||
* const result = await syncService.syncToHorux({
|
||||
* tenantId: 'xxx',
|
||||
* connectionConfig: { ... },
|
||||
* productos: ['Contabilidad', 'Comercial'],
|
||||
* fechaDesde: new Date('2024-01-01'),
|
||||
* fechaHasta: new Date('2024-12-31'),
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
|
||||
// Types
|
||||
export * from './contpaqi.types.js';
|
||||
|
||||
// Schemas
|
||||
export * from './contpaqi.schema.js';
|
||||
|
||||
// Client
|
||||
export {
|
||||
CONTPAQiClient,
|
||||
createCONTPAQiClient,
|
||||
getCONTPAQiPoolManager,
|
||||
closeCONTPAQiConnections,
|
||||
testCONTPAQiConnection,
|
||||
} from './contpaqi.client.js';
|
||||
|
||||
// Connectors
|
||||
export {
|
||||
ContabilidadConnector,
|
||||
createContabilidadConnector,
|
||||
} from './contabilidad.connector.js';
|
||||
|
||||
export {
|
||||
ComercialConnector,
|
||||
createComercialConnector,
|
||||
} from './comercial.connector.js';
|
||||
|
||||
export {
|
||||
NominasConnector,
|
||||
createNominasConnector,
|
||||
} from './nominas.connector.js';
|
||||
|
||||
// Sync Service
|
||||
export {
|
||||
CONTPAQiSyncService,
|
||||
createCONTPAQiSyncService,
|
||||
type CONTPAQiSyncServiceConfig,
|
||||
} from './contpaqi.sync.js';
|
||||
Reference in New Issue
Block a user