Inventory System — Complete User Guide

Comprehensive guide covering inventory item setup, valuation methods (FIFO, LIFO, Moving Average), inventory systems (Perpetual, Periodic), opening balances, NRV/LCNRV, all transaction types that impact inventory, inventory reports, and accounting regulation validation.


Table of Contents

  1. System Overview
  2. Inventory Item Setup — Field-by-Field Guide
  3. Valuation Methods & Systems Explained
  4. Opening Balances for Inventory
  5. Transaction Types That Impact Inventory
  6. How Inventory Posts to the General Ledger
  7. LCNRV — Lower of Cost or Net Realizable Value
  8. Negative Inventory & Backlog Handling
  9. Inventory Kits & Non-Inventory Items
  10. Inventory Transfers Between Locations
  11. Inventory Write-Offs
  12. Goods Receipts & Delivery Notes
  13. Sample Data — Full Walkthrough
  14. Inventory Reports — Complete Guide
  15. Field Fallback & Edge Cases

§. Accounting Regulation Validation


1. System Overview

The inventory system tracks stock quantities and values across the entire business. It supports:

  • 3 valuation methods: FIFO, LIFO, and Moving Average — settable per item
  • 2 inventory systems: Perpetual (COGS at each sale) and Periodic (COGS at period-end) — settable per item
  • Layer-based costing: Each purchase creates a dated cost layer; sales consume from layers
  • LCNRV: Lower of Cost or Net Realizable Value write-down at period-end
  • Backlog handling: Manages negative inventory with estimated costs
  • Production/WIP: Manufacturing tracking with Bill of Materials
  • Multi-location: Inventory transfers between warehouses
  • 18 transaction types: Purchases, sales, returns, transfers, write-offs, production, LC imports etc

Key Concepts

Concept Meaning
Cost Layer A dated batch of inventory with specific qty and unit cost (e.g., 100 units @ $10 purchased Jan 5)
QtyOnHand Physical quantity from all transaction documents
QtyOwned Accounting quantity from the costing engine (may differ from QtyOnHand)
COGS Cost of Goods Sold — the cost of inventory when sold, expensed to P&L
Average Cost Total cost of all layers divided by total quantity
LCNRV Write-down when cost exceeds net realizable value
Backlog Queue of sales that exceeded available stock (negative inventory)

2. Inventory Item Setup — Field-by-Field Guide

Navigation: Inventory Items > New Inventory Item

General Fields

Field Required? What To Enter If Left Blank
Item Code ❌ Optional Unique alphanumeric identifier Item displayed by name only
Item Name ✅ Yes Product name Cannot create item
Unit Name ❌ Optional Unit of measure (pcs, kg, meter, etc.) No unit shown on documents
Division ❌ Optional Operational division for this item No division tracking on this item
Control Account ❌ Optional Custom Balance Sheet account for inventory value Defaults to InventoryOnHand account
Active ❌ Optional Uncheck to deactivate the item Item is active (default)
Hide Name on Printed Docs ❌ Optional Check to show only Item Code on invoices Full name + code shown
Track Quantity to Receive ❌ Optional Check if this item is tracked against Purchase Orders Not tracked against POs
Track Quantity to Deliver ❌ Optional Check if this item is tracked against Sales Orders Not tracked against SOs
Production Stage ❌ Optional Manufacturing stage number (1, 2, 3...) Defaults to stage 1
Reorder Point ❌ Optional Check to enable reorder suggestions Reorder suggestions disabled
Qty Desired ❌ Only if Reorder checked Target stock level when reordering No reorder suggestion shown
Custom Fields ❌ Optional Key-value extensions No custom fields

Autofill Settings — For Sales Invoices

Field Required? What To Enter If Left Blank
Default Line Description ❌ Check to enable Description autofilled on sales/purchase lines No default description
Line Description ❌ Only if enabled Default line text Empty line description
Default Sale Price ❌ Check to enable Unit price autofilled on sales invoices No default sale price
Sale Unit Price ❌ Only if enabled Price per unit
Default Purchase Price ❌ Check to enable Unit price autofilled on purchase invoices No default purchase price
Purchase Unit Price ❌ Only if enabled Price per unit
Default Tax Code ❌ Check to enable Tax code autofilled on sales/purchase lines No default tax code
Tax Code ❌ Only if enabled Select a configured TaxCode
Default Sales Division ❌ Check to enable Division autofilled on sales lines Uses item's Division field
Sales Division ❌ Only if enabled Select a Division Falls to item's Division → null

Custom GL Account Overrides

Field Required? What To Enter If Left Blank
Custom Income Account ❌ Check to override Different revenue account when sold Defaults to InventorySales (P&L)
Income Account ❌ Only if checked Select a P&L account
Custom Expense Account ❌ Check to override Different COGS account when sold Defaults to InventoryPurchases (P&L)
Expense Account ❌ Only if checked Select a P&L account

Valuation & System Fields

Field Required? Options If Left Blank
Valuation Method ✅ Yes MovingAverage / FIFO / LIFO Defaults to MovingAverage
Inventory System ✅ Yes Perpetual / Periodic Defaults to Perpetual

These two fields determine how inventory costs are calculated when items are sold (see Section 3).

Opening Balance Fields

