> 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/policia-y-medico/cuxial-police/configuration.md).

# Configuración

Cómo guarda Cuxial Police sus ajustes y qué hace cada sección y cada opción.

Cuxial Police guarda sus ajustes en la base de datos y los edita desde una pestaña de la tablet. Esta página explica cómo funciona y qué hace cada opción.

## Cómo funcionan los ajustes

| Dónde                                                 | Qué es                                                                  |
| ----------------------------------------------------- | ----------------------------------------------------------------------- |
| `install/defaults/config.lua`                         | Valores de fábrica de los ajustes principales                           |
| `install/defaults/police/`, `ems/`, `fib/`, `shared/` | Valores de fábrica de las listas de datos (permisos, radio, objetos...) |
| Tabla `cuxial_police_settings`                        | Los valores que el servidor usa de verdad                               |
| Pestaña de ajustes de la tablet                       | Donde se cambian                                                        |

En el primer arranque cada sección se copia de `install/defaults/` a la base de datos. A partir de ahí la base de datos es la única fuente: los archivos solo se vuelven a leer para restaurar una sección.

{% hint style="warning" %}
Editar un archivo de `install/defaults/` no cambia una instalación que ya ha arrancado una vez. Cambia el valor en la pestaña de ajustes. Para llevar un cambio de archivo a una instalación en marcha, reinicia el recurso y usa el botón de valores de fábrica de esa sección.
{% endhint %}

### La pestaña de ajustes

La pestaña aparece en la tablet para el staff: jugadores con el permiso `admin` de tu framework. El jugador también necesita un trabajo de facción, porque solo los miembros de una facción pueden abrir la tablet.

| Acción             | Qué hace                                                          |
| ------------------ | ----------------------------------------------------------------- |
| Guardar            | Guarda la sección y la aplica al servidor y a todos los jugadores |
| Valores de fábrica | Restaura la sección a lo que contiene `install/defaults/`         |
| Exportar           | Copia al portapapeles las secciones personalizadas, en JSON       |
| Importar           | Carga secciones desde ese JSON                                    |

La mayoría de las secciones se aplica al momento. Estas necesitan reiniciar el recurso:

| Sección                                                | Por qué                                                                |
| ------------------------------------------------------ | ---------------------------------------------------------------------- |
| `config.radio`, `data.radio`, `data.radioaudio`        | Las frecuencias y el efecto de audio se construyen una vez al arrancar |
| `data.keybinds`                                        | Las teclas se registran una vez al arrancar                            |
| `fingerprint.closeKey`, `data.surrender` → `cancelKey` | Son teclas                                                             |
| `addons.fib.enabled`, `addons.fib.devices.items`       | El addon y los exports de sus items se registran una vez al arrancar   |

{% hint style="info" %}
Esta página nombra cada sección por su id y da el título que verás en la pestaña de ajustes.
{% endhint %}

## Trabajos y general

Secciones `config.jobs` (Trabajos) y `config.general` (General).

| Opción         | Tipo   | Por defecto                              | Qué hace                                                                                                                                                                                |
| -------------- | ------ | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `policeJobs`   | tabla  | `{ police = true }`                      | Trabajos que pertenecen a la facción de policía                                                                                                                                         |
| `emsJobs`      | tabla  | `{ ambulance = true }`                   | Trabajos que pertenecen a la facción EMS                                                                                                                                                |
| `factionJobs`  | tabla  | `police → 'police'`, `ambulance → 'ems'` | Mapa de trabajo a facción (`'police'`, `'ems'`). Se rellena a partir de las dos listas anteriores; los trabajos federales se añaden solos. Para quitar un trabajo, bórralo también aquí |
| `bossLevel`    | número | `8`                                      | Grado desde el que un miembro cuenta como jefe, además de los grados que tu framework ya marca como jefe                                                                                |
| `cameraRadius` | número | `100.0`                                  | Radio en metros en el que se buscan cámaras de CCTV alrededor del agente                                                                                                                |

## Opciones de la tablet y colores

