Saltar al contenido principal

Documentation Index

Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt

Use this file to discover all available pages before exploring further.

La configuración del plugin Bank Transfer ocurre en tres niveles. La mayoría de las decisiones de negocio pueden cambiarse en tiempo de ejecución sin reiniciar el servicio.

Niveles de configuración


NivelQuién lo gestionaQué controla¿Requiere reinicio?
Infraestructura (variables de entorno)DevOpsURLs, credenciales, autenticación, timeouts
Configuración de tenant (Admin API)Equipo de productoLímites, política de tarifas, anulaciones de horarioNo
Configuración de cuenta (Admin API)Equipo de productoLímites y restricciones por cuentaNo

Decisiones de negocio que puede configurar


Estas son las configuraciones que interesan a los GPMs y equipos de producto. Todas se gestionan a través de la Admin API en tiempo de ejecución — sin necesidad de despliegue.

Límites de transferencia

Establezca límites de volumen diario y mensual en dos niveles:
  • Por tenant — aplica a todas las transferencias de la organización
  • Por cuenta — aplica a una cuenta de usuario final específica (anula los valores predeterminados del tenant)
Los límites cubren tanto el monto total como el número de transacciones. Configúrelos para gestionar el riesgo y cumplir con los requisitos del BACEN.

Política de tarifas

Controle si el plugin cobra una tarifa en las transferencias TED OUT, TED IN y P2P. Las reglas de tarifas se definen en el Fees Engine y se aplican por organización. Consulte Fees Engine para detalles de configuración.

Fail-open vs. fail-closed

Si el servicio de cálculo de tarifas no está disponible al momento de una transferencia, tiene dos opciones:
  • Fail-open — permite que la transferencia proceda sin cobrar una tarifa
  • Fail-closed — bloquea la transferencia hasta que el servicio de tarifas esté disponible nuevamente
El valor predeterminado es fail-closed. Cambie esto por organización a través de la Admin API.

Recepción de TED IN

Las transferencias entrantes están deshabilitadas por defecto. Habilite TED IN por organización una vez que sus credenciales JD SPB estén configuradas y el worker de polling esté activo.

Anulaciones de horario operativo

El plugin aplica la ventana operativa TED del BACEN por defecto. Puede configurar ventanas personalizadas por tenant — por ejemplo, restringir las transferencias solo al horario comercial — dentro de los límites del BACEN.

Configuración de infraestructura


Esta sección es para equipos de DevOps. Estas variables se establecen en el momento del despliegue y requieren un reinicio del servicio para tener efecto.

Aplicación

VariablePor defectoRequeridoDescripción
ENV_NAMEdevelopmentNoEntorno (development, staging, production)
LOG_LEVELinfoNoVerbosidad de logs (debug, info, warn, error)
DEPLOYMENT_MODEbyocNoSabor de despliegue. byoc = Bring Your Own Cloud (single-tenant, gestionado por el operador). Activa comportamientos internos SaaS vs. BYOC.
SERVER_ADDRESS:8080NoDirección y puerto del servidor HTTP
HTTP_BODY_LIMIT_BYTES1048576NoTamaño máximo del cuerpo de la solicitud HTTP en bytes
INFRA_CONNECT_TIMEOUT_SEC30NoTiempo de espera de conexión para servicios de infraestructura en segundos
ALLOW_PRIVATE_UPSTREAMSfalseNo⚠️ Permite que adaptadores de salida (CRM, Fees, JD, Midaz) resuelvan a IPs RFC1918/loopback. El valor por defecto false es fail-closed: producción bloquea el pivot DNS hacia el espacio privado. Habilítelo en dev o en BYOC in-cluster, donde los upstreams legítimamente viven en IPs privadas. Los endpoints de metadatos en cloud permanecen bloqueados independientemente de este flag.

TLS

VariablePor defectoRequeridoDescripción
SERVER_TLS_CERT_FILE-NoRuta al archivo de certificado TLS. Debe definirse junto con SERVER_TLS_KEY_FILE.
SERVER_TLS_KEY_FILE-NoRuta al archivo de clave privada TLS. Debe definirse junto con SERVER_TLS_CERT_FILE.
TLS_TERMINATED_UPSTREAMfalseNoEstablezca en true cuando el TLS es terminado por un balanceador de carga o proxy inverso.

Headers de proxy