Field Required? What To Enter If Left Blank
Opening Inventory Qty Starting quantity on hand No opening quantity
Opening Inventory Cost Total cost of opening quantity Warning shown if qty > 0 but cost = 0
Opening Inventory Date Date the opening balance takes effect Uses earliest transaction date in the system

Warning: If Opening Qty > 0 and Opening Cost = 0, the system shows a yellow warning. Sales will record COGS at zero cost until corrected.

LCNRV Fields

Field Required? What To Enter If Left Blank
Net Realizable Value Per Unit Expected selling price minus costs to sell LCNRV calculation skipped
Apply LCNRV Check to enable NRV write-down LCNRV skipped even if NRV is set

Note: Both NRV Per Unit AND Apply LCNRV must be set for the write-down to occur.

Other Settings

Field Required? What To Enter If Left Blank
Prevent Negative Inventory Check to prevent selling more than available stock Backlog allowed (negative inventory can occur)

3. Valuation Methods & Systems Explained

The Three Valuation Methods

FIFO (First In, First Out)

The oldest purchase layers are consumed first when items are sold.

Purchase 100 units @ $10     → Layer 1: 100 @ $10
Purchase 100 units @ $12     → Layer 2: 100 @ $12
Sale 120 units               → 100 from Layer 1 @ $10 + 20 from Layer 2 @ $12
                             → COGS = 100×$10 + 20×$12 = $1,240
Remaining: Layer 2: 80 @ $12 = $960

Best for: Perishable goods, items with falling prices, IFRS reporting.

LIFO (Last In, First Out)

The newest purchase layers are consumed first when items are sold.

Purchase 100 units @ $10     → Layer 1: 100 @ $10
Purchase 100 units @ $12     → Layer 2: 100 @ $12
Sale 120 units               → 100 from Layer 2 @ $12 + 20 from Layer 1 @ $10
                             → COGS = 100×$12 + 20×$10 = $1,400
Remaining: Layer 1: 80 @ $10 = $800

Best for: US GAAP reporting, items with rising prices. Not permitted under IFRS.

Moving Average

The average cost is recalculated after each purchase. All units are valued at the current average.

Purchase 100 units @ $10     → Avg = $10.00
Purchase 100 units @ $12     → Avg = ($1,000 + $1,200) / 200 = $11.00
Sale 120 units               → COGS = 120 × $11.00 = $1,320
Remaining: 80 units @ $11.00 = $880
Purchase 50 units @ $14      → Avg = ($880 + $700) / (80 + 50) = $12.15

Best for: Items with stable costs, simple accounting, IFRS reporting.

The Two Inventory Systems

Perpetual System

COGS is calculated at the time of each sale. The cost layer is immediately reduced.

Sale 100 units @ FIFO  →  Layer consumed immediately → COGS = $1,000
                         QtyOnHand reduced immediately
                         Inventory value updated immediately

Best for: Real-time inventory tracking, most businesses.

Periodic System

COGS is calculated at period-end (monthly/quarterly). Sales quantities are accumulated and COGS is computed once.

Month 1:  Sold 300 units total
Month End: COGS = GetPeriodicCogs(300, LIFO)
                 = 50@$34 + 100@$32 + 100@$30 + 50@$28 = $9,500

Best for: Businesses that do physical counts at period-end, simple accounting.

Method + System Combinations

Method System COGS Timing When To Use
FIFO Perpetual At each sale Standard IFRS, most businesses
FIFO Periodic At period-end Physical inventory counts
LIFO Perpetual At each sale US GAAP, real-time tracking
LIFO Periodic At period-end US GAAP, physical counts
Moving Average Perpetual At each sale Simple accounting, real-time
Moving Average Periodic At period-end Simple accounting, physical counts

4. Opening Balances for Inventory

Do NOT use the Opening Balance Entry form for inventory items. Inventory opening balances must be set directly on the Inventory Item form.

How To Set Opening Balances

Navigation: Inventory Items > New Inventory Item > Opening Inventory section

Field Example
Opening Inventory Qty 1,000
Opening Inventory Cost 15,00,000
Opening Inventory Date 7/1/2026

What Happens in the General Ledger

When you save an item with opening qty and cost, the system creates 2 GL entries:

Dr  InventoryOnHand (or custom ControlAccount)    15,00,000
Cr  RetainedEarnings                               15,00,000

The cost is divided by qty to determine the opening unit cost:

Unit Cost = 15,00,000 / 1,000 = 1,500.00

This opening layer is available for FIFO/LIFO/MA consumption when items are sold.

What Happens If Opening Cost = 0

The system shows a yellow warning on the form:

Opening inventory quantity is set but cost is zero.
Sales will record zero COGS until the cost is corrected.

5. Transaction Types That Impact Inventory

