Standard Costing & CVP
Standard cost cards, an eight-component variance decomposition that reconciles to the cent, optional sealed posting, and contribution margin with the full cost-volume-profit set. Analysis first, ledger only when you ask for it.
Why this module
Textbook variance analysis that ties to the cent.
Eight variances, one identity
The variance run splits the total cost variance into material price and usage, labour rate and efficiency, variable overhead spend and efficiency, and fixed overhead spend and volume. Because each element's two variances telescope, the eight lines always sum exactly to total actual cost minus total standard cost absorbed, and that identity is enforced by constraint.
Analysis-only by default
Posting is off by default. In analysis-only mode nothing touches the general ledger, so the module fits any inventory setup. Enable Post Variances and the run books the whole variance set as one balanced, sealed journal entry against per-kind variance accounts with an absorption account carrying the balancing leg.
Contribution margin and CVP
The contribution report reads the standard variable cost off the card, takes revenue manually or from posted invoice lines, and derives break-even units and revenue, target-profit units, margin of safety and the degree of operating leverage in one documented pass.
Day in the life
A period from standard to variance to margin.
You build a standard cost card for the product, one line per element with the standard quantity per unit and the standard price, set the normal capacity that budgets fixed overhead, and activate it, which freezes the standard so every later analysis reads the same figures. Each period you capture the actuals, the units produced and the total input quantity and cost per element, then run the variance decomposition. The eight lines appear with a favourable-negative sign convention and reconcile to actual minus absorbed. If you want it on the books you enable posting and the set books as one sealed entry. Separately you complete a contribution report for the period and read break-even, margin of safety and operating leverage straight off it.
Edge cases
The cases a cheaper module quietly gets wrong.
Each one is in the shipped code today.
The lines are engine output, never keyed. A manual line or edit would break the identity, so a constraint re-verifies that the variances sum to actual minus absorbed on any write outside the engine, and lines under a posted run are frozen.
A card freezes when it activates. Editing the product, capacity or an element line in place is blocked, because variance runs and contribution reports already reference the standard. A revision is a new card, and activating it supersedes the old one automatically.
Only one active standard cost card per product and company is allowed, enforced by constraint. Activation supersedes the prior active card, so a run can never quietly pick the wrong standard.
Every CVP ratio guards against a zero denominator and returns zero rather than an error, so a break-even or leverage figure with no contribution or no operating income does not crash the report.
A posted run cannot be deleted, re-keyed to another state or cancelled; the move link uses restrict ondelete, so the sealed variance entry always stays reconcilable to the run behind it.
What is inside
Built to do the job, end to end.
- Standard cost cards. One card per product or free-form item, a line per element (material, labour, variable overhead, fixed overhead) with the standard quantity per unit and standard price, plus a normal capacity that turns the fixed overhead rate into the period budget. The card computes standard cost per unit, variable cost per unit and fixed overhead per unit.
- Period actuals. Units produced and the total input quantity and cost per element captured per period, decomposed by the run against the card's standard.
- The variance run. The full two-way decomposition into eight components with a favourable-negative sign convention, the flexed-standard pivot exposed on each line, running totals for actual cost, standard cost absorbed and total variance, and the reconciliation identity enforced by constraint.
- Optional variance posting. Per-kind variance accounts, an absorption account and a general journal. When enabled, the run aggregates the lines per kind, books net adverse as debit and net favourable as credit, and seals the entry against edit.
- Contribution and CVP report. A per-product contribution margin line from the standard variable cost with manual or posted-invoice revenue, and the company-level CVP set: break-even units and revenue, target-profit units, margin of safety and degree of operating leverage.
- Security and isolation. Access rows for the EH user, manager and read-only auditor groups, a company isolation record rule, and variance posting gated to the EH Accounting Manager group.
Honest about the edges
What this does not do, so nothing surprises you.
- It does not integrate with stock moves or post standard-cost valuation layers; the input side is deliberately ledger-independent and inventory valuation integration is a documented later wave.
- It does not build a multi-input bill per element; each element carries a single standard quantity and price, so a mixed material or labour class is one blended line.
- It does not compute the standards for you; the standard quantities and prices, the normal capacity and the fixed costs are inputs you set.
- It does not run a mix and yield sub-variance or a three-way overhead split; the decomposition is the classic two-way set.
- It does not post to analytic accounts or tags on the generated variance entry.
- It holds amounts in the company currency of the run and report; multi-currency costing is out of scope.
Installing this module
A standard Odoo addon, installed the standard way.
This is a standard Odoo addon that ships Python models, not a data-only package. Install it by placing the module folder, together with its dependency modules, into a directory on your Odoo addons_path, then open Apps, update the apps list, and install it from there. Do not use the Apps to Import Module upload screen: that path does not load Python code, so a module with models will not run when installed that way. Once the folder is on the addons_path the usual Apps install and later upgrades work exactly as they do for any other addon.
odoo 19 standard costing, variance analysis odoo, material price variance, material usage variance, labour rate variance, labour efficiency variance, variable overhead spend variance, fixed overhead volume variance, standard cost card odoo, contribution margin odoo, CVP analysis, break even analysis odoo, cost volume profit, margin of safety, operating leverage, management accounting odoo, standard cost absorbed, over and under absorption
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
The New Zealand country pack for the ERP Heritage Employment Hero integration
A reusable two way synchronisation engine that keeps Odoo in step with the people and payroll platform, idempoten...
The Australia country pack for the ERP Heritage Employment Hero integration
Please log in to comment on this module