Saltar al contenido principal
Esta página es una referencia completa de todos los tags, filtros y operadores de plantillas disponibles en Reporter. Para una introducción a las plantillas y marcadores de posición, consulte Qué es Reporter.

Construcción de plantillas


Bloques comunes

  • Bucle
{% for <item> in <list> %}
  ...
{% endfor %}
  • Bucle con esquema explícito
{% for order in external_db:sales.orders %}
  {{ order.id }} - {{ order.total }}
{% endfor %}
  • Condición simple
{% if value_a == value_b %}
  ...
{% endif %}
  • Alcance temporal
{% with <object> as <alias> %}
  ...
{% endwith %}
  • Formato de valores
{{ field_name | floatformat:2 }}   --> renders 123.45

Bloques condicionales

BloqueDescripciónEjemplo
IfEjecuta el bloque si la condición es verdadera{% if condition %}...{% endif %}
If-elseEjecuta un bloque si es verdadero, otro si es falso{% if condition %}...{% else %}...{% endif %}
If-else-ifPermite múltiples verificaciones{% if a %}...{% elif b %}...{% else %}...{% endif %}
EqualVerifica si dos valores son iguales{% if a == b %}
Not equalVerifica si dos valores son diferentes{% if a != b %}
Greater thanVerifica si a es mayor que b{% if a > b %}
Less thanVerifica si a es menor que b{% if a < b %}
Greater than or equalVerifica si a es mayor o igual que b{% if a >= b %}
Less than or equalVerifica si a es menor o igual que b{% if a <= b %}
AndRetorna verdadero si ambas condiciones son verdaderas{% if a and b %}
OrRetorna verdadero si al menos una es verdadera{% if a or b %}
NotInvierte el resultado booleano{% if not a %}

Referencia de tags


Tags de agregación

sum_by — Suma valores numéricos de un campo en todos los elementos de una colección.
{% sum_by <collection> by <field> %}
{% sum_by <collection> by <field> if <condition> %}
Ejemplo:
<Sum>
  {% sum_by transaction.operation by "amount" if accountAlias != "@external/BRL" %}
</Sum>
count_by — Cuenta el número de elementos en una colección.
{% count_by <collection> %}
{% count_by <collection> if <condition> %}
Ejemplo:
<Count>
  {% count_by transaction.operation if accountAlias != "@external/BRL" %}
</Count>
avg_by — Calcula el promedio de valores numéricos en un campo.
{% avg_by <collection> by <field> %}
{% avg_by <collection> by <field> if <condition> %}
min_by — Encuentra el valor numérico mínimo en un campo.
{% min_by <collection> by <field> %}
{% min_by <collection> by <field> if <condition> %}
max_by — Encuentra el valor numérico máximo en un campo.
{% max_by <collection> by <field> %}
{% max_by <collection> by <field> if <condition> %}
Todos los tags de agregación utilizan precisión decimal para evitar errores de redondeo de punto flotante. Los campos faltantes o no numéricos se omiten. Retorna 0 si ningún elemento coincide.

Tag de fecha y hora

date_time — Muestra la fecha y hora actual formateada según la cadena de formato proporcionada. La hora se genera en UTC.
{% date_time "<format>" %}
Códigos de formato:
CódigoSignificadoEjemplo
YYYYAño de 4 dígitos2025
MMMes de 2 dígitos01-12
ddDía de 2 dígitos01-31
HHHora de 2 dígitos (24h)00-23
mmMinuto de 2 dígitos00-59
ssSegundo de 2 dígitos00-59
Ejemplos:
{% date_time "YYYY-MM-dd" %}           --> 2025-02-06
{% date_time "dd/MM/YYYY HH:mm:ss" %} --> 06/02/2025 14:30:45

Tag aritmético

calc — Evalúa expresiones matemáticas con soporte para variables del contexto de la plantilla.
{% calc <expression> %}
Operadores soportados:
OperadorDescripciónPrecedencia
**ExponenciaciónMás alta (derecha a izquierda)
* /Multiplicación, divisiónMedia
+ -Suma, restaMás baja
( )ParéntesisAnula la precedencia
Ejemplos:
{% calc 100 + 50 %}                                --> 150
{% calc balance.available * 0.5 %}                 --> calculated value
{% calc (balance.available + 1.2) * balance.on_hold - balance.available / 2 %}
Las variables que no pueden resolverse toman el valor predeterminado 0. La división por cero produce un error.

Tag de agregación financiera

aggregate_balance — Agrupa elementos por un campo, selecciona la entrada más reciente por cuenta dentro de cada grupo y suma los saldos. Útil para reportes regulatorios que requieren el último saldo por cuenta agrupado por categoría.
{% aggregate_balance <collection> by "<balance_field>" group_by "<group_field>" order_by "<date_field>" [if <condition>] as <result_var> %}
El resultado se almacena en una variable sobre la que puede iterar:
{% aggregate_balance accounts by "balance" group_by "cosif_code" order_by "created_at" as balances %}
{% for b in balances %}
  {{ b.group_value }}: {{ b.balance }} ({{ b.count }} accounts)
{% endfor %}
Cada elemento del resultado contiene:
CampoTipoDescripción
group_valuestringEl valor del campo group_by
balancedecimalSuma de los últimos saldos por cuenta en el grupo
countintegerNúmero de cuentas en el grupo
Tamaño máximo de la colección: 100,000 elementos. Los resultados se ordenan por group_value.

Tags de contadores

