- 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>
242 lines
9.2 KiB
Markdown
242 lines
9.2 KiB
Markdown
# 6. Base de Datos
|
|
|
|
## Diagrama Entidad-Relación
|
|
|
|
```
|
|
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
│ giros │ │ clientes │ │ users │
|
|
├─────────────┤ ├─────────────┤ ├─────────────┤
|
|
│ id │◄──────┤ giro_id │ │ id │
|
|
│ nombre │ │ id │◄──────┤ cliente_id │
|
|
│ activo │ │ nombre_emp │ │ nombre │
|
|
└─────────────┘ │ logo │ │ email │
|
|
│ moneda │ │ password │
|
|
│ config │ │ role │
|
|
└──────┬──────┘ └─────────────┘
|
|
│
|
|
┌──────────────┼──────────────┐
|
|
▼ ▼ ▼
|
|
┌─────────────┐┌─────────────┐┌─────────────┐
|
|
│ balanzas ││ reportes ││mapeo_cuentas│
|
|
├─────────────┤├─────────────┤├─────────────┤
|
|
│ id ││ id ││ id │
|
|
│ cliente_id ││ cliente_id ││ cliente_id │
|
|
│ periodo_ini ││ nombre ││ codigo_pat │
|
|
│ periodo_fin ││ periodo_tipo││ categoria_id│
|
|
│ sistema_orig││ data_calc │└─────────────┘
|
|
│ status ││ pdf_path │
|
|
└──────┬──────┘└─────────────┘
|
|
│
|
|
▼
|
|
┌─────────────┐
|
|
│ cuentas │
|
|
├─────────────┤
|
|
│ id │
|
|
│ balanza_id │
|
|
│ codigo │
|
|
│ nombre │
|
|
│ nivel │
|
|
│ saldos... │
|
|
│ excluida │
|
|
│ categoria_id│
|
|
└─────────────┘
|
|
|
|
┌─────────────────┐ ┌─────────────────┐
|
|
│reportes_contable│ │categorias_contab│
|
|
├─────────────────┤ ├─────────────────┤
|
|
│ id │◄────┤ reporte_cont_id │
|
|
│ nombre │ │ id │
|
|
└─────────────────┘ │ nombre │
|
|
│ orden │
|
|
└────────┬────────┘
|
|
│
|
|
┌────────┴────────┐
|
|
▼ ▼
|
|
┌─────────────┐ ┌─────────────┐
|
|
│reglas_mapeo │ │ umbrales │
|
|
├─────────────┤ ├─────────────┤
|
|
│ sistema_orig│ │ metrica │
|
|
│ rango_ini │ │ muy_positivo│
|
|
│ rango_fin │ │ positivo │
|
|
│ categoria_id│ │ neutral │
|
|
│ prioridad │ │ negativo │
|
|
└─────────────┘ │ muy_negativo│
|
|
│ giro_id │
|
|
└─────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Tablas
|
|
|
|
### users
|
|
Usuarios del sistema.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| nombre | varchar(255) | Nombre completo |
|
|
| email | varchar(255) | Email único |
|
|
| password | varchar(255) | Hash de contraseña |
|
|
| role | enum | admin, analista, cliente, empleado |
|
|
| cliente_id | bigint | FK a clientes (nullable) |
|
|
|
|
### clientes
|
|
Empresas registradas.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| nombre_empresa | varchar(255) | Nombre de la empresa |
|
|
| logo | varchar(255) | Path al logo |
|
|
| giro_id | bigint | FK a giros |
|
|
| moneda | varchar(3) | MXN, USD, EUR |
|
|
| configuracion | json | Configuración adicional |
|
|
|
|
### giros
|
|
Catálogo de giros de negocio.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| nombre | varchar(255) | Nombre del giro |
|
|
| activo | boolean | Estado |
|
|
|
|
### balanzas
|
|
Archivos de balanza subidos.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| cliente_id | bigint | FK a clientes |
|
|
| periodo_inicio | date | Inicio del periodo |
|
|
| periodo_fin | date | Fin del periodo |
|
|
| sistema_origen | varchar(50) | contpaqi, aspel, etc. |
|
|
| archivo_original | varchar(255) | Path al archivo |
|
|
| status | enum | pendiente, procesando, completado, error |
|
|
| error_mensaje | text | Mensaje de error si aplica |
|
|
|
|
### cuentas
|
|
Cuentas extraídas de balanzas.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| balanza_id | bigint | FK a balanzas |
|
|
| codigo | varchar(20) | Código de cuenta (ej: 001-100-000) |
|
|
| nombre | varchar(255) | Nombre de la cuenta |
|
|
| nivel | int | Nivel jerárquico (1, 2, 3) |
|
|
| reporte_contable_id | bigint | FK a reportes_contables |
|
|
| categoria_contable_id | bigint | FK a categorias_contables |
|
|
| cuenta_padre_id | bigint | FK a cuentas (self-reference) |
|
|
| saldo_inicial_deudor | decimal(18,2) | |
|
|
| saldo_inicial_acreedor | decimal(18,2) | |
|
|
| cargos | decimal(18,2) | |
|
|
| abonos | decimal(18,2) | |
|
|
| saldo_final_deudor | decimal(18,2) | |
|
|
| saldo_final_acreedor | decimal(18,2) | |
|
|
| excluida | boolean | Excluida del cálculo |
|
|
| es_cuenta_padre | boolean | Es cuenta padre |
|
|
| requiere_revision | boolean | Necesita revisión manual |
|
|
| nota_revision | text | Nota sobre la anomalía |
|
|
|
|
### reportes_contables
|
|
Tipos de reporte (Balance, Estado de Resultados).
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| nombre | varchar(255) | "Balance General", "Estado de Resultados" |
|
|
|
|
### categorias_contables
|
|
Categorías dentro de cada reporte.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| reporte_contable_id | bigint | FK a reportes_contables |
|
|
| nombre | varchar(255) | Nombre de la categoría |
|
|
| orden | int | Orden de aparición |
|
|
|
|
**Categorías de Balance General:**
|
|
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
|
|
|
|
**Categorías de Estado de Resultados:**
|
|
1. Ingresos
|
|
2. Costo de Venta
|
|
3. Gastos Operativos
|
|
4. Otros Gastos
|
|
5. Gastos Financieros
|
|
|
|
### reglas_mapeo
|
|
Reglas para clasificar cuentas automáticamente.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| sistema_origen | varchar(50) | contpaqi, aspel, etc. |
|
|
| cuenta_padre_codigo | varchar(20) | Código de cuenta padre |
|
|
| rango_inicio | varchar(20) | Inicio del rango de códigos |
|
|
| rango_fin | varchar(20) | Fin del rango |
|
|
| patron_regex | varchar(255) | Patrón regex alternativo |
|
|
| reporte_contable_id | bigint | FK |
|
|
| categoria_contable_id | bigint | FK |
|
|
| prioridad | int | Mayor = se evalúa primero |
|
|
| activo | boolean | Regla activa |
|
|
|
|
### umbrales
|
|
Umbrales para semáforos de métricas.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| metrica | varchar(100) | Nombre de la métrica |
|
|
| muy_positivo | decimal(10,4) | Umbral muy positivo |
|
|
| positivo | decimal(10,4) | Umbral positivo |
|
|
| neutral | decimal(10,4) | Umbral neutral |
|
|
| negativo | decimal(10,4) | Umbral negativo |
|
|
| muy_negativo | decimal(10,4) | Umbral muy negativo |
|
|
| giro_id | bigint | FK a giros (nullable = general) |
|
|
|
|
### reportes
|
|
Reportes generados.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | bigint | PK |
|
|
| cliente_id | bigint | FK a clientes |
|
|
| nombre | varchar(255) | Nombre del reporte |
|
|
| periodo_tipo | enum | mensual, trimestral, anual |
|
|
| periodo_inicio | date | |
|
|
| periodo_fin | date | |
|
|
| fecha_generacion | timestamp | |
|
|
| data_calculada | json | Métricas y estados financieros |
|
|
| pdf_path | varchar(255) | Path al PDF generado |
|
|
| status | enum | pendiente, procesando, completado, error |
|
|
|
|
### reporte_balanza
|
|
Tabla pivote reporte-balanza.
|
|
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| reporte_id | bigint | FK a reportes |
|
|
| balanza_id | bigint | FK a balanzas |
|
|
|
|
---
|
|
|
|
## Seeders
|
|
|
|
Los seeders iniciales crean:
|
|
|
|
1. **GirosSeeder** - 24 giros de negocio
|
|
2. **ReportesContablesSeeder** - 2 reportes + 12 categorías
|
|
3. **ReglasMapeeoContpaqiSeeder** - 12 reglas para CONTPAQi
|
|
4. **UmbralesSeeder** - 24 umbrales por defecto
|
|
5. **AdminUserSeeder** - Usuario admin inicial
|