> ## 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.

# Variables de entorno de TED Lerian

> Variables de entorno que TED Lerian lee al iniciar: servidor, autenticación, almacenes de datos, Midaz, Lerian SPB, política, idempotencia, eventos y telemetría.

TED Lerian lee estas variables cuando el servicio inicia. Un cambio surte efecto después de que reinicias el servicio. Las configuraciones de runtime, como la dirección de Lerian SPB y el paquete de la estimación de comisión, no son variables de entorno.

En las tablas, **Obligatoria** marca una variable que debes definir, siempre o en la condición indicada. `—` significa sin valor predeterminado.

> [!NOTE]
>
> Con `ENVIRONMENT_NAME=production`, el servicio no inicia a menos que todas estas condiciones sean verdaderas: `POSTGRES_PASSWORD` está definida, `POSTGRES_SSLMODE` no es `disable`, `PLUGIN_AUTH_ENABLED` es `true`, `TRUSTED_PROXIES` está definida, `REDIS_TLS` es `true`, `AUDIT_MONGO_URI` pide TLS, y ni `ALLOW_CORS_WILDCARD` ni `ALLOW_RATELIMIT_FAIL_OPEN` es `true`.

## Runtime y servidor

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `ENVIRONMENT_NAME` | Nombre del entorno. `production` activa las verificaciones de inicio de la nota anterior. `ENV_NAME` se lee cuando `ENVIRONMENT_NAME` no está definida. | `development` | No |
| `DEPLOYMENT_MODE` | `local`, `byoc` o `saas`. | `local` | No |
| `LOG_LEVEL` | Nivel de log. | `info` | No |
| `SERVER_ADDRESS` | Dirección en la que escucha el HTTP. | `:8080` | No |
| `HTTP_BODY_LIMIT_BYTES` | Cuerpo más grande que acepta el servidor HTTP, en bytes. Un cuerpo más grande recibe `413` `TED-9003`. | `104857600` | No |
| `SERVER_TLS_CERT_FILE`, `SERVER_TLS_KEY_FILE` | Certificado y clave para TLS en el propio servicio. Define las dos o ninguna. | — | No |
| `TLS_TERMINATED_UPSTREAM` | `true` cuando un proxy delante del servicio termina el TLS. El servicio entonces escucha en HTTP simple. | `false` | No |
| `TRUSTED_PROXIES` | IPs o CIDRs, separados por comas, de los proxies delante del servicio. El servicio los usa para encontrar la IP del cliente. | — | En producción |
| `CORS_ALLOWED_ORIGINS` | Orígenes CORS permitidos. | `http://localhost:3000` | No |
| `CORS_ALLOWED_METHODS` | Métodos CORS permitidos. | `GET,POST,PUT,PATCH,DELETE,OPTIONS` | No |
| `CORS_ALLOWED_HEADERS` | Headers CORS permitidos. | `Origin,Content-Type,Accept,Authorization,X-Request-ID` | No |
| `CORS_EXPOSE_HEADERS` | Headers expuestos al navegador. | — | No |
| `CORS_ALLOW_CREDENTIALS` | Permite credenciales en las solicitudes CORS. | `false` | No |
| `SWAGGER_ENABLED` | Sirve el documento OpenAPI del servicio. | `false` | No |
| `SYSTEMPLANE_ENABLED` | Activa las configuraciones de runtime y su API. | `false` | Para enviar TED |
| `INFRA_CONNECT_TIMEOUT_SEC` | Límite de tiempo para conectar con los almacenes de datos al iniciar, en segundos. | `30` | No |

## Autenticación y licencia

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `PLUGIN_AUTH_ENABLED` | Verifica el token y el permiso de Access Manager en cada llamada. | `true` | No |
| `PLUGIN_AUTH_HOST` | Dirección base de Access Manager, una URL `http` o `https` absoluta. TED Lerian también obtiene de ella el token de sus llamadas al CRM y a Lerian SPB. | — | Sí |
| `CRM_CLIENT_ID`, `CRM_CLIENT_SECRET` | Aplicación de Access Manager que TED Lerian usa en sus llamadas al CRM y a Lerian SPB. El secret es sensible. | — | Sí |
| `LICENSE_ENABLED` | Verifica la licencia del producto para cada organización. | `false` | No |
| `LICENSE_APPLICATION_ID` | Nombre de la aplicación enviado a la verificación de licencia. | `plugin-br-ted-lerian` | No |
| `LICENSE_KEY` | Clave de licencia que usa la verificación de licencia. Sensible. | — | No |
| `ORGANIZATION_IDS` | Organizaciones, separadas por comas, que cubre la licencia. | — | No |

