Saltar al contenido principal
El Plugin Pix Indirecto (BTG) se conecta con varios servicios de Lerian y proveedores externos para procesar pagos Pix. Para configurarlo, defines la conexión del plugin con cada servicio y preparas los datos que esos servicios necesitan. El plugin se ejecuta en dos capas principales. La Aplicación expone la API de Pix y procesa la lógica de negocio. Los Workers atienden los webhooks entrantes de BTG, la entrega de eventos salientes a tu sistema, la conciliación de DICT con BACEN y los pagos programados. Ambas capas comparten la misma configuración base (licencia, Midaz, CRM, BTG), pero tienen sus propios ajustes específicos de servicio.

Prerrequisitos


Antes de empezar, confirma que tienes:
  • Tu ISPB (Identificador do Sistema de Pagamentos Brasileiro): el identificador de 8 caracteres derivado del CNPJ de tu institución
  • Acceso a tus instancias de Midaz y CRM (desplegadas y en ejecución)
  • Acceso a los servicios del proveedor BTG (BTG entrega las credenciales)
El plugin usa PIX_ISPB para generar y verificar los IDs end-to-end. Las transferencias intra-PSP (P2P) las detecta en cambio por la cuenta alias del pagador: consulta Transferencias intra-PSP.

1. Licencia


El plugin requiere una licencia válida para operar. Lerian entrega la clave de licencia durante el onboarding.
Documentación relacionada: La licencia de Lerian

2. Access Manager (opcional)


Access Manager atiende la autenticación del plugin. Cuando está habilitado, valida las solicitudes entrantes antes de que lleguen a la API del plugin.
Cuando PLUGIN_AUTH_ENABLED=true, el plugin valida el header Authorization de cada solicitud para confirmar que:
  • El token pertenece a un usuario o una aplicación autorizados
  • El token concede acceso al endpoint y al método de la API solicitados
Las credenciales de cliente (CLIENT_ID / CLIENT_SECRET) de Midaz y del CRM son obligatorias incluso cuando PLUGIN_AUTH_ENABLED=false. Las credenciales de comisiones son obligatorias cuando CASHIN_FEE_CALCULATION_TYPE=segment.
Documentación relacionada: Access Manager

3. Midaz


Midaz es el ledger central de todas las transacciones Pix que procesa el plugin. El plugin registra cada operación de cash-in, cash-out y devolución en Midaz como una transacción de partida doble.

Conexión


Requisitos del activo


Configura un activo en tu organización y ledger con estas propiedades: Vincula todas las cuentas a tu ledger con el activo BRL. El plugin rechaza las operaciones sobre cuentas que no cumplen esta configuración.

Configuración de cuentas


Antes de usar el plugin, crea una cuenta en Midaz para cada cliente bajo tu ISPB. Usa el endpoint Create an Account para configurar las cuentas. Cada cuenta debe:
  • Pertenecer a la organización y al ledger que configuraste
  • Usar el activo BRL

Header X-Account-Id


Muchas operaciones Pix requieren el header X-Account-Id para identificar qué cuenta ejecuta la acción. Este ID corresponde al ID de la cuenta del ledger de Midaz. Cuando llamas a un endpoint del plugin, el valor de X-Account-Id le indica al plugin:
  • Qué cuenta usar para las operaciones del ledger
  • Qué datos de cliente obtener del CRM
  • Qué saldo validar y actualizar

Cómo el plugin usa el ID de cuenta

El plugin usa el ID de cuenta de forma distinta según el tipo de operación:

Cumplimiento de la cuenta


El plugin verifica el estado de la cuenta en Midaz. Rechaza una iniciación de transferencia, un cash-out o una devolución desde una cuenta BLOCKED. También rechaza un Pix entrante a una cuenta que no está ACTIVE. Para impedir liquidaciones Pix en una cuenta específica, bloquéala directamente en Midaz. El plugin recibe un rechazo cuando intenta registrar la transacción. Documentación relacionada:

4. CRM


El CRM guarda la información del cliente (titular) y sus cuentas bancarias asociadas. Cada cuenta de Midaz debe tener un titular y una cuenta alias correspondientes en el CRM para ejecutar operaciones Pix. El plugin consulta los datos del CRM para:
  • Registrar y validar las claves Pix
  • Construir los mensajes de pago para BACEN
  • Autorizar las transacciones entrantes
  • Procesar los workflows de devolución y de disputa

Conexión


Titulares


Los datos del titular representan al cliente dueño de la cuenta. Crea cada titular en el CRM antes de ejecutar cualquier operación Pix para ese cliente.

Campos obligatorios

Campos opcionales

Documentación relacionada: Create a Holder

Cuentas alias


Las cuentas alias vinculan una cuenta de Midaz con sus datos bancarios. Cada cuenta alias debe incluir la información bancaria que el ecosistema Pix requiere para procesar transacciones.

