# Códigos de error: Plataforma: notificaciones, tickets, media y otros

> Campana de notificaciones, tickets internos, almacenamiento y optimización de media, y lo demás de `src/` sin familia propia.

**Cómo se detecta (toda la familia):** La respuesta (`code`).

**Qué hacer (toda la familia):** El mensaje dice qué falta.

Lo que un código no dice lo hereda de la familia.

## `bad_request`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** Marcar notificaciones: falta decir cuáles (`notification_ids`, `group` o `all`).

## `custom_field_system_locked`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** Se intentó editar por el CRUD genérico de campos personalizados un campo de sistema (hoy solo "Tipo de compra", `settings.system_code = purchase_type`) o la sección que lo aloja ("Datos de compra").

## `invoice_custom_field_reserved`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** El PUT `/invoice-custom-field-values` quiso escribir la pregunta reservada `tipo_de_compra` (por `question_key` o por un nombre que deriva esa llave). El Tipo de compra solo se elige al crear o editar la orden.
- **Qué hacer:** Usar otra `question_key`; el Tipo de compra se pone desde el drawer "Finalizar orden" del catálogo.

## `no_entity_context`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** Este usuario no tiene una entidad activa.

## `optimized_file_exceeds_limit`

- **Tipo:** detalle · **HTTP:** — · **Estado:** vigente
- **Qué significa:** El archivo optimizado sigue pasando el tamaño máximo permitido.

## `optimized_file_heavier_than_source`

- **Tipo:** detalle · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Optimizar el archivo lo hizo más pesado que el original: se descarta la optimización.

## `processing_failed`

- **Tipo:** detalle · **HTTP:** — · **Estado:** vigente
- **Qué significa:** No se pudo procesar (optimizar o subir) el archivo; el mensaje trae el detalle.

## `purchase_type_manual_disabled`

- **Tipo:** detalle, HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** La orden trajo un tipo de compra distinto al vigente y la entidad tiene apagado `catalog_purchase_type_manual_enabled`. La orden se rechaza antes de tocar Zauru.
- **Qué hacer:** Encender la configuración en Configuraciones > Catálogo o crear/editar la orden sin `purchase_type`.

## `purchase_type_not_allowed`

- **Tipo:** detalle, HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** El `purchase_type` de la orden no es el `value` de una opción ACTIVA del Tipo de compra de la entidad. La orden se rechaza antes de tocar Zauru.
- **Qué hacer:** Recargar el contexto de la orden (`purchase_type.options`) y elegir una opción vigente, o activar la opción en Configuraciones > Catálogo.

## `purchase_type_options_invalid`

- **Tipo:** detalle, HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** La lista de tipos de compra que se quiso guardar tiene un texto vacío o repetido, más de 50 opciones, un id que no es de la entidad o un id repetido.

## `tickets_session_required`

- **Tipo:** HTTP · **HTTP:** 401 · **Estado:** vigente
- **Qué significa:** El espacio de tickets pide su clave (o la sesión de tickets fue revocada). Un 401 con este código lleva al formulario de la clave; un 403 no.
