Rytm: demand forecasting and stock replenishment for warehouse and store networks

Shows which items will run out before the next delivery and how much revenue that will cost, what and how much to order from each supplier, where cash is frozen, and what is cheaper to transfer between warehouses than to buy. A history-tested forecast, ABC/XYZ, reorder points, working on top of your ERP.

Rytm: demand forecasting and stock replenishment for warehouse and store networks
INGELLO / BUSINESS2933
Open the systemfrontend-logistic2.ingello.com Contact us

What problems it solves

  • Stockouts of fast movers. The system sees which items will run out before the next delivery arrives and shows the lost revenue while the shelf is still not empty.
  • Cash frozen in excess stock. A list of items and locations holding more than 90 days of sales, with the amount at purchase price.
  • Imbalance between warehouses. One location has too much, another too little. The system suggests a transfer before a new purchase.
  • Ordering by gut feeling. Quantities come from the forecast, lead time, safety stock, minimum order and pack size. Orders are already grouped by supplier and warehouse.
  • A forecast nobody trusts. Accuracy and systematic bias are visible for every item, and the forecast model is chosen by testing on history, not by opinion.
  • A second set of records in Excel. Products, stock, sales and purchases come from the ERP; decisions go back there as documents in one click.
Rytm: decisions screen
Decisions: stockouts with lost revenue, what to buy, what to transfer, how much cash is frozen, and "supplier → warehouse" order cards

Who it is for

Distribution, retail chains, online stores with their own warehouses, manufacturing that buys components. The system pays off where there are a hundred or more items, several storage locations and lead times measured in weeks: that is when an ordering mistake costs the most.

What you see right after sign-in

Eight numbers that tell a manager the state of stock in a minute. In the demo company (the "Mobilus" chain: 14 phone models, 5 locations):

MetricDemoHow it is calculated
Stockout7 lines, ₴1.2M lostruns out before the delivery; lost = days out of stock × demand × price
Buy7 lines, ₴3.6Mposition below the reorder point; amount at purchase price
Transfer85 pcssurplus at one location covers a shortage at another
Frozen₴626kstock above the target cover when cover exceeds 90 days
Cash in stock₴7.3Mon hand × purchase price
Days of stock30cash in stock / forecast daily usage
Turnover10.5 per yearcost of goods sold over 12 months / cash in stock
Forecast accuracy89 %100 % − WAPE, revenue-weighted

Key algorithms

Below is what usually hides in a black box. Every decision of the system breaks down into these steps and can be checked by hand.

1. Data preparation: demand, not sales

Sales and stock come by day, for every item and every location. Returns are not counted as demand. The main correction is out-of-stock days. If the item was not on the shelf, zero sales do not mean zero demand. When the item was available n of N days in a month (and at least a third of the month), monthly demand is restated as sales × N / n.

Without this correction every stockout lowers the next forecast, the system orders less, and the stockout repeats. This is the most common reason a spreadsheet forecast fails.

2. ABC/XYZ: importance and predictability

  • ABC by revenue over 12 full months: items sorted in descending order, A takes the first 80 % of revenue, B the next 15 %, C the remaining 5 %.
  • XYZ by the coefficient of variation of monthly demand (standard deviation / mean): X below 10 %, Y 10 to 25 %, Z above 25 %.
  • Thresholds are configurable and recalculated instantly.

The segment is not a report for its own sake: it drives the safety stock. The more important the item and the less predictable its demand, the more days of stock the system keeps beyond the lead time.

SegmentSafety daysStrategy
AX, BX7, 5auto-reorder, stock only for delivery delays
AY, BY10, 7mandatory safety stock for demand swings
AZ, BZ14, 10make to order and tight control: stockouts cost most here
CX3order rarely and in bigger lots
CY, CZ3, 0candidates for range review

In the demo, 3 AY models bring 52 % of revenue and 2 AZ models another 36 %. Eight of the fourteen items together bring less than 10 %: they are not worth tying up cash.

