bworkx.

Reference build

Lab buildManufacturingERPNextFrappeManufacturing

Manufacturing ERP on ERPNext

A small-batch manufacturer running sales, purchasing, production, and stock in one ERPNext site — built and documented in the bworkx lab.

Problem. Orders, stock, and production plans lived in three different spreadsheets, so availability was always a guess.

Lab build. This is a reference implementation in the bworkx Frappe lab using a synthetic company, Demo Labs. It is not a client engagement. Figures are lab benchmarks, not client results.

The problem

A small-batch manufacturer with roughly 120 active items was running sales in one spreadsheet, purchasing in another, and production planning on a whiteboard. The symptoms are familiar:

  • Sales promised dates without checking material availability.
  • Purchasing ordered against gut feel, creating both stockouts and dead stock.
  • Production started without confirmed material, then waited.
  • Month-end stock valuation took two days and never fully reconciled.

The goal was not “implement an ERP”. It was to make one promise reliable: when we commit to a delivery date, we can meet it.

Scope

The lab build covered the full quote-to-dispatch path:

  1. Item and bill-of-materials setup for a representative product family.
  2. Sales quotations and sales orders with delivery-date commitments.
  3. Material requests and purchase orders triggered by demand.
  4. Work orders, job cards, and production planning.
  5. Stock entries, valuation, and dispatch.
  6. A small set of management reports.

Explicitly out of scope: payroll, full quality management, and multi-company consolidation. Keeping the boundary tight is what made the build finish.

Architecture

Frappe / ERPNext (single site)
├── Selling        quotation → sales order → delivery note
├── Buying         material request → purchase order → purchase receipt
├── Stock          warehouses, batches, valuation
├── Manufacturing  BOM → work order → job card → finished goods
└── Accounts       sales invoice → payment entry

No custom apps were required for the core flow. The build used standard doctypes plus:

  • Two custom fields on Sales Order (promised date reason, production priority).
  • One server script to block work-order release when materials are short.
  • Three query reports for availability, open orders by promised date, and production load.

Key workflows

Promise a date

The sales order carries a promised date. A server-side check compares required quantities against projected stock, including open purchase orders. If the date is not achievable, the order can still be saved but is flagged for review rather than silently accepted.

Trigger purchasing from demand

Material requests are generated from confirmed sales orders. Purchasing converts them to purchase orders with expected receipt dates. The projected-stock report then answers the only question that matters on the floor: will the material be here before we need it?

Release production

A work order cannot be released while any required material is short. This single rule removed most of the “we started, then waited” pattern that the spreadsheets were hiding.

Close the loop

Delivery notes reduce stock, sales invoices create receivables, and payment entries reconcile against bank transactions. Stock valuation is continuous rather than a month-end archaeology project.

What was actually hard

Units of measure. The same material was bought in kilograms, stored in bags, and consumed in grams. Getting conversion factors right, and visible, mattered more than any screen design.

Projected stock. ERPNext gives the raw ingredients, but “available to promise” is a business definition. We had to agree what counts: open purchase orders, work-in-progress, reserved stock, and safety stock. That agreement is now written down.

Production capacity. Routing and workstations are easy to configure and easy to over-model. The first version had six work centres for a shop with three real bottlenecks. We cut it back.

Data migration. Item masters looked clean until we tried to load them. Duplicate descriptions, missing UOMs, and inconsistent tax templates took longer than the configuration.

Lab benchmarks

Measured in the lab environment, not a production plant:

  • Quote-to-order entry: under 2 minutes for a standard configuration.
  • Projected-stock report: sub-second on roughly 5,000 stock ledger entries.
  • Work-order release validation: one query per release, no noticeable delay.
  • Month-end stock reconciliation: minutes instead of days, because valuation is continuous.

What I would do differently

Start with the promise date and work backwards. The first draft tried to model the whole shop floor, including scheduling detail the business did not use. The version that worked modelled only what changed a decision: material availability, capacity at the bottleneck, and the promised date.

Outcome. A single ERPNext site covering quote to dispatch, with a production plan that reflects real stock and capacity.

Next step

A similar build, for your business.

If this resembles the system you are trying to get to, the next step is a short conversation about your current setup.