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

# Configuración

> Configura Bank Transfer a nivel de infraestructura, tenant y cuenta — límites, políticas de tarifas y horarios operativos ajustables en tiempo de ejecución.

El plugin Bank Transfer divide la configuración en tres niveles. Puedes cambiar la mayoría de las decisiones de negocio en tiempo de ejecución, sin reiniciar el servicio.

La identidad del tenant y el alcance de la organización Midaz cumplen propósitos diferentes. Mantenlos separados.

El claim JWT `tenantId` del contexto de la solicitud autenticada resuelve el tenant. El tenant controla el aislamiento a nivel de infraestructura: selecciona la base de datos de la plataforma de multi-tenancy y concede acceso a los secretos con alcance de tenant.

El header `X-Organization-Id` define el alcance de la organización Midaz dentro de ese tenant. Toda ruta de transferencia con alcance de organización requiere este header, en todos los modos de despliegue. Una solicitud devuelve `400` si omite el header o envía un valor que no sea un UUID válido.

Los procesos en segundo plano, como el poller de TED IN y los workers de reconciliación, no reciben headers de solicitud. En despliegues single-tenant, estos procesos usan la variable de entorno `ORGANIZATION_ID` como contexto de organización.

## Niveles de configuración

***

El plugin Bank Transfer tiene tres niveles de configuración:

* **Configuración de infraestructura** (la gestiona DevOps) controla URLs, credenciales, configuraciones de autenticación y timeouts. Los cambios necesitan un reinicio del servicio.
* **Configuración de tenant** (la gestiona el equipo de producto a través de la Admin API) controla límites de transferencia, políticas de tarifas y anulaciones de horario operativo. Los cambios tienen efecto sin reiniciar el servicio.
* **Configuración de cuenta** (la gestiona el equipo de producto a través de la Admin API) controla límites y restricciones para cuentas individuales. Los cambios tienen efecto sin reiniciar el servicio.

## Decisiones de negocio que puedes configurar

***

A los GPMs y equipos de producto les interesan estas configuraciones. Las gestionas todas a través de la Admin API en tiempo de ejecución, sin despliegue.

### Límites de transferencia

Establece límites de volumen diario y mensual en dos niveles:

* **Por organización** — aplica a las transferencias de una organización Midaz dentro del tenant resuelto
* **Por cuenta** — aplica a una cuenta de usuario final específica (anula los valores predeterminados de la organización)

Los límites cubren tanto el monto total como el número de transacciones. Configúralos para gestionar el riesgo y cumplir con los requisitos del BACEN.

### Política de tarifas

Controla si el plugin cobra una tarifa en las transferencias TED OUT, TED IN y P2P. El Fees Engine define las reglas de tarifas y las aplica por organización. Consulta [Fees Engine](/es/midaz/fees/fees-engine-overview) para detalles de configuración.

### Fail-open vs. fail-closed

Si el servicio de cálculo de tarifas no está disponible cuando se ejecuta una transferencia, tienes dos opciones:

* **Fail-open** — permite que la transferencia proceda sin tarifa
* **Fail-closed** — bloquea la transferencia hasta que el servicio de tarifas esté disponible nuevamente

La política predeterminada del servicio de tarifas es **fail-open** (`FEES_FAIL_CLOSED_DEFAULT=false`). Cámbiala por organización a través de la Admin API cuando necesites que las interrupciones del servicio de tarifas bloqueen las transferencias. TED IN tiene su propio interruptor de seguridad, `BTF_FEES_TED_IN_FAIL_OPEN`, que por defecto es `true`. Si plugin-fees no está disponible, el plugin acredita los fondos entrantes con tarifa=0.

### Recepción de TED IN

Las transferencias entrantes están deshabilitadas por defecto. Habilita TED IN por organización después de configurar tus credenciales JD SPB e iniciar el worker de polling.

### Anulaciones de horario operativo

El plugin aplica la ventana operativa TED del BACEN por defecto. Puedes definir ventanas personalizadas por política de tenant dentro de los límites del BACEN — por ejemplo, transferencias solo en horario comercial.

## Configuración de infraestructura

***

DevOps establece las variables de entorno de despliegue (URLs, credenciales, TLS, persistencia, integraciones, claves de seguridad). Estas variables requieren un reinicio del servicio. Consulta la referencia completa en [Variables de entorno](/es/rails/ted/jd/ted-environment-variables).

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

