Way4Tech
โœ… Operations

Odoo Quality Implementation

Control points, checks, alerts.

Define quality control points across receipt, production, and delivery, with pass/fail, measures, and alert workflows.

Odoo Quality is Enterprise only. The whole family, from the base quality module through quality_control, the manufacturing and repair bridges and the IoT bridge, ships under the OEEL-1 licence, so the first decision on a quality project is a licence decision rather than a configuration one. The app puts control points on receipts, internal transfers, deliveries, manufacturing orders and individual work order steps. Answering a check stamps the responsible user and a control date on the record, and the status is one of three values: To do, Passed or Failed.

The data model is three objects. A control point is the rule: which products or product categories, which operation types, which test, how often, and whether the check is raised per operation, per product or per quantity. A quality check is the answer somebody gave. An alert is the follow up, carrying a root cause, a vendor, a corrective action and a preventive action. Most of what a quality manager asks for is a report across those three tables rather than a feature hidden inside them.

What separates a fast project from a slow one is knowing which of those reports Odoo already draws. Each Measure point computes the average and standard deviation of its own answered checks, and both checks and alerts ship with graph and pivot views called Quality Check Analysis and Quality Alert Analysis. Cp and Cpk, control charts with limits calculated from the process, AQL sampling tables and supplier scorecards are not there, and no amount of configuration produces them. The detail below is what decides which side of that line your requirements sit on.

Who Odoo Quality is for

  • → Manufacturers already running Odoo MRP who want in process checks on work order steps in the Shop Floor interface rather than a clipboard at the end of the line.
  • → Importers and distributors doing goods in inspection, where the real requirement is a dated, defensible reason for rejecting a supplier delivery and a location to put the rejected pallet in.
  • → Food, cosmetics and pharmaceutical businesses that must tie an inspection result to a lot and retrieve it years later. The lot form carries Quality Checks and Quality Alerts smart buttons that count and open every check and alert recorded against that lot.
  • → Companies that subcontract production and need the check to happen on the subcontracted receipt. The bridge for that is flagged auto_install, so it appears on its own once quality and subcontracting are both present.
  • → Not for teams staying on Odoo Community. There is no Odoo quality module under a Community licence, and the OCA alternative covers inspections and results without worksheets, spreadsheet checks, IoT capture or work order steps.
  • → Not for a regulated drug or device manufacturer expecting a validated system with 21 CFR part 11 signatures out of the box, unless computer system validation is a funded workstream in its own right.

Key features

  • ✓ Control points & tests
  • ✓ Pass/fail & measure
  • ✓ Quality alerts
  • ✓ Non-conformance workflow
  • ✓ ISO 9001 ready
  • ✓ SPC charts

What Odoo Quality actually does

Control points, and the two settings that decide the workload

A control point targets products or whole product categories and one or more operation types, and at least one operation type is mandatory, so a point is never warehouse neutral. Control per is then Operation, Product or Quantity: Operation raises one check for the whole transfer, Product one per product, Quantity one per move line with partial quantities allowed. Control Frequency is All, Randomly with a percentage, or Periodically with a day, week or month interval. Odoo 18 added a fourth value, On-demand, for points that are requested from the transfer rather than generated with it. There is also a percentage tested within the lot, defaulting to 100, so you can inspect a fraction of a received lot instead of all of it.

Test types, including the four that only work on work orders

A standard control point offers Instructions, Take a Picture, Pass - Fail, Measure, Worksheet once the worksheet bridge is installed, and Spreadsheet from Odoo 18 onwards. Register Production, Register Consumed Materials, Register By-products and Print label are different: they come from the mrp_workorder module, they belong on manufacturing steps, and the quality check form filters them out with an explicit domain on their technical names. Register By-products also ships archived, so it does not appear in the list at all until somebody unarchives the test type. Do not plan a print label step on a receipt.

Measure checks judge themselves, on the tolerances only

A Measure point holds a norm, a minimum tolerance, a maximum tolerance and a norm unit. When the operator enters a reading, Odoo compares it against the two tolerances, sets the result, and shows a message naming the value measured and the range it should have fallen in. Three details matter at design time. The norm plays no part in the comparison, it only feeds an onchange that copies itself into the maximum while that maximum is still zero. The norm unit is a free text field defaulting to mm, not a link to the unit of measure table. And measured values round to the decimal precision record named Quality Tests, which ships at two digits, so a reading taken to three decimal places is stored rounded until you change it.

Failure locations move the rejected quantity, on transfers

