Manufacturing Module Enhancement - First Cut

Hi all,

Based on my client’s own needs for enhancement from the manufacturing module and each of your inputs, I am cautiously optimistic I have capture most of the community’s requirements of the manufacturing module. Where I have not, please do let me know and I will add it in.

Here’s the first cut:

Track Manufacturing Workflows

Prioritization Engine, Prioritizes Production Orders based on:

Sales Orders
Payment Terms

Different Production Orders may have different prioritization parameters

Manual Overides of Production Plans

Bill of Material captures the Manufacturing Work Flow from the first Raw Material that is used to the finished goods.

The BoM captures the production work flows and should be suitable for all types of manufacturing:

Job Shop
Process (Continuous)
Process (Batch)

Within Job Shop, the Manufacturing Module should cater to both scenarios where the Manufactured Material moves through immovable machines or where the machines are brought to a workstation (for instance grinding machines, Welding machines, etc.) to work on the material being manufactured.

The Bill of Materials captures clearly:

The Operations that need to be performed, the workstation at which they need to be performed, the raw material required (as against the current BoM where all raw material is listed together and without context to the workstation where that raw material is “consumed”), this proposal suggests modification of the BoM to list down the raw material that is necessary at each Workstation.

A Workstation could be a workstation operated by the company in the same location, or it could be a workstation operated by the company in another (branch/factory) location or it could be a workstation operated by a sub contractor. The move times between workstations will be captured in a workstation matrix. Where a subcontracting operation is used, the minimum batch quantity needs to be specified. The UoM could change at this stage. For instance a factory producing automobile components generally uses Units or Nos for inhouse manufacturing. However for,say Heat Treatment, multiple components get aggregated and sent in KGs. The Unit Net Weight feature on ERPNext should come in handy in these types of situations.

Machine Class:

A machine class needs to be picked at each workstation. A machine class is like a Lathe, or a Drilling Machine, Or a Grinding Machine. All machines that require similar operator skills are grouped under a single machine class. In other words, if an operator is able to work on one machine in a machine class, s/he should be able to work on any machine in that class.

The Machine Class gets mapped with the Operator Skills that are required.


Each Machine Class comprises of individual machines. Here the machines are grouped by Manufacturer and Model, so that the maintenance, the tools required, the set up and the set down procedures are the same.

The Electricity, Consumables, Rent and AMC costs for each machine is captured.

As a Machine Class is selected in the BoM, all Machine possibilities are listed and the Set Up Time, the Manufacturing Time, the Set Down Time, Special Tools and Fixtures that are required needs to be captured in the Bill of Materials

Operator Skills Mapping captures the skills of the Operators against each machine class. The Labor Cost of each Operator is also captured and the extra cost of overtime is captured either as per regulatory requirements or for each operator.

All machines and operators are mapped on the calendar. The calendar receives inputs from the Holiday List and the Active Shift Documents to flag off active and inactive time slots on the calendar.

Labor law requirements of Operators being on shift is taken into account through the Work Hours restrictions document.

PPC is done at two stages:

Central PPC decides on the priorities of the Production Orders that need to be worked upon for a given week (or planning horizon).

The Production Supervisors decide on the loading of individual jobs and operators on the machines.

The Manufacturing Module consists of a Scheduling Engine that schedules the various jobs for manufacture on the various Machines and uses the appropriate operators. The module is capable of generating the Weekly production plan and the weekly operator requirements.

Each day, based on dynamics of Operator Availability and Machine availability, the module is able to suggest the optimal manufacturing schedule for that day, keeping alignment with the Weekly Priorities set by the Central PPC department.

The actual production is captured as production progresses depending upon the organization’s requirements (every hour, two hours, four hours, end of shift)

Once a day a material movement list is published by the module, which lists the raw materials and the special tools and fixtures that need to be delivered to different workstations so that production can proceed unhindered the next day. ‘

The Module should generate a Job Route card for the material that is being produced. This Job Route Card tags along with the material being produced and captures various information. The Job Route Card also clearly indicates whether ERPNext needs to be updated after the completion of
a particular operation (this information is captured in the BoM)

As the Material is manufactured, the Job Route card captures all the necessary information that is required and the Job Route Card indicates when ERPNext needs to be updated. All necessary information from the Job Route card will be keyed into ERPNext.

Configuration Settings can set globally:

  1. The Frequency of the Material Movement List
  2. The Frequency with which finished components at a workstation as sent to the next
  3. The Move Times and the Wait Before Move Times

