> For the complete documentation index, see [llms.txt](https://docs.cuxial.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cuxial.com/scripts/es/nucleo/cuxial-banking/configuration.md).

# Configuración

Todas las opciones de Cuxial Banking explicadas: dónde viven los ajustes, los archivos de data y shared/config.lua.

El banco se configura en dos sitios: los archivos del recurso, que guardan los valores de partida, y la pestaña Config de `/bankadmin`, que edita la mayoría en vivo.

## Dónde viven los ajustes

`shared/config.lua` construye la configuración. Lee la mayoría de los valores de los archivos de `data/` y guarda unos pocos propios.

En el primer arranque, el banco copia once secciones a la base de datos: general, cuentas, tarjetas, préstamos, ahorros, cheques, recompensas, puntuación de crédito, cajeros, admin y logs. Desde ese momento, la copia de la base de datos es la que se usa.

{% hint style="info" %}
Tras el primer arranque, cambia esas secciones en `/bankadmin` → Config. Para volver a cargar los valores de un archivo, edítalo, reinicia el recurso y pulsa el botón de restablecer de esa sección en el panel.
{% endhint %}

| Qué quieres cambiar                                             | Dónde                                                               |
| --------------------------------------------------------------- | ------------------------------------------------------------------- |
| Cualquier cosa de las once secciones, antes del primer arranque | `data/*.lua` y `shared/config.lua`                                  |
| Cualquier cosa de las once secciones, después                   | `/bankadmin` → Config                                               |
| `debug`, `ui`, `commands`, `world`, `wealth`, `limits`          | `shared/config.lua`, y reiniciar el recurso                         |
| `admin.permission` y `logs.convar`                              | Solo en `shared/config.lua`; el panel los muestra como solo lectura |
| Sucursales y puntos de cajero                                   | `/bankadmin` → Puntos                                               |

La pestaña Config puede exportar las secciones cambiadas a un texto e importarlas en otro servidor.

## General · `data/general.lua`

| Opción                   | Tipo    | Por defecto | Qué hace                                                                                                                                                                            |
| ------------------------ | ------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Currency`               | string  | `'USD'`     | Código de moneda que se muestra en la interfaz y en los logs.                                                                                                                       |
| `UseCashAsItem`          | boolean | `true`      | `true` maneja el efectivo como ítem de inventario (`general.cashItem`). `false` usa la cuenta de efectivo de tu framework.                                                          |
| `LogExternalBankChanges` | boolean | `true`      | `true` anota en el historial cada cambio que otro recurso hace en el dinero de banco de un jugador. `false` registra solo las operaciones del propio banco. Requiere QBox o QBCore. |
| `AdminMaxAdjust`         | number  | `100000000` | Importe máximo que el staff puede añadir o quitar en un ajuste de saldo.                                                                                                            |

Estas opciones de la misma sección están en `shared/config.lua`, dentro de `general`:

| Opción         | Tipo      | Por defecto                  | Qué hace                                                                                          |
| -------------- | --------- | ---------------------------- | ------------------------------------------------------------------------------------------------- |
| `cashItem`     | string    | `'money'`                    | Nombre del ítem de efectivo. Solo se usa con `UseCashAsItem = true`.                              |
| `bankDistance` | number    | `5.0`                        | Metros a una sucursal dentro de los cuales el servidor acepta operaciones de banco.               |
| `atmDistance`  | number    | `3.0`                        | Metros a un cajero dentro de los cuales el servidor acepta operaciones de cajero.                 |
| `moneyItems`   | string\[] | `{ 'money', 'black_money' }` | Ítems que cuentan como dinero, por su valor nominal, en el informe de riqueza del panel de staff. |
| `valuedItems`  | table     | `{}`                         | Ítems que cuentan en el informe de riqueza con un precio por unidad: `{ gold_bar = 5000 }`.       |

## Cuentas · `data/accounts.lua`

| Opción                                | Tipo    | Por defecto         | Qué hace                                                                                                                                               |
| ------------------------------------- | ------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `PINChangeCost`                       | number  | `200`               | Comisión por cambiar el PIN de una cuenta.                                                                                                             |
| `PrintReceiptPrice`                   | number  | `100`               | Comisión por imprimir un recibo.                                                                                                                       |
| `NewAccountCost`                      | number  | `500`               | Comisión que se muestra en la ventana de crear una cuenta compartida. Mantenla igual que `CustomAccounts.CreationFee`, que es el importe que se cobra. |
| `MaxTransactionsPerPlayer`            | number  | `nil` (50)          | Movimientos del historial que se muestran al jugador.                                                                                                  |
| `ReceiptItem`                         | string  | `'printerdocument'` | Ítem que se entrega como recibo impreso.                                                                                                               |
| `MaxTransferContactsFavorites`        | number  | `3`                 | Contactos que un jugador puede marcar como favoritos.                                                                                                  |
| `CustomAccounts.Enabled`              | boolean | `true`              | `false` quita las cuentas compartidas.                                                                                                                 |
| `CustomAccounts.MaxAccountsPerPlayer` | number  | `3`                 | Cuentas compartidas de las que un personaje puede ser titular.                                                                                         |
| `CustomAccounts.CreationFee`          | number  | `500`               | Comisión que se cobra al crear una cuenta compartida.                                                                                                  |

En `shared/config.lua`, dentro de `accounts`:

| Opción                     | Tipo   | Por defecto | Qué hace                                                                                           |
| -------------------------- | ------ | ----------- | -------------------------------------------------------------------------------------------------- |
| `transactionRetentionDays` | number | `0`         | Días que se conserva un movimiento antes de que la limpieza diaria lo borre. `0` lo conserva todo. |
| `pin.maxAttempts`          | number | `5`         | PIN de cuenta erróneos permitidos antes del bloqueo.                                               |
| `pin.lockSeconds`          | number | `30`        | Segundos que el PIN de la cuenta queda bloqueado.                                                  |

## Tarjetas · `data/cards.lua`

| Opción                      | Tipo     | Por defecto  | Qué hace                                                                    |
| --------------------------- | -------- | ------------ | --------------------------------------------------------------------------- |
| `EnableCards`               | boolean  | `true`       | `false` desactiva las tarjetas.                                             |
| `RenewCardTime`             | number   | `8`          | Años hasta la fecha de caducidad impresa en una tarjeta nueva.              |
| `MaxTotalCreditCards`       | number   | `10`         | Tarjetas que un personaje puede tener en total, en cualquier estado.        |
| `MaxActiveCreditCards`      | number   | `3`          | Tarjetas activas que un personaje puede tener.                              |
| `PlayerCanChangeDailyLimit` | boolean  | `false`      | `true` deja al titular cambiar el límite diario de una tarjeta.             |
| `MaxDailyLimit`             | number   | `100000`     | Límite diario más alto que puede tener una tarjeta.                         |
| `CreditCards`               | table\[] | tres niveles | Niveles de tarjeta. Cada uno tiene `label`, `dailyLimit`, `price` e `item`. |

Cada nivel es un ítem de inventario propio. `item` debe ser el nombre de un ítem registrado en tu inventario, con su imagen.

{% code title="data/cards.lua" %}

```lua
CreditCards = {
    { label = 'Standard Card', dailyLimit = 2500,  price = 100, item = 'card_standard' },
    { label = 'Premium Card',  dailyLimit = 5000,  price = 200, item = 'card_premium' },
    { label = 'Gold Card',     dailyLimit = 10000, price = 300, item = 'card_elite' },
},
```

{% endcode %}

En `shared/config.lua`, dentro de `cards`:

| Opción               | Tipo   | Por defecto | Qué hace                                                                                    |
| -------------------- | ------ | ----------- | ------------------------------------------------------------------------------------------- |
| `posMaxCharge`       | number | `10000000`  | Importe máximo que otro recurso puede cobrar o devolver en una tarjeta en una sola llamada. |
| `pin.maxAttempts`    | number | `5`         | PIN de tarjeta erróneos permitidos antes de que se bloquee.                                 |
| `pin.lockMinutes`    | number | `15`        | Minutos que una tarjeta queda bloqueada.                                                    |
| `pin.cooldownMs`     | number | `3000`      | Milisegundos entre dos intentos de PIN.                                                     |
| `pin.sessionSeconds` | number | `300`       | Segundos que una sesión de cajero sigue siendo válida tras el PIN.                          |

## Préstamos · `data/loans.lua`

| Opción                           | Tipo    | Por defecto  | Qué hace                                                                      |
| -------------------------------- | ------- | ------------ | ----------------------------------------------------------------------------- |
| `EnableLoans`                    | boolean | `true`       | `false` desactiva los préstamos.                                              |
| `AccountsWithLoans`              | table   | todas `true` | Tipos de cuenta que pueden pedir préstamos: `personal`, `business`, `custom`. |
| `TimeScale.gameMonthRealSeconds` | number  | `86400`      | Segundos reales de un mes de juego. Vence una cuota cada mes de juego.        |
| `LoanPlans`                      | table   | cinco planes | Planes de préstamo. Ver más abajo.                                            |
| `MaxActiveLoans`                 | number  | `4`          | Préstamos que una cuenta puede tener abiertos a la vez.                       |
| `LoanSchedulerInterval`          | number  | `1800`       | Segundos entre dos pasadas del proceso de cobro. Mínimo 60.                   |

En `shared/config.lua`, dentro de `loans`: `minRate` (`0.5`), el interés más bajo con el que puede quedar un préstamo tras aplicar la puntuación de crédito y los descuentos de recompensas.

### Planes · `LoanPlans`

Un plan de plazo fijo tiene `label`, `maxAmount`, `interestRate`, `months` y `enabled`. Un plan con `options` deja al jugador elegir el plazo, cada uno con su interés.

{% code title="data/loans.lua" %}

```lua
LoanPlans = {
    starter = { label = 'Starter Loan', maxAmount = 5000, interestRate = 5.5, months = 12, enabled = true },

    custom = {
        label = 'Custom Loan',
        maxAmount = 500000,
        options = {
            { months = 12, interestRate = 8.5 },
            { months = 24, interestRate = 9.0 },
        },
        enabled = true,
    },
},
```

{% endcode %}

### Pagos · `Payments`

| Opción                  | Tipo    | Por defecto | Qué hace                                                                                             |
| ----------------------- | ------- | ----------- | ---------------------------------------------------------------------------------------------------- |
| `graceHours`            | number  | `6`         | Horas tras el vencimiento antes de que una cuota cuente como atrasada.                               |
| `defaultHours`          | number  | `72`        | Horas de retraso tras las cuales el préstamo entra en mora.                                          |
| `blockNewLoansWhenLate` | boolean | `true`      | `true` rechaza préstamos nuevos mientras haya uno atrasado.                                          |
| `penalty.pct`           | number  | `2.0`       | Penalización por intervalo, como porcentaje de lo que queda por pagar.                               |
| `penalty.scoreLoss`     | number  | `5`         | Puntos de crédito que se pierden con cada penalización.                                              |
| `penalty.mode`          | string  | `'flat'`    | `'flat'` suma el mismo porcentaje en cada intervalo. `'compounding'` lo aplica sobre los anteriores. |
| `penalty.intervalHours` | number  | `24`        | Horas entre dos penalizaciones.                                                                      |
| `penalty.capPct`        | number  | `30.0`      | Tope de las penalizaciones acumuladas, como porcentaje del total del préstamo.                       |

### Capacidad de endeudamiento · `Capacity`

Lo máximo que puede pedir un jugador es el menor de dos límites, nunca por debajo de cero: uno por el saldo de la cuenta y otro por los ingresos.

| Opción                   | Tipo     | Por defecto | Qué hace                                                                                                                       |
| ------------------------ | -------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `equityMultiplier`       | number   | `3.0`       | Límite por saldo: (saldo de la cuenta − deuda pendiente) × este valor.                                                         |
| `income.enabled`         | boolean  | `true`      | `true` añade el límite por ingresos en las cuentas personales. Las de empresa y las compartidas solo usan el límite por saldo. |
| `income.recentPaychecks` | number   | `5`         | Nóminas cobradas que se promedian para calcular los ingresos.                                                                  |
| `income.factor`          | number   | `8.0`       | Límite por ingresos: ingreso medio × este valor × multiplicador de puntuación − deuda pendiente.                               |
| `scoreMultipliers`       | table\[] | seis tramos | Multiplicador del límite por ingresos según la puntuación de crédito. Cada entrada tiene `min` y `mult`.                       |

### Embargo · `Garnishment`

| Opción     | Tipo    | Por defecto           | Qué hace                                                                         |
| ---------- | ------- | --------------------- | -------------------------------------------------------------------------------- |
| `enabled`  | boolean | `true`                | `false` impide que el banco retenga ingresos.                                    |
| `pct`      | number  | `25.0`                | Porcentaje retenido de cada nómina mientras un préstamo está atrasado o en mora. |
| `statuses` | table   | los dos `true`        | Estados del préstamo que lo activan: `[1]` atrasado, `[2]` en mora.              |
| `sources`  | table   | `{ paycheck = true }` | Ingresos a los que se aplica la retención.                                       |

## Puntuación de crédito · `data/creditscore.lua`

| Opción        | Tipo     | Por defecto                                   | Qué hace                                                                                                            |
| ------------- | -------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `Enable`      | boolean  | `true`                                        | `false` desactiva la puntuación de crédito.                                                                         |
| `default`     | number   | `500`                                         | Puntuación de una cuenta nueva.                                                                                     |
| `min` / `max` | number   | `300` / `850`                                 | Límites de la puntuación.                                                                                           |
| `bands`       | table\[] | seis tramos                                   | Cada tramo tiene `min`, `label` y `modifier`: puntos que se suman al interés de un préstamo. En negativo lo rebaja. |
| `deltas`      | table    | `onTime = 5`, `late = -10`, `defaulted = -60` | Puntos que se ganan o se pierden con cada evento.                                                                   |

En `shared/config.lua`, dentro de `creditScore`: `onTimeCooldownHours` (`0`), las horas que deben pasar para que otro pago a tiempo vuelva a sumar puntos. `0` significa que cuenta cada pago.

## Ahorros · `data/savings.lua`

| Opción                        | Tipo    | Por defecto  | Qué hace                                                                               |
| ----------------------------- | ------- | ------------ | -------------------------------------------------------------------------------------- |
| `EnableSavings`               | boolean | `true`       | `false` desactiva los ahorros.                                                         |
| `SavingsWeekEquivalent`       | number  | `8`          | Horas reales de una semana de ahorro. El interés se paga una vez por semana de ahorro. |
| `SavingsInterestRate`         | number  | `2.5`        | Porcentaje de interés de las metas personales.                                         |
| `MaxActiveGoals`              | number  | `4`          | Metas que puede tener una cuenta personal.                                             |
| `BusinessSavingsInterestRate` | number  | `3.0`        | Porcentaje de interés de las metas de empresa.                                         |
| `BusinessMaxActiveGoals`      | number  | `5`          | Metas que puede tener una cuenta de empresa.                                           |
| `CustomSavingsInterestRate`   | number  | `2.5`        | Porcentaje de interés de las metas de cuentas compartidas.                             |
| `CustomMaxActiveGoals`        | number  | `5`          | Metas que puede tener una cuenta compartida.                                           |
| `AccountsWithSavings`         | table   | todas `true` | Tipos de cuenta que pueden ahorrar: `personal`, `business`, `custom`.                  |

## Cheques · `data/cheques.lua`

| Opción        | Tipo   | Por defecto         | Qué hace                                                                                                  |
| ------------- | ------ | ------------------- | --------------------------------------------------------------------------------------------------------- |
| `Item`        | string | `'bank_cheque'`     | Ítem que se entrega como cheque.                                                                          |
| `BookItem`    | string | `'bank_chequebook'` | Ítem con el que los jefes emiten cheques de empresa.                                                      |
| `BookSeconds` | number | `30`                | Segundos que la opción de emitir un cheque permanece sobre los jugadores cercanos tras usar el talonario. |

En `shared/config.lua`, dentro de `cheques`: `maxAmount` (`100000000`), el importe máximo de un cheque.

{% hint style="info" %}
Los cambios en los ítems de cheque necesitan reiniciar el recurso, también cuando se hacen desde el panel.
{% endhint %}

## Recompensas · `data/rewards.lua`

| Opción                               | Tipo     | Por defecto       | Qué hace                                                                                                                                                                          |
| ------------------------------------ | -------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Enabled`                            | boolean  | `true`            | `false` desactiva las recompensas.                                                                                                                                                |
| `EarnRates`                          | table    | cinco acciones    | Puntos por acción: `base` puntos fijos más 1 punto por cada `per` del importe. `per = 0` da solo la base. Acciones: `deposit`, `withdraw`, `transfer`, `atm_use`, `loan_payment`. |
| `ActionLabels`                       | table    | cinco etiquetas   | Nombre de cada acción en el historial de puntos.                                                                                                                                  |
| `AntiFarm.Enabled`                   | boolean  | `true`            | `false` desactiva las tres protecciones.                                                                                                                                          |
| `AntiFarm.ActionCooldown`            | table    | de 0 a 60         | Segundos entre dos concesiones de la misma acción, por jugador. `0` = sin espera.                                                                                                 |
| `AntiFarm.DailyPointsCap`            | number   | `500`             | Puntos que un jugador puede ganar al día. `0` = sin tope.                                                                                                                         |
| `AntiFarm.RoundTrip.windowSeconds`   | number   | `300`             | Ventana en la que la acción contraria anula los puntos.                                                                                                                           |
| `AntiFarm.RoundTrip.amountTolerance` | number   | `0.25`            | Cuánto deben parecerse los dos importes para contar como el mismo dinero: `0.25` = ±25 %.                                                                                         |
| `AntiFarm.RoundTrip.pairs`           | table    | depósito ↔ retiro | Qué acción es la contraria de cuál.                                                                                                                                               |
| `Categories`                         | table\[] | cinco             | Pestañas del catálogo: `key` y `label`.                                                                                                                                           |
| `Catalog`                            | table\[] | diez recompensas  | Recompensas disponibles. Ver más abajo.                                                                                                                                           |

Cada recompensa tiene `id` (único), `name`, `description`, `cost` en puntos, `icon`, `category` y `type`:

| `type`             | Qué recibe el jugador                               | Campos                          |
| ------------------ | --------------------------------------------------- | ------------------------------- |
| `'cash'`           | `value` ingresado en el banco al momento.           | `value`                         |
| `'fee_waiver'`     | La próxima comisión bancaria es gratis.             | `uses`, `durationDays`          |
| `'interest_boost'` | `value` % más de interés en los ahorros personales. | `value`, `durationDays`         |
| `'loan_discount'`  | `value` % menos en el interés del próximo préstamo. | `value`, `uses`, `durationDays` |

## Cajeros · `data/atms.lua`

| Opción        | Tipo     | Por defecto    | Qué hace                                                                                              |
| ------------- | -------- | -------------- | ----------------------------------------------------------------------------------------------------- |
| `ATMDistance` | number   | `1.5`          | Distancia de target de un cajero, en metros.                                                          |
| `ATM`         | table\[] | cuatro modelos | Modelos de prop que funcionan como cajero. Cada entrada es `{ model = hash }`, con el hash en número. |

## Sucursales · `data/banks.lua`

| Opción             | Tipo     | Por defecto      | Qué hace                                                                                                                    |
| ------------------ | -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `ShowBankBlips`    | boolean  | `true`           | `false` oculta todos los blips del banco. Forma parte de la sección general: tras el primer arranque, cámbialo en el panel. |
| `DebugTargetZones` | boolean  | `false`          | `true` dibuja las zonas de target de las sucursales.                                                                        |
| `BankLocations`    | table\[] | lista de ejemplo | Sucursales que se crean en el primer arranque.                                                                              |

{% hint style="warning" %}
`BankLocations` se lee una sola vez, cuando la tabla de puntos está vacía. Después, gestiona las sucursales y los puntos de cajero desde `/bankadmin` → Puntos. La lista del archivo es un ejemplo para el mapa por defecto: sustitúyela antes del primer arranque si tus bancos están en otro sitio.
{% endhint %}

## Interfaz · `data/interface.lua` y `ui`

| Opción                               | Tipo         | Por defecto  | Qué hace                                               |
| ------------------------------------ | ------------ | ------------ | ------------------------------------------------------ |
| `AccentColor` (`data/interface.lua`) | string (hex) | `'#e53935'`  | Color de acento de la interfaz del banco y del cajero. |
| `ui.accent` (`shared/config.lua`)    | string (hex) | configurable | Color de acento del panel de staff.                    |

## Logs en Discord · `data/webhook.lua`

| Opción       | Tipo   | Por defecto                 | Qué hace                                              |
| ------------ | ------ | --------------------------- | ----------------------------------------------------- |
| `BotName`    | string | `'CuxialBank'`              | Nombre con el que se publican los mensajes.           |
| `ServerName` | string | `'My Server'`               | Nombre que aparece como autor de cada mensaje.        |
| `IconURL`    | string | `''`                        | Icono junto al autor.                                 |
| `DateFormat` | string | `'%d/%m/%Y [%X]'`           | Formato de fecha del pie.                             |
| `Webhook`    | table  | una entrada por tipo de log | Para cada tipo de log: `enabled` y `color` (decimal). |

En `shared/config.lua`, dentro de `logs`:

| Opción      | Tipo    | Por defecto                | Qué hace                                                                                                                   |
| ----------- | ------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `enabled`   | boolean | `true`                     | `false` no envía ningún log.                                                                                               |
| `convar`    | string  | `'cuxial_banking_webhook'` | Nombre de la convar que guarda la URL del webhook. Una convar llamada `<convar>_<tipo de log>` la sustituye para ese tipo. |
| `auditDays` | number  | `90`                       | Días que se conserva el registro de auditoría del panel de staff. `0` lo conserva todo.                                    |

La URL nunca se escribe en un archivo. Consulta [Instalación](/scripts/es/nucleo/cuxial-banking/installation.md).

## El resto de `shared/config.lua`

| Opción                       | Tipo            | Por defecto             | Qué hace                                                                                                              |
| ---------------------------- | --------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `debug`                      | boolean         | `false`                 | Imprime trazas en la consola. También se activa poniendo la convar `cuxial_banking_debug` a `1`.                      |
| `commands.admin.name`        | string          | `'bankadmin'`           | Comando que abre el panel de staff. Una cadena vacía quita el comando.                                                |
| `commands.admin.restricted`  | string \| false | `false`                 | Grupo ACE que exige el comando, por ejemplo `'group.admin'`. `false` deja solo la comprobación de `admin.permission`. |
| `admin.permission`           | string          | `'admin'`               | Permiso de tu framework que convierte a un jugador en staff del banco.                                                |
| `world.targetDistance`       | number          | `1.5`                   | Distancia de target de una sucursal, en metros.                                                                       |
| `world.chequeTargetDistance` | number          | `2.0`                   | Distancia a la que un jefe puede apuntar a un jugador para emitirle un cheque de empresa.                             |
| `world.nearbyRadius`         | number          | `12.0`                  | Radio en el que se ofrecen los jugadores cercanos como destinatarios de una transferencia.                            |
| `world.interactions`         | string          | `'cuxial_interactions'` | Nombre del recurso que muestra las sucursales como NPC.                                                               |
| `wealth.cacheSeconds`        | number          | `15`                    | Segundos que se reutiliza un informe de riqueza antes de volver a calcularlo.                                         |
| `wealth.providerTimeoutMs`   | number          | `2000`                  | Milisegundos que tiene cada fuente del informe de riqueza para responder.                                             |
| `wealth.containerDepth`      | number          | `3`                     | Niveles de contenedores dentro de contenedores que abre el informe de riqueza.                                        |
| `limits.reasonLength`        | number          | `100`                   | Caracteres del concepto de una transferencia.                                                                         |
| `limits.accountNameLength`   | number          | `100`                   | Caracteres del nombre de una cuenta compartida.                                                                       |
| `limits.goalNameLength`      | number          | `100`                   | Caracteres del nombre de una meta de ahorro.                                                                          |
| `limits.chequePayToLength`   | number          | `100`                   | Caracteres del beneficiario de un cheque.                                                                             |
| `limits.chequeMemoLength`    | number          | `120`                   | Caracteres del concepto de un cheque.                                                                                 |
| `limits.contactNameLength`   | number          | `48`                    | Caracteres del nombre de un contacto.                                                                                 |
| `limits.maxContacts`         | number          | `50`                    | Contactos por jugador.                                                                                                |
| `limits.maxMultiTransfer`    | number          | `20`                    | Destinatarios de una transferencia a varios contactos.                                                                |
| `limits.savingsMaxTarget`    | number          | `4294967295`            | Objetivo más alto de una meta de ahorro.                                                                              |
| `limits.lockWaitMs`          | number          | `5000`                  | Milisegundos que una operación espera a que termine otra sobre la misma cuenta.                                       |

## Cambios habituales

### Pasar el banco a otro ítem de efectivo

En `/bankadmin` → Config → General, pon como ítem de efectivo el que use tu inventario, o desactiva el efectivo como ítem para usar la cuenta de efectivo de tu framework.

### Hacer los préstamos más rápidos o más lentos

`TimeScale.gameMonthRealSeconds` marca el ritmo. Con `43200`, vence una cuota cada 12 horas reales.

### Añadir un nivel de tarjeta

Registra un ítem nuevo en tu inventario. Antes del primer arranque, añade una línea a `CreditCards`; después, añade el nivel en `/bankadmin` → Config, en la sección de tarjetas.

```lua
{ label = 'Tarjeta Black', dailyLimit = 50000, price = 1000, item = 'card_black' },
```

### Traducir los textos

Todos los textos están en `locales/en.json` y `locales/es.json`. Los nombres de los planes de préstamo, los niveles de tarjeta, los tramos de puntuación de crédito y las recompensas están en los archivos de datos.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.cuxial.com/scripts/es/nucleo/cuxial-banking/configuration.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
