Odoo 19 covers what most Indian manufacturers need in its Community apps: multi-level bills of materials, work centres with hourly costs, job work through the Subcontracting setting, e-way bills and challans on the transfers that move goods to a job worker, and Standard, FIFO or AVCO costing. What Odoo does not provide as standard is a GST ITC-04 return. Odoo holds the challans and receipts you need for it, but someone still has to prepare and file the form.
For the general tour of the Manufacturing app, read Manufacturing and MRP in Odoo 19. This post is about the parts that are specific to India and the decisions that are hard to change later.
Bills of materials for Indian shop floors
The BoM drives reservations, purchase suggestions and cost, so it has to match what the floor actually uses. Three points come up in almost every Indian implementation:
- Units of measure. Chemicals are bought in drums and dosed in litres, yarn is bought in bags and issued in kg, wire is bought in coils and cut in metres. In Odoo 19 each unit is defined relative to a reference unit, so a 200-litre drum converts to litres automatically. Odoo won't convert weight to length, though. For steel bought by the tonne and used by the metre, choose one stock unit and convert on the vendor price.
- Scrap and process loss. If a casting always loses 4% in fettling, put the gross quantity on the BoM. Record unusual waste as scrap on the manufacturing order so it is costed and shows in reports.
- By-products. Saleable offcuts, such as trimmings, cotton waste or metal turnings, can be by-products with a cost share. Part of the production cost then moves to them, and the main product's cost stays realistic.
Keep the HSN code and GST tax on each product right from day one. Finished goods are invoiced and e-invoiced from those same records, as the GST guide explains.
Job work in Odoo: the Subcontracting setting
Job work is the Subcontracting feature in Manufacturing › Configuration › Settings. It is in Community (mrp_subcontracting). The flow:
- Subcontracting BoM. On the product the job worker returns, create a BoM of type Subcontracting, name the job worker as subcontractor, and list the inputs you supply.
- Vendor price line. On the same product, add the job worker as a vendor with the job-work charge per unit. That is the price on the purchase order.
- Purchase order. Order the finished or processed product from the job worker. Odoo creates a resupply transfer for the inputs, if the component uses the Resupply Subcontractor on Order route, or you send stock to the subcontractor location yourself.
- Send inputs. Validate the outgoing transfer. Stock moves to the job worker's location in your books, because it is still your stock.
- Receive goods. When the processed goods come back, validate the receipt. Odoo records a subcontracting manufacturing order that consumes the inputs at the job worker's location and adds the finished goods to stock.
Job workers can also use the subcontracting portal to record what they produced, including lots and serial numbers. If a vendor delivers raw material straight to the job worker, the subcontracting dropship module covers that flow.
The GST side of job work: challans, e-way bills and ITC-04
Under section 143 of the CGST Act, a registered principal can send inputs and capital goods to a job worker without paying tax. The inputs must come back, or be supplied from the job worker's premises, within one year of being sent. Capital goods have three years. Moulds and dies, jigs and fixtures, and tools are not subject to these limits. If the deadline passes, the goods are treated as supplied by you on the day they were sent out, and tax is due. The Commissioner can extend the limits on sufficient cause, by up to one year for inputs and two years for capital goods.
The goods travel under a delivery challan (rules 45 and 55 of the CGST Rules), and an e-way bill where one is needed. In Odoo 19, the outgoing resupply transfer has a Create e-Waybill / Challan button once it is validated. In the e-way bill, set the document type to Delivery Challan with the sub-type Job Work. Odoo defaults outgoing transfers to the Others sub-type, so this has to be changed. Goods coming back use Job Work Returns. If no e-way bill is needed, Use as Challan keeps the document in Odoo and prints it as a challan without sending it to the portal.
The principal reports these movements on Form GST ITC-04. According to the GST portal, since 1 October 2021 taxpayers with aggregate turnover above ₹5 crore in the previous year file half-yearly: April to September by 25 October, and October to March by 25 April. Others file once a year, by 25 April.
| ITC-04 needs | Where it is in Odoo 19 |
|---|---|
| Challan number and date for goods sent | The resupply transfer and its e-way bill or challan |
| Description, HSN, quantity, unit and taxable value | Transfer lines and the product's HSN/SAC Code |
| Goods received back, and against which challan | The subcontracting receipt and its purchase order |
| Job worker's GSTIN and state | The job worker's contact |
| Inputs still with each job worker | Stock on hand at the subcontracting location, per job worker |
We found no standard ITC-04 report in Odoo 19 Community, and we have not confirmed one in Enterprise either. In practice you export the transfers for the period, check them, and prepare the return in the GST portal's offline tool. The age of stock at each job worker is the figure to watch: anything close to the one-year limit needs to come back or be invoiced.
Work centres and operation costs
Work centres are optional. Turn on Work Orders when you need capacity planning or want machine and labour time in the product cost. For each work centre, set the working hours, time efficiency, setup and cleanup time, and Cost per hour. Each BoM operation then costs its duration multiplied by that hourly rate.
For a costing figure that means something in an Indian plant, build the hourly rate from the real cost of running the machine: power (often the largest part for furnaces, moulding and CNC), operator wages, consumables and maintenance, divided by realistic running hours. A press shop with ten presses but one setter is often better modelled as fewer work centres with alternatives, so the schedule matches what people can actually do.
Product costing methods in Odoo 19
Odoo 19 sets the costing method on the product category, with a company default. There are three choices:
| Method | How the cost moves | Fits |
|---|---|---|
| Standard Price | A fixed cost you set or roll up from the BoM. Actual purchase and production costs don't change it. | Repetitive manufacturing with stable inputs, where you review the cost each period |
| Average Cost (AVCO) | Weighted average updated on each receipt and production | Most Indian SMEs; commodity inputs whose price moves |
| First In First Out (FIFO) | Each layer keeps its own cost and is consumed in order | Lot-tracked or perishable goods, and imported inputs priced per shipment |
The category also sets Inventory Valuation. Periodic (at closing) means Odoo suggests the stock entries in the valuation report at closing. Perpetual (at invoicing) means it posts them automatically when products are billed or invoiced. Decide both with your accountant before the opening stock is loaded. Changing them later revalues stock.
For manufactured products, the Compute Price from BoM button on the product adds up the component costs, the operation costs and, for subcontracted products, the job worker's price, less any by-product cost shares. On a manufacturing order, the Overview puts the BoM cost, the MO cost and the real cost side by side, which is where you see whether your BoM and work centre rates are honest. Freight on subcontracting receipts can be added to product cost with landed costs.
A rollout order for Indian manufacturers
- Products with HSN codes, GST taxes, units of measure and a costing method agreed with your CA.
- BoMs for your highest-volume products, tested on a real batch against the floor's actual consumption.
- Job work: subcontracting BoMs, job-worker vendor prices, and challan or e-way bill types on resupply transfers.
- Work centres with hourly costs, once BoM consumption is reliable.
- A monthly check of stock at each job worker, and the ITC-04 export routine before the first due date.
Next, see how inventory and warehouse steps fit around production, and how to fix e-way bill errors when challans get rejected. If you're moving from Tally stock journals or spreadsheets, we can plan the BOM and job-work migration with you.
Questions we get asked
Does Odoo support job work for Indian manufacturers?
Yes. Odoo 19's Subcontracting feature, part of Community, models job work: a Subcontracting BoM names the job worker and the inputs you supply, a purchase order covers the job-work charge, inputs move to the job worker's location, and the receipt consumes them. On the outgoing transfer you can create an e-way bill or challan with the Delivery Challan type and Job Work sub-type.
Can Odoo generate the GST ITC-04 return?
We found no standard ITC-04 report in Odoo 19 Community and have not confirmed one in Enterprise. Odoo does hold the data the return needs: challans and e-way bills for inputs sent, subcontracting receipts for goods returned, quantities, values, HSN codes and job worker GSTINs. Most companies export these transfers each period and prepare ITC-04 with the GST portal's offline tool or through a third-party module.
What is the time limit for job work goods under GST?
Under section 143 of the CGST Act, inputs sent for job work must come back or be supplied from the job worker's premises within one year, and capital goods within three years. Moulds and dies, jigs and fixtures, and tools are not covered by these limits. If the deadline passes, the goods are treated as supplied on the day they were sent out, and GST becomes payable.
Which costing method should an Indian manufacturer use in Odoo?
Average Cost (AVCO) suits most Indian SMEs whose input prices change often, because each receipt and production updates the cost. Standard Price suits stable, repetitive production where you set and review the cost each period. FIFO suits lot-tracked, perishable or shipment-priced imported inputs. Set it on the product category in Odoo 19, agree it with your accountant, and decide before loading opening stock.