Saltar al contenido principal
Reporter te permite generar informes en XML que siguen la estructura oficial APIX, exigida por el Banco Central de Brasil (BACEN). Esta guía recorre la estructura y la lógica utilizadas para generar el informe APIX 001 (Documento 1201) en XML.
Los informes APIX 001 deben seguir estrictamente el esquema XSD definido por el BACEN (versión 2.5). Reporter automatiza la generación del XML, pero tú sigues siendo responsable de validar la salida y de asegurar el cumplimiento de los requisitos regulatorios.

¿Qué es APIX 001?


El APIX 001 es un informe regulatorio mensual que los participantes de Pix —directos o indirectos— deben enviar al Banco Central de Brasil. Consolida las estadísticas operativas del ecosistema Pix de la institución durante un mes determinado.

Qué espera recibir el BACEN

El informe abarca diez secciones de datos:

Requisitos de envío

Atributos del encabezado

El elemento raíz <APIX001> requiere estos atributos:

Comprender la estructura de datos


Antes de construir la plantilla, es importante entender cómo se mapean los datos del plugin Pix con cada sección del APIX 001.

Fuentes de datos del plugin Pix

La plantilla consulta datos de las tablas del plugin Pix registradas como fuentes de datos en Reporter. Las entidades principales utilizadas son:
El plugin Pix no registra consultas al DICT actualmente. La tabla dict.entries almacena registros de claves, no consultas. Para ConsultasDict, obtenga esta métrica desde el monitoreo de infraestructura o logs del API gateway. El placeholder en la plantilla se incluye solo como referencia estructural.
| dict.claims | Reclamos DICT | Reclamos de portabilidad y titularidad |
El prefijo de la fuente de datos (por ejemplo, pix_btg) depende de cómo registres el plugin Pix en Reporter. Reemplázalo por el nombre real de tu fuente de datos.

Estructura de la tabla de transferencias

Estructura de la tabla de devoluciones

Códigos de motivo de devolución

Estructura del cargo de tarifa (JSONB)

El campo fee_charge es una columna JSONB poblada solo para transacciones CASHIN (recepción):
Las transacciones CASHOUT no tienen cargos de tarifa en el modelo de producto actual. Los ingresos provenientes de fuentes CASHOUT deben reportarse como cero, a menos que tu implementación cobre tarifas en transferencias salientes.

Mapeo de datos


Tipos de detalle de transacción

El detalle tipo 7 debe contabilizar solo rechazos por indicio de fraude — no todas las transacciones rechazadas. La plantilla actual usa status == "REJECTED" como filtro simplificado. En producción, cruce con dict.infraction_reports (filtrando por situation_type de fraude) o aplique códigos específicos de failed_reason. Valide esta lógica con su equipo de ingeniería antes de enviar al BACEN.

Finalidades de transacción

El informe requiere exactamente 12 entradas de transacción — una por cada combinación de 3 tipos de detalle × 4 finalidades. Las entradas sin datos coincidentes deben aparecer igualmente con valores en cero.

Fuentes de ingresos

Tipos de detalle de devolución

Tipos de detalle de bloqueo cautelar

Tipos de pagador en autorizaciones (Pix Automático)

Uso de Reporter


A continuación se muestra la plantilla completa para generar el APIX 001 en Reporter. Este ejemplo utiliza pix_btg como prefijo de la fuente de datos — reemplázalo por el nombre configurado en tu fuente de datos de Reporter.

Desglose del código


Elemento raíz

  • DtArquivo: fecha de generación del archivo, insertada dinámicamente mediante date_time
  • Ano y Mes: año y mes de referencia, pasados como parámetros del informe
  • ISPB: primeros 8 dígitos del CNPJ de la institución, extraídos con el filtro slice desde los datos de onboarding de Midaz
  • TipoEnvio: I para inclusión, S para sustitución de datos previamente aprobados

Sección de transacciones

