# Inventory Adjustment

## Overview

Inventory adjustments are manual corrections to on-hand stock quantities that reconcile system records with physical reality. Discrepancies arise from damage, theft, counting errors, receiving mistakes, or production variances. Each adjustment specifies a reason code, the affected item and location, and the quantity delta (positive or negative). When confirmed, the adjustment generates a stock movement to or from a virtual "adjustment" location, updating the on-hand balance and impacting inventory valuation.

Adjustments may originate from a standalone correction (e.g., a warehouse worker discovers damaged goods) or as a follow-up to an inventory count that reveals a variance. Organizations can optionally enforce an approval workflow for adjustments that exceed a configurable quantity or value threshold.

## Business Purpose

- **Accuracy**: Corrects system stock levels to match actual physical inventory, preventing downstream issues in order fulfillment and purchasing
- **Traceability**: Every adjustment records a reason code and creates an auditable stock movement, satisfying regulatory and internal audit requirements
- **Valuation integrity**: Adjustments flow through to inventory valuation so that financial reports reflect the true cost of goods on hand
- **Loss visibility**: Categorizing adjustments by reason code (damage, shrinkage, counting error) enables analysis of inventory loss patterns and root-cause investigation
- **Integration with inventory counts**: Provides the mechanism to act on count variances discovered during cycle counts or full physical inventories

## Process Flow

```mermaid
flowchart TD
    A[Identify Discrepancy] --> B[Create Adjustment Record]
    B --> C[Select Item, Location, Quantity Delta]
    C --> D[Assign Reason Code]
    D --> E{Approval Required?}
    E -- No --> G[Confirm Adjustment]
    E -- Yes --> F[Submit for Approval]
    F --> F1{Approved?}
    F1 -- Yes --> G
    F1 -- No --> H[Reject Adjustment]
    H --> I[Return to Draft / Cancel]
    G --> J[Generate Stock Movement]
    J --> K[Update On-Hand Quantity]
    K --> L[Update Inventory Valuation]
```

## Scenario Patterns

- **Damage write-down**: A warehouse inspection reveals physically damaged units. A negative adjustment with reason code "Damage" removes the affected quantity from on-hand stock.
- **Shrinkage / theft**: Periodic checks or count results show missing inventory with no corresponding shipment. A negative adjustment with reason code "Shrinkage" records the loss.
- **Counting error correction**: A cycle count reveals more units on the shelf than the system shows. A positive adjustment with reason code "Counting Error" increases the on-hand balance.
- **Receiving error correction**: Goods receipt recorded the wrong quantity. A positive or negative adjustment with reason code "Receiving Error" corrects the discrepancy.
- **Production variance fallback**: Actual yield differs from expected output, but the site is not using the manufacturing module or the discrepancy is discovered with no resolvable production-order or work-order source document. In that limited case, a direct adjustment with reason code "Production Variance" reconciles the difference.
- **Threshold-based approval**: An adjustment exceeding a configured quantity or value limit is routed to a supervisor for approval before confirmation.
- **Bulk post-count adjustment**: After a full physical inventory count, the system generates one adjustment record per variance line, allowing batch review, reason-code assignment, and confirmation.

## Test Cases

- A positive adjustment increases on-hand quantity by the specified amount at the given location
- A negative adjustment decreases on-hand quantity by the specified amount at the given location
- A negative adjustment cannot reduce on-hand quantity below zero (unless the organization permits negative stock)
- Every confirmed adjustment creates exactly one stock movement record with the correct source/destination (virtual adjustment location)
- A reason code is required on every adjustment; confirmation without a reason code is rejected
- Adjustments in draft status do not affect on-hand quantity or valuation until confirmed
- When approval workflow is enabled, adjustments above the threshold remain pending until approved
- A rejected adjustment does not generate a stock movement or change on-hand quantity
- Adjustments originating from an inventory count link back to the count session for traceability
- Confirmed adjustments update inventory valuation consistent with the organization's costing method
- Adjustments are immutable after confirmation; corrections require a new, offsetting adjustment
- A direct adjustment with reason code `Production Variance` must be rejected or rerouted when a resolvable manufacturing `productionOrderReference` or `workOrderReference` exists; those cases must enter inventory through `ManufacturingScrapHandoff`

## Reference Links

- [SAP Goods Movement - Adjustment Posting (Movement Types 501/502)](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f42e93de3a7c4de2abb5ffb817785bef/4023cff7ddba1d65e10000000a174cb4.html)
- [Oracle Inventory Adjustments](https://docs.oracle.com/en/cloud/saas/supply-chain-and-manufacturing/25a/famoh/inventory-adjustments.html)
- [NetSuite Inventory Adjustment](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N1624498.html)