Se utilizan cuando el servicio se ejecuta detrás de un balanceador de carga o proxy inverso. Necesarios para extraer la IP real del cliente para rate limiting y logs de auditoría.
VariablePor defectoRequeridoDescripción
SERVER_PROXY_HEADER-NoHeader HTTP que transporta la IP real del cliente (p. ej. X-Forwarded-For, X-Real-IP). Vacío deshabilita el parseo del header de proxy.
SERVER_TRUSTED_PROXIES-Si proxy header está definidoLista separada por coma de IPs/CIDRs de proxies confiables. Requerido cuando SERVER_PROXY_HEADER está definido para evitar spoofing de IP.

CORS

VariablePor defectoRequeridoDescripción
CORS_ALLOWED_ORIGINShttp://localhost:3000NoLista de orígenes permitidos separados por coma. Wildcards (*) y orígenes localhost son rechazados en producción.
CORS_ALLOWED_METHODSGET,POST,PUT,PATCH,DELETE,OPTIONSNoMétodos HTTP permitidos.
CORS_ALLOWED_HEADERSOrigin,Content-Type,Accept,Authorization,X-Request-ID,X-Organization-Id,X-IdempotencyNoHeaders de solicitud permitidos.

Autenticación

Este plugin delega la autorización a plugin-auth. Configure la conexión con las variables a continuación.
VariablePor defectoRequeridoDescripción
PLUGIN_AUTH_ENABLEDfalseNoHabilita la autorización vía plugin-auth. Establezca en true en producción.
PLUGIN_AUTH_ADDRESS-Si habilitadoURL del servicio plugin-auth. Debe usar HTTPS en producción.
PLUGIN_AUTH_CLIENT_IDplugin-br-bank-transferSi habilitadoOAuth client ID utilizado por este plugin.
PLUGIN_AUTH_CLIENT_SECRET-Si habilitadoOAuth client secret utilizado por este plugin.
AUTH_CACHE_TTL_SEC60NoDuración (en segundos) para almacenar en caché las decisiones de autorización. Las decisiones denegadas se almacenan en caché por TTL/4.
Cuando PLUGIN_AUTH_ENABLED=true, PLUGIN_AUTH_ADDRESS debe usar HTTPS en entornos de producción. Las direcciones HTTP son rechazadas al inicio.

Test admin (solo no-producción)

BTF_TEST_ADMIN_ENABLED debe permanecer en false en producción. Expone endpoints administrativos solo de prueba (p. ej. POST /admin/test/circuit-breakers/reset) que no tienen tenant y omiten la autenticación de producción. Solo se habilita en el mock-lane de docker-compose para pruebas E2E; cualquier despliegue con este flag en true fuera de una red de pruebas aislada constituye un error de configuración.
VariablePor defectoRequeridoDescripción
BTF_TEST_ADMIN_ENABLEDfalseNo⚠️ Expone endpoints administrativos solo de prueba. Debe permanecer en false en producción.
BTF_TEST_ADMIN_TOKEN-Si admin habilitadoToken requerido cuando BTF_TEST_ADMIN_ENABLED=true. Se envía en el header X-Test-Admin-Token. Es intencionalmente independiente de la auth de producción (superficie solo de prueba, sin tenant).

Rate limiting

VariablePor defectoRequeridoDescripción
RATE_LIMIT_ENABLEDtrueNoHabilita rate limiting por cliente. Forzado a true en producción.
RATE_LIMIT_MAX100NoMáximo de solicitudes por ventana por cliente.
RATE_LIMIT_EXPIRY_SEC60NoDuración de la ventana deslizante en segundos.

Idempotencia

VariablePor defectoRequeridoDescripción
IDEMPOTENCY_RETRY_WINDOW_SEC300NoVentana de tiempo (en segundos) durante la cual una clave de idempotencia es válida.
IDEMPOTENCY_REQUIRE_REDISfalseNoCuando es true, rechaza solicitudes si Redis no está disponible en lugar de usar fallback.
DUPLICATE_GUARD_TTL_SEC300NoTTL (en segundos) para la ventana de duplicate-guard en Redis. Complementa IDEMPOTENCY_RETRY_WINDOW_SEC; este TTL controla el tiempo de vida de la entrada del duplicate-guard.

Multi-tenancy

