Skip to main content

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 materialProduct
Sold to customers❌ never✅
Appears on a storefront❌✅
Has variations❌✅
Appears in a BOM✅ as an ingredient✅ as the output
Ledger rows key onraw_material_idvariation_id

If a customer can buy it, it is a product — even if you also cook with it.

Figure 1 — The material master. 1 AI Suggestions · 2 Review AI · 3 New Material.

2. How raw materials spread through the application​


3. Step by step​

Step 1 · Create a material​

Figure 2 — The create drawer.

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​

Figure 3 — One row: identity · unit · stock status · reorder threshold · market price.
ColumnSourceNotes
Material identityname per languageThe EN: line beneath shows the English fallback
UnitThe linked unit's codeChip
Stock statuscurrent_stockWith a LOW STOCK pill when at or below the threshold
Reorder thresholdreorder_levelWhat the pill compares against
Market pricelast_purchase_priceAlso what a goods receipt line pre-fills from
Stock status here is not the ledger balance

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​

FieldTypeRequiredNotes
Nametext, per language✅Mixed key styles exist in the data — see the note below
Descriptiontextarea, per language—
Unit of measureselect✅From Units
Current stockdecimal—Manual. Not moved by operations
Reorder leveldecimal—Drives the LOW STOCK pill
Last purchase pricedecimal—Pre-fills receipt lines
Language keys are inconsistent in stored data

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:

ControlDoes
AI SuggestionsGenerates candidate materials from a description
Review AIOpens 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.

AI-created materials arrive with no stock and no price

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 trueOr else
At least one unit existsMaterials cannot be saved
A project is selectedThe list is empty
reorder_level is setNothing ever flags as low stock meaningfully

7. Downstream​

ChangeEffect
Change the unitEvery BOM quantity that referenced it now means something different — check them
DeleteBOM lines cascade away with it
Change last_purchase_priceFuture receipt lines pre-fill differently; history unchanged
Change reorder_levelThe LOW STOCK pill re-evaluates immediately

8. Troubleshooting​

SymptomCause
Everything says LOW STOCKcurrent_stock is 0 because operations do not write it — see §3
Market price is ₹0.00 everywhereNever set; AI-created materials default to 0
A material is missing from a BOM pickerWrong project, or it was deleted
Receipt unit cost pre-fills as 0last_purchase_price is 0 on that material
Review AI shows 1 but there are hundreds of suggestionsThe badge counts PENDING only