Manufacturing Module Phase 1 - Signoff on Scope and Let's Execute!

Hi all,

Here’s the workflow of the scope of Phase 1 of the manufacturing module. Please review and let’s close scope by mid of next week and then line up funding and start executing on this. Tagging everybody that’s had anything to do with the manufacturing module.

@Ben_Cornwell_Mott @woakes070048 @corbincavolt @strixaluco @tara_antonius @hiousi @Nathan @mulyadi-agtechsg @user002 @dominik

Everybody is welcome to provide inputs and get involved in this enhancement.

The approach is the following:

Phase 1: Most things are done manually, with user intervention, but we ensure that an organization can get the data that is necessary: Like how busy their machines are. Which operators are working on which machines, operator and machine productivity, etc.

As various organizations deploy this module, data will emerge and I am sure we will be able to identify opportunities for automation at that stage.

Let’s also discuss the governance of getting this implemented.



Thanks for doing this. I’ve got a couple questions to spur discussion.

  1. With the Assign Existing Stocks: Is this basically the same thing as Material Transfer for Manufacturing is currently, or is this meant to put material on hold for a specific job?
  2. Can you explain the Job Route Card and Order into Batches system a bit.
1 Like

Hi Ben,

The assign stocks process is to put material on hold for a specific job. The material move sheets is the result of the material transfer for manufacture. Both from the raw material store to the shop floor and on the shop floor from one process/workstation/operation to the other.

I am assuming that some organizations will need to track on ERPNext every process/operation while others will only want to track only a few discrete points. This is specified in the BOM. But in addition one has to specify whether that process or step or operation needs to be tracked on ERPNext. Most organizations may only want to do end of the day/shift entries on ERPNext.

So a Job Route Card is a way by which the shop floor knows what processes/operations are complete and where next to send the WiP material to. I’m proposing that ERPNext generates the Job Route Card that gets tagged with the material and goes around on the shop floor. As a process/operation gets completed , the operator/supervisor makes the appropriate entries (as defined in the BOM) on the Job Route Card itself and sends the material onto the next process and location. The processes/operations where ERPNext needs to be entered is printed in bold or another color, so the operator/supervisor knows that s/he needs to update ERPNext about having completed that process/operation.

Let’s say you have a Product P that flow’s through the following processes:


For simplicity’s sake let’s say that you want to track every process.

Let’s say you receive an order for 100 Nos of P and you already have the following in stock:

P - 20 Nos
D - 15 Nos
C - 10 Nos
B - 25 Nos
A - 5 Nos.

So when you run the Assign Stock process, all of these stocks get assigned to this Production Order and ERPNext generates the following Job Route Cards:

PROD12345-D-P-15: For converting D to P for 15 Nos.

PROD12345-C-P-10: For converting C to P for 10 Nos.

PROD12345-B-P-25: For converting B to P for 25 Nos.

PROD12345-D-P-15: For converting A to P for 5 Nos.

PROD12345-RM-P-25: For converting RM to P for 25 Nos.

Batches: Different machines and operations have different capacities. For instance, here A could be on a lathe that turns out one component every 10 minutes, whereas B could be on a Drilling machine that could turn out one component every 2 minutes. Plus there is dependence on the number of machines of each category. So if you want to make 20 components and you have 5 Machines, you may want to break this up into 5 Batches of 4 components each. So the ability to break it up into batches gives the production supervisor the flexibility to do this, while still ensuring that traceability of machines, operators, etc. can be maintained. Also most organizations will want to plan their production activities for a shift, half shift, 2 Hours etc. So the other function of the batch is to ensure that the batch fits the planning horizon (or time interval) of the batch.

Please let me know if I’m complicating things way too much.




There’s a lot of really good stuff here.

