# Descripción General

El proceso de **Antigüedad de Saldos** (`Aging`) analiza las facturas de venta y de compra pendientes de cobro o pago, junto con los cobros y pagos no aplicados, clasificándolos en rangos de vencimiento (corriente, 1-30, 31-60, 61-90, 91-120, 120+ días) a una fecha de corte específica. El resultado se registra en la tabla temporal `T_Aging` a través del modelo `MAging`.

> **Cálculo Histórico y Conversión de Monedas:** Este proceso destaca por su capacidad de generar reportes de antigüedad retroactivos a cualquier fecha histórica (mediante la vista `RV_OpenItemToDate`) y convertir dinámicamente todos los montos a una moneda de presentación común utilizando las tasas de cambio contables del sistema.

## Flujo de Ejecución Técnico

El proceso sigue las siguientes etapas durante su ejecución en el servidor:

1. **Cálculo del Desfase de Fecha de Corte:** Carga la fecha de corte parametrizada (`StatementDate`). Si está vacía, asume la fecha actual del sistema. Calcula la diferencia en días entre hoy y la fecha de corte (`m_statementOffset`) para ajustar dinámicamente los días de vencimiento (`DaysDue`) obtenidos de la base de datos.
2. **Selección del Origen de Datos (Actual vs. Histórico):**
    - **Modo de Saldos Actuales (DateAcct = Falso):** Consulta la vista estándar de partidas abiertas del sistema (`RV_OpenItem`), reflejando los saldos pendientes a la fecha actual del sistema.
    - **Modo Histórico (DateAcct = Verdadero):** Consulta la vista histórica de partidas abiertas (`RV_OpenItemToDate`) y calcula los importes pagados y abiertos a la fecha de corte del reporte mediante las funciones nativas de base de datos `invoicePaidToDate(...)` y `invoiceOpenToDate(...)`.
3. **Conversión de Moneda Opcional:** Si el usuario especifica una moneda destino en el parámetro `ConvertAmountsInCurrency_ID`, el proceso encapsula las columnas de importes contables en la consulta SQL dentro de la función `currencyConvert(...)` utilizando la moneda de origen de la transacción, el ID de moneda destino, la fecha de contabilidad, el tipo de conversión y los datos de cliente/organización.
4. **Agregación e Inserción en T\_Aging (Modelo MAging):**
    - Ejecuta la consulta generada aplicando filtros por Organización, Grupo de Socios de Negocio o Tercero específico.
    - Para cada fila devuelta, ajusta los días de retraso del pago sumando el desfase: `DaysDue + m_statementOffset`.
    - Si el parámetro **Listar Facturas** (`IsListInvoices`) está activo, genera registros desglosados detallando la factura, la fecha de facturación, el plan de pagos (C\_InvoicePaySchedule\_ID), la actividad, el proyecto y la campaña. Si no está marcado, agrupa la información del saldo consolidado por Socio de Negocio.
    - Inserta los cobros y pagos no aplicados (*cobros a cuenta* o anticipos donde `C_Payment_ID > 0`) como saldos abiertos negativos en el reporte para disminuir el saldo vencido general de forma correcta.
    - Llama a `MAging.add(...)` para mapear los montos en los rangos de mora correspondientes y los persiste en la tabla temporal de base de datos `T_Aging`.

## Estructura de la Tabla Temporal T\_Aging

El proceso interactúa directamente con la tabla de base de datos intermedia `T_Aging`. Los campos y cubetas clave utilizados son:

- `AD_PInstance_ID`: Código numérico único de ejecución de proceso que garantiza el aislamiento de consultas concurrentes.
- `StatementDate`: Fecha de corte a la que fue calculado el análisis contable.
- `C_BPartner_ID`: Identificador del socio de negocio asociado al saldo contable.
- `C_Currency_ID`: Moneda de registro de los importes contables resultantes.
- `DueAmt`: Monto total del saldo abierto contable del tercero o documento.
- `PastDueAmt0` a `PastDueAmt5`: Distribución de montos contables abiertos en las diferentes cubetas de mora contable (por ejemplo, corriente, 1-30, 31-60, 61-90, 91-120 y más de 120 días).

<p class="callout info">**Nota:** Los cobros y pagos que han sido registrados en cuentas pero no han sido aplicados a facturas (cobros y pagos a cuenta) son clasificados de manera automática en la columna de saldo contable *corriente* (PastDueAmt0) para compensar y reflejar el valor neto real de deuda del tercero.</p>