# Arsenal Nexora 1.6.6 - Bulk Catalog

## Objetivo

Permitir construir el catálogo de Arsenal desde AdminCP seleccionando visualmente los ítems del catálogo técnico del servidor, sin escribir Section/Index manualmente y sin saltarse las validaciones del editor individual.

## Flujo

`AdminCP -> Arsenal Nexora -> Carga masiva`

1. Buscar o filtrar por Section/capacidad.
2. Seleccionar uno o varios ítems.
3. Definir preset, precio, stock y límite por cuenta.
4. Revisar el lote en una previsualización de servidor.
5. Importar solamente las configuraciones validadas.

Cada lote admite hasta 500 códigos para mantener la operación administrativa controlada.

## Preset recomendado

### Full Excellent +0 - Skill/Luck auto

- Level: +0
- Skill: activado únicamente si el catálogo técnico lo declara.
- Luck: activado únicamente si el catálogo técnico lo admite según la autoridad que ya usa Arsenal.
- Additional option: +0
- Excellent: todos los bits definidos por el perfil Excellent validado.
- Ancient: ninguno.
- Harmony: ninguno.
- Socket: ninguno.
- 380: no.
- Estado inicial: oculto.
- Artwork: ninguno; se usa el render técnico hasta editar el producto.

Los perfiles Excellent especiales cuyo mapa de bits todavía no fue confirmado se bloquean en este preset. Pueden importarse con el preset `+0 - Skill/Luck auto - sin Excellent` o configurarse individualmente después de validarlos.

## Duplicados

La carga masiva considera existente cualquier configuración con el mismo `Section:Index` en el reino activo y la omite. El editor individual sigue disponible para configuraciones alternativas intencionales.

## Arquitectura

La interfaz recibe un catálogo JSON compacto de ~0.55 MB para 1.839 ítems, pero solo renderiza 48 tarjetas por página. Los renders usan `loading=lazy` y el cache estático `itemshop-renders-v1`.

No se agregan consultas por ítem al frontend público `/shop/`.

## Seguridad

La selección del navegador nunca se considera autoridad. Al previsualizar y al importar, PHP vuelve a resolver `Section:Index` contra `item-catalog.json` y ejecuta `validateItemInput()` antes de guardar.

Los productos se crean ocultos. La carga masiva no crea promociones, destacados ni publicaciones automáticas. Las inserciones listas del lote se confirman dentro de una transacción; si una inserción crítica falla, el lote listo no queda aplicado a medias.

## Sin cambios

- `purchase()` intacto.
- `encodeItem()` intacto.
- `saveItem()` intacto.
- `deleteItem()` intacto.
- Sin cambios SQL.
- Sin cambios al Warehouse.
- Sin cambios al encoder 0-511.
- Sin cambios al frontend público de Arsenal.