As the material is manufactured, the cost of manufacturing is captured that includes the cost of raw material, labor cost (based on either actual cost of the operator that has worked on the operation or the weighted average cost of labor for that operation.

For each machine the Set Up Time, Run Time, Idle Time (During active days and shifts) and the inactive times is captured based on the entries that are made into ERPNext. Breakdowns and Preventive Maintenance schedules are also captured for analysis.

Similarly for each operator the idle and productive time is captured. These entries compute the amount due to each operator (where operators are paid per hour)

Each Immovable Machine and a Work Station (Job Shop) should be treated as a warehouse
and it should be possible to view whether a particular operation can be carried out based on availability of raw material, components; operator; special tools and fixtures

In a Job Shop type scenario, it should be possible:

  1. Where a Bom Exists, to just make a finished goods entry that will use the BoM to “consume” the raw material and components.
  2. Where no BoM exists, and as a manufacturing entry is passed, the operator should
    be given the option to create a BoM for the manufactured item with the raw materials that has been dropped into this workstation

Finished Product needs different UoM to be supported.

I have attempted to illustrate this through this complex worksheet I am attaching. This worksheet is still work in progress and I am hoping the community will pick individual components of this worksheet and make it more comprehensive and complete for the system analysts to be able to base their development plans on.

In addition there is the offline Manufacturing/Retail Module, that ensures that a Manufacturing Plant or a Retail Location can continue its operations even if there are disruptions to the Internet Access in that location. This is important for emerging markets that do not have good internet access in remote locations. Here’s the requirement:

Primary Install of ERPNext - ERPNext Hosted or AWS or whatever - Primary Server
Secondary Server at the factory/retail location - Company etc. is the same as the primary server;
The users, Warehouses and stocks at the Factory Location also get reflected on the Primary server

A user at the Primary server will try to complete a transaction. If the transaction is related to the Factory/retail location .AND. the connection is up, the transaction can be completed by the user. If the transaction is related to the Factory/retail location .AND, the connection is down, user gets an error saying link is down and s/he cannot complete the transaction

A user at the factory/retail location will try to complete a transaction. If the transaction is not related to the factory .AND. the connection is up, the transaction can be completed by the user. If the transaction is related to the Factory/retail location .AND, the connection is down, user can still complete the transaction

A Primary Server can have multiple secondary servers and if the access rights are permitted, one user related to a secondary server should be able to carry out a transaction at another secondary server or at any of the servers.


@JayRam all of that sounds like it would be great to add to the manufacturing module. What is your plan to get this developed?

I meant to add: The cost of raw material, labor and the variable cost of electricity, consumables, rent, AMC and special tools and fixtures.

Crowdfunding and crowdsourcing. Does the enhancement resonate with you?

I looks like you edited the content and deleted all the specifics? I just see a blank sheet after “Here’s the first cut”…

Yep. Looks like, doesn’t it? @rmehta: Did you have something to do with it? Do I repost the specifics or did you have other thoughts?

I have recovered it for now…

@JayRam @Ben_Cornwell_Mott I had moved to to a google sheet

I guess somehow it did not save!

For the Production Scheduler Engine, I can propose (and potentially implement) the following specific solution:

  1. The scheduler looks at all Open Production Orders and creates a list of all items/qty needed to produce.
  2. The system creates a Production Event (based on the Tasks doctype) for each Production Order (if it doesn’t already exist)
  3. The scheduler compares the list of in stock vs out of stock items and finds the Material Requests linked to obtaining the out of stock materials.
  4. The scheduler creates Production Event docs for each Material Request, filling in expected dates and times with the information from each material request. (Would check the status of linked SQs, Purchase Orders, Purchase Receipts, etc to find out % progress) - if this Production Event exists, it just updates the dates/values)
  5. The scheduler plugs in the dependent Production Events for each Production Order with the Material Request-based Production Events and child Production Order-based events.
  6. At this stage, the system knows/can figure out the earliest start date for each Production Order.
  7. The system goes through the list of Production Events (sorted by date, then a new field called Production Priority) and checks workstation availability, adjusting Production Event start date/times to meet Workstation schedules.

Once this is done, the system could show the entire Production Plan in a Gantt chart, which would be available to view at any time (not just after running the scheduler). These events could be refreshed either by the click of a button, on a periodic basis, or when Material Requests / Production Order status’ get changed. Separately, there would be a function to allow Timesheets to be build based on the production plan for a specific period of time (Today, This week, etc).
NOTE: Keeping the timesheets and production plan separate is important because the production plan will constantly be changing based on delays in ordering, receiving materials, building assemblies faster/slower than scheduled, etc.

The Production Priority is a field added to either the Production Order, the BOM, or the Item (my preference) that is a number used to rank the priority of different items. It will basically tell the system which assemblies to build first if all items are in stock.

There would be a Production Scheduler Engine settings menu with these options:

  1. Allow partial builds of Production Orders - used to start production orders if incomplete quantities of parts are in stock.
  2. Options for adding extra days to Material Request and Production Order processing (e.g. add 24 hours between creating Material Request and issuing SQ, another 2 days between SQ and Purchase Order)