I will keep thinking of improvements as I spend more time thinking, but here are some initial thoughts.

  1. I feel like the batch system is unnecessary as a separate document. I think having a few tools for splitting and combining production orders would be just as useful. For example, if I have 3 production orders for the same item, I can combine them into a single one with a few clicks. Or if I have one large production order and I want to split it across the available workstations, it will convert the one into multiple production orders.
  2. I’m not sure how we can “reserve” material for jobs within the current ERP framework unless we have temporary warehouses for each job (which might be a decent solution). The other thing about reserving material is that priority is then based on the sequence of production orders entered into the system. Lets say I have 5 units of material in stock and another 5 arriving. I have one job in my queue that will use 5 pieces, but it’s not a big priority. If I then have another job that is rush that will use 5 pieces, based on the stock assignments I will have to wait until the spare material comes in, even though I have enough in stock to start this job. I think ERP already does a pretty good job of showing when material is required through the production planning tool, but maybe we add a field that counts the reserved qty based on sales and production orders to keep track of what we need without “reserving” it.
  3. With the job route cards, it seems like each process in your example is in fact a separate item, with 5 BOMs. I think the key to a Job Route is for actual operations on the same BOM. For example, if I have RM that needs to be drilled, tapped and cut, there are specific acceptable sequences. I could drill, tap and cut, or I could cut, drill, then tap, or I could drill, cut, then tap. The benefit of having multiple routes is that I might be able to better utilize my workstations (if the cutting workstation is free but the drill station is not, I can use that station first instead of letting my work back up). I think the Job Route ties much more into the Production Scheduling than anything else because until you know the availability of machines, the job routing isn’t important.
  4. With your example for the order of 100 Ps, the production planning tool should be able to create separate production orders for those quantities of parts as you’ve described. I think it works correctly now (on V8), but I could be wrong. I think I remember fixing that issue.

@JayRam Would you have an extra step after BOM Creation to check stock availability before assigning stock.

1 Like

Yes, it would check stocks and assign stocks.

  1. Production Orders and Child Production Orders: I’m with you in spirit. But in letter, for some instinctive reason I think that having a single Production Order for an item of X quantity will make it easier from a tracking perspective than having multiple Production Orders for the same quantity. Its like a project. A single project (X Nos) can have 4 tasks of X/4 Nos each. But you could also break it up into 4 Sub Projects for X/4 Nos each. I’m fine with either approach and in both cases we will anyways build the tracking mechanisms to see how the main or parent Production Order is doing.

  2. Reserving Stock: You make an excellent point about priorities while assigning stocks. So “Priorities from Central PPC” should have a arrow leading into the “Assign Stocks” box. The only point of assign stocks operation is to ensure that the organization flushes out existing stocks before making more of the same item. But yeah, moving those stocks tons reserved warehouse is one way to ensure that. I haven’t figured out the way to programmatically implement some of these things. Let’s define the business requirements first and then map it to ease of implementation or coding at the next stage. We could and should, at that time rationalize the scope for Phase 1 based on ease.

  3. Job Route Card against Routings: I’m with you. The routings information is captured on the BOM, so, when the Production Supervisor starts loading jobs onto machines or operators, ERPNext gives him the most important jobs to the least important jobs. Next to each job is the number of alternate routings for that job and the Supervisor can be trained to ensure that s/he allocates the least flexible jobs first (number of routings = 1) and then the more flexible jobs. That should ensure optimization of machines, jobs and operators.

Maybe I confused you by using the term Route in the Job Route Card. Would it help if we called it the Shop Floor Tracker.

I wouldn’t to as far as to say that in my example it is 5 separate BOMs. I’d say that its a single BOM but with different start points. The end point of all those activities if of course the Product P. Or maybe you could call it 5 different BOMs. I don’t think I should get caught up on terminology, but should look at functionality.

But its great we are having this discussion and fleshing this out.



1 Like

