- Laravel 11 backend with API REST - React 18 + TypeScript + Vite frontend - Multi-parser architecture for accounting systems (CONTPAQi, Aspel, SAP) - 27+ financial metrics calculation - PDF report generation with Browsershot - Complete documentation (10 documents) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9.8 KiB
9.8 KiB
Horux Strategy Platform - Diseño de Sistema
Fecha: 2025-01-31 Proyecto: Plataforma de Reportes Financieros Cliente: Horux 360
1. Resumen Ejecutivo
Plataforma web para generar reportes financieros automatizados a partir de balanzas de comprobación. Permite a empresas subir sus datos contables de múltiples sistemas (CONTPAQi, Aspel, SAP, etc.) y obtener dashboards interactivos con métricas financieras y exportación a PDF profesional.
2. Stack Tecnológico
| Componente | Tecnología |
|---|---|
| Backend | Laravel 11 (API REST) |
| Autenticación | Laravel Sanctum |
| Frontend | React 18 + TypeScript |
| Base de datos | MySQL / PostgreSQL |
| Gráficas | Recharts |
| Generación PDF | Puppeteer / Browsershot |
| Parsing PDFs | spatie/pdf-to-text + regex |
3. Roles de Usuario
| Rol | Permisos |
|---|---|
| Administrador | Acceso total, configuración global, gestión de umbrales |
| Analista | Gestionar clientes asignados, procesar balanzas, generar reportes |
| Cliente | Ver dashboard propio, descargar PDFs, gestionar empleados |
| Empleado | Permisos configurables por el cliente |
4. Sistemas Contables Soportados
- CONTPAQi (inicial, con ejemplos)
- Aspel
- Alegra
- SAP
- Odoo
- Parser genérico (CSV/Excel configurable)
4.1 Arquitectura de Parsers
Upload archivo → Detector de formato → Parser específico → Formato normalizado
Cada parser normaliza los datos a una estructura estándar interna, permitiendo agregar nuevos sistemas sin modificar el resto del código.
5. Modelo de Datos
5.1 Usuarios y Acceso
-- users
id, nombre, email, password, role, cliente_id (nullable)
-- clientes
id, nombre_empresa, logo, giro_id, moneda, configuracion (JSON)
-- permisos_empleado
user_id, cliente_id, permisos (JSON)
5.2 Catálogos
-- giros
id, nombre, activo
-- umbrales
id, metrica, muy_positivo, positivo, neutral, negativo, muy_negativo, giro_id
-- reportes_contables
id, nombre ("Balance General", "Estado de Resultados")
-- categorias_contables
id, reporte_contable_id, nombre, orden
5.3 Categorías Contables
Balance General:
| ID | Categoría |
|---|---|
| 1 | Activos Circulantes |
| 2 | Activos No Circulantes |
| 3 | Pasivo Circulante |
| 4 | Pasivo No Circulante |
| 5 | Capital Social |
| 6 | Pérdidas Ejercicios Anteriores |
| 7 | Utilidades Ejercicios Anteriores |
Estado de Resultados:
| ID | Categoría |
|---|---|
| 8 | Ingresos |
| 9 | Costo de Venta |
| 10 | Gastos Operativos |
| 11 | Otros Gastos |
| 12 | Gastos Financieros |
5.4 Balanzas y Cuentas
-- balanzas
id, cliente_id, periodo_inicio, periodo_fin, sistema_origen, archivo_original, status
-- cuentas
id, balanza_id, codigo, nombre, nivel,
reporte_contable_id, categoria_contable_id, cuenta_padre_id,
saldo_inicial_deudor, saldo_inicial_acreedor,
cargos, abonos,
saldo_final_deudor, saldo_final_acreedor,
excluida (boolean)
-- reglas_mapeo
id, sistema_origen, cuenta_padre_codigo,
rango_hijo_inicio, rango_hijo_fin,
reporte_contable_id, categoria_contable_id, prioridad
-- mapeo_cuentas (excepciones por cliente)
cliente_id, codigo_patron, categoria_destino, notas
5.5 Reportes
-- reportes
id, cliente_id, nombre, periodo_tipo, fecha_generacion, data_calculada (JSON), pdf_path
6. Reglas de Mapeo Contable (CONTPAQi)
| Cuenta Padre | Rango Hijos | Reporte | Categoría |
|---|---|---|---|
| 001-100-000 | 101-000-000 a 154-999-999 | Balance | Activos Circulantes |
| 001-200-000 | 155-000-000 a 199-999-999 | Balance | Activos No Circulantes |
| 002-100-000 | 200-000-000 a 209-999-999 | Balance | Pasivo Circulante |
| 002-200-000 | 210-000-000 a 220-999-999 | Balance | Pasivo No Circulante |
| 300-000-000 | - | Balance | Capital Social |
| 310-000-000 | - | Balance | Pérdidas Ejercicios Anteriores |
| 311-000-000 | - | Balance | Utilidades Ejercicios Anteriores |
| 40X-000-000 | 401 a 409 | Edo. Resultados | Ingresos |
| 5XX-000-000 | 500 a 599 | Edo. Resultados | Gastos Operativos |
| 6XX-000-000 | 600 a 699 | Edo. Resultados | Otros Gastos |
| 70X-000-000 | 700 a 799 | Edo. Resultados | Gastos Financieros |
7. Flujo de Usuario
- Crear/seleccionar cliente - Nombre, logo, giro, moneda
- Subir balanzas - 2+ archivos PDF/Excel/CSV
- Detección automática - Sistema identifica origen (CONTPAQi, etc.)
- Clasificación automática - Mapeo a categorías contables
- Revisión de anomalías - Corregir cuentas mal clasificadas
- Limpieza de cuentas - Desmarcar cuentas a excluir
- Procesamiento - Cálculo de métricas
- Dashboard - Visualización interactiva
- Exportar PDF - Descarga de reporte
8. Métricas Financieras
8.1 Estados Financieros Calculados
- Balance General
- Estado de Resultados
- Flujo de Efectivo (método indirecto)
8.2 Métricas por Categoría
Márgenes:
- Margen Bruto = Utilidad Bruta / Ingresos
- Margen EBITDA = EBITDA / Ingresos
- Margen Operativo = EBIT / Ingresos
- Margen Neto = Utilidad Neta / Ingresos
- Margen NOPAT = NOPAT / Ingresos
- Margen OCF = Flujo Operación / Ingresos
- Margen FCF = Flujo Libre / Ingresos
Retorno:
- ROIC = NOPAT / Capital Invertido
- ROE = Utilidad Neta / Capital
- ROA = Utilidad Neta / Activo Total
- ROCE = EBIT / Capital Empleado
Eficiencia:
- Asset Turnover = Ingresos / Activo Total
- Inventory Turnover = Costo Venta / Inventario
- Días Clientes = (Clientes / Ingresos) × 365
- Días Proveedores = (Proveedores / Costo) × 365
- Días Inventario = (Inventario / Costo) × 365
- Ciclo Conversión = Días Clientes + Días Inv. - Días Prov.
Liquidez:
- Current Ratio = Activo Circ. / Pasivo Circ.
- Quick Ratio = (Activo Circ. - Inventario) / Pasivo Circ.
- Cash Ratio = Efectivo / Pasivo Circ.
Solvencia:
- Net Debt / EBITDA = (Deuda Total - Efectivo) / EBITDA
- Interest Coverage = EBITDA / Gastos Financieros
- Debt Ratio = Deuda Total / Activo Total
Gestión:
- Revenue Growth = (Ingreso Actual - Anterior) / Anterior
- Key Score = Crecimiento Ingreso 12m + Margen EBITDA 12m
- CapEx / Revenue = CAPEX / Ingresos
- Effective Tax Rate = Impuestos / EBT
8.3 Comparativos
Para cada métrica:
- Valor actual
- Promedio 3 periodos
- Periodo anterior
- Mismo periodo año anterior
- Variación absoluta y porcentual
- Tendencia (Muy positiva → Muy negativa)
9. Dashboard
9.1 Secciones
- Mensajes Destacados (KPIs + insights)
- Resumen Mensual
- Resumen 12m
- Márgenes
- Márgenes Deep Dive
- Resultados
- Balance
- Capital de Trabajo
- Flujo de Efectivo
- Métricas
- Indicadores
- Negocios (por unidad)
- Estados Financieros
9.2 Componentes React
components/
├── charts/
│ ├── BarChart.tsx
│ ├── LineChart.tsx
│ ├── StackedBarChart.tsx
│ ├── WaterfallChart.tsx
│ └── ComboChart.tsx
├── cards/
│ ├── KPICard.tsx
│ ├── InsightCard.tsx
│ └── MetricTable.tsx
├── tables/
│ ├── FinancialStatement.tsx
│ └── MetricsGrid.tsx
└── layout/
├── DashboardNav.tsx
├── PeriodSelector.tsx
└── ExportButton.tsx
10. Panel Administrativo
10.1 Módulos
- Dashboard admin (estadísticas)
- Gestión de usuarios
- Gestión de clientes
- Catálogo de giros
- Configuración de umbrales
- Reglas de mapeo contable
- Parsers de sistemas
- Configuración general
10.2 Gestión de Empleados (Cliente)
El cliente puede:
- Agregar empleados
- Configurar permisos granulares por empleado
- Permisos disponibles: ver dashboard, ver estados financieros, exportar PDF, etc.
11. Generación de PDF
11.1 Enfoque
Usar Puppeteer/Browsershot para renderizar el dashboard de React a PDF, manteniendo el mismo diseño pixel-perfect.
11.2 Estructura (32 páginas)
- Portada
- Mensajes Destacados
- Separador "Resumen"
- Resumen Mensual
- Resumen 12m
- Márgenes
- Márgenes Deep Dive
- Separador "Resultados"
- Resultados
- Separador "Balance"
- Balance
- Capital de Trabajo
- Separador "Flujo"
- Flujo de Efectivo
- Separador "Métricas" 16-17. Métricas
- Separador "Indicadores"
- Indicadores
- Separador "Negocios" 21-22. Negocios por unidad
- Separador "Estados Financieros" 24-25. Tabla de Métricas 26-27. Estado de Resultados 28-29. Subcategorías Costo/Gasto
- Balance General
- Flujo de Efectivo
- Contraportada
12. Estructura del Proyecto
monthly-platform/
├── backend/ # Laravel
│ ├── app/
│ │ ├── Http/Controllers/
│ │ ├── Models/
│ │ ├── Services/
│ │ │ ├── Parsers/
│ │ │ │ ├── ParserInterface.php
│ │ │ │ ├── ContpaqiParser.php
│ │ │ │ ├── AspelParser.php
│ │ │ │ └── GenericoParser.php
│ │ │ ├── DetectorFormato.php
│ │ │ ├── ClasificadorCuentas.php
│ │ │ ├── CalculadorMetricas.php
│ │ │ └── GeneradorPdf.php
│ │ └── ...
│ ├── database/migrations/
│ └── routes/api.php
│
└── frontend/ # React
├── src/
│ ├── components/
│ ├── pages/
│ │ ├── Dashboard/
│ │ ├── Admin/
│ │ ├── Cliente/
│ │ └── PdfView/
│ ├── hooks/
│ ├── services/
│ └── utils/
└── ...
13. Consideraciones Futuras
- Integración directa con APIs de sistemas contables
- Generación de insights con IA
- Comparativas con benchmarks de industria (datos reales)
- App móvil para consulta de reportes
- Alertas automáticas por email cuando métricas salen de rango