DataFirefly Inventory Forecasting — Guía completa
Instalar, configurar y explotar la previsión de stock estacional para WooCommerce: algoritmo Holt-Winters multiplicativo, gestión multi-proveedor, pedidos PDF nativos, alertas de rotura inminente, cuatro tareas cron diarias y REST API.
Visión general
DataFirefly Inventory Forecasting es un plugin de WooCommerce para previsión de stock, generación automática de pedidos de compra a proveedor y alertas de rotura. Convierte tu back-office WordPress en un puesto de mando de cadena de suministro, sin pasar por un SaaS externo y sin tarifas por SKU.
El plugin se basa en un algoritmo Holt-Winters multiplicativo que descompone tu histórico de ventas en dos componentes: una tendencia estimada por regresión lineal sobre una media móvil de siete días, y una estacionalidad calculada como índice multiplicativo mensual. Las previsiones a 30, 60 y 90 días se comparan luego con el stock actual para producir un punto de reorden, una cantidad de reabastecimiento (teniendo en cuenta MOQ y tamaño de lote) y una estimación de fecha de rotura.
Posicionamiento. Inventory Forecasting está diseñado como alternativa auto-alojada a Veeqo, Cin7 o Lokad. Se dirige a catálogos de 100 a unos pocos miles de SKU, con o sin histórico estacional estable.
Requisitos e instalación
Requisitos técnicos
- WordPress 6.4 o superior
- WooCommerce 8.0 o superior
- PHP 8.1 o superior
- MySQL 5.7 o MariaDB 10.3 mínimo
- WP-Cron activado (o sustituido por un cron del sistema que invoque wp-cron.php)
Instalación
- Descarga el archivo ZIP desde tu cuenta de cliente en datafirefly.com.
- En WordPress, ve a Plugins → Añadir nuevo → Subir plugin.
- Selecciona el ZIP y haz clic en Instalar ahora.
- Activa el plugin. Al activarse, crea siete tablas prefijadas
wp_dfif_, declara la compatibilidad HPOS y programa cuatro tareas cron diarias.
Verificación tras la instalación. Aparece un nuevo menú Inventory Forecasting en la barra lateral de administración, con icono de gráfico. Abre el panel para verificar que los contadores KPI muestran cero.
Primer arranque: reconstruir el histórico
El plugin necesita conocer tus ventas pasadas para calibrar la tendencia y los índices estacionales. En el primer uso, haz clic en Reconstruir histórico desde el panel. Esta acción recorre los pedidos completados de la ventana configurada (365 días por defecto) y agrega las cantidades vendidas por producto y por día en la tabla wp_dfif_sales_daily.
En un catálogo de unos cientos de productos con 12 meses de histórico, la operación tarda de uno a cinco minutos. Está paginada por bloques de 100 pedidos y es compatible con HPOS.
Conceptos fundamentales
Tendencia y estacionalidad
En cada ciclo de previsión, el plugin construye para cada producto una serie diaria suavizada por media móvil de siete días. Una regresión lineal sobre esta serie da la tendencia (pendiente y ordenada al origen). Por separado, los índices estacionales mensuales se calculan como la relación entre las ventas de cada mes calendario y la media anual, con un suelo en 0,3 y un techo en 3,0 para absorber los valores atípicos.
La previsión al horizonte H días combina luego tendencia e índice del mes objetivo: ventas_previstas = ventas_medias × (1 + tendencia × H) × índice_estacional.
Stock de seguridad
El stock de seguridad se calcula según la fórmula clásica z × σ × √lead_time, donde z es el cuantil normal correspondiente al nivel de servicio deseado (1,645 para 95 %, 2,326 para 99 %), σ la desviación estándar de las ventas diarias y lead_time el plazo de entrega del proveedor en días. Esta reserva absorbe las variaciones aleatorias de la demanda durante el reabastecimiento.
Punto de reorden y cantidad de reorden
El punto de reorden es el umbral de stock que desencadena un pedido. Vale ventas_medias × lead_time + stock_seguridad. En la práctica, en cuanto el stock actual desciende por debajo de este umbral, hay que hacer un pedido para evitar la rotura.
La cantidad de reorden es la cantidad a pedir. Se redondea al múltiplo del tamaño de lote (pack size), y luego se eleva al MOQ (cantidad mínima de pedido del proveedor) si es necesario.
Nivel de confianza
Cada previsión va acompañada de una puntuación de confianza de 0 a 100 %, calculada heurísticamente según la longitud del histórico disponible, la regularidad de las ventas y la presencia de estacionalidad marcada. Una confianza inferior al 40 % se muestra en rojo y recurre automáticamente a una previsión ingenua (media móvil) más prudente.
Gestión de proveedores
Crear un proveedor
Desde el menú Inventory Forecasting → Proveedores, haz clic en Añadir proveedor. Rellena como mínimo el nombre y el email (usado para el envío de pedidos). Los campos opcionales son: contacto, teléfono, dirección postal, moneda de facturación y notas internas.
Asociar un proveedor a un producto
En la página de edición de un producto WooCommerce, aparece una meta-caja Proveedores Inventory Forecasting en la columna principal. Permite añadir uno o varios proveedores para ese producto, cada uno con sus propios parámetros:
- Precio de compra sin impuestos, usado en la línea del pedido
- SKU del proveedor, a menudo distinto del SKU interno, impreso en el PDF
- Plazo de entrega en días, que entra en el cálculo del punto de reorden
- MOQ, cantidad mínima exigida por el proveedor
- Tamaño de lote, incremento por el que se redondean las cantidades
- Proveedor principal, botón de opción que designa el proveedor retenido por la generación automática de pedidos
Multi-proveedor. Un mismo producto puede estar asociado a varios proveedores, por ejemplo un principal más barato y un secundario de respaldo. Solo se usa el principal para la generación automática, pero puedes cambiar manualmente a otro desde la página del producto.
Previsiones y horizontes
La página Inventory Forecasting → Previsiones lista todos los productos con, para cada uno, la previsión al horizonte seleccionado, el punto de reorden, la cantidad a pedir, la fecha de rotura estimada y el nivel de confianza.
Filtros
- Horizonte: 30, 60 o 90 días (los tres se calculan en paralelo por el cron)
- Severidad: crítica (rotura en menos de 7 días), advertencia (rotura en menos de 14 días), normal
- Búsqueda: por título de producto o SKU
Recálculo manual
El botón Recalcular previsiones del panel fuerza un ciclo inmediato sin esperar al cron de las 2:30. Útil tras un cambio de parámetro (nivel de servicio, tamaño de ventana de histórico) o tras una importación masiva de pedidos.
Pedidos de compra a proveedor
Ciclo de vida de un pedido
- Borrador: creado pero no enviado, editable
- Enviado: PDF generado y enviado al proveedor por correo
- Parcialmente recibido: al menos una línea pero no todas las cantidades recibidas
- Recibido: todas las cantidades registradas
- Cancelado: pedido abandonado antes de la recepción
Generación manual
Desde Inventory Forecasting → Pedidos, el botón Generar desde previsiones recorre los productos por debajo del punto de reorden, los agrupa por proveedor principal y crea un pedido en borrador por proveedor. Luego puedes editar cantidades, añadir o quitar líneas, y enviar.
Generación automática
El cron de las 4:00 puede generar los pedidos automáticamente, con o sin envío inmediato. Esta opción está desactivada por defecto. Una vez activada en los ajustes, son posibles dos modos: creación en borrador (envío manual tras revisión) o envío inmediato.
Recomendación. Mantén el envío automático desactivado al menos dos semanas tras la instalación. Verifica la relevancia de las previsiones antes de confiar en la automatización completa, o correrás el riesgo de pedir demasiado pronto o en cantidades excesivas.
PDF nativo
El PDF lo genera un motor PHP puro integrado (fuente Helvetica, formato A4, alrededor de 250 líneas de código). Incluye el encabezado de tu empresa, los datos del proveedor, la tabla de líneas con SKU de proveedor y precio de compra, el total sin impuestos y un pie personalizable. No se requiere ninguna dependencia a Dompdf, TCPDF o mPDF.
Recepción de la mercancía
En la vista de detalle de un pedido, cada línea dispone de un campo Cantidad recibida. Introducir el valor recibido actualiza el stock WooCommerce del producto por el delta respecto al valor anterior. Esta lógica evita duplicaciones si corriges una recepción a posteriori.
Alertas de rotura
El plugin detecta a diario cuatro tipos de situaciones y asigna a cada una un nivel de severidad.
Tipos de alertas
- IMMINENT: rotura prevista en menos de 7 días (configurable), severidad crítica
- WARNING: rotura prevista en menos de 14 días (configurable), severidad advertencia
- OVERSTOCK: cobertura de stock superior a 180 días, severidad info
- REORDER: stock por debajo del punto de reorden, severidad advertencia
Ciclo de vida
Una alerta se crea con estado active. En el ciclo siguiente, si la situación persiste, se marca como pending_recheck; si ha desaparecido, pasa a resolved con marca de tiempo. Este mecanismo evita el spam de alertas repetitivas.
Notificaciones por email
Un resumen diario se envía a la dirección configurada en los ajustes, listando las alertas críticas y de advertencia nuevas. El contenido del email es una tabla HTML sobria, filtrable por severidad.
Ajustes
La página Inventory Forecasting → Ajustes agrupa cuatro secciones.
Previsiones
- Ventana de histórico: 365 días por defecto. Cuanto más larga sea la ventana, más robusta será la estacionalidad, pero la tabla sales_daily crece.
- Horizontes de previsión: lista separada por comas, 30, 60, 90 por defecto. Puedes añadir por ejemplo 14 o 180.
- Nivel de servicio: 95 % por defecto. Traducido a z = 1,645 por normal inversa. Pasa al 99 % (z = 2,326) para stock crítico, al 90 % (z = 1,282) para no estratégico.
Alertas
- Días de anticipación advertencia: 14 por defecto
- Días de anticipación crítica: 7 por defecto
- Email destinatario del resumen diario
Pedidos
- Generación automática activada: desmarcada por defecto
- Prefijo de numeración: PO- por defecto, produce identificadores como PO-2026-00042
- Moneda: heredada de WooCommerce, sobreescribible por proveedor
Empresa
Datos de tu empresa impresos en el encabezado de los PDF de pedidos: razón social, dirección, NIF o número de IVA, email, teléfono, logo.
Tareas cron
Cuatro tareas se programan automáticamente al activar el plugin, en la zona horaria del sitio.
02:00— Reconstrucción del histórico: agrega los pedidos del día anterior en la tabla sales_daily. Ligero, unos segundos.02:30— Cálculo de previsiones: recalcula tendencia, estacionalidad y puntos de reorden. Más pesado, uno a cinco minutos según el catálogo.03:00— Detección de alertas: crea y resuelve alertas según los umbrales. Rápido.04:00— Generación automática de pedidos: solo se ejecuta si la opción está activada en los ajustes.
WP-Cron. Por defecto, WP-Cron solo se ejecuta con un hit de visitante. En un sitio con poco tráfico, esto puede retrasar las tareas nocturnas. Configura preferentemente un cron del sistema que llame a wp-cron.php cada 15 minutos, o desactiva WP-Cron en wp-config.php y pilótalo íntegramente desde el sistema.
REST API
El plugin expone varias rutas REST bajo el namespace dfif/v1. Todas requieren la capability manage_woocommerce y el nonce WordPress wp_rest.
POST /wp-json/dfif/v1/run-forecast
POST /wp-json/dfif/v1/rebuild-history
POST /wp-json/dfif/v1/detect-alerts
POST /wp-json/dfif/v1/generate-pos
POST /wp-json/dfif/v1/send-po/{id}
POST /wp-json/dfif/v1/po/{id}/items/{item_id}/receive
GET /wp-json/dfif/v1/stats
Estas rutas las usan internamente los botones del panel (vía wp.apiFetch con cabecera X-WP-Nonce) y también pueden llamarse desde cualquier cliente autenticado mediante cookies de WordPress o application passwords.
Hooks de WordPress
Los principales pasos del plugin emiten acciones y filtros que puedes interceptar:
do_action('dfif_forecast_calculated', $product_id, $forecast_data);
do_action('dfif_purchase_order_created', $po_id, $supplier_id);
do_action('dfif_purchase_order_sent', $po_id);
do_action('dfif_alert_triggered', $alert_id, $alert_type);
apply_filters('dfif_reorder_qty', $qty, $product_id, $supplier_id);
apply_filters('dfif_pdf_company_info', $info);
Resolución de problemas
Las previsiones siguen a cero
Verifica que la reconstrucción del histórico se ha ejecutado y que la tabla sales_daily contiene filas. Si no tienes pedidos completados o en procesamiento en la ventana configurada, el plugin no puede prever nada. Verifica también que WooCommerce está activo.
Las previsiones parecen incoherentes
Dos causas frecuentes: un histórico demasiado corto (menos de 30 días, el plugin recurre a una previsión ingenua) o una estacionalidad extrema no representativa (Black Friday aislado). Mira el nivel de confianza mostrado: bajo el 40 %, la previsión debe tomarse con cautela.
El PDF no se genera
Verifica que el directorio wp-content/uploads/dfif-po/ es escribible. El plugin deposita ahí los PDF antes del envío. Se coloca automáticamente un archivo .htaccess para impedir el acceso público directo.
El email no se envía
El plugin usa wp_mail, que a veces falla en ciertos hostings. Instala un plugin SMTP (WP Mail SMTP, FluentSMTP) y configura un servicio de entregabilidad (Postmark, SendGrid, Mailjet, Brevo). Verifica también que el email del proveedor esté introducido y sea válido.
El cron no se ejecuta
Usa el plugin WP Crontrol para listar los hooks programados y ver su próxima ejecución. Los cuatro hooks tienen prefijo dfif_. Si no los ves, desactiva y reactiva Inventory Forecasting.
Desinstalación
Al desactivar, los cron se desprograman pero las tablas y los datos se conservan. En la desinstalación completa vía Plugins → Borrar, son posibles dos comportamientos según la opción dfif_delete_data_on_uninstall en los ajustes:
- Desmarcada por defecto: las tablas se conservan, puedes reinstalar sin perder el histórico.
- Marcada: las siete tablas y el directorio
wp-content/uploads/dfif-po/se eliminan.
Preguntas frecuentes
¿Puedo usar el plugin en un catálogo con variables (variaciones de producto)?
Sí. Las previsiones y los pedidos funcionan a nivel de variación individual. Cada variación puede tener sus propios proveedores y sus propios parámetros.
¿Es compatible con multisitio?
Sí, pero cada sitio de la red gestiona su propio catálogo, sus proveedores y sus previsiones. No hay agrupación entre sitios.
¿Puedo exportar los datos?
Todas las tablas son accesibles vía SQL estándar. Una exportación CSV nativa está prevista para una versión posterior. Mientras tanto, un simple SELECT INTO OUTFILE o un plugin como WP All Export bastan.
¿Bloquea el plugin la administración si el cron no se ha ejecutado?
No. El plugin siempre funciona, simplemente las previsiones mostradas pueden tener varios días de antigüedad. Un badge Último cron en el panel indica la frescura de los datos.
¿Cómo se comporta el plugin en un catálogo de varios miles de SKU?
La reconstrucción del histórico y el cálculo de previsiones siguen siendo lineales en número de productos activos. En 5.000 SKU con 12 meses de histórico, cuenta entre 10 y 30 minutos de procesamiento nocturno según la potencia del servidor. Ningún impacto en el rendimiento front-office: todos los cálculos son asíncronos.