Secciones `config.appOptions` (Opciones de la MDT) y `config.theme` (Colores).

| Opción                  | Tipo     | Por defecto  | Qué hace                                                                                |
| ----------------------- | -------- | ------------ | --------------------------------------------------------------------------------------- |
| `appOptions.confiscate` | booleano | `true`       | Muestra la opción de incautar en la tablet y en el menú rápido. Solo cambia la interfaz |
| `theme.police`          | tabla    | configurable | Colores de la tablet y el HUD de policía                                                |
| `theme.ems`             | tabla    | configurable | Colores de la tablet y el HUD de EMS                                                    |
| `theme.fib`             | tabla    | configurable | Colores de la tablet y el HUD federal                                                   |

Cada tema tiene `accent` (obligatorio) y `light`, `dark` y `gradientTo` (opcionales). Los tres opcionales se derivan de `accent` cuando se omiten. Todos son colores hexadecimales.

## Radio

Secciones `config.radio` (Radio), `data.radio` (Canales de radio), `data.radioanims` (Animaciones de radio) y `data.radioaudio` (Audio de radio).

| Opción                | Tipo     | Por defecto           | Qué hace                                                                                          |
| --------------------- | -------- | --------------------- | ------------------------------------------------------------------------------------------------- |
| `radio.enabled`       | booleano | `true`                | `false`: los jugadores no pueden entrar en frecuencias                                            |
| `radio.defaultVolume` | número   | `1.0`                 | Volumen de radio con el que empieza un jugador (0 a 1)                                            |
| `radio.centralFreqs`  | tabla    | `DISPATCH`, `COMMAND` | Frecuencias que actúan como nivel de mando: hablan a todas las frecuencias tácticas de la facción |

`data.radio` contiene una lista de frecuencias por facción (`police`, `ems`, `fib`), agrupadas por categoría, y una tabla `blips` que da un icono y un color en el mapa a los miembros sintonizados en una frecuencia. Los nombres del archivo por defecto son ejemplos a cambiar.

`data.radioaudio` contiene el efecto de audio. `proximityFxCutoff` (por defecto `4.0`) es la distancia por debajo de la cual se oye a quien habla sin el efecto de radio.

## Avisos

Sección `config.dispatch` (Central / avisos) y `data.gunshotwhitelist` (Disparos ignorados).

| Opción                       | Tipo     | Por defecto | Qué hace                                                                                                       |
| ---------------------------- | -------- | ----------- | -------------------------------------------------------------------------------------------------------------- |
| `dispatch.enabled`           | booleano | `true`      | `false`: no se envían avisos de disparos                                                                       |
| `dispatch.ignoredJobs`       | tabla    | `{}`        | Trabajos cuyos miembros de servicio no generan avisos de disparos. Acepta una lista o un mapa `trabajo = true` |
| `dispatch.sendAlertCooldown` | número   | `10`        | Segundos entre dos avisos enviados por el mismo jugador con el export de cliente                               |
| `dispatch.gunshotCooldown`   | número   | `5`         | Segundos entre dos avisos de disparos del mismo jugador                                                        |
| `dispatch.entornoCooldown`   | número   | `30`        | Segundos entre dos usos de `/entorno`                                                                          |
| `dispatch.radioCodeCooldown` | número   | `3`         | Segundos entre dos códigos de radio del mismo miembro                                                          |

`data.gunshotwhitelist` es la lista de nombres de arma que nunca generan un aviso de disparos.

## Multas y recaudación

Secciones `config.payment` (Cobros), `config.revenue` (Recaudación) y `data.paymentLocations` (Puntos de pago).

