# Inventario

La API Inventory controla existencias en varias ubicaciones físicas (almacenes, tiendas o sucursales), con historial de movimientos y trazabilidad de lotes.

## Conceptos

- **Ubicaciones**: lugares de almacenamiento con name, code opcional (por ejemplo WH-01) y posible vínculo a account_id de vendedor.
- **Stock**: cada anuncio tiene una cantidad por ubicación (inventory_stock), suma de sus lotes. Se actualiza al recibir, transferir o ajustar.
- **Lotes**: cada entrega física tiene lot_number y expiry_date. Puede haber varios lotes por anuncio. El orden FEFO muestra primero los vencimientos más próximos.
- **Movimientos**: cada recepción, transferencia, ajuste, venta o devolución crea un registro inmutable en inventory_movements, vinculado al lote, ubicación y usuario.
- **Transferencias**: al crearlas, el stock se descuenta del origen (in_transit) y se acredita al destino cuando se recibe. Cancelar antes de recibir devuelve stock al origen.
- **Órdenes de compra**: admiten recepciones parciales. Cada línea sigue quantity_ordered y quantity_received. La recepción crea movimientos y puede crear o incrementar un lote.

## Estados del stock

| Estado | Significado |
|---|---|
| En ubicación | Cantidad del lote/stock mayor que cero en la ubicación. |
| En tránsito | Stock descontado del origen; transferencia aún no recibida. |
| Dañado | Ajuste negativo con motivo damage. |

## Autenticación

Todos los puntos de conexión requieren acceso de administrador (admin: 1 establecido por el gateway desde user_roles del JWT). Incluye tenant_id en cada solicitud.