Campos obligatorios

El campo bankingDetails.branch debe contener exactamente 4 dígitos. Rellena con ceros a la izquierda si hace falta. Por ejemplo, si el número de sucursal es 1, regístralo como 0001. El plugin solo puede validar la cuenta en el CRM cuando el código de sucursal sigue este formato.
Cuando el dígito verificador es una letra, el DICT lo recibe como 0: una cuenta guardada como AB1234567X se registra en el DICT como AB12345670. Mantén el valor original en el CRM.

Tipos de cuenta admitidos

No puedes registrar ni reclamar una clave Pix para una cuenta SLRY. El plugin devuelve PIX-0129. Documentación relacionada: Create an Alias Account

5. Proveedor BTG


BTG es el participante directo que conecta tu institución con la infraestructura Pix de BACEN. BTG entrega las credenciales directamente cuando tu institución se suscribe a la integración indirecta con BACEN.

Conexión


mTLS (seguridad de los webhooks)


El TLS mutuo (mTLS) valida el certificado de BTG en las solicitudes de webhook. Confirma que los webhooks entrantes se originan en BTG. Tu ingress reenvía el certificado que presenta BTG en el header MTLS_CERTIFICATE_HEADER (predeterminado X-Client-Cert).
Habilita siempre mTLS en los entornos de producción. Deshabilítalo solo durante el desarrollo local.
Para presentar un certificado de cliente en las llamadas del propio plugin a BTG, define BTG_OUTBOUND_MTLS_ENABLED=true con CLIENT_TLS_CERT_FILE y CLIENT_TLS_KEY_FILE. Consulta Variables de entorno.

6. Servicio de comisiones (opcional)


Habilita el cálculo de comisiones para cobrar y distribuir comisiones de forma automática sobre los pagos entrantes. Es opcional. Si no lo configuras, el plugin procesa las transacciones sin cálculo de comisiones.

Conexión


Cómo funciona


Cuando defines CASHIN_FEE_CALCULATION_TYPE=segment, el plugin:
  1. Obtiene el segmento asociado a la cuenta receptora
  2. Calcula las comisiones aplicables antes de procesar la transacción en Midaz
  3. Distribuye el pago entrante según las reglas de paquete vinculadas a ese segmento

Pasos de configuración


  1. Crea segmentos en Midaz: define los segmentos de cuenta que determinan las reglas de comisión
  2. Configura paquetes en Fees Engine: vincula cada segmento con sus reglas de cálculo de comisiones
  3. Asigna segmentos a las cuentas: crea o actualiza cuentas de Midaz con el ID de segmento correspondiente
Documentación relacionada:

  1. Conciliación de DICT (VSync)


VSync concilia tus datos locales de DICT con BACEN al procesar todos los eventos del día relacionados con claves. Mantiene tu estado local consistente con los registros de referencia de BACEN.
Durante la ventana, la API rechaza las solicitudes de creación, actualización y eliminación de claves Pix para evitar inconsistencias de datos con BACEN. Planifica la ventana de bloqueo de escritura en periodos de bajo tráfico.

Configuración del cache de Redis


VSync usa Redis para guardar en cache las entradas de BTG/DICT y los titulares del CRM durante la conciliación. En los despliegues con Helm, el REDIS_HOST predeterminado apunta al Valkey incluido, así que una instalación estándar no requiere configuración adicional.

Conexión (siempre se usa)

Pool de conexiones y reintentos (siempre se usa)

Autenticación (opcional, solo se usa si se define)

TLS (opcional, solo se usa si REDIS_TLS=true)

Autenticación IAM de GCP (opcional, solo se usa si REDIS_USE_GCP_IAM=true)

TTL del cache de VSync (siempre se usa)

8. Seguridad de los webhooks internos


El plugin usa un canal de comunicación interno entre los servicios Worker y Aplicación. Las firmas HMAC-SHA256 protegen este canal para evitar manipulaciones y ataques de repetición.
Usa exactamente el mismo valor de INTERNAL_WEBHOOK_SECRET en los servicios Aplicación y Worker. Una discrepancia hace que el plugin rechace todos los webhooks internos.

9. Capas de workers


El plugin opera con cuatro workers, y cada uno atiende una parte distinta del ciclo de vida de Pix. Cada worker se ejecuta como un servicio separado junto a la aplicación principal.

Worker de entrada


La Aplicación recibe las notificaciones de webhook de BTG y las guarda. Después, el worker de entrada entrega cada notificación a los endpoints internos de la Aplicación para su procesamiento.

Worker de salida


El worker de salida envía notificaciones de evento desde el plugin hacia tu aplicación por webhooks. Así tu sistema se mantiene informado sobre los eventos Pix (transferencias, devoluciones, reclamaciones, disputas).

Prioridad de resolución de URL

