Initial commit: Horux Strategy Platform

- 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>
This commit is contained in:
2026-01-31 22:24:00 -06:00
commit 4c3dc94ff2
107 changed files with 10701 additions and 0 deletions

View File

@@ -0,0 +1,384 @@
# 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
```sql
-- 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
```sql
-- 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
```sql
-- 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
```sql
-- 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
1. **Crear/seleccionar cliente** - Nombre, logo, giro, moneda
2. **Subir balanzas** - 2+ archivos PDF/Excel/CSV
3. **Detección automática** - Sistema identifica origen (CONTPAQi, etc.)
4. **Clasificación automática** - Mapeo a categorías contables
5. **Revisión de anomalías** - Corregir cuentas mal clasificadas
6. **Limpieza de cuentas** - Desmarcar cuentas a excluir
7. **Procesamiento** - Cálculo de métricas
8. **Dashboard** - Visualización interactiva
9. **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
1. Mensajes Destacados (KPIs + insights)
2. Resumen Mensual
3. Resumen 12m
4. Márgenes
5. Márgenes Deep Dive
6. Resultados
7. Balance
8. Capital de Trabajo
9. Flujo de Efectivo
10. Métricas
11. Indicadores
12. Negocios (por unidad)
13. 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
1. Dashboard admin (estadísticas)
2. Gestión de usuarios
3. Gestión de clientes
4. Catálogo de giros
5. Configuración de umbrales
6. Reglas de mapeo contable
7. Parsers de sistemas
8. 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)
1. Portada
2. Mensajes Destacados
3. Separador "Resumen"
4. Resumen Mensual
5. Resumen 12m
6. Márgenes
7. Márgenes Deep Dive
8. Separador "Resultados"
9. Resultados
10. Separador "Balance"
11. Balance
12. Capital de Trabajo
13. Separador "Flujo"
14. Flujo de Efectivo
15. Separador "Métricas"
16-17. Métricas
18. Separador "Indicadores"
19. Indicadores
20. Separador "Negocios"
21-22. Negocios por unidad
23. Separador "Estados Financieros"
24-25. Tabla de Métricas
26-27. Estado de Resultados
28-29. Subcategorías Costo/Gasto
30. Balance General
31. Flujo de Efectivo
32. 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

View File