VariablePor defectoRequeridoDescripción
MULTI_TENANT_ENABLEDfalseNoHabilita multi-tenancy a nivel de infraestructura con bases de datos aisladas por tenant.
DEFAULT_TENANT_ID11111111-1111-1111-1111-111111111111NoUUID de tenant de fallback cuando auth está deshabilitado. Debe ser un UUID válido.
DEFAULT_TENANT_SLUGdefaultNoIdentificador slug del tenant por defecto.
DEFAULT_ORGANIZATION_ID-NoID de organización usado en modo single-tenant (cuando MULTI_TENANT_ENABLED=false). Complementa DEFAULT_TENANT_ID.
AWS_REGION-Si backend de secretos AWSRegión AWS para lecturas de secretos por tenant en Secrets Manager. Requerido cuando MULTI_TENANT_ENABLED=true y el backend de secretos es AWS.
MULTI_TENANT_INTEGRATION_SECRET_NAME_TEMPLATEtenants/{env}/{tenantId}/{applicationName}/integration/configurationNoTemplate del nombre del secreto en AWS Secrets Manager. Placeholders: {env}, {tenantId}, {applicationName}.
TENANT_IDS-NoLista de UUIDs de tenant permitidos, separados por coma. Cuando está definida, las solicitudes de cualquier otro tenant son rechazadas. Déjelo sin definir para permitir todos los tenants configurados.
MULTI_TENANT_URL-Sí (cuando habilitado)URL de la API HTTP del Tenant Manager.
MULTI_TENANT_REDIS_HOST-NoHost Redis para descubrimiento de tenants vía Pub/Sub.
MULTI_TENANT_REDIS_PORT6379NoPuerto de Redis para Pub/Sub.
MULTI_TENANT_REDIS_PASSWORD-NoContraseña de Redis para Pub/Sub.
MULTI_TENANT_REDIS_TLSfalseNoHabilita TLS para la conexión Redis Pub/Sub.
MULTI_TENANT_TIMEOUT30NoTimeout HTTP en segundos para llamadas a la API del Tenant Manager.
MULTI_TENANT_MAX_TENANT_POOLS100NoMáximo de pools de conexión simultáneos por tenant.
MULTI_TENANT_IDLE_TIMEOUT_SEC300NoTimeout de inactividad en segundos antes de descartar un pool de tenant.
MULTI_TENANT_CIRCUIT_BREAKER_THRESHOLD5NoNúmero de fallos antes de que el circuit breaker se abra.
MULTI_TENANT_CIRCUIT_BREAKER_TIMEOUT_SEC30NoTimeout de recuperación en segundos del circuit breaker.
MULTI_TENANT_SERVICE_API_KEY-Sí (cuando habilitado)Clave de API para el endpoint /settings del Tenant Manager.
MULTI_TENANT_CACHE_TTL_SEC120NoTTL en segundos del caché in-memory de configuración de tenant. Recargable vía systemplane API.
MULTI_TENANT_CONNECTIONS_CHECK_INTERVAL_SEC30NoIntervalo en segundos para revalidación asíncrona de configuraciones de pool. Solo bootstrap (no recargable).
BYOC single-tenant:
DEFAULT_TENANT_ID=<su-tenant-uuid>
# Opcional: restringir a UUIDs de tenant específicos
TENANT_IDS=<uuid1>,<uuid2>
SaaS multi-tenant:
MULTI_TENANT_ENABLED=true
MULTI_TENANT_URL=http://tenant-manager:4003
MULTI_TENANT_SERVICE_API_KEY=su-api-key
MULTI_TENANT_REDIS_HOST=redis.example.com

PostgreSQL

VariablePor defectoRequeridoDescripción
POSTGRES_HOSTlocalhostHost primario de PostgreSQL.
POSTGRES_PORT5432NoPuerto primario de PostgreSQL.
POSTGRES_USERplugin-br-bank-transferUsuario de base de datos.
POSTGRES_PASSWORD-Contraseña de base de datos. Requerido en producción.
POSTGRES_DBplugin-br-bank-transferNombre de la base de datos.
POSTGRES_SSLMODErequireNoModo SSL. disable es rechazado en producción.
POSTGRES_MAX_OPEN_CONNS25NoMáximo de conexiones abiertas.
POSTGRES_MAX_IDLE_CONNS5NoMáximo de conexiones inactivas.
POSTGRES_CONN_MAX_LIFETIME_MINS30NoTiempo máximo de vida de la conexión en minutos.
POSTGRES_CONN_MAX_IDLE_TIME_MINS5NoTiempo máximo inactivo de la conexión en minutos.
POSTGRES_CONNECT_TIMEOUT_SEC10NoTimeout de conexión en segundos.
MIGRATIONS_PATHmigrationsNoRuta a los archivos de migración.

Réplica PostgreSQL

