DataFirefly Inventory Forecasting: volledige handleiding
Seizoensgebonden voorraadprognose voor WooCommerce installeren, instellen en gebruiken: multiplicatief Holt-Winters-algoritme, beheer van meerdere leveranciers, ingebouwde PDF-inkooporders, waarschuwingen bij dreigend tekort, vier dagelijkse crontaken en REST API.
Overzicht
DataFirefly Inventory Forecasting is een WooCommerce-plugin voor voorraadprognose, automatische aanmaak van inkooporders bij leveranciers en waarschuwingen bij dreigende voorraadtekorten. De plugin maakt van uw WordPress-backend een stuurpost voor de supply chain, zonder externe SaaS en zonder kosten per SKU.
De plugin steunt op een multiplicatief Holt-Winters-algoritme dat uw verkoophistoriek in twee componenten ontleedt: een trend, geschat via lineaire regressie op een voortschrijdend gemiddelde over zeven dagen, en een seizoenspatroon, berekend als multiplicatieve maandindex. De prognoses op 30, 60 en 90 dagen worden vervolgens vergeleken met de actuele voorraad om een bestelpunt, een bijbestelhoeveelheid (rekening houdend met de MOQ en de verpakkingseenheid) en een geschatte datum van voorraadtekort te bepalen.
Positionering. Inventory Forecasting is bedoeld als zelfgehost alternatief voor Veeqo, Cin7 of Lokad. Het richt zich op catalogi van 100 tot enkele duizenden SKU’s, met of zonder stabiel seizoenspatroon.
Vereisten en installatie
Technische vereisten
- WordPress 6.4 of hoger
- WooCommerce 8.0 of hoger
- PHP 8.1 of hoger
- MySQL 5.7 of MariaDB 10.3 minimaal
- WP-Cron ingeschakeld (of vervangen door een systeemcron die wp-cron.php aanroept)
Installatie
- Download het ZIP-archief vanuit uw klantaccount op datafirefly.com.
- Ga in WordPress naar Plugins → Nieuwe plugin → Plugin uploaden.
- Selecteer de ZIP en klik op Nu installeren.
- Activeer de plugin. Bij activering maakt ze zeven tabellen aan met het voorvoegsel
wp_dfif_, verklaart ze de HPOS-compatibiliteit en plant ze vier dagelijkse crontaken in.
Controle na installatie. Er verschijnt een nieuw menu Inventory Forecasting in de beheerzijbalk, met het grafiekpictogram. Open het dashboard om te controleren of de KPI-tellers netjes op nul staan.
Eerste start: de historiek opnieuw opbouwen
De plugin moet uw verkopen uit het verleden kennen om de trend en de seizoensindexen te ijken. Klik bij het eerste gebruik op Historiek opnieuw opbouwen vanuit het dashboard. Die actie doorloopt de voltooide bestellingen binnen het ingestelde venster (standaard 365 dagen) en telt de verkochte aantallen per product en per dag samen in de tabel wp_dfif_sales_daily.
Bij een catalogus van enkele honderden producten en 12 maanden historiek duurt de bewerking één tot vijf minuten. Ze wordt gepagineerd in blokken van 100 bestellingen en is compatibel met HPOS.
Basisbegrippen
Trend en seizoenspatroon
Bij elke prognosecyclus bouwt de plugin voor elk product een dagreeks op, afgevlakt met een voortschrijdend gemiddelde over zeven dagen. Een lineaire regressie op die reeks levert de trend op (helling en snijpunt). Los daarvan worden de maandelijkse seizoensindexen berekend als de verhouding tussen de verkopen van elke kalendermaand en het jaargemiddelde, met een ondergrens van 0,3 en een bovengrens van 3,0 om uitschieters op te vangen.
De prognose voor horizon H dagen combineert vervolgens de trend en de index van de doelmaand: verwachte_verkopen = gemiddelde_verkopen × (1 + trend × H) × seizoensindex.
Veiligheidsvoorraad
De veiligheidsvoorraad wordt berekend met de klassieke formule z × σ × √levertijd, waarbij z het normale kwantiel is dat hoort bij het gewenste serviceniveau (1,645 voor 95 procent, 2,326 voor 99 procent), σ de standaardafwijking van de dagelijkse verkopen en levertijd de leveringstermijn van de leverancier in dagen. Deze reserve vangt de willekeurige schommelingen in de vraag op tijdens de aanvulling.
Bestelpunt en bijbestelhoeveelheid
Het bestelpunt is de voorraaddrempel die een bestelling in gang zet. Het is gelijk aan gemiddelde_verkopen × levertijd + veiligheidsvoorraad. In de praktijk moet er een bestelling worden geplaatst zodra de actuele voorraad onder die drempel zakt, om een tekort te vermijden.
De bijbestelhoeveelheid is het aantal dat besteld moet worden. Ze wordt afgerond op een veelvoud van de verpakkingseenheid (pack size) en daarna zo nodig opgetrokken tot de MOQ (minimale bestelhoeveelheid van de leverancier).
Betrouwbaarheidsniveau
Elke prognose gaat vergezeld van een betrouwbaarheidsscore van 0 tot 100 procent, heuristisch berekend op basis van de lengte van de beschikbare historiek, de regelmaat van de verkopen en de aanwezigheid van een uitgesproken seizoenspatroon. Een betrouwbaarheid onder 40 procent wordt in het rood getoond en schakelt automatisch over op een voorzichtiger naïeve prognose (voortschrijdend gemiddelde).
Leveranciersbeheer
Een leverancier aanmaken
Klik in het menu Inventory Forecasting → Leveranciers op Leverancier toevoegen. Vul minstens de naam en het e-mailadres in (dat wordt gebruikt om de inkooporders te versturen). De optionele velden zijn: contactpersoon, telefoon, postadres, factuurvaluta en interne notities.
Een leverancier aan een product koppelen
Op de bewerkpagina van een WooCommerce-product verschijnt in de hoofdkolom een metabox Leveranciers Inventory Forecasting. Daarmee koppelt u een of meer leveranciers aan dit product, elk met eigen parameters:
- Inkoopprijs exclusief btw, gebruikt op de regel van het inkooporder
- SKU van de leverancier, vaak anders dan de interne SKU, afgedrukt op de PDF
- Levertijd in dagen, die meetelt in de berekening van het bestelpunt
- MOQ, de minimale hoeveelheid die de leverancier eist
- Verpakkingseenheid, de stap waarmee de hoeveelheden worden afgerond
- Hoofdleverancier, een keuzerondje dat aangeeft welke leverancier de automatische aanmaak van inkooporders gebruikt
Meerdere leveranciers. Eenzelfde product kan aan meerdere leveranciers worden gekoppeld, bijvoorbeeld een goedkopere hoofdleverancier en een tweede als terugval. Alleen de hoofdleverancier wordt door de automatische aanmaak gebruikt, maar u kunt vanaf de productpagina handmatig naar een andere overschakelen.
Prognoses en horizonnen
De pagina Inventory Forecasting → Prognoses toont alle producten met per product de prognose voor de gekozen horizon, het bestelpunt, de te bestellen hoeveelheid, de geschatte datum van het voorraadtekort en het betrouwbaarheidsniveau.
Filters
- Horizon: 30, 60 of 90 dagen (alle drie worden parallel door de cron berekend)
- Ernst: kritiek (tekort binnen 7 dagen), waarschuwing (tekort binnen 14 dagen), normaal
- Zoeken: op producttitel of SKU
Handmatig herberekenen
De knop Prognoses herberekenen op het dashboard forceert meteen een cyclus, zonder te wachten op de cron van 2.30 uur. Handig na een wijziging van een instelling (serviceniveau, lengte van het historiekvenster) of na een massale import van bestellingen.
Inkooporders bij leveranciers
Levenscyclus van een inkooporder
- Concept: aangemaakt maar niet verzonden, bewerkbaar
- Verzonden: PDF gegenereerd en per e-mail naar de leverancier gestuurd
- Deels ontvangen: minstens één regel, maar niet alle hoeveelheden ontvangen
- Ontvangen: alle hoeveelheden geregistreerd
- Geannuleerd: bestelling afgebroken vóór ontvangst
Handmatig aanmaken
Via Inventory Forecasting → Inkooporders doorloopt de knop Aanmaken op basis van de prognoses de producten onder hun bestelpunt, groepeert ze per hoofdleverancier en maakt per leverancier een inkooporder in concept aan. Daarna kunt u de hoeveelheden aanpassen, regels toevoegen of verwijderen en het order versturen.
Automatisch aanmaken
De cron van 4 uur kan de inkooporders automatisch aanmaken, met of zonder directe verzending. Deze optie staat standaard uit. Zodra ze in de instellingen is ingeschakeld, zijn er twee modi mogelijk: aanmaken als concept (handmatig versturen na controle) of meteen versturen.
Aanbeveling. Laat de automatische verzending na de installatie minstens twee weken uitstaan. Controleer eerst of de prognoses kloppen voordat u volledig op de automatisering vertrouwt, anders bestelt u mogelijk te vroeg of in te grote hoeveelheden.
Ingebouwde PDF
De PDF wordt gegenereerd door een ingebouwde motor in pure PHP (lettertype Helvetica, formaat A4, ongeveer 250 regels code). Hij bevat de kopregel van uw bedrijf, de gegevens van de leverancier, de tabel met de regels inclusief SKU van de leverancier en inkoopprijs, het totaal exclusief btw, en een aanpasbare voettekst. Er is geen afhankelijkheid van Dompdf, TCPDF of mPDF nodig.
Goederen ontvangen
Op de detailweergave van een inkooporder heeft elke regel een veld Ontvangen hoeveelheid. Het invullen van de ontvangen waarde werkt de WooCommerce-voorraad van het product bij met het verschil ten opzichte van de vorige waarde. Deze aanpak voorkomt dubbeltelling als u een ontvangst achteraf corrigeert.
Waarschuwingen bij voorraadtekort
De plugin detecteert dagelijks vier soorten situaties en kent elk een ernstniveau toe.
Soorten waarschuwingen
- IMMINENT: tekort verwacht binnen 7 dagen (instelbaar), ernst kritiek
- WARNING: tekort verwacht binnen 14 dagen (instelbaar), ernst waarschuwing
- OVERSTOCK: voorraaddekking van meer dan 180 dagen, ernst info
- REORDER: voorraad onder het bestelpunt gezakt, ernst waarschuwing
Levenscyclus
Een waarschuwing wordt aangemaakt met de status active. Blijft de situatie bij de volgende cyclus bestaan, dan wordt ze gemarkeerd als pending_recheck; is ze verdwenen, dan gaat ze naar resolved met een tijdstempel. Dit mechanisme voorkomt een stortvloed aan herhaalde waarschuwingen.
E-mailmeldingen
Er gaat dagelijks een samenvatting naar het adres dat in de instellingen staat, met de nieuwe kritieke en waarschuwingsmeldingen. De inhoud van de e-mail is een sobere HTML-tabel, te filteren op ernst.
Instellingen
De pagina Inventory Forecasting → Instellingen bestaat uit vier onderdelen.
Prognoses
- Historiekvenster: standaard 365 dagen. Hoe langer het venster, hoe robuuster het seizoenspatroon, maar hoe zwaarder de tabel sales_daily wordt.
- Prognosehorizonnen: lijst gescheiden door komma’s, standaard 30, 60, 90. U kunt bijvoorbeeld 14 of 180 toevoegen.
- Serviceniveau: standaard 95 procent. Vertaald naar z = 1,645 via de inverse normale verdeling. Ga naar 99 procent (z = 2,326) voor kritieke voorraad en naar 90 procent (z = 1,282) voor niet-strategische artikelen.
Waarschuwingen
- Aantal dagen vooruit voor waarschuwing: standaard 14
- Aantal dagen vooruit voor kritiek: standaard 7
- Ontvanger van de dagelijkse samenvatting
Inkooporders
- Automatisch aanmaken ingeschakeld: standaard niet aangevinkt
- Voorvoegsel voor de nummering: standaard PO-, wat identificaties oplevert zoals PO-2026-00042
- Valuta: overgenomen van WooCommerce, per leverancier te overschrijven
Bedrijf
De gegevens van uw onderneming die op de kopregel van de PDF-inkooporders worden afgedrukt: bedrijfsnaam, adres, ondernemings- of btw-nummer, e-mail, telefoon, logo.
Crontaken
Bij de activering van de plugin worden vier taken automatisch ingepland, in de tijdzone van de site.
02:00: Historiek opnieuw opbouwen, telt de bestellingen van de vorige dag samen in de tabel sales_daily. Licht, enkele seconden.02:30: Prognoses berekenen, herberekent trend, seizoenspatroon en bestelpunten. Zwaarder, één tot vijf minuten afhankelijk van de catalogus.03:00: Waarschuwingen detecteren, maakt waarschuwingen aan en lost ze op volgens de drempels. Snel.04:00: Inkooporders automatisch aanmaken, draait alleen als de optie in de instellingen actief is.
WP-Cron. Standaard draait WP-Cron alleen bij een bezoek aan de site. Op een site met weinig verkeer kan dat de nachtelijke taken vertragen. Stel bij voorkeur een systeemcron in die wp-cron.php elke 15 minuten aanroept, of schakel WP-Cron uit in wp-config.php en stuur alles via een systeemcron aan.
REST API
De plugin biedt verschillende REST-routes onder de namespace dfif/v1. Alle vereisen de capability manage_woocommerce en de WordPress-nonce 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
Deze routes worden intern gebruikt door de knoppen op het dashboard (via wp.apiFetch met de header X-WP-Nonce) en kunnen ook worden aangeroepen vanuit elke geauthenticeerde client via WordPress-cookies of application passwords.
WordPress-hooks
De belangrijkste stappen van de plugin sturen acties en filters uit die u kunt onderscheppen:
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);
Probleemoplossing
De prognoses blijven op nul staan
Controleer of het opnieuw opbouwen van de historiek daadwerkelijk is uitgevoerd en of de tabel sales_daily regels bevat. Hebt u binnen het ingestelde venster geen voltooide of in behandeling zijnde bestellingen, dan kan de plugin niets voorspellen. Controleer ook of WooCommerce actief is.
De prognoses lijken niet te kloppen
Twee veelvoorkomende oorzaken: een te korte historiek (minder dan 30 dagen, waarbij de plugin overschakelt op een naïeve prognose) of een extreem, niet-representatief seizoenspatroon (een op zichzelf staande Black Friday). Kijk naar het getoonde betrouwbaarheidsniveau: onder 40 procent moet u de prognose met voorzichtigheid gebruiken.
De PDF wordt niet gegenereerd
Controleer of de map wp-content/uploads/dfif-po/ beschrijfbaar is. De plugin plaatst de PDF’s daar vóór verzending. Er wordt automatisch een .htaccess-bestand neergezet om directe publieke toegang te blokkeren.
De e-mail wordt niet verstuurd
De plugin gebruikt wp_mail, dat bij sommige hostingpartijen niet betrouwbaar werkt. Installeer een SMTP-plugin (WP Mail SMTP, FluentSMTP) en stel een bezorgdienst in (Postmark, SendGrid, Mailjet, Brevo). Controleer ook of het e-mailadres van de leverancier is ingevuld en geldig is.
De cron draait niet
Gebruik de plugin WP Crontrol om de ingeplande hooks en hun volgende uitvoering te bekijken. De vier hooks beginnen met dfif_. Ziet u ze niet, deactiveer dan Inventory Forecasting en activeer het opnieuw.
Verwijderen
Bij het deactiveren worden de crons uit de planning gehaald, maar blijven de tabellen en gegevens behouden. Bij het volledig verwijderen via Plugins → Verwijderen zijn er twee mogelijkheden, afhankelijk van de optie dfif_delete_data_on_uninstall in de instellingen:
- Standaard niet aangevinkt: de tabellen blijven behouden, zodat u opnieuw kunt installeren zonder de historiek kwijt te raken.
- Aangevinkt: de zeven tabellen en de map
wp-content/uploads/dfif-po/worden verwijderd.
Veelgestelde vragen
Kan ik de plugin gebruiken bij een catalogus met variaties?
Ja. De prognoses en de inkooporders werken op het niveau van de individuele variatie. Elke variatie kan eigen leveranciers en eigen parameters hebben.
Is de plugin compatibel met multisite?
Ja, maar elke site in het netwerk beheert zijn eigen catalogus, leveranciers en prognoses. Er is geen gedeeld beheer over sites heen.
Kan ik de gegevens exporteren?
Alle tabellen zijn toegankelijk via standaard SQL. Een ingebouwde CSV-export staat gepland voor een latere versie. Tot die tijd volstaat een eenvoudige SELECT INTO OUTFILE of een plugin als WP All Export.
Blokkeert de plugin het beheer als de cron niet heeft gedraaid?
Nee. De plugin blijft werken; alleen kunnen de getoonde prognoses enkele dagen oud zijn. Een badge Laatste cron op het dashboard geeft aan hoe actueel de gegevens zijn.
Hoe gedraagt de plugin zich bij een catalogus van enkele duizenden SKU’s?
Het opnieuw opbouwen van de historiek en het berekenen van de prognoses blijven lineair schalen met het aantal actieve producten. Bij 5.000 SKU’s met 12 maanden historiek moet u rekenen op 10 tot 30 minuten nachtelijke verwerking, afhankelijk van de kracht van de server. Er is geen enkele impact op de prestaties aan de voorkant: alle berekeningen verlopen asynchroon.