| Opción                          | Tipo     | Por defecto   | Qué hace                                                                                                                                                      |
| ------------------------------- | -------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `payment.enabled`               | booleano | `true`        | `false` apaga los puntos de pago y los comandos de pago                                                                                                       |
| `payment.commands`              | booleano | `false`       | `true`: `/paymultas` y `/payfacturas` abren la pantalla de pago desde cualquier sitio. `false`: las multas y las facturas solo se pagan en los puntos de pago |
| `payment.payAccount`            | texto    | `'bank'`      | Cuenta de la que se cobra primero: `'bank'` o `'cash'`                                                                                                        |
| `payment.allowCashFallback`     | booleano | `true`        | Cobra en efectivo cuando la primera cuenta no alcanza                                                                                                         |
| `payment.bankFeePercent`        | número   | `0`           | Porcentaje extra que se suma al importe                                                                                                                       |
| `revenue.enabled`               | booleano | `true`        | Ingresa lo pagado en la cuenta de la facción mediante `cuxial_banking`                                                                                        |
| `revenue.police.societyName`    | texto    | `'police'`    | Cuenta que recibe las multas policiales                                                                                                                       |
| `revenue.police.societyLabel`   | texto    | configurable  | Concepto que aparece en el movimiento de la cuenta                                                                                                            |
| `revenue.ems.societyName`       | texto    | `'ambulance'` | Cuenta que recibe las facturas médicas                                                                                                                        |
| `revenue.ems.societyLabel`      | texto    | configurable  | Concepto que aparece en el movimiento de la cuenta                                                                                                            |
| `revenue.ems.commissionPercent` | número   | `30`          | Parte de una factura médica que cobra el médico que la emitió, si está conectado                                                                              |
| `revenue.ems.commissionAccount` | texto    | `'bank'`      | Cuenta en la que el médico recibe la comisión                                                                                                                 |

Cada entrada de `data.paymentLocations` es un punto con `coords`, `heading`, `size`, `issuer` (`'police'` o `'ems'`), `label`, `icon` y `distance`. Vienen dos puntos por defecto, uno de policía en Mission Row y uno de EMS en Pillbox Hill; muévelos a tus propios edificios.

## Puntos de estación

Secciones `config.stations` (Estaciones) y `config.stationNpc` (NPC de las estaciones). La lista empieza vacía y se construye dentro del juego con el editor de la pestaña de ajustes.

| Campo                         | Tipo     | Qué hace                                                                |
| ----------------------------- | -------- | ----------------------------------------------------------------------- |
| `id`                          | texto    | Identificador único del punto                                           |
| `type`                        | texto    | `'duty'`, `'stash'`, `'armory'`, `'mdt'` o `'event'`                    |
| `label`                       | texto    | Texto de la interacción                                                 |
| `coords`                      | vector   | Posición, con orientación opcional                                      |
| `faction`                     | texto    | `'police'`, `'ems'`, `'fib'` o `'any'`                                  |
| `minGrade`                    | número   | Grado mínimo                                                            |
| `onDuty`                      | booleano | Exige estar de servicio                                                 |
| `distance`                    | número   | Distancia de interacción. `2.0` por defecto                             |
| `enabled`                     | booleano | `false` oculta el punto                                                 |
| `slots`, `weight`, `personal` | taquilla | Tamaño de la taquilla; `personal = true` da una privada a cada miembro  |
| `items`                       | armería  | Lista de `{ name, price, count, grade }`                                |
| `event`, `server`             | evento   | Evento que se lanza; `server = true` lo lanza en el servidor            |
| `npc`                         | tabla    | Opcional. Convierte el punto en un NPC (necesita `cuxial_interactions`) |

{% hint style="info" %}
Las armerías necesitan `ox_inventory`.
{% endhint %}

La tabla `npc` tiene `enabled`, `model`, `scenario`, `name`, `role`, `greeting` y `group`. Los puntos con el mismo `group` comparten un NPC, con un botón por punto. Sin `cuxial_interactions` el punto sigue siendo una zona de interacción.

`config.stationNpc` contiene los valores por defecto de esos NPC: `model`, `scenario`, `spawnDistance` (por defecto `60.0`) y las listas de modelos y escenarios que ofrece el editor.

## Herramientas de policía

