Saltar al contenido principal
Estas son variables definidas en el momento del despliegue por DevOps; los cambios requieren reiniciar el servicio. Las configuraciones de runtime y de negocio viven en Configuración. En las tablas a continuación, la columna Por defecto / Obligatoria muestra el valor por defecto; un calificador en negrita (p. ej. Obligatoria, Obligatoria en producción, Obligatoria si está habilitado) marca las variables que deben definirse. significa que no hay valor por defecto.

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 defecto / ObligatoriaDescripción
ENV_NAMEdevelopmentEntorno (development, staging, production)
DEPLOYMENT_MODEbyocSabor de despliegue. byoc = Bring Your Own Cloud (single-tenant, gestionado por el operador). Activa comportamientos internos SaaS vs. BYOC.
SERVER_ADDRESS:8080Dirección y puerto del servidor HTTP
HTTP_BODY_LIMIT_BYTES1048576Tamaño máximo del cuerpo de la solicitud HTTP en bytes
ALLOW_PRIVATE_UPSTREAMSfalse⚠️ 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 defecto / ObligatoriaDescripción
SERVER_TLS_CERT_FILERuta al archivo de certificado TLS. Debe definirse junto con SERVER_TLS_KEY_FILE.
SERVER_TLS_KEY_FILERuta al archivo de clave privada TLS. Debe definirse junto con SERVER_TLS_CERT_FILE.
TLS_TERMINATED_UPSTREAMfalseEstablezca 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 defecto / ObligatoriaDescripción
SERVER_PROXY_HEADERHeader 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_PROXIESObligatoria si el 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.

Autenticación

Este plugin delega la autorización a plugin-auth. Configure la conexión con las variables a continuación.
VariablePor defecto / ObligatoriaDescripción
PLUGIN_AUTH_ENABLEDfalseHabilita la autorización vía plugin-auth. Establezca en true en producción.
PLUGIN_AUTH_ADDRESSObligatoria si está habilitadoURL del servicio plugin-auth. Debe usar HTTPS en producción.
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 defecto / ObligatoriaDescripción
BTF_TEST_ADMIN_ENABLEDfalse⚠️ Expone endpoints administrativos solo de prueba. Debe permanecer en false en producción.
BTF_TEST_ADMIN_TOKENObligatoria si admin está 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).

Idempotencia

VariablePor defecto / ObligatoriaDescripción
IDEMPOTENCY_RETRY_WINDOW_SEC300Ventana de tiempo (en segundos) durante la cual una clave de idempotencia se considera válida.

Multi-tenancy

