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:
384
docs/plans/2025-01-31-horux-strategy-design.md
Normal file
384
docs/plans/2025-01-31-horux-strategy-design.md
Normal 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
|
||||
Reference in New Issue
Block a user