| Opción                           | Sección              | Por defecto      | Qué hace                                                                                   |
| -------------------------------- | -------------------- | ---------------- | ------------------------------------------------------------------------------------------ |
| `surrender.maxDistance`          | `config.surrender`   | `15.0`           | Distancia máxima para pedir a un jugador que se rinda                                      |
| `catear.cooldown`                | `config.catear`      | `5`              | Segundos entre dos cateos                                                                  |
| `catear.maxDistance`             | `config.catear`      | `2.5`            | Distancia máxima para catear a un jugador                                                  |
| `ankle.tickMs`                   | `config.ankle`       | `3000`           | Cada cuánto se envía la posición de una tobillera, en milisegundos                         |
| `ankle.placeDistance`            | `config.ankle`       | `3.0`            | Distancia máxima para colocar una tobillera                                                |
| `ankle.shockCooldownMs`          | `config.ankle`       | `5000`           | Tiempo mínimo entre dos descargas al mismo portador                                        |
| `fingerprint.points`             | `config.fingerprint` | ejemplo          | Posiciones de los lectores de huellas                                                      |
| `fingerprint.interactDistance`   | `config.fingerprint` | `1.0`            | Distancia para usar un lector                                                              |
| `fingerprint.broadcastRadius`    | `config.fingerprint` | `25.0`           | Radio en el que el escaneo se muestra a otros jugadores                                    |
| `fingerprint.cooldown`           | `config.fingerprint` | `10000`          | Milisegundos entre dos escaneos                                                            |
| `fingerprint.closeKey`           | `config.fingerprint` | `'BACK'`         | Tecla que cierra el lector                                                                 |
| `operations.allowedDurationsMin` | `config.operations`  | `{ 10, 20, 30 }` | Duraciones aceptadas para una zona del mapa, en minutos. La tablet ofrece 10, 20 y 30      |
| `duty.pollIntervalMs`            | `config.duty`        | `2500`           | Cada cuánto se refrescan las posiciones de los miembros de servicio para los blips lejanos |
| `duty.moveThresholdM`            | `config.duty`        | `15.0`           | Metros que debe moverse un miembro para que se envíe de nuevo su posición                  |
| `duty.orphanCleanupSec`          | `config.duty`        | `1800`           | Segundos tras los que se cierra un fichaje que quedó abierto                               |

Las listas de datos de las herramientas de policía se editan como secciones completas:

| Sección                                              | Título en la pestaña                | Qué contiene                                                                                               |
| ---------------------------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `data.illegalitems`                                  | Objetos ilegales                    | Items que detecta un cateo, como `{ name, label }`                                                         |
| `data.policeobjects`                                 | Objetos policiales                  | Catálogo de props colocables, por categoría                                                                |
| `data.traffic`                                       | Tráfico                             | Puntos de control de tráfico: `maxPoints` (`24`), `radius`, `radiusMin`, `radiusMax`, colores y marcadores |
| `data.cuffs`                                         | Esposas                             | Prop de las esposas, animaciones y `maxDistance` (`1.5`)                                                   |
| `data.escort`                                        | Escoltar                            | Animación de escolta, posición de enganche y `maxDistance` (`1.5`)                                         |
| `data.lockpick`                                      | Ganzúa                              | Dificultad de las pruebas de habilidad y `maxDistance` (`3.0`)                                             |
| `data.surrender`                                     | Rendición (datos)                   | Animaciones, `cancelKey` (`'X'`), `requestTimeoutMs`, `requestCooldownMs`                                  |
| `data.cctv`                                          | Cámaras CCTV                        | Modelos de prop tratados como cámaras de CCTV                                                              |
| `data.photo`                                         | Cámara (datos)                      | Prop de la cámara, zoom, rotación y tiempos del modo foto                                                  |
| `data.vehicledata`                                   | Datos de vehículos                  | Nombres de clases y colores de vehículo que muestra la ficha                                               |
| `data.divisions`, `data.condecorates`, `data.badges` | Divisiones, Condecoraciones, Placas | Divisiones, condecoraciones y plantillas de placa de la policía                                            |

## Prisión

Sección `config.prison` (Prisión). Solo se aplica cuando `rcore_prison` no está iniciado.