@@ -0,0 +1,355 @@
# Horux Strategy Platform - Plan de Implementación
**Fecha:** 2025-01-31
**Documento de diseño:** 2025-01-31-horux-strategy-design.md
---
## Fases de Implementación
### FASE 1: Fundamentos (Backend)
#### 1.1 Configuración del proyecto Laravel
- [ ] Crear proyecto Laravel 11
- [ ] Configurar base de datos (MySQL/PostgreSQL)
- [ ] Instalar y configurar Laravel Sanctum
- [ ] Configurar CORS para React
#### 1.2 Migraciones de base de datos
- [ ] Tabla `users` (con campo role)
- [ ] Tabla `clientes`
- [ ] Tabla `giros`
- [ ] Tabla `permisos_empleado`
- [ ] Tabla `reportes_contables`
- [ ] Tabla `categorias_contables`
- [ ] Tabla `umbrales`
- [ ] Tabla `balanzas`
- [ ] Tabla `cuentas`
- [ ] Tabla `reglas_mapeo`
- [ ] Tabla `mapeo_cuentas`
- [ ] Tabla `reportes`
- [ ] Seeders para catálogos iniciales (giros, categorías, reglas CONTPAQi)
#### 1.3 Modelos y relaciones
- [ ] User (con roles)
- [ ] Cliente
- [ ] Giro
- [ ] PermisoEmpleado
- [ ] Umbral
- [ ] Balanza
- [ ] Cuenta
- [ ] ReglaMappeo
- [ ] Reporte
#### 1.4 Sistema de autenticación
- [ ] Login / Logout
- [ ] Registro (solo admin puede crear usuarios)
- [ ] Middleware por rol
- [ ] Policies para autorización
---
### FASE 2: Parser de Balanzas
#### 2.1 Arquitectura de parsers
- [ ] Crear `ParserInterface.php`
- [ ] Crear `DetectorFormato.php`
- [ ] Implementar `ContpaqiParser.php`
- [ ] Crear `ParserGenerico.php` (CSV/Excel)
#### 2.2 Procesamiento de archivos
- [ ] Endpoint para upload de archivos
- [ ] Extracción de texto de PDF
- [ ] Parsing de estructura CONTPAQi
- [ ] Normalización a formato interno
- [ ] Almacenamiento en tabla `cuentas`
#### 2.3 Clasificación automática
- [ ] Crear `ClasificadorCuentas.php`
- [ ] Aplicar reglas de mapeo
- [ ] Detectar anomalías
- [ ] Marcar cuentas que requieren revisión
---
### FASE 3: Motor de Cálculo
#### 3.1 Calculador de estados financieros
- [ ] Crear `CalculadorMetricas.php`
- [ ] Calcular Balance General
- [ ] Calcular Estado de Resultados
- [ ] Calcular Flujo de Efectivo (método indirecto)
#### 3.2 Cálculo de métricas
- [ ] Métricas de márgenes (7 métricas)
- [ ] Métricas de retorno (4 métricas)
- [ ] Métricas de eficiencia (6 métricas)
- [ ] Métricas de liquidez (3 métricas)
- [ ] Métricas de solvencia (3 métricas)
- [ ] Métricas de gestión (4 métricas)
#### 3.3 Comparativos
- [ ] Calcular promedio 3 periodos
- [ ] Comparar con periodo anterior
- [ ] Comparar con año anterior
- [ ] Calcular variaciones
- [ ] Determinar tendencia según umbrales
---
### FASE 4: API REST
#### 4.1 Endpoints de autenticación
- [ ] POST /api/login
- [ ] POST /api/logout
- [ ] GET /api/user
#### 4.2 Endpoints de clientes
- [ ] GET /api/clientes
- [ ] POST /api/clientes
- [ ] GET /api/clientes/{id}
- [ ] PUT /api/clientes/{id}
- [ ] DELETE /api/clientes/{id}
#### 4.3 Endpoints de balanzas
- [ ] POST /api/clientes/{id}/balanzas (upload)
- [ ] GET /api/clientes/{id}/balanzas
- [ ] GET /api/balanzas/{id}/cuentas
- [ ] PUT /api/balanzas/{id}/cuentas (actualizar exclusiones)
- [ ] PUT /api/cuentas/{id}/clasificacion (corregir anomalía)
#### 4.4 Endpoints de reportes
- [ ] POST /api/clientes/{id}/reportes (generar)
- [ ] GET /api/clientes/{id}/reportes
- [ ] GET /api/reportes/{id}
- [ ] GET /api/reportes/{id}/pdf
#### 4.5 Endpoints administrativos
- [ ] CRUD /api/admin/usuarios
- [ ] CRUD /api/admin/giros
- [ ] CRUD /api/admin/umbrales
- [ ] CRUD /api/admin/reglas-mapeo
---
### FASE 5: Frontend - Fundamentos
#### 5.1 Configuración del proyecto React
- [ ] Crear proyecto con Vite + TypeScript
- [ ] Configurar React Router
- [ ] Configurar Axios para API
- [ ] Configurar Recharts
- [ ] Configurar Tailwind CSS
#### 5.2 Autenticación
- [ ] Página de Login
- [ ] Context de autenticación
- [ ] Rutas protegidas por rol
- [ ] Interceptor para tokens
#### 5.3 Layout base
- [ ] Sidebar de navegación
- [ ] Header con usuario
- [ ] Layout para admin
- [ ] Layout para cliente
---
### FASE 6: Frontend - Flujo Principal
#### 6.1 Gestión de clientes
- [ ] Lista de clientes
- [ ] Formulario crear/editar cliente
- [ ] Subida de logo
#### 6.2 Subida de balanzas
- [ ] Componente de upload (drag & drop)
- [ ] Preview de archivos
- [ ] Indicador de progreso
- [ ] Detección de sistema origen
#### 6.3 Revisión y limpieza
- [ ] Vista de anomalías con corrección
- [ ] Lista de cuentas con checkboxes
- [ ] Filtros y búsqueda
- [ ] Guardar exclusiones
---
### FASE 7: Frontend - Dashboard
#### 7.1 Componentes de gráficas
- [ ] BarChart
- [ ] LineChart
- [ ] StackedBarChart
- [ ] WaterfallChart
- [ ] ComboChart
#### 7.2 Componentes de cards
- [ ] KPICard (con semáforo)
- [ ] InsightCard
- [ ] MetricTable
#### 7.3 Secciones del dashboard
- [ ] Mensajes Destacados
- [ ] Resumen Mensual
- [ ] Resumen 12m
- [ ] Márgenes
- [ ] Márgenes Deep Dive
- [ ] Resultados
- [ ] Balance
- [ ] Capital de Trabajo
- [ ] Flujo de Efectivo
- [ ] Métricas
- [ ] Indicadores
- [ ] Negocios
- [ ] Estados Financieros
---
### FASE 8: Generación de PDF
#### 8.1 Backend
- [ ] Instalar Browsershot
- [ ] Crear `GeneradorPdf.php`
- [ ] Endpoint GET /api/reportes/{id}/pdf
#### 8.2 Frontend
- [ ] Vista `PdfView` con todas las páginas
- [ ] Estilos específicos para impresión
- [ ] Separadores de sección
- [ ] Portada y contraportada
---
### FASE 9: Panel Administrativo
#### 9.1 Dashboard admin
- [ ] Estadísticas generales
- [ ] Alertas pendientes
#### 9.2 Gestión de usuarios
- [ ] CRUD de usuarios
- [ ] Asignación de roles
#### 9.3 Configuración
- [ ] Editor de umbrales
- [ ] Editor de reglas de mapeo
- [ ] Editor de giros
---
### FASE 10: Funcionalidades de Cliente
#### 10.1 Gestión de empleados
- [ ] Lista de empleados
- [ ] Crear empleado
- [ ] Configurar permisos
#### 10.2 Configuración
- [ ] Exclusiones guardadas
- [ ] Preferencias de reporte
---
### FASE 11: Testing y Refinamiento
#### 11.1 Testing
- [ ] Tests unitarios del motor de cálculo
- [ ] Tests de parsers
- [ ] Tests de API
- [ ] Tests E2E del flujo principal
#### 11.2 Refinamiento
- [ ] Optimización de rendimiento
- [ ] Manejo de errores
- [ ] Validaciones
- [ ] UX/UI polish
---
## Prioridad de Implementación
1. **MVP (Fases 1-4, 5-7):** Sistema funcional con CONTPAQi, dashboard básico
2. **PDF (Fase 8):** Exportación de reportes
3. **Admin (Fase 9):** Panel de configuración
4. **Multi-usuario (Fase 10):** Funcionalidades de cliente
5. **Calidad (Fase 11):** Testing y refinamiento
---
## Archivos Clave a Crear
### Backend (Laravel)
```
app/
├── Http/Controllers/
│ ├── AuthController.php
│ ├── ClienteController.php
│ ├── BalanzaController.php
│ ├── CuentaController.php
│ ├── ReporteController.php
│ └── Admin/
│ ├── UsuarioController.php
│ ├── UmbralController.php
│ └── ReglaMappeoController.php
├── Models/
│ ├── User.php
│ ├── Cliente.php
│ ├── Balanza.php
│ ├── Cuenta.php
│ ├── Reporte.php
│ └── ...
├── Services/
│ ├── Parsers/
│ │ ├── ParserInterface.php
│ │ ├── ContpaqiParser.php
│ │ └── DetectorFormato.php
│ ├── ClasificadorCuentas.php
│ ├── CalculadorMetricas.php
│ └── GeneradorPdf.php
└── ...
```
### Frontend (React)
```
src/
├── components/
│ ├── charts/
│ │ ├── BarChart.tsx
│ │ ├── LineChart.tsx
│ │ ├── StackedBarChart.tsx
│ │ ├── WaterfallChart.tsx
│ │ └── ComboChart.tsx
│ ├── cards/
│ │ ├── KPICard.tsx
│ │ └── InsightCard.tsx
│ ├── forms/
│ │ ├── ClienteForm.tsx
│ │ └── UploadBalanza.tsx
│ └── layout/
│ ├── Sidebar.tsx
│ └── Header.tsx
├── pages/
│ ├── Login.tsx
│ ├── Dashboard/
│ │ ├── index.tsx
│ │ ├── Resumen.tsx
│ │ ├── Margenes.tsx
│ │ └── ...
│ ├── Admin/
│ │ ├── Usuarios.tsx
│ │ └── Umbrales.tsx
│ └── PdfView/
│ └── index.tsx
├── hooks/
│ ├── useAuth.ts
│ ├── useCliente.ts
│ └── useReporte.ts
├── services/
│ └── api.ts
└── types/
└── index.ts
```