Rytm: ABC/XYZ matrix
ABC/XYZ matrix: item count, revenue share, safety days and strategy. A click on a cell opens the item list

3. Forecast: testing on history picks the model

A 12-month forecast is built for every item with three models:

  • 3-month moving average: reacts quickly to change;
  • 6-month moving average: robust to noise;
  • trend × seasonality (with 15+ months of history): a linear trend is fitted on the deseasonalised series, and calendar-month seasonal indices are normalised to one. Trend and indices refine each other over several passes, otherwise a partial year in the history (a December peak at one edge only) skews the slope. The trend is damped: a year ahead the forecast level stays within 0.5–1.6 of the current one.

A backtest decides which model to use. The system holds out the last 6 months, forecasts them with each model from earlier data and compares with actuals. The model with the lowest WAPE wins. A demo example, iPhone 11 with clear September and December peaks:

ModelBacktest WAPE
3-month average28.2 %
6-month average20.5 %
Trend × seasonality18.4 %, selected

The forecast is made per item and split across locations by their share of demand over the last six months. Item × location series are too noisy for their own seasonality, while the network total gives a stable shape.

4. Forecast accuracy

  • WAPE = Σ|forecast − actual| / Σ actual: average error as a share of sales;
  • Accuracy = 100 % − WAPE: green from 85 %, yellow 70–85 %, red below 70 %;
  • BIAS = Σ(forecast − actual) / Σ actual: systematic over-forecasting (plus) or under-forecasting (minus);
  • MAE in units; the evaluation window matches the backtest window.

Company accuracy is revenue-weighted: an error on an expensive fast mover matters more than on a cheap one. In the demo it is 89 %.

5. Plan: forecast, year target and manual edits

  • Year target (top-down): management sets a 12-month sales amount, the system splits it across items by their revenue share and across months by the forecast shape.
  • Manual edit of any month for any item with a click in the cell. Manual values override the calculation and are highlighted.
  • Every recalculation is saved as a plan version; the last five are kept for comparison.
Rytm: plan
Plan: 24 months of actuals, a 12-month forecast and plan, the year target and growth versus last year

6. How much and when to order

The calculation runs for every item × location pair:

d   = plan for the next ~45 days / number of days × location share (daily demand)
L   = production time + delivery time                                 (lead time, days)
SS  = d × safety days of the ABC/XYZ segment                           (safety stock)
ROP = d × L + SS                                                       (reorder point)
P   = on hand + incoming (open purchases and transfers in the ERP)     (position)
T   = d × (L + order cycle + safety days)                              (target cover)

stockout  if P − d × L < 0           (runs out before the delivery arrives)
buy       if P ≤ ROP
excess    if P / d > 90 days
order qty = max(T − P, MOQ), rounded up to the pack size, capped by max order
lost sales = days out of stock × d × selling price
frozen cash = (P − T) × purchase price

A worked example from the demo. Xiaomi Redmi Note 9 Pro, "Mobilus" store, segment AY:

QuantityValue
Planned daily demand2.75 pcs
Lead time21 days, order cycle 14 days, 10 safety days
On hand / incoming13 / 0 pcs
Needed until delivery2.75 × 21 ≈ 58 pcs
Safety stock2.75 × 10 ≈ 28 pcs
Statestockout: 13 pcs last ~5 days, the item is missing for 17 days
Lost revenue if not ordered17 × 2.75 × ₴8,499 ≈ ₴397k
Target cover2.75 × (21 + 14 + 10) ≈ 124 pcs
Order124 − 13 = 111 → pack of 5 → 115 pcs, ₴793,500

These exact numbers are what the user sees in the item card: no decision has to be taken on faith.

Rytm: item card
Item card: on hand against demand until delivery and safety stock, the resulting order, a chart and the state of every location

7. Transfers before purchases