A control point can list Failure Locations, restricted to internal locations. When a check fails, Odoo redirects the failed quantity to one of them and records on the check where it went, splitting the move line and raising a second check for the remainder when only part of the line failed. Two limits are worth knowing before you promise it. The routing runs only when the failed check belongs to a transfer, so a check on a manufacturing order does not move anything. And the field is hidden until Storage Locations is enabled in Inventory settings, with Odoo 17 and 18 hiding it further unless Control per is set to Quantity. Odoo 19 shows it for every test type except Instructions and Take a Picture.

Open checks block validation, failed checks do not

Validating a transfer with an unanswered check does not go through. Odoo opens the check wizard first, and if anything is still at To do when the transfer completes it raises an error telling the user the quality checks are outstanding. A check that has been answered and failed blocks nothing, because it is no longer pending. That asymmetry is the most useful behaviour to understand before you design the process, since it decides where the physical hold has to live and who owns it.

Alerts hold the CAPA fields and the dates to measure them

An alert carries a description, a corrective action, a preventive action, a root cause from a configurable list, tags, a priority, a responsible user, a team, the product, the vendor and the lots. It also stamps Date Assigned and Date Closed, so time to close is a real number rather than an estimate. Stages are configurable and each one has an Alert Processed flag, which is what tells the kanban and the reports that an alert is genuinely finished. Odoo ships four stages, New, Confirmed, Action Proposed and Solved, and every quality team also owns an email alias, so alerts can arrive by email.

Shop Floor and instrument capture

Work order steps render in the Shop Floor interface introduced in Odoo 17, built for a touchscreen at the work centre. With the IoT bridge a control point gets a device, and the device type decides what the step can do: a measuring device or a scale feeds a Measure check, a camera answers Take a Picture, a printer serves Print label. The reading is stamped when it is taken rather than when somebody types up the shift, which is usually the difference between data people trust and data they argue about.

How we configure Odoo Quality

Start from the failures you already have

Pull the last twelve months of customer complaints, supplier rejections and scrap, then count the causes. Build control points for the causes that repeat and cost money. The alternative, one control point per line of the product specification, produces an inspection that runs to eleven minutes, so operators learn to click through it and the resulting data is worse than no data at all.

Fix Control per and Control Frequency before writing any tests

Those two fields decide how many records a day the system creates and how much of the shift goes into answering them. Quantity level control on a receiving bay generates a check per move line, which is right for serialised goods and punishing for bulk. A bay handling two hundred pallets a day belongs on Randomly with a percentage, or on a reduced percentage tested within the lot, which sits at 100 until you lower it. Set both per point, and revisit them once a quarter of real check data exists.

Prepare the measurement data as a per product table

Measure points need a norm, a minimum, a maximum and a unit for each product, and that data normally lives in a technical drawing or an engineering spreadsheet rather than anywhere in the ERP. Extract it once, agree who owns changes to it, and load it with both tolerances explicit rather than assumed. Decide the unit convention before loading, because the field is free text and you will otherwise end up with mm, MM and millimetre on three points measuring the same thing. If any characteristic needs more than two decimals, raise the Quality Tests decimal precision first, since it applies to every point in the database.

Create the failure locations and lock them down

Enable Storage Locations, create the quarantine locations as internal locations, and list them on the points that need them. Then restrict access so warehouse staff cannot pick from those locations in normal operation, and name the person allowed to release or scrap. Odoo will route the failed quantity there for you. It will not stop somebody taking the stock back out again, and that is the part you configure.

Choose the answering surface deliberately

A chain of twenty separate checks is punishing to answer. The two ways to put several fields behind one check are a worksheet template, whose fields are designed in Studio because the worksheet module depends on it and the design button is limited to administrators, or from Odoo 18 a spreadsheet template with a nominated success cell, where the check passes when that cell evaluates to TRUE. A spreadsheet suits dimensional inspection with formulas and calculated results and carries no Studio dependency. Pick one per inspection type and stay with it.

Teams, stages, alias and the closing rule

Quality teams route alerts and stages describe your process. Keep the stage list short and process shaped rather than department shaped, and set the Alert Processed flag only on stages that truly mean closed, because reporting keys off that flag. Agree at design time who is allowed to close an alert and what evidence closing it requires. Use the team alias if you want production or customer services to raise alerts without holding a full user seat.

Where Odoo Quality projects go wrong

A failed check does not hold the goods, an open one does

Odoo blocks validation while a check is unanswered and lets the transfer through once it is answered, even with a fail. Routing the failed quantity into a failure location records where it went, it does not lock it, and on a manufacturing order it does not even do that. Restricted access on the quarantine location, a named release authority and a written rule about scrapping are what actually stop rejected material rejoining stock. Design those three before go live rather than after the first argument about a released pallet.

Tolerances decide the result, the norm does not

