Stock Adjustments
1. Overview & Purpose
What are Stock Adjustments?
2. When to Use Stock Adjustments
Liquid Spillage, Breakage & Perishable Expiry Write-Downs
Glass beverage bottles break on the warehouse floor or chilled dairy products surpass their expiration date and must be legally destroyed.
Post-Stock Opname Physical Discrepancy Reconciliation
A cyclic end-of-month inventory opname audit reveals variances across 30 SKUs between physical floor counts and recorded software ledger balances.
Unexplained Retail Shrinkage & Pilferage
Retail store inventory audit discovers 3 missing high-value apparel items likely lost to shoplifting or untracked shrinkage.
Recovered / Found Inventory Re-Induction
Warehouse staff discover a misplaced carton of 24 units of coffee beans tucked behind high-bay pallet racking during aisle maintenance.
Packaging De-Bulk & Repackaging Unit Variances
Breaking down a master carton of bulk dry goods into smaller retail pouches incurs minor gram weight loss due to packing dust.
Store Showroom Display & Sample Item Expensing
A retail boutique takes 2 bottles of perfume or 1 jacket off the retail rack to use as tester displays for customer sampling.
3. Data Dictionary & Fields
Schema structure for the stock_adjustments and stock_adjustment_items tables:
| Field / Column | Input Type | Requirement | Description & Operational Guide |
|---|---|---|---|
number | String (Auto-generated) | Required | Unique sequential document tracking number for the inventory adjustment. Example: ADJ-2026-0001 |
branchId | Foreign Key (Branches) | Required | The operating branch responsible for the inventory variance. Example: Jakarta Central Branch (ID: 1) |
locationId | Foreign Key (Locations) | Required | Specific warehouse facility or retail outlet where discrepancy occurred. Example: Main Distribution Hub (ID: 2) |
adjustmentType | Enum (OPNAME | MANUAL) | Required | Origin type: OPNAME (driven by completed audit) or MANUAL (ad-hoc warehouse correction). Example: MANUAL, OPNAME |
adjustmentReason | Enum (DAMAGE | EXPIRED | LOST | CORRECTION | FOUND | OTHER) | Required | Categorization explaining root cause for variance reporting and financial expense categorization. Example: DAMAGE, EXPIRED, CORRECTION |
stockOpnameId | Foreign Key (StockOpnames) | Optional | Reference to the parent stock opname audit when adjustment type is OPNAME. Example: OPN-2026-0501 (ID: 14) |
adjustmentDate | Date | Required | Transaction date for chronological inventory and accounting ledger entry. Example: 2026-05-19 |
status | Enum (AdjustmentStatus) | Required | Workflow state: DRAFT, POSTED, or CANCELLED. Example: DRAFT, POSTED |
totalAdjustmentValue | Decimal | Required | Monetary sum of all line variances calculated as differenceQuantity multiplied by costPrice. Example: -240000.00 |
productId | Foreign Key (Products) | Required | Target product catalog item receiving variance correction. Example: Sirup Vanilla 750ml (ID: 64) |
storageId | Foreign Key (Storages) | Required | Storage bin where discrepancy was detected. Example: Rack C-03 |
systemQuantity | Decimal | Required | Current software on-hand balance before applying the adjustment. Example: 20.00 |
quantity | Decimal | Required | Actual verified physical count remaining after adjustment. Example: 18.00 |
differenceQuantity | Decimal | Required | Net variance (quantity minus systemQuantity) applied to the ledger. Example: -2.00 |
costPrice | Decimal | Required | Historical or average unit cost used to calculate line monetary valuation. Example: 60000.00 |
batchNumber | String | Optional | Specific inventory batch receiving the variance entry. Example: LOT-2026-V1 |
expiryDate | Date | Optional | Perishable item expiry date attached to the batch. Example: 2026-11-30 |
remarks | String | Optional | Supervisor notes, incident report references, or write-off justifications. Example: Damaged by forklift impact during pallet unloading |
4. Interface Preview
Interface display showing adjustment registry, reason categories, automatic total value calculation, and posting actions.
Screen Preview: Stock Adjustments Interface
Visual interface illustration and control layout for menu Route: /admin/inventories/stock-adjustments
5. Drafting Stock Adjustments
Navigate to Stock Adjustments
Menu > Inventories > Stock AdjustmentsGo to Inventories in the left sidebar and select Stock Adjustments to view historical adjustments.
Launch Adjustment Drawer
Add AdjustmentClick the Add Adjustment button in the page toolbar.
Set Adjustment Parameters
Branch / Type / ReasonSelect operating Branch, Location, Adjustment Type (Manual or Opname), Reason, and Adjustment Date.
Add Adjustment Items
Add Item > Actual QtyFor manual adjustments, click Add Item, choose product, variant, storage bin, and enter actual verified physical quantity.
Save Draft Adjustment
Save AdjustmentClick Save Adjustment to persist the voucher in Draft status for inventory controller review.
6. Posting Discrepancies & Journal Entries
Review Variance Quantities and Valuations
Action > DetailInspect the summary of positive and negative discrepancy quantities and aggregate financial impact in Detail modal.
Post Stock Adjustment
Action > PostClick Post from the row actions or detail view. Confirm the warning dialog that balances will be altered.
7. Reopening & Cancellation Controls
Posted Balance Lock
Cancel Draft Adjustment
Action > CancelIf an adjustment was entered by mistake or rendered obsolete prior to posting, click Cancel from the actions menu.
Reopen Cancelled Document
Action > ReopenIf a cancelled adjustment requires re-evaluation, authorized managers can click Reopen to return it to Draft status.
8. Cross-Module Impact
| Target Subsystem | Relational & Transactional Effect |
|---|---|
| Stock Balances | Directly adjusts physical on-hand quantity by the difference quantity in the designated storage bin. |
| Stock Movement Ledger | Logs immutable ADJUSTMENT_IN (positive) or ADJUSTMENT_OUT (negative) movements with cost valuations. |
| Stock Opname Audits | When linked to an Opname, transitions the parent audit status to ADJUSTED and completes reconciliation. |
| Accounting General Ledger | Generates automated journal vouchers debiting Inventory Shrinkage/Loss expense accounts and crediting Inventory Asset accounts. |
Operational Best Practices
- Always link Stock Opname audits directly when reconciling physical counts to maintain unbroken audit linkage.
- Use specific reasons such as EXPIRED or LOST rather than generic OTHER to produce meaningful shrinkage reporting.
- Confirm that cost prices on discrepancy items align with standard valuation before posting to avoid COGS distortion.