# Transaction Type Qty Effect Cost Effect Inventory Value COGS
1 PurchaseInvoice +Qty +Cost Increases None
2 GoodsReceipt +Qty +Cost Increases None
3 SalesInvoice -Qty -Cost Decreases Recorded
4 DeliveryNote -Qty -Cost Decreases Recorded
5 CreditNote (Sales Return) +Qty +Cost (reversal) Increases Reversed
6 DebitNote (Purchase Return) -Qty -Cost Decreases Recorded
7 InventoryWriteOff -Qty -Cost Decreases Recorded
8 InventoryTransfer No net change No net change Same (location change) None
9 ProductionOrder — BOM -Qty (raw) -Cost WIP increases, Inv decreases None
10 ProductionOrder — Output +Qty (finished) +Cost Inv increases, WIP decreases None
11 LetterOfCredit (Import) +Qty +Cost (capitalized) Increases None
12 JournalEntry ±Qty ±Cost Changes per entry If specified
13 OpeningBalance (Item form) +Qty +Cost Increases None
14 Payment (with Item=InventoryItem) ±Qty ±Cost Increases or decreases Recorded if outflow
15 Receipt (with Item=InventoryItem) ±Qty ±Cost Increases or decreases Recorded if outflow
16 ExpenseClaim (with InventoryItem) +Qty +Cost Increases None (purchase-side)
17 SalesQuote No impact No impact None (non-posting) None
18 PurchaseQuote No impact No impact None (non-posting) None

Transaction Types That Do NOT Impact Inventory

Transaction Why
Sales Quote / Order Non-posting — no GL entries
Purchase Quote / Order Non-posting — no GL entries
Payment / Receipt (no Item) Cash-only when no inventory item referenced
Money Transfer Balance sheet only
Fixed Asset forms Capital assets, not inventory

6. How Inventory Posts to the General Ledger

GL Account Impact by Event

Event Debit Credit Amount Basis
Purchase / Receipt InventoryOnHand (BS Asset) AccountsPayable / Bank Purchase cost
Sale (FIFO/LIFO Perpetual) COGS Account (P&L Expense) InventoryOnHand (BS Asset) Layer cost at method
Sale (Moving Average Perpetual) COGS Account (P&L Expense) InventoryOnHand (BS Asset) Average cost
Sale (Periodic any method) Deferred; COGS at period-end InventoryOnHand at period-end Period-end computation
Credit Note (Return) InventoryOnHand (BS Asset) COGS Account (P&L) Reversal of last sale cost
Write-Off COGS / Expense (P&L) InventoryOnHand (BS Asset) Current layer cost
Transfer InventoryOnHand (destination) InventoryOnHand (source) Quantity only (0 amount)
Production — BOM Consume ProductionInProgress (BS) InventoryOnHand (BS) Raw material cost
Production — Output InventoryOnHand (BS) ProductionInProgress (BS) Manufacturing cost
Opening Balance InventoryOnHand (BS) RetainedEarnings (Equity) Entered cost
Payment (with Item) InventoryOnHand (BS) Cash/Bank (BS) or AP Amount on line — creates cost layer
Receipt (with Item, outbound) COGS Account (P&L) InventoryOnHand (BS) Layer cost at item's FIFO/LIFO/MA
Receipt (with Item, inbound) InventoryOnHand (BS) Cash/Bank or AR Amount on line — creates cost layer
ExpenseClaim (with InvItem) InventoryOnHand (BS) Employee Clearing / ExpenseClaims Payable Amount on line — creates cost layer
LCNRV Write-Down InventoryImpairment (P&L) InventoryOnHand (BS) Cost - NRV
Backlog Fulfill Adj COGS Account (P&L) InventoryOnHand (BS) Actual vs estimated cost diff

DR = CR for Every Event

Each inventory movement creates balanced pairs of GL entries. For example:

Sale of 100 units @ FIFO $10:
  Dr  COGS Account               $1,000
  Cr  InventoryOnHand             $1,000
Purchase of 100 units @ $12:
  Dr  InventoryOnHand             $1,200
  Cr  AccountsPayable             $1,200
Transfer of 50 units (no financial impact):
  Dr  InventoryOnHand (Dest)      0 (50 units)
  Cr  InventoryOnHand (Source)    0 (50 units)

How Opening Balances Post

The GL constructor processes inventory opening balances:

For each item with OpeningQty > 0 AND OpeningCost > 0:
  Dr  InventoryOnHand              OpeningCost
  Cr  RetainedEarnings             OpeningCost

7. LCNRV — Lower of Cost or Net Realizable Value

What It Does

LCNRV is an accounting requirement (IAS 2, Sections 28-33) that inventory must be valued at the lower of cost and net realizable value. If the market value drops below cost, a write-down is recorded.

How To Enable

On the Inventory Item form:

Field Value
Net Realizable Value Per Unit Expected selling price minus selling costs (e.g., 2,000)
Apply LCNRV ✅ Checked

How It's Calculated

At period-end, the system checks each item:

If NRV Per Unit is set AND Apply LCNRV is checked:
  inventoryValue = Current total layer cost (e.g., 25,00,000)
  nrvValue = NRV Per Unit × Current Qty (e.g., 2,000 × 1,000 = 20,00,000)
  writeDown = Max(0, inventoryValue - nrvValue) = 5,00,000

GL Entry

Dr  InventoryImpairment (P&L)        5,00,000
  Cr  InventoryOnHand (BS Asset)               5,00,000

What Happens If NRV Rises Later

The system does not automatically reverse write-downs. (IAS 2 allows reversals, but the system currently does not auto-reverse — reversal requires a manual Journal Entry.)


8. Negative Inventory & Backlog Handling