Thanks for the response, and I think we’re making progress on getting to the core functionality that we want.

  1. I’m mainly just thinking of how to simplify the system as much as possible. I think we should try to minimize the number of documents that exist, because I think that will make the system overly complicated for users. From what I can see the functionality of a batch is basically the same as the functionality of a Production Order, but maybe I’m missing something.
  2. I think that all we need to achieve the goal here (making sure you flush out existing stock, order the correct amount of supplemental stock and don’t under-order stock because you think you have excess) can be done by adding a count to the system of “reserved” for each item. Basically it would act the same way as the requested count that is currently part of ERPNext. Every time a new production order or sales order is created, the reserved count of each item that is being reserved is adjusted. If the reserved quantity ever goes above the amount in stock, ordered or requested, the system throws an error telling you it can’t reserve the stock. I don’t think we need anything more than this, even in the most sophisticated system.

I guess my issue with the example you gave is that there was stock of each stage when the order of 100 came in. In my mind, if you can keep stock of something it needs to have an unique item code. I know this creates a challenge for orders with multiple operations, as you technically can have work in process items that aren’t assigned item codes in the system. I think that if we want to resolve that issue, we might need to auto-generate item codes for these in-process items.

Thank you @JayRam for the effor and discussion.

First and foremost, this seems like an overhaul of existing module.

One basic thing that I think we need to modify in ERPNext and I am also sure it is a big change is changing the terminology of Warehouse to Location with sub categories of Warehouse, Production Station, Stores.

Back to the module, the workflow is fine but I have to agree to make the module as simple as possible for users. I assume the Job Route Cards have status and each of them are able to be scheduled via Gantt View.

We need to think of quality checks on each machine during Job Route and scraps as well especially when a Production Stop.

We also need to think on how to integrate Operators with Timesheet.

Hey, Great to see this gaining momentum towards execution!

First, (sorry for going a bit off-topic here) I feel that a few additions to HR Module will be core for manufacturing module to be implemented fruitfully, including - 1. Shifts , 2. Over-time, 3.Skill-matrix (machines operable, etc.) & 4.Performance (how efficiently a person has worked). Could we do a separate project on this in parallel?

Next, on to the module -

  1. Batch/ Child Production Order → The Production order progress tracker should be good for this.
    Merge and Split production orders would be good enough for most situations.
    A “Merge all” orders of same product could also be handy for Non-Lean processes having an associated setup time.

Also Splitting could automatically give names to the split production orders. Example. 1505 split into 2 would give 1505A and 1505B.

There should also be an option to finish production order without completing it.
For Example, say we have a production order for 100 pieces of Product A. We prepare child parts for 100 pieces, however at one of the stages 2 child parts get rejected. Most times it is not worth producing 2 child parts. A “finish production order” button would be helpful in such scenarios.

  1. Job route: Optimizations here would maximise machine utilization, but should also ensure that no processes further down the line stop due unavailability of parts.

Based on the above we would have 3 doctypes -

  1. Machines - A department/machine tree would be good here. It could have details about type and may be links to operations linked to it. Maintenance and cost accounting related fields could be added.

  2. Operations -
    -Operation Name,
    -M/C Number,
    -Number of operators required,
    -Ideal Cycle Time, (Would help in scheduling & finding efficiency)
    -Number of operations per part (For repetitive operations eg. 4 drills on same machine)

  3. Updated BOM with operations-

  4. Input Child Parts, Output Parts, Operation#1

  5. Input child parts, Output Parts, Operations#2 or Input child parts, Output Parts, Operations#3

  6. Input Child Parts, Output Parts, Operation#4

1 Like

Sorry for late comments on this issue:

I think its a great idea and thanks for making this an improvement to erpnext manufacturing module,

Several ideas that i can think of is:

  1. to put offline and online capabilities in the manufacturing module, so that every manufacturing process
    can be done offline or online.

  2. to link workstation/operations with the manufacturing process, so we can split production orders into multiple
    operations and we can track the progress of every workstation on the production process.

  3. BOM should be normal bom and reverse bom. many of my clients also need to have BOM in reverse as their production phase require them to dismantle the raw material as a production process.

  4. There should be a way to include overhead costs in every BOM calculations, right now i am doing with with a report that calculate average overhead costs in every period of the balance sheet and adding that cost as an “fixed” amount of value inside the BOM calculation process. however if this can be done automagically then its the best!!

