Diagrama ingresos

graph TB %% === INTERFAZ DE USUARIO === subgraph "🖥️ INTERFAZ DE USUARIO" UI["**Vista Ingresos** 📊 Lista paginada 🔍 Búsqueda 📈 Gráficas"] FORM["**Formulario** 📝 Crear/Editar 🏷️ Productos múltiples 💰 Cálculos automáticos"] MODAL["**Modales** 📄 Comprobantes 📋 Detalles 🗑️ Confirmaciones"] end

%% === CONTROLADOR PRINCIPAL ===
subgraph "🎮 CONTROLADOR"
    CTRL["`**clientesIngresos**
    🏗️ Inyección de Servicios
    📊 Index (Cache optimizado)
    ⚡ API Endpoints`"]
end

%% === SERVICIOS DE NEGOCIO ===
subgraph "⚙️ SERVICIOS DE NEGOCIO"
    CREATE_SRV["`**CrearIngresoService**
    ✅ Validación completa
    🏷️ Manejo de productos
    📦 Actualización inventario
    💰 Registro disponibilidad
    📊 Auditoría automática`"]

    UPDATE_SRV["`**UpdateIngresosService**
    🔄 Actualización inteligente
    ➕ Nuevos productos
    ❌ Eliminación productos
    💰 Recálculo disponibilidad`"]

    DELETE_SRV["`**EliminarIngresoService**
    🗑️ Eliminación segura
    ↩️ Reversión inventario
    💰 Ajuste disponibilidad
    📊 Auditoría eliminación`"]

    AUDIT_SRV["`**AuditoriaService**
    📝 Registro completo
    👤 Usuario y timestamp
    🔍 Trazabilidad total`"]

    SUPPORT_SRV["`**SoporteService**
    📎 Gestión archivos
    🔒 Validación tipos
    💾 Almacenamiento seguro`"]
end

%% === MODELOS DE DATOS ===
subgraph "🗃️ MODELOS DE DATOS"
    INGRESO_MODEL["`**Ingresos**
    🆔 Consecutivo único
    📅 Fecha y tipo
    💰 Montos y cálculos
    👤 Usuario asociado`"]

    PRODUCTO_MODEL["`**Productos**
    🏷️ Código único
    💰 Precios base
    📊 Información detallada`"]

    INVENTARIO_MODEL["`**Inventario**
    📦 Stock actual
    ➡️ Entradas/Salidas
    📊 Control FIFO`"]

    LOTE_MODEL["`**Lotes**
    🏷️ Consecutivo lote
    📅 Fecha creación
    💰 Precio base
    📦 Cantidad disponible`"]

    DISPONIBILIDAD_MODEL["`**DisponibilidadDinero**
    💰 Movimientos dinero
    📅 Fecha registro
    🏷️ Referencia ingreso
    💳 Medio de pago`"]

    CUENTA_MODEL["`**CuentaPorPagar**
    📊 Total venta
    💰 Abonos realizados
    ⏰ Fecha vencimiento
    📈 Estado cuenta`"]

    HISTORIAL_MODEL["`**HistorialInventario**
    📊 Movimientos stock
    👤 Responsable cambio
    📅 Fecha modificación
    📝 Observaciones`"]

    SOPORTE_MODEL["`**Soporte**
    📎 Archivos adjuntos
    🔒 Validaciones
    📋 Descripción`"]
end

%% === FLUJOS PRINCIPALES ===

%% Flujo de Creación
UI -->|"📝 Crear Ingreso"| FORM
FORM -->|"📤 Submit Form"| CTRL
CTRL -->|"🏗️ Procesar"| CREATE_SRV

CREATE_SRV -->|"💾 Crear registro"| INGRESO_MODEL
CREATE_SRV -->|"📦 Actualizar stock"| INVENTARIO_MODEL
CREATE_SRV -->|"🏷️ Afectar lotes"| LOTE_MODEL
CREATE_SRV -->|"💰 Registrar dinero"| DISPONIBILIDAD_MODEL
CREATE_SRV -->|"📊 Crear cuenta"| CUENTA_MODEL
CREATE_SRV -->|"📝 Registrar cambio"| HISTORIAL_MODEL
CREATE_SRV -->|"📊 Auditar"| AUDIT_SRV
CREATE_SRV -->|"📎 Procesar archivo"| SUPPORT_SRV

%% Flujo de Actualización
CTRL -->|"🔄 Actualizar"| UPDATE_SRV
UPDATE_SRV -->|"🗑️ Eliminar productos"| DELETE_SRV
UPDATE_SRV -->|"💰 Recalcular"| DISPONIBILIDAD_MODEL
UPDATE_SRV -->|"📊 Actualizar cuenta"| CUENTA_MODEL

%% Flujo de Eliminación
CTRL -->|"🗑️ Eliminar"| DELETE_SRV
DELETE_SRV -->|"↩️ Restaurar stock"| INVENTARIO_MODEL
DELETE_SRV -->|"🏷️ Devolver lotes"| LOTE_MODEL
DELETE_SRV -->|"💰 Ajustar dinero"| DISPONIBILIDAD_MODEL

%% Relaciones entre modelos
INGRESO_MODEL -.->|"🏷️ Código"| PRODUCTO_MODEL
INVENTARIO_MODEL -.->|"📦 Stock"| LOTE_MODEL
CUENTA_MODEL -.->|"🔗 Referencia"| INGRESO_MODEL
HISTORIAL_MODEL -.->|"📊 Seguimiento"| INVENTARIO_MODEL
SOPORTE_MODEL -.->|"📎 Evidencia"| INGRESO_MODEL

%% Flujo de consulta
UI -->|"📊 Ver lista"| CTRL
CTRL -->|"💾 Cache + Query"| INGRESO_MODEL
CTRL -->|"📈 Datos gráficas"| UI

%% APIs especializadas
CTRL -->|"📊 API Período"| UI
CTRL -->|"📈 API Concepto"| UI
CTRL -->|"🔍 API Búsqueda"| UI

%% === CARACTERÍSTICAS ESPECIALES ===
subgraph "🔥 CARACTERÍSTICAS AVANZADAS"
    CACHE["`**Sistema Cache**
    ⚡ Consultas optimizadas
    🕐 TTL inteligente
    🔄 Invalidación automática`"]

    TRANSACTION["`**Transacciones**
    🔒 ACID completo
    ↩️ Rollback automático
    🛡️ Consistencia datos`"]

    VALIDATION["`**Validaciones**
    ✅ Datos entrada
    🔍 Reglas negocio
    ⚠️ Manejo errores`"]

    OPTIMIZATION["`**Optimizaciones**
    📊 Consultas N+1 eliminadas
    🚀 Eager loading
    💾 Pre-carga datos`"]
end

%% Conexiones características
CTRL -.->|"⚡ Usa"| CACHE
CREATE_SRV -.->|"🔒 Usa"| TRANSACTION
UPDATE_SRV -.->|"✅ Usa"| VALIDATION
DELETE_SRV -.->|"🚀 Usa"| OPTIMIZATION

%% === TIPOS DE INGRESOS ===
subgraph "💰 TIPOS DE INGRESOS"
    CONTADO["`**Venta Contado**
    💰 Pago inmediato
    📦 Afecta inventario
    💸 Registro disponibilidad`"]

    CREDITO["`**Venta Crédito**
    📊 Crea cuenta por pagar
    💰 Abono inicial opcional
    ⏰ Fecha vencimiento`"]

    OTROS["`**Otros Ingresos**
    💰 No afecta inventario
    📊 Registro directo
    💸 Disponibilidad inmediata`"]
end

CREATE_SRV -.->|"💰 Procesa"| CONTADO
CREATE_SRV -.->|"📊 Procesa"| CREDITO
CREATE_SRV -.->|"💸 Procesa"| OTROS

%% Estilos
classDef serviceClass fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef modelClass fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef uiClass fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef featureClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef typeClass fill:#fce4ec,stroke:#880e4f,stroke-width:2px

class CREATE_SRV,UPDATE_SRV,DELETE_SRV,AUDIT_SRV,SUPPORT_SRV serviceClass
class INGRESO_MODEL,PRODUCTO_MODEL,INVENTARIO_MODEL,LOTE_MODEL,DISPONIBILIDAD_MODEL,CUENTA_MODEL,HISTORIAL_MODEL,SOPORTE_MODEL modelClass
class UI,FORM,MODAL uiClass
class CACHE,TRANSACTION,VALIDATION,OPTIMIZATION featureClass
class CONTADO,CREDITO,OTROS typeClass