# Generador Jerárquico de Líneas (DFS)

# Descripción General

El proceso **Generador Jerárquico de Líneas (DFS)** (`DFSGenerateLines`) automatiza la creación de la estructura de líneas de reporte (`PA_ReportLine`) y sus correspondientes orígenes (`PA_ReportSource`) en iDempiere/Lirion. Para lograr esto, realiza un recorrido en profundidad (Depth-First Search - DFS) sobre el árbol del catálogo de cuentas, partiendo de un nodo raíz seleccionado.

> **Propósito del Generador DFS:** Evitar la configuración manual de docenas o cientos de líneas contables al estructurar reportes financieros. Al leer jerarquías existentes del catálogo de cuentas, recrea la estructura exacta de manera jerárquica con sus sumatorias automáticas.

## Flujo de Ejecución Técnico

Cuando el proceso se ejecuta, realiza los siguientes pasos en la base de datos y el servidor de aplicaciones:

1. **Secuenciación Inicial:** Identifica el último número de secuencia (`SeqNo`) registrado en el conjunto de líneas activo (`PA_ReportLineSet_ID`) para continuar la numeración incremental desde allí (con saltos de 10 en 10).
2. **Carga del Árbol de Cuentas:** Carga la definición del elemento contable (`C_Element_ID`) y recupera la estructura del árbol jerárquico asociado.
3. **Búsqueda del Nodo Raíz:** Localiza el nodo inicial (`C_ElementValue_ID`) con parent\_id = 0 en el árbol configurado para iniciar el recorrido desde esa posición específica del catálogo.
4. **Recorrido Recursivo DFS:** Recorre recursivamente cada nodo del subárbol: 
    - **Filtro de Resumen (IsSummary):** Valida si el nodo actual debe ser procesado de acuerdo al parámetro configurado.
    - **Creación de Línea:** Si corresponde procesarlo, crea un registro en la tabla `PA_ReportLine` con el nombre y descripción del elemento.
    - **Asignación de Origen (Leaf Nodes):** Si el nodo es una hoja (no tiene hijos), crea un registro en `PA_ReportSource` vinculándolo directamente al elemento contable (cuenta de detalle).
    - **Generación de Totales:** Si el nodo es un nodo de resumen (tiene hijos), tras procesar recursivamente a todos sus descendientes, genera automáticamente una línea de totalización con la descripción "Total \[Código Cuenta\]" y vincula su origen.

## Tablas de iDempiere Utilizadas

El proceso interactúa y modifica las siguientes tablas del diccionario de datos de iDempiere:

- `AD_TreeNode`: Define la relación jerárquica (Padre/Hijo) entre los elementos del árbol contable.
- `C_ElementValue`: Almacena las cuentas contables individuales, su código, nombre y tipo (detalle o resumen).
- `PA_ReportLineSet`: Cabecera del conjunto de líneas activo sobre el cual se ejecuta el proceso (el ID del registro actual de la ventana).
- `PA_ReportLine`: Registros de líneas de reporte que se insertan de forma secuencial durante el recorrido DFS.
- `PA_ReportSource`: Orígenes de datos que asocian cada línea de reporte con su cuenta correspondiente del catálogo.

<p class="callout warning">**Importante:** Este proceso realiza inserciones directas sobre la estructura activa de `PA_ReportLineSet`. Se recomienda realizar una copia de seguridad o ejecutar en un conjunto de prueba, ya que no elimina líneas existentes antes de la inserción y podría duplicar secuencias si se ejecuta múltiples veces en el mismo registro.</p>

# Parámetros

Al ejecutar el proceso **Generador Jerárquico de Líneas (DFS)** en Lirion o 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;">**Elemento**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`C_Element_ID`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Elemento de Cuenta  
<small>*El elemento cuenta identifica únicamente una cuenta. El conjunto es conocido comúnmente como catálogo de cuentas*</small></td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Elemento Contable**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`C_ElementValue_ID`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Elemento Contable  
<small>*Elemento Contable puede ser cuentas naturales or valores definidos por el usuario.*</small></td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Solo Entidades Acumuladas**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`IsSummary`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Solo Entidades Acumuladas</td></tr></tbody></table>