La plantilla declara explícitamente las 12 entradas requeridas (3 tipos de detalle × 4 finalidades). Se utilizan consultas dinámicas cuando hay datos disponibles:
  • count_by cuenta los registros que cumplen la condición del filtro
  • sum_by ... by "field" suma un campo específico entre los registros coincidentes
  • ValorEspecie es 0.00 para transferencias estándar (solo distinto de cero para Pix Saque/Troco)
Las entradas para las finalidades 2, 3 y 4 (Pix Saque, Troco, Automático) usan ceros codificados cuando esas funciones no están implementadas. El tipo de detalle 6 (liquidación de participante directo) también usa ceros para participantes indirectos.

Sección de devoluciones

Las devoluciones se separan por código de motivo a través del campo reason:
  • FR01 se mapea al tipo de detalle 1 del BACEN (fraude vía MED)
  • Todos los demás códigos de motivo (BE08, MD06, SL02) se mapean al tipo de detalle 2

Sección de ingresos

Los ingresos se extraen del campo JSONB fee_charge.totalAmount, filtrando por tipo de transferencia y tipo de persona:
El campo JSONB fee_charge utiliza sintaxis de ruta de campo anidada (fee_charge.totalAmount). El motor Pongo2 de Reporter recorre la estructura JSON para acceder al valor anidado.

Métricas de tiempo y disponibilidad

Las métricas de tiempo (tiempos de procesamiento de transacciones, tiempos de operación DICT) y el índice de disponibilidad deben obtenerse de tu sistema de monitoreo de infraestructura — no derivan de datos transaccionales. Completa estos valores a partir de tus logs del SPI y del monitoreo de uptime.

Consultas DICT

Este placeholder cuenta entradas DICT (registros de claves) como referencia estructural. En producción, reemplace dict.entries con la fuente de datos real de consultas al DICT o complete QtdConsultas manualmente desde métricas de infraestructura.

Ejemplo renderizado


Ejemplo de solicitud con filtro de fecha


Para generar el APIX 001 de un mes específico, envía una solicitud POST /v1/reports con el encabezado X-Organization-Id y el siguiente cuerpo:
Las fechas deben estar en formato ISO 8601 con zona horaria UTC (Z). Asegúrate de cubrir todo el mes de referencia — desde el primer hasta el último segundo.

Reglas de validación XSD


Restricciones clave del XSD oficial APIX 001 (versión 2.5) que tus datos deben cumplir:
El BACEN valida tanto la estructura como la cardinalidad. Si tu informe tiene menos o más entradas de las esperadas en cualquier sección, el envío será rechazado.

Buenas prácticas


Entradas con valor cero

Aunque no haya transacciones para una combinación dada, la entrada debe seguir apareciendo en el informe con valores en cero. El BACEN exige las 12 entradas de transacción, las 4 entradas de ingresos, las 4 entradas de bloqueo cautelar y las 2 entradas de autorización — independientemente de si existen datos.

Envíos de sustitución

Usa TipoEnvio="S" solamente para sustituir un envío previamente aprobado. Si tu primer envío fue rechazado, vuelve a enviarlo con TipoEnvio="I".

Precisión de valores

Todos los valores monetarios deben tener exactamente 2 decimales. Usa las funciones de formato de Reporter o asegúrate de que tu fuente de datos entregue valores ya formateados.

Origen de las métricas de tiempo

Los percentiles de tiempo de transacción y los tiempos de operación DICT deben provenir de tu monitoreo de infraestructura — no de datos transaccionales. Estas métricas reflejan la experiencia real del usuario desde la iniciación del pago hasta la confirmación de la liquidación. El BACEN puede auditar estos valores contra los logs del SPI.

Campos anidados en JSONB

Los cálculos de ingresos utilizan rutas de campo anidadas (por ejemplo, fee_charge.totalAmount) para acceder a valores dentro de columnas JSONB. Asegúrate de que tu versión de Reporter admita el análisis de campos anidados en funciones de agregación.
Valida siempre el XML renderizado contra el XSD oficial del BACEN antes del envío. Puedes descargar el esquema desde el portal de documentos regulatorios del BACEN.