- Plantilla estructurada en CSV → salida CSV
- Plantilla estructurada en XML → salida XML
- Plantilla estructurada en HTML → salida HTML o PDF
- Plantilla estructurada en TXT → salida TXT
¿Por qué usar Reporter?
En lugar de escribir consultas SQL complejas, puedes usar marcadores de posición intuitivos que referencian tus dominios, tablas y campos directamente. Es una forma rápida, flexible y mantenible de crear reportes que evolucionan junto con tu modelo de datos.
Cómo funciona
Flujo de trabajo
Reporter sigue un flujo de trabajo simple y eficiente que convierte tus plantillas en reportes listos para producción. Comienzas enviando un archivo de plantilla con filtros y parámetros opcionales. Reporter recupera los datos requeridos de tus bases de datos configuradas (PostgreSQL, MongoDB, o ambas), aplica la lógica de tu plantilla y genera la salida final en el formato que elijas, como CSV, XML, HTML o PDF.
Arquitectura
Reporter está construido sobre una arquitectura en capas que mantiene las responsabilidades claras y soporta el crecimiento. La capa de datos se conecta a tus bases de datos a través de tus fuentes de datos configuradas. La capa de lógica de negocio gestiona el análisis de plantillas, la resolución de marcadores de posición y las tareas de renderización. La capa de presentación devuelve la salida formateada a través de APIs RESTful, lo que facilita la integración de Reporter en tus aplicaciones existentes y flujos operacionales.
Qué puede hacer
- Consultas dinámicas con marcadores de posición: Referencia cualquier punto de datos mediante rutas directas — no se requiere SQL.
- Lógica de bucles y condiciones: Soporte para bucles, condicionales y bloques con alcance.
- Operaciones matemáticas y agregación: Realiza cálculos con
sum_by,avg_byy el nuevo bloque{% calc %}. - Procesamiento asíncrono: Los reportes pesados se manejan de forma asíncrona para proteger las cargas de trabajo en vivo.
- Múltiples formatos de salida: Genera documentos CSV, XML, HTML, TXT o PDF según tus necesidades.
Modelo de plantilla
Reporter usa plantillas que reflejan la estructura del documento final. Ya sea que estés generando un archivo XML estructurado o un PDF imprimible, el contenido coincidirá exactamente.
Aunque el contenido del archivo debe seguir el formato de salida, asegúrate de guardarlo con una extensión
.tpl. Esto es requerido para que la plantilla funcione correctamente.Configurando tu entorno
Antes de comenzar, debes renombrar las bases de datos usadas como referencias para buscar información mientras se renderizan los reportes. Esta configuración debe hacerse en el archivo
.env del proyecto.
Al definir nombres únicos y claros para cada base de datos, evitamos conflictos, especialmente en casos donde diferentes bases de datos tienen tablas con los mismos nombres, y aseguramos mejor fluidez en las consultas.
Ejemplo
Si estás usando una base de datos llamadaonboarding, recomendamos renombrarla a algo más descriptivo, como:
midaz_onboarding(PostgreSQL).midaz_onboarding_metadata(MongoDB).
Usando marcadores de posición
Las plantillas usan marcadores de posición para obtener datos dinámicamente. Un marcador de posición apunta a un campo dentro de una tabla o una colección de documentos, y sigue esta estructura:
Construyendo plantillas
Puedes mejorar tus plantillas con condicionales, operadores matemáticos y variables temporales, haciéndolas más dinámicas y flexibles.
Bloques comunes
- Bucle
- Condición simple
- Alcance temporal
- Formato de valores
:2 muestra dos decimales: 123.45.
Ejemplo
Bloques condicionales
Reporter soporta condiciones lógicas enriquecidas:| Bloque | Descripción | Ejemplo |
|---|---|---|
| If | Ejecuta un bloque si la condición es verdadera. | {% if condition %}...{% endif %} |
| If-else | Ejecuta un bloque si es verdadero, otro si es falso. | {% if condition %}...{% else %}...{% endif %} |
| If - else - if | Permite múltiples verificaciones dentro del mismo bloque. | {% if a %}...{% elif b %}...{% else %}...{% endif %} |
| Igual | Verifica si dos valores son iguales. | {% if a == b %} |
| No igual | Verifica si dos valores son diferentes. | {% if a != b %} |
| Mayor que | Verifica si a es mayor que b. | {% if a > b %} |
| Menor que | Verifica si a es menor que b. | {% if a < b %} |
| Mayor o igual que | Verifica si a es mayor o igual que b. | {% if a >= b %} |
| Menor o igual que | Verifica si a es menor o igual que b. | {% if a <= b %} |
| Y (And) | Devuelve verdadero si ambas condiciones son verdaderas. | {% if a and b %} |
| O (Or) | Devuelve verdadero si al menos una condición es verdadera. | {% if a or b %} |
| No (Not) | Invierte el resultado booleano de una condición. | {% if not a %} |
Operadores y filtros
Puedes combinar condiciones lógicas con operaciones matemáticas para definir reglas, calcular valores y formatear resultados con precisión. Ejemplo: Calculando Suma Total con Filtro
Otras funciones
- Conteo
- Promedio
- Mínimo
- Máximo
- Porcentaje
category.amount = "6.00"total.expenses = "20.00"
- Fecha
ddMMyyyy, yyyyMMdd, y más). El tiempo también puede incluirse, como en el ejemplo a continuación.
El tiempo se genera en UTC (Tiempo Universal Coordinado), sin zonas horarias regionales o ajustes de horario de verano.
Contains
Usa este filtro para verificar si un valor está parcialmente incluido en otro, incluso si no son idénticos. Es beneficioso cuando tus datos incluyen prefijos o sufijos dinámicos, como en alias de cuentas.midaz_transaction.transaction.body.source.from.account_alias = 0#@external/BRLmidaz_onboarding.account.alias = @external/BRL
contains devolverá true porque @external/BRL está dentro de 0#@external/BRL.
Operaciones matemáticas
Reporter te permite realizar cálculos en datos exportados.| Palabra clave | Descripción |
|---|---|
sum_by | Suma valores. |
- | Resta. |
* | Multiplica. |
/ | Divide. |
avg_by | Calcula promedio. |
min_by | Valor mínimo. |
max_by | Valor máximo. |
percent_of | Calcula porcentaje. |
filter(list, "field", value) | Filtra listas como si fuera una cláusula WHERE. |
{% calc %} | Ejecuta expresiones matemáticas en línea para calcular valores dinámicamente durante la renderización de plantillas. Soporta operaciones aritméticas, expresiones anidadas y referencias a variables — ideal para cálculos como totales, saldos o métricas derivadas. Ejemplo: {% calc (balance.available + 1.2) * balance.on_hold - balance.available / 2 %} |
Filtrado avanzado
Reporter soporta lógica de filtrado compleja en el objetofilters de una solicitud de reporte.
Cada filtro se aplica por datasource > table > field, usando una condición como:
Operadores soportados:
eq: Igual a;gt: Mayor que;gte: Mayor o igual que;lt: Menor que;lte: Menor o igual que;between: El valor cae dentro de un rango;in: El valor está dentro de una lista;nin: El valor no está dentro de una lista.
Recomendaciones de seguridad
La seguridad es fundamental al trabajar con productos y plugins de Lerian. Antes de desplegar cualquier componente en tu entorno, recomendamos encarecidamente revisar nuestras Recomendaciones de Seguridad. Cada producto—junto con sus plugins asociados—debe implementarse en línea con las mejores prácticas de seguridad, incluyendo:
- Asegurar límites de red
- Gestionar y rotar secretos
- Aplicar gestión de parches oportuna
- Hacer cumplir controles de acceso estrictos basados en roles (RBAC)
Compatibilidad de versión con Midaz
Para asegurar una experiencia completa y confiable con el producto Reporter, debes actualizar de Midaz v2.x.x a Midaz v3.x.x. Reporter depende de mejoras principales introducidas en Midaz v3, y sin esta actualización ciertas funcionalidades de reportes pueden estar limitadas o no disponibles.
¿Necesitas inspiración?
Consulta la página de Ejemplos de plantillas para explorar qué puedes hacer y comenzar a dar forma a tu propia plantilla.

