# Plantillas

El apartado **Plantillas documentales**, dentro de **Configuración**, permite administrar el formato de los documentos operativos que genera Horfal-EOS.

Las plantillas determinan **cómo se presenta la información de un documento** al momento de generarlo, utilizando contenido **HTML** para su estructura, **CSS** para su presentación y variables de **HTML\_EOS** para incorporar automáticamente los datos correspondientes a cada operación.

Por ejemplo, pueden existir plantillas diferentes para una Orden de Compra, una Requisición, una RFQ o una Recepción.

**\[Imagen: listado principal de Plantillas documentales\]**

## Listado de plantillas

La pantalla principal concentra las plantillas disponibles y permite identificar rápidamente cuál se encuentra activa para cada tipo documental.

Entre la información mostrada se encuentra:

- **ID:** identificador interno de la plantilla.
- **Clave:** código utilizado para identificarla.
- **Nombre:** nombre descriptivo.
- **Tipo:** documento para el cual fue creada, por ejemplo PO, PR o RFQ.
- **Motor:** tecnología utilizada para procesar la plantilla. En las mostradas corresponde a **HTML\_EOS**.
- **Estado:** indica si la plantilla está en borrador, activa o inactiva.
- **Default:** identifica si es la plantilla predeterminada para ese tipo documental.
- **Schema:** esquema de datos utilizado por la plantilla.
- **Versión:** versión actual de la plantilla.
- **Actualizado por:** usuario que realizó la última actualización.
- **Acciones:** permiten consultar, duplicar y administrar el estado de la plantilla.

### Estados

Las plantillas pueden encontrarse principalmente en los siguientes estados:

**BORRADOR:** plantilla en preparación. Su contenido puede modificarse antes de utilizarla en producción.

**ACTIVA:** plantilla habilitada para su utilización. Una plantilla activa **no se modifica directamente**; para realizar cambios debe generarse una nueva versión en borrador.

**INACTIVA:** plantilla que ya no se encuentra habilitada para su utilización normal.

Esta separación evita que una modificación accidental cambie inmediatamente el formato de los documentos que se están utilizando en operación.

---

# Crear una nueva plantilla

Para registrar una plantilla se selecciona **Nueva plantilla**.

El sistema solicita:

- **Tipo documental:** determina para qué documento será utilizada.
- **Clave:** identificador de la plantilla. Admite letras, números, guion y guion bajo, y se almacena en mayúsculas.
- **Nombre:** nombre descriptivo.
- **Descripción:** explicación opcional de la finalidad de la plantilla.
- **Schema:** versión del esquema de datos que utilizará; en el ejemplo se muestra **V1**.

**\[Imagen: ventana Nueva plantilla documental\]**

## Tipos documentales

El sistema permite crear plantillas para distintos documentos operativos. Entre los mostrados se encuentran:

- **BIDA:** Comparativa / Bid Analysis.
- **PO:** Orden de Compra / Purchase Order.
- **PR:** Requisición de Compra / Purchase Request.
- **RFQ:** Solicitud de Cotización / Request for Quotation.
- **FP:** Factura de Proveedor / Supplier Invoice.
- **GR:** Recepciones / Goods Receipts.
- **RDR:** Reporte de Discrepancia en Recepción.
- **RR:** Solicitud de Devolución a Proveedor / Return Request.

Por lo tanto, el **Tipo documental** es importante porque define qué clase de información podrá recibir la plantilla cuando se genere el documento.

**\[Imagen: catálogo de tipos documentales\]**

---

# Detalle de una plantilla

Al abrir una plantilla se muestra su información técnica o **Metadata**.

Aquí pueden consultarse datos como:

**ID, Empresa, Tipo documental, Motor, Clave, Nombre, Descripción, Estado, Default, Schema, Versión, Plantilla HTML, Estilo CSS, usuario que la creó, usuario que la actualizó y las fechas correspondientes.**

También se muestran las rutas internas correspondientes al archivo HTML y al estilo CSS.

**\[Imagen: detalle y Metadata de una plantilla\]**

### Default

Cuando una plantilla aparece como **Default = Sí**, significa que se encuentra establecida como la plantilla predeterminada para ese tipo documental.

Por ejemplo, si existe más de una plantilla para **PO**, la marcada como predeterminada es la que corresponde utilizar como referencia principal para ese documento.