What Is Negative Inventory?

Negative inventory occurs when items are sold before they are received (e.g., a sale qty exceeds the available stock). This is common in some business models where goods are committed before physical receipt.

Two Modes

Check Prevent Negative Inventory on the item form. When stock is insufficient: - The sale is blocked — no COGS entry is created - The transaction is skipped by the costing engine - The sale must be processed after stock arrives

Mode 2: Allow Negative Inventory (Backlog)

Leave Prevent Negative Inventory unchecked (default). When stock is insufficient: - A backlog entry is created with an estimated unit cost (last known cost or default purchase price) - The sale proceeds with estimated COGS - When new stock arrives, the backlog is fulfilled - A COGS adjustment is posted: difference between estimated cost and actual cost

Backlog Example

Starting: 0 units
Sale of 100 units → Backlog created with estimate @ $10 = $1,000 COGS
Purchase 100 units @ $12 → Backlog fulfilled (100 units)
  → COGS adjustment: actual $12 - estimated $10 = $2 × 100 = $200 additional COGS
  → Total COGS = $1,000 + $200 = $1,200 (correct)

Backlog Costs Are Not Recoverable on Return

If goods are returned after a backlog sale, the sunk backlog costs remain in P&L — they are genuine costs that cannot be recovered.


9. Inventory Kits & Non-Inventory Items

Inventory Kits

Inventory Kits are sales convenience bundles — they are NOT physical inventory. A kit groups multiple inventory items into a package for easy sales invoicing.

Aspect Behavior
QtyOnHand Not tracked — kits have no physical stock
Cost tracking No costing — kits are not valued
Valuation Not applicable
Sales impact When sold, individual components are consumed from inventory
Purchase impact Not applicable (kits cannot be purchased)

Example Kit — "Starter Package":

Kit contains:
  - Widget-X (2 units)
  - Gadget-Y (1 unit)
  - Component-Z (5 units)

When sold → 2 Widget-X, 1 Gadget-Y, 5 Component-Z are consumed from inventory

Non-Inventory Items

Non-inventory items are services or supplies that are not tracked for quantity or value on hand.

Aspect Behavior
QtyOnHand Not tracked
Cost tracking Not valued
Valuation Not applicable
Sales impact Revenue recorded, no COGS
Purchase impact Expense recorded, no inventory

10. Inventory Transfers Between Locations

What It Does

Inventory Transfers move stock from one warehouse/location to another. There is no financial impact — inventory value stays the same; only the location changes.

How To Create

Navigation: Inventory Transfers > New Inventory Transfer

Field Required? What To Enter
Date Transfer date
Reference Auto-generated or manual
From Location Source warehouse
To Location Destination warehouse
Lines Items and quantities to transfer

GL Entries

For each item transferred:
  Dr  InventoryOnHand (Destination Location)    0 (Qty = +X)
  Cr  InventoryOnHand (Source Location)         0 (Qty = -X)

Only quantity changes — no monetary value is transferred. The cost layer remains with the item.


11. Inventory Write-Offs

What It Does

Write-offs remove inventory from the books due to damage, loss, obsolescence, or theft.

How To Create

Navigation: Inventory Write-Offs > New Inventory Write-Off

Field Required? What To Enter
Date Write-off date
Reference Auto-generated or manual
Location Where the inventory was located
Allocation Account Which GL account to debit (COGS, expense, or fixed asset)
Items Items and quantities to write off
Tax Code If applicable

GL Entries

Dr  COGS / Expense / Fixed Asset (allocation account)    Layer cost
  Cr  InventoryOnHand                                       Layer cost

The cost is determined by the item's valuation method (FIFO/LIFO/MA) using the current layer.


12. Goods Receipts & Delivery Notes

Goods Receipts

Goods Receipts record inventory received from suppliers against a Purchase Order.

Field Required? What To Enter
Supplier Who sent the goods
Purchase Order If receiving against an order
Location Where to store the goods
Lines Items and quantities received

GL Entries:

If supplier exists and item exists:
  Dr  InventoryOnHand (clearing)     0 (Qty = -Qty)   -- removes from goods-in-transit
  Dr  InventoryOnHand (location)     0 (Qty = +Qty)   -- adds to location

If item does not exist:
  Dr  Suspense                       0 (Qty = Qty)    -- uncategorized

Delivery Notes

Delivery Notes record inventory shipped to customers against a Sales Order.

Field Required? What To Enter
Customer Who receives the goods
Sales Order If delivering against an order
Location Where the goods are shipped from
Lines Items and quantities to deliver

GL Entries: Same as SalesInvoice — COGS is recorded at the time of delivery.


12A. Payment (with Inventory Item)

Navigation: Payments > New Payment

Payments can impact inventory when their lines reference an InventoryItem. This acts as a cash purchase without using a PurchaseInvoice.

Field Required? What To Enter
Pay From Bank or cash account
Line — Item Select an InventoryItem
Line — Amount The purchase cost
Line — Account Select InventoryOnHand or expense account

How the costing engine processes it:

