Trowel Academy
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 vencimiento
  • Relleno_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 ?? Date cuando config DueDate; si no, Date (config InvoiceDate)

#Configuración

  • InvoiceDateSource: InvoiceDate usa fecha de factura; DueDate usa ExpirationDate ?? Date
  • InvoiceAmountSource: Payments usa el desglose (Previsión = total, Consolidación = cobrado); InvoiceAmount usa 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).

⌕Esc

Escribe para buscar en toda la Academy.