Files
HoruxStrategyKimi/apps/api/src/services/integrations/contpaqi/index.ts
HORUX360 45570baccc 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>
2026-01-31 11:25:17 +00:00

264 lines
7.5 KiB
TypeScript

/**
* 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';