Payment line with Item=InventoryItem, Account=InventoryOnHand, Qty=100, Amount=1,000
→ Creates GL entry with Qty=100, AccountAmount=1,000
→ InventoryCostDestination = null (no COGS flag)
→ COGS engine sees: InventoryCostDestination==null AND Qty>0 AND AccountAmount!=0
→ Calls AddPurchaseLayer(100, 1,000) — creates a new cost layer
→ Uses item's configured FIFO/LIFO/MA

GL entries:

Dr  InventoryOnHand                    1,000
  Cr  Cash / Bank Account / AP                   1,000

Important: The item's configured Valuation Method (FIFO/LIFO/MA), Inventory System (Perpetual/Periodic), and LCNRV all apply the same way as a PurchaseInvoice.


12B. Receipt (with Inventory Item)

Navigation: Receipts > New Receipt

Receipts can impact inventory when their lines reference an InventoryItem.

Scenario Line — Account Qty Cost Engine Action
Cash sale (outbound) InventoryOnHand Negative Consumes layers using item's FIFO/LIFO/MA
Supplier refund (inbound) InventoryOnHand Positive Creates new cost layer
Other inbound InventoryOnHand Positive Same as purchase — adds to inventory

GL entries for a cash sale (outbound):

Dr  Cash / Bank Account                    Sales price
Dr  COGS Account                           Layer cost (FIFO/LIFO/MA)
  Cr  InventoryOnHand                                Layer cost
  Cr  Revenue Account                                Sales price

GL entries for a supplier refund (inbound):

Dr  Cash / Bank Account                    Amount received
Dr  InventoryOnHand                        Original cost
  Cr  COGS Account (if reversing sale)               Original cost

Important: Receipts with inventory items go through the same From method path as SalesInvoice. They create inventory cost destination entries when there is no proposed COGS amount, which the costing engine processes using the item's configured valuation method.


12C. ExpenseClaim (with Inventory Item)

Navigation: Expense Claims > New Expense Claim

ExpenseClaims allow employees to purchase inventory using personal funds and claim reimbursement. When the line references an InventoryItem, it creates a cost layer just like a PurchaseInvoice.

Field Required? What To Enter
Paid By Select Employee (reimbursement), Capital Account (owner), or Expense Claims Payer
Line — Item Select an InventoryItem (only shown when Account matches inventory)
Line — Amount The purchase cost
Line — Account Select InventoryOnHand for inventory items

GL entries:

Dr  InventoryOnHand                    1,000
Dr  Tax Receivable (if TaxCode set)      150
  Cr  Employee Clearing / Capital A/C           1,150

All valuation features apply:

Feature Applies? How
FIFO / LIFO / Moving Average Layer is created via AddPurchaseLayer. When sold later, consumed via RemoveSaleLayers using item's method.
Perpetual / Periodic COGS engine checks item's InventorySystem setting. For Periodic, sales qty accumulated separately.
LCNRV Checked at period-end for ALL inventory, regardless of acquisition method.
Negative Inventory / Backlog Applies if PreventNegativeInventory is unchecked.

Note: ExpenseClaim is included in QtyOnHand calculations and in the COGS engine's inventory-on-hand transaction filter. This means inventory purchased via ExpenseClaim is fully tracked in all inventory reports.


12D. How These Transactions Compare to Standard Purchase/Sales

Aspect PurchaseInvoice Payment (with Item) ExpenseClaim (with InvItem)
Supplier/vendor tracking ✅ Full supplier record ❌ No supplier link ❌ Uses employee instead
Cost layer created ✅ AddPurchaseLayer ✅ AddPurchaseLayer ✅ AddPurchaseLayer
Valuation method ✅ FIFO/LIFO/MA ✅ FIFO/LIFO/MA ✅ FIFO/LIFO/MA
Perpetual/Periodic ✅ Applied ✅ Applied ✅ Applied
LCNRV ✅ At period-end ✅ At period-end ✅ At period-end
Included in QtyOnHand ✅ Yes ✅ Yes ✅ Yes
Included in Inventory Reports ✅ Yes ✅ Yes ✅ Yes

13. Sample Data — Full Walkthrough

Scenario

Three items with different valuation methods and systems:

Item Name Method System Opening
A Widget-X FIFO Perpetual None
B Gadget-Y Moving Average Perpetual None
C Component-Z LIFO Periodic None

Transactions

T1:  Purchase 100 Widget-X @ $10 = $1,000
T2:  Purchase 100 Gadget-Y @ $20 = $2,000
T3:  Purchase 100 Component-Z @ $30 = $3,000
T4:  Purchase 100 Widget-X @ $12 = $1,200
T5:  Purchase 100 Gadget-Y @ $22 = $2,200
T6:  Purchase 100 Component-Z @ $32 = $3,200
T7:  Sale 150 Widget-X
T8:  Sale 50 Gadget-Y
T9:  Sale 120 Component-Z
T10: Purchase 50 Widget-X @ $14 = $700
T11: Sale 30 Widget-X
T12: Sale 60 Gadget-Y
T13: Purchase 50 Component-Z @ $34 = $1,700
T14: WriteOff 5 Widget-X
T15: Transfer 10 Gadget-Y to Location B
T16: Sale 30 Component-Z
T17: Return 10 Widget-X (Credit Note)
T18: Period End (Periodic COGS for Component-Z)

Cost Layer Trace

Widget-X (FIFO, Perpetual)

