# Generador de Notas Contables

# Descripción General

El proceso **Generador de Diarios Contables** (`GLJournalGenerate`) automatiza la creación de asientos de diario en PrimApp / iDempiere a partir de los saldos de transacciones acumulados en el diario real (tabla `Fact_Acct`). Este proceso aplica multiplicadores, reglas de agrupamiento de dimensiones contables y factores de redondeo configurados en una plantilla predefinida.

> **Automatización de Cierres Contables:** Este proceso es clave para realizar provisiones contables automáticas, distribución de costos indirectos, reclasificaciones de saldos de fin de mes o amortizaciones sin necesidad de cálculos manuales externos.

## Flujo de Ejecución Técnico

Cuando el proceso se ejecuta, realiza el siguiente flujo de procesamiento en el servidor de aplicaciones:

1. **Carga de la Plantilla Contable:** Instancia la plantilla de configuración del generador (`QSS_JournalGenerator`) utilizando el ID del registro activo.
2. **Definición del Agrupamiento (Dimensiones):** Determina qué dimensiones contables se heredarán en las líneas del diario contable de destino: 
    - Si `CopyAllDimensions` está marcado en la línea del generador, el proceso agrupa y copia dinámicamente todos los elementos del esquema contable (Tercero, Producto, Proyecto, Actividad, Campaña, etc.).
    - Si no está marcado, solo agrupa y copia el Tercero (según la regla `BPDimensionType`) y/o el Producto (si `SameProduct` está activo).
3. **Extracción y Sumarización:** Ejecuta consultas SQL dinámicas sobre `Fact_Acct` agrupadas por las dimensiones resultantes. Filtra las transacciones contables reales (`PostingType = 'A'`) en base a las cuentas contables del árbol definidas en las Fuentes del Generador (`QSS_JournalGeneratorSource`).
4. **Cálculo de Multiplicadores y Redondeo:**
    - Para cada fuente de origen, multiplica el saldo neto (`AmtAcctDr - AmtAcctCr`) por el multiplicador de la fuente (`AmtMultiplier`) y aplica su respectivo redondeo.
    - Suma los montos resultantes y, a nivel de línea de destino, aplica el multiplicador de la línea y el factor de redondeo de destino (`RoundFactor`).
5. **Resolución Dinámica de Terceros:** Si el tipo de dimensión de tercero es `Column`, el proceso inspecciona el registro referenciado en la base de datos (por ejemplo, obteniendo el socio de negocio asignado a un proyecto o activo) para mapearlo dinámicamente como el tercero de la línea del diario.
6. **Balanceo Contable:** Calcula la diferencia neta entre los débitos y créditos resultantes de todo el lote. Si existe una diferencia menor debido a redondeos o porcentajes de distribución, genera automáticamente una línea de ajuste utilizando la cuenta de Ajuste Deudor (`AdjustDR`) o Ajuste Acreedor (`AdjustCR`) definida en el generador.
7. **Generación de Asiento:**
    - Si **Es Simulación** está activo (`IsSimulation = true`), el proceso imprime en pantalla y en la bitácora el detalle de las líneas calculadas sin modificar los datos del sistema.
    - Si no es simulación, crea físicamente la cabecera del diario (`GL_Journal`), genera las combinaciones contables correspondientes (`C_ValidCombination`) para cada línea (`GL_JournalLine`) y ejecuta la acción de documento parametrizada (por ejemplo, Completar el Asiento).

## Estructura de Plantillas de Configuración

El comportamiento contable y el direccionamiento del proceso se gobiernan a través de tres niveles de registros:

- **Generador de Diarios (Cabecera):** Define el Esquema Contable (`C_AcctSchema_ID`), la Organización, el Tipo de Documento, la Categoría de Diario, el Tipo de Registro (Generalmente Real 'A') y las Cuentas de Ajuste por Redondeo.
- **Línea de Generación:** Define las cuentas contables definitivas en las que se registrarán el Débito (`C_ElementValueDR_ID`) y/o el Crédito (`C_ElementValueCR_ID`), así como el tipo de agrupamiento de dimensiones (como el Tipo de Tercero: *Fijo, Mismo Origen, Columna Externa*) y sus multiplicadores finales.
- **Fuente del Generador:** Define qué cuenta contable o árbol contable de origen (`C_ElementValue_ID`) en `Fact_Acct` proporcionará la información de saldo financiero, y qué porcentaje o multiplicador individual se le aplicará.

# Parámetros

Al ejecutar el proceso **Generador de Diarios Contables** desde la interfaz de PrimApp / iDempiere, se presentan los siguientes parámetros de configuración:

<table id="bkmrk-par%C3%A1metro-nombre-en-" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Parámetro</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Nombre en BD</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Descripción / Uso</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Rango de Fechas**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`ProcessingDate`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Rango de fechas (Desde/Hasta) para filtrar y acumular los montos del diario origen (Fact\_Acct).</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Fecha de Contabilidad**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`DateAcct`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Fecha contable del asiento de diario generado. Determina el período contable destino.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Es Simulación**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`IsSimulation`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Si se marca como "Sí" (Y), el generador solo muestra una previsualización de los montos resultantes en el registro de log sin crear el asiento real.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Acción de Documento**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`DocAction`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">La acción de documento contable que se aplicará automáticamente tras crear el diario (Completar, Preparar, etc.).</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Nº del Documento**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`DocumentNo`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Número de documento personalizado opcional para el diario generado. Si está vacío, usa la secuencia predeterminada del tipo de documento.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Socio de Negocio**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`C_BPartner_ID`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Filtro opcional para extraer los saldos de origen contable pertenecientes a un tercero específico.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Producto**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`M_Product_ID`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Filtro opcional para extraer los saldos de origen contable pertenecientes a un producto específico.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Jerarquía de Organización**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`PA_Hierarchy_ID`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Estructura organizativa para consolidar movimientos contables de múltiples subsidiarias o sucursales.</td></tr></tbody></table>

<p class="callout warning">**Importante:** El proceso requiere que el diario generado contenga al menos una línea válida y sea posible balancearlo. Asegúrese de que las cuentas de ajuste contable de débitos y créditos estén debidamente configuradas en la cabecera del Generador de Diarios para evitar fallas en ejecuciones definitivas.</p>