+998 90 925 41 68 info@kaskad.uz On-premise · Tashkent, Uzbekistan
RU ·UZ ·EN
enterprise management
  1. Home
  2. Modules
  3. Warehouse

Module · Warehouse Management

Warehouse: real-time stock balances that always reconcile with movement history

Batches, bins, receiving and shipping, transfers, stocktaking. Every operation is recorded as a movement with warehouse journal rows; cost is calculated from FIFO valuation layers.

Request a proposal See the system live
batches and bins FIFO costing movement ledger stock reports

Warehouse journal

Every unit of movement leaves a row - history cannot be recalculated after the fact

The balance for an item, batch, and bin is not a number in a field - it is the sum of ledger rows. Rows are append-only: issues reference specific valuation layers, adjustments reference a justification.

kaskad.local/warehouse/ledger
RowOperationItem · batchBinQtyValuation layer
L-189201receivingSKU-00412 · P-2026-081A-01-03+120created V-164203
L-189202transferSKU-00412 · P-2026-081A-01-03 → B-02-0740-
L-189203shippingSKU-00287 · P-2026-064B-01-02−80V-164118, V-164141
L-189204shippingSKU-00287 · P-2026-064B-01-02−25V-164141
L-189205stocktakingSKU-01130 · P-2026-090C-03-01+2adjustment

Warehouse journal screen mockup. A receipt creates a valuation layer, an issue draws down the earliest layers, and stocktaking results are posted as a separate row.

  • Movement ledger. Every unit of movement - receiving, shipping, transfer, stocktaking result - leaves its own row. Rows are append-only; history cannot be recalculated after the fact.
  • FIFO valuation layers. Every receipt creates a valuation layer with its own price and quantity. Issues draw down the earliest layers - first in, first out.
  • Cost from specific layers. Shipping cost is the sum of draw-downs from actual receipts, not an averaged figure: you can see which batches and prices it is built from.
  • Balances reconcile with history. Stock and movement reports are built from the same history: any figure in a report breaks down into specific ledger rows.

Load test bench figures

Hundreds of thousands of rows - no degradation on office hardware

189Kwarehouse ledger rows
183Kmovements
164Kvaluation layers
~185 MBmemory for the entire platform stack
The ledger, movements, and valuation layers are stored in PostgreSQL alongside the rest of the platform's data. The load test bench with these volumes runs on a laptop-class Intel i5 - office hardware is the lower bound of the requirements.

Day-to-day operations

From receiving to stocktaking: the operation is posted - the balance is already updated

Receiving

Goods arrive in batches: each batch has its own code and its own history. Receiving creates a movement and a valuation layer; the balance is visible in real time.

Shipping

Issues draw from specific layers by FIFO: shipping cost is built from actual receipt prices, not an average.

Transfers

Bin-level storage: every item has a bin. A transfer between bins and warehouses is recorded as a movement: from where, to where, how much.

Stocktaking

Reconciling physical counts with records. A discrepancy does not "fix the balance" - it is posted as an adjustment: a separate ledger row with a justification.

Barcode scanner

Items and batches are found by scanning a code - during receiving and stocktaking, with no manual catalog lookup.

Reports

Stock and movement reports are built from the ledger: any figure breaks down into specific history rows and reconciles with them.

See the warehouse on a live test bench

Tell us about your item catalog, movement volumes, and processes - we will prepare a commercial proposal and show the ledger on load test bench data. The demo takes 40 minutes.