After T1:   Layer 1: 100 @ $10 = $1,000
After T4:   Layer 1: 100 @ $10 = $1,000    Layer 2: 100 @ $12 = $1,200
After T7:   FIFO consumes Layer 1 first:
            Layer 1: 0 @ $10 (consumed)    Layer 2: 50 @ $12 = $600
            COGS T7 = 100×$10 + 50×$12 = $1,600
After T10:  Layer 2: 50 @ $12 = $600       Layer 3: 50 @ $14 = $700
After T11:  FIFO consumes Layer 2:
            Layer 2: 20 @ $12 = $240       Layer 3: 50 @ $14 = $700
            COGS T11 = 30×$12 = $360
After T14:  WriteOff consumes from Layer 2:
            Layer 2: 15 @ $12 = $180       Layer 3: 50 @ $14 = $700
            COGS T14 = 5×$12 = $60
After T17:  Return reverses last sale (from Returns Queue):
            Layer 2: 25 @ $12 = $300       Layer 3: 50 @ $14 = $700
            COGS reversal T17 = -$120

Final: 75 units (25@$12 + 50@$14) = $1,000
Total COGS = $1,600 + $360 + $60 - $120 = $1,900

Gadget-Y (Moving Average, Perpetual)

After T2:   100 @ $20.00 = $2,000
After T5:   200 @ $21.00 = $4,200     avg = (2000+2200)/(100+100) = 21.00
After T8:   150 @ $21.00 = $3,150     COGS T8 = 50×$21 = $1,050
After T12:  90 @ $21.00 = $1,890      COGS T12 = 60×$21 = $1,260
After T15:  Transfer 10 to Loc B:
            Loc A: 80 @ $21.00 = $1,680
            Loc B: 10 @ $21.00 = $210
            (No financial impact — only location split)

Final Loc A: 80 units @ $21.00 = $1,680
Final Loc B: 10 units @ $21.00 = $210
Total COGS = $1,050 + $1,260 = $2,310

Component-Z (LIFO, Periodic)

After T3:    Layer 1: 100 @ $30 = $3,000
After T6:    Layer 1: 100 @ $30 = $3,000    Layer 2: 100 @ $32 = $3,200
After T9:    120 sold (deferred)
After T13:   Layer 1: 100 @ $30 = $3,000    Layer 2: 100 @ $32 = $3,200
             Layer 3: 50 @ $34 = $1,700
After T16:   30 sold (deferred)

Period-End COGS (T18) — LIFO method:

Total sold: 120 + 30 = 150 units
Available layers: 100 @ $30, 100 @ $32, 50 @ $34

LIFO consumes newest first:
  50 @ $34 = $1,700
  100 @ $32 = $3,200
  Total COGS = $4,900

Remaining: 100 @ $30 = $3,000

Complete GL Output

Dr  InventoryOnHand (Widget-X)                     1,000
Dr  InventoryOnHand (Gadget-Y)                     1,680
Dr  InventoryOnHand (Gadget-Y - Loc B)               210
Dr  InventoryOnHand (Component-Z)                   3,000
Dr  COGS (Widget-X: T7+T11+T14-T17)                1,900
Dr  COGS (Gadget-Y: T8+T12)                        2,310
Dr  COGS (Component-Z: T18 periodic)               4,900
  Cr  AccountsPayable (T1+T2+T3+T4+T5+T6+T10+T13)             9,300
  Cr  RetainedEarnings (balancing)                             4,700
                                                  ───────    ───────
Total Debits:   14,790                            Total Credits: 14,790  ✅ DR=CR

Trial Balance

Account                                  Debits      Credits
InventoryOnHand (Widget-X)                  1,000
InventoryOnHand (Gadget-Y - Loc A)          1,680
InventoryOnHand (Gadget-Y - Loc B)            210
InventoryOnHand (Component-Z)               3,000
COGS (Widget-X)                             1,900
COGS (Gadget-Y)                             2,310
COGS (Component-Z)                          4,900
AccountsPayable                                          9,300
RetainedEarnings                                        4,700
                                       ─────────     ─────────
Total                                   14,790        14,790   ✅ DR = CR

Balance Sheet

Assets:
  InventoryOnHand (Widget-X)                       1,000
  InventoryOnHand (Gadget-Y)                       1,890
  InventoryOnHand (Component-Z)                    3,000
  Total Assets                                     5,890

Liabilities:
  AccountsPayable                                  9,300

Equity:
  Retained Earnings                               (4,700)
  Net Loss (COGS: 1,900+2,310+4,900)             (9,110)

Total Liabilities + Equity                         5,890   ✅ A = L + E

Inventory Items List View

Item           QtyOnHand  QtyAvailable  AvgCost   TotalCost  FifoCost  LifoCost  MovingAvg
Widget-X             75           75    13.33      1,000     1,000     1,000     1,000
Gadget-Y (Loc A)     80           70    21.00      1,680     1,680     1,680     1,680
Gadget-Y (Loc B)     10           10    21.00        210       210       210       210
Component-Z         100          100    30.00      3,000     3,000     3,000     3,000

14. Inventory Reports — Complete Guide

14.1 Inventory Items List

Where: Inventory Items

Purpose: Master list of all inventory items with quantities and costs.