---

# Contenido HTML/CSS

Esta sección contiene la construcción visual y documental de la plantilla.

Se divide principalmente en:

### HTML

El **HTML** define la estructura y contenido del documento.

Aquí se determina dónde aparecerán elementos como encabezados, información de la empresa, proveedor, folio, productos, cantidades, precios, impuestos, totales y demás información disponible.

Sin embargo, los datos de una operación no deben capturarse manualmente en la plantilla. Para ello se utilizan **variables documentales HTML\_EOS**.

Por ejemplo:

`{{documento.folio}}`

Al generarse un documento, el motor sustituye la variable por el dato correspondiente de la operación.

### CSS

El **CSS** controla la presentación visual del documento.

Permite establecer aspectos como tamaño de página, márgenes, tamaños de texto, distribución, espacios y demás características de presentación.

En términos sencillos:

**HTML = qué información y estructura tendrá el documento.**  
**CSS = cómo se verá esa información.**

**\[Imagen: editores HTML y CSS\]**

---

# Asistente HTML\_EOS

A la derecha del editor se encuentra el **Asistente HTML\_EOS**.

Su función es mostrar las variables y bloques que el sistema permite utilizar para el tipo de documento seleccionado. Esto evita tener que memorizar los nombres técnicos de cada variable.

Las variables se encuentran organizadas por grupos, por ejemplo:

- **meta**
- **empresa**
- **documento**
- **proveedor**
- **entrega**
- **condicionComercial**
- **totales**
- **lineas\[\]**
- **totales.impuestosResumen\[\]**

Cada grupo contiene información relacionada con una sección determinada del documento.

Por ejemplo, **empresa** concentra información correspondiente a la empresa, mientras que **proveedor** corresponde a información del proveedor y **totales** a los importes finales del documento.

**\[Imagen: Asistente HTML\_EOS y categorías de variables\]**

---

# Variables y bloques

HTML\_EOS admite variables individuales y bloques.

Una variable individual utiliza una estructura como:

`{{variable}}`

Los bloques se utilizan cuando existe información que puede repetirse, como las líneas de productos de una Orden de Compra:

`{{#lineas}} ... {{/lineas}}`

El sistema recorre las líneas disponibles y genera el contenido correspondiente para cada una.

Esto permite, por ejemplo, que una misma plantilla funcione correctamente tanto para una orden con un producto como para otra con múltiples productos.

El asistente también proporciona **Snippets seguros**, es decir, estructuras preparadas que pueden copiarse para utilizar correctamente determinados bloques.

---

# Limitaciones del motor

El propio asistente indica las funciones soportadas por HTML\_EOS.

Es importante considerar que el motor no está diseñado para realizar libremente programación o cálculos dentro de la plantilla. Entre las limitaciones mostradas se indica que no existe soporte para funciones como **datetime, length, groupBy, sum, if/else, expresiones JavaScript ni cálculos o agregaciones en plantilla**.

La plantilla debe utilizar principalmente la información que ya proporciona el contrato de datos del documento.

También pueden aparecer advertencias cuando existe información disponible en el contrato de datos pero su utilización implicaría estructuras no recomendadas por la versión actual del motor, como determinados **bloques iterables anidados**.

---

# Edición y control de versiones

Un punto importante de este apartado es que **las plantillas activas no se editan directamente**.

Cuando una plantilla se encuentra **ACTIVA**, el sistema la presenta en modo de solo lectura e indica que debe crearse una **nueva versión en borrador** para modificar el contenido utilizado en producción.

El flujo recomendado es:

**Plantilla activa → crear nueva versión → modificar el borrador → revisar → activar la nueva versión.**

De esta manera se conserva la versión que estaba funcionando y los cambios pueden prepararse sin modificar directamente la plantilla productiva.

En el listado, la columna **Versión** permite identificar la evolución que ha tenido cada plantilla.

---

## Acciones principales

Desde el listado pueden encontrarse acciones como:

**Ver:** abre el detalle técnico y contenido de la plantilla.

**Duplicar:** permite generar una copia de una plantilla existente para utilizarla como base de otra.

**Activar/Inactivar:** permite controlar su disponibilidad dependiendo de su estado.

Además, dentro del detalle se encuentran opciones como **Recargar**, **Recargar contenido** y, cuando la plantilla sea editable, **Guardar contenido**.