Pass or fail on a Measure check is computed against the minimum and maximum tolerance only. A point imported with a norm and blank tolerances therefore has a range of zero to zero and fails every reading. The onchange that copies the norm into the maximum fires when a user types in the form, never on import. A one sided specification loaded as a symmetric range has the opposite effect and passes parts it should reject. Check tolerance direction on the loaded records, not on the source spreadsheet.

Statistics stop at average and standard deviation

Each Measure point computes the mean and standard deviation of its own checks, and Quality Check Analysis groups, pivots and graphs the rest, which answers most of what people actually ask. Control limits calculated from the process, capability indices such as Cp and Cpk, and rule based out of control detection are absent. So is a supplier scorecard: the alert carries a vendor and a root cause, so acceptance rate by supplier is a pivot, but nothing tightens sampling automatically after a bad run or blocks a vendor. Scope that reporting up front and price it.

Control point sprawl, and deleting instead of archiving

A point per product looks tidy in month one and is unmaintainable by month six, when four hundred exist and nobody knows which are current. Use product categories and operation types so one point covers a family. Archive rather than delete: the link from a check back to its point is not protected, so removing a point leaves historical checks with their answers intact and the rule that produced them blank, which is exactly the trail an auditor asks to follow.

Backorders quietly delete the checks nobody answered

Receive part of a purchase order and create a backorder, and Odoo moves the checks belonging to the delivered lines onto the completed transfer, deletes any still sitting at To do on the original, and generates fresh checks against the backorder. Cancelling a transfer removes its pending checks the same way. This keeps the data tidy, and it means an unanswered check leaves no trace, so a compliance count of checks raised against checks answered will always agree with itself. If you need evidence that an inspection was skipped, that has to come from the transfer history, not from the quality tables.

ISO 9001 is an audit of your organisation

No software makes anyone certified. Odoo holds a good share of the evidence: dated inspection records naming the user who answered them, non conformances with corrective and preventive actions, traceability to lot level, and documents attached where an auditor can find them. Management review, the internal audit programme, design control and the quality manual stay outside the app. An auditor watches the process being followed, then asks the system to prove it happened.

What it works with

  • + Odoo Manufacturing, where the quality bridges put checks on the manufacturing order and on individual work order steps
  • + Odoo Inventory, for the lots, serials and internal locations that a rejection depends on
  • + Odoo Purchase, so a rejected receipt becomes a return transfer and then a vendor credit note in Accounting
  • + Odoo Subcontracting, whose quality bridge installs itself and puts the incoming check on the subcontracted receipt
  • + Odoo Repair, which gained its own auto installing quality bridge in Odoo 18, so a repair order can carry checks
  • + Odoo Barcode, where a dedicated bridge lets checks be answered on the scanner during the transfer instead of afterwards at a desk
  • + Odoo IoT, mapping a measuring device or scale to a Measure step, a camera to a picture step and a printer to a label step
  • + Odoo Studio and Odoo Spreadsheets, the two ways to build an inspection form that holds more than one field

Odoo Quality by country

Saudi Arabia (KSA)

Imports need a product certificate of conformity and a shipment certificate through SABER before customs release, and SFDA registration governs food, cosmetics, drugs and devices. An Instructions step only asks the operator to acknowledge, so it cannot force anyone to attach the certificate. Use a picture step or a worksheet field where the document has to exist before the receipt is validated. One trap for Arabic sites: test type names are translatable, but the title and the instruction note you write on a control point are plain fields stored in one language, so an Arabic shop floor reads English steps unless you write them in Arabic to begin with.

United Arab Emirates

MoIAT runs ECAS and the Emirates Quality Mark, while food is supervised by Dubai Municipality in one emirate and ADAFSA in another. A group trading across both cannot run a single incoming checklist. Because operation types are mandatory on a control point and belong to a warehouse, the clean pattern is a separate operation type per emirate with its own point set behind it, rather than one global point carrying exceptions. Halal evidence belongs against the lot, since that is what a customer or an inspector asks you to produce.

Pakistan

PSQCA operates a mandatory certification mark over a listed set of products, and DRAP governs pharmaceutical manufacture with GMP inspection and batch release. Release is a gate, not a check: the finished lot must be unavailable until a named person signs. Odoo gives the lot its quality history but no release status field, so the gate has to be built as a restricted quarantine location that only the release authority can move stock out of, with the signature captured on the alert or the check that authorises the move.

India

BIS quality control orders keep pulling new product categories into mandatory ISI certification, FSSAI covers food labelling and shelf life, and CDSCO covers medical devices. The modelling problem nobody budgets for is the third party laboratory. A sample sent out is a stock move on a delivery challan and needs an e-way bill once consignment value passes the threshold, fifty thousand rupees for interstate movement, so build it as a real transfer to a sample location rather than a note in a logbook.

Bangladesh