Parameters: None — shows all items.

Columns:

Column Source Description
Item Code Item master Unique item identifier
Item Name Item master Display name
Control Account Item master GL account for this item's inventory value
Division Item master Operational division
Description Item master Item description
Sale Price Item master Default unit sales price
Purchase Price Item master Default unit purchase price
Unit Name Item master Unit of measure
QtyOnHand Computed from GL + GR + DN Physical quantity in stock
QtyToDeliver SalesOrder - DeliveryNote Unfulfilled customer orders
QtyAvailable QtyOnHand - QtyToDeliver Available for sale
QtyToReceive PurchaseOrder - GoodsReceipt Incoming stock on order
QtyToBeAvailable QtyAvailable + QtyToReceive Projected available stock
QtyDesired Item master ReorderPoint Target stock level
QtyToOrder Max(0, QtyDesired - QtyToBeAvailable) Reorder suggestion
QtyOwned From COGS engine Accounting quantity
TotalCost Sum of layer amounts Total inventory value
PerUnitCost Based on valuation method Unit cost
FifoCost Method override What cost would be under FIFO
LifoCost Method override What cost would be under LIFO
MovingAvgCost Method override What cost would be under MA

14.2 Inventory Transactions Drill-Down

Where: Click on any item's amount/cost in the Items list.

Purpose: Detailed view of all transactions contributing to an item's total cost.

Columns: Date, Transaction, Description, InsufficientQty (negative inventory flag), Qty, TransactionCost, UnitCost, Amount, RunningBalance.

14.3 Inventory Qty On Hand Drill-Down

Where: Click on QtyOnHand column.

Purpose: Shows all transactions affecting physical quantity.

Columns: Date, Transaction, Customer, InventoryItem, Supplier, InventoryLocation, QtyOnHand.

14.4 Inventory Qty Owned Drill-Down

Where: Click on QtyOwned column.

Purpose: Shows accounting quantity from costing engine.

Columns: Date, Transaction, Reference, Item, BankAccount, Customer, Supplier, QtyOwned, RunningTotal.

14.5 Inventory Valuation Report

Where: Reports > Inventory Valuation Report

Parameters: Date range, Location (optional), Show Comparison (FIFO vs LIFO vs MA), Show LCNRV Adjustment.

Output:

Item         Opening  Purchases  Sales  Adjustments  Closing    Method
Widget-X           0      2,900   1,900           0      1,000  FIFO (current)
Widget-X           0      2,900   1,900           0      1,000  FIFO
Widget-X           0      2,900   2,067           0        833  LIFO
Widget-X           0      2,900   2,000           0        900  Moving Avg

How it works: The report runs the COGS engine multiple times — once with each method override — to show comparative values.

14.6 Inventory Quantity Summary

Where: Reports > Inventory Quantity Summary

Parameters: From Date, To Date.

Output:

Item         Opening  Purchases  DNs  Production  WriteOffs  Sales  CNs  JEs  Closing
Widget-X           0     250      0           0          5     180   10     0      75
Gadget-Y           0     200      0           0          0     110    0     0      90
Component-Z        0     250      0           0          0     150    0     0     100

14.7 Inventory ABC Analysis

Where: Reports > Inventory ABC Analysis

Parameters: Date, Class A %, Class B %, Locations.

Output:

Item         QtyOwned  UnitCost  TotalCost  % of Total  Cum %  Class
Widget-X            75     13.33      1,000       17.0%   17.0%    A
Gadget-Y            90     21.00      1,890       32.1%   49.1%    A
Component-Z        100     30.00      3,000       50.9%  100.0%    B

Logic: Items sorted by TotalCost descending. A = top X% (default 80%), B = next Y% (default 15%), C = remaining.

14.8 Inventory Profit Margin

Where: Reports > Inventory Profit Margin

Parameters: From Date, To Date, Items, Locations.

Output:

Item         Sales       COGS       Profit      Margin%
Widget-X     5,000       1,900       3,100       62.0%
Gadget-Y     3,000       2,310         690       23.0%
Component-Z  6,000       4,900       1,100       18.3%

14.9 Inventory Quantity By Location

Where: Reports > Inventory Quantity By Location

Parameters: Date, Locations.

Output:

Item                Main Warehouse  Overflow  Returns Bay  Total
Widget-X                       65          0           10     75
Gadget-Y                       80         10            0     90
Component-Z                   100          0            0    100

14.10 Inventory Price List

Where: Reports > Inventory Price List

Purpose: Lists all items with their default sales prices.

Output:

Item Code  Item Name     Sale Price  Unit
WDG-001    Widget-X           500.00  pcs
GDG-001    Gadget-Y         1,000.00  pcs
CMP-001    Component-Z        800.00  pcs

14.11 Inventory Value Summary

Where: Reports > Inventory Value Summary

Parameters: Date, Location (optional).

Output:

Item         QtyOwned  AvgCost   TotalValue
Widget-X            75     13.33       1,000
Gadget-Y            90     21.00       1,890
Component-Z        100     30.00       3,000
                  ─────             ───────
Total              265               5,890

15. Field Fallback & Edge Cases

When Fields Are Left Blank