## PostgreSQL

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `POSTGRES_HOST` | Host primario. | `localhost` | No |
| `POSTGRES_PORT` | Puerto primario. | `5432` | No |
| `POSTGRES_USER` | Usuario de la base de datos. | `plugin-br-ted-lerian` | No |
| `POSTGRES_PASSWORD` | Contraseña de la base de datos. Sensible. | — | En producción |
| `POSTGRES_NAME` | Nombre de la base de datos. | `plugin-br-ted-lerian` | No |
| `POSTGRES_SSLMODE` | Modo TLS de libpq. | `disable` | No |
| `POSTGRES_REPLICA_HOST`, `POSTGRES_REPLICA_PORT`, `POSTGRES_REPLICA_USER`, `POSTGRES_REPLICA_PASSWORD`, `POSTGRES_REPLICA_NAME`, `POSTGRES_REPLICA_SSLMODE` | Réplica de lectura opcional, con el mismo significado que los valores del primario. | — | No |
| `POSTGRES_MAX_OPEN_CONNS` | Número más grande de conexiones abiertas. | `25` | No |
| `POSTGRES_MAX_IDLE_CONNS` | Número más grande de conexiones inactivas. | `5` | No |
| `POSTGRES_CONN_MAX_LIFETIME_MINS` | Tiempo de vida de una conexión, en minutos. | `30` | No |
| `POSTGRES_CONN_MAX_IDLE_TIME_MINS` | Tiempo inactivo antes de que una conexión se cierre, en minutos. | `5` | No |
| `POSTGRES_CONNECT_TIMEOUT_SEC` | Límite de tiempo de la conexión, en segundos. | `10` | No |

## Valkey

Valkey guarda los registros de idempotencia, los contadores de rate limit y los contadores de los límites de uso.

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `REDIS_HOST` | Dirección, `host:port`. | `localhost:6379` | No |
| `REDIS_MASTER_NAME` | Nombre del master de Sentinel, cuando usas Sentinel. | — | No |
| `REDIS_PASSWORD` | Contraseña. Sensible. | — | No |
| `REDIS_DB` | Número de la base de datos. | `0` | No |
| `REDIS_PROTOCOL` | Versión del protocolo. | `3` | No |
| `REDIS_TLS` | Conecta con TLS. | `false` | En producción |
| `REDIS_CA_CERT` | Bundle de CA, en base64, para un certificado de servidor emitido por una CA privada. | — | No |
| `REDIS_POOL_SIZE` | Tamaño del pool de conexiones. | `10` | No |
| `REDIS_MIN_IDLE_CONNS` | Número más pequeño de conexiones inactivas. | `2` | No |
| `REDIS_READ_TIMEOUT`, `REDIS_WRITE_TIMEOUT` | Límites de tiempo de lectura y escritura, en segundos. | `3` | No |
| `REDIS_DIAL_TIMEOUT` | Límite de tiempo de la conexión, en segundos. | `5` | No |
| `REDIS_POOL_TIMEOUT` | Espera por una conexión libre, en segundos. | `2` | No |
| `REDIS_MAX_RETRIES` | Reintentos de un comando que falló. | `3` | No |
| `REDIS_MIN_RETRY_BACKOFF` | Espera más corta entre reintentos, en milisegundos. | `8` | No |
| `REDIS_MAX_RETRY_BACKOFF` | Espera más larga entre reintentos, en segundos. | `1` | No |

## Registro de auditoría

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `AUDIT_MONGO_URI` | Cadena de conexión de MongoDB del registro de auditoría. En producción, debe pedir TLS (`tls=true`, o una URI `mongodb+srv://`). | — | Sí |

## Midaz