For every item the system finds donor locations (surplus with live demand) and receivers (stockouts first, then "buy"). A receiver gets min(needed to target, donor surplus) from the largest donor. If the transfer fully covers the need, the purchase is cancelled; if partly, it is reduced. In the demo 85 phones are redistributed this way instead of being bought again while they sit in a neighbouring warehouse.

8. Speed and freshness

ERP data is pulled every 15 minutes; recalculation runs after each sync and after every parameter change. A full demo calculation (14 items × 5 locations, 25 months of daily history) takes 0.1–0.2 seconds; the work grows linearly with the number of item × location pairs.

ERP integration

Rytm keeps no second set of records. Catalogues, stock, sales and purchases live in the ERP (our Forma in the demo); Rytm reads them and sends decisions back as documents:

  • data export: products, warehouses, suppliers, stock, daily sales, open purchases and transfers (counted as incoming);
  • draft purchase: supplier, warehouse, item lines with quantity and price, in one click from the order card;
  • draft transfer between warehouses;
  • sign-in without separate passwords: logged in to the ERP means logged in to Rytm (one-time signed token).

All requests are signed with a shared secret (HMAC-SHA256). Documents are created by the ERP's own mechanisms, so payment, delivery and receipt follow the usual routine and Rytm only reads their state. For another accounting system (1C/BAS, Odoo, an in-house ERP) the same three operations are implemented.

ERP: a purchase created by Rytm
The same purchase in the ERP: supplier, warehouse, line and price came from Rytm
Rytm: system loop
Rytm: data model

Interface

Six screens: decisions, products, plan, matrix, documents, settings. Minimal text: colour shows the state, numbers explain the decision, key actions take one click. It works the same on a phone with the navigation at the bottom.

Rytm: documents
Documents sent to the ERP and their state there
Rytm: interface map
Rytm on a phone
The decisions screen on a phone

How we roll it out

StageWhat we doWhat we need from you
1. Dataconnect the ERP, check history completeness, clean returns and duplicatesERP access or daily sales and stock exports for 12+ months
2. Modelstune ABC/XYZ thresholds, safety days, supplier lead times and MOQs, check accuracy on your historysupplier terms: lead times, minimum orders, pack sizes
3. Pilotone category or one warehouse, recommendations compared with current ordersa purchasing owner for the 2–4 week pilot
4. Rolloutall items and locations, documents flow into the records automatically, team traininga decision on the ordering routine

Timeline and cost are estimated after the first stage: they depend on the ERP, the number of items and the quality of history. The system runs in your infrastructure or ours; source code is handed over under the contract.

What is real and what is demo

  • Real: all algorithms and calculations on the server, sign-in through the ERP, catalogues and stock from the ERP demo account, documents are actually created in the ERP.
  • Demo: 25 months of sales history are generated (the demo account has none); the company "Mobilus" is fictional.

See the system: frontend-logistic2.ingello.com (opens without sign-in in view mode). Presentation: landing-logistic2.ingello.com. Discuss a rollout: talk to an architect.

Technology stack and approaches

SaaS architecture Microservices Cloud computing Software scalability API integrations DevOps processes High-load systems Solution cybersecurity

Frequently asked questions

01Does it replace the ERP?

No. Rytm keeps no records of its own: products, stock, sales and purchases live in the ERP. Rytm calculates forecasts and stock and sends decisions back to the ERP as documents.

02What data is needed to start?

Daily sales and stock per item and warehouse for 12 months or more, product, warehouse and supplier catalogues, and supplier terms: lead times, minimum orders, pack sizes.

03How much history is needed?

Moving averages work from 6 months; the trend × seasonality model kicks in from 15 months. For new items without history the plan is set manually by month.

04Does it work with 1C, BAS, Odoo?

Yes. On the Rytm side the link comes down to three operations: data export, purchase creation and transfer creation. We implement them for your accounting system.

05How do I know the forecast can be trusted?

Accuracy, WAPE and BIAS over the last six months are shown for every item, and the chosen model is the one that erred least. If the result does not fit, the plan is edited manually and the edit takes priority.