Field If Set If Not Set
ValuationMethod Uses selected method (FIFO/LIFO/MA) Defaults to MovingAverage
InventorySystem Uses selected system (Perpetual/Periodic) Defaults to Perpetual
OpeningInventoryQty Creates opening layer with cost No opening balance
OpeningInventoryCost Sets layer cost Warning if qty>0 — zero COGS on sales
OpeningInventoryDate Layer dated at this date Uses earliest transaction in system
NRVPerUnit Enables LCNRV write-down (if Apply checked) LCNRV skipped
ApplyLCNRV Enables write-down at period-end LCNRV skipped
PreventNegativeInventory Blocks overselling Backlog allowed
ControlAccount Custom BS account Defaults to InventoryOnHand
CustomExpenseAccount Custom COGS account Defaults to InventoryPurchases
CustomIncomeAccount Custom revenue account Defaults to InventorySales
DefaultLineDescription Autofills description on invoice lines No default description
DefaultPurchaseUnitPrice Autofills unit price on purchase invoices No default purchase price
DefaultSalesUnitPrice Autofills unit price on sales invoices No default sales price
DefaultDivision Autofills division on sales lines Uses item's Division field → null
DefaultTaxCode Autofills tax code on sales/purchase lines No default tax code
TrackQuantityToReceive Enables PO tracking for this item Not tracked against purchase orders
TrackQuantityToDeliver Enables SO tracking for this item Not tracked against sales orders
HideItemNameOnPrintedDocuments Shows only Item Code on invoices Full name + code displayed
Inactive Item hidden from autocomplete and reports Item is active and selectable
ProductionStage Manufacturing routing stage Defaults to stage 1
ReorderPoint + QtyDesired Enables reorder suggestions No reorder suggestion shown

Edge Cases

Condition Behavior
Quantity > 0 but Cost = 0 on opening Warning shown; cost layers created at 0; COGS = 0 on sale
Quantity = 0 on purchase No layer created — AddPurchaseLayer exits early
All layers consumed to zero Layers.RemoveAll(l => l.Qty <= 0m) — cleanup
Sale exceeds all layers + backlog Remaining qty consumed at 0 cost; backlog reports shortage
FIFO with only one layer Behaves identically to Moving Average
Periodic system with no sales GetPeriodicCogs returns 0
Transfer with no From/To location GL entries created with null location
WriteOff with null Allocation account Falls to Suspense account
GoodsReceipt with null Supplier No GL entries created — returns empty
GoodsReceipt with null item Posted to Suspense account
Inventory COGS overflow Catch block recovers with fallback average cost
LCNRV when NRV > Cost No write-down (only when Cost > NRV)

§. Accounting Regulation Validation

Standards Compliance

Standard Requirement How the System Satisfies It
IAS 2 Section 9 Cost includes purchase price, import duties, transport, handling All costs capitalize to inventory layers. LC module adds duties, freight, insurance to layers etc.
IAS 2 Section 10 Cost formula must be applied consistently Per-item valuation method stored and consistently applied. Method does not change automatically.
IAS 2 Section 25 FIFO and weighted average permitted; LIFO permitted only under US GAAP All three methods available. LIFO should be used only by US GAAP reporters.
IAS 2 Sections 28-33 Inventory must be written down to net realizable value if lower LCNRV via ApplyLCNRV checkbox + NetRealizableValuePerUnit. Write-down posted at period-end.
IAS 2 Sections 34-36 Both perpetual and periodic systems acceptable Both supported per-item. Periodic COGS computed via layer snapshot at period-end.
IAS 2 Section 36ab Physical inventory should reconcile with GL QtyOnHand and QtyOwned tracked separately — differences can be investigated.
IAS 8 Accounting policies must be applied consistently Valuation method and system are set per item.
IAS 21 Non-monetary items at historical exchange rate Inventory recorded at the exchange rate at time of purchase/LC.
IFRS 15 Revenue matched with related COGS COGS recorded at the time of sale (Perpetual) or at period-end (Periodic), matching revenue recognition.
GAAP — Full Disclosure Valuation methods must be disclosed Method is shown per item in the inventory list view and valuation reports.
Double-entry DR = CR for every transaction Every inventory movement creates balanced GL pairs. Guaranteed by construction.

Why DR = CR Is Guaranteed

Every inventory-impacting transaction creates balanced pairs:

Purchase:     Dr Inventory     $1,000
              Cr AP                       $1,000   ✅

Sale:         Dr COGS           $600
              Cr Inventory                  $600   ✅

Write-off:    Dr COGS            $60
              Cr Inventory                   $60   ✅

Transfer:     Dr Inv (Dest)        0 (qty +10)
              Cr Inv (Source)       0 (qty -10)   ✅ (zero amount, qty only)

Opening:      Dr Inventory    $15,000
              Cr RetainedEarnings          $15,000   ✅

LCNRV:        Dr Impairment     $500
              Cr Inventory                  $500   ✅

FIFO vs LIFO vs Moving Average — Compliance

Method IFRS US GAAP Best For
FIFO ✅ Permitted ✅ Permitted Most businesses, perishable goods, falling prices
LIFO Prohibited ✅ Permitted Rising prices, US tax reporting
Moving Average ✅ Permitted ✅ Permitted Simple accounting, stable costs, small businesses