counter — Incrementa un contador nombrado en 1. No produce salida. Los contadores tienen alcance por renderizado.
{% counter "<counter_name>" %}
counter_show — Muestra la suma de uno o más contadores nombrados.
{% counter_show "<name1>" %}
{% counter_show "<name1>" "<name2>" "<name3>" %}
Ejemplo:
{% for tx in ledger.transactions %}
  {% counter tx.type %}
{% endfor %}
Total credits: {% counter_show "credit" %}
Total debits: {% counter_show "debit" %}
Combined: {% counter_show "credit" "debit" %}

Referencia de filtros


percent_of

Calcula el porcentaje de un valor en relación con un total. Retorna una cadena formateada con 2 decimales.
{{ value | percent_of: total }}
Ejemplo: si category.amount = "6.00" y total.expenses = "20.00":
{{ category.amount | percent_of: total.expenses }}  --> 30.00%

strip_zeros

Elimina los ceros finales de un valor numérico sin redondear.
{{ number | strip_zeros }}
Ejemplos:
{{ "100.50000" | strip_zeros }}  --> 100.5
{{ "100.00" | strip_zeros }}     --> 100
{{ "99.990" | strip_zeros }}     --> 99.99

slice

Extrae una subcadena usando índices de inicio y fin (basados en 0).
{{ string | slice:"start:end" }}
Ejemplos:
{{ "hello" | slice:"0:3" }}  --> hel
{{ "12345" | slice:"1:4" }}  --> 234

replace

Reemplaza todas las ocurrencias de una cadena de búsqueda con una cadena de reemplazo. Formato: "búsqueda:reemplazo".
{{ string | replace:"search:replacement" }}
Ejemplos:
{{ "01310-100" | replace:"-:" }}      --> 01310100   (elimina guiones)
{{ "1234.56" | replace:".:," }}       --> 1234,56    (punto a coma)
{{ "12.345.678/0001-99" | replace:".:" }}  --> 12345678/0001-99

where

Filtra un arreglo de objetos por igualdad de campo. Soporta campos anidados mediante notación de punto.
{{ array | where:"field:value" }}
Ejemplos:
{{ holders | where:"state:SP" }}
{{ holders | where:"address.state:SP" }}
Uso dentro de bucles:
{% for holder in holders|where:"state:SP" %}
  {{ holder.name }}
{% endfor %}

sum (filtro)

Suma valores numéricos de un campo en todos los elementos de un arreglo. Utiliza precisión decimal.
{{ array | sum:"field" }}
Ejemplos:
{{ operations | sum:"amount" }}
{{ items | sum:"price.value" }}

count (filtro)

Cuenta los elementos de un arreglo donde un campo coincide con un valor. Soporta campos anidados.
{{ array | count:"field:value" }}
Ejemplos:
{{ operations | count:"nat_oper:6" }}
{{ holders | count:"address.state:SP" }}

contains

Verifica si un valor está parcialmente incluido en otro. Útil cuando los datos incluyen prefijos o sufijos dinámicos.
{% if contains(source_field, target_field) %}
Ejemplo:
  • Origen: 0#@external/BRL
  • Destino: @external/BRL
Retorna true porque @external/BRL existe dentro del valor de origen.

Resumen de operadores y filtros


NombreTipoDescripción
sum_byTagSuma valores por campo con filtro opcional
count_byTagCuenta elementos con filtro opcional
avg_byTagCalcula el promedio por campo
min_byTagEncuentra el valor mínimo
max_byTagEncuentra el valor máximo
date_timeTagFormatea la fecha/hora actual
calcTagEvalúa expresiones aritméticas
aggregate_balanceTagAgregación de saldos financieros agrupados
counterTagIncrementa un contador nombrado
counter_showTagMuestra el valor del contador
percent_ofFiltroCalcula porcentaje
strip_zerosFiltroElimina ceros finales
sliceFiltroExtrae subcadena
replaceFiltroReemplazo de cadenas
whereFiltroFiltra arreglo por valor de campo
sumFiltroSuma valores de campo del arreglo
countFiltroCuenta elementos coincidentes
containsFunciónCoincidencia parcial de cadenas
floatformatFiltroFormatea decimales

Filtrado avanzado


Al generar un reporte, puede pasar filtros en el cuerpo de la solicitud para acotar los datos. Los filtros siguen una estructura de fuente de datos > tabla > campo: Esquema único (predeterminado):
{
  "templateId": "00000000-0000-0000-0000-000000000000",
  "filters": {
    "midaz_onboarding": {
      "account": {
        "id": { "eq": ["123", "456"] },
        "createdAt": { "between": ["2023-01-01", "2023-01-31"] },
        "status": { "in": ["active", "pending"] }
      }
    }
  }
}
Multi-esquema (clave explícita esquema.tabla):
{
  "templateId": "00000000-0000-0000-0000-000000000000",
  "filters": {
    "external_db": {
      "sales.orders": {
        "total": { "gt": [100] },
        "created_at": { "gte": ["2025-01-01"] }
      },
      "finance.invoices": {
        "status": { "eq": ["paid"] }
      }
    }
  }
}
Operadores soportados:
OperadorDescripciónEjemplo
eqIgual a{ "eq": ["active", "pending"] }
gtMayor que{ "gt": [100] }
gteMayor o igual que{ "gte": ["2025-06-01"] }
ltMenor que{ "lt": [1000] }
lteMenor o igual que{ "lte": ["2025-06-30"] }
betweenEl valor está dentro de un rango{ "between": [100, 1000] }
inEl valor está dentro de una lista{ "in": ["active", "pending"] }
ninEl valor no está dentro de una lista{ "nin": ["deleted", "archived"] }