Odoo consultants for regulated manufacturers · code you keep

Life sciences · Odoo guide

How do I track batch records for a compounding pharmacy in Odoo?

Model each compounding batch as mrp.production with lot-tracked components and finished lot, attach master formula on mrp.bom, and capture weigh dispense steps on work orders or quality checks. Store environmental monitoring and pharmacist verification on quality.check or custom batch record forms linked to stock.lot for release and distribution traceability.

By Chase Robbins, Operator & Founder at The ERP Firm · Last updated October 24, 2026

Steps

  1. Define formula as mrp.bom with controlled components, potencies, and revision on BOM reference field.
  2. Enable lot tracking on ingredients and finished compounded product with expiration on stock.lot.
  3. Create MO per batch; reserve specific ingredient lots via move lines with potency adjustments if modeled.
  4. Use quality.point for in-process checks (pH, weight, visual) on work order steps.
  5. Attach PDF batch record or structured fields via custom model linked to mrp.production and lot.
  6. Release finished lot with approval group; block delivery pickings until quality state is pass.
  7. Trace dispenses to patients or prescribers via delivery orders or serial/lot on outgoing moves.

Common mistakes

  • Using generic MOs without linking to formula revision numbers.
  • Allowing ingredient swaps without controlled BOM alternate approval.
  • Missing potency adjustment on active ingredient quantities.
  • Shipping before quality.check release on finished lot.
  • Storing batch records only outside Odoo without lot linkage.

Odoo version notes

Compounding workflows typically use Enterprise MRP, Quality, and Expiry on Odoo 16–18; Community needs OCA or custom batch record models. Regulatory expectations exceed standard Odoo—plan validation and Part 11 controls. Upgrade carefully: retest custom batch forms and signature flows on 17/18 staging.

FAQ

Follow-up questions

Can Odoo replace a dedicated LIMS?
Often partially—Odoo handles inventory, MO, and trace; specialized testing may still integrate via API.
How do we handle formula revisions?
Version BOMs with effective dates and prevent MOs from using obsolete BOM via domain or approval.
What about beyond-use dating?
Set expiration_time on product and compute expiration_date on finished lot at production completion.

Book a scoping call for your Odoo environment.

Bring your version, user count, and the workflow that is blocked today.

Book a scoping call