Title: Immutable Stock Ledger: Live Balances per Warehouse | ZMOS
URL: https://zudoworks.com/zmos/stock-ledger/
Description: In ZMOS every receipt, issue, transfer and count is a posted movement that never changes. Live balances per item and warehouse; corrections are new rows.
Updated: 2026-11-03

ZMOSAppend-only, live balances

# An immutable stock ledger: balances you can trust

Stock in ZMOS is not a number someone types over. It is a ledger: receipts, issues, transfers, counts, job issues and job returns post as documents, each one numbered without gaps, and a posted document never changes. Balances per item and warehouse are the sum of the ledger, live.

[Try ZMOS free](https://app.zudoworks.com/signup)
[Book a 20-minute demo](https://zudoworks.com/contact/)

- Six movement types, each with a gapless document number
- Posted means immutable; corrections are new movements
- Live balance and value per item and warehouse
- Every posting is one transaction with an idempotency key

![The ZMOS stock movement form with item, warehouse, quantity and reference fields](https://zudoworks.com/Asset/img/zmos/stock-movement-form.webp)

Posting a stock movement; it becomes a ledger row the moment it is posted. Sample data.

## The six movement types

Each type has a prefix, a direction and a rule about cost, so the ledger explains itself.

| Type | Prefix | Direction | Reason required | Unit cost |
| --- | --- | --- | --- | --- |
| Receipt | RCV | into a warehouse | no | required |
| Issue | ISS | out of a warehouse | yes | moving average |
| Transfer | TRF | warehouse to warehouse | no | carried |
| Adjustment | ADJ | plus or minus | yes | moving average or standard cost |
| Job issue | JIS | warehouse to job | over-issue needs a reason | moving average |
| Job return | JRT | job to warehouse | no | same rate as issued |

From the ZMOS user guide, section 11. Job issue and return are created from the job page.

## The rules that make it trustworthy

1. **Draft, then posted, then never edited**

   A movement is a draft until it is posted. Posting is one database transaction that takes a gapless per-company document number. A posted movement is immutable; to correct it you post another movement, so the history always shows what happened and when.
2. **No double posting**

   Every posting carries an idempotency key. A repeated post with the same key answers the original document; a different payload with the same key is refused. Row locks are taken before the check, so two people clicking at once still book once.
3. **Balances are derived, not stored by hand**

   On-hand quantity and value per item and warehouse come from the ledger. The balances page, the dashboard, procurement, reports and Zudo AI all read the same figure.
4. **Cost follows what you pay**

   A receipt at a new unit cost can update the item's current cost in the same posting, and the audit log records that it did. Issues leave at moving average, so job cost reflects what the material really cost.
5. **Reorder points watch the ledger**

   Each item can carry a low-stock alert level. When a posting takes the balance below it, the item is flagged and a workflow rule can fire, for example an e-mail to the owner or a draft purchase order.
6. **Everything attaches and links**

   A movement page shows its lines, its ledger effects, photos and signatures, and the purchase order or job that produced it. Views are a table or a timeline, filtered by type, status, date, item and warehouse, and exportable.

## A day on the ledger

The same four postings cover most of a small shop's day.

1. **Receive**

   A delivery arrives against PO-00031. Receiving the PO posts a receipt; the stock is in the warehouse the moment it is posted.
2. **Issue to a job**

   The supervisor issues 12.6 kg of sheet to JOB-000002 from the job page. The movement is a JIS and the job's material cost grows by the issue at moving average.
3. **Return and count**

   Offcuts come back as a JRT at the rate they were issued. A count that finds 0.5 kg less posts an adjustment with a reason.
4. **Read the balance**

   Balances show quantity and value per warehouse. Nothing was typed over; the ledger explains each figure.

![The ZMOS inventory valuation report with totals by item type, warehouse and item](https://zudoworks.com/Asset/img/zmos/inventory-valuation.webp)

Inventory valuation, read straight from the ledger. Sample data.

## In numbers

movement types
:   6

transaction per posting, with a gapless number
:   1

edits to a posted movement, ever
:   0

balance and value per item and warehouse
:   Live

export of items and transactions as files
:   Any time

Watch it work

## See this part of ZMOS on video

Recorded in the product itself, narrated in English, start to finish.

[![Video thumbnail: Chapter 7. Stock control](https://zudoworks.com/Asset/img/zmos/stock-movement-form.webp)Chapter 7. Stock control](https://www.youtube.com/watch?v=X_AptIFS1Jo&t=1836s)

30:367. Stock control

Receipts, issues, transfers, counts and the live balances they produce. The clip starts at this chapter of the full two-hour build; every step is on sample data and the current version.

[All 38 chapters and the 20-minute tour](https://zudoworks.com/zmos/videos/)

## Questions buyers ask

Short answers. The [pricing page](https://zudoworks.com/zmos/pricing/) covers plans and the trial.

### Related

- [Stock control in ZMOS](https://zudoworks.com/zmos/inventory/)
- [Job costing](https://zudoworks.com/zmos/job-work-and-costing/)
- [Purchasing and reorder points](https://zudoworks.com/zmos/purchasing/)
- [Security](https://zudoworks.com/zmos/security/)

What does immutable mean here?

A posted stock movement cannot be edited or deleted. If a figure was wrong, you post a correcting movement with a reason. The original stays, so the history is complete and an auditor can follow it.

How are balances calculated?

They are the sum of posted movements per item and warehouse. The balances page, dashboards, procurement, reports and Zudo AI all read the same derived figure; nobody maintains a separate stock number by hand.

Can two people post the same receipt twice by accident?

No. Each posting carries an idempotency key and the row lock is taken before the check. A repeated post returns the original document instead of booking again.

Does the ledger handle more than one warehouse?

Yes. Movements name the warehouse, transfers move stock between warehouses, and balances are kept per item and per warehouse with a total.

How does the ledger affect job cost?

Material issued to a job leaves the ledger at moving-average cost, and returns come back at the rate they were issued, so the job's material cost is what the material actually cost.
