Troubleshooting Orbit Inventory
Symptom → cause, across the whole module. Each row links to the page that explains it properly.
1. Nothing is there
| Symptom | Cause |
|---|---|
| Any Inventory list is empty | No project selected in the Platform Context chip. Every screen is project-scoped |
| The catalogue is empty but products exist | The category rail is filtered — click Master Inventory |
| A module is missing from the menu | The .menu permission is separate from .view — Permissions |
| Nobody can reach a screen, including the org owner | Missing package_module_map row for the module |
| Product dropdowns are empty on operations screens | Wrong project, or the records belong to another one |
2. Stock numbers look wrong
Almost every report in this section has one cause. See How stock is counted.
| Symptom | Cause |
|---|---|
| A goods receipt did not raise the stock figure | Receipts write the ledger; the Stock column reads current_stock |
| A completed production run consumed nothing visible | Same split |
| A direct sale did not reduce stock | Same split |
| A stock adjustment did not adjust the displayed stock | Same split — on the screen whose purpose is to correct it |
Every raw material says LOW STOCK | current_stock is 0 and reorder_level is above it |
| Cockpit stock value is ₹0 | It reads current_stock — Cockpit |
| Storefront says "Sold out" but the ledger is positive | The gate reads current_stock |
| A storefront sale is missing from the ledger | Storefront orders write no ledger row |
| The ledger balance is negative | No availability check exists — over-consumption surfaces rather than blocks |
3. A control does nothing
| Symptom | Cause |
|---|---|
| Export Data on the ledger | No click handler, no endpoint. The feature does not exist — Ledger |
| A reason dropdown is always empty | The master list is empty on every org and has no write path — Adjustments |
procurement.approve has no effect | Never enforced; there is no approval step |
maintenance.waste has no effect | Wastage is gated by .adjust |
attribute.delete has no effect | DELETE is gated on .edit |
| A product card will not open | The role lacks products.edit — there is no read-only product page |
| Import is missing | products.import is separate from products.create |
| Seed defaults appears to do nothing | The defaults already exist; it does not duplicate |
4. Dates and ordering
| Symptom | Cause |
|---|---|
Production Created reads 01 Jan 0001, 00:53 | The list query never selects created_at — Production |
| The production list is in a strange order | Ordered by UUID, not by date |
| A cancelled order has a "completed" timestamp | completed_at doubles as ended at |
| Cockpit monthly figures reset | Calendar month, not rolling 30 days |
5. Products and variations
| Symptom | Cause |
|---|---|
| Product is published but nobody can buy it | It has no variation — Variations |
| The storefront shows no size selector | Variations carry no attribute values |
| A variation vanished after saving | The editor save is a full reconcile — Editor |
| Tax dropdown is empty | No tax categories configured in Finance |
| Two variations share a SKU | Nothing enforces uniqueness |
| Imported products are not sellable | The CSV has no variation columns — Import |
6. Production
| Symptom | Cause |
|---|---|
| Ingredient edits disappeared | The planned quantity was changed afterwards, which rebuilds the list — Lifecycle |
only DRAFT orders can be edited | The order is COMPLETED or CANCELLED |
completed orders cannot be cancelled — ledger already posted | By design. Post a compensating adjustment |
| Completion consumed nothing | The variation had no BOM when the order was created |
| Consumption exactly matched plan though it did not | Per-ingredient actuals were omitted, so planned was posted |
| Consumption is wildly too high | BOM quantities were entered per batch, not per unit — BOM |
7. The ledger is hard to read
| Symptom | Cause |
|---|---|
| Half the rows have no item name | Raw-material rows never render their name — Reading a movement |
Remarks are full of [REASON:…] / [CUST:…] | The ledger does not decode the encoding tags |
| Customer names and phones are visible | Same cause. Treat ledger.view as access to personal data |
Audit Info is always N/A | created_by is stored but never resolved to a name |
| A production run has no reference number | Production writes none; search the remark for the 8-character order id |
8. AI
| Symptom | Cause |
|---|---|
| No AI button | Missing …createwithai, or the utility is not entitled for the org — three gates |
| Approved materials are all LOW STOCK at ₹0 | Stock, price and reorder level default to 0 — Raw material suggestions |
| An approved material has no unit | The generator could not resolve one; the card shows --- |
| Review AI badge is small but the queue is huge | The badge counts PENDING only |
| A generated product is not in the catalogue | It is staged, not confirmed |
| A generated language is invisible | The app displays Bengali, English and Hindi only |
| Credits spent, nothing produced | A failed generation still consumes the call |
9. Permissions behave oddly
| Symptom | Cause |
|---|---|
| Attribute permissions do nothing | Wrong prefix — it is org.inventory.prodcat.attribute.* |
| A user sees a button but Save fails | The five operations screens perform no UI permission checks |
| Cannot separate "count" from "write off" | maintenance.waste is not enforced |
| An auditor cannot inspect a product | products.view is list-only |
10. Server prerequisites
| Symptom | Cause |
|---|---|
| Brochure generation never completes | Chromium missing on the host — Brochure |
| Generated images are multi-megabyte PNGs | cwebp missing on the host |
Both are operator concerns; no in-app setting fixes them.