Stock adjustments & movements
Record purchases into stock with weighted-average cost, remove stock, read a variant's full movement history, and track individual fabric rolls (thaan) and remnants (chindi).
Stock in Kapda Stock is never edited as a bare number. Every change is a movement — in or out, with a reason, a quantity and, for purchases, a cost — so the history always explains the balance.
Recording movements needs the Manager role or above.
What moves stock automatically#
| Event | Movement |
|---|---|
| POS sale, or issuing a draft invoice | OUT, reason SALE |
| Sale return | IN, reason RETURN |
| Receiving goods against a purchase order | IN, reason PURCHASE |
| Job work — material issued / finished goods received | OUT / IN |
| Goods returned to a supplier | OUT, reason PURCHASE_RETURN |
| Opening stock when a product is added or imported | IN |
You never need to adjust stock by hand for these.
Record a purchase (stock in)#
Use this when goods arrive without a purchase order — a cash purchase from the market, for example.
- In Inventory, click + (Record purchase (stock in)) on the variant.
- Enter the Quantity (whole number).
- Purchase price / unit ₹ — what you paid. The dialog previews New average cost: ₹X (was ₹Y · N on hand + M @ ₹Z).
- Selling price / unit ₹ — pre-filled with the current price. Change it to reprice the product.
- Purchase date — today or earlier; future dates are refused.
- For MTR, YARD or ROLL products, optionally enter Roll lengths — for example
25, 25, 20— to register each thaan separately. They must add up to the quantity. - Notes (supplier, bill no…) — optional, up to 500 characters.
- Save.
Weighted-average cost#
The purchase rate blends into a weighted-average cost across old + new stock; the selling price is set directly.
New average cost = (stock on hand × current cost + quantity bought × purchase price) ÷ (stock on hand + quantity bought)
For example, 40 m on hand at ₹200 plus 60 m bought at ₹250 gives (8,000 + 15,000) ÷ 100 = ₹230.
Stock out#
Click − (Stock out) on a variant and enter the Quantity to remove:. Use it for stock that leaves without a bill — samples given away, damaged pieces thrown out. The quantity cannot exceed what is on hand (Insufficient stock: N available).
Purchase & stock history#
⋯ → 🧾 Purchase & stock history opens a drawer with the variant's current stock and two tables:
- 📦 Purchase batches — every purchase with Date, Entry, Qty, Unit ₹ and Value. Empty state: No purchases recorded yet — use the + button to record one with price and date.
- All stock movements — every in and out with Date, Entry, Qty (green for in, red for out) and Unit ₹.
Movement reasons#
| Reason | Direction | Created by |
|---|---|---|
| OPENING_STOCK | In | Adding or importing a product |
| PURCHASE | In | Record purchase; receiving a purchase order |
| RETURN | In | A sale return |
| CORRECTION | In | A stock correction |
| JOB_WORK_IN | In | Finished goods received from a karigar |
| JOB_WORK_CANCEL | In | Material returned when a job work is cancelled |
| SALE | Out | POS sales, issued invoices, and Stock out |
| PURCHASE_RETURN | Out | Goods returned to a supplier (debit note) |
| JOB_WORK_OUT | Out | Material issued to a karigar |
| CUT | Out | A roll cut with "also remove from stock" ticked |
| DAMAGE / THEFT | Out | A stock adjustment |
Fabric rolls & remnants#
For fabric sold by length (MTR, YARD or ROLL), you can track each physical roll — thaan — so you know exactly which pieces are on the shelf and which are down to chindi.
Register rolls#
Either enter Roll lengths when recording a purchase, or open ⋯ → 🧵 Fabric rolls & remnants, type lengths such as 25, 25, 20 in Register rolls and click + Add rolls. Each roll is numbered ROLL-00001, ROLL-00002, … across your business.
The roll table#
| Column | Shows |
|---|---|
| Roll | Roll number |
| Full | Original length |
| Left | Remaining length, tagged 🧶 remnant or finished |
A roll is a remnant once it has been started and is down to 2 units or 10% of its original length, whichever is larger — for example 4 m left of a 40 m roll, or 2 m left of a 15 m roll.
Cut from a roll#
- Click ✂ Cut on the roll.
- Enter the Length (up to what is left, in steps of 0.1).
- Leave also remove from stock unticked if the cut was billed at POS (the sale already reduced stock). Tick it only for cuts NOT billed at POS — for example fabric sent for a sample.
- Click Cut.
Error messages#
| Message | Cause |
|---|---|
| Quantity must be positive | Enter a whole number above 0. |
| Insufficient stock: N available | You are removing more than is on hand. |
| Date cannot be in the future | Pick today or earlier. |
| Roll lengths add up to X, but quantity is Y | Make the lengths total the quantity. |
| Every roll length must be positive / Enter positive lengths, e.g. 25, 25, 20 | Remove zero or blank entries. |
| Only N left on ROLL-… | The cut is longer than the roll. |
| Insufficient stock for this cut | "Also remove from stock" is ticked but stock is too low. |
Related#
Last updated 15/09/2026