Menú: secciones y guías

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

Pasos verificados el · actualizado el · por David Crespo Muñoz

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
  1. Qué exige la norma y qué pone Odoo
  2. 1.Activa lotes y fechas de caducidad
  3. 2.Configura el producto
  4. 3.Recibe y asigna el lote
  5. 4.Activa FEFO para que salga antes lo que antes vence
  6. 5.Entrega
  7. Qué hace Odoo cuando un lote caduca
  8. El repaso semanal
  9. Qué pasa en contabilidad
  10. Resultado
  11. Errores frecuentes
  12. Preguntas frecuentes
  13. Fuentes

Antes de empezar

  • Odoo 19 con la app Inventario. Los módulos stock y product_expiry están en la edición Community.
  • Permisos de administrador de Inventario para cambiar ajustes, ubicaciones y categorías.
  • Productos de tipo Bienes con 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 19Qué significaCómo se calcula
Fecha de caducidadDía a partir del cual el producto no debe consumirseFecha prevista de la recepción + los días indicados en el producto
Fecha de consumo preferenteEl producto empieza a perder calidad, sin ser peligrosoFecha de caducidad − los días indicados
Fecha de eliminaciónDebe salir del stockFecha de caducidad − los días indicados
Fecha de alertaOdoo avisaFecha 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 como Fecha de caducidad y dejar a cero los días de consumo preferente.

Paso 1. Activa lotes y fechas de caducidad

  1. Ve a Inventario, Configuración, Ajustes y baja hasta la sección Trazabilidad.
  2. Marca Números de serie y lote y pulsa Guardar.
  3. Vuelve a la sección: ahora aparece Fechas de caducidad. Márcala y guarda. Odoo instala el módulo product_expiry.
  4. En la misma sección, marca Mostrar números de lote y de serie en albaranes de entrega si 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

  1. Ve a Inventario, Productos, Productos y abre el producto.
  2. En la pestaña Información general, comprueba que Tipo de producto es Bienes. Marca Rastrear inventario y elige Por lotes en el desplegable.
  3. Abre la pestaña Inventario. En la sección Trazabilidad, marca Fecha de caducidad.
  4. Aparece el bloque Fechas. Rellena los cuatro valores, todos en días:
CampoUnidad que muestra Odoo
Fecha de caducidaddías después de la recepción
Fecha de consumo preferentedías antes de la fecha de caducidad
Fecha de eliminacióndías antes de la fecha de caducidad
Fecha de alertadí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.