BSTI certification is mandatory for a listed set of products, and in garments the operative standard is the buyer contract and the RSC factory audit rather than any plant internal rule. The structural question for a cut and make operation is where the check sits. Production that leaves the building goes out as subcontracting, and the subcontracting quality bridge installs itself and puts the inspection on the subcontracted receipt, which is the moment the goods and the paperwork are both in front of somebody.

Turkey

TAREKS screens regulated imports before customs clearance, TSE certification covers the domestic market, and goods sold into the EU still need CE marking with the technical file behind it. Every answered check stores the user who answered it and the timestamp, so the quality check table is personal data under KVKK and inherits the restrictions on transferring it abroad. That makes hosting location a question to settle with the client at project start rather than during the go live weekend.

Germany

Automotive supply runs on IATF 16949 and VDA process audits, and a customer complaint arrives expecting an 8D report, with containment commonly demanded inside 24 hours. An alert covers the problem description, the corrective action, the preventive action and a root cause, which is a subset of the eight disciplines. Odoo ships exactly four root cause records, Workcenter Failure, Parts Quality, Work Operation and Others, so the cause catalogue needs extending to whatever your customer audits against, and the 8D document itself is a worksheet or a custom report.

United States

For FDA regulated manufacture, 21 CFR part 11 sets the bar for electronic records and signatures and cGMP requires the procedures behind them. Odoo stamps the user and the control date on every check, which is an audit trail but not a compliant signature, and a validated installation is a qualification workstream with documentation of its own. FSMA rule 204 adds lot level traceability duties for listed foods, and that work lands on the Inventory configuration far more than on the Quality app.

Odoo Quality FAQs

Is Odoo Quality available in Community?

No. Every quality module carries the Enterprise licence in Odoo 17, 18 and 19, so this is a subscription decision rather than a per app purchase. The OCA publishes a quality control set for Community that handles inspections and results, and OCA coverage of any given version tends to lag the Odoo release by some months, so check the branch for the version you are actually deploying before promising it to anyone.

Do we need Studio to build an inspection form?

On Odoo 17, effectively yes. The worksheet route is the only way to get several fields into one check, and the worksheet module has a hard dependency on Studio with the design button limited to administrators. Odoo 18 removed that constraint with the spreadsheet test type. The follow up question is who maintains the template afterwards, since a worksheet edit is a Studio change on a live database and a spreadsheet edit is not. Most quality departments can own the second and cannot own the first.

Can we run an AQL sampling plan?

Not natively. Odoo offers a random percentage per control point and a percentage of each lot to test. Both are fixed rates, not a sampling table whose accept and reject numbers move with lot size and inspection level, and neither tightens or reduces based on recent history. Where a customer contract names an AQL, the sample size and accept number are worked out outside Odoo and recorded against the check, or built as an extension that sets the tested quantity from the received quantity.

Who can raise an alert, and does it cost a user seat?

A quality user raises alerts from a check, from a transfer or directly in the app. Every quality team also carries an email alias pointed at the alert model, so a production supervisor or someone in customer services can raise one by email without holding a full seat, and the message stays on the record as correspondence. Decide early which route you want. Two routes with no rule between them produces two alerts for the same defect and a duplicate hunt at month end.

How do we handle a check that a laboratory answers three days later?

Leave the check open and the transfer cannot be validated, which is a natural hold but keeps the goods out of stock entirely. If the receipt has to be booked while the result is pending, put the goods away into a restricted location and carry the laboratory result as a separate On-demand check, the frequency option added in Odoo 18 and raised from the transfer when the result arrives. Either way the release authority is named in the process rather than implied by who has access.

What can an auditor pull out of the system without our help?

From a lot, the two smart buttons return every check answered against it with the user and control date, and every alert raised. From an alert, the description, corrective action, preventive action, root cause and the assigned and closed dates, with attachments on the record. What an auditor cannot pull is whatever lives in a parallel spreadsheet, which is the usual reason a demonstration that started well turns awkward twenty minutes in.

Does quality work on subcontracted and repaired goods?

Subcontracting has a bridge that installs automatically when both apps are present, putting the check on the subcontracted receipt so the inspection happens where the goods arrive. Repair gained an equally automatic bridge in Odoo 18, so a repair order can carry checks. On Odoo 17 there is no repair bridge at all and that side has to be modelled another way, which is worth knowing before committing to a version.

How does this behave across companies and warehouses?

Control points, teams, checks and alerts are all company scoped with company consistency enforced between them, and a point requires at least one operation type, which belongs to a warehouse. A group with four warehouses therefore does not get one shared checklist by default. Either standardise the operation types across sites and hang a single point set on all of them, or accept a point set per site and impose a naming convention strict enough to keep them findable.

Related Operations modules