# Stock Opname in ERP: Cycle Counts Without Freezing Ops

> How to design stock opname in a custom ERP so it stops being a once-a-year freeze: snapshot vs live counting, ABC cycle-count scheduling, variance approval, and correct adjustment posting.

URL: https://www.matthewswong.com/en/blog/erp-stock-opname-cycle-count-indonesia/

- Author: Matthews Wong (https://www.matthewswong.com/en/about/)
- Published: 2026-07-10
- Updated: 2026-07-10
- Category: ERP

Ask any warehouse manager what they dread most on the ERP calendar and the answer is usually the same: stock opname. A full physical count forces receiving, picking, and shipping to stop so nobody moves a box while someone else is counting it. For a business running on thin margins, one to three days of frozen operations every year is a real cost, not just an inconvenience.

This post walks through how to design stock opname inside a custom ERP so it stops being a once-a-year fire drill: the difference between snapshot counting, live counting, and ABC-scheduled cycle counts, how to route variances through an approval workflow that survives an audit, and how to post the resulting adjustments to the ledger correctly under Indonesian accounting rules.

## Why a Full Stock Opname Still Freezes the Warehouse

A full stock opname only produces a trustworthy number if nothing moves during the count. That single constraint is what forces the freeze: every open pick, putaway, and goods receipt has to pause, because a unit counted on one shelf and then moved to another before the tally is summed gets counted twice, or not at all. Most teams schedule the full count once a year, right before financial statements close, and treat the frozen window as an unavoidable cost of compliance.

- Every open pick, putaway, and receiving task has to pause before the count starts, or the resulting quantities are unreliable from the first tally.
- Finance needs a hard cutoff so cost of goods sold and gross margin for the closing period are based on a number everyone can defend to an auditor.
- A count that only happens once a year catches shrinkage, mislabeling, and data-entry errors up to twelve months after the root cause has already happened, which makes the finding almost useless for fixing the process.

> On a warehouse with a few thousand active SKUs, a full stock opname commonly takes one to three days of stopped picking and receiving. Businesses tolerate that cost for statutory compliance, but a count that only happens once a year is a single sample of a number that changes daily -- it tells you almost nothing about where the shrinkage is actually happening.

## Snapshot Counting, Live Counting, and Cycle Counting Compared

There are three ways to structure a count inside an ERP, and most custom builds end up using different ones for different purposes rather than picking a single method for everything.

| Method | How It Works | Best For | Trade-off |
| --- | --- | --- | --- |
| Full Physical Count (Snapshot) | Freeze all movement, count every SKU at once, reconcile the whole ledger in a single pass | The year-end statutory stock opname required for PSAK 202 reporting | Ops halted for one to three days depending on SKU count and warehouse size |
| Live / Perpetual Counting | Count continuously against a live system balance while receiving and picking keep running | High-velocity warehouses that cannot tolerate any freeze at all | Movements during the count window can make the difference meaningless unless timestamps are locked |
| ABC Cycle Counting | Rotate a scheduled subset of SKUs through counts by ABC class, using a frozen snapshot per task | Most custom ERP deployments balancing accuracy against uptime | Needs a scheduler and a disciplined variance workflow to stay trustworthy over time |

> Do not try to replace the annual statutory stock opname with cycle counting alone. Run ABC cycle counts continuously for accuracy and shrinkage detection, then run one full snapshot count near year-end so the number in the financial statements has a single, defensible cutoff date.

## Scheduling ABC Cycle Counts Without a Spreadsheet

ABC classification splits inventory into three tiers by consumption value: A items are the small share of SKUs that carry most of the value and get counted monthly, B items get counted quarterly, and C items -- the bulk of the catalog by SKU count but the smallest share of value -- get counted once or twice a year. Because only a rotating subset is ever open for counting at once, the rest of the warehouse keeps receiving, picking, and shipping normally. The scheduler below checks each item's last count date against its class frequency and opens a new cycle count task the moment it falls due, so nobody has to remember which SKUs are overdue.

## Variance Approval: When the Count Doesn't Match the Ledger

A cycle count is only as trustworthy as the workflow that resolves disagreements between the physical count and the system balance. The task needs to compare against a frozen snapshot, route anything outside tolerance to a second pair of eyes, and leave a clean audit trail behind every adjustment.

1. Compare the counted quantity against the system quantity snapshot frozen the moment the task was created, never against the live balance, so any receipts or issues posted during the count window don't corrupt the difference.
2. Route the variance automatically: differences inside a set tolerance percentage post straight through, differences above tolerance get flagged for a supervisor-led blind recount before anyone touches the ledger.
3. If the blind recount confirms the discrepancy, escalate to an inventory or finance manager for adjustment approval, attaching a note or photo for anything above a materiality threshold set by finance.
4. Lock the task once it's approved so it becomes an immutable audit trail entry, and let that approval automatically trigger the adjustment posting rather than relying on someone remembering to do it manually.

> Never let the person who physically counted an item also approve its own variance adjustment. That missing segregation of duties is the single most common finding auditors raise when they review stock opname records in Indonesian companies, and it is trivial to design out from the start.

## Posting the Adjustment to the Inventory Ledger

Once a variance is approved, the adjustment needs to land in the ledger the same way any other stock movement does -- through a proper voucher, at the correct valuation, with a timestamp that keeps the scheduler and the audit trail in agreement.

- Post the adjustment through a dedicated voucher type, separate from purchase receipts and sales issues, so shrinkage and count corrections stay easy to isolate in later reporting.
- Value the adjustment at the item's current valuation rate under FIFO or weighted average -- the only two methods PSAK 202 permits -- never at a placeholder or estimated price.
- Update the item's last-counted-at timestamp only after the posting succeeds, so the next scheduler run and the audit trail always agree on when the balance was actually confirmed.

> Batch adjustment postings by warehouse and by day, and have a supervisor review the batch before it hits the ledger rather than posting each variance the instant it's approved. It catches pattern-level problems, like one aisle producing variances every cycle, that a single adjustment view never surfaces.

## Where PSAK 202 and Tax Compliance Fit In

Indonesian accounting rules under PSAK 202, the renumbered PSAK 14, require inventory to be carried at the lower of cost and net realizable value, using FIFO or weighted average -- LIFO is not permitted. A well-designed cycle count program feeds that requirement continuously instead of leaving it to a single scramble at year-end.

- Keep a signed berita acara, or count minutes, for every completed cycle count batch, not only for the annual full count, so there's a documented trail for every adjustment an auditor might ask about.
- Reconcile cycle-count adjustments every month so the year-end stock opname becomes a formality that confirms an already-accurate ledger, instead of a scramble to explain a swollen variance nobody investigated earlier.
- Keep net realizable value write-downs in separate journal entries from quantity adjustments -- PSAK 202 treats a valuation write-down and a physical quantity correction as different events, and mixing them into one entry makes the disclosure harder to defend.

> Teams that move from a single annual freeze to ABC-scheduled cycle counts consistently report that their year-end stock opname closes in hours instead of days, because the ledger was never far from reality in the first place.

## Sources

- Cycle count -- Wikipedia
- ABC analysis -- Wikipedia
- PSAK 202 Persediaan -- Ikatan Akuntan Indonesia (IAI)

> **Key takeaway:** This guide shows how to replace an annual stock opname freeze with ABC-scheduled cycle counting inside a custom ERP: classify inventory into A/B/C tiers, schedule counts against a frozen snapshot, route variances through a segregation-of-duties approval workflow, and post adjustments under PSAK 202 valuation rules so year-end counts become a formality.

## Source links

- https://en.wikipedia.org/wiki/Cycle_count
- https://en.wikipedia.org/wiki/ABC_analysis
- https://web.iaiglobal.or.id/PSAK-Umum/16

## FAQ

### What is the difference between stock opname and cycle counting?

Stock opname is a full physical count of every SKU in a warehouse, usually done once a year and requiring operations to freeze for one to three days. Cycle counting rotates a smaller subset of SKUs through counts on a regular schedule, based on ABC classification, so the warehouse keeps operating normally. Most custom ERP builds use both: continuous ABC cycle counts for accuracy, plus one annual stock opname for statutory reporting.

### Why does a full stock opname require freezing warehouse operations?

A full count is only accurate if nothing moves while it's being taken. If a unit is counted on one shelf and then relocated before the tally is finalized, it can be counted twice or missed entirely. That's why receiving, picking, and putaway have to pause for the duration of a full physical count, unlike a cycle count, which only freezes the specific SKUs currently under count.

### How does ABC classification decide cycle count frequency?

ABC classification ranks items by consumption value using the Pareto principle: A items are the small share of SKUs that account for most of the value and get counted most often, typically monthly. B items get a moderate frequency, often quarterly, and C items -- the bulk of the catalog by SKU count but the smallest share of value -- are counted only once or twice a year. This concentrates counting effort where errors matter most financially.

### Can I skip the annual stock opname if I already run ABC cycle counts?

No. Cycle counting improves day-to-day accuracy and catches shrinkage earlier, but most Indonesian accounting practice under PSAK 202 still expects a documented full physical count at or near year-end to support the financial statements. Treat cycle counting as a continuous accuracy program that makes the annual stock opname faster and less disruptive, not a replacement for it.

### Who should approve inventory variances found during a stock opname or cycle count?

Never the same person who performed the physical count. A proper workflow routes variances above tolerance to a supervisor for a blind recount, then to an inventory or finance manager for final approval before any adjustment is posted to the ledger. Skipping this segregation of duties is one of the most common findings auditors raise when reviewing Indonesian stock opname records.

---

- HTML version: https://www.matthewswong.com/en/blog/erp-stock-opname-cycle-count-indonesia/
- Bahasa Indonesia: https://www.matthewswong.com/id/blog/erp-stock-opname-cycle-count-indonesia/
- Site index for agents: https://www.matthewswong.com/llms.txt
- Sitemap: https://www.matthewswong.com/sitemap.xml
- API description (OpenAPI): https://www.matthewswong.com/openapi.json
