Back

What is the Inventory scope?

The Inventory scope is the home for everything stock-related: products on hand, warehouses & locations, movements (receipts, deliveries, transfers, adjustments), and valuation. In the current release, however, only the foundation ships β€” three security roles that the future stock modules will hook into.

If you need stock valuation today (COGS posting, perpetual ledger entries on receipts/deliveries), it is already handled by core_inventory_accounting β€” see the Accounting scope's Inventory Accounting chapter. Operational stock movements await their dedicated module.

ℹ️

Honest scope note

The Inventory scope currently ships one skeleton module: core_inventory. It defines three roles (Manager / Supervisor / User) but no models, views, or actions yet. The functional stock features are tracked in the Roadmap section.

Where Inventory fits in the supply chain

Vendor β†’ Receipt β†’ Stock On Hand β†’ Internal Transfer β†’ Delivery β†’ Customer

Filled boxes are the operational stages the Inventory scope will own. Receipt and Delivery trigger valuation entries handled today by core_inventory_accounting; the operational stock movements themselves are part of the Roadmap.

What ships in core_inventory today

CapabilityTypeSource
Inventory Manager rolegroupsecurity/inventory_groups.xml
Inventory Supervisor rolegroupsecurity/inventory_groups.xml
Inventory User rolegroupsecurity/inventory_groups.xml
ACL skeleton (sample only)base.model.accesssecurity/base.model.access.csv
ℹ️
No models, views, actions, sequences, or APIs are declared yet. __hmx__.py has empty depends β€” this is intentional: the module is a permission-baseline so the upcoming stock modules can extend, not redefine, the roles.

Prerequisites

  • base module installed (provides the group model the roles inherit).
  • Administrator access to the Settings β†’ Users & Companies β†’ Users screen so you can assign roles.
  • A clear idea of who in your organisation should be Manager vs Supervisor vs User β€” see the Inventory Roles chapter for guidance.

Install & assign roles

Install the module

Run the install command. There are no other dependencies to worry about.

hmx update install core_inventory --alias=default --noinput

Verify the three roles exist

Open Settings β†’ Users & Companies β†’ Groups. Filter by name "Inventory" β€” you should see Manager, Supervisor, and User.

Settings / Groups
Groups (filter: "Inventory")
NameModuleUsers
Inventory Managercore_inventory0
Inventory Supervisorcore_inventory0
Inventory Usercore_inventory0
All three inventory roles created on install β€” initially with zero users

Open the user form

Go to Settings β†’ Users & Companies β†’ Users and pick the user you want to grant access to.

Add the appropriate role

In the Groups section, add one of: Inventory Manager, Inventory Supervisor, or Inventory User. The roles are not designed to stack β€” pick the highest applicable.

User: Sarah Lim
Login
sarah.lim@acme.co
Active
Yes
Groups
Internal User Inventory Manager
User granted Inventory Manager β€” highest tier

Save & the user gets access on next login

No further configuration. As future inventory features land in the system, they will automatically respect the role you just assigned.

How the install wires up

  • __hmx__.py declares depends: [] (empty) and loads only security/inventory_groups.xml on install.
  • inventory_groups.xml creates three group records: inventory_group_manager, inventory_group_supervisor, inventory_group_user.
  • base.model.access.csv ships a placeholder ACL (access_yourmodel_all) wired to base.group_user β€” replace this when the real stock models land.

The three-tier model

Inventory work is hierarchical: operators handle daily moves, supervisors reconcile and approve, managers set policy and absorb exceptions. Pick one role per user; do not stack them β€” the higher role is meant to inherit the lower's capabilities.

RoleWhoWill be able to (when stock features land)
Inventory UserWarehouse operators, pickers, packersReceive, transfer, deliver β€” execute moves on assigned locations.
Inventory SupervisorShift leads, warehouse foremenValidate cycle counts, approve adjustments, reassign locations.
Inventory ManagerInventory controllers, warehouse managersConfigure warehouses & locations, set valuation methods, force-correct discrepancies.

Picking the right role

πŸ‘€

Default to "User" for floor staff

If unsure, give an operator the User role. They can do all daily work without risking master data.

πŸ“‹

"Supervisor" for anyone who signs off

If their job includes approving what someone else did β€” adjustments, cycle counts, transfer reconciliations β€” they need Supervisor.

βš™οΈ

"Manager" only for policy setters

Reserve Manager for the small group that defines warehouses, valuation methods, and rule overrides. Granting it widely is the easiest way to lose audit trail.

Group records

<record id="inventory_group_manager" model="group">
    <field name="name">Inventory Manager</field>
</record>
<record id="inventory_group_supervisor" model="group">
    <field name="name">Inventory Supervisor</field>
