Inventory Module

Complete guide to the NkapBooks Inventory Module — manage stock movements, adjustments, shipments, purchase receipts, batch tracking, serial numbers, warehouse locations, and stock valuation.

6. Inventory Module

The Inventory Module provides full stock management in NkapBooks — tracking every unit of goods across warehouse locations, from receiving goods through purchase receipts to shipping them to customers. It is accessible from the Inventory section in the sidebar and contains the following sub-modules:

Sub-ModuleSidebar EntryDescription
Stock MovementStock MovementTransfer stock between locations or record material issues, receipts, and manufacturing
Inventory AdjustmentInventory AdjustmentCorrect stock levels for physical counts, damage, expiry, theft, or opening stock
ShipmentShipmentRecord outgoing goods deliveries linked to Sales Invoices
Purchase ReceiptPurchase ReceiptRecord incoming goods linked to Purchase Invoices
Batch TrackingBatchGroup items into batches with expiry and manufacture dates
Serial Number TrackingSerial NumberTrack individual units with unique serial identifiers
Locations (Warehouses)LocationDefine storage locations and track per-location stock
Stock Valuation(via Stock Ledger)FIFO and Moving Average valuation of inventory
Inventory SettingsInventory SettingsConfigure default locations, valuation methods, accounts, and optional features
Inventory tracking is always enabled in NkapBooks. To track a specific item in stock, set its Item Type to Product and check the Track Item checkbox on the item record. Features like Batches, Serial Numbers, Barcodes, and UOM Conversions can be individually enabled in Inventory Settings.

6.1 Stock Movement

Stock Movements are versatile inventory transactions that allow you to move stock between locations, issue materials out, receive materials in, or record manufacturing operations — all without a linked sales or purchase invoice.

Schema Overview

FieldTypeDescription
Number SeriesLink → NumberSeriesAuto-generated identifier (default prefix: SMOV-)
Movement TypeSelectThe type of stock operation (see Movement Types below)
DateDatetimeDate of the stock movement
ItemsTable → StockMovementItemLine items with item, locations, quantity, rate, batch, and serial number details
Total AmountCurrency (read-only)Sum of all line item amounts

Stock Movement Item Fields

