Reporter solo está disponible con Midaz v.3.x.x. Para más información, consulta la versión más reciente de la documentación
¿Por qué usar Reporter?
En lugar de escribir consultas complejas, puedes usar marcadores simples para referenciar dominios, tablas y campos directamente. Es una forma rápida y flexible de construir informes que se mantienen actualizados, incluso cuando tu modelo de datos evoluciona.Qué puede hacer
- Consultas dinámicas con marcadores: Las plantillas usan marcadores simples para extraer datos directamente de la base de datos; no se requiere SQL.
- Lógica de bucles y condiciones: Agrega bucles y condiciones para manejar escenarios más complejos sin complicar las cosas.
- Procesamiento asíncrono: Los informes grandes se procesan de forma asíncrona para que no interfieran con tus cargas de trabajo en vivo.
- Múltiples formatos de salida: Genera informes en CSV, XML, HTML o TXT — el que mejor se ajuste a tu caso de uso.
Por qué es importante
- No se requiere código: Crea informes potentes con plantillas simples.
- Flexible: Tus plantillas se adaptan automáticamente a medida que evoluciona el modelo de datos.
- Rendimiento optimizado: Se ejecuta en una base de datos de lectura replicada para evitar ralentizaciones.
Modelo de plantillas
Reporter lee archivos de plantilla que siguen la estructura de la salida final, ya sea XML, CSV, HTML o TXT. El informe generado coincidirá exactamente con esta estructura.Ejemplo
- Plantilla estructurada en XML = salida XML.
- Plantilla estructurada en CSV = salida CSV.
- Plantilla estructurada en HTML = salida HTML.
- Plantilla estructurada en TXT = salida TXT.
Aunque el contenido del archivo debe seguir el formato de salida, asegúrate de guardarlo con la extensión
.tpl. Esto es necesario para que la plantilla funcione correctamente.Configurando tu entorno
Antes de comenzar, debes renombrar las bases de datos utilizadas como referencias para buscar información mientras se renderizan los informes. Esta configuración debe realizarse 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 una mejor fluidez en las consultas.
Ejemplo
Si estás utilizando una base de datos llamadaonboarding, recomendamos renombrarla a algo más descriptivo, como:
midaz_onboarding(PostgreSQL).midaz_onboarding_metadata(MongoDB).
Uso de marcadores
Las plantillas usan marcadores para obtener datos dinámicamente. Un marcador apunta a un campo dentro de una tabla o una colección de documentos, y sigue esta estructura:Construcción de plantillas
Puedes mejorar tus plantillas con condicionales, operadores matemáticos y variables temporales, haciéndolas más dinámicas y flexibles.Bloques comunes
Bucle
Itera a través de un conjunto de datos y renderiza valores dentro del bloque. Aunque puede parecer un condicional, es una estructura de repetición. EjemploCondición simple
Verifica una regla lógica. Si es verdadera, se ejecuta el bloque. EjemploAlcance temporal
Crea una variable temporal dentro del bloque. Esto hace que las plantillas sean más fáciles de leer y evita repetir rutas largas (como acceder al mismo objeto o campo varias veces). EjemploFormato de valores
Te permite mostrar números con un número fijo de decimales, perfecto para mantener los valores financieros claros y consistentes.- Agrega un número después de los dos puntos para definir la precisión decimal. Por ejemplo,
:2muestra dos decimales:123.45.
Bloques condicionales
| Bloque | Descripción | Ejemplo |
|---|---|---|
| If | Ejecuta un bloque si la condición es verdadera. | {% if condicion %}...{% endif %} |
| If-else | Ejecuta un bloque si es verdadero, otro si es falso. | {% if condicion %}...{% 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 %} |
| And | Devuelve verdadero si ambas condiciones son verdaderas. | {% if a and b %} |
| Or | Devuelve verdadero si al menos una condición es verdadera. | {% if a or b %} |
| 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 la suma total con filtro y escalaOtras funciones
Contarcategory.amount = 600total.expenses = 2000
ddMMyyyy, yyyyMMdd, y más). El tiempo también puede incluirse, como en el ejemplo siguiente.
El tiempo se genera en UTC (Tiempo Universal Coordinado), sin zonas horarias regionales o ajustes por horario de verano.
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
Te permite realizar cálculos en los datos exportados.| Palabra clave | Descripción |
|---|---|
sum_by | Suma valores. |
- | Resta. |
* | Multiplica. |
/ | Divide. |
avg_by | Calcula el promedio. |
min_by | Valor mínimo. |
max_by | Valor máximo. |
percent_of | Calcula el porcentaje. |
filter(list, "field", value) | Filtra listas como si fuera una cláusula WHERE. |