Overall this is some ideas that I can think of,

Thanks and best wishes for the new manufacturing module

@pankajwadkar: Please review the workflow diagram at the beginning of this thread. I know it is at a very high level, but if we execute something close to that, would that help your business?



@JayRam I had gone through the workflow diagram and I think assigning Existing Stocks, Generate Job route card and Split Order Into batches will help to improve the production flow.
Is there any provision to combine the Production order for similar parts which are dispatching to other customer with different Part No?

I think you should have a single part in your item master, but use the customer part number feature in the item master to ensure that you invoice your customers according to their Part #s.

Please let me know if you need any help in setting this up.



Hi there, @Ben_Cornwell_Mott

Interesting thoughts you present here… As for our particular use case, being able to explicitly “reserve” and “cancel reserves” for material would be a must. And, if a priority system was to be implemented, that could help the production manager take action quickly when a “rush” job comes up.

I mean: when registering a new BOM for a recently arrived Production Order, it would be great to see all stock for each item (only when there’s any, of course), split into “free”, “reserved for job1”, “reserved for job 2”. That way we can choose (if necessary) to “borrow” material (preferably from the same screen, to make the process as swift as possible) from another low-priority production order.

Of course, that would then register the need to supply new “replacement” material for the job from which we just borrowed.

Hope I managed to express myself clearly. This “manufacturing module” overhaul will be really beneficial for many workshops/industries :thumbsup:

This is a great effort, lots of interesting ideas.

One thing that would be very beneficial would be the opportunity to define and register “control points” within the manufacturing process (sorry if it’s there and I missed it). That would make it easier to integrate QA (Quality Assurance) requirements into production workflows.

Users should be able to define as many (if any) control points as are needed for their process, and whether each registry (some may, some may not) is mandatory to “advance” WiP to the next production stage.

The way I see it, different products might have different production workflows, and different control points. So probably a sort of pre-defined “template” system could work here.

Of course, I’m simply a user, so I limit myself to “require”. Not sure this is technically feasible, or the amount of development effort involved.

Hi @abelinux,

I think the requirement you have is simply to know how many items that are currently in stock (in a given warehouse) are needed for the production orders that not started. Right now we keep track of items In Stock Qty, Requested Qty and Ordered Qty (through the Bin document). I think that simply adding another field here for Reserved for Production will address your needs without physically allocating stock to any given production order. As soon as there isn’t enough In Stock + Ordered Qty to address the current production orders, the Requested Qty is incremented.

You could add a feature to see for any given item what the related production orders are and the quantity required for each., potentially with the ability to re-arrange the priority on the spot.

This is minimally intrusive to the current system and still provides all the functionality (unless I’m missing something).

This would be pretty much it. The interesting part would be to know which (if any) of those “related-PO items” is currently in existence (because it was bought for another job but hasn’t been consumed yet), so that it can be re-arranged to cover the gap for the new, higher priority production order.

In a Manufacture to Order Scenario, for example in a Machine Shop, the raw material keeps changing for an item
Imagine a part 50mm dia and 25mm length… item A
so bom for item A
raw material 55mm dia and 100mm length >>>> would make 4 nos per raw material

the above raw material can keep varying with lengths and diameter
so as the raw material keeps changing, the bom also changes
hence multiple bom for a single item occurs
but while creating a PO, only the default BOM is used
the user needs the flexibility to change the BOM as per stock available or manually select the BOM
change in raw material size is a common issue in a manufacturing industry
it happens due to the following reasons
lack of correct raw material size in the market
use of available raw material in house
most of the machined components raw material comes in lengths (one length of aluminium is 3660mm)
so a length can be cut in to various sizes and the fed to machines so the length factor remains a variable
hence flexibility in selecting BOM in Purchase Order or Production Order Level would be a great advantage