Many companies run stock opname "full stop": operations are halted, all stock is counted, then variances are checked. If something is short, warehouse staff or the outlet must replace it. The question: how far can Odoo bridge this process? The answer: almost every technical stage is supported; the "replacement" part needs to be assembled through documents and approvals.
1. The Typical "Full Stop" Stock Opname Flow
Freeze operations → Count everything → Check variance → Replacement by staff/outlet → Process improvement
The first four stages are operational and can be run in Odoo. The replacement stage is about accountability & finance — this is where Odoo needs to be "bridged".
2. Stage 1 — Freeze Operations
Odoo does not have a single "freeze" button, but the effect of halting operations can be achieved with:
- Schedule the opname outside operating hours (e.g. night/weekend).
- Restrict access temporarily — remove/change warehouse users' access rights so no new transactions occur.
- Count per location/zone — the area being counted is naturally "frozen" while other areas keep running.
- Lock Date in Accounting — prevents changes to closed-period journals.
- Document cut-off — make sure all transfers/receipts before the cut-off are validated.
3. Stage 2 — Count Everything
Use the Barcode → Inventory app. There is a **"Count entire location"** setting: when a location is scanned, Odoo shows all products in that location to count.
- Scan the location — the system shows the products that should be there.
- Scan the product / enter the physical qty — `inventory_quantity` is filled.
- Continue to the next location until the entire scope is done.
Counting can be done as a blind count (without seeing system stock) for objective results.
4. Stage 3 — Check the Variance
Odoo shows the variance per product/location (`inventory_quantity` vs `quantity`). When you Apply/Validate:
- A stock adjustment move is created — short = loss, over = gain.
- It records who, when, and at which location (audit trail).
- The variance can be classified (damaged/lost/misrecorded) via an adjustment reason or `stock.scrap`.
5. Stage 4 — Replacement by Staff/Outlet
This is the part that is not automatic in Odoo. Odoo does not directly "bill" staff, but it provides the ingredients & paths to assemble it:
- Responsibility attribution — separate locations per outlet/warehouse; see the user who counted (`create_uid`); add a responsible-person field if needed (custom).
- Replacement documents — issue:
- Debit Note / Invoice to the outlet (if the outlet bears it),
- Expense to the employee, or
- Journal Entry to record the replacement receivable/liability.
- Approval — use the **Approvals** module so variances & replacements are approved before billing.
- Payroll deduction — if the replacement is deducted from salary, integrate it with payroll (usually via custom).
- Reporting — variance reports per location/user as the basis for decisions.
Important note: "replacement by staff" is a company policy, not a standard Odoo feature. What Odoo bridges is the variance data + audit + document/approval path. For a smooth flow, a small "Stock Variance Claim" module is usually built: adjustment → claim → approval → invoice/payroll.
6. End-to-End Example
- At night: operations stop, access is restricted, all receipts/transfers before the cut-off are validated.
- The team scans locations & products (Barcode Inventory) across the warehouse/outlet.
- Odoo shows the variance; large differences are re-checked (recount/blind count).
- Adjustments are applied; variances are classified (lost/damaged).
- For the variance that is the staff/outlet's responsibility, a claim is created → approved → a debit note/invoice is issued or deducted via payroll.
- Root-cause analysis: fix the layout, SOP, or supervision to prevent recurrence.
7. Best Practices
- Clear cut-off — no "sneaking in" transactions during the count.
- Blind count & zoning — objective results that are easy to account for.
- Tiered approval — variances above a threshold need approval.
- Documentation & audit — keep count results, adjustments, and claims.
- Root-cause analysis — do not just bill; fix the process.
8. KPIs
- Inventory accuracy — % match between system and physical.
- Variance value — value of the difference per opname/period.
- Claim recovery — what percentage of the variance was successfully accounted for.
- Opname cycle time — duration of the freeze & counting.
- Repeat variance — repeated differences at the same location (a sign of process issues).
Closing
Odoo is very strong at counting, recording, and auditing stock variances. For a "full stop" opname, almost every operational stage can be run in Odoo — from freeze (via scheduling & access restriction), counting everything with barcodes, to recorded adjustments. The replacement by staff/outlet part is not a built-in feature, but it can be bridged through financial documents, approvals, and (if needed) a claim module. The key: a variance is not merely adjusted — it is accounted for and its root cause fixed.
Want to design the stock opname & variance accountability flow in Odoo? Talk to the Sinergi Data Totalindo (SDT) Team.
Note: appearance and features may adapt to the Odoo version and implementation needs. Written by Sinergi Data Totalindo, PT.