| Opción                 | Tipo    | Por defecto | Qué hace                                   |
| ---------------------- | ------- | ----------- | ------------------------------------------ |
| `prison.monthSeconds`  | número  | `60`        | Segundos reales que dura un mes de condena |
| `prison.jailCoords`    | vector4 | ejemplo     | Dónde se coloca al preso                   |
| `prison.releaseCoords` | vector4 | ejemplo     | Dónde aparece el preso liberado            |

## EMS

Secciones `config.medical` (Médico) y `config.appointments` (Citas y recepciones).

| Opción                               | Tipo           | Por defecto        | Qué hace                                                                                  |
| ------------------------------------ | -------------- | ------------------ | ----------------------------------------------------------------------------------------- |
| `medical.reviveEvent`                | texto \| false | `false`            | Evento de cliente que lanzan los fármacos que reaniman. `false` usa la reanimación nativa |
| `medical.hospitalPhone`              | texto          | ejemplo            | Número desde el que se envían los SMS de citas con `lb-phone`                             |
| `appointments.reminderMinutesBefore` | número         | `60`               | Minutos antes de la cita en que se envía el recordatorio                                  |
| `appointments.defaultDurationMin`    | número         | `20`               | Duración por defecto de una cita                                                          |
| `appointments.noShowGraceMin`        | número         | `30`               | Minutos tras el final del hueco antes de marcarla como no presentado                      |
| `appointments.noShowRegress`         | booleano       | `true`             | No presentarse a una cita de cura retrocede un paso el plan de cura                       |
| `appointments.checkInEarlyMin`       | número         | `60`               | Con cuánta antelación puede hacer check-in el paciente                                    |
| `appointments.checkInRadius`         | número         | `8.0`              | Metros desde una recepción dentro de los que se acepta el check-in                        |
| `appointments.autoNextStep`          | booleano       | `true`             | Cerrar una cita de cura crea la siguiente del plan                                        |
| `appointments.autoBill`              | booleano       | `false`            | Factura al paciente al cerrar, usando `prices`                                            |
| `appointments.defaultHospital`       | texto          | `'Medical Center'` | Nombre del hospital que se escribe en las citas nuevas                                    |
| `appointments.prices`                | tabla          | ejemplo            | Precio por tipo de cita; `0` es gratis                                                    |
| `appointments.receptions`            | tabla          | ejemplo            | Puntos de recepción: `coords`, `size`, `heading`, `label`                                 |

## Addon de agencia federal

Sección `config.fib` (Addon FIB), clave `addons.fib`.

| Opción             | Tipo     | Por defecto                | Qué hace                                                                                    |
| ------------------ | -------- | -------------------------- | ------------------------------------------------------------------------------------------- |
| `enabled`          | booleano | `true`                     | `false`: la tercera facción no existe. Necesita reinicio                                    |
| `jobs`             | tabla    | ejemplo                    | Trabajos que pertenecen a la facción federal                                                |
| `label`            | texto    | configurable               | Nombre de la agencia                                                                        |
| `caseNumberPrefix` | texto    | configurable               | Prefijo del número de expediente, seguido de año y secuencia                                |
| `clearance`        | tabla    | `0→0`, `1→2`, `2→4`, `3→6` | Grado mínimo para ver un expediente de cada clasificación. El equipo del caso lo ve siempre |
| `gangResource`     | texto    | `'cuxial_gang'`            | Recurso que aporta las organizaciones criminales                                            |

### Inteligencia