TED Lerian retiene, liquida y acredita el dinero en el ledger de Midaz, y encuentra cuentas y titulares en el CRM.

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `MIDAZ_LEDGER_ENABLED` | Conecta con el ledger de Midaz. Sin ella, TED Lerian no puede mover dinero en Midaz. | `false` | No |
| `MIDAZ_LEDGER_BASE_URL` | Dirección base del ledger de Midaz. | — | No |
| `MIDAZ_ORGANIZATION_ID`, `MIDAZ_LEDGER_ID` | Organización y ledger de esta instalación. TED Lerian acredita allí las TED entrantes, y un vínculo de ISPB debe apuntar a este par. | — | Si el ledger está habilitado |
| `MIDAZ_ACCESS_MANAGER_ADDRESS` | Dirección de Access Manager para las llamadas al ledger de Midaz. | — | Si el ledger está habilitado, a menos que `MIDAZ_ANONYMOUS` sea `true` |
| `MIDAZ_CLIENT_ID`, `MIDAZ_CLIENT_SECRET` | Aplicación de Access Manager para las llamadas al ledger de Midaz. El secret es sensible. | — | Si el ledger está habilitado, a menos que `MIDAZ_ANONYMOUS` sea `true` |
| `MIDAZ_ANONYMOUS` | Llama a un Midaz local que no tiene autenticación. Solo para desarrollo local. | `false` | No |
| `MIDAZ_IDEMPOTENCY_TTL_SECONDS` | Durante cuánto tiempo Midaz guarda la clave de idempotencia de cada llamada al ledger, en segundos, de `3600` a `604800`. Un valor fuera de ese rango detiene el inicio. | `86400` | No |
| `MIDAZ_CRM_ENABLED` | Conecta con el CRM, donde TED Lerian encuentra cuentas y titulares. | `false` | No |
| `MIDAZ_CRM_BASE_URL` | Dirección base del CRM, una URL `http` o `https` absoluta. Debe ser `https` cuando `ENVIRONMENT_NAME` no es `development`, `local`, `test` o `ci`. | — | Si el CRM está habilitado |

## Lerian SPB

La dirección de Lerian SPB es una configuración de runtime de cada institución. `RAIL_ALLOWED_HOSTS` limita los hosts que TED Lerian acepta allí.

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `RAIL_ALLOWED_HOSTS` | Valores `host:port` de Lerian SPB, separados por comas. TED Lerian no llama a una dirección de Lerian SPB en ningún otro host. | — | Sí |
| `CIRCUIT_BREAKER_ENABLED` | Protege las llamadas a Lerian SPB con un circuit breaker. | `false` | No |

## Política y operaciones

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `POLICY_USAGE_LIMITS_MODE` | `enforced` aplica los límites de uso. `disabled` rechaza todo envío con `TED-0080`. `noop` no verifica ningún límite. Cualquier otro valor detiene el inicio. | `enforced` | No |
| `RECONCILIATION_QUEUE_CURSOR_KEY` | Clave que firma los cursores de la cola de conciliación: el base64 de exactamente 32 bytes. Sensible. Una clave nueva invalida los cursores en uso. | — | Sí |

## Idempotencia y rate limits

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `IDEMPOTENCY_MIN_TTL_SEC`, `IDEMPOTENCY_MAX_TTL_SEC` | `X-TTL` más bajo y más alto que acepta el servicio, en segundos. Un valor fuera de ellos se ajusta a ellos. | `30`, `604800` | No |
| `RATE_LIMIT_ENABLED` | Activa los rate limits. | `true` | No |
| `RATE_LIMIT_MAX`, `RATE_LIMIT_WINDOW_SEC` | Solicitudes permitidas en cada ventana, y la ventana en segundos, para las rutas estándar. | `500`, `60` | No |
| `AGGRESSIVE_RATE_LIMIT_MAX`, `AGGRESSIVE_RATE_LIMIT_WINDOW_SEC` | Lo mismo, para las rutas estrictas. | `100`, `60` | No |
| `RELAXED_RATE_LIMIT_MAX`, `RELAXED_RATE_LIMIT_WINDOW_SEC` | Lo mismo, para las rutas flexibles. | `1000`, `60` | No |

## Eventos

