Acciones
#Page 1
#Modelo: Caja Real vs. Previsión
El módulo de cashflow prioriza el flujo de caja real frente al devengo. La visualización permite identificar desviaciones entre lo facturado y lo que realmente se ha cobrado o pagado.
#Principios de diseño
- Caja real primero: Total Cobrado/Pagado (consolidado) representa los movimientos reales.
- Previsión como objetivo: Total Facturado (previsión) representa el importe esperado; la brecha frente a lo real indica deuda o impago.
- Eje temporal: Siempre agrupado por fecha de vencimiento, no por fecha de factura.
- Conciencia de deuda: El orden por riesgo de caja (morosidad/impago) coloca primero las empresas de mayor riesgo.
#Gráfica
#Visión general
La gráfica muestra ingresos (entradas) y gastos (salidas) con dos métricas visuales:
- Altura de la barra (objetivo): Previsión / valor contractual total — según fecha de vencimiento
- Relleno de la barra (actual): Consolidado / flujo de caja real recibido — según fecha de pago
#Métricas
#Previsión (Forecast)
- Definición: Valor contractual total de la factura (Base + IVA)
- Alcance: TODAS las facturas del período seleccionado (sin filtrar por estado pagado/pendiente)
- Uso en la barra: Determina la altura completa de la barra en el mes en que vence la factura
- Eje temporal: Fecha efectiva (ExpirationDate ?? Date cuando config DueDate; si no, Date)
#Consolidado (Consolidation)
- Definición: Flujo de caja real recibido (suma de pagos)
- Uso en la barra: Cada pago aparece en el mes en que se recibió (PaymentDate)
- Eje temporal: PaymentDate (fecha real de ejecución) — ignora la config de fecha de factura
#Reglas visuales
Altura_Barra=invoice.total(previsión) en el mes de vencimientoRelleno_Barra= pagos recibidos ese mes (consolidación por PaymentDate)- Si una factura tiene pagos en febrero y marzo: febrero muestra una barra de 1100; marzo muestra altura 2200 con relleno 300 (brecha = pendiente)
#Reglas técnicas (SQL / Lógica)
- Previsión: Facturas con
effective_date BETWEEN start AND end, importe = total - Consolidación: Pagos con
PaymentDate BETWEEN start AND end, importe = importe del pago (distribuido por proyecto) - Fecha efectiva:
ExpirationDate ?? Datecuando config DueDate; si no,Date(config InvoiceDate)
#Configuración
- InvoiceDateSource:
InvoiceDateusa fecha de factura;DueDateusaExpirationDate ?? Date - InvoiceAmountSource:
Paymentsusa el desglose (Previsión = total, Consolidación = cobrado);InvoiceAmountusa solo Consolidado con total, sin previsión
#Entradas vs Salidas
- Entradas (facturas de venta): Misma lógica — Previsión por fecha de vencimiento, Consolidación por PaymentDate.
- Salidas (facturas de gasto/empresa): Misma lógica — Previsión por fecha efectiva (total), Consolidación por PaymentDate (cada pago en el mes pagado).
#Tabla
#Estructura
- Jerarquía (sin filtros): Empresa (nivel 0) → Proyectos (nivel 1, expandible, oculto por defecto).
- Jerarquía con filtro de empresa: Igual que sin filtros (Empresa → Proyecto); solo cambia el conjunto de datos.
- Jerarquía con filtro de proyecto (o empresa + proyecto): Solo filas de empresa con importes agregados para ese alcance; no se listan proyectos como hijos.
- Celda dual: Cada mes muestra:
- Arriba (negrita): Importe real (Cobrado/Pagado).
- Abajo (gris): Total Facturado.
- Indicador de deuda: Punto rojo cuando Real < Facturado en un mes pasado (vencido).
- Valores cero: Se muestran como '-' en lugar de '0 €'.
#Resumen ejecutivo (cabecera)
- Flujo de caja neto: SUM(Cobros reales) − SUM(Pagos reales) por mes.
- Saldo de apertura: Saldo acumulado arrastrado del mes anterior dentro del rango seleccionado.
#Ordenación
- Empresas ordenadas por Riesgo de caja (mayor deuda vencida arriba): primero las de mayor deuda vencida.
#Filtros de alcance
Parámetros opcionales en GetCashFlowData y GetCashFlowMonthDetail:
| Parámetro | Efecto |
|---|---|
CompanyId |
Filtra registros por empresa (cliente en ventas, proveedor en gastos; también presupuesto–planificación por ClientCompanyId / SupplierCompanyId). |
ProjectId |
Filtra por proyecto. Activa companyLevelOnly en BuildMergedInvoiceCashflowDataHierarchical. |
Nóminas: excluidas si ProjectId o CompanyId tienen valor (excludesPayroll).
Detalle mensual: con ProjectId → BuildProjectScopedMonthDetailAsync; con CompanyId (sin proyecto) → BuildCompanyScopedMonthDetailAsync; si hay ambos, prevalece el alcance por proyecto.
Ver Filtros de alcance (guía de usuario).