Any comments / suggestions are welcome. It would be a fair amount of work, but I think bring badly needed functionality to ERPNext!


Excellent! You drive the Production Scheduler Engine. Let’s begin doing the mockups of the unstream (BoM) and downstream processes (material move lists, machine scheduling, operator scheduling, etc) from the PSE, identify the interdependencies and and requirements. Let me send you the mock up of the BoM today. You can then add the PSE requirements from the BoM.

Sounds okay?



Just wanted to let everybody know what @UmaG & I have begun the mockups on the manufacturing module. We will share the site next week, though the work will still be ongoing, for the community to comment, get involved, etc.







There are a few enhancements I can propose. These can come in later but, would be nice to consider during development, if everyone agrees.

  1. Expected time of delivery for an order (This is the #1 question a customer asks while placing his/her order)
  2. Forecasts ( At finished goods and raw material levels based on a suitable formula considering last year’s and last month’s performance. This is something Amazon does for its sellers ie. suggests ordering items based on past weeks sales)
  3. Maintenance module (example say we setup tool for preventive maintenance after 1000 operations, so the tool will keep a track of no of operations on the machine and remind when maintenance is due)
  4. Efficiency One of the most simple and effective Performance indexes in any operation is - efficiency
    We can easily calculate efficiency at a workstation if we have a database table containing->
    Machine number
    Part Number
    Number of operations/strokes per part
    Number of operators
    Target Cycle time

When this is referenced to actual data, we can easily calculate efficiency at the workstation/process line

For prioritization of orders could we have an customizable formula dependent on parameters-

  1. Customer Rating - We could add a customer rating based upon his credit score, reliability, history, profitability based on discount offered, etc.
  2. Date of order -
  3. Total common orders for the product ( In a make to stock scenario, we usually have one product which if made could satisfy a lot of customers rather than one or two)
  4. Manual Priority
    So a final prioritization would be 1xA+2xB+3xC+4xD.
    However if we could somehow keep this customizable, there’s nothing like it.
    We could also have priority modes → 1. Maximum no of Customers satisfied or 2. Maximum individual orders completed. (This is something similar to GPS where you get to choose between shortest distance or fastest time)

Hi all,

The trick with all enhancements is being able to break it off into small pieces, large enough to excite people, but small enough to manage.

With this in view, I think if we are able to deliver the first phase on the manufacturing module to deliver all components of this flow diagram, I think it would be a good start.

Please review and provide your inputs.




@JayRam, @UmaG
I am new to erpnext. Just started trying out it for myself. These could already be in erpnext… but i don’t understand it yet.

I am most consered about erpnext lacking theses things
A) Tractability
B) Work Flow
C) Signaling Requirements.
D) Automation of hard-copy reports / labels.

A) Tractability
All the following information for every operation needs to be recorded

  1. Who is the operator(s),
  2. What lot(s) of material did they use
  3. What machine did they use
  4. When did they do the step
    ie. Each part being added to the main bom needs a line for trace-ability.

B) Work Flow:
During set up the ability to bundle logging together to keep the process easy. like trase-aibility requires each of this information for each part but it is a pita to not group all the actions togeather.
also less menus, less etc like a cashier set up perhaps

C) Signaling Requirements.
We would need some way to link what is happening on erpnext to the products that are on the shop floor
I.E. every pile of stuff needs at the minimum a hard label with. Part#, Description, Lot# , Date (exp et), Qty per package.
I would suggest logistics bar codes like GS1-128
to link the hard labels to erpnext

D) Automation
The ability to automatically print labels/ reports at any stage.

hahaha sent early,
Just wanted to let you know what would help the subset of feeding tube mfg.
I hope this helps you.

I would be interested in this module specially.
Has there been any progress?

Hi Everyone!
Few inputs from my side:

  1. There should be a shortage stock allocation for specific projects/order.
  2. It should have a way to transfer the shop-floor stock from one project/order to another project/order.
  3. Shortage Report should include only those stock which are not allocated to any project/order and pending to receive. It would be good, if we have a drill down report which shows the further detail of the same.
  4. MTO (Make To Order) has a workflow that, they initially check the free stock (not allocated to any project/order) and based on that we check availability of the same.
  5. We will be able to control our production and inventory, if our Material Request has multiple delivery dates for 1 item.
  6. Core Manufacturing also includes the outside Jobwork-Challan, RGP (Returnable Gate Pass) , NRGP (Non-Returnable Gate Pass) etc.

Ruchin Sharma

1 Like

@JayRam It has been more than a year since start of this thread.(Jan 2016)
Could you please share status of this project?

I am happy to make this module in collaboration with others. Can set the ball rolling by setting up module, doctypes, etc.

1 Like

What is current status on development

1 Like