Inventory Scope
Skeleton today β security roles ready for the upcoming stock, location, and movement modules.
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
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
| Capability | Type | Source |
|---|---|---|
| Inventory Manager role | group | security/inventory_groups.xml |
| Inventory Supervisor role | group | security/inventory_groups.xml |
| Inventory User role | group | security/inventory_groups.xml |
| ACL skeleton (sample only) | base.model.access | security/base.model.access.csv |
__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.Getting Started
Install the module and assign the right people to the right inventory role.
Prerequisites
- base module installed (provides the
groupmodel 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 --noinputVerify the three roles exist
Open Settings β Users & Companies β Groups. Filter by name "Inventory" β you should see Manager, Supervisor, and User.
| Name | Module | Users |
|---|---|---|
| Inventory Manager | core_inventory | 0 |
| Inventory Supervisor | core_inventory | 0 |
| Inventory User | core_inventory | 0 |
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.
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__.pydeclaresdepends: [](empty) and loads onlysecurity/inventory_groups.xmlon install.inventory_groups.xmlcreates threegrouprecords:inventory_group_manager,inventory_group_supervisor,inventory_group_user.base.model.access.csvships a placeholder ACL (access_yourmodel_all) wired tobase.group_userβ replace this when the real stock models land.
Inventory Roles
Three tiers of access designed for warehouse operations: who can do what.
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.
| Role | Who | Will be able to (when stock features land) |
|---|---|---|
| Inventory User | Warehouse operators, pickers, packers | Receive, transfer, deliver β execute moves on assigned locations. |
| Inventory Supervisor | Shift leads, warehouse foremen | Validate cycle counts, approve adjustments, reassign locations. |
| Inventory Manager | Inventory controllers, warehouse managers | Configure 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.
Planned Stock Operations
What each core inventory flow will look like once the operational modules ship β five workflows with conceptual UI previews.
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.
| Receipt # | Source | Vendor | Scheduled | Status |
|---|---|---|---|---|
| WH/IN/00042 | PO-2026-001 | Acme Supplies | 2026-04-23 | Draft |
| WH/IN/00041 | PO-2026-002 | Global Parts Co | 2026-04-22 | Draft |
Operator opens & validates quantities
Inside the receipt form, the operator confirms quantities actually received. Discrepancies flag supervisor review.
| Product | Expected | Received | Status |
|---|---|---|---|
| Raw Material A | 100 | 100 | OK |
| Raw Material B | 50 | 48 | Short 2 |
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.
Pick list printed / scanned
Operator picks product from the suggested source location. Barcode scanning (backlog) will confirm each line.
| Location | Product | Qty | Picked |
|---|---|---|---|
| WH/Stock/A1-03 | Product X | 10 | 10 |
| WH/Stock/B2-01 | Product Y | 5 | 5 |
| WH/Stock/C4-11 | Product Z | 8 | 0 |
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.
| Product | Qty | UoM |
|---|---|---|
| Raw Material A | 50 | kg |
| Raw Material B | 30 | kg |
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.
| Location | Product | Expected | Counted | Diff |
|---|---|---|---|---|
| WH/Stock/A1-03 | Product X | 42 | 40 | -2 |
| WH/Stock/B2-01 | Product Y | 15 | 17 | +2 |
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.
| Zone | ABC | Assignee | Status |
|---|---|---|---|
| WH/Stock/A | A | Sarah Lim | In Progress |
| WH/Stock/B | B | John Doe | Scheduled |
| WH/Stock/C | C | — | Unassigned |
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:
| Model | Purpose | Consumes role |
|---|---|---|
| stockpicking | Receipt / Delivery / Internal transfer header | User+ |
| stockmove | Per-line quantity movement between locations | User+ |
| stockquant | On-hand balance per product/location/lot | User (read) |
| stocklocation | Warehouse & location master | Manager |
| stockadjustment | Physical count variance correction | Supervisor+ |
Bridging the Gap
Practical guidance for teams that need inventory operations today, while the operational modules are still on the roadmap.
What works today
- Valuation —
core_inventory_accountingalready posts COGS and receipt JEs. Configure it under the Accounting scope. - Product master —
core_productholds the stockable items catalogue. Document under the Product scope. - Manufacturing moves — if your operation is production-heavy, the
manufmodule 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
| Gap | Recommended workaround |
|---|---|
| Receipts / Deliveries document trail | External WMS, spreadsheet with line-level log, or the Manual Journal Entry path for valuation only. |
| Warehouse & location hierarchy | Maintain a static location list in core_inventory_accounting product categories plus an offline location register. |
| Cycle count / physical inventory | Scheduled stock-take with external forms; post variance via manual Inventory Adjustment JE. |
| Lots / Serial tracking | Track lot codes in product SKU structure or external tooling; plan migration when the lots sub-module lands. |
| Reorder signals | Build a reorder report against sales velocity in core_accounting reports; manual PO creation. |
Get ready for the migration
- Keep a consistent location code format in your spreadsheet (e.g.
WH/Stock/A1-03) — easier to import later. - Assign the Inventory Manager role now to the person(s) who will configure warehouses when the module ships.
- Document your current valuation method (FIFO / Weighted Avg / Standard) so
core_inventory_accountingsetup stays aligned. - Track discrepancy history — even in a spreadsheet. When adjustments shipping, historical trends will inform cycle-count priorities.
Inventory Roadmap
What's planned for the Inventory scope, and where to handle each capability today.
Capability status
| Capability | Target | Status | Workaround Today |
|---|---|---|---|
| Inventory roles & permissions skeleton | core_inventory | Shipping | β |
| Stock valuation (COGS, perpetual entries) | core_inventory_accounting | Shipping | Documented in the Accounting scope |
| Product master (stockable items) | core_product | Planned | Use core_product for product master in the meantime |
| Warehouses & storage locations | core_inventory | Planned | Track manually (spreadsheet) until shipped |
| Stock On Hand & Quants | core_inventory | Planned | External WMS or spreadsheet |
| Goods Receipts (incoming moves) | core_inventory + core_purchase | Planned | Manual JE in Accounting for valuation only |
| Deliveries (outgoing moves) | core_inventory + sale | Planned | Manual JE in Accounting for valuation only |
| Internal Transfers (warehouse to warehouse) | core_inventory | Planned | Manual document trail |
| Cycle counts & stock adjustments | core_inventory | Planned | Inventory adjustment journal entries (Accounting scope) |
| Lots / Serial numbers / Expiry | core_inventory | Backlog | Track in source system or spreadsheet |
| Reorder rules & min/max replenishment | core_inventory | Backlog | Manual reorder list |
| Barcode / RFID scanning workflows | webx + core_inventory | Backlog | External scanner with manual entry |
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.).Technical Reference
Manifest, security records, and external IDs for core_inventory.
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 ID | Name | Purpose |
|---|---|---|
| core_inventory.inventory_group_manager | Inventory Manager | Highest tier β policy & configuration access (when features land) |
| core_inventory.inventory_group_supervisor | Inventory Supervisor | Approval & reconciliation tier |
| core_inventory.inventory_group_user | Inventory User | Operator 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
model_yourmodel does not exist β replace this row with real ACLs when the actual stock models are added in subsequent modules.Source files
| Path | Role |
|---|---|
| __hmx__.py | Manifest |
| apps.py | Django AppConfig (CoreInventoryConfig) |
| security/inventory_groups.xml | Three group records |
| security/base.model.access.csv | Placeholder ACL row |
| admin.py | Empty Django admin registration file |