Con 28 días de caducidad, 7 de eliminación y 10 de alerta, un lote recibido el 2 de noviembre caduca el 30, deja de reservarse después del 23 y genera el aviso el 20 Línea de tiempo del lote. 2 de noviembre: recepción prevista. 20 de noviembre, 10 días antes de la caducidad: Fecha de alerta; Odoo crea la actividad Fecha de alerta alcanzada para el responsable del producto. 23 de noviembre, 7 días antes: Fecha de eliminación; hasta ese día FEFO reserva el lote, después ya no lo reserva solo y, si alguien lo elige a mano, al validar aparece la ventana Confirmación. 30 de noviembre, 28 días después de la recepción: Fecha de caducidad. Recepción prevista 2 nov Fecha de alerta 20 nov · 10 días antes Fecha de eliminación 23 nov · 7 días antes Fecha de caducidad 30 nov · 28 días después FEFO lo reserva Ya no se reserva solo Actividad «Fecha de alerta alcanzada» Si se elige a mano, al validar aparece la ventana «Confirmación» Con 28 días de caducidad, 7 de eliminación y 10 de alerta, un lote recibido el 2 de noviembre caduca el 30, deja de reservarse después del 23 y genera el aviso el 20 Línea de tiempo del lote. 2 de noviembre: recepción prevista. 20 de noviembre, 10 días antes de la caducidad: Fecha de alerta; Odoo crea la actividad Fecha de alerta alcanzada para el responsable del producto. 23 de noviembre, 7 días antes: Fecha de eliminación; hasta ese día FEFO reserva el lote, después ya no lo reserva solo y, si alguien lo elige a mano, al validar aparece la ventana Confirmación. 30 de noviembre, 28 días después de la recepción: Fecha de caducidad. Recepción prevista 2 nov Fecha de alerta 20 nov · 10 días antes Fecha de eliminación 23 nov · 7 días antes Fecha de caducidad 30 nov · 28 días después FEFO lo reserva Actividad «Fecha de alerta alcanzada» Ya no se reserva solo Si se elige a mano, al validar aparece la ventana «Confirmación»
El ejemplo del paso 2, con cifras inventadas: 28 días de caducidad, 7 de eliminación y 10 de alerta, sin días de consumo preferente. Qué reserva Odoo y cuándo avisa, según el código de stock y product_expiry (rama 19.0).

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

  1. Ve a Inventario, Operaciones, Recepciones y abre la recepción (o llega a ella desde el pedido de compra).
  2. En la línea del producto, pulsa Detalles. Se abre la ventana Operaciones detalladas.
  3. Escribe el Número de lote/serie, que normalmente es el que trae el fabricante en la etiqueta, y la cantidad.
  4. La Fecha de caducidad aparece ya calculada. Compárala con la del envase y corrígela si no coincide.
  5. Si la entrega trae varios lotes, añade una línea por lote hasta completar la cantidad pedida.
  6. Pulsa Guardar y, 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:

  1. 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 almacenamiento en los ajustes.
  2. En el bloque Logística, elige First Expiry First Out (FEFO) en Estrategia de salida.

En la categoría de producto:

  1. Ve a Inventario, Configuración, Categorías y abre la categoría.
  2. En Forzar estrategia de salida, elige First 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

  1. Confirma el pedido de venta y abre su entrega, o ve a Inventario, Operaciones, Entregas.
  2. En la línea del producto, pulsa Detalles. En Operaciones detalladas, la columna Coger de enseña el lote y la ubicación que Odoo ha reservado.
  3. 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.
  4. Si el almacén ha cogido otro lote, cámbialo aquí. Lo que quede escrito es lo que dirá el informe de trazabilidad.
  5. 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

  1. Ve a Inventario, Productos, Números de lote/serie.
  2. Quita los filtros que vengan puestos y aplica el filtro Alertas de caducidad: lista los lotes cuya fecha de alerta ya ha llegado.
  3. Con el icono de ajustes de la lista, añade las columnas Fecha de caducidad y Fecha de eliminación.
  4. 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 pulsado Validar sin asignar lote. Abre Detalles en la línea y escríbelo.
  • No aparece Fechas de caducidad en los ajustes. Falta marcar y guardar antes Números de serie y lote.
  • No veo el bloque Fechas en el producto. El producto no está en seguimiento Por lotes o Por número de serie único, o no has marcado Fecha de caducidad en la sección Trazabilidad.
  • 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 Ubicaciones en el menú de configuración. Activa Ubicaciones de almacenamiento en 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

  1. Documentación de Odoo 19 — Fechas de caducidadodoo.com
  2. Documentación de Odoo 19 — Números de loteodoo.com
  3. Documentación de Odoo 19 — Estrategia de salida FEFOodoo.com
  4. Código fuente del módulo product_expiry (rama 19.0)github.com
  5. Código fuente del módulo stock (rama 19.0)github.com
  6. Reglamento (CE) n.º 178/2002, artículo 18, trazabilidad de los alimentos (BOE/DOUE)boe.es
  7. Reglamento (UE) n.º 1169/2011, artículo 24 y anexo X, fecha de caducidad y de duración mínima (BOE/DOUE)boe.es

Odoo es una marca de Odoo S.A. Este sitio es independiente y no está afiliado a Odoo S.A. Más información.