***

Gestionas la configuración a nivel de tenant y de cuenta a través de la Admin API, sin 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 organización 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)

Consulta la referencia de Admin API para la lista completa de campos configurables y el formato de solicitud.

### Configuraciones gestionadas por systemplane

El systemplane (Admin API) gestiona las configuraciones a continuación en tiempo de ejecución, no en el momento del despliegue. Cada una tiene un nombre de variable de entorno correspondiente que aún existe en el código. El cargador de configuración ignora estas variables de entorno y registra un WARN de deprecación si las defines. Asignarlas a través del entorno no tiene efecto. Usa el systemplane para cambiarlas.

| Área                              | Configuraciones                                                                                                                                                                                |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Rate limiting                     | `RATE_LIMIT_ENABLED`, `RATE_LIMIT_MAX`, `RATE_LIMIT_EXPIRY_SEC`                                                                                                                                |
| CORS                              | `CORS_ALLOWED_ORIGINS`, `CORS_ALLOWED_METHODS`, `CORS_ALLOWED_HEADERS` (el origen por defecto es el wildcard `*` cuando no está configurado; no se valida al inicio)                           |
| Política de tarifas               | `FEES_FAIL_CLOSED_DEFAULT`, `FEES_MAX_FEE_AMOUNT_CENTS`, `FEES_REFUND_ON_DEVOLUCAO`, `BTF_FEES_TED_IN_FAIL_OPEN`                                                                               |
| Límites de uso                    | `USAGE_LIMITS_ENABLED`, `USAGE_LIMIT_DAILY_CENTS`, `USAGE_LIMIT_MONTHLY_CENTS`                                                                                                                 |
| Horarios operativos               | `TRANSFER_OPERATING_OPEN`, `TRANSFER_OPERATING_CLOSE`, `TRANSFER_OPERATING_TIMEZONE`                                                                                                           |
| Idempotencia / duplicate guard    | `IDEMPOTENCY_REQUIRE_REDIS`, `DUPLICATE_GUARD_TTL_SEC`                                                                                                                                         |
| Enrutamiento                      | `ROUTING_*` (todas las configuraciones de reglas de enrutamiento)                                                                                                                              |
| Tuning de timeout y reintentos JD | `JD_TIMEOUT_MS`, `JD_MAX_RETRIES`, `JD_VALIDATE_EXTERNAL_SIGNATURE`                                                                                                                            |
| Tuning de polling JD              | `JD_POLL_MAX_MESSAGES_PER_CYCLE`, `JD_POLL_RECOVERY_BATCH_SIZE`, `JD_POLL_DISABLE_OPERATING_HOURS_WINDOW`                                                                                      |
| Tuning de reconciliación          | `BTF_RECONCILIATION_BATCH_SIZE`, `BTF_RECONCILIATION_MAX_ATTEMPTS`, `BTF_RECONCILIATION_STALE_AFTER_SEC`, `BTF_RECONCILIATION_TICK_DEADLINE_SECONDS`, `RECONCILIATION_PENDING_ALERT_THRESHOLD` |
| Tuning de publicación RabbitMQ    | `RABBITMQ_MAX_RETRIES`, `RABBITMQ_PUBLISH_TIMEOUT_MS`, `RABBITMQ_RETRY_BACKOFF_MS`, `RABBITMQ_ROUTING_KEY_PREFIX`                                                                              |
| Tuning de entrega de webhooks     | `WEBHOOK_TIMEOUT_MS`, `WEBHOOK_MAX_RETRIES`, `WEBHOOK_RETRY_BACKOFF_MS`, `WEBHOOK_ALLOW_UNSIGNED_BROKER_EVENTS`, `WEBHOOK_UNSIGNED_BROKER_EVENTS_GRACE_SEC`                                    |

<Note>
  Definir cualquiera de los nombres anteriores a través del entorno no tiene efecto. En su lugar, el cargador registra un WARN de deprecación. Estos nombres existen únicamente como gemelos de entorno deprecados de configuraciones gestionadas en runtime/systemplane.
</Note>

<Warning>
  Cuando CORS no está configurado, el origen permitido por defecto es el comodín `*`. Cualquier origen puede entonces llamar a la API, y el plugin no lo valida en el arranque. En producción, define orígenes explícitos mediante la clave de systemplane `cors.allowed_origins` en lugar del comodín.
</Warning>
