---
title: "Plantillas Twig"
description: "Plantillas Twig"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-10-08"
last_update: "2026-10-08"
time_minutes: 1
draft: false
unlisted: false
url: "https://view.libredte.cl/docs/twig"
---

# Plantillas Twig

Las plantillas utilizan [Twig](https://twig.symfony.com) como lenguaje de expresiones. Esto permite mostrar datos dinámicos, aplicar formato y condicionar contenido directamente en los valores de texto de la plantilla.

Las plantillas se definen en formato JSON y tienen una estructura fija. Twig no se usa para generar la estructura del documento, sino dentro de los contenidos de texto: títulos, celdas, bloques HTML, etc.

```twig
<p><b>Razón social:</b> {{ document.Encabezado.Emisor.RznSoc }}</p>
<p><b>Total:</b> {{ document.Encabezado.Totales.MntTotal | format_as('jt.int') }}</p>
```

Las secciones siguientes cubren lo que se puede usar en ese contexto: cómo acceder a variables, cómo condicionar contenido y qué filtros de formato están disponibles.



---

## Variables

Variables en Twig

# Variables en Twig

Las variables representan los datos disponibles al momento de renderizar la plantilla. Para mostrar el valor de una variable se usan llaves dobles:

```twig
{{ document_stamp }}
```

## Acceso a datos anidados

Los datos generalmente tienen estructura jerárquica. Se accede a cada nivel con un punto:

```twig
{{ document.Encabezado.Emisor.RznSoc }}
{{ document.Encabezado.Totales.MntTotal }}
```

Para acceder a un elemento de una lista por su posición (desde `0`):

```twig
{{ document.Detalle[0].NmbItem }}
```

## Valor por defecto

Si una variable puede no estar presente, se puede indicar un valor alternativo con `default`:

```twig
{{ document.Encabezado.IdDoc.TermPagoGlosa | default(&#039;N/A&#039;) }}
```

## Aplicar un filtro

Los filtros transforman el valor de una variable antes de mostrarlo. Se aplican con `format_as`:

```twig
{{ document.Encabezado.Totales.MntTotal | format_as(&#039;jt.int&#039;) }}
```

El nombre dentro de `format_as` identifica el filtro a aplicar. Ver las secciones de filtros para conocer los disponibles.




---

## Condiciones

Condiciones en Twig

# Condiciones en Twig

Las condiciones permiten mostrar u ocultar contenido según el valor de una variable. Se escriben con `{% if %}` y se cierran con `{% endif %}`.

## Verificar si una variable tiene valor

La forma más común: muestra el bloque solo si la variable existe y no está vacía.

```twig
{% if documento.Encabezado.Receptor.Contacto %}
  &lt;p&gt;Contacto: {{ documento.Encabezado.Receptor.Contacto }}&lt;/p&gt;
{% endif %}
```

Para mostrar algo alternativo cuando no tiene valor:

```twig
{% if documento.Encabezado.Receptor.Contacto %}
  {{ documento.Encabezado.Receptor.Contacto }}
{% else %}
  Sin contacto registrado
{% endif %}
```

## Comparar con un valor específico

```twig
{% if documento.Encabezado.IdDoc.TipoDTE == 33 %}
  &lt;p&gt;Factura Electrónica&lt;/p&gt;
{% elseif documento.Encabezado.IdDoc.TipoDTE == 39 %}
  &lt;p&gt;Boleta Electrónica&lt;/p&gt;
{% else %}
  &lt;p&gt;Otro documento&lt;/p&gt;
{% endif %}
```

## Comparaciones numéricas

| Operador | Significado         |
|----------|---------------------|
| `==`     | igual a             |
| `!=`     | distinto de         |
| `&gt;`      | mayor que           |
| `&lt;`      | menor que           |
| `&gt;=`     | mayor o igual que   |
| `&lt;=`     | menor o igual que   |

Ejemplos:

```twig
{% if documento.Encabezado.Totales.MntTotal &gt; 0 %}

{% if documento.Encabezado.Totales.MntDescuento != 0 %}
```

## Rango de valores

```twig
{% if documento.Encabezado.IdDoc.TipoDTE &gt;= 33 and documento.Encabezado.IdDoc.TipoDTE &lt;= 46 %}
  &lt;p&gt;Es una factura&lt;/p&gt;
{% endif %}
```

## Verificar si el valor está en una lista

```twig
{% if documento.Encabezado.IdDoc.TipoDTE in [33, 34, 61] %}
  &lt;p&gt;Documento con IVA&lt;/p&gt;
{% endif %}
```

## Verificar que una variable está definida

Útil cuando la variable puede no existir en absoluto (a diferencia de estar vacía):

```twig
{% if documento.Encabezado.Transporte is defined %}
  &lt;p&gt;Hay datos de transporte&lt;/p&gt;
{% endif %}
```

## Combinar condiciones

```twig
{% if variable1 and variable2 %}
{% if variable1 or variable2 %}
{% if not variable1 %}
```




---

## Filtros JSON Templates

Filtros JSON Templates

# Filtros JSON Templates

Filtros de propósito general incluidos en el motor de plantillas. Se invocan con el prefijo `jt.`.

## Números

| Filtro | Descripción | Resultado |
|--------|-------------|-----------|
| `jt.int` | Número entero con separador de miles | `1.234.567` |
| `jt.float` | Número decimal con separador de miles y coma decimal (2 decimales por defecto) | `1.234,56` |
| `num2text` | Número escrito en palabras en español | `un millón doscientos treinta y cuatro` |

```twig
{{ item.PrcItem | format_as(&#039;jt.int&#039;) }}
{{ item.PrcItem | format_as(&#039;jt.float&#039;) }}
{{ document.Encabezado.Totales.MntTotal | format_as(&#039;num2text&#039;) }}
```

## Fechas

| Filtro | Descripción | Resultado |
|--------|-------------|-----------|
| `jt.date.long` | Fecha en formato largo en español | `15 de marzo de 2025` |
| `jt.date.short` | Fecha en formato corto | `15/03/2025` |
| `jt.date.year` | Solo el año | `2025` |

```twig
{{ document.Encabezado.IdDoc.FchEmis | format_as(&#039;jt.date.long&#039;) }}
{{ document.Encabezado.IdDoc.FchVenc | format_as(&#039;jt.date.short&#039;) }}
{{ document_auth.FchResol | format_as(&#039;jt.date.year&#039;) }}
```

## Localización chilena

| Filtro | Descripción | Resultado |
|--------|-------------|-----------|
| `jt.l10n.cl.rut` | RUT formateado con puntos, guión y dígito verificador | `12.345.678-9` |

```twig
{{ document.Encabezado.Emisor.RUTEmisor | format_as(&#039;jt.l10n.cl.rut&#039;) }}
```

## Moneda

| Filtro | Descripción |
|--------|-------------|
| `jt.currency` | Formatea un monto según el código de moneda. El valor debe tener el formato `CODIGO:monto`. |

```twig
{{ &quot;USD:1234.50&quot; | format_as(&#039;jt.currency&#039;) }}
```

## Códigos de barras e imágenes

Estos filtros reciben un texto y devuelven una imagen en formato base64, lista para usar en una etiqueta `&lt;img&gt;`.

| Filtro | Descripción |
|--------|-------------|
| `jt.barcode` | Código de barras lineal (formato CODE-128 por defecto) |
| `jt.qr` | Código QR |
| `jt.pdf417` | Código de barras PDF417 |

```twig
&lt;img src=&quot;{{ &#039;T33F12345&#039; | format_as(&#039;jt.barcode&#039;) }}&quot; /&gt;
&lt;img src=&quot;{{ contenido | format_as(&#039;jt.qr&#039;) }}&quot; /&gt;
&lt;img src=&quot;{{ document_stamp | format_as(&#039;jt.pdf417&#039;) }}&quot; /&gt;
```

**Nota**: Se recomienda usar los elementos `BarcodeBlock`, `QrBlock` y `Pdf417Block` disponibles en el editor de plantillas, que simplifican la configuración de los códigos de barras y QR.




---

## Filtros LibreDTE Common

Filtros LibreDTE Common

# Filtros LibreDTE Common

Filtros comunes disponibles para todos los documentos de LibreDTE. Se invocan con el prefijo `common.`.

| Filtro | Descripción | Entrada | Resultado |
|--------|-------------|---------|-----------|
| `common.rut` | RUT formateado con puntos, guión y dígito verificador | `12345678-9` | `12.345.678-9` |
| `common.date` | Fecha en formato corto | `2025-03-15` | `15/03/2025` |
| `common.dateLong` | Fecha en formato largo en español | `2025-03-15` | `15 de marzo de 2025` |
| `common.period` | Período mensual en formato legible en español | `202503` | `marzo de 2025` |
| `common.currencyAmount` | Monto formateado según moneda. El valor debe tener el formato `CODIGO:monto`. | `CLP:150000` | `$ 150.000` |

```twig
{{ document.Encabezado.Receptor.RUTRecep | format_as(&#039;common.rut&#039;) }}
{{ document.Encabezado.IdDoc.FchVenc | format_as(&#039;common.date&#039;) }}
{{ document.Encabezado.IdDoc.FchEmis | format_as(&#039;common.dateLong&#039;) }}
{{ document.Encabezado.IdDoc.FchEmis | format_as(&#039;common.period&#039;) }}
{{ &quot;CLP:&quot; ~ document.Encabezado.Totales.MntTotal | format_as(&#039;common.currencyAmount&#039;) }}
```




---

## Filtros LibreDTE Billing Document

Filtros LibreDTE Billing Document

# Filtros LibreDTE Billing Document

Filtros específicos para documentos tributarios electrónicos (DTE). Cada filtro está diseñado para un campo concreto del documento y convierte su valor al formato o descripción correspondiente. Se invocan con el prefijo `billing_document.`.

## Tipo de documento

| Filtro | Descripción | Ejemplo |
|--------|-------------|---------|
| `billing_document.TipoDTE` | Convierte el código numérico del tipo de documento a su nombre | `33` → `Factura Electrónica` |
| `billing_document.TpoDocRef` | Igual que `TipoDTE`, para documentos de referencia | |

```twig
{{ document.Encabezado.IdDoc.TipoDTE | format_as(&#039;billing_document.TipoDTE&#039;) }}
```

## RUT

Los siguientes filtros formatean un RUT con puntos, guión y dígito verificador. Se usan según el campo correspondiente del document.

| Filtro | Campo |
|--------|-------|
| `billing_document.RUTEmisor` | RUT del emisor |
| `billing_document.RUTRecep` | RUT del receptor |
| `billing_document.RUTSolicita` | RUT del solicitante |
| `billing_document.RUTTrans` | RUT del transportista |
| `billing_document.RUTChofer` | RUT del chofer |

```twig
{{ document.Encabezado.Emisor.RUTEmisor | format_as(&#039;billing_document.RUTEmisor&#039;) }}
{{ document.Encabezado.Receptor.RUTRecep | format_as(&#039;billing_document.RUTRecep&#039;) }}
```

## Fechas

| Filtro | Descripción | Resultado |
|--------|-------------|-----------|
| `billing_document.FchEmis` | Fecha de emisión en formato largo | `15 de marzo de 2025` |
| `billing_document.FchRef` | Fecha de referencia en formato largo | |
| `billing_document.FchVenc` | Fecha de vencimiento en formato largo | |
| `billing_document.FchCancel` | Fecha de cancelación en formato largo | |
| `billing_document.PeriodoDesde` | Período desde en formato corto | `15/03/2025` |
| `billing_document.PeriodoHasta` | Período hasta en formato corto | |
| `billing_document.FchPago` | Fecha de pago en formato corto | |
| `billing_document.FchResol` | Extrae solo el año de la fecha de resolución | `2025` |

```twig
{{ document.Encabezado.IdDoc.FchEmis | format_as(&#039;billing_document.FchEmis&#039;) }}
{{ document.Encabezado.IdDoc.FchResol | format_as(&#039;billing_document.FchResol&#039;) }}
```

## Ubicación

| Filtro | Descripción |
|--------|-------------|
| `billing_document.CdgSIISucur` | A partir del código de comuna, retorna la dirección regional del SII |
| `billing_document.CiudadOrigen` | A partir del código de comuna, retorna el nombre de la ciudad |
| `billing_document.CiudadRecep` | Igual que `CiudadOrigen`, para la ciudad del receptor |

## Montos

| Filtro | Descripción | Resultado |
|--------|-------------|-----------|
| `billing_document.Number` | Número entero con separador de miles y sin decimales | `1.234.567` |
| `billing_document.TotItems` | Igual que `Number` | |
| `billing_document.MontoMoneda` | Monto formateado según la moneda de aduana. Formato `GLOSA:monto`. | |

```twig
{{ item.MontoItem | format_as(&#039;billing_document.Number&#039;) }}
```

## Formas de pago y otros códigos

Estos filtros convierten un código numérico a su descripción según las tablas del SII.

| Filtro | Descripción |
|--------|-------------|
| `billing_document.FmaPago` | Forma de pago (contado, crédito, etc.) |
| `billing_document.FmaPagExp` | Forma de pago en exportaciones |
| `billing_document.MedioPago` | Medio de pago (cheque, transferencia, etc.) |
| `billing_document.TipoImp` | Impuesto adicional o retención |
| `billing_document.Nacionalidad` | País por código de aduana |
| `billing_document.CodPaisRecep` | Igual que `Nacionalidad`, para el país del receptor |
| `billing_document.IndTraslado` | Indicador de traslado |
| `billing_document.CodViaTransp` | Vía de transporte en aduana |

```twig
{{ document.Encabezado.IdDoc.FmaPago | format_as(&#039;billing_document.FmaPago&#039;) }}
```

## Datos de aduana

| Filtro | Descripción |
|--------|-------------|
| `billing_document.Aduana` | Traduce un campo de aduana a su nombre y valor descriptivo. Recibe el formato `TAG:valor`. |

## Timbre electrónico

| Filtro | Descripción |
|--------|-------------|
| `billing_document.TED` | Genera la imagen PDF417 del timbre electrónico a partir del XML del TED |

## Gráfico

| Filtro | Descripción |
|--------|-------------|
| `billing_document.chart` | Genera un gráfico de barras a partir de un objeto de datos con las claves `titulo`, `datos`, `color` y `options.size.width`/`height` |

```twig
{{ document_extra.historial | format_as(&#039;billing_document.chart&#039;) }}
```




---

## Filtros LibreDTE Payslip

Filtros LibreDTE Payslip

# Filtros LibreDTE Payslip

Filtros específicos para liquidaciones de sueldo. Se invocan con el prefijo `payslip.`.

| Filtro | Descripción |
|--------|-------------|
| `payslip.detailDescription` | Genera la descripción de una línea de detalle. Para movimientos conocidos (cotizaciones, impuestos, aportes patronales) genera una descripción con los datos del contexto; para el resto usa la descripción o glosa del movimiento. |
| `payslip.detailAmount` | Formatea el monto de una línea de detalle respetando los decimales y separadores de la moneda del movimiento. |

Ambos filtros reciben el objeto completo de la línea de detalle, no solo un campo:

```twig
{% for detalle in liquidacion.detalles %}
  &lt;tr&gt;
    &lt;td&gt;{{ detalle | format_as(&#039;payslip.detailDescription&#039;) }}&lt;/td&gt;
    &lt;td&gt;{{ detalle | format_as(&#039;payslip.detailAmount&#039;) }}&lt;/td&gt;
  &lt;/tr&gt;
{% endfor %}
```





---
Última actualización el 08/10/2026