El plugin resuelve las URL de webhook en este orden, y usa la primera que coincide:
  1. URL de entidad: una URL específica del tipo de evento (por ejemplo, WEBHOOK_DICT_CLAIM_URL)
  2. URL de flujo: una URL para la categoría más amplia (por ejemplo, WEBHOOK_DICT_URL)
  3. URL predeterminada: la URL de respaldo (WEBHOOK_DEFAULT_URL)
Cada entidad necesita su propia variable WEBHOOK_<FLOW>_<ENTITY>_*. Consulta Webhooks. Para los tipos de evento de webhook, los payloads, el comportamiento de reintento y las mejores prácticas, consulta la guía de Webhooks.

Worker de conciliación


El worker de conciliación necesita las mismas credenciales que la capa Aplicación para estos servicios:
  • CRM: URL y credenciales
  • BTG: URL y credenciales
  • Midaz: ID de organización
También llama a la API de la Aplicación con sus propias credenciales de cliente: PLUGIN_PIX_BTG_BASE_URL, PLUGIN_PIX_BTG_CLIENT_ID y PLUGIN_PIX_BTG_CLIENT_SECRET, con el endpoint de token en PLUGIN_AUTH_URL. Consulta las secciones correspondientes de más arriba para conocer los detalles de cada configuración. Puedes restringir cuándo opera el worker si configuras una ventana de tiempo específica. Sirve para programar las tareas de conciliación en horas de baja demanda. El plugin admite ventanas de tiempo que cruzan la medianoche.
Si dejas ambos campos vacíos, el worker se ejecuta sin restricciones de horario (24/7).
El worker siempre interpreta la ventana de conciliación en la zona horaria America/Sao_Paulo (BRT), sea cual sea el reloj del contenedor o la variable TZ. El worker incluye los datos de zonas horarias de IANA. La ventana se mantiene alineada con el bloqueo de escritura de DICT de BACEN, incluso en imágenes mínimas o distroless. No necesitas definir TZ.

Worker de programación


El worker de programación ejecuta los pagos Pix programados cuando vencen. Viene desactivado de forma predeterminada. Llama a la API de la Aplicación con las mismas variables de credenciales de cliente que el worker de conciliación.
Los endpoints de cashout y de devolución de Pix Indirecto admiten idempotencia con el header de solicitud X-Idempotency. El plugin guarda una respuesta reutilizable durante IDEMPOTENCY_RESPONSE_TTL segundos (predeterminado 86400, 24 horas). Para estrategias de reintento y detalles de implementación, consulta Reintentos e idempotencia.

10. Observabilidad (OpenTelemetry)


El plugin viene con instrumentación de OpenTelemetry (trazas, métricas y logs) en las capas Aplicación y Worker. El plugin traza los flujos Pix de extremo a extremo: transferencias (cash-in y cash-out), devoluciones, webhooks entrantes y salientes, conciliación de DICT y liquidación intra-PSP. Puedes seguir un solo pago a través del plugin y de las llamadas a Midaz, al CRM y a BTG. La telemetría está deshabilitada de forma predeterminada. Habilítala y apunta el exportador OTLP a tu collector:
Cuando ENABLE_TELEMETRY=true, OTEL_EXPORTER_OTLP_ENDPOINT es obligatorio. Define las mismas variables de OTel en la Aplicación y en cada Worker para que las trazas se correlacionen entre servicios.

Exportador: gRPC y TLS


El plugin exporta trazas, métricas y logs por OTLP/gRPC. El esquema del endpoint controla la seguridad del transporte:
Cuando OTEL_RESOURCE_DEPLOYMENT_ENVIRONMENT es production o prod, el plugin se niega a arrancar con un exportador inseguro. Usa un endpoint https://, o define ALLOW_INSECURE_OTEL con una justificación breve solo cuando controlas por completo la ruta de red hasta el collector.

Ejemplo: endpoint del collector


Apunta el plugin a cualquier collector compatible con OTLP (el OpenTelemetry Collector, Grafana LGTM/Alloy, etc.) que escuche en el puerto gRPC:
Después el collector distribuye la telemetría a tus backends de trazas, métricas y logs.

11. Health y readiness


La Aplicación y los Workers exponen una sonda de readiness en /readyz (junto con las verificaciones estándar de liveness). Apunta la sonda de readiness de tu orquestador a este endpoint para que el tráfico se enrute solo cuando el servicio y sus dependencias están listos.

Propósito de la transferencia (MED 2.0)


El endpoint de cashout acepta un header opcional X-Purpose que identifica el propósito de la transacción, usado en las transferencias de devolución de MED 2.0. Cuando se omite, el valor predeterminado es TRANSFER.
Para los valores admitidos, consulta Transferencias.

Próximos pasos


Con el plugin configurado, puedes empezar a operar Pix.