In Odoo 19, set operation rates in Work Centers, individual costing rates in Employees and component quantities and durations in the BoM. Review valuation settings in Accounting and product categories, and the Cost of Production account on the Production location. Then reconcile the MO calculation, stock valuation and ledger as three separate views of cost.
This guide is for production managers and finance teams who need to explain a product's cost. A common problem is that the BoM estimate, the completed order and the accounting report show different numbers. The useful question is not simply “which number is correct?” It is “what does each number include, and which records produced it?”
For the wider operating process, use our Odoo 19 guide from materials to finished goods. Here, we focus on rates, cost calculations and reconciliation rather than production models or shop-floor rollout.
Three cost views: what each number tells you
| View | Question it answers | Where to check |
|---|---|---|
| MO Cost / Real Cost | What was expected, and what do recorded quantities, time and configured rates calculate? | Manufacturing order → Overview; capture the estimate before completion. |
| Inventory Valuation | What value is assigned to the components and finished stock under the chosen cost method? | Product stock movements and Inventory Stock report; use Accounting → Review → Inventory Valuation for reconciliation with accounting. |
| General Ledger | What has actually been posted to each account for the selected period? | Accounting → Reporting → General Ledger, with company, date and account filters. |
Compare the same product, quantity, company and date across these views. A unit cost, a batch total and an account balance are not directly comparable.
Key terms in manufacturing costing
- MO Cost: the manufacturing order's expected cost, based on components and planned operations. Review the estimate before execution; the displayed columns can change when an order is completed.
- Real Cost: Odoo's calculation using recorded production data, including quantities and operation time. It remains dependent on the rates and costs configured in the database.
- Work center: the production resource whose hourly operating rate contributes to operation cost. A work order records an operation performed there.
- Employee hourly cost: the configured rate for an identified employee. It is a costing input, not proof that Odoo has derived the amount from payroll.
- Manufacturing burden and overhead: indirect costs allocated to production. Define what each rate contains so the same expense is not included twice.
The distinction between expected and recorded costs follows the Odoo 19 manufacturing order cost documentation. It describes the work center's estimated employee rate separately from an individual employee's Hourly Cost.
Why the distinction matters: two business views
Illustrative situations. For an industrial equipment manufacturer, two technicians can work on the same machine at once. One hour of machine use and two employee-hours are different quantities. In project-based manufacturing, engineering and installation can also sit outside the MO's recorded production cost.
For a consumer goods producer, a small unit-cost difference can matter across a large batch. Check the number of finished units, actual consumption and the method used to value them before comparing the batch total with a product's unit cost. Neither scenario is solved simply by selecting average cost or increasing every hourly rate.
Build reliable costs in four steps
1. Set work center and employee rates with a clear scope
Enable Work Orders in Manufacturing when you need operation timing. Under Manufacturing → Configuration → Work Centers, review the operating cost per hour and, where available, the estimated cost per employee.
The work center's per employee rate is used for the estimated MO cost. For the named-employee workflow described in Odoo 19, the individual employee's Hourly Cost is set in Employees → Settings → Application Settings and contributes to Real Cost when the relevant operator and time are recorded.
Confirm that the required employee/work-order integration is installed and available in the chosen edition. A database without the relevant integration or operator records should not be assumed to calculate named-employee labour in the same way.
Agree what the rates include. For example, a machine rate might cover depreciation and energy, while the employee rate covers the agreed employment costs. If supervision or benefits are already included in one rate, do not add them again through another allocation. The configured rate does not automatically become an audited all-in employment cost.
2. Check components, BoM quantities and operation duration
Use the bill of materials to define the quantity basis, component requirements and operations. Check the units of measure, planned duration and assigned work center. During execution, record the actual consumption, time and output quantity.
A vendor's quoted price is not necessarily the value of the components consumed from stock. Purchase prices, product cost, stock valuation and landed costs have different roles. Use a consistent valuation basis for the materials in the example or comparison.
The finished product's costing method also matters:
- Standard Price: finished-stock valuation uses the configured standard cost; a different MO calculation does not automatically replace that standard with the actual cost of each build.
- AVCO: incoming production value contributes to the product's average stock cost. The average across stock can differ from the cost of one MO.
- FIFO: production value and subsequent outgoing valuation follow the relevant FIFO flow. A displayed product cost is not a substitute for reviewing the valued movements.
Choose the method with finance rather than treating AVCO as a universal recommendation. The Odoo 19 manufacturing valuation code distinguishes Standard Price from FIFO/AVCO and takes consumed movement values and operation costs into account.
3. Configure the accounting roles in the right places
In Odoo 19, review company-level inventory valuation settings in Accounting → Configuration → Settings → Inventory Valuation. Product categories can override relevant defaults. Costing method and accounting valuation method are separate decisions.
| Setting | Where to review it | Purpose |
|---|---|---|
| Valuation method, cost method, valuation account and journal | Company inventory valuation settings; relevant product-category overrides. | Define how stock is valued and reflected in accounting. |
| Cost of Production account | The relevant location of type Production, in its Accounting information. The Accounting settings include a link to these locations. | Provide the production counterpart account where that accounting flow applies. |
| Work center Expense Account | Work center accounting configuration, with the product expense account used as a fallback in the standard posting code. | Identify the expense side of the operation-cost posting where its conditions are met. |
Do not replace the Production location account with a supposed “new category-only” setup. The Odoo 19 valuation documentation explicitly places Cost of Production on the Production location. Company and category settings have other roles.
For the standard operation-cost posting in Odoo 19, the source code checks for perpetual valuation and a configured production-location account. A completed MO does not therefore guarantee the same journal entries in every database.
4. Reconcile the order, stock value and ledger
Open the MO's Overview and inspect component and operation costs. Compare them with the valued stock movements and the applicable accounting entries. Record the expected calculation before completing the order: Odoo 19 documentation notes that the MO Cost column updates to match Real Cost after completion.
Under Periodic (at closing), accounting stock value is updated through the closing process. Under Perpetual (at invoicing), invoices and the closing process are part of valuation, while configured production accounting has its own rules. Review the Odoo 19 valuation scenarios rather than assuming every movement produces an identical journal entry.
A separate WIP posting may be needed for unfinished production at a reporting date. Our Manufacturing guide explains WIP posting and the generated reversal. That temporary snapshot should not be confused with final finished-product valuation.
Example: planned cost of €180, recorded cost of €230
Illustrative calculation. One finished unit uses €30 of components. The plan requires one hour at a work center costing €100 per hour, with one operator estimated at €50 per hour. The actual operation takes 75 minutes, and the recorded operator's configured rate is €60 per hour.
Assume the same €30 component valuation in both calculations, one operator throughout, no scrap, no by-products and no additional allocations. Machine duration and employee time are both 1.25 hours in this example.
| Cost element | Planned calculation | Recorded calculation |
|---|---|---|
| Components | €30 | €30 |
| Work center | 1 hour × €100 = €100 | 1.25 hours × €100 = €125 |
| Employee | 1 hour × €50 = €50 | 1.25 hours × €60 = €75 |
| Total for one finished unit | €180 | €230 |
The €50 difference consists of €25 additional work center cost and €25 additional employee cost. The latter includes both extra time and the difference between the estimated and individual rate. It is a reason to review the assumptions, not automatic evidence of waste.
The €230 is a manufacturing calculation using configured rates; the €75 employee element is not a payroll transaction.
Check the €180 → €230 example in Odoo 19
Use a test order with the assumptions above. This is a verification route for the illustrative calculation, not a claim that these figures were executed in a client database.
- Capture the plan. Open the BoM and check its quantity basis: one finished unit, components valued at €30 and one 60-minute operation. Open the work center and check €100 per hour plus the estimated employee rate of €50. With the required employee costing integration, confirm the actual operator's Hourly Cost is €60.
- Open the order before production. Go to Manufacturing → Operations → Manufacturing Orders, open the test MO and click Overview. Check that the expected inputs explain €180. Save this baseline before completion, because Odoo can update the MO Cost column when the order is completed.
- Check recorded execution. On the MO, review component quantities and the Work Orders tab. Verify 75 minutes of operation time and the identified employee's 75 minutes of work. Pause or finish the work correctly so a running timer does not distort the comparison. Keep material value at €30 and produce one unit.
- Explain Real Cost. Reopen Overview. The target arithmetic is €30 + €125 work center + €75 employee = €230. If the result differs, inspect the operator, rates, time units and consumption before changing the accounts.
- Check finished-stock value. After completing the MO, inspect the finished product's associated stock movements and valuation. Under Standard Price, compare against the configured standard. Under AVCO, distinguish this receipt's value from the blended stock average. Under FIFO, review the production receipt and subsequent valued outgoing movements.
- Reconcile accounting. Open Accounting → Review → Inventory Valuation and compare the same company and date with the General Ledger. Review the relevant stock, production and expense accounts and any closing or WIP/reversal entries. Explain the posting conditions before expecting a ledger amount to equal €230.
The Odoo 19 MO cost guide describes Overview and time/rate inputs. The valuation guide covers the financial reconciliation.
Furniture manufacturing: relevant causes of cost differences
For a furniture producer, use the following checks to investigate a discrepancy. These are process-based diagnostic examples, not measured claims about a particular factory.
- Board yield and cutting waste. The BoM may estimate usable panels while the workshop consumes whole boards. Compare actual board consumption with the estimate and record losses consistently. Keep reusable offcuts distinguishable from discarded material; Odoo's by-product documentation uses wood recovered from chair production as an example. A by-product can have a cost share, so check allocation as well as quantity. A scrap movement should not be treated as automatically adding its full value to the saleable unit.
- Sheets, square metres, metres and pieces. Check the quantity basis for panels, edge banding and hardware. Check the configured unit relationships and conversion factors in Odoo 19; a sheet-to-area relationship needs a known sheet size. Deriving quantities from variable dimensions or importing a cutting list can require an agreed product model or integration. A supplier pack and a BoM unit must describe the same physical requirement.
- Customer-specific variants. A change in cabinet width, finish, hinges or handles can leave a generic BoM estimate different from the order actually built. Check the selected variant, relevant BoM components, approved drawing and substitutions recorded on the MO.
- Machine time versus hands-on time. CNC cutting, sanding, finishing and assembly use resources differently. Two assemblers working for one hour represent two employee-hours. Drying or waiting time should not automatically become paid operator time in the model; review what each recorded duration and rate covers.
- Setup, rework and finished quantity. A batch setup spread over ten cabinets differs from one cabinet; remaking a damaged door adds material or operations. Check where these costs were recorded, partial output, scrap and any backorder before dividing a total by saleable units.
- Freight, subcontract finishing and installation. A timber quotation can exclude freight; an external coating service may follow a subcontracting flow; design, delivery and on-site fitting can sit outside the manufacturing order. Compare the same cost scope instead of treating project margin as MO margin. See landed costs in Odoo for incoming transport costs.
To find patterns across furniture products, use Production Analysis to compare products and periods, then return to the underlying orders. Cutting-list imports, nesting/yield optimization and a report combining manufacturing with installation costs may require additional integration or development.
Manufacturing cost diagnosis: symptom → what to check
| Symptom | What to check |
|---|---|
| Employee cost is missing or unexpected | Installed employee/work-order integration, recorded operator, employee Hourly Cost and employee time. Distinguish the work center's estimated rate from the individual's rate. |
| Operation cost is too low | Minutes versus hours, recorded duration, operating rate, number of operators and incomplete time records. |
| Materials differ from the estimate | Actual quantities, units, component valuation method, valued receipts and relevant additional costs; do not compare only with a vendor quotation. |
| Overhead appears inflated | Whether the same cost is included in both employee and work center rates or in another allocation. |
| MO cost differs from the stock or ledger amount | Unit versus batch, output quantity, Standard Price/AVCO/FIFO, valuation method, posting date, WIP/reversal and closing entries. |
| Expected operation-cost journal entry is absent | Perpetual/periodic setting, the relevant Production location's Cost of Production account, work center/product expense accounts and whether the MO and costs are complete. |
Four practical questions
Where do I configure manufacturing costs in Odoo 19?
Use the settings table above to assign each input to its owner: production maintains components and operations, the responsible team maintains employee rates, and finance approves accounts and valuation policy.
What is the difference between MO Cost and Real Cost?
MO Cost starts with the plan; Real Cost uses recorded execution and configured costs. The €180 → €230 example shows how duration and employee rate explain the difference.
Why does Real Cost differ from inventory valuation or the ledger?
First align quantity, company and date using the three-view table. Then check the cost method and posting conditions in steps 5–6 of the example.
When is customization needed?
Standard costing and the relevant apps can cover component and operation costs. Additional allocation drivers, external time imports, special approvals and consolidated management reports may need configuration, integration or development. First test whether standard records answer the question.
What is standard, localization-dependent or additional?
Standard with the required apps and settings: BoMs, operations, work center rates, recorded production costs and the applicable valuation/accounting flows. Named-employee costing needs its employee integration and data; confirm edition and installed modules.
Localization and accounting policy: the chart of accounts, permitted capitalization, reporting treatment and cost-allocation policy. An Odoo Real Cost figure is not a universal statutory definition of production cost.
Additional configuration or development: company-specific allocation rules, external systems and reports beyond the installed standard workflow. Payroll is not required just to enter a costing rate, and a costing rate does not prove automatic synchronization with payroll.
Start with one product and a traceable calculation
Choose a representative product, capture the expected cost, complete a controlled order and explain every difference using recorded quantities, time and rates. Then reconcile stock valuation and accounting with finance. Useful measures include unexplained cost variance, missing time records and unresolved valuation differences.
ERPixel can connect production setup with stock and financial processes through Odoo implementation. If the system is configured and the team needs to understand the records, see Odoo Manufacturing training.
