Lotes y fechas de caducidad en Odoo 19: de la recepción a la entrega con FEFO
Cómo activar lotes y caducidades en Inventario de Odoo 19, qué significan las cuatro fechas del producto, cómo se reserva por FEFO y qué pasa al caducar uno.
Odoo 19 Tutorial · Nivel intermedio · Community y Enterprise
Respuesta corta
En Odoo 19 la caducidad va unida al lote. Activa «Números de serie y lote» y «Fechas de caducidad» en Inventario , Configuración , Ajustes, pon el producto con seguimiento «Por lotes» y marca «Fecha de caducidad» en su pestaña Inventario. En cada recepción, Odoo calcula la caducidad del lote sumando los días del producto a la fecha prevista de la recepción, y de ella saca las fechas de consumo preferente, de eliminación y de alerta. Para que salga primero lo que antes vence, la ubicación o la categoría deben usar la estrategia FEFO, que ordena por fecha de eliminación. Odoo deja de reservar solo los lotes que la han superado; si alguien los elige a mano, pide confirmación, pero no lo impide.
- Módulos
stockproduct_expiry- Dónde se hace
- Inventario, Configuración, AjustesInventario, Productos, ProductosInventario, Operaciones, Inventario físicoInventario, Operaciones, RecepcionesInventario, Configuración, Ubicaciones
- Otras versiones
- Menús, campos y mensajes comprobados en la documentación y en el código de los módulos stock y product_expiry de la rama 19.0. Sin comparar con la versión 20.
En esta página
- Qué exige la norma y qué pone Odoo
- 1.Activa lotes y fechas de caducidad
- 2.Configura el producto
- 3.Recibe y asigna el lote
- 4.Activa FEFO para que salga antes lo que antes vence
- 5.Entrega
- Qué hace Odoo cuando un lote caduca
- El repaso semanal
- Qué pasa en contabilidad
- Resultado
- Errores frecuentes
- Preguntas frecuentes
- Fuentes
Antes de empezar
- Odoo 19 con la app Inventario. Los módulos
stockyproduct_expiryestán en la edición Community. - Permisos de administrador de Inventario para cambiar ajustes, ubicaciones y categorías.
- Productos de tipo
Bienescon el inventario rastreado. Los servicios no llevan lote. - Saber qué fecha imprime el fabricante en cada producto (caducidad o consumo preferente) y con cuántos días de margen quieres retirarlo.
Un distribuidor de alimentación no pregunta cuánto queda de un producto. Pregunta cuánto queda que todavía se pueda vender. Odoo responde a eso con dos piezas: el lote, que identifica cada partida recibida, y cuatro fechas colgadas de él. Bien configuradas, el almacén saca primero lo que antes vence y el responsable recibe un aviso con días de margen. Mal configuradas, el orden de salida no tiene nada que ver con las fechas.
Qué exige la norma y qué pone Odoo
Dos reglamentos europeos marcan el terreno a quien mueve alimentos:
- El artículo 18 del Reglamento (CE) 178/2002 obliga a poder identificar a quien te suministró un alimento y a las empresas a las que tú lo has suministrado, y a tener esa información a disposición de las autoridades.
- El artículo 24 del Reglamento (UE) 1169/2011 distingue dos fechas: la fecha de duración mínima («consumir preferentemente antes del…») y la fecha de caducidad, que la sustituye en los alimentos muy perecederos. Pasada la fecha de caducidad, el alimento no se considera seguro.
Odoo cubre la primera con el lote y su informe de trazabilidad: de qué recepción vino y en qué entregas salió. Para la segunda tiene estas cuatro fechas por lote:
| Campo en Odoo 19 | Qué significa | Cómo se calcula |
|---|---|---|
Fecha de caducidad | Día a partir del cual el producto no debe consumirse | Fecha prevista de la recepción + los días indicados en el producto |
Fecha de consumo preferente | El producto empieza a perder calidad, sin ser peligroso | Fecha de caducidad − los días indicados |
Fecha de eliminación | Debe salir del stock | Fecha de caducidad − los días indicados |
Fecha de alerta | Odoo avisa | Fecha de caducidad − los días indicados |
Cuidado
Ojo con el consumo preferente. Odoo calcula todo a partir de la
Fecha de caducidad: las otras tres son días hacia atrás desde ella. Si tu producto solo trae fecha de consumo preferente, no hay campo que funcione sin la de caducidad. Decide un criterio y aplícalo siempre igual, por ejemplo registrar la fecha del envase comoFecha de caducidady dejar a cero los días de consumo preferente.
Paso 1. Activa lotes y fechas de caducidad
- Ve a Inventario, Configuración, Ajustes y baja hasta la sección
Trazabilidad. - Marca
Números de serie y lotey pulsaGuardar. - Vuelve a la sección: ahora aparece
Fechas de caducidad. Márcala y guarda. Odoo instala el móduloproduct_expiry. - En la misma sección, marca
Mostrar números de lote y de serie en albaranes de entregasi quieres que el cliente vea el lote. Con esa opción activa aparece otra,Mostrar la fecha de caducidad en los albaranes de entrega.
Imprimir el lote en el albarán es la forma más barata de cumplir la mitad de la trazabilidad: el cliente recibe, con la mercancía, el dato que te va a pedir si hay una retirada.
Paso 2. Configura el producto
- Ve a Inventario, Productos, Productos y abre el producto.
- En la pestaña
Información general, comprueba queTipo de productoesBienes. MarcaRastrear inventarioy eligePor lotesen el desplegable. - Abre la pestaña
Inventario. En la secciónTrazabilidad, marcaFecha de caducidad. - Aparece el bloque
Fechas. Rellena los cuatro valores, todos en días:
| Campo | Unidad que muestra Odoo |
|---|---|
Fecha de caducidad | días después de la recepción |
Fecha de consumo preferente | días antes de la fecha de caducidad |
Fecha de eliminación | días antes de la fecha de caducidad |
Fecha de alerta | días antes de la fecha de caducidad |
Un ejemplo con cifras inventadas: un yogur con 28 días de caducidad, 7 de eliminación y 10 de alerta. Si la recepción está prevista para el 2 de noviembre, el lote nace con caducidad el 30 de noviembre, eliminación el 23 y alerta el 20.
Si dejas los días a cero, Odoo no calcula nada útil y tendrás que escribir la fecha de cada lote a mano en la recepción. Es una forma válida de trabajar cuando la vida útil de cada partida es distinta.
Nota
Si el producto ya tiene stock. La documentación avisa de que, al activar el seguimiento en un producto con existencias, hay que asignarles lote con un ajuste de inventario (Inventario, Operaciones, Inventario físico). Hazlo antes de la siguiente venta, o las entregas pedirán un lote que el stock no tiene.
Paso 3. Recibe y asigna el lote
- Ve a Inventario, Operaciones, Recepciones y abre la recepción (o llega a ella desde el pedido de compra).
- En la línea del producto, pulsa
Detalles. Se abre la ventanaOperaciones detalladas. - Escribe el
Número de lote/serie, que normalmente es el que trae el fabricante en la etiqueta, y la cantidad. - La
Fecha de caducidadaparece ya calculada. Compárala con la del envase y corrígela si no coincide. - Si la entrega trae varios lotes, añade una línea por lote hasta completar la cantidad pedida.
- Pulsa
Guardary, en la recepción,Validar.
Para pegar muchos lotes de golpe, la ventana tiene la opción Importar números de serie/lote.
El cálculo automático parte de la fecha prevista de la recepción, no de la fecha de fabricación. Sirve para productos que entran recién elaborados con una vida útil fija. Para todo lo demás, la fecha buena es la del envase.
Tras validar, la recepción muestra el botón Trazabilidad, que abre el Informe de trazabilidad de lo recibido.
Paso 4. Activa FEFO para que salga antes lo que antes vence
Este es el paso que más se olvida. Tener fechas en los lotes no cambia el orden de salida: lo cambia la estrategia de salida. La documentación lo pone como requisito: para vender productos con caducidad, la ubicación donde se guardan debe usar FEFO.
Hay dos sitios donde ponerla.
En la ubicación:
- Ve a Inventario, Configuración, Ubicaciones y abre la ubicación donde guardas el producto. El menú solo existe si tienes activadas las
Ubicaciones de almacenamientoen los ajustes. - En el bloque
Logística, eligeFirst Expiry First Out (FEFO)enEstrategia de salida.
En la categoría de producto:
- Ve a Inventario, Configuración, Categorías y abre la categoría.
- En
Forzar estrategia de salida, eligeFirst Expiry First Out (FEFO).
Si las dos dicen cosas distintas, manda la categoría. Para un almacén con producto fresco y producto sin caducidad, la categoría suele ser el sitio más limpio: FEFO para lo perecedero y el resto como estaba.
Un detalle del código que conviene conocer: FEFO ordena por Fecha de eliminación, y a igualdad, por fecha de entrada. No mira la fecha de caducidad. Si los días de eliminación de un producto están a cero, las dos fechas coinciden y no notarás la diferencia. Si corriges a mano la caducidad de un lote, Odoo desplaza las otras fechas los mismos días.
Paso 5. Entrega
- Confirma el pedido de venta y abre su entrega, o ve a Inventario, Operaciones, Entregas.
- En la línea del producto, pulsa
Detalles. EnOperaciones detalladas, la columnaCoger deenseña el lote y la ubicación que Odoo ha reservado. - Con FEFO, el lote reservado es el de fecha de eliminación más próxima. Si no hay cantidad suficiente en ese lote, Odoo completa con el siguiente.
- Si el almacén ha cogido otro lote, cámbialo aquí. Lo que quede escrito es lo que dirá el informe de trazabilidad.
- Pulsa
Validar.
Por defecto, en una entrega solo se pueden usar lotes que ya existen, y en una recepción se crean nuevos. Se cambia por tipo de operación, en Inventario, Configuración, Tipos de operaciones, con las opciones Crear nuevo y Utilizar existentes del bloque Números de lote/serie.
Qué hace Odoo cuando un lote caduca
Cuatro cosas, y ninguna es un bloqueo. Esto es lo que hay en los módulos stock y product_expiry de la rama 19.0:
Deja de reservarlo solo. Al reservar una entrega de un producto con caducidad, Odoo solo busca lotes cuya Fecha de eliminación sea igual o posterior a la fecha del movimiento, o que no tengan fecha. Un lote que la ha superado ya no se propone. La cantidad disponible y la prevista del producto también lo descuentan. Fíjate en que el corte es la fecha de eliminación, no la de caducidad: con los días de eliminación a cero, un lote se sigue reservando hasta el mismo día en que caduca.
Avisa si alguien lo elige a mano. Si una línea lleva un lote caducado, o que ha superado su fecha de eliminación, al pulsar Validar se abre la ventana Confirmación:
Nota
Vas a entregar el producto …, … que ha caducado o que, al menos, debería retirarse del stock. ¿Confirmas que deseas continuar?En inglés:
You are going to deliver the product …, … which is expired or should at least be removed from stock. Do you confirm you want to proceed?
Los botones son Confirmar (sale todo, también lo caducado), Continuar excepto si ha caducado (quita esas líneas y valida el resto) y Descartar. Es un aviso: con Confirmar, el lote sale.
Marca el lote. En los desplegables de lote, un lote vencido aparece con el texto --Caducado-- y uno que ha pasado su fecha de alerta, con --Caduca el …--. En la ficha del lote, la documentación describe un aviso rojo de caducidad en la parte superior.
Crea una actividad. Cuando un lote con stock en una ubicación interna alcanza su Fecha de alerta, una acción planificada crea una actividad pendiente con el resumen Fecha de alerta alcanzada. Se la asigna al usuario del campo Responsable del producto (pestaña Inventario, sección Logística). Si el producto no tiene responsable, la actividad se asigna al usuario técnico del sistema y es fácil que nadie la vea. Solo se crea una vez por lote.
No lo saca del stock. El lote caducado sigue en su ubicación y en la cantidad a mano hasta que alguien lo da de baja. Para eso está Inventario, Operaciones, Desechar.
El repaso semanal
- Ve a Inventario, Productos, Números de lote/serie.
- Quita los filtros que vengan puestos y aplica el filtro
Alertas de caducidad: lista los lotes cuya fecha de alerta ya ha llegado. - Con el icono de ajustes de la lista, añade las columnas
Fecha de caducidadyFecha de eliminación. - Para cada lote, decide: promoción, devolución al proveedor o baja con
Desechar.
Dentro de la ficha de un lote, el botón Trazabilidad enseña de dónde vino y a qué entregas fue, y Traslados lista los albaranes donde aparece. Es la pantalla que hay que saber abrir el día que un proveedor comunica una retirada.
Qué pasa en contabilidad
Recibir, asignar lote o cambiar una fecha no genera asientos por sí mismo. Lo que toca la contabilidad es la valoración del inventario, que depende de cómo esté configurada en cada categoría de producto y que esta guía no cubre.
Lo que sí conviene dejar hecho antes de fin de año: dar de baja lo caducado. Un lote vencido que sigue en la ubicación infla el recuento con el que se prepara el cierre del ejercicio.
Resultado
- Cada recepción deja un lote con su fecha de caducidad y sus tres fechas derivadas.
- Las entregas reservan primero el lote que antes hay que retirar.
- El responsable del producto recibe una actividad al llegar la fecha de alerta.
- El albarán del cliente lleva el número de lote, y el informe de trazabilidad une proveedor, lote y cliente.
Los dos módulos son de la edición Community. Cómo comprobarlo para cualquier otro está en Odoo Community en España. Si además vendes en mostrador, el arqueo de cada jornada está explicado en Cierre de caja y arqueo en el TPV.
Errores frecuentes
Debe proporcionar un número de lote/serie para los productos …(You need to supply a Lot/Serial number for products …) Has pulsadoValidarsin asignar lote. AbreDetallesen la línea y escríbelo.- No aparece
Fechas de caducidaden los ajustes. Falta marcar y guardar antesNúmeros de serie y lote. - No veo el bloque
Fechasen el producto. El producto no está en seguimientoPor lotesoPor número de serie único, o no has marcadoFecha de caducidaden la secciónTrazabilidad. - Sale un lote que caduca más tarde que otro que sigue en la estantería. La ubicación no usa FEFO. Pon FEFO en la ubicación o en la categoría, como en el paso 4.
- La fecha de caducidad del lote no coincide con la del envase. Odoo la calculó con los días del producto y nadie la corrigió en la recepción. Cámbiala en la ficha del lote.
- Nadie recibe las alertas. El producto no tiene
Responsable. Asígnalo: la actividad se crea una sola vez por lote y no se repite. - No encuentro
Ubicacionesen el menú de configuración. ActivaUbicaciones de almacenamientoen los ajustes de Inventario.
Preguntas frecuentes
¿Dónde se activan las fechas de caducidad en Odoo 19?
En Inventario ‣ Configuración ‣ Ajustes, sección «Trazabilidad». Primero se marca «Números de serie y lote» y se guarda; entonces aparece «Fechas de caducidad». Después hay que marcar «Fecha de caducidad» en cada producto, en su pestaña «Inventario».
¿Odoo impide vender un lote caducado?
No lo impide. La reserva automática deja fuera los lotes que han pasado su fecha de eliminación, pero se pueden elegir a mano. Al validar una entrega con un lote así, Odoo abre una ventana de confirmación con los botones «Confirmar», «Continuar excepto si ha caducado» y «Descartar». Con «Confirmar» el lote sale.
¿Qué diferencia hay entre fecha de caducidad y fecha de eliminación en Odoo?
La fecha de caducidad es el día a partir del cual el producto no debe consumirse. La fecha de eliminación es anterior, tantos días como indiques en el producto, y marca cuándo debe salir del stock. La estrategia FEFO ordena los lotes por fecha de eliminación, no por fecha de caducidad.
¿Puedo cambiar la fecha de caducidad que calcula Odoo?
Sí. La fecha que propone Odoo en la recepción es un cálculo a partir de los días del producto. Si el envase trae otra, escríbela en la ventana «Operaciones detalladas» antes de validar, o corrígela después en la ficha del lote.
¿Hace falta Enterprise para gestionar lotes y caducidades?
No. Los módulos stock y product_expiry están en el repositorio público de Odoo, así que lotes, fechas, FEFO y alertas funcionan en Community.
Fuentes
- Documentación de Odoo 19 — Fechas de caducidadodoo.com
- Documentación de Odoo 19 — Números de loteodoo.com
- Documentación de Odoo 19 — Estrategia de salida FEFOodoo.com
- Código fuente del módulo product_expiry (rama 19.0)github.com
- Código fuente del módulo stock (rama 19.0)github.com
- Reglamento (CE) n.º 178/2002, artículo 18, trazabilidad de los alimentos (BOE/DOUE)boe.es
- Reglamento (UE) n.º 1169/2011, artículo 24 y anexo X, fecha de caducidad y de duración mínima (BOE/DOUE)boe.es