TED Lerian escribe cada evento en su outbox, en la misma transacción que el cambio de estado. El relay del outbox luego lo publica. La conexión con el broker viene de las configuraciones compartidas `STREAMING_*` en [Streaming y outbox](https://docs.lerian.studio/es/reference/byoc-configuration.md#streaming-and-outbox).

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `STREAMING_ENABLED` | Publica eventos. Requiere `OUTBOX_ENABLED=true`. | `false` | No |
| `STREAMING_CLOUDEVENTS_SOURCE` | Source de CloudEvents. Debe ser `br-ted` cuando el streaming está activado. | — | Si el streaming está activado |
| `STREAMING_HEALTH_CHECK_TIMEOUT` | Límite de tiempo de la verificación de disponibilidad del broker (duración Go). | `2s` | No |
| `OUTBOX_ENABLED` | Activa el relay del outbox. | `false` | Si el streaming está activado |
| `OUTBOX_DISPATCH_INTERVAL_SEC` | Tiempo entre ciclos del relay mientras hay eventos en espera, en segundos. | `2` | No |
| `OUTBOX_COLD_DISPATCH_INTERVAL_SEC` | Tiempo entre ciclos del relay mientras el outbox no tiene actividad reciente, en segundos. El primer evento después de un período inactivo puede esperar ese tiempo. | `60` | No |
| `OUTBOX_BATCH_SIZE` | Número más grande de eventos en un ciclo. | `50` | No |
| `OUTBOX_PUBLISH_MAX_ATTEMPTS` | Intentos de publicación de cada evento. | `3` | No |
| `OUTBOX_PUBLISH_BACKOFF_MS` | Espera base entre intentos de publicación, en milisegundos. | `200` | No |
| `OUTBOX_RETRY_WINDOW_SEC` | Espera antes de que un evento que falló se intente de nuevo, en segundos. | `300` | No |
| `OUTBOX_MAX_DISPATCH_ATTEMPTS` | Intentos de despacho antes de que un evento se marque como inválido. | `10` | No |
| `OUTBOX_PROCESSING_TIMEOUT_SEC` | Tiempo después del cual el relay retoma un evento atascado en procesamiento, en segundos. | `600` | No |
| `OUTBOX_MAX_FAILED_PER_BATCH` | Eventos fallidos que cada ciclo retoma para un reintento. | `25` | No |
| `OUTBOX_PRIORITY_EVENT_TYPES` | Tipos de evento, separados por comas, que cada ciclo toma primero. | — | No |
| `OUTBOX_TABLE_NAME` | Nombre de la tabla del outbox. | `outbox_events` | No |
| `RABBITMQ_ENABLED` | Abre una conexión RabbitMQ que solo usa la verificación de disponibilidad. TED Lerian no publica ningún evento por ella. | `false` | No |
| `RABBITMQ_URL`, `RABBITMQ_HOST`, `RABBITMQ_PORT_AMQP`, `RABBITMQ_PORT_HOST`, `RABBITMQ_DEFAULT_USER`, `RABBITMQ_DEFAULT_PASS`, `RABBITMQ_VHOST`, `RABBITMQ_QUEUE` | Conexión RabbitMQ. `RABBITMQ_URL` o `RABBITMQ_HOST` es obligatoria cuando RabbitMQ está habilitado. | `RABBITMQ_HOST`: `localhost` | Si RabbitMQ está habilitado |
| `RABBITMQ_HEALTH_CHECK_URL`, `RABBITMQ_HEALTH_CHECK_ALLOWED_HOSTS`, `RABBITMQ_REQUIRE_HEALTH_ALLOWED_HOSTS`, `RABBITMQ_ALLOW_INSECURE_HEALTH_CHECK`, `RABBITMQ_ALLOW_INSECURE_TLS` | Configuraciones de health check y TLS de RabbitMQ. | — | No |

## Telemetría

| Variable | Descripción | Predeterminado | Obligatoria |
| - | - | - | - |
| `ENABLE_TELEMETRY` | Exporta traces y métricas de OpenTelemetry. | `false` | No |
| `OTEL_EXPORTER_OTLP_ENDPOINT` | Dirección del colector OTLP. | `localhost:4317` | No |
| `OTEL_RESOURCE_SERVICE_NAME` | Nombre del servicio en la telemetría. | `plugin-br-ted-lerian` | No |
| `OTEL_RESOURCE_DEPLOYMENT_ENVIRONMENT` | Nombre del entorno en la telemetría. | `development` | No |
| `OTEL_LIBRARY_NAME` | Nombre de la biblioteca de instrumentación. | Predeterminado del servicio | No |
| `OTEL_TRUST_INBOUND_TRACE_CONTEXT` | Continúa el trace que un llamador envía en los headers de la solicitud. | `false` | No |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.