</record>
<record id="inventory_group_user" model="group">
    <field name="name">Inventory User</field>
</record>

External XML IDs to reference in your own ACLs or rule records: core_inventory.inventory_group_manager, core_inventory.inventory_group_supervisor, core_inventory.inventory_group_user.

🚧

Conceptual preview

The mockups below are design-intent previews, not the current UI. They describe what will be available when the stock operation modules land. Today, core_inventory only seeds the three roles; the workflows themselves are on the Roadmap.

1. Goods Receipt (inbound)

When a vendor delivery arrives, the warehouse creates a Goods Receipt to bring product into stock. In the planned design, receipts will be auto-suggested from confirmed Purchase Orders, with picking-list style validation for each line.

Incoming document appears

A confirmed PO from the Purchase scope auto-creates a Draft Receipt in the inventory user's queue.

Inventory / Receipts
DraftReadyDone
AllThis week
Receipt #SourceVendorScheduledStatus
WH/IN/00042PO-2026-001Acme Supplies2026-04-23Draft
WH/IN/00041PO-2026-002Global Parts Co2026-04-22Draft
Receipt queue β€” drafts auto-created from PO confirmation

Operator opens & validates quantities

Inside the receipt form, the operator confirms quantities actually received. Discrepancies flag supervisor review.

Receipt WH/IN/00042
DraftReadyIn ProgressDone
Source
PO-2026-001
Vendor
Acme Supplies
Destination
WH/Stock
Scheduled
2026-04-23
Lines
ProductExpectedReceivedStatus
Raw Material A100100OK
Raw Material B5048Short 2
Short quantity triggers supervisor approval before posting

Validate to post stock

Clicking Validate moves stock into the destination location and triggers the valuation JE in core_inventory_accounting.

2. Pick & Pack (outbound)

For each customer shipment, a Delivery Order will be generated from a confirmed Sales Order. Operators pick from designated locations and pack for shipment.

Delivery is ready to pick

When the Sales Order is confirmed, a delivery order moves to Ready status once all lines have stock available.

Delivery WH/OUT/00318
DraftReadyPickingDone
Source SO
SO-2026-0415
Customer
Acme Retail Ltd.
From
WH/Stock
Carrier
JNE Regular
Outbound ready β€” all required stock reserved

Pick list printed / scanned

Operator picks product from the suggested source location. Barcode scanning (backlog) will confirm each line.

Pick List Β· WH/OUT/00318
LocationProductQtyPicked
WH/Stock/A1-03Product X1010
WH/Stock/B2-01Product Y55
WH/Stock/C4-11Product Z80
In-progress pick β€” Product Z still pending

Validate & ship

Once all lines are picked, Validate posts the outbound move, reduces on-hand, and generates the COGS JE.

3. Internal Transfer

Transfers between warehouses or locations (e.g. from raw-material store to production floor) keep stock accurate without touching valuation.

Create transfer

Supervisor opens Inventory → Transfers → New, sets source & destination locations, and adds lines.

New Transfer
Reference
WH/INT/00027
Date
2026-04-22
From
WH/Stock
To
WH/Production/Floor-A
Lines
ProductQtyUoM
Raw Material A50kg
Raw Material B30kg
Transfer draft β€” no valuation impact

Confirm & validate

Stock leaves source location immediately on confirm; destination location receives on validate, keeping trail clear.

4. Stock Adjustment

When physical count doesn't match the system, a Stock Adjustment corrects on-hand and books the gain/loss to inventory accounting.

Count & record discrepancy

Operator enters counted quantity; system compares to expected and flags variance.

Adjustment WH/ADJ/00008
DraftApprovalPosted
LocationProductExpectedCountedDiff
WH/Stock/A1-03Product X4240-2
WH/Stock/B2-01Product Y1517+2
Variances flagged for supervisor approval

Supervisor approves

Adjustments require supervisor or manager role. On approve, system posts loss/gain JE automatically.

5. Cycle Count

A rolling cycle count verifies inventory accuracy without pausing operations β€” typically one zone or ABC class per day.

Schedule & assign

Manager schedules zones/classes to be counted; operators receive a count sheet on their dashboard.

Cycle Count Plan · 2026-04-22
ZoneABCAssigneeStatus
WH/Stock/AASarah LimIn Progress
WH/Stock/BBJohn DoeScheduled
WH/Stock/CCUnassigned
Daily cycle plan — A-class counted most frequently

Count & reconcile

Counted entries create Stock Adjustments automatically when variance is detected, routing to supervisor.

Expected technical model (when modules ship)

The shipping design anticipates these models in future modules that will depend on core_inventory:

ModelPurposeConsumes role
stockpickingReceipt / Delivery / Internal transfer headerUser+
stockmovePer-line quantity movement between locationsUser+
stockquantOn-hand balance per product/location/lotUser (read)
stocklocationWarehouse & location masterManager
stockadjustmentPhysical count variance correctionSupervisor+
⚠️
These model names are illustrative of the expected design contract — not live code. The final model names will be confirmed when the stock-operation modules land.

What works today

  • Valuationcore_inventory_accounting already posts COGS and receipt JEs. Configure it under the Accounting scope.
  • Product mastercore_product holds the stockable items catalogue. Document under the Product scope.
  • Manufacturing moves — if your operation is production-heavy, the manuf module already tracks BoM consumption and finished-goods output (visible on the Manufacturing scope).
  • Roles in place — assign Inventory Manager/Supervisor/User now; the upcoming operational modules will pick up exactly these groups without re-provisioning.

Gaps & recommended workarounds

GapRecommended workaround
Receipts / Deliveries document trailExternal WMS, spreadsheet with line-level log, or the Manual Journal Entry path for valuation only.
Warehouse & location hierarchyMaintain a static location list in core_inventory_accounting product categories plus an offline location register.
Cycle count / physical inventoryScheduled stock-take with external forms; post variance via manual Inventory Adjustment JE.
Lots / Serial trackingTrack lot codes in product SKU structure or external tooling; plan migration when the lots sub-module lands.
Reorder signalsBuild a reorder report against sales velocity in core_accounting reports; manual PO creation.

Get ready for the migration

  1. Keep a consistent location code format in your spreadsheet (e.g. WH/Stock/A1-03) — easier to import later.
  2. Assign the Inventory Manager role now to the person(s) who will configure warehouses when the module ships.
  3. Document your current valuation method (FIFO / Weighted Avg / Standard) so core_inventory_accounting setup stays aligned.
  4. Track discrepancy history — even in a spreadsheet. When adjustments shipping, historical trends will inform cycle-count priorities.

Capability status

CapabilityTargetStatusWorkaround Today
Inventory roles & permissions skeletoncore_inventoryShippingβ€”
Stock valuation (COGS, perpetual entries)core_inventory_accountingShippingDocumented in the Accounting scope
Product master (stockable items)core_productPlannedUse core_product for product master in the meantime
Warehouses & storage locationscore_inventoryPlannedTrack manually (spreadsheet) until shipped
Stock On Hand & Quantscore_inventoryPlannedExternal WMS or spreadsheet
Goods Receipts (incoming moves)core_inventory + core_purchasePlannedManual JE in Accounting for valuation only
Deliveries (outgoing moves)core_inventory + salePlannedManual JE in Accounting for valuation only
Internal Transfers (warehouse to warehouse)core_inventoryPlannedManual document trail
Cycle counts & stock adjustmentscore_inventoryPlannedInventory adjustment journal entries (Accounting scope)
Lots / Serial numbers / Expirycore_inventoryBacklogTrack in source system or spreadsheet
Reorder rules & min/max replenishmentcore_inventoryBacklogManual reorder list
Barcode / RFID scanning workflowswebx + core_inventoryBacklogExternal scanner with manual entry
πŸ“…
Status reflects the current state of core_inventory at the time of writing. As the operational stock modules ship, this page will be updated to point to the new chapters (Stock On Hand, Receipts, Transfers, etc.).

Module manifest (__hmx__.py)

{
    "name": "Core_Inventory",
    "category": "Core_Inventory Category",
    "version": "1.0.0",
    "description": "Core_Inventory Description",
    "author": "Hashmicro",
    "data": [
        "security/inventory_groups.xml",
    ],
    "depends": [],
}

depends is intentionally empty. The module ships a permission baseline that future stock modules will extend, not redefine.

Security groups

External IDNamePurpose
core_inventory.inventory_group_managerInventory ManagerHighest tier β€” policy & configuration access (when features land)
core_inventory.inventory_group_supervisorInventory SupervisorApproval & reconciliation tier
core_inventory.inventory_group_userInventory UserOperator tier β€” daily moves on assigned locations

ACL skeleton (placeholder)

id,name,model:id,group:id,perm_read,perm_write,perm_create,perm_unlink
access_yourmodel_all,Access Your Model All,model_yourmodel,base.group_user,1,1,1,1
⚠️
This ACL row is a placeholder shipped with the skeleton. model_yourmodel does not exist β€” replace this row with real ACLs when the actual stock models are added in subsequent modules.

Source files

PathRole
__hmx__.pyManifest
apps.pyDjango AppConfig (CoreInventoryConfig)
security/inventory_groups.xmlThree group records
security/base.model.access.csvPlaceholder ACL row
admin.pyEmpty Django admin registration file