Configure una réplica de lectura para descarga de consultas. Todos los campos usan valores primarios como fallback cuando no están definidos.
VariablePor defectoRequeridoDescripción
POSTGRES_REPLICA_HOST-NoHost de la réplica. No definido = sin réplica.
POSTGRES_REPLICA_PORT-NoPuerto de la réplica.
POSTGRES_REPLICA_USER-NoUsuario de la réplica.
POSTGRES_REPLICA_PASSWORD-NoContraseña de la réplica.
POSTGRES_REPLICA_DB-NoNombre de la base de datos de la réplica.
POSTGRES_REPLICA_SSLMODE-NoModo SSL de la réplica.

MongoDB

MongoDB es necesario para la persistencia de eventos de auditoría de transferencias. El servicio no se iniciará sin una conexión MongoDB válida.
VariablePor defectoRequeridoDescripción
MONGO_ENABLEDtrueHabilita la conexión MongoDB. Debe ser true en todos los entornos.
MONGO_URI-Cadena de conexión MongoDB (ej: mongodb://user:pass@host:27017). Debe incluir credenciales y TLS en producción.
MONGO_DATABASE-Nombre de la base de datos MongoDB.
MONGO_MAX_POOL_SIZE25NoTamaño máximo del pool de conexiones.
MONGO_SERVER_SELECTION_TIMEOUT_MS3000NoTimeout de selección de servidor en milisegundos.
MONGO_HEARTBEAT_INTERVAL_MS10000NoIntervalo de heartbeat en milisegundos.
MONGO_TLS_CA_CERT-NoCertificado CA codificado en base64 para TLS de MongoDB. Úselo cuando MongoDB requiere TLS con CA personalizado (p. ej. Atlas, instancias privadas con certs autofirmados).

Redis

VariablePor defectoRequeridoDescripción
REDIS_HOSTlocalhost:6379Host y puerto de Redis.
REDIS_MASTER_NAME-NoNombre del master Redis Sentinel (si usa Sentinel).
REDIS_PASSWORD-NoContraseña de Redis (si la autenticación está habilitada).
REDIS_DB0NoNúmero de base de datos Redis.
REDIS_PROTOCOL3NoVersión del protocolo Redis (2 o 3).
REDIS_TLSfalseNoHabilita TLS para conexiones Redis.
REDIS_CA_CERT-NoCertificado CA para TLS Redis.
REDIS_POOL_SIZE10NoTamaño del pool de conexiones.
REDIS_MIN_IDLE_CONNS2NoMínimo de conexiones inactivas.
REDIS_READ_TIMEOUT_MS3000NoTimeout de lectura en milisegundos.
REDIS_WRITE_TIMEOUT_MS3000NoTimeout de escritura en milisegundos.
REDIS_DIAL_TIMEOUT_MS5000NoTimeout de conexión en milisegundos.
Redis es una dependencia obligatoria. Si Redis no está disponible al inicio o se vuelve inalcanzable en tiempo de ejecución, el servicio reportará como DOWN a la sonda de readiness de la orquestación y dejará de aceptar solicitudes. Redis es necesario para el caché de claves de idempotencia y la detección de duplicados.

Conexión JD SPB

Estas variables son requeridas para despliegues BYOC. En modo SaaS, Lerian gestiona la conexión JD.
VariablePor defectoRequeridoDescripción
JD_BASE_URL-Si BYOCURL base de la API JD SPB.
JD_SOAP_PATH/soapNoRuta del endpoint SOAP JD.
JD_ORIGIN_ISPB-Si BYOCCódigo ISPB de origen.
JD_LEGACY_CODE-Si BYOCCódigo legacy JD (máx. 10 caracteres).
JD_USER_CODE-Si BYOCCódigo de usuario JD (máx. 10 caracteres).
JD_PASSWORD-Si BYOCContraseña JD (encriptada en reposo).
JD_PRIVATE_KEY_PEM-Si BYOCContenido PEM de clave privada RSA para firma XML.
JD_PUBLIC_KEY_PEM-NoPEM de clave pública para validar firmas en respuestas de JD. Requerido cuando JD_VALIDATE_EXTERNAL_SIGNATURE=true.
JD_PRIVATE_KEY_KEYINFO-NoBloque XML <KeyInfo> embebido en la firma SOAP (p. ej. cert X509 codificado en base64). Requerido para el envoltorio WS-Security cuando JD demanda identificación por certificado.
JD_SIGNING_MODElocal_pemNoModo de firma SOAP. local_pem firma localmente con JD_PRIVATE_KEY_PEM; external_signer delega a un servicio remoto vía JD_EXTERNAL_SIGNER_URL.
JD_VALIDATE_EXTERNAL_SIGNATUREtrueNoValida firmas en respuestas de JD (o del firmador externo). El valor por defecto true mantiene la validación activa. Establezca en false solo para debug/sandbox sin PKI configurado.
JD_EXTERNAL_SIGNER_URL-Si JD_SIGNING_MODE=external_signerURL base del servicio de firma externo.
JD_EXTERNAL_SIGNER_AUTH_TOKEN-NoBearer token enviado en el header Authorization para llamadas al firmador externo.
JD_EXTERNAL_SIGNER_TIMEOUT_MS5000NoTimeout (en milisegundos) para llamadas al firmador externo.
JD_BACEN_ROUTING_ISPB00038166NoISPB de enrutamiento BACEN (el ISPB de JD/JDSPB). El valor por defecto 00038166 es el ISPB del banco JD. Cámbielo solo si el operador enruta a través de un PSP diferente.
JD_TIMEOUT_MS8000NoTimeout de solicitudes SOAP en milisegundos.
JD_MAX_RETRIES3NoMáximo de intentos de reintento para solicitudes JD.
JD_SANDBOX_MODEfalseNoHabilita modo sandbox JD. Rechazado en producción.

Polling JD

VariablePor defectoRequeridoDescripción
JD_POLLING_ENABLEDfalseNoHabilita worker de polling TED IN.
JD_POLL_INTERVAL_SECONDS30NoFrecuencia (en segundos) de verificación de TEDs entrantes.
JD_POLL_MAX_MESSAGES_PER_CYCLE50NoMáximo de mensajes procesados por ciclo de polling.
JD_POLL_MAX_RETRIES3NoMáximo de intentos de reintento por ciclo de polling.
JD_POLL_RECOVERY_BATCH_SIZE200NoTamaño del lote para polling de recuperación.
JD_POLL_DISABLE_OPERATING_HOURS_WINDOWtrueNoCuando es true, el poller RecebeMensagem ignora la ventana de horario operativo (TRANSFER_OPERATING_OPEN/CLOSE) y se ejecuta de forma continua. El valor por defecto es true porque JD puede entregar mensajes fuera de la ventana de transferencia del operador.
BTF_TED_IN_RETORNO_FILTER-NoFiltro TpRetorno separado por coma aplicado en el lado del servidor por RecebeMensagem. Vacío = sin filtro (recibe P/R/E/C). Nota: la spec de JD codifica TpRetorno como un solo elemento, por lo que solo el primer valor es respetado actualmente.
JD_POLLING_ENABLED está deshabilitado por defecto para despliegues más seguros. Antes de habilitarlo, asegúrese de que DEFAULT_TENANT_ID (o Pool Manager) esté configurado con un UUID válido. El polling JD no es compatible cuando MULTI_TENANT_ENABLED=true.

Servicios externos (Midaz)

VariablePor defectoRequeridoDescripción
MIDAZ_BASE_URL-URL base del servicio Midaz.
MIDAZ_TRANSACTION_URL-URL del servicio de transacciones Midaz.
MIDAZ_TIMEOUT_MS3000NoTimeout de solicitudes Midaz en milisegundos.
MIDAZ_MAX_RETRIES3NoIntentos de reintento al Midaz.
MIDAZ_OTEL_ENABLEDtrueNoHabilita tracing OpenTelemetry para llamadas Midaz.
MIDAZ_DEBUGfalseNoHabilita logging de debug para llamadas Midaz. Rechazado en producción.
MIDAZ_AUTH_ENABLEDfalseNoHabilita autenticación M2M para Midaz.
MIDAZ_AUTH_ADDRESS-Si authURL del servicio de autenticación para tokens M2M Midaz.
MIDAZ_CLIENT_ID-Si authOAuth client ID para M2M Midaz.
MIDAZ_CLIENT_SECRET-Si authOAuth client secret para M2M Midaz.
MIDAZ_BREAKER_FAILURES3NoUmbral de fallos del circuit breaker.
MIDAZ_BREAKER_TIMEOUT_SECONDS30NoTimeout de recuperación del circuit breaker en segundos.
BTF_MIDAZ_CB_ENABLEDtrueNoKill switch para el circuit breaker del cliente Midaz. Cuando es false, las llamadas a Midaz omiten el breaker (timeouts y reintentos siguen activos). Útil cuando inestabilidades intermitentes se amplifican en 500s sostenidos.

Servicios externos (CRM)

VariablePor defectoRequeridoDescripción
CRM_BASE_URL-URL del servicio CRM.
CRM_TIMEOUT_MS2000NoTimeout de solicitudes CRM en milisegundos.
CRM_MAX_RETRIES2NoIntentos de reintento al CRM.
CRM_AUTH_ENABLEDfalseNoHabilita autenticación M2M para CRM.
CRM_CLIENT_ID-Si authOAuth client ID para M2M CRM.
CRM_CLIENT_SECRET-Si authOAuth client secret para M2M CRM.
CRM_SENDER_LOOKUP_PATH_TEMPLATE-NoTemplate de path para lookup del remitente en el CRM (p. ej. /api/v1/accounts/{accountId}). Los placeholders los define el CRM del operador.
CRM_RECIPIENT_LOOKUP_PATH_TEMPLATE-NoTemplate de path para lookup del destinatario en el CRM.
CRM_HOLDER_LOOKUP_PATH_TEMPLATE-NoTemplate de path para lookup del titular de la cuenta en el CRM.

Servicios externos (Fees)

BTF_FEE_ENABLED es el switch maestro. Cuando es false (por defecto), no se construye el adaptador de Fees y cada transferencia procede con tarifa=0 sin llamada HTTP. Las demás variables FEES_* solo tienen efecto cuando BTF_FEE_ENABLED=true.
VariablePor defectoRequeridoDescripción
BTF_FEE_ENABLEDfalseNoSwitch maestro para la integración con plugin-fees. Cuando es false, no se construye el adaptador de Fees y todas las transferencias se ejecutan con tarifa=0 sin llamadas HTTP. Los operadores que ejecutan plugin-fees deben establecer esto explícitamente en true.
FEES_BASE_URL-Si habilitadoURL del servicio Fees Engine.
FEES_TIMEOUT_MS2000NoTimeout de solicitudes de tarifas en milisegundos.
FEES_MAX_RETRIES2NoIntentos de reintento al servicio de tarifas.
FEES_FAIL_CLOSED_DEFAULTfalseNoModo de fallo por defecto. true = bloquea transferencia cuando tarifas no está disponible.
FEES_MAX_FEE_AMOUNT_CENTS99999999NoMonto máximo de tarifa en centavos. Respuestas que exceden este valor son rechazadas.
FEES_REFUND_ON_DEVOLUCAOfalseNoCuando es true, las tarifas cobradas se reembolsan en devoluciones/reversas de TED. El valor por defecto false mantiene la tarifa retenida incluso en devolución.
FEES_AUTH_ENABLEDfalseNoHabilita autenticación M2M para Fees.
FEES_CLIENT_ID-Si authOAuth client ID para M2M Fees.
FEES_CLIENT_SECRET-Si authOAuth client secret para M2M Fees.

Resiliencia de Fees

BTF_FEES_TED_IN_FAIL_OPEN es true por defecto. Cuando plugin-fees no está disponible, los TEDs entrantes son acreditados con tarifa=0 (fail-open) para que los fondos lleguen al cliente. Operadores con un SLA que exige cobro en cada crédito entrante deben establecer esto en false (fail-closed). TED OUT es incondicionalmente fail-closed independientemente de este flag — el débito al remitente es autoritativo.
VariablePor defectoRequeridoDescripción
BTF_FEES_TED_IN_FAIL_OPENtrueNo⚠️ Cuando es true, TED IN procede con tarifa=0 si plugin-fees es inalcanzable. Cuando es false, TED IN se bloquea hasta que tarifas se recupere. TED OUT es siempre fail-closed.

Reconciliación

El worker de reconciliación recoge transferencias pendientes que nunca recibieron retorno de JD y las concilia contra el ledger.
VariablePor defectoRequeridoDescripción
BTF_RECONCILIATION_ENABLEDtrueNoHabilita el motor de reconciliación interno. Cuando es false, las transferencias sin retorno de JD nunca son conciliadas automáticamente.
BTF_RECONCILIATION_INTERVAL_SEC30NoIntervalo (en segundos) entre ciclos de reconciliación.
BTF_RECONCILIATION_BATCH_SIZE20NoNúmero máximo de transferencias procesadas por ciclo de reconciliación.
BTF_RECONCILIATION_MAX_ATTEMPTS10NoMáximo de intentos de reconciliación antes de marcar una transferencia como permanentemente fallida.
BTF_RECONCILIATION_STALE_AFTER_SEC60NoTiempo (en segundos) tras el cual una transferencia pendiente se considera obsoleta y elegible para reconciliación.
BTF_DLQ_ENABLEDtrueNoPersiste mensajes JD no parseables en la tabla dead-letter jd_incoming_parse_failures. El valor por defecto true se debe a que descartar mensajes silenciosamente nunca es seguro bajo entrega at-most-once.

Calendario de feriados (BACEN/ANBIMA)

Alimenta el calendario de feriados bancarios BACEN usado por la puerta de horarios operativos y el clamp del TTL de iniciación. La base de datos es la fuente de verdad; estas variables solo gobiernan el refresher programado.
VariablePor defectoRequeridoDescripción
ANBIMA_HOLIDAY_SOURCE_URLhttps://www.anbima.com.br/feriados/arqs/feriados_nacionais.xlsNoURL upstream de feriados BACEN/ANBIMA. El fetcher en vivo aún no está cableado (se usa un seed estático para 2026–2028); los operadores pueden repuntar a un mirror interno.
ANBIMA_FETCHER_ENABLEDtrueNoActiva el refresher de feriados programado. Cuando es false, el plugin se apoya en una tabla bacen_holidays pre-poblada.
ANBIMA_FETCHER_SCHEDULE03:00NoHora diaria de disparo (HH:MM) del refresher. 03:00 queda fuera del horario BACEN y antes de que abra la ventana de las 06:30, evitando snapshots en medio de un refresh.
HOLIDAY_CACHE_TTL1hNoTTL del caché in-process del calendario de feriados (formato time.ParseDuration: 1h, 30m, etc.). Reduzca este valor cuando UPSERTs manuales necesiten propagarse más rápido.

RabbitMQ

Los eventos de ciclo de vida de transferencia pueden publicarse en RabbitMQ para consumidores downstream.
VariablePor defectoRequeridoDescripción
RABBITMQ_ENABLEDfalseNoHabilita publicación de eventos de ciclo de vida de transferencia.
RABBITMQ_URL-Si habilitadoURL de conexión AMQP. Debe usar amqps:// fuera de desarrollo.
RABBITMQ_EXCHANGEbank_transfer.lifecycleNoNombre del exchange para eventos de ciclo de vida.
RABBITMQ_ROUTING_KEY_PREFIXtransferNoPrefijo de routing key para eventos publicados.
RABBITMQ_EVENT_SIGNING_SECRET-Si habilitadoSecreto HMAC para firmar eventos publicados. Mínimo 32 caracteres.
RABBITMQ_PUBLISH_TIMEOUT_MS5000NoTimeout de publicación en milisegundos.
RABBITMQ_MAX_RETRIES3NoMáximo de intentos de republicación.
RABBITMQ_RETRY_BACKOFF_MS200NoBackoff entre republicaciones en milisegundos.

Entrega de webhooks

La entrega de webhooks requiere que RabbitMQ esté habilitado. El worker de webhook consume eventos de una cola RabbitMQ y los entrega al endpoint configurado.
VariablePor defectoRequeridoDescripción
WEBHOOK_ENABLEDfalseNoHabilita entrega de webhooks. Requiere RABBITMQ_ENABLED=true.
WEBHOOK_ENDPOINT_URL-Si habilitadoURL de destino. Debe usar HTTPS; IPs loopback/privadas son rechazadas.
WEBHOOK_SIGNING_SECRET-Si habilitadoSecreto HMAC para firmar payloads de webhook. Mínimo 32 caracteres.
WEBHOOK_BROKER_EVENT_SIGNING_SECRET-NoSecreto HMAC separado para verificar eventos del broker. Usa WEBHOOK_SIGNING_SECRET como fallback.
WEBHOOK_ALLOW_UNSIGNED_BROKER_EVENTSfalseNoAcepta temporalmente eventos no firmados del broker durante migración.
WEBHOOK_UNSIGNED_BROKER_EVENTS_GRACE_SEC0NoPeríodo de gracia (en segundos) para eventos no firmados. Debe ser > 0 cuando eventos no firmados están permitidos.
WEBHOOK_QUEUE_NAMEtransfer.webhook.deliveryNoNombre de la cola RabbitMQ para eventos de webhook.
WEBHOOK_DLQ_NAMEtransfer.webhook.dlqNoCola de dead-letter para entregas de webhook fallidas.
WEBHOOK_CONSUMER_TAGplugin-br-bank-transfer-webhookNoTag de consumidor RabbitMQ.
WEBHOOK_PREFETCH_COUNT20NoConteo de prefetch RabbitMQ.
WEBHOOK_DELIVERY_CONCURRENCY8NoMáximo de entregas de webhook concurrentes por worker.
WEBHOOK_TIMEOUT_MS5000NoTimeout de entrega HTTP en milisegundos.
WEBHOOK_MAX_RETRIES3NoMáximo de intentos de reentrega.
WEBHOOK_RETRY_BACKOFF_MS500NoBackoff entre reentregas en milisegundos.

Límites de uso

VariablePor defectoRequeridoDescripción
USAGE_LIMITS_ENABLEDfalseNoHabilita imposición de límites de uso por cuenta.
USAGE_LIMIT_DAILY_CENTS0NoLímite diario predeterminado de transferencia en centavos. Al menos un límite debe ser > 0 cuando está habilitado.
USAGE_LIMIT_MONTHLY_CENTS0NoLímite mensual predeterminado de transferencia en centavos.

Horarios operativos

VariablePor defectoRequeridoDescripción
TRANSFER_OPERATING_OPEN06:30NoHora de apertura de la ventana de aceptación de transferencias (HH:MM).
TRANSFER_OPERATING_CLOSE17:00NoHora de cierre de la ventana de aceptación de transferencias (HH:MM).
TRANSFER_OPERATING_TIMEZONEAmerica/Sao_PauloNoZona horaria para evaluación de horarios operativos.

Telemetría (OpenTelemetry)

VariablePor defectoRequeridoDescripción
ENABLE_TELEMETRYfalseNoHabilita tracing y métricas OpenTelemetry.
OTEL_RESOURCE_SERVICE_NAMEplugin-br-bank-transferNoNombre del servicio OTel.
OTEL_LIBRARY_NAMEgithub.com/LerianStudio/plugin-br-bank-transferNoNombre de la biblioteca de instrumentación OTel.
OTEL_RESOURCE_SERVICE_VERSION1.0.0NoVersión del servicio OTel.
OTEL_RESOURCE_DEPLOYMENT_ENVIRONMENTdevelopmentNoEntorno de despliegue OTel.
OTEL_EXPORTER_OTLP_ENDPOINTlocalhost:4317NoEndpoint gRPC del colector OTel.
DB_METRICS_INTERVAL_SEC15NoIntervalo de recolección de métricas de base de datos en segundos.
RECONCILIATION_PENDING_ALERT_THRESHOLD5NoUmbral de alerta para ítems de reconciliación pendientes.
OTEL_TRACES_SAMPLER_ARG-NoRatio de muestreo de traces (0.0–1.0). Sin definir usa el sampler por defecto resuelto en la inicialización de telemetría: 0.1 en producción, 1.0 en otros entornos. Valores fuera de (0,1] se clampean a 1.0 para que un error de configuración no deshabilite silenciosamente el tracing en producción.
BTF_METRICS_PROMETHEUS_ENABLEDfalseNoExpone un endpoint dedicado de scrape de Prometheus para las métricas btf.*. Cuando es true, se inicia el listener en BTF_METRICS_PROMETHEUS_ADDRESS.
BTF_METRICS_PROMETHEUS_ADDRESS127.0.0.1:9090NoDirección de escucha del endpoint Prometheus /metrics. El valor por defecto se enlaza a loopback para que un pod mal configurado no exponga métricas no autenticadas a la red del cluster. Sobrescriba (p. ej. 0.0.0.0:9090) solo detrás de una NetworkPolicy o sidecar.

Licencia

VariablePor defectoRequeridoDescripción
LICENSE_KEY-En producciónClave de licencia. Requerido en entornos de producción.
LICENSE_SERVICE_ADDRESS-NoURL del servicio de validación de licencia.
TENANT_IDS-NoLista de UUIDs de tenant licenciados separados por coma.

Encriptación

Encriptación a nivel de campo para datos sensibles en reposo. Cada clave debe ser una clave AES-256 de 32 bytes codificada en base64. Deje en blanco para deshabilitar la encriptación del campo.
VariablePor defectoRequeridoDescripción
JD_INCOMING_RAW_XML_ENCRYPTION_KEY-NoClave AES-256 para encriptar payloads XML JD entrantes.
RECIPIENT_DETAILS_ENCRYPTION_KEY-NoClave AES-256 para encriptar detalles del destinatario en reposo.

Configuración en tiempo de ejecución (Admin API)


La configuración a nivel de tenant y de cuenta se gestiona a través de la Admin API — sin necesidad de reinicio. Los cambios tienen efecto inmediato (sujeto al TTL de caché para la configuración del tenant). Las configuraciones disponibles incluyen:
  • Límites de transferencia (diario y mensual, por tenant y por cuenta)
  • Comportamiento de tarifas (fail-open o fail-closed cuando el servicio de tarifas no está disponible)
  • Recepción de TED IN (habilitada o deshabilitada por organización)
  • Anulaciones de horario operativo (ventanas personalizadas dentro de los límites del BACEN)
Consulte la referencia de Admin API para la lista completa de campos configurables y el formato de solicitud.