At a Glance
Module purpose: System of record for stock balances (product × warehouse × location × lot) and the movement stream feeding costing and period-end snapshots · Audience: Store Keeper, Inventory Controller, Finance · Key entities/tables:InventoryStatus, stock-movement records (RECEIPT/ISSUE/TRANSFER/ADJUSTMENT/RETURN/WRITE_OFF),tb_period_snapshot, lot/batch table · Sub-pages: 14

The Inventory module is the system of record for stock balances across the property. A balance is keyed by product × warehouse × location (with optional batch/lot when batch tracking is enabled), and exposes onHand, allocated, available, and inTransit quantities alongside per-batch detail. Every balance carries a current/average unit cost so that quantity and valuation move together.
All quantity changes flow through stock movements. A movement has a type — RECEIPT, ISSUE, TRANSFER, ADJUSTMENT, RETURN, or WRITE_OFF — a source location, an optional destination location, line items, and a workflow status (DRAFT → PENDING → IN_TRANSIT → COMPLETED / CANCELLED). The movement classifies posting behaviour: an inventory location debits the inventory asset account, a direct-cost location bypasses inventory and posts straight to department expense. Returns, write-offs, and adjustments share the same movement spine but differ in journal direction and approval rules.
At the end of each accounting period the module produces a period-end snapshot: the final physical count is reconciled against system quantities, variances are posted as adjustments, valuation is locked, and the period is closed against backdated entries. The snapshot is the audit anchor that downstream modules (costing, financial reporting) consume.
In hospitality operations, inventory is where food cost lives. Most of the property's variable cost — F&B raw materials, housekeeping supplies, minibar stock — sits in this module before it becomes COGS. Getting the balance right matters for three reasons:
This module sits between Procurement (receipts in) and Operations (requisitions out), and is the data source the Costing module reads for valuation.
onHand, allocated, available, and inTransit quantities plus current unit cost and total value. Updated by every committed stock movement.INVENTORY (stock asset, posts to inventory GL account), DIRECT (direct-cost centre, posts straight to department expense), or transit/special-purpose. Location type determines the journal entries a movement generates and whether the item ever appears as an asset on the balance sheet.RECEIPT, ISSUE, TRANSFER, ADJUSTMENT, RETURN, WRITE_OFF), references a source document (GRN, store requisition, count, write-off authorisation), and produces both a balance update and a journal entry. Movements are the atomic unit the audit trail is built from.FIFO or WEIGHTED_AVERAGE — configured per product (or globally) and applied by the costing engine when movements consume inventory. See costing for the calculation rules; this module stores the inputs (lots, dates, costs) the engine needs.| Role | Responsibility |
|---|---|
| Store Keeper | Records day-to-day stock movements — receipts, issues, transfers — and runs physical counts at the location level. |
| Inventory Controller | Owns balance accuracy: reviews variances, approves adjustments, coordinates spot checks and full counts, signs off on period-end reconciliation. |
| Finance | Verifies valuation, reconciles inventory GL to the sub-ledger, approves journal entries from movements, and locks the period after close. |
Cross-module flow:
Master configuration:
../carmen/docs/inventory-management/../carmen/docs/Inventory/../carmen-inventory-frontend/../carmen-turborepo-backend-v2/../carmen-turborepo-backend-bruno/../carmen-inventory-frontend-e2e/