| Opción                       | Por defecto | Qué hace                                                                                                                                                     |
| ---------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `intel.auto`                 | `false`     | `false`: la inteligencia y el calor solo suben con el trabajo de la agencia. `true`: también cuenta la actividad de policía y bandas, con `weights` y `heat` |
| `intel.manual`               | tabla       | Puntos de inteligencia por pieza de trabajo (sospechoso, confirmación, acto, acto verificado, prueba, lugar)                                                 |
| `intel.manualHeat`           | tabla       | Puntos de calor por pieza de trabajo                                                                                                                         |
| `intel.manualCaps`           | tabla       | Máximo de piezas de cada tipo que puntúan por organización; `0` es sin tope                                                                                  |
| `intel.maxIntel`             | `100`       | Tope del medidor de inteligencia                                                                                                                             |
| `intel.decayPerHour`         | `1.5`       | Inteligencia que se pierde por hora cuando la organización queda inactiva                                                                                    |
| `intel.idleHoursBeforeDecay` | `6`         | Horas sin eventos antes de que la inteligencia empiece a bajar                                                                                               |
| `intel.heatDecayPerHour`     | `3`         | Calor que se pierde por hora                                                                                                                                 |
| `intel.layers`               | tabla       | Inteligencia necesaria para desbloquear cada capa de la ficha de la organización                                                                             |

### Órdenes y operativos

| Opción                   | Por defecto                                       | Qué hace                                                                         |
| ------------------------ | ------------------------------------------------- | -------------------------------------------------------------------------------- |
| `warrants.durationHours` | `arrest = 72`, `search = 24`, `surveillance = 48` | Horas que dura una orden firmada                                                 |
| `ops.requireWarrant`     | `true`                                            | Allanamientos e incautaciones necesitan una orden de registro activa             |
| `ops.seizeStash`         | `true`                                            | El objetivo de alijo vacía el alijo real de la organización                      |
| `ops.seizeDirtyMoney`    | `true`                                            | El objetivo de caja incauta el dinero sucio de la organización                   |
| `ops.cooldownHours`      | `24`                                              | Horas mínimas entre dos operativos completados sobre la misma organización       |
| `ops.minSuccessRatio`    | `0.5`                                             | Parte de los objetivos (0 a 1) necesaria para que el operativo cuente como golpe |
| `ops.strikeLoyalty`      | `60`                                              | Lealtad que pierde la organización en sus territorios tras un golpe              |

### Dispositivos

| Opción                      | Por defecto                                              | Qué hace                                                               |
| --------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------- |
| `devices.items`             | `fib_camera`, `fib_mic`, `fib_gps`, `WEAPON_DIGISCANNER` | Item de cada dispositivo y arma usada como detector. Necesita reinicio |
| `devices.models`            | tabla                                                    | Modelos de prop que se ofrecen al colocar una cámara o un micrófono    |
| `devices.placeDistance`     | `4.0`                                                    | Distancia máxima para colocar una cámara o un micrófono                |
| `devices.pickupDistance`    | `3.0`                                                    | Distancia para recoger un dispositivo propio y recuperar el item       |
| `devices.gpsAttachDistance` | `3.0`                                                    | Distancia máxima al vehículo para fijar un rastreador                  |
| `devices.maxActive`         | `4` cada uno                                             | Dispositivos activos por agente y tipo                                 |
| `devices.batteryHours`      | `camera = 48`, `mic = 24`, `gps = 72`                    | Horas que funciona un dispositivo                                      |
| `devices.micRadius`         | `8.0`                                                    | Metros que capta un micrófono                                          |
| `devices.gpsTrailMax`       | `240`                                                    | Puntos de recorrido guardados por rastreador                           |
| `devices.detector`          | `radius = 30.0`, `removeDistance = 2.0`                  | Alcance del detector y distancia para retirar un dispositivo           |
| `devices.heatOnLost`        | `3`                                                      | Calor que gana la organización cuando retira un dispositivo            |

### Requisitos de desmantelamiento

La tabla `dismantle` nunca se envía a los jugadores. Un requisito a `0` (o `leader = false`) queda desactivado.

