---
title: "Stock adjustment"
description: "How to add or remove units by scanning products, with a note on the movement."
keywords: ["inventory", "stock", "adjustment", "barcode", "count", "shrinkage"]
lastUpdated: "2026-07-29"
---

# Stock adjustment

Use this flow when you need to **correct inventory** without a purchase or sale: physical counts, breakage, shrinkage, internal returns, or similar.

Only **admin** and **cashier** roles can do this.

## Where to find it

- **Products** → **Adjust stock** button
- **Warehouses and stock** (`/stock`) → same button in the top bar

## Step by step

1. Open **Adjust stock**.
2. Choose the **warehouse/deposit** where the movement applies.  
   After you add products to the list, the deposit stays locked until you clear the list or close the modal.
3. Pick the adjustment type:
   - **Add** — puts units into the deposit.
   - **Remove** — takes units out (cannot go below zero).
4. Scan products:
   - **Barcode scanner:** type or scan in the field and press **Enter**.
   - **Camera:** tap the barcode icon next to “Qty per scan”.
   - **Qty per scan:** how many units each scan adds (default 1).
5. Review the table:
   - Internal #, name, barcode, **current stock**, and adjustment quantity.
   - You can edit quantity per row or remove a line with the trash icon.
   - Scanning the same product again **accumulates** quantity.
6. Optional: fill in **Note** (e.g. “Tuesday count”, “Breakage in back room”, “Inventory variance”).
7. Confirm with **Apply adjustment**.

## What the system records

- Updates stock in the selected deposit.
- Creates a **Shipments / stock movement** record (`shipments`) as incoming or outgoing, with quantity and your note.
- Internal metadata includes user and source `stock_adjust` for audit.

## Permissions

| Role | Can adjust? |
|------|-------------|
| Administrator (1) | Yes |
| Cashier (2) | Yes |
| Sales (3) | No |
| Junior sales (4) | No |

## Common errors

- **Product not found:** barcode missing, product disabled, or not in your company.
- **Insufficient stock:** in **Remove** mode, an item does not have enough units in that deposit.
- **Permission denied:** role is not admin or cashier.

## When to use another flow

| Situation | Use |
|-----------|-----|
| Supplier purchase with invoice | [Merchandise receiving](/docs/inventory/receiving) |
| Move stock between deposits | [Transfers](/docs/inventory/transfers) |
| Initial bulk stock load | Initial stock or [bulk import](/docs/inventory/bulk-import) |