FieldTypeDescription
ItemLink → ItemThe inventory item being moved
FromLink → LocationSource warehouse/location (for outward movements)
ToLink → LocationDestination warehouse/location (for inward movements)
Transfer UnitLink → UOMThe unit used for entry (defaults to the item's stock unit)
Qty. in Transfer UnitFloatQuantity entered in the transfer unit
Stock UnitLink → UOM (read-only)The item's base stock unit
QuantityFloatQuantity in stock units (calculated from transfer unit × conversion factor)
Conversion FactorFloatMultiplier to convert transfer unit to stock unit
BatchLink → BatchBatch assignment (required if item has batch tracking enabled)
Serial NumberTextSerial number(s) — one per line (required if item has serial number tracking enabled)
RateCurrencyPer-unit valuation rate
AmountCurrency (read-only)Calculated: Quantity × Rate

Movement Types

TypeFrom LocationTo LocationDescription
Material Issue✅ RequiredRemove stock from a location (e.g., damaged goods, internal consumption). Serial numbers must be Active.
Material Receipt✅ RequiredAdd stock to a location (e.g., goods found, opening stock). Serial numbers must be Inactive.
Material Transfer✅ Required✅ RequiredMove stock between two locations. Serial numbers must be Active.
Manufacture✅ (raw materials)✅ (finished goods)Record manufacturing: consume raw materials (From) and produce finished goods (To). Must have at least one item with a From location and one with a To location.

Document Lifecycle

┌─────────┐      ┌───────────┐
│  Draft   │─────▶│ Submitted │
│          │      │           │
└─────────┘      └─────┬─────┘
                       │
                       ▼
                 ┌───────────┐
                 │ Cancelled │
                 └───────────┘
StatusDescription
DraftMovement is being prepared. No stock is affected.
SubmittedStock Ledger Entries are created. Stock quantities are updated at the relevant locations. Serial number statuses are updated.
CancelledStock Ledger Entries are deleted. Stock changes are reversed. Serial number statuses are reverted.

Key Features

  • No Accounting Entries — Stock Movements are pure inventory operations and do not create accounting ledger entries (isTransactional: false). Use Purchase Receipts or Shipments when you need both stock and accounting entries.
  • Batch and Serial Number Support — Full validation of batch assignments and serial number status for each movement type.
  • UOM Conversion — Enter quantities in a transfer unit and have them automatically converted to the item's stock unit.
  • Stock Availability Validation — Before submission, the system validates that sufficient stock exists at the source location, including checking for future transactions that might be affected.
  • Manufacturing Support — The Manufacture movement type allows recording of raw material consumption and finished goods production in a single transaction.

Actions

ActionDescription
View Stock LedgerOpens the Stock Ledger filtered to entries created by this movement

List View

ColumnDescription
NameMovement number (e.g., SMOV-0001)
StatusDocument status indicator
DateMovement date
Movement TypeType of movement (displayed with localized labels)

Workflow: Creating a Stock Movement

  1. Navigate to Inventory → Stock Movement in the sidebar.
  2. Click + New to create a new Stock Movement.
  3. Select the Movement Type (Material Issue, Material Receipt, Material Transfer, or Manufacture).
  4. Set the Date.
  5. Add line items:
    • Select an Item (only items with Track Item enabled are valid).
    • Set the From and/or To locations based on the movement type.
    • Enter the Quantity and Rate.
    • Assign Batch and/or Serial Number if required by the item.
  6. Click Save then Submit to execute the stock movement.

6.2 Inventory Adjustment

Inventory Adjustments allow you to correct stock levels at a specific warehouse location. They are commonly used for physical stock counts, recording damaged or expired goods, theft/loss, or setting opening stock balances.

Schema Overview

FieldTypeDescription
Number SeriesLink → NumberSeriesAuto-generated identifier (default prefix: IADJ-)
ReasonSelectThe reason for the adjustment
DateDatetimeAdjustment date
LocationLink → LocationThe warehouse being adjusted (defaults to the default location in Inventory Settings)
RemarksTextFree-text notes about the adjustment
ItemsTable → InventoryAdjustmentItemLine items with item, quantity (positive or negative), rate, batch, and serial number
Total AmountCurrency (read-only)Net total of all signed item amounts

Adjustment Reasons

ReasonTypical Use Case
Opening StockSetting initial inventory levels when starting to use NkapBooks
Stock CountCorrecting discrepancies found during physical inventory count
DamagedWriting off goods damaged in storage or transit
ExpiredRemoving expired goods from inventory
TheftRecording inventory losses due to theft
LostRecording misplaced or unaccounted inventory
FoundAdding back previously lost items that have been located
OtherAny other adjustment not covered above

Inventory Adjustment Item Fields

FieldTypeDescription
ItemLink → ItemThe inventory item being adjusted
Transfer UnitLink → UOMThe unit used for entry
Qty. in Transfer UnitFloatQuantity entered in the transfer unit
Stock UnitLink → UOM (read-only)The item's base stock unit
QuantityFloatAdjustment quantity — positive for stock increase, negative for stock decrease
Conversion FactorFloatMultiplier to convert transfer unit to stock unit
BatchLink → BatchBatch assignment (if applicable)
Serial NumberTextSerial number(s) — one per line (if applicable)
RateCurrencyPer-unit valuation rate
AmountCurrency (read-only)Calculated: Quantity × Rate (signed — reflects increase or decrease)
Quantity Sign Matters: A positive quantity increases stock at the location (inward). A negative quantity decreases stock (outward). The system validates that quantity is never zero and that sufficient stock exists for decreases.

Accounting Entries (on Submit)

Inventory Adjustments are transactional — they create accounting ledger entries to reflect the value change in inventory:

For stock increases (positive quantity):

AccountDebitCredit
Stock In Hand (from Inventory Settings)Increase Amount
Stock Adjustment (from Inventory Settings)Increase Amount

For stock decreases (negative quantity):

AccountDebitCredit
Stock Adjustment (from Inventory Settings)Decrease Amount
Stock In Hand (from Inventory Settings)Decrease Amount
A single Inventory Adjustment can contain both increase and decrease items. The system handles each direction independently with separate debit/credit entries.

Key Features

  • Mixed Adjustments — A single adjustment document can include both stock increases and decreases for different items.
  • Automatic Amount Calculation — The total amount is calculated as the sum of all signed item amounts, showing the net value impact.
  • Location Validation — The system validates that the specified location exists before submission.
  • Batch and Serial Number Support — Full validation and tracking for batched and serialized items.
  • Serial Number Status Management — When adjusting serial-numbered items: increases set serial numbers to Active; decreases set them to Delivered. On cancellation, these changes are reverted.

Actions

ActionDescription
View Accounting LedgerOpens the General Ledger filtered to this adjustment's accounting entries
View Stock LedgerOpens the Stock Ledger filtered to this adjustment's stock entries

List View

ColumnDescription
NameAdjustment number (e.g., IADJ-0001)
StatusDocument status indicator
DateAdjustment date
ReasonThe selected adjustment reason
LocationAffected warehouse
AmountNet total amount

Workflow: Creating an Inventory Adjustment

  1. Navigate to Inventory → Inventory Adjustment in the sidebar.
  2. Click + New.
  3. Select the Reason for the adjustment.
  4. Set the Date and Location.
  5. Add line items:
    • Select an Item.
    • Enter a positive Quantity to add stock, or a negative Quantity to remove stock.
    • Set the Rate (valuation rate per unit).
    • Assign Batch and/or Serial Number if required.
  6. Optionally add Remarks describing the adjustment.
  7. Click Save then Submit.

6.3 Shipment

Shipments record outgoing goods deliveries to customers. They are typically linked to a Sales Invoice and reduce stock at the shipping location when submitted.

Schema Overview

FieldTypeDescription
Number SeriesLink → NumberSeriesAuto-generated identifier (default prefix: SHPM-)
PartyLink → PartyThe customer receiving the goods (filtered to Customer or Both roles)
DateDatetimeShipment date
ItemsTable → ShipmentItemLine items with item, location, quantity, rate, batch, serial number, and discount
Grand TotalCurrency (read-only)Total value of shipped goods
Back ReferenceLink → SalesInvoiceThe Sales Invoice that generated this shipment
Return AgainstLink → ShipmentReference to the original shipment when creating a return
NotesTextShipment terms or notes
AttachmentAttachmentAttach delivery documents

Shipment Item Fields

FieldTypeDescription
ItemLink → ItemThe item being shipped
From Loc.Link → LocationThe source warehouse from which goods are shipped (required)
Transfer UnitLink → UOMUnit for data entry
Qty. in Transfer UnitFloatQuantity in transfer unit
Stock UnitLink → UOM (read-only)Item's base stock unit
QuantityFloatQuantity in stock units
Conversion FactorFloatTransfer-to-stock unit multiplier
BatchLink → BatchBatch to ship from
Serial NumberTextSerial number(s) to ship (one per line)
RateCurrencyPer-unit rate
AmountCurrency (read-only)Quantity × Rate
Discount AmountCurrencyPer-item discount
Discount PercentFloatPer-item percentage discount
DescriptionTextItem description
HSN/SACIntTax classification code

Accounting Entries (on Submit)

When a Shipment is submitted, the following entries are created:

AccountDebitCredit
Cost of Goods Sold (from Inventory Settings)Posting Amount
Stock In Hand (from Inventory Settings)Posting Amount

For return shipments:

AccountDebitCredit
Stock In HandPosting Amount
Cost of Goods SoldPosting Amount
The Posting Amount for sales shipments is calculated based on the valuation rate from the stock queue (FIFO or Moving Average), not the selling price. This ensures that Cost of Goods Sold reflects the actual purchase cost of the goods shipped.

Key Features

  • Linked to Sales Invoice — Shipments are typically created from a Sales Invoice (via the "Make Shipment" action or auto-shipment on submit). The back reference links the shipment to its source invoice.
  • Auto-Shipment — When "Make Shipment On Submit" is enabled on a Sales Invoice, a shipment is automatically created and submitted using the default location.
  • Stock Deduction — On submit, stock is deducted from the specified location for each item.
  • Stock Availability Checks — The system validates that sufficient stock exists at the source location before submission, including checking future transaction impacts.
  • Return Shipments — Create return shipments to record goods returned by customers. Returns reverse the stock movements and accounting entries, and update serial number statuses.
  • Invoice Creation — From a submitted Shipment, you can create a linked Sales Invoice.
  • Back Reference Tracking — The Stock Not Transferred field on the linked Sales Invoice automatically updates as shipments are created and submitted.
  • POS Integration — Shipments created during POS sessions are automatically recorded to the active POS session.

Actions

ActionDescription
Make InvoiceCreates a new Sales Invoice from the shipment items
ReturnCreates a return shipment with reversed quantities
View Accounting LedgerOpens the General Ledger for this shipment
View Stock LedgerOpens the Stock Ledger for this shipment
DuplicateCreates a copy as a new Draft

List View

ColumnDescription
NameShipment number (e.g., SHPM-0001)
StatusTransaction status with color indicator
PartyCustomer name
DateShipment date
Grand TotalTotal value of goods shipped

6.4 Purchase Receipt

Purchase Receipts record incoming goods from suppliers. They are typically linked to a Purchase Invoice and increase stock at the receiving location when submitted.

Schema Overview

FieldTypeDescription
Number SeriesLink → NumberSeriesAuto-generated identifier (default prefix: PREC-)
PartyLink → PartyThe supplier sending the goods (filtered to Supplier or Both roles)
DateDatetimeReceipt date
ItemsTable → PurchaseReceiptItemLine items with item, location, quantity, rate, batch, serial number, and discount
Grand TotalCurrency (read-only)Total value of goods received
Back ReferenceLink → PurchaseInvoiceThe Purchase Invoice that generated this receipt
Return AgainstLink → PurchaseReceiptReference to the original receipt when creating a return
NotesTextReceipt terms or notes
AttachmentAttachmentAttach delivery receipts or packing slips

Purchase Receipt Item Fields

FieldTypeDescription
ItemLink → ItemThe item being received
To Loc.Link → LocationThe destination warehouse where goods are stored (required)
Transfer UnitLink → UOMUnit for data entry
Qty. in Transfer UnitFloatQuantity in transfer unit
Stock UnitLink → UOM (read-only)Item's base stock unit
QuantityFloatQuantity in stock units
Conversion FactorFloatTransfer-to-stock unit multiplier
BatchLink → BatchBatch assignment for received goods (new batches can be created inline)
Serial NumberTextSerial number(s) for received units (one per line; new serial numbers are auto-created)
RateCurrencyPer-unit purchase rate
AmountCurrency (read-only)Quantity × Rate
Discount AmountCurrencyPer-item discount
Discount PercentFloatPer-item percentage discount
DescriptionTextItem description
HSN/SACIntTax classification code

Accounting Entries (on Submit)

When a Purchase Receipt is submitted:

AccountDebitCredit
Stock In Hand (from Inventory Settings)Grand Total
Stock Received But Not Billed (from Inventory Settings)Grand Total

For return receipts:

AccountDebitCredit
Stock Received But Not BilledGrand Total
Stock In HandGrand Total

Key Features

  • Linked to Purchase Invoice — Receipts are typically created from a Purchase Invoice (via the "Make Purchase Receipt" action or auto-receipt on submit). The back reference links the receipt to its source invoice.
  • Auto-Receipt — When "Make Purchase Receipt On Submit" is enabled on a Purchase Invoice, a receipt is automatically created and submitted using the default location.
  • Stock Addition — On submit, stock is added to the specified location for each item.
  • Serial Number Auto-Creation — When receiving serialized items, new serial numbers are automatically created in the system with status Active. You don't need to pre-create serial number records.
  • Batch Assignment — Assign existing batches or create new batches inline when receiving goods.
  • Return Receipts — Create return receipts to record goods sent back to suppliers. Returns reverse the stock movements and accounting entries.
  • Back Reference Tracking — The Stock Not Received field on the linked Purchase Invoice automatically updates as receipts are created and submitted.
  • Purchase Rate Sync (Moving Average) — When the valuation method is set to Moving Average, the item's purchase rate is automatically updated to match the current weighted average valuation rate after each receipt.
  • Invoice Creation — From a submitted Purchase Receipt, you can create a linked Purchase Invoice.

Actions

ActionDescription
Make InvoiceCreates a new Purchase Invoice from the receipt items
ReturnCreates a return receipt with reversed quantities
View Accounting LedgerOpens the General Ledger for this receipt
View Stock LedgerOpens the Stock Ledger for this receipt
DuplicateCreates a copy as a new Draft

List View

ColumnDescription
NameReceipt number (e.g., PREC-0001)
StatusTransaction status with color indicator
PartySupplier name
DateReceipt date
Grand TotalTotal value of goods received

Workflow: Receiving Goods

From a Purchase Invoice:

  1. Open a submitted Purchase Invoice with Stock Not Received > 0.
  2. Click Make Purchase Receipt from the actions menu.
  3. The receipt form opens pre-filled with the supplier, items, quantities, and rates.
  4. Set the To Location for each item (or set a default and it applies to all).
  5. Assign Batch and/or Serial Number for applicable items.
  6. Click Save then Submit.

Standalone Receipt:

  1. Navigate to Inventory → Purchase Receipt in the sidebar.
  2. Click + New.
  3. Select the Supplier and set the Date.
  4. Optionally select a Back Reference (Purchase Invoice) — this will auto-fill items.
  5. Add items, set locations, quantities, and rates.
  6. Click Save then Submit.

6.5 Batch Tracking

Batch tracking allows you to group units of the same item into batches identified by a unique batch number. This is essential for industries dealing with perishable goods, pharmaceuticals, or any product requiring traceability.

Schema Overview

FieldTypeDescription
BatchDataUnique batch identifier (manually entered; serves as the primary key)
ItemLink → ItemThe item this batch belongs to
Expiry DateDateWhen the batch expires (optional)
Manufacture DateDateWhen the batch was produced (optional)

Enabling Batch Tracking

Batch tracking is a two-step enablement process:

  1. System-level: Go to Inventory Settings and check Enable Batches. This makes batch-related fields visible across the application.
  2. Item-level: On each Item record, check Has Batch to require batch assignment for that specific item.
Irreversible Setting: Once Has Batch is enabled on an item and the item is saved, the setting cannot be turned off. Similarly, the Enable Batches system setting becomes read-only once enabled. Plan your batch tracking strategy before enabling.

Batch Validation Rules

The system enforces the following batch validations across all inventory transactions:

RuleDescription
Required for batched itemsIf an item has Has Batch enabled, a batch must be assigned in every inventory transaction (Stock Movement, Shipment, Purchase Receipt, Inventory Adjustment).
Not allowed for non-batched itemsIf an item does not have Has Batch enabled, setting a batch will raise a validation error.
Stock availability per batchWhen issuing or transferring stock, the system checks that sufficient quantity exists in the specified batch at the source location.

List View

ColumnDescription
NameBatch number
Expiry DateBatch expiry date
Manufacture DateBatch manufacture date

Workflow: Creating and Using Batches

  1. Create a Batch: Navigate to Batch in the sidebar → + New → Enter the batch name, select the item, and optionally set expiry and manufacture dates → Save.
  2. Receive with Batch: When creating a Purchase Receipt or Stock Movement (Material Receipt), select the batch in the item row. New batches can also be created inline.
  3. Ship with Batch: When creating a Shipment or Stock Movement (Material Issue/Transfer), select the batch to ship from. The system validates stock availability within that specific batch.

6.6 Serial Number Tracking

Serial Number tracking assigns a unique identifier to each individual unit of an item, enabling granular traceability throughout the supply chain. Each serial number has a lifecycle status that is automatically managed by the system.

Schema Overview

FieldTypeDescription
Serial NumberDataUnique identifier for the individual unit (manually entered; serves as the primary key)
ItemLink → ItemThe item this serial number belongs to (required)
DescriptionTextOptional description or notes for this serial unit
StatusSelect (read-only)Current lifecycle status: Inactive, Active, or Delivered

Enabling Serial Number Tracking

  1. System-level: Go to Inventory Settings and check Enable Serial Number.
  2. Item-level: On each Item record, ensure Track Item is checked, then check Has Serial Number.
Serial Number tracking requires Track Item to be enabled first. The Has Serial Number checkbox is only visible when the item has inventory tracking and serial numbers are enabled system-wide.

Serial Number Status Lifecycle

Serial numbers transition between statuses automatically based on inventory transactions:

┌──────────┐    Purchase Receipt     ┌────────┐    Shipment      ┌───────────┐
│ Inactive │────────────────────────▶│ Active │──────────────────▶│ Delivered │
│          │    Material Receipt     │        │   Material Issue  │           │
└──────────┘                         └────────┘                   └───────────┘
     ▲                                    ▲                            │
     │          Cancel Receipt            │      Cancel Shipment       │
     └────────────────────────────────────┘◀───────────────────────────┘

Status transitions by transaction type:

TransactionActionStatus Change
Purchase ReceiptSubmitInactiveActive
Purchase ReceiptCancelActiveInactive
Purchase Receipt ReturnSubmitActiveDelivered
Purchase Receipt ReturnCancelDeliveredActive
ShipmentSubmitActiveDelivered
ShipmentCancelDeliveredActive
Shipment ReturnSubmitDeliveredActive
Shipment ReturnCancelActiveDelivered
Stock Movement (Material Receipt)SubmitInactiveActive
Stock Movement (Material Receipt)CancelActiveInactive
Stock Movement (Material Issue)SubmitActiveDelivered
Stock Movement (Material Issue)CancelDeliveredActive
Stock Movement (Material Transfer)SubmitRemains Active
Stock Movement (Material Transfer)CancelRemains Active
Stock Movement (Manufacture - raw material)SubmitActiveDelivered
Stock Movement (Manufacture - finished good)SubmitInactiveActive
Inventory Adjustment (Increase)SubmitInactiveActive
Inventory Adjustment (Increase)CancelActiveInactive
Inventory Adjustment (Decrease)SubmitActiveDelivered
Inventory Adjustment (Decrease)CancelDeliveredActive

Serial Number Validation Rules

RuleDescription
Count must match quantityThe number of serial numbers entered must exactly match the item quantity in the transaction row.
Must exist for outwardFor outward transactions (issue, shipment), the serial number must already exist in the system.
Auto-created for inwardFor inward transactions (receipt, material receipt), new serial numbers are automatically created if they don't exist.
Must belong to itemEach serial number must belong to the same item specified in the transaction row.
Status must be validSerial numbers must be in the correct status for the transaction type (see table above).

Serial Number Entry Format

Serial numbers are entered as newline-separated text in the Serial Number field:

SN-001
SN-002
SN-003

Each line represents one serial number. For a quantity of 3, you must enter exactly 3 serial numbers.

List View

ColumnDescription
NameSerial number
StatusCurrent status with color indicator
ItemItem this serial number belongs to
DescriptionDescription text
PartyAssociated party (if applicable)

6.7 Locations (Warehouses)

Locations represent physical storage places — warehouses, stores, bins, or any area where you keep inventory. NkapBooks tracks stock quantities independently at each location.

Schema Overview

FieldTypeDescription
Location NameDataUnique name for the location (serves as the primary key) (required)
AddressLink → AddressPhysical address of the location (optional)

How Locations Work

  • Per-Location Stock Tracking — Every Stock Ledger Entry records the location. Stock balances are calculated per item per location.
  • Default Location — A default location can be set in Inventory Settings. This default is used for auto-shipments, auto-receipts, and as the pre-filled location in Inventory Adjustments.
  • Used Across Transactions — Locations appear in:
    • Shipment Items — as From Location (where goods ship from)
    • Purchase Receipt Items — as To Location (where goods are received)
    • Stock Movement Items — as From and/or To locations
    • Inventory Adjustment — as the adjustment location
  • Filtering in Transfers — When selecting a back reference (invoice) for a stock transfer, only invoices with unreceived/unshipped items are shown.

Workflow: Setting Up Locations

  1. Navigate to Inventory → Location in the sidebar.
  2. Click + New.
  3. Enter a descriptive Location Name (e.g., "Main Warehouse", "Retail Store", "Cold Storage").
  4. Optionally link an Address for the physical location.
  5. Click Save.
  6. Set your primary location as the Default Location in Inventory Settings.

6.8 Stock Valuation

NkapBooks provides two stock valuation methods to calculate the value of your inventory: FIFO (First In, First Out) and Moving Average. The valuation method is configured in Inventory Settings and affects how the cost of goods sold and inventory values are calculated.

Stock Ledger Entry

Every stock movement creates one or more Stock Ledger Entries — the fundamental building blocks of inventory tracking:

FieldTypeDescription
Entry No.Auto-incrementUnique entry identifier
DateDatetimeWhen the stock movement occurred
ItemLink → ItemThe item affected
LocationLink → LocationWhere the stock change occurred
BatchLink → BatchBatch (if applicable)
Serial NumberLink → SerialNumberSerial number (if applicable)
RateCurrencyPer-unit valuation rate
QuantityFloatQuantity change — positive for inward, negative for outward
Ref. TypeDataThe document type that created this entry (e.g., Shipment, PurchaseReceipt, StockMovement, InventoryAdjustment)
Ref. NameDynamicLinkThe specific document that created this entry
Stock Ledger Entries are system-generated and read-only. They cannot be created or modified manually. They are automatically created on submit and deleted on cancel of inventory transactions.

FIFO (First In, First Out)

FIFO is the default valuation method. It uses a stock queue to track the order in which goods were received:

How it works:

  1. Inward: When stock is received, a new entry is added to the end of the queue with the purchase rate and quantity.
  2. Outward: When stock is issued, the oldest stock in the queue is consumed first. The valuation rate for the outward transaction is based on the rate at which the oldest stock was purchased.
  3. Queue Consolidation: If consecutive inward entries have the same rate, they are merged into a single queue entry for efficiency.

Example:

ActionRateQtyQueue StateStock Value
Purchase 10 units @ $5$5+10{rate: 5, qty: 10}$50
Purchase 5 units @ $7$7+5{rate: 5, qty: 10}, {rate: 7, qty: 5}$85
Sell 8 units-8{rate: 5, qty: 2}, {rate: 7, qty: 5}$45
COGS for the sale8 × $5 = $40 (oldest consumed first)

Valuation Rate: The FIFO valuation rate at any point is calculated as: Total Stock Value ÷ Total Stock Quantity.

Moving Average

Moving Average recalculates the average cost after every inward transaction:

How it works:

  1. Inward: The moving average rate is recalculated as: New Average = (Current Average × Current Qty + Inward Rate × Inward Qty) ÷ (Current Qty + Inward Qty)
  2. Outward: The current moving average rate is used as the valuation rate for outward transactions.

Example:

ActionRateQtyMoving AvgStock Value
Purchase 10 units @ $5$5+10$5.00$50.00
Purchase 5 units @ $7$7+5$5.67$85.00
Sell 8 units$5.67-8$5.67$39.69

Purchase Rate Sync: When using Moving Average, each item's Purchase Rate on the Item record is automatically synchronized with the current weighted average valuation rate after each inward stock transfer. This ensures purchase invoices default to the current average cost.

Stock Balance Calculation

Stock balance for any item at any location is calculated by summing all Stock Ledger Entries:

  • Balance Quantity = Sum of all quantity values (positive for in, negative for out)
  • Balance Value = Calculated based on the selected valuation method (FIFO queue value or Moving Average value)
  • Valuation Rate = Balance Value ÷ Balance Quantity

List View (Stock Ledger Entry)

ColumnDescription
DateEntry date
ItemItem name
LocationWarehouse location
RatePer-unit valuation rate
QuantityQuantity change (+ or −)
Ref. NameSource document link

6.9 Inventory Settings

Inventory Settings is a singleton configuration document that controls global inventory behavior, default accounts, and optional features.

Configuration Fields

Default Section

SettingTypeDescription
Default LocationLink → LocationThe default warehouse used for auto-shipments, auto-receipts, and new transactions.
Valuation MethodSelectFIFO (First In First Out) or Moving Average. Determines how stock value and cost of goods sold are calculated. Default: FIFO.

Accounts Section

SettingTypeDescription
Stock In Hand Acc.Link → AccountThe balance sheet account that holds the value of current inventory (filtered to accounts with type Stock).
Stock Received But Not Billed Acc.Link → AccountInterim liability account used when goods are received (via Purchase Receipt) but the purchase invoice hasn't been processed yet.
Cost Of Goods Sold Acc.Link → AccountThe income statement account that records the cost of goods shipped to customers.
Stock Adjustment Acc.Link → AccountThe account used for Inventory Adjustment entries (debited for decreases, credited for increases). Filtered to accounts with type Stock Adjustment.

Features Section

SettingTypeDefaultDescription
Enable BarcodesCheck✅ EnabledShow the barcode field on Item records.
Enable BatchesCheck☐ DisabledEnable batch tracking across the system. Makes batch fields visible on items and inventory transactions.
Enable Serial NumberCheck☐ DisabledEnable serial number tracking. Makes serial number fields visible on items (with Track Item) and inventory transactions.
Enable UOM ConversionCheck☐ DisabledEnable unit of measurement conversions. Shows UOM conversion tables on items and transfer unit fields on transactions.
Feature Toggles Are One-Way: Once a feature is enabled (Barcodes, Batches, Serial Numbers, UOM Conversions), its toggle becomes read-only and cannot be disabled. This prevents data integrity issues with existing transactions that use these features.

Account Flow Diagram

                    Purchase Receipt                     Shipment
                    ┌──────────┐                    ┌──────────────┐
                    │          │                    │              │
                    ▼          │                    ▼              │
        ┌───────────────────┐  │      ┌───────────────────────┐   │
        │  Stock Received   │  │      │  Cost of Goods Sold   │   │
        │  But Not Billed   │──┘      │       (Expense)       │───┘
        │   (Liability)     │         │                       │
        └───────────────────┘         └───────────────────────┘
                    │                              ▲
                    │         ┌──────────┐         │
                    └────────▶│ Stock In │─────────┘
                              │  Hand    │
                              │ (Asset)  │
                              └────┬─────┘
                                   │
                    ┌──────────────┘
                    ▼
        ┌───────────────────────┐
        │   Stock Adjustment    │
        │   (Expense/Income)    │
        └───────────────────────┘
                    ▲
                    │
            Inventory Adjustment

Workflow: Configuring Inventory Settings

  1. Navigate to Setup → Inventory Settings (or search for "Inventory Settings").
  2. Set Default Location — Select or create your primary warehouse location.
  3. Choose Valuation Method — Select FIFO or Moving Average based on your business needs.
  4. Configure Accounts:
    • Stock In Hand — Typically a current asset account under "Current Assets".
    • Stock Received But Not Billed — An interim liability account.
    • Cost of Goods Sold — An expense account under "Direct Expenses" or similar.
    • Stock Adjustment — A dedicated adjustment account.
  5. Enable Features as needed:
    • Check Enable Batches if you need to track goods by production batch.
    • Check Enable Serial Number if you need to track individual units.
    • Check Enable UOM Conversion if you deal with multiple units of measurement.
  6. Click Save.

Inventory Module Integration Map

The Inventory Module integrates with both the Sales and Purchase cycles:

                         ┌──────────────────┐
                         │  Purchase Invoice │
                         │     (PINV-)       │
                         └────────┬──────────┘
                                  │ auto/manual
                                  ▼
┌──────────────┐          ┌──────────────────┐          ┌──────────────┐
│  Sales       │          │  Purchase Receipt │         │  Stock       │
│  Invoice     │          │     (PREC-)       │         │  Movement    │
│  (SINV-)     │          └────────┬──────────┘         │  (SMOV-)     │
└──────┬───────┘                   │                    └──────┬───────┘
       │ auto/manual               │                           │
       ▼                           ▼                           ▼
┌──────────────┐          ┌──────────────────┐          ┌──────────────┐
│  Shipment    │          │  Stock Ledger    │◀─────────│  Inventory   │
│  (SHPM-)     │─────────▶│  Entries         │◀─────────│  Adjustment  │
└──────────────┘          └────────┬──────────┘          │  (IADJ-)     │
                                   │                    └──────────────┘
                                   ▼
                          ┌──────────────────┐
                          │  Stock Balance   │
                          │  & Valuation     │
                          └──────────────────┘
FromToRelationship
Purchase InvoicePurchase ReceiptBack referenceAuto or manual goods-in; updates Stock Not Received
Sales InvoiceShipmentBack referenceAuto or manual goods-out; updates Stock Not Transferred
All stock transfersStock Ledger EntryCreates entriesEvery inventory transaction creates SLEs
Stock Ledger EntriesStock BalanceAggregationBalances computed by summing SLEs per item/location
Item (Track Item)All transactionsItem linkOnly tracked items participate in inventory
Batch/Serial NumberTransactionsTraceabilityFull audit trail for batched and serialized goods

Best Practices

Stock Movement

  • Use Material Transfer to move goods between warehouses without affecting accounting.
  • Use Material Issue for internal consumption (samples, damaged write-offs).
  • Use Manufacture to record production of finished goods from raw materials.
  • Always verify stock availability at the source location before submitting.

Inventory Adjustment

  • Perform regular physical stock counts and use Inventory Adjustments with reason "Stock Count" to reconcile differences.
  • Use Opening Stock adjustments when migrating from another system or starting fresh.
  • Always add meaningful Remarks to explain why the adjustment was made for audit purposes.

Shipments & Purchase Receipts

  • Enable auto-shipment/auto-receipt on invoices for streamlined workflows where goods and billing happen simultaneously.
  • For businesses that receive goods before billing (or vice versa), create stock transfers separately and link them to invoices via back references.
  • Always verify the destination/source location before submitting.

Batch & Serial Number Tracking

  • Plan before enabling — Once batch or serial number tracking is enabled on an item, it cannot be disabled.
  • Consistent naming — Establish a naming convention for batches and serial numbers (e.g., BATCH-YYYY-MM-NNN or SN-ITEM-NNN).
  • Monitor expiry dates — Use Stock Balance reports filtered by batch to identify expiring inventory.

Valuation Method

  • FIFO is recommended for businesses dealing with perishable goods or where purchase costs fluctuate significantly.
  • Moving Average is simpler and works well for businesses with relatively stable purchase costs or many small transactions.
  • Choose your valuation method early — changing it after transactions are recorded may cause inconsistencies.

Inventory Settings

  • Configure all four accounting accounts before creating any inventory transactions.
  • Set a Default Location to streamline transaction entry.
  • Enable only the features you need — each enabled feature adds complexity to every transaction.