| Opción                           | Por defecto | Qué hace                                                                                     |
| -------------------------------- | ----------- | -------------------------------------------------------------------------------------------- |
| `dismantle.membersPct`           | `80`        | Porcentaje de los miembros reales que debe estar confirmado                                  |
| `dismantle.leader`               | `true`      | El jefe real tiene que estar confirmado                                                      |
| `dismantle.acts`                 | `30`        | Actos delictivos registrados                                                                 |
| `dismantle.actsMulti`            | `8`         | Actos con al menos `actsMultiPeople` (`2`) miembros confirmados implicados                   |
| `dismantle.actsSolid`            | `15`        | Actos con prueba y visto bueno de un supervisor                                              |
| `dismantle.evidence`             | `10`        | Evidencias físicas enlazadas                                                                 |
| `dismantle.zones`                | `1`         | Zonas de operación: territorios con al menos `zoneActs` (`5`) actos                          |
| `dismantle.places`               | `2`         | Lugares localizados                                                                          |
| `dismantle.manualActsNeedVerify` | `true`      | Un acto solo cuenta tras el visto bueno                                                      |
| `dismantle.verifyNotCreator`     | `true`      | Quien registra un acto no puede darle el visto bueno                                         |
| `dismantle.maxManualActsPerDay`  | `5`         | Actos registrados por día y organización                                                     |
| `dismantle.evidenceResource`     | `''`        | Recurso de evidencias cuyos casos se pueden enlazar como prueba. `''` deja solo los informes |
| `dismantle.videoDomains`         | `{}`        | Dominios aceptados para pruebas en vídeo. Vacío acepta cualquiera                            |
| `dismantle.requestNoteMin`       | `20`        | Caracteres mínimos de la nota de solicitud                                                   |
| `dismantle.requestCooldownHours` | `24`        | Espera para volver a solicitar tras una denegación                                           |

## Sistema

| Opción                                            | Sección            | Por defecto         | Qué hace                                           |
| ------------------------------------------------- | ------------------ | ------------------- | -------------------------------------------------- |
| `photo.uploadUrl`                                 | `config.photo`     | configurable        | Dirección a la que se suben las fotos              |
| `photo.maxWidth`, `photo.maxHeight`               | `config.photo`     | `1280`, `720`       | Tamaño máximo de una foto                          |
| `photo.uploadTimeoutMs`                           | `config.photo`     | `15000`             | Milisegundos antes de dar una subida por fallida   |
| `retention.plateChecksDays`                       | `config.retention` | `30`                | Días que se guardan las consultas de matrícula     |
| `retention.usageLogDays`                          | `config.retention` | `7`                 | Días que se guarda el registro de uso de fármacos  |
| `retention.dispensationsDays`                     | `config.retention` | `180`               | Días que se guardan las dispensaciones de farmacia |
| `limits.maxBillAmount`                            | `config.limits`    | `10000000`          | Importe máximo de una multa o factura              |
| `limits.maxSentenceMonths`                        | `config.limits`    | `1200`              | Condena máxima, en meses                           |
| `limits.maxPenalPrice`                            | `config.limits`    | `10000000`          | Multa máxima de un artículo del código penal       |
| `limits.maxTextLen`, `maxTitleLen`, `maxShortLen` | `config.limits`    | `5000`, `120`, `32` | Longitud máxima de notas, títulos y campos cortos  |

Los permisos por grado (`data.permissions`) y las teclas (`data.keybinds`) se explican en [Comandos y permisos](/scripts/es/policia-y-medico/cuxial-police/commands.md).

## Idioma

El idioma sigue la convar `ox:locale`. Los textos están en `locales/en.json` y `locales/es.json`, y los dos archivos se pueden editar.

## Cambios habituales

### Añadir un segundo trabajo de policía

En la pestaña de ajustes, sección `config.jobs`, añade el trabajo a `policeJobs` y a `factionJobs`. El resultado equivale a:

```lua
policeJobs = { police = true, sheriff = true },
factionJobs = { police = 'police', sheriff = 'police', ambulance = 'ems' },
```

### Cambiar el color de una facción

En la sección `config.theme`, indica solo el acento y deja que el resto se derive:

```lua
theme = {
    police = { accent = '#3b82f6' },
}
```

### Alargar las condenas

En la sección `config.prison`, un mes de condena que dura cinco minutos reales:

```lua
prison = { monthSeconds = 300 }
```

### Desactivar la agencia federal

En la sección `config.fib`, pon `enabled` a `false` y reinicia el recurso.


---

# 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/policia-y-medico/cuxial-police/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.
