# Productos

Los productos son el núcleo del catálogo de tu tienda. Desde el panel de administración puedes crear, editar y organizar productos — cada uno con su propio título, descripción, precios, imágenes y características personalizadas. Todo lo que configuras aquí se refleja en la tienda visible para los clientes.

## Navegando por tus productos

Abre **Products** en la barra lateral del panel de administración para ver la lista completa de productos. La tabla muestra el título, slug, SKU, estado, precio y stock de cada producto.

![Lista de productos](/features/products/products-list.png)

| Columna | Descripción                                              |
| ------- | -------------------------------------------------------- |
| Title   | Nombre del producto con miniatura (haz clic para editar) |
| Slug    | Ruta de URL usada en la tienda                           |
| SKU     | Unidad de mantenimiento de inventario                    |
| Status  | **Active** (visible para clientes) o **Inactive**        |
| Price   | Precio de venta actual en la moneda de la tienda         |
| Stock   | Cantidad disponible en inventario                        |

Puedes **ordenar** haciendo clic en cualquier encabezado de columna y **buscar** escribiendo en la barra de búsqueda. Usa el botón **Filter** para filtrar por rango de precio o estado.

## Acciones masivas

Selecciona uno o más productos usando las casillas de verificación a la izquierda, luego usa la barra de acciones masivas que aparece en la parte inferior:

- **Activate** — hace visibles los productos seleccionados en la tienda
- **Deactivate** — oculta los productos seleccionados de los clientes
- **Delete** — elimina permanentemente los productos seleccionados (aparecerá un diálogo de confirmación)

## Creando un producto

Haz clic en **New Product** en la página de lista de productos para abrir el formulario de creación.

![Formulario de creación de producto](/features/products/create-product-top.png)

### Detalles del producto

