Raw materials
Route: /org/inventory/rawmaterials · Module: org_inventory_rawmaterial — 6 permissions
Permission to view: View Raw Materials
1. What a raw material is
Something consumed to make what you sell. Fish fillet, mustard oil, banana leaf.
| Raw material | Product | |
|---|---|---|
| Sold to customers | ❌ never | ✅ |
| Appears on a storefront | ❌ | ✅ |
| Has variations | ❌ | ✅ |
| Appears in a BOM | ✅ as an ingredient | ✅ as the output |
| Ledger rows key on | raw_material_id | variation_id |
If a customer can buy it, it is a product — even if you also cook with it.
2. How raw materials spread through the application
3. Step by step
Step 1 · Create a material
New Material opens a right-hand drawer.
The unit is required and cannot be changed casually later — every BOM quantity and ledger row is expressed in it.
Current stock, reorder level and last purchase price are plain numbers on the material.
Step 2 · Read a row
| Column | Source | Notes |
|---|---|---|
| Material identity | name per language | The EN: line beneath shows the English fallback |
| Unit | The linked unit's code | Chip |
| Stock status | current_stock | With a LOW STOCK pill when at or below the threshold |
| Reorder threshold | reorder_level | What the pill compares against |
| Market price | last_purchase_price | Also what a goods receipt line pre-fills from |
current_stock is a plain number on the material, set by this screen, by the create drawer or by an
API call. Goods receipts, production consumption, adjustments and wastage do not change it —
they write ledger rows and leave this column exactly where it was.
The figure above shows the split directly: materials whose stock was set by hand read 220, 400,
150; materials that have only ever been touched by operations read 0 and carry a LOW STOCK
pill regardless of what the ledger says.
Read How stock is counted before acting on this column.
Step 3 · Keep prices current
last_purchase_price pre-fills the unit cost on a goods receipt line. It is
not updated by posting one — set it here when your buying price changes.
4. Field reference
| Field | Type | Required | Notes |
|---|---|---|---|
| Name | text, per language | ✅ | Mixed key styles exist in the data — see the note below |
| Description | textarea, per language | — | |
| Unit of measure | select | ✅ | From Units |
| Current stock | decimal | — | Manual. Not moved by operations |
| Reorder level | decimal | — | Drives the LOW STOCK pill |
| Last purchase price | decimal | — | Pre-fills receipt lines |
Product names are stored under en; raw-material names on the same tenant carry en, Hindi and
Bengali — a mix of ISO codes and English labels in the same column. The UI resolves English
first, then en, so both render. It matters if you read this data through the
external API.
5. AI-assisted creation
Two surfaces, not one:
| Control | Does |
|---|---|
| AI Suggestions | Generates candidate materials from a description |
| Review AI | Opens the queue of every suggestion ever produced — PENDING / APPROVED / IGNORED |
The badge on Review AI counts PENDING only. On the reference tenant it reads 1 while the
queue holds 272 suggestions. See Raw material suggestions.
current_stock and last_purchase_price are left at 0, so every approved suggestion lands as
LOW STOCK at ₹0.00. Fill them in, or the low-stock tile and the receipt pre-fill are both meaningless.
6. The admin contract
| Must be true | Or else |
|---|---|
| At least one unit exists | Materials cannot be saved |
| A project is selected | The list is empty |
reorder_level is set | Nothing ever flags as low stock meaningfully |
7. Downstream
| Change | Effect |
|---|---|
| Change the unit | Every BOM quantity that referenced it now means something different — check them |
| Delete | BOM lines cascade away with it |
Change last_purchase_price | Future receipt lines pre-fill differently; history unchanged |
Change reorder_level | The LOW STOCK pill re-evaluates immediately |
8. Troubleshooting
| Symptom | Cause |
|---|---|
| Everything says LOW STOCK | current_stock is 0 because operations do not write it — see §3 |
| Market price is ₹0.00 everywhere | Never set; AI-created materials default to 0 |
| A material is missing from a BOM picker | Wrong project, or it was deleted |
| Receipt unit cost pre-fills as 0 | last_purchase_price is 0 on that material |
| Review AI shows 1 but there are hundreds of suggestions | The badge counts PENDING only |