VariablePor defecto / ObligatoriaDescripción
MULTI_TENANT_ENABLEDfalseHabilita multi-tenancy a nivel de infraestructura con bases de datos aisladas por tenant.
ORGANIZATION_IDObligatoria (single-tenant + JD polling)UUID de organización Midaz inyectado en el contexto de los workers en segundo plano (poller de TED IN, reconciliación) en modo single-tenant. Requerido cuando MULTI_TENANT_ENABLED=false y JD_POLLING_ENABLED=true. Ignorado en modo multi-tenant, donde los vínculos de organización por tenant los resuelve el tenant manager. Las solicitudes HTTP siempre llevan la organización en el header X-Organization-Id en su lugar.
AWS_REGIONObligatoria si el backend de secretos es 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.
ORGANIZATION_IDSObligatoria en producciónLista separada por coma de UUIDs de organización Midaz en el alcance de licenciamiento. El gateway de licencia valida LICENSE_KEY contra estos al inicio. También referenciada en Licencia.
MULTI_TENANT_URLObligatoria cuando está habilitadoURL de la API HTTP del Tenant Manager.
MULTI_TENANT_REDIS_HOSTHost Redis para descubrimiento de tenants dirigido por eventos vía Pub/Sub.
MULTI_TENANT_REDIS_PORT6379Puerto de Redis para Pub/Sub.
MULTI_TENANT_REDIS_PASSWORDContraseña de Redis para Pub/Sub.
MULTI_TENANT_REDIS_TLSfalseHabilita TLS para la conexión Redis Pub/Sub.
MULTI_TENANT_REDIS_CA_CERTCertificado CA para la conexión TLS de Redis Pub/Sub multi-tenant.
MULTI_TENANT_TIMEOUT30Timeout HTTP en segundos para llamadas a la API del Tenant Manager.
MULTI_TENANT_MAX_TENANT_POOLS100Máximo de pools de conexión a base de datos simultáneos por tenant.
MULTI_TENANT_IDLE_TIMEOUT_SEC300Timeout de inactividad en segundos antes de descartar un pool de tenant.
MULTI_TENANT_CIRCUIT_BREAKER_THRESHOLD5Número de fallos antes de que el circuit breaker se abra.
MULTI_TENANT_CIRCUIT_BREAKER_TIMEOUT_SEC30Timeout de recuperación en segundos del circuit breaker.
MULTI_TENANT_SERVICE_API_KEYObligatoria cuando está habilitadoClave de API para el endpoint /settings del Tenant Manager.
MULTI_TENANT_CACHE_TTL_SEC120TTL en segundos del caché in-memory de configuración de tenant. Recargable en caliente vía systemplane API.
MULTI_TENANT_CONNECTIONS_CHECK_INTERVAL_SEC30Intervalo en segundos para revalidación asíncrona de configuraciones de pool. Solo bootstrap (no recargable en caliente).
BYOC single-tenant:
# Organización inyectada en los workers en segundo plano (requerido cuando el JD polling está habilitado)
ORGANIZATION_ID=<su-midaz-organization-uuid>
# Alcance de licenciamiento validado contra LICENSE_KEY en producción
ORGANIZATION_IDS=<su-midaz-organization-uuid>
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 defecto / ObligatoriaDescripción
POSTGRES_HOSTlocalhost · ObligatoriaHost primario de PostgreSQL.
POSTGRES_PORT5432Puerto primario de PostgreSQL.
POSTGRES_USERplugin-br-bank-transfer · ObligatoriaUsuario de base de datos.
POSTGRES_PASSWORDObligatoriaContraseña de base de datos. Requerido en producción.
POSTGRES_DBplugin-br-bank-transfer · ObligatoriaNombre de la base de datos.
POSTGRES_SSLMODErequireModo SSL. disable es rechazado en producción.
POSTGRES_MAX_OPEN_CONNS25Máximo de conexiones abiertas.
POSTGRES_MAX_IDLE_CONNS5Máximo de conexiones inactivas.
POSTGRES_CONN_MAX_LIFETIME_MINS30Tiempo máximo de vida de la conexión en minutos.
POSTGRES_CONN_MAX_IDLE_TIME_MINS5Tiempo máximo inactivo de la conexión en minutos.
POSTGRES_CONNECT_TIMEOUT_SEC10Timeout de conexión en segundos.

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 defecto / ObligatoriaDescripción
POSTGRES_REPLICA_HOSTHost de la réplica. No definido = sin réplica.
POSTGRES_REPLICA_PORTPuerto de la réplica.
POSTGRES_REPLICA_USERUsuario de la réplica.
POSTGRES_REPLICA_PASSWORDContraseña de la réplica.
POSTGRES_REPLICA_DBNombre de la base de datos de la réplica.
POSTGRES_REPLICA_SSLMODEModo 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 defecto / ObligatoriaDescripción
MONGO_ENABLEDtrue · ObligatoriaHabilita la conexión MongoDB. Debe ser true en todos los entornos.
MONGO_URIObligatoriaCadena de conexión MongoDB (ej: mongodb://user:pass@host:27017). Debe incluir credenciales y TLS en producción.
MONGO_DATABASEObligatoriaNombre de la base de datos MongoDB.
MONGO_MAX_POOL_SIZE25Tamaño máximo del pool de conexiones.
MONGO_SERVER_SELECTION_TIMEOUT_MS3000Timeout de selección de servidor en milisegundos.
MONGO_HEARTBEAT_INTERVAL_MS10000Intervalo de heartbeat en milisegundos.
MONGO_TLS_CA_CERTCertificado 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 defecto / ObligatoriaDescripción
REDIS_HOSTlocalhost:6379 · ObligatoriaHost y puerto de Redis.
REDIS_MASTER_NAMENombre del master Redis Sentinel (si usa Sentinel).
REDIS_PASSWORDContraseña de Redis (si la autenticación está habilitada).
REDIS_DB0Número de base de datos Redis.
REDIS_PROTOCOL3Versión del protocolo Redis (2 o 3).
REDIS_TLSfalseHabilita TLS para conexiones Redis.
REDIS_CA_CERTCertificado CA para TLS Redis.
REDIS_POOL_SIZE10Tamaño del pool de conexiones.
REDIS_MIN_IDLE_CONNS2Mínimo de conexiones inactivas.
REDIS_READ_TIMEOUT_MS3000Timeout de lectura en milisegundos.
REDIS_WRITE_TIMEOUT_MS3000Timeout de escritura en milisegundos.
REDIS_DIAL_TIMEOUT_MS5000Timeout 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 defecto / ObligatoriaDescripción
JD_BASE_URLObligatoria en BYOCURL base de la API JD SPB.
JD_SOAP_PATH/soapRuta del endpoint SOAP JD.
JD_LEGACY_CODEObligatoria en BYOCCódigo legacy JD (máx. 10 caracteres).
JD_USER_CODEObligatoria en BYOCCódigo de usuario JD (máx. 10 caracteres).
JD_PASSWORDObligatoria en BYOCContraseña JD (encriptada en reposo).
JD_PRIVATE_KEY_PEMObligatoria en BYOCContenido PEM de clave privada RSA para firma XML.
JD_PRIVATE_KEY_PEM_FILERuta a un archivo que contiene el PEM de la clave privada RSA. Alternativa a incluir la clave en línea en JD_PRIVATE_KEY_PEM; se lee al inicio.
JD_PUBLIC_KEY_PEMPEM de clave pública para validar firmas en respuestas de JD.
JD_PRIVATE_KEY_KEYINFOBloque 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_CERT_PEMCertificado X.509 codificado en PEM opcional, emparejado con la clave de firma de JD. Lo usa únicamente el gauge de métricas de expiración de certificado, no la ruta de firma; un PEM mal formado es un error de inicio.
JD_SIGNING_MODElocal_pemModo 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_EXTERNAL_SIGNER_URLObligatoria si JD_SIGNING_MODE=external_signerURL base del servicio de firma externo.
JD_EXTERNAL_SIGNER_AUTH_TOKENBearer token enviado en el header Authorization para llamadas al firmador externo.
JD_EXTERNAL_SIGNER_TIMEOUT_MS5000Timeout (en milisegundos) para llamadas al firmador externo.
JD_SANDBOX_MODEfalseHabilita modo sandbox JD. Rechazado en producción.

Polling JD

VariablePor defecto / ObligatoriaDescripción
JD_POLLING_ENABLEDfalseHabilita worker de polling TED IN.
JD_POLL_INTERVAL_SECONDS60Frecuencia (en segundos) con que el plugin consulta TEDs entrantes.
JD_POLLING_ENABLED está deshabilitado por defecto para despliegues más seguros. En modo single-tenant, configure ORGANIZATION_ID antes de habilitarlo — los workers en segundo plano lo inyectan en el contexto para las llamadas downstream a CRM/Midaz. En modo multi-tenant, el gestor del poller de TED IN inicia un poller por cada tenant activo descubierto a través del tenant-manager y resuelve la configuración JD de cada tenant mediante el resolvedor de integración del tenant.

Servicios externos (Midaz)

VariablePor defecto / ObligatoriaDescripción
MIDAZ_BASE_URLObligatoriaURL base del servicio Midaz.
MIDAZ_TRANSACTION_URLObligatoriaURL del servicio de transacciones Midaz.
MIDAZ_TIMEOUT_MS3000Timeout de solicitudes Midaz en milisegundos.
MIDAZ_MAX_RETRIES3Intentos de reintento al fallar Midaz.
MIDAZ_AUTH_ENABLEDfalseHabilita autenticación M2M para Midaz.
MIDAZ_AUTH_ADDRESSObligatoria si está habilitadoURL del servicio de autenticación para tokens M2M Midaz.
MIDAZ_CLIENT_IDObligatoria si está habilitadoOAuth client ID para M2M Midaz.
MIDAZ_CLIENT_SECRETObligatoria si está habilitadoOAuth client secret para M2M Midaz.

Servicios externos (CRM)

VariablePor defecto / ObligatoriaDescripción
CRM_BASE_URLObligatoriaURL del servicio CRM.
CRM_TIMEOUT_MS2000Timeout de solicitudes CRM en milisegundos.
CRM_MAX_RETRIES2Intentos de reintento al fallar el CRM.
CRM_AUTH_ENABLEDfalseHabilita autenticación M2M para CRM.
CRM_CLIENT_IDObligatoria si está habilitadoOAuth client ID para M2M CRM.
CRM_CLIENT_SECRETObligatoria si está habilitadoOAuth client secret para M2M 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 defecto / ObligatoriaDescripción
BTF_FEE_ENABLEDfalseSwitch 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_URLObligatoria si está habilitadoURL del servicio Fees Engine.
FEES_TIMEOUT_MS2000Timeout de solicitudes de tarifas en milisegundos.
FEES_MAX_RETRIES2Intentos de reintento al fallar el servicio de tarifas.
FEES_AUTH_ENABLEDfalseHabilita autenticación M2M para Fees.
FEES_CLIENT_IDObligatoria si está habilitadoOAuth client ID para M2M Fees.
FEES_CLIENT_SECRETObligatoria si está habilitadoOAuth client secret para M2M Fees.

RabbitMQ

Los eventos de ciclo de vida de transferencia pueden publicarse en RabbitMQ para consumidores downstream.
VariablePor defecto / ObligatoriaDescripción
RABBITMQ_ENABLEDfalseHabilita publicación de eventos de ciclo de vida de transferencia.
RABBITMQ_URLObligatoria si está habilitadoURL de conexión AMQP. Debe usar amqps:// fuera de desarrollo.
RABBITMQ_HEALTH_CHECK_URLURL HTTP(S) del endpoint de salud de management de RabbitMQ. El hostname debe coincidir con RABBITMQ_URL; debe usar https:// en producción.
RABBITMQ_EXCHANGEbank_transfer.lifecycleNombre del exchange para eventos de ciclo de vida.
RABBITMQ_EVENT_SIGNING_SECRETObligatoria si está habilitadoSecreto HMAC para firmar eventos publicados. Mínimo 32 caracteres.

Streaming outbox

El subsistema de streaming publica eventos de transferencia en un broker Redpanda/Kafka a través de un outbox transaccional. Debe estar habilitado para que funcione la entrega saliente de webhooks (WEBHOOK_ENABLED=true requiere STREAMING_ENABLED=true).
VariablePor defecto / ObligatoriaDescripción
STREAMING_ENABLEDfalseHabilita el subsistema de streaming outbox. Requerido para la entrega de webhooks.
STREAMING_BROKERSObligatoria si está habilitadoLista separada por coma de direcciones de brokers Kafka/Redpanda.
STREAMING_CLIENT_IDClient ID presentado al broker.
STREAMING_CLOUDEVENTS_SOURCEObligatoria si está habilitadoAtributo source de CloudEvents establecido en los eventos publicados.
STREAMING_OUTBOX_DISPATCH_INTERVAL_SECONDS30Intervalo (en segundos) entre ciclos de despacho del outbox. Debe ser > 0.
STREAMING_CB_FAILURE_RATIO0.5Ratio de fallos del circuit breaker que dispara el breaker (debe ser > 0 y ≤ 1).
STREAMING_CB_MIN_REQUESTS10Mínimo de solicitudes en una ventana antes de que el circuit breaker pueda dispararse.
STREAMING_CB_TIMEOUT_S30Timeout de recuperación del circuit breaker en segundos.
STREAMING_CLOSE_TIMEOUT_S30Timeout de apagado controlado (en segundos) para el productor de streaming.

Entrega de webhooks

La entrega saliente de webhooks requiere que tanto RabbitMQ como el streaming outbox estén habilitados. El worker de webhook consume eventos de una cola RabbitMQ y los entrega a los endpoints suscriptores.
VariablePor defecto / ObligatoriaDescripción
WEBHOOK_ENABLEDfalseHabilita la entrega saliente de webhooks. Requiere RABBITMQ_ENABLED=true y STREAMING_ENABLED=true.
WEBHOOK_SIGNING_SECRETObligatoria si está habilitadoSecreto HMAC para firmar payloads de webhook. Mínimo 32 caracteres.
WEBHOOK_BROKER_EVENT_SIGNING_SECRETSecreto HMAC separado para verificar eventos del broker. Usa WEBHOOK_SIGNING_SECRET como fallback.
WEBHOOK_QUEUE_NAMEtransfer.webhook.deliveryNombre de la cola RabbitMQ para eventos de webhook.
WEBHOOK_DLQ_NAMEtransfer.webhook.dlqCola de dead-letter para entregas de webhook fallidas.
WEBHOOK_DLX_EXCHANGE_NAMENombre del exchange de dead-letter. Cuando está vacío, el worker deriva <WEBHOOK_DLQ_NAME>.exchange. Sobrescríbalo para centralizar el DLX entre plugins.
WEBHOOK_DLQ_MESSAGE_TTL_MS0x-message-ttl de la DLQ en milisegundos. 0 usa el valor por defecto de la biblioteca (7 días). Los cambios de topología requieren eliminar la DLQ existente antes de redesplegar.
WEBHOOK_DLQ_MAX_LENGTH0Conteo máximo de mensajes en la DLQ. 0 usa el valor por defecto de la biblioteca (10000).
WEBHOOK_PREFETCH_COUNT20Conteo de prefetch RabbitMQ.
WEBHOOK_DELIVERY_CONCURRENCY8Máximo de entregas de webhook concurrentes por worker.

Telemetría (OpenTelemetry)

VariablePor defecto / ObligatoriaDescripción
ENABLE_TELEMETRYfalseHabilita tracing y métricas OpenTelemetry.
OTEL_EXPORTER_OTLP_ENDPOINTlocalhost:4317Endpoint gRPC del colector OTel.
OTEL_TRACES_SAMPLER_ARGRatio 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_ENABLEDfalseExpone 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:9090Direcció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 defecto / ObligatoriaDescripción
LICENSE_KEYObligatoria en producciónClave de licencia. Requerido en entornos de producción.
LICENSE_SERVICE_ADDRESSURL del servicio de validación de licencia.
ORGANIZATION_IDSObligatoria en producciónMisma variable que en Multi-tenancy. Lista separada por coma de UUIDs de organización Midaz en el alcance de licenciamiento; el gateway de licencia valida LICENSE_KEY contra estos al inicio.

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 de ese campo.
VariablePor defecto / ObligatoriaDescripción
JD_INCOMING_RAW_XML_ENCRYPTION_KEYClave AES-256 para encriptar payloads XML JD entrantes.
RECIPIENT_DETAILS_ENCRYPTION_KEYClave AES-256 para encriptar detalles del destinatario en reposo.