| Campo             | Obligatorio | Descripción                                                                                                           |
| ----------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| Title             | Sí          | Nombre del producto mostrado a los clientes. Genera automáticamente un slug de URL.                                   |
| Slug              | Sí          | Identificador amigable para URL (minúsculas con guiones). Se genera automáticamente del título, pero puedes editarlo. |
| Short Description | No          | Resumen breve mostrado en las tarjetas de producto en colecciones y resultados de búsqueda.                           |
| Description       | Sí          | Descripción completa mostrada en la página de detalle del producto. Puede generarse con IA si está habilitada.        |
| Base Price        | Sí          | Precio de venta actual (sin impuesto). Se muestra de forma destacada en la tienda, recalculado para incluir el impuesto en la visualización B2C. |
| Show Previous Price Reduction | No | Activa la visualización de una reducción de precio. El precio tachado en la tienda usa el precio más bajo de los últimos 30 días, conforme a la Directiva Omnibus de la UE (ver [Reducciones de precio](#reducciones-de-precio-directiva-omnibus-de-la-ue) abajo). |
| Measure Value & Measure Unit | No | Par opcional de campos para [precio por unidad](#precio-por-unidad) (ej.: €/kg, €/L). Ambos deben establecerse juntos. |
| Stock             | Sí          | Inventario disponible. Cuando llega a cero, el botón **Add to Basket** se reemplaza por **Out of Stock**.             |
| SKU               | No          | Unidad de mantenimiento de inventario. Debe ser único si se proporciona.                                              |
| Collection        | No          | Asigna el producto a una colección (categoría). Afecta la navegación breadcrumb en la tienda.                         |
| Tax Rule          | No          | Regla de cálculo de impuestos. Se establece automáticamente a la regla predeterminada si existe.                      |
| Active            | No          | Controla la visibilidad en la tienda. Los productos son inactivos por defecto.                                        |

> **Consejo:** Si tu tienda tiene integraciones de IA habilitadas, puedes hacer clic en el botón de generación con IA junto al campo Description para crear automáticamente una descripción del producto a partir del título.

### Vista previa de impuestos en el formulario

Debajo del campo Base Price, el formulario muestra el **price with tax** que verá el cliente (los precios en la tienda siempre incluyen impuesto para cumplir con B2C en la UE). Cuando la regla de impuesto asignada tiene anulaciones por país, un botón **View per-country prices** abre un desglose del precio final que se cobrará a cada país, para que puedas confirmar los valores antes de guardar.

### Características

Las características son atributos personalizados de clave-valor que describen tu producto (ej.: Material, Talla, Color). Haz clic en **Add Characteristic** para agregar una nueva fila.

![Creación de producto — características y medios](/features/products/create-product-bottom.png)

- **Key** — selecciona una clave existente o escribe una nueva para crearla
- **Value** — texto libre (ej.: "100% Algodón Orgánico", "Grande", "Rojo")

Puedes agregar tantas características como necesites. Aparecen en un acordeón desplegable **Product Characteristics** en la tienda.

### Medios

Sube imágenes y videos del producto usando el área de carga de archivos. Puedes subir varios archivos a la vez.

- La **primera imagen** se usa como miniatura del producto en la lista y en las tarjetas de producto
- Las imágenes aparecen en un **carrusel** en la página de detalle del producto, en el orden en que las subiste

## Editando un producto

Haz clic en cualquier título de producto en la lista (o en la acción de editar en el menú de la fila) para abrir el formulario de edición. Contiene los mismos campos que el formulario de creación, prellenados con los datos actuales del producto.

![Editar producto](/features/products/edit-product.png)

Haz clic en **Save Changes** cuando termines. También puedes eliminar el producto desde la sección de zona de peligro en la parte inferior de la página de edición.

## Cómo aparecen los productos en la tienda

Cada campo que configuras en el panel de administración corresponde a un elemento específico en la página del producto visible para los clientes.

![Página del producto en la tienda](/features/products/storefront-product.png)

| Campo admin       | Visualización en la tienda                                                                             |
| ----------------- | ------------------------------------------------------------------------------------------------------ |
| Title             | Título grande en la parte superior de la página y en la ruta de navegación (breadcrumb)                |
| Description       | Párrafo de texto debajo del botón de agregar al carrito                                                |
| Short Description | Subtítulo en las tarjetas de producto (colecciones, resultados de búsqueda, página de inicio)          |
| Base Price        | Precio actual mostrado de forma destacada, siempre incluyendo impuesto                                 |
| Show Previous Price Reduction | Cuando está habilitado y el precio actual está por debajo del mínimo de 30 días, el mínimo de 30 días se muestra tachado junto al precio actual (estilo de oferta en rojo) |
| Measure Value / Unit | Renderiza una línea "por kg" / "por L" / etc. debajo del precio en las tarjetas, página del producto, colección y búsqueda |
| Stock > 0         | El botón **Add to Basket** está habilitado                                                             |
| Stock = 0         | El botón cambia a **Out of Stock** y se deshabilita                                                    |
| Active            | Solo los productos activos son visibles para los clientes                                              |
| Media             | Carrusel de imágenes con miniaturas laterales (escritorio) y carrusel deslizable (móvil), más lightbox |
| Collection        | Aparece en el breadcrumb (Home > Colección > Producto) y como etiqueta de marca sobre el título        |
| Characteristics   | Acordeón desplegable **Product Characteristics** con lista de clave-valor                              |
| Slug              | Determina la URL del producto (ej.: `/product/organic-cotton-t-shirt`)                                 |

### Reducciones de precio (Directiva Omnibus de la UE)

Capyshop sigue la Directiva Omnibus de la UE para las reducciones de precio. Para anunciar una oferta, baja el **Base Price** del producto por debajo del valor que ha tenido durante los últimos 30 días y activa **Show Previous Price Reduction**. La tienda tachará entonces el **precio más bajo de los últimos 30 días** (no un valor anterior introducido manualmente) — ese es el precio de referencia exigido por ley.

El formulario ofrece feedback en tiempo real mientras editas:

- **Se mostrará la reducción** — el formulario confirma el tachado que verá el cliente, ej.: "Customers will see €18.00 with €24.00 struck through (the 30-day lowest price)".
- **No se mostrará reducción** — si el Base Price actual no está por debajo del mínimo de 30 días, el formulario advierte que no aparecerá ninguna insignia de oferta, incluso con el interruptor activado.

Los cambios de precio se registran automáticamente cada vez que se guarda un producto o variante. Un cron de limpieza semanal elimina el historial con más de 90 días, manteniendo el almacenamiento controlado mientras la ventana de 30 días permanece intacta.

### Precio por unidad

El precio por unidad muestra al cliente una tarifa normalizada "por kg" / "por L" / "por m" / "por m²" debajo del precio en las tarjetas, la página del producto, la colección y los resultados de búsqueda. Es exigido por las normas de la UE para muchas categorías de productos y también se exporta al [feed de Google Merchant Center](https://support.google.com/merchants/answer/6324509) como `unit_pricing_measure` y `unit_pricing_base_measure`.

Establece tanto **Measure Value** como **Measure Unit** en el producto:

- **Measure Value** — la cantidad medible del producto (ej.: `750`).
- **Measure Unit** — la unidad de medida (kg, g, L, ml, m, cm, m²).

Capyshop convierte a la unidad base apropiada (kg, L, m, m²) al mostrar la tarifa por unidad. Los productos vendidos por unidad — productos contables — están exentos del precio por unidad según la directiva y deben dejar estos campos vacíos.

### Experiencia móvil

En dispositivos móviles, la página del producto se adapta con un carrusel de imágenes de ancho completo (con navegación por deslizamiento y barra de progreso) y un **botón fijo Add to Basket** en la parte inferior de la pantalla para fácil acceso mientras se desplaza.

![Producto en la tienda en móvil](/features/products/storefront-product-mobile.png)

## Páginas legibles por máquina para LLMs

Cada página de producto tiene una versión `.md` que devuelve markdown puro, diseñada para que herramientas de IA y LLMs la consuman fácilmente:

- `/product/{slug}.md` — detalles completos del producto incluyendo descripción, precio, stock, características e imágenes

Estos endpoints devuelven contenido `text/markdown